@rotki/ui-library 2.12.1 → 2.12.2

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 (147) hide show
  1. package/dist/components/accordions/accordion/RuiAccordion.vue.js +1 -1
  2. package/dist/components/accordions/accordions/RuiAccordions.vue.js +1 -1
  3. package/dist/components/alerts/RuiAlert.vue.d.ts +2 -2
  4. package/dist/components/alerts/RuiAlert.vue2.js +1 -1
  5. package/dist/components/buttons/button/RuiButton.vue2.js +1 -1
  6. package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js +1 -1
  7. package/dist/components/calendar/RuiCalendar.vue.js +1 -1
  8. package/dist/components/calendar/RuiCalendarGrid.vue2.js +1 -1
  9. package/dist/components/calendar/RuiCalendarHeader.vue2.js +1 -1
  10. package/dist/components/calendar/RuiCalendarMenu.vue2.js +1 -1
  11. package/dist/components/cards/RuiCard.vue.d.ts +1 -1
  12. package/dist/components/cards/RuiCard.vue2.js +1 -1
  13. package/dist/components/cards/RuiCardHeader.vue2.js +1 -1
  14. package/dist/components/chips/RuiChip.vue.d.ts +1 -1
  15. package/dist/components/chips/RuiChip.vue2.js +1 -1
  16. package/dist/components/color-picker/RuiColorBoard.vue2.js +6 -2
  17. package/dist/components/color-picker/RuiColorBoard.vue2.js.map +1 -1
  18. package/dist/components/color-picker/RuiColorDisplay.vue.js +1 -1
  19. package/dist/components/color-picker/RuiColorHue.vue2.js +8 -2
  20. package/dist/components/color-picker/RuiColorHue.vue2.js.map +1 -1
  21. package/dist/components/color-picker/RuiColorInput.vue.js +1 -1
  22. package/dist/components/color-picker/RuiColorPicker.vue.js +6 -2
  23. package/dist/components/color-picker/RuiColorPicker.vue.js.map +1 -1
  24. package/dist/components/date-time-picker/RuiDateTimePicker.vue.d.ts +4 -4
  25. package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js +5 -5
  26. package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js.map +1 -1
  27. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.js +1 -1
  28. package/dist/components/divider/RuiDivider.vue.js +6 -3
  29. package/dist/components/divider/RuiDivider.vue.js.map +1 -1
  30. package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +17 -34
  31. package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js +18 -9
  32. package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js.map +1 -1
  33. package/dist/components/forms/checkbox/RuiCheckbox.vue.d.ts +2 -2
  34. package/dist/components/forms/checkbox/RuiCheckbox.vue2.js +2 -2
  35. package/dist/components/forms/checkbox/RuiCheckbox.vue2.js.map +1 -1
  36. package/dist/components/forms/radio-button/radio/RuiRadio.vue.d.ts +1 -1
  37. package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js +2 -2
  38. package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js.map +1 -1
  39. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.d.ts +1 -1
  40. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js +2 -2
  41. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js.map +1 -1
  42. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.d.ts +3 -3
  43. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js +4 -2
  44. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js.map +1 -1
  45. package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +17 -17
  46. package/dist/components/forms/select/RuiMenuSelect.vue2.js +14 -7
  47. package/dist/components/forms/select/RuiMenuSelect.vue2.js.map +1 -1
  48. package/dist/components/forms/select/RuiSimpleSelect.vue.d.ts +3 -1
  49. package/dist/components/forms/select/RuiSimpleSelect.vue2.js +8 -4
  50. package/dist/components/forms/select/RuiSimpleSelect.vue2.js.map +1 -1
  51. package/dist/components/forms/slider/RuiSlider.vue.d.ts +2 -2
  52. package/dist/components/forms/slider/RuiSlider.vue2.js +10 -8
  53. package/dist/components/forms/slider/RuiSlider.vue2.js.map +1 -1
  54. package/dist/components/forms/switch/RuiSwitch.vue.d.ts +1 -1
  55. package/dist/components/forms/switch/RuiSwitch.vue2.js +2 -2
  56. package/dist/components/forms/switch/RuiSwitch.vue2.js.map +1 -1
  57. package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +3 -3
  58. package/dist/components/forms/text-area/RuiTextArea.vue2.js +8 -8
  59. package/dist/components/forms/text-area/RuiTextArea.vue2.js.map +1 -1
  60. package/dist/components/forms/text-field/RuiTextField.vue.d.ts +6 -6
  61. package/dist/components/forms/text-field/RuiTextField.vue2.js +5 -5
  62. package/dist/components/forms/text-field/RuiTextField.vue2.js.map +1 -1
  63. package/dist/components/helpers/RuiFormTextDetail.vue.js +1 -1
  64. package/dist/components/helpers/RuiFormTextDetail.vue.js.map +1 -1
  65. package/dist/components/icons/RuiIcon.vue2.js +3 -6
  66. package/dist/components/icons/RuiIcon.vue2.js.map +1 -1
  67. package/dist/components/index.d.ts +2 -2
  68. package/dist/components/loaders/RuiSkeletonBase.vue2.js +1 -1
  69. package/dist/components/loaders/RuiSkeletonLoader.vue2.js +1 -1
  70. package/dist/components/logos/RuiLogo.vue.js +3 -1
  71. package/dist/components/logos/RuiLogo.vue.js.map +1 -1
  72. package/dist/components/overlays/badge/RuiBadge.vue.d.ts +3 -3
  73. package/dist/components/overlays/badge/RuiBadge.vue2.js +1 -1
  74. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js +1 -1
  75. package/dist/components/overlays/dialog/RuiDialog.vue.d.ts +4 -3
  76. package/dist/components/overlays/dialog/RuiDialog.vue2.js +11 -5
  77. package/dist/components/overlays/dialog/RuiDialog.vue2.js.map +1 -1
  78. package/dist/components/overlays/menu/RuiMenu.vue.d.ts +1 -1
  79. package/dist/components/overlays/menu/RuiMenu.vue2.js +6 -4
  80. package/dist/components/overlays/menu/RuiMenu.vue2.js.map +1 -1
  81. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.d.ts +4 -3
  82. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js +9 -4
  83. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js.map +1 -1
  84. package/dist/components/overlays/notification/RuiNotification.vue.d.ts +1 -1
  85. package/dist/components/overlays/notification/RuiNotification.vue.js +3 -1
  86. package/dist/components/overlays/notification/RuiNotification.vue.js.map +1 -1
  87. package/dist/components/overlays/tooltip/RuiTooltip.vue.d.ts +1 -1
  88. package/dist/components/overlays/tooltip/RuiTooltip.vue2.js +7 -3
  89. package/dist/components/overlays/tooltip/RuiTooltip.vue2.js.map +1 -1
  90. package/dist/components/progress/RuiProgress.vue.d.ts +1 -1
  91. package/dist/components/progress/RuiProgress.vue2.js +1 -1
  92. package/dist/components/steppers/RuiFooterStepper.vue2.js +15 -8
  93. package/dist/components/steppers/RuiFooterStepper.vue2.js.map +1 -1
  94. package/dist/components/steppers/RuiStepper.vue.d.ts +1 -1
  95. package/dist/components/steppers/RuiStepper.vue2.js +9 -4
  96. package/dist/components/steppers/RuiStepper.vue2.js.map +1 -1
  97. package/dist/components/steppers/RuiStepperCustomIcon.vue2.js +1 -1
  98. package/dist/components/steppers/RuiStepperIcon.vue2.js +1 -1
  99. package/dist/components/tables/RuiDataTable.vue2.js +28 -24
  100. package/dist/components/tables/RuiDataTable.vue2.js.map +1 -1
  101. package/dist/components/tables/RuiExpandButton.vue2.js +3 -2
  102. package/dist/components/tables/RuiExpandButton.vue2.js.map +1 -1
  103. package/dist/components/tables/RuiTableHead.vue2.js +1 -1
  104. package/dist/components/tables/RuiTablePagination.vue.d.ts +1 -1
  105. package/dist/components/tables/RuiTablePagination.vue2.js +12 -5
  106. package/dist/components/tables/RuiTablePagination.vue2.js.map +1 -1
  107. package/dist/components/tabs/tab/RuiTab.vue.d.ts +2 -2
  108. package/dist/components/tabs/tab/RuiTab.vue2.js +9 -6
  109. package/dist/components/tabs/tab/RuiTab.vue2.js.map +1 -1
  110. package/dist/components/tabs/tab-item/RuiTabItem.vue.d.ts +1 -1
  111. package/dist/components/tabs/tab-item/RuiTabItem.vue2.js +2 -1
  112. package/dist/components/tabs/tab-item/RuiTabItem.vue2.js.map +1 -1
  113. package/dist/components/tabs/tab-items/RuiTabItems.vue.d.ts +1 -1
  114. package/dist/components/tabs/tab-items/RuiTabItems.vue2.js +1 -1
  115. package/dist/components/tabs/tabs/RuiTabs.vue.d.ts +1 -1
  116. package/dist/components/tabs/tabs/RuiTabs.vue2.js +1 -1
  117. package/dist/components/time-picker/RuiTimePicker.vue2.js +21 -4
  118. package/dist/components/time-picker/RuiTimePicker.vue2.js.map +1 -1
  119. package/dist/composables/icons.js +1 -1
  120. package/dist/composables/icons.js.map +1 -1
  121. package/dist/composables/popper.js +3 -3
  122. package/dist/composables/popper.js.map +1 -1
  123. package/dist/composables/theme.js +7 -4
  124. package/dist/composables/theme.js.map +1 -1
  125. package/dist/icons/icons_1.d.ts +15 -15
  126. package/dist/icons/icons_1.js +96 -96
  127. package/dist/icons/icons_1.js.map +1 -1
  128. package/dist/icons/icons_2.d.ts +38 -38
  129. package/dist/icons/icons_2.js +255 -255
  130. package/dist/icons/icons_2.js.map +1 -1
  131. package/dist/icons/icons_3.d.ts +26 -26
  132. package/dist/icons/icons_3.js +153 -153
  133. package/dist/icons/icons_3.js.map +1 -1
  134. package/dist/icons/icons_4.d.ts +37 -2
  135. package/dist/icons/icons_4.js +192 -17
  136. package/dist/icons/icons_4.js.map +1 -1
  137. package/dist/icons/index.d.ts +1 -1
  138. package/dist/icons/index.js +1 -1
  139. package/dist/icons/index.js.map +1 -1
  140. package/dist/index.js +65 -30
  141. package/dist/style.css +26 -26
  142. package/dist/vite-plugin/index.js +4 -4
  143. package/dist/vite-plugin/index.js.map +1 -1
  144. package/dist/vite-plugin/scanner.js +3 -3
  145. package/dist/vite-plugin/scanner.js.map +1 -1
  146. package/dist/web-types.json +43 -24
  147. package/package.json +28 -34
@@ -1 +1 @@
1
- {"version":3,"file":"RuiDataTable.vue2.js","sources":["../../../src/components/tables/RuiDataTable.vue"],"sourcesContent":["<script\n lang=\"ts\"\n setup\n generic=\"T extends object, IdType extends keyof T = keyof T\"\n>\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiCheckbox from '@/components/forms/checkbox/RuiCheckbox.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiTooltip from '@/components/overlays/tooltip/RuiTooltip.vue';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\nimport RuiExpandButton from '@/components/tables/RuiExpandButton.vue';\nimport RuiTableHead, { type GroupData, type GroupKeys, type NoneSortableTableColumn, type SortColumn, type TableColumn, type TableRowKey, type TableRowKeyData, type TableSortData } from '@/components/tables/RuiTableHead.vue';\nimport RuiTablePagination, { type TablePaginationData } from '@/components/tables/RuiTablePagination.vue';\nimport noDataPlaceholder from '@/components/tables/table_no_data_placeholder.svg';\nimport noDataPlaceholderDark from '@/components/tables/table_no_data_placeholder_dark.svg';\nimport { assert } from '@/utils/assert';\n\nexport interface TableOptions<T> {\n pagination?: TablePaginationData;\n sort?: TableSortData<T>;\n}\n\nexport interface GroupHeader<T> {\n __header__: true;\n identifier: string;\n group: Partial<T>;\n}\n\nexport type GroupedTableRow<T> = T | GroupHeader<T>;\n\nexport interface Props<T, K extends keyof T> {\n /**\n * list of items for each row\n */\n rows: T[];\n /**\n * the attribute used to identify each row uniquely for selection, usually `id`\n */\n rowAttr: K;\n /**\n * model for selected rows, add a v-model to support row selection\n */\n modelValue?: T[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 * model for paginating data\n * @example v-model:pagination=\"{ total: 10, limit: 5, page: 1 }\"\n */\n pagination?: TablePaginationData;\n /**\n * modifiers for specifying externally paginated tables\n * use this when api controls pagination\n * @example v-model:pagination.external=\"{ total: 10, limit: 5, page: 1 }\"\n */\n paginationModifiers?: {\n external: boolean;\n };\n /**\n * model for sort column/columns data\n * single column sort\n * @example v-model:sort=\"{ column: 'name', direction: 'asc' }\"\n * multi columns sort\n * @example v-model:sort=\"[{ column: 'name', direction: 'asc' }]\"\n */\n sort?: TableSortData<T>;\n /**\n * modifiers for specifying externally sorted tables\n * use this when api controls sorting\n * single column sort\n * @example v-model:sort.external=\"{ column: 'name', direction: 'asc' }\"\n * multi columns sort\n * @example v-model:sort.external=\"[{ column: 'name', direction: 'asc' }]\"\n */\n sortModifiers?: {\n external: boolean;\n };\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 * 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 * model for expanded rows\n */\n expanded?: T[];\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 /**\n * model for grouping column/columns data\n * single column grouping\n * @example v-model:group=\"'name'\"\n * multi columns grouping\n * @example v-model:group=\"['name', 'country']\"\n */\n group?: TableRowKeyData<T>;\n groupExpandButtonPosition?: 'start' | 'end';\n collapsed?: T[];\n disabledRows?: T[];\n multiPageSelect?: boolean;\n scroller?: HTMLElement | null;\n itemClass?: ((item: T) => string) | string;\n}\n\ndefineOptions({\n name: 'RuiDataTable',\n});\n\nconst props = withDefaults(defineProps<Props<T, IdType>>(), {\n modelValue: undefined,\n search: '',\n cols: undefined,\n itemsPerPage: 10,\n pagination: undefined,\n columnAttr: 'label',\n sort: undefined,\n loading: false,\n dense: false,\n outlined: false,\n paginationModifiers: undefined,\n sortModifiers: undefined,\n empty: () => ({ label: 'No item found' }),\n rounded: 'md',\n hideDefaultHeader: false,\n hideDefaultFooter: false,\n disablePerPage: false,\n striped: false,\n expanded: undefined,\n singleExpand: false,\n stickyHeader: false,\n stickyOffset: undefined,\n globalItemsPerPage: undefined,\n group: undefined,\n collapsed: undefined,\n disabledRows: undefined,\n multiPageSelect: false,\n groupExpandButtonPosition: 'start',\n scroller: undefined,\n itemClass: '',\n});\n\nconst emit = defineEmits<{\n (e: 'update:model-value', value?: T[IdType][]): void;\n (e: 'update:expanded', value: T[]): void;\n (e: 'update:pagination', value: TablePaginationData): void;\n (e: 'update:sort', value?: TableSortData<T>): void;\n (e: 'update:options', value: TableOptions<T>): void;\n (e: 'update:group', value?: GroupKeys<T>): void;\n (e: 'update:collapsed', value?: T[]): void;\n (e: 'copy:group', value: GroupData<T>): void;\n}>();\n\nconst slots = defineSlots<\n Partial<Record<`header.${string}`, (props: {\n column: TableColumn<T>;\n }) => any>\n & Record<`item.${string}`, (props: {\n column: TableColumn<T>;\n row: T;\n index: number;\n }) => any>\n & {\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: {\n header: GroupHeader<T>;\n groupKey: string;\n }) => 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 { stickyHeader, collapsed, modelValue, disabledRows } = toRefs(props);\nconst tableDefaults = useTable();\n\nconst { isDark } = useRotkiTheme();\n\nconst stickyHeaderOffset = computed(() => props.stickyOffset !== undefined ? props.stickyOffset : get(tableDefaults.stickyOffset));\n\nfunction isRow<T extends object>(item: GroupedTableRow<T>): item is T {\n return !('__header__' in item);\n}\n\nfunction isHeaderSlot(slotName: string): slotName is `header.${string}` {\n return slotName.startsWith('header.');\n}\n\nconst { stick, table, tableScroller } = useStickyTableHeader(\n stickyHeader,\n get(stickyHeaderOffset),\n);\n\nconst expandable = computed(() => props.expanded && slots['expanded-item']);\n\nconst headerSlots = computed<`header.${string}`[]>(() =>\n Object.keys(slots).filter(isHeaderSlot),\n);\n\nconst globalItemsPerPageSettings = computed(() => {\n if (props.globalItemsPerPage !== undefined)\n return props.globalItemsPerPage;\n\n return get(tableDefaults.globalItemsPerPage);\n});\n\nconst getKeys = <T extends object>(t: T) => Object.keys(t) as TableRowKey<T>[];\n\nconst groupKeys: ComputedRef<TableRowKey<T>[]> = computed(() => {\n const groupBy = props.group;\n\n if (!groupBy) {\n // no grouping\n return [];\n }\n\n if (!Array.isArray(groupBy)) {\n // currently only supports a single grouping\n // only the first item in the array is used\n return [groupBy];\n }\n\n return groupBy;\n});\n\nconst groupKey = computed(() => get(groupKeys).join(':'));\n\nconst isGrouped = computed(() => !!get(groupKey));\n\n/**\n * Prepare the columns from props or generate using first item in the list\n */\nconst columns = computed<TableColumn<T>[]>(() => {\n const data\n = props.cols\n ?? getKeys(props.rows[0] ?? {}).map(\n key =>\n ({\n key,\n [props.columnAttr]: String(key),\n }) satisfies NoneSortableTableColumn<T>,\n );\n\n const hasExpandColumn = data.some(row => row.key === 'expand');\n\n if (get(expandable) && !hasExpandColumn) {\n return [\n ...data,\n {\n key: 'expand' as TableRowKey<T>,\n sortable: false,\n class: 'w-16',\n cellClass: '!py-0 w-16',\n align: 'end',\n } satisfies NoneSortableTableColumn<T>,\n ];\n }\n\n const groupByKeys = get(groupKeys);\n\n if (groupByKeys.length === 0)\n return data;\n\n return data.filter(\n column => !groupByKeys.includes(column.key as TableRowKey<T>),\n );\n});\n\nconst itemsLength = ref(0);\n\nconst selectedData = computed<T[IdType][] | undefined>({\n get() {\n return get(modelValue);\n },\n set(value) {\n emit('update:model-value', value);\n },\n});\n\nconst internalSelectedData: Ref<T[IdType][]> = ref([]);\n\nwatchImmediate(modelValue, (modelValue) => {\n set(internalSelectedData, modelValue);\n});\n\nconst rowIdentifier = computed(() => props.rowAttr);\n\nconst internalPaginationState: Ref<TablePaginationData | undefined> = ref();\nconst collapsedRows: Ref<T[]> = ref([]);\n\nconst pagination = computed(() => props.pagination);\n\nwatchImmediate(pagination, (pagination) => {\n set(internalPaginationState, pagination);\n});\n\nwatchImmediate(collapsed, (value) => {\n set(collapsedRows, value ?? []);\n});\n\n/**\n * Pagination is different for search\n * since search is only used for internal filtering\n * we return the length of search results as total\n */\nconst paginationData: Ref<TablePaginationData> = computed({\n get() {\n const paginated = get(internalPaginationState);\n if (!paginated) {\n return {\n total: get(itemsLength),\n limit: props.itemsPerPage,\n page: 1,\n };\n }\n\n if (props.paginationModifiers?.external)\n return paginated;\n\n return {\n total: get(itemsLength),\n limit: paginated.limit,\n page: paginated.page,\n limits: paginated.limits,\n };\n },\n set(value: TablePaginationData) {\n set(internalPaginationState, value);\n emit('update:pagination', value);\n emit('update:options', {\n pagination: value,\n sort: props.sort,\n });\n },\n});\n\nconst sortData = computed({\n get() {\n return props.sort;\n },\n set(value) {\n if (!props.multiPageSelect)\n onToggleAll(false);\n resetCheckboxShiftState();\n emit('update:sort', value);\n emit('update:options', {\n sort: value,\n pagination: get(pagination),\n });\n },\n});\n\n/**\n * A mapping of the sort columns\n * for easily checking if a column is sorted instead of looping through the array\n */\nconst sortedMap = computed(() => {\n const mapped: Partial<Record<TableRowKey<T>, SortColumn<T>>> = {};\n const sortBy = get(sortData);\n if (!sortBy)\n return mapped;\n\n if (!Array.isArray(sortBy)) {\n if (sortBy.column)\n mapped[sortBy.column] = sortBy;\n\n return mapped;\n }\n\n return sortBy.reduce((acc, curr) => {\n if (!curr.column)\n return acc;\n\n return { ...acc, [curr.column]: curr };\n }, mapped);\n});\n\n/**\n * rows filtered based on search query if it exists\n */\nconst searchData = computed<T[]>(() => {\n const query = props.search?.toLocaleLowerCase();\n if (!query)\n return props.rows;\n\n return props.rows.filter(row =>\n getKeys(row).some(key =>\n `${row[key]}`.toLocaleLowerCase().includes(query),\n ),\n );\n});\n\n/**\n * sort the search results\n */\nconst sorted: ComputedRef<T[]> = computed(() => {\n const sortBy = get(sortData);\n const data = [...get(searchData)];\n if (!sortBy || props.sortModifiers?.external)\n return data;\n\n const sortOptions: Intl.CollatorOptions = { sensitivity: 'accent', usage: 'sort' };\n\n const sort = (by: SortColumn<T>) => {\n data.sort((a, b) => {\n const column = by.column;\n if (!column)\n return 0;\n\n let [aValue, bValue] = [a[column], b[column]];\n if (by.direction === 'desc')\n [aValue, bValue] = [bValue, aValue];\n\n const aNumber = Number(aValue);\n const bNumber = Number(bValue);\n if (!isNaN(aNumber) && !isNaN(bNumber))\n return aNumber - bNumber;\n\n return `${aValue}`.localeCompare(\n `${bValue}`,\n undefined,\n sortOptions,\n );\n });\n };\n\n if (!Array.isArray(sortBy))\n sort(sortBy);\n else\n [...sortBy].reverse().forEach(sort);\n\n return data;\n});\n\n/**\n * comprises search, sorted paginated, and grouped data\n */\nconst mappedGroups = computed<Record<string, GroupedTableRow<T>[]>>(() => {\n if (!get(isGrouped)) {\n // no grouping\n return {};\n }\n\n const result = get(sorted);\n const identifier = props.rowAttr;\n\n return result.reduce((acc: Record<string, GroupedTableRow<T>[]>, row) => {\n if (!isDefined(row[identifier]) || row[identifier] === '')\n return acc;\n\n const group = getRowGroup(row);\n const groupVal = Object.values(group).filter(isDefined).join(',');\n if (!acc[groupVal]) {\n acc[groupVal] = [\n {\n __header__: true,\n group,\n identifier: groupVal,\n } satisfies GroupHeader<T>,\n ];\n }\n\n acc[groupVal].push(row);\n\n return acc;\n }, {});\n});\n\n/**\n * comprises search, sorted paginated, and grouped data\n */\nconst grouped = computed<GroupedTableRow<T>[]>(() => {\n const result = get(sorted);\n const groupByKey = get(groupKey);\n\n if (!groupByKey) {\n // no grouping\n return result;\n }\n\n return Object.values(get(mappedGroups)).flatMap(grouped => grouped);\n});\n\n/**\n * comprises search, sorted and paginated data\n */\nconst filtered = computed<GroupedTableRow<T>[]>(() => {\n const result = get(grouped);\n\n const paginated = get(paginationData);\n const limit = paginated.limit;\n if (paginated && !props.paginationModifiers?.external) {\n const start = (paginated.page - 1) * limit;\n const end = start + limit;\n const preGroups = result.slice(0, start + 1).filter(item => !isRow(item));\n const postGroups = result.slice(start + 1, end + preGroups.length).filter(item => !isRow(item));\n const data = result.slice(start + preGroups.length, end + preGroups.length + postGroups.length);\n const nearestGroup = preGroups.at(-1);\n if (data.length > 0) {\n // if our first item is not a group, push in the nearest group\n const firstItem = data[0];\n assert(firstItem);\n if (isRow(firstItem) && nearestGroup)\n data.unshift(nearestGroup);\n const lastItem = data.at(-1);\n // if our last item is a group, remove it\n if (lastItem && !isRow(lastItem))\n data.pop();\n }\n\n return data.filter(row => !isHiddenRow(row));\n }\n\n return result.filter(row => !isHiddenRow(row));\n});\n\n/**\n * list if ids of the visible table rows used for check-all and uncheck-all\n */\nconst visibleIdentifiers = computed<T[IdType][]>(() => {\n const selectBy = props.rowAttr;\n\n if (!selectBy)\n return [];\n\n return get(filtered)\n .filter(isRow)\n .map(row => row[selectBy]);\n});\n\n/**\n * Flag to know when all rows are selected for the current screen\n */\nconst isAllSelected = computed<boolean>(() => {\n const selectedRows = get(selectedData);\n if (!selectedRows)\n return false;\n\n return (\n selectedRows.length > 0\n && get(visibleIdentifiers).every(id => selectedRows.includes(id))\n );\n});\n\nconst indeterminate = computed(() => {\n const selectedRows = get(selectedData);\n if (!selectedRows)\n return false;\n\n return selectedRows.length > 0 && !get(isAllSelected);\n});\n\nconst noData = computed(() => get(filtered).length === 0);\n\nconst colspan = computed(() => {\n let columnLength = get(columns).length;\n if (get(selectedData))\n columnLength++;\n\n return columnLength;\n});\n\nconst isSortedBy = (key: TableRowKey<T>) => key in get(sortedMap);\n\nfunction getSortIndex(key: TableRowKey<T>) {\n const sortBy = get(sortData);\n\n if (!sortBy || !Array.isArray(sortBy) || !isSortedBy(key))\n return -1;\n\n return sortBy.findIndex(sort => sort.column === key) ?? -1;\n}\n\nfunction isSelected(identifier: T[IdType]) {\n const selection = get(selectedData);\n if (!selection)\n return false;\n\n return selection.includes(identifier);\n}\n\nfunction isDisabledRow(rowKey: T[IdType]) {\n const identifier = props.rowAttr;\n if (!identifier)\n return false;\n\n return !!get(disabledRows)?.some((disabledRow: T) => rowKey === disabledRow[identifier]);\n}\n\nfunction isExpanded(identifier: T[IdType]) {\n const { expanded } = props;\n if (!expanded?.length)\n return false;\n\n return expanded.some(data => data[props.rowAttr] === identifier);\n}\n\nfunction onToggleExpand(row: T) {\n const { expanded } = props;\n if (!expanded)\n return;\n\n const key = props.rowAttr;\n const rowExpanded = isExpanded(row[key]);\n\n if (props.singleExpand)\n return emit('update:expanded', rowExpanded ? [] : [row]);\n\n return emit(\n 'update:expanded',\n rowExpanded\n ? expanded.filter(item => item[key] !== row[key])\n : [...expanded, row],\n );\n}\n\nfunction getRowGroup(row: T): Partial<T> {\n return get(groupKeys).reduce((acc, key) => ({ ...acc, [key]: row[key] }), {});\n}\n\nfunction getGroupRows(groupVal: string) {\n if (!get(isGrouped))\n return [];\n\n const groupRows = get(mappedGroups)[groupVal];\n assert(groupRows);\n return groupRows.filter(isRow);\n}\n\nfunction compareGroupsFn(a: T, b: Partial<T>) {\n const group = get(groupKeys);\n if (group.length === 0)\n return false;\n\n return group.every(key => a[key] === b[key]);\n}\n\nfunction isExpandedGroup(value: Partial<T>) {\n return get(collapsedRows).every(row => !compareGroupsFn(row, value));\n}\n\nfunction isHiddenRow(row: GroupedTableRow<T>) {\n const identifier = props.rowAttr;\n return (\n get(isGrouped)\n && get(collapsedRows).some(\n value => isRow(row) && row[identifier] === value[identifier],\n )\n );\n}\n\nfunction onToggleExpandGroup(group: Partial<T>, value?: string) {\n if (!value)\n return;\n\n const collapsed = get(collapsedRows);\n\n const groupExpanded = isExpandedGroup(group);\n\n const groupRows = getGroupRows(value);\n\n set(\n collapsedRows,\n groupExpanded\n ? [...collapsed, ...groupRows]\n : collapsed.filter(row => !compareGroupsFn(row, group)),\n );\n\n emit('update:collapsed', get(collapsedRows));\n}\n\nfunction onUngroup() {\n set(collapsedRows, []);\n\n emit('update:collapsed', []);\n emit('update:group', Array.isArray(props.group) ? [] : undefined);\n}\n\nfunction onCopyGroup(value: GroupData<T>) {\n emit('copy:group', value);\n}\n\n/**\n * Sort to handle single sort or multiple sort columns\n */\nfunction onSort({\n key,\n direction,\n}: {\n key: TableRowKey<T>;\n direction?: 'asc' | 'desc';\n}) {\n const sortBy = get(sortData);\n if (!sortBy)\n return;\n\n if (!Array.isArray(sortBy)) {\n if (isSortedBy(key)) {\n const newDirection = !direction || direction === 'asc' ? 'desc' : 'asc';\n\n if (sortBy.direction === newDirection) {\n set(sortData, { ...sortBy, column: undefined, direction: 'asc' });\n }\n else {\n set(sortData, {\n ...sortBy,\n direction: sortBy.direction === 'asc' ? 'desc' : 'asc',\n });\n }\n }\n else {\n set(sortData, { column: key, direction: direction || 'asc' });\n }\n return;\n }\n\n if (isSortedBy(key)) {\n const newDirection = !direction || direction === 'asc' ? 'desc' : 'asc';\n\n const index = getSortIndex(key);\n const sortByCol = sortBy[index];\n assert(sortByCol);\n\n if (sortByCol.direction === newDirection)\n sortBy.splice(index, 1);\n else\n sortByCol.direction = sortByCol.direction === 'asc' ? 'desc' : 'asc';\n\n set(sortData, sortBy);\n }\n else {\n set(sortData, [...sortBy, { column: key, direction: direction || 'asc' }]);\n }\n}\n\nfunction isSelectable(rowKey: T[IdType]): boolean {\n return isSelected(rowKey) || !isDisabledRow(rowKey);\n}\n\nfunction mustSelect(rowKey: T[IdType]): boolean {\n return isSelected(rowKey) && isDisabledRow(rowKey);\n}\n\n/**\n * toggles selected rows\n * @param {boolean} checked checkbox state\n */\nfunction onToggleAll(checked: boolean) {\n const selectedRows = get(selectedData);\n\n if (!isDefined(selectedRows)) {\n return;\n }\n\n if (!props.multiPageSelect) {\n if (checked)\n set(selectedData, get(visibleIdentifiers).filter(isSelectable));\n else\n set(selectedData, get(visibleIdentifiers).filter(mustSelect));\n }\n else {\n if (checked) {\n set(\n selectedData,\n Array.from(new Set(\n [\n ...selectedRows,\n ...get(visibleIdentifiers).filter(isSelectable),\n ],\n )),\n );\n }\n else {\n set(\n selectedData,\n selectedRows.filter(rowKey => !get(visibleIdentifiers).includes(rowKey) || get(visibleIdentifiers).filter(mustSelect).includes(rowKey)),\n );\n }\n }\n}\n\nconst shiftClicked: Ref<boolean> = ref(false);\nconst lastSelectedIndex: Ref<number> = ref(-1);\n\nfunction resetCheckboxShiftState() {\n set(shiftClicked, false);\n set(lastSelectedIndex, -1);\n}\n\n/**\n * toggles a single row\n * @param {boolean} checked checkbox state\n * @param {string} value the id of the selected row\n * @param {boolean} userAction whether the select triggered by user manually\n *\n */\nfunction onSelect(checked: boolean, value: T[typeof props.rowAttr], userAction = false) {\n if (get(shiftClicked) && userAction)\n return;\n\n const selectedRows = get(internalSelectedData);\n if (!selectedRows)\n return false;\n\n const selected = isSelected(value);\n\n if (checked && !selected) {\n set(internalSelectedData, [...selectedRows, value]);\n }\n else if (!checked && selected) {\n set(\n internalSelectedData,\n [...selectedRows].filter(r => r !== value),\n );\n }\n\n if (userAction)\n set(selectedData, get(internalSelectedData));\n}\n\nfunction onCheckboxClick(event: any, value: T[typeof props.rowAttr], index: number) {\n const input = event.currentTarget.querySelector('input');\n const nodeName = event.target.nodeName;\n\n const shiftKey = event.shiftKey;\n set(shiftClicked, shiftKey);\n\n if (input && nodeName !== 'INPUT') {\n if (shiftKey) {\n setTimeout(() => {\n let lastIndex = get(lastSelectedIndex);\n if (lastIndex === -1)\n lastIndex = index;\n const tableData = get(filtered);\n const lastSelectedData = tableData[lastIndex];\n assert(lastSelectedData);\n\n if (isRow(lastSelectedData)) {\n const id = get(rowIdentifier);\n const valueToApply = isSelected(lastSelectedData[id]);\n\n if (lastIndex === index) {\n onSelect(!valueToApply, value);\n }\n else {\n const from = Math.min(lastIndex, index);\n const to = Math.max(lastIndex, index);\n\n for (let i = from; i <= to; i++) {\n const currSelectedData = tableData[i];\n assert(currSelectedData);\n if (isRow(currSelectedData) && !isDisabledRow(currSelectedData[id]))\n onSelect(valueToApply, currSelectedData[id]);\n }\n }\n\n set(lastSelectedIndex, index);\n set(selectedData, get(internalSelectedData));\n }\n }, 1);\n }\n\n else { set(lastSelectedIndex, index); }\n }\n}\n\nconst search = computed(() => props.search);\n\nfunction deselectRemovedRows() {\n get(selectedData)?.forEach((key: T[IdType]) => {\n if (isSelected(key) && !get(visibleIdentifiers).includes(key))\n onSelect(false, key, true);\n });\n}\n\nfunction onPaginate() {\n emit('update:expanded', []);\n if (!props.multiPageSelect)\n onToggleAll(false);\n resetCheckboxShiftState();\n}\n\nfunction setInternalTotal(items: GroupedTableRow<T>[]) {\n if (!props.paginationModifiers?.external)\n set(itemsLength, items.filter(isRow).length);\n}\n\nfunction cellValue(row: T, key: TableColumn<T>['key']) {\n return row[key as TableRowKey<T>];\n}\n\n/**\n * Keeps the global items per page in sync with the internal state.\n */\nwatch(internalPaginationState, (pagination) => {\n if (pagination?.limit && get(globalItemsPerPageSettings))\n set(tableDefaults.itemsPerPage, pagination.limit);\n});\n\nwatch(tableDefaults.itemsPerPage, (itemsPerPage) => {\n if (!get(globalItemsPerPageSettings))\n return;\n\n set(paginationData, {\n ...get(paginationData),\n limit: itemsPerPage,\n });\n});\n\n/**\n * on changing search query, need to reset pagination page to 1\n */\nwatch(search, () => {\n set(paginationData, {\n ...get(paginationData),\n page: 1,\n });\n onToggleAll(false);\n resetCheckboxShiftState();\n});\n\nwatch(sorted, (items) => {\n if (!props.multiPageSelect)\n deselectRemovedRows();\n setInternalTotal(items);\n});\n\n/**\n * Automatically adjust page when current page exceeds maximum available pages\n * This can happen when total data decreases while user is on a higher page\n */\nwatch(paginationData, (pagination) => {\n const { total, limit, page } = pagination;\n const maxPages = Math.ceil(total / limit);\n\n if (maxPages > 0 && page > maxPages) {\n set(paginationData, {\n ...pagination,\n page: maxPages,\n });\n }\n});\n\nonMounted(() => {\n setInternalTotal(get(sorted));\n\n if (!get(globalItemsPerPageSettings))\n return;\n\n set(paginationData, {\n ...get(paginationData),\n limit: get(tableDefaults.itemsPerPage),\n });\n});\n</script>\n\n<template>\n <div\n :class=\"[\n $style.wrapper,\n $style[`rounded__${rounded}`],\n { [$style.outlined]: outlined },\n ]\"\n >\n <RuiTablePagination\n v-if=\"paginationData && !hideDefaultHeader\"\n v-model=\"paginationData\"\n :dense=\"dense\"\n :loading=\"loading\"\n :disable-per-page=\"disablePerPage\"\n data-cy=\"table-pagination\"\n @update:model-value=\"onPaginate()\"\n />\n <div\n ref=\"tableScroller\"\n :class=\"$style.scroller\"\n >\n <table\n ref=\"table\"\n :class=\"[$style.table, { [$style.dense]: dense }]\"\n aria-label=\"\"\n >\n <RuiTableHead\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 :no-data=\"noData\"\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\"\n :loading=\"loading\"\n :capitalize-headers=\"!cols\"\n :colspan=\"colspan\"\n :column-attr=\"columnAttr\"\n :columns=\"columns\"\n :dense=\"dense\"\n :no-data=\"noData\"\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 <tbody :class=\"[$style.tbody, { [$style['tbody--striped'] ?? '']: striped }]\">\n <slot\n v-if=\"slots['body.prepend']\"\n :colspan=\"colspan\"\n name=\"body.prepend\"\n />\n <template v-for=\"(row, index) in filtered\">\n <tr\n v-if=\"!isRow(row)\"\n :key=\"`row-${index}`\"\n :class=\"[$style.tr, $style.tr__group]\"\n >\n <slot\n name=\"group.header\"\n :colspan=\"colspan\"\n :header=\"row\"\n :is-open=\"isExpandedGroup(row.group)\"\n :toggle=\"() => onToggleExpandGroup(row.group, row.identifier)\"\n >\n <td\n :class=\"[$style.td]\"\n class=\"!p-2\"\n :colspan=\"colspan\"\n >\n <div class=\"flex items-center gap-2\">\n <RuiExpandButton\n v-if=\"groupExpandButtonPosition === 'start'\"\n :expanded=\"isExpandedGroup(row.group)\"\n @click=\"onToggleExpandGroup(row.group, row.identifier)\"\n />\n <slot\n :group-key=\"groupKey\"\n name=\"group.header.content\"\n :header=\"row\"\n >\n <span>{{ groupKey }}: {{ row.identifier }}</span>\n <RuiButton\n size=\"sm\"\n variant=\"text\"\n icon\n @click=\"\n onCopyGroup({ key: groupKey, value: row.group })\n \"\n >\n <RuiIcon\n name=\"lu-copy\"\n size=\"16\"\n />\n </RuiButton>\n </slot>\n <RuiTooltip\n :popper=\"{ placement: 'top' }\"\n class=\"ml-auto mr-2\"\n >\n <template #activator>\n <RuiButton\n size=\"sm\"\n variant=\"text\"\n icon\n @click=\"onUngroup()\"\n >\n <RuiIcon\n name=\"lu-trash-2\"\n size=\"14\"\n />\n </RuiButton>\n </template>\n Ungroup\n </RuiTooltip>\n <RuiExpandButton\n v-if=\"groupExpandButtonPosition === 'end'\"\n :expanded=\"isExpandedGroup(row.group)\"\n @click=\"onToggleExpandGroup(row.group, row.identifier)\"\n />\n </div>\n </td>\n </slot>\n </tr>\n <template v-else>\n <tr\n :key=\"`row-${index}`\"\n :class=\"[\n $style.tr,\n { [$style.tr__selected ?? '']: isSelected(row[rowIdentifier]) },\n typeof itemClass === 'string' ? itemClass : itemClass(row),\n ]\"\n >\n <td\n v-if=\"selectedData\"\n :class=\"$style.checkbox\"\n colspan=\"1\"\n rowspan=\"1\"\n >\n <RuiCheckbox\n :data-cy=\"`table-toggle-check-${index}`\"\n :model-value=\"isSelected(row[rowIdentifier])\"\n :disabled=\"isDisabledRow(row[rowIdentifier])\"\n :size=\"dense ? 'sm' : undefined\"\n color=\"primary\"\n class=\"select-none\"\n hide-details\n @update:model-value=\"onSelect($event, row[rowIdentifier], true)\"\n @click=\"onCheckboxClick($event, row[rowIdentifier], index)\"\n />\n </td>\n\n <td\n v-for=\"(column, subIndex) in columns\"\n :key=\"subIndex\"\n :class=\"[\n $style.td,\n column.cellClass,\n $style[`align__${column.align ?? 'start'}`],\n ]\"\n :colspan=\"column.colspan ?? 1\"\n :rowspan=\"column.rowspan ?? 1\"\n >\n <slot\n v-if=\"column.key === 'expand'\"\n :name=\"`item.${column.key.toString()}`\"\n :column=\"column\"\n :row=\"row\"\n :index=\"index\"\n >\n <RuiExpandButton\n v-if=\"!slots['item.expand']\"\n :expanded=\"isExpanded(row[rowIdentifier])\"\n @click=\"onToggleExpand(row)\"\n />\n </slot>\n <slot\n v-else\n :column=\"column\"\n :index=\"index\"\n :name=\"`item.${column.key.toString()}`\"\n :row=\"row\"\n >\n {{ cellValue(row, column.key) }}\n </slot>\n </td>\n </tr>\n\n <tr\n v-if=\"expandable && isExpanded(row[rowIdentifier])\"\n :key=\"`row-expand-${index}`\"\n :class=\"[$style.tr, $style.tr__expandable]\"\n >\n <td\n :colspan=\"colspan\"\n :class=\"[$style.td]\"\n >\n <slot\n name=\"expanded-item\"\n :row=\"row\"\n :index=\"index\"\n />\n </td>\n </tr>\n </template>\n </template>\n <tr\n v-if=\"loading && noData\"\n >\n <td\n :class=\"$style.tbody__loader\"\n :colspan=\"colspan\"\n >\n <RuiProgress\n color=\"primary\"\n variant=\"indeterminate\"\n circular\n />\n </td>\n </tr>\n <tr\n v-if=\"noData && empty && !loading\"\n :class=\"[$style.tr, $style.tr__empty]\"\n >\n <Transition\n appear\n enter-active-class=\"transition ease-out duration-200 delay-200\"\n enter-from-class=\"opacity-0 translate-y-1\"\n enter-to-class=\"opacity-100 translate-y-0\"\n leave-active-class=\"transition ease-in duration-150\"\n leave-from-class=\"opacity-100 translate-y-0\"\n leave-to-class=\"opacity-0 translate-y-1\"\n >\n <td\n :class=\"$style.td\"\n :colspan=\"colspan\"\n >\n <slot name=\"no-data\">\n <div :class=\"$style.empty\">\n <img\n :src=\"isDark ? noDataPlaceholderDark : noDataPlaceholder\"\n :alt=\"empty.label\"\n class=\"h-32\"\n />\n <p\n v-if=\"empty.label\"\n :class=\"$style.empty__label\"\n >\n {{ empty.label }}\n </p>\n\n <slot name=\"empty-description\">\n <p\n v-if=\"empty.description\"\n :class=\"$style.empty__description\"\n >\n {{ empty.description }}\n </p>\n </slot>\n </div>\n </slot>\n </td>\n </Transition>\n </tr>\n <slot\n v-if=\"slots['body.append']\"\n :colspan=\"colspan\"\n name=\"body.append\"\n />\n </tbody>\n <tfoot>\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 :disable-per-page=\"disablePerPage\"\n data-cy=\"table-pagination\"\n @update:model-value=\"onPaginate()\"\n />\n </div>\n</template>\n\n<style module lang=\"scss\">\n.wrapper {\n @apply relative divide-y divide-black/[0.12] overflow-hidden;\n &.outlined {\n @apply border border-black/[0.12];\n }\n\n &.rounded__sm {\n @apply rounded-[.25rem];\n\n .image {\n @apply rounded-t-[.25rem];\n }\n }\n\n &.rounded__md {\n @apply rounded-[.75rem];\n\n .image {\n @apply rounded-t-[.75rem];\n }\n }\n\n &.rounded__lg {\n @apply rounded-[1rem];\n\n .image {\n @apply rounded-t-[1rem];\n }\n }\n\n .scroller {\n @apply overflow-x-auto overflow-y-hidden;\n clip-path: inset(0 0 0 0);\n }\n\n .table {\n @apply min-w-full table-fixed divide-y divide-black/[0.12] whitespace-nowrap mx-auto my-0 max-w-fit relative border-black/[0.12];\n\n .tbody {\n @apply divide-y divide-black/[0.12];\n\n &--striped {\n > .tr {\n &:nth-child(even) {\n @apply bg-rui-grey-50;\n }\n }\n }\n\n > .tr {\n @apply hover:bg-black/[0.04];\n\n &__selected {\n @apply bg-rui-primary/[0.08];\n }\n\n &__empty {\n @apply hover:bg-transparent;\n }\n\n &__expandable {\n @apply bg-[#f9fafb] hover:bg-[#f9fafb];\n }\n\n &__group {\n @apply bg-black/[0.02];\n }\n\n .td {\n @apply p-4 text-rui-text text-body-2;\n text-wrap: initial;\n\n &.align__start {\n @apply text-left rtl:text-right;\n }\n\n &.align__center {\n @apply text-center;\n }\n\n &.align__end {\n @apply text-right rtl:text-left;\n }\n\n .empty {\n @apply flex flex-col gap-3 items-center justify-center flex-1 min-h-[4.4rem] my-4;\n\n &__label {\n @apply text-body-1 leading-none font-bold text-center text-current pb-0 mb-0;\n }\n\n &__description {\n @apply text-body-2 text-center text-rui-text-secondary pb-0 mb-0;\n }\n }\n }\n }\n\n &__loader {\n @apply py-8 text-center;\n }\n }\n\n .checkbox {\n @apply px-2 w-[3.625rem] max-w-[3.625rem];\n label {\n @apply ml-0;\n }\n }\n\n &.dense {\n .tbody {\n .td {\n @apply py-[0.38rem];\n }\n }\n }\n }\n}\n\n:global(.dark) {\n .wrapper {\n @apply divide-white/[0.12];\n\n &.outlined {\n @apply border-white/[0.12];\n }\n\n .table {\n @apply divide-white/[0.12] border-white/[0.12];\n\n .tbody {\n @apply divide-white/[0.12];\n\n &--striped {\n > .tr {\n &:nth-child(even) {\n @apply bg-rui-grey-900;\n }\n }\n }\n\n > .tr {\n @apply hover:bg-white/[0.04];\n\n &__selected {\n @apply bg-rui-dark-primary/[0.08];\n }\n\n &__expandable {\n @apply bg-[#121212] hover:bg-[#121212];\n }\n\n &__group {\n @apply bg-white/[0.02];\n }\n }\n }\n }\n }\n}\n</style>\n"],"names":["_useSlots","modelValue","pagination","grouped","collapsed","_createElementBlock","_normalizeClass","$style","_unref","_createBlock","_createElementVNode","_createVNode","_renderList","_withCtx","_renderSlot","_normalizeProps","_guardReactiveProps","_openBlock","_Fragment","_toDisplayString","_createTextVNode","_Transition"],"mappings":"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"}
1
+ {"version":3,"file":"RuiDataTable.vue2.js","sources":["../../../src/components/tables/RuiDataTable.vue"],"sourcesContent":["<script\n lang=\"ts\"\n setup\n generic=\"T extends object, IdType extends keyof T = keyof T\"\n>\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiCheckbox from '@/components/forms/checkbox/RuiCheckbox.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiTooltip from '@/components/overlays/tooltip/RuiTooltip.vue';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\nimport RuiExpandButton from '@/components/tables/RuiExpandButton.vue';\nimport RuiTableHead, { type GroupData, type GroupKeys, type NoneSortableTableColumn, type SortColumn, type TableColumn, type TableRowKey, type TableRowKeyData, type TableSortData } from '@/components/tables/RuiTableHead.vue';\nimport RuiTablePagination, { type TablePaginationData } from '@/components/tables/RuiTablePagination.vue';\nimport noDataPlaceholder from '@/components/tables/table_no_data_placeholder.svg';\nimport noDataPlaceholderDark from '@/components/tables/table_no_data_placeholder_dark.svg';\nimport { useTable } from '@/composables/defaults/table';\nimport { useStickyTableHeader } from '@/composables/sticky-header';\nimport { useRotkiTheme } from '@/composables/theme';\nimport { assert } from '@/utils/assert';\n\nexport interface TableOptions<T> {\n pagination?: TablePaginationData;\n sort?: TableSortData<T>;\n}\n\nexport interface GroupHeader<T> {\n __header__: true;\n identifier: string;\n group: Partial<T>;\n}\n\nexport type GroupedTableRow<T> = T | GroupHeader<T>;\n\nexport interface Props<T, K extends keyof T> {\n /**\n * list of items for each row\n */\n rows: T[];\n /**\n * the attribute used to identify each row uniquely for selection, usually `id`\n */\n rowAttr: K;\n /**\n * model for selected rows, add a v-model to support row selection\n */\n modelValue?: T[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 * model for paginating data\n * @example v-model:pagination=\"{ total: 10, limit: 5, page: 1 }\"\n */\n pagination?: TablePaginationData;\n /**\n * modifiers for specifying externally paginated tables\n * use this when api controls pagination\n * @example v-model:pagination.external=\"{ total: 10, limit: 5, page: 1 }\"\n */\n paginationModifiers?: {\n external: boolean;\n };\n /**\n * model for sort column/columns data\n * single column sort\n * @example v-model:sort=\"{ column: 'name', direction: 'asc' }\"\n * multi columns sort\n * @example v-model:sort=\"[{ column: 'name', direction: 'asc' }]\"\n */\n sort?: TableSortData<T>;\n /**\n * modifiers for specifying externally sorted tables\n * use this when api controls sorting\n * single column sort\n * @example v-model:sort.external=\"{ column: 'name', direction: 'asc' }\"\n * multi columns sort\n * @example v-model:sort.external=\"[{ column: 'name', direction: 'asc' }]\"\n */\n sortModifiers?: {\n external: boolean;\n };\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 * 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 * model for expanded rows\n */\n expanded?: T[];\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 /**\n * model for grouping column/columns data\n * single column grouping\n * @example v-model:group=\"'name'\"\n * multi columns grouping\n * @example v-model:group=\"['name', 'country']\"\n */\n group?: TableRowKeyData<T>;\n groupExpandButtonPosition?: 'start' | 'end';\n collapsed?: T[];\n disabledRows?: T[];\n multiPageSelect?: boolean;\n scroller?: HTMLElement | null;\n itemClass?: ((item: T) => string) | string;\n}\n\ndefineOptions({\n name: 'RuiDataTable',\n});\n\nconst props = withDefaults(defineProps<Props<T, IdType>>(), {\n modelValue: undefined,\n search: '',\n cols: undefined,\n itemsPerPage: 10,\n pagination: undefined,\n columnAttr: 'label',\n sort: undefined,\n loading: false,\n dense: false,\n outlined: false,\n paginationModifiers: undefined,\n sortModifiers: undefined,\n empty: () => ({ label: 'No item found' }),\n rounded: 'md',\n hideDefaultHeader: false,\n hideDefaultFooter: false,\n disablePerPage: false,\n striped: false,\n expanded: undefined,\n singleExpand: false,\n stickyHeader: false,\n stickyOffset: undefined,\n globalItemsPerPage: undefined,\n group: undefined,\n collapsed: undefined,\n disabledRows: undefined,\n multiPageSelect: false,\n groupExpandButtonPosition: 'start',\n scroller: undefined,\n itemClass: '',\n});\n\nconst emit = defineEmits<{\n (e: 'update:model-value', value?: T[IdType][]): void;\n (e: 'update:expanded', value: T[]): void;\n (e: 'update:pagination', value: TablePaginationData): void;\n (e: 'update:sort', value?: TableSortData<T>): void;\n (e: 'update:options', value: TableOptions<T>): void;\n (e: 'update:group', value?: GroupKeys<T>): void;\n (e: 'update:collapsed', value?: T[]): void;\n (e: 'copy:group', value: GroupData<T>): void;\n}>();\n\nconst slots = defineSlots<\n Partial<Record<`header.${string}`, (props: {\n column: TableColumn<T>;\n }) => any>\n & Record<`item.${string}`, (props: {\n column: TableColumn<T>;\n row: T;\n index: number;\n }) => any>\n & {\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: {\n header: GroupHeader<T>;\n groupKey: string;\n }) => 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 { stickyHeader, collapsed, modelValue, disabledRows } = toRefs(props);\nconst tableDefaults = useTable();\n\nconst { isDark } = useRotkiTheme();\n\nconst stickyHeaderOffset = computed(() => props.stickyOffset !== undefined ? props.stickyOffset : get(tableDefaults.stickyOffset));\n\nfunction isRow<T extends object>(item: GroupedTableRow<T>): item is T {\n return !('__header__' in item);\n}\n\nfunction isHeaderSlot(slotName: string): slotName is `header.${string}` {\n return slotName.startsWith('header.');\n}\n\nconst { stick, table, tableScroller } = useStickyTableHeader(\n stickyHeader,\n get(stickyHeaderOffset),\n);\n\nconst expandable = computed(() => props.expanded && slots['expanded-item']);\n\nconst headerSlots = computed<`header.${string}`[]>(() =>\n Object.keys(slots).filter(isHeaderSlot),\n);\n\nconst globalItemsPerPageSettings = computed(() => {\n if (props.globalItemsPerPage !== undefined)\n return props.globalItemsPerPage;\n\n return get(tableDefaults.globalItemsPerPage);\n});\n\nconst getKeys = <T extends object>(t: T) => Object.keys(t) as TableRowKey<T>[];\n\nconst groupKeys: ComputedRef<TableRowKey<T>[]> = computed(() => {\n const groupBy = props.group;\n\n if (!groupBy) {\n // no grouping\n return [];\n }\n\n if (!Array.isArray(groupBy)) {\n // currently only supports a single grouping\n // only the first item in the array is used\n return [groupBy];\n }\n\n return groupBy;\n});\n\nconst groupKey = computed(() => get(groupKeys).join(':'));\n\nconst isGrouped = computed(() => !!get(groupKey));\n\n/**\n * Prepare the columns from props or generate using first item in the list\n */\nconst columns = computed<TableColumn<T>[]>(() => {\n const data\n = props.cols\n ?? getKeys(props.rows[0] ?? {}).map(\n key =>\n ({\n key,\n [props.columnAttr]: String(key),\n }) satisfies NoneSortableTableColumn<T>,\n );\n\n const hasExpandColumn = data.some(row => row.key === 'expand');\n\n if (get(expandable) && !hasExpandColumn) {\n return [\n ...data,\n {\n key: 'expand' as TableRowKey<T>,\n sortable: false,\n class: 'w-16',\n cellClass: '!py-0 w-16',\n align: 'end',\n } satisfies NoneSortableTableColumn<T>,\n ];\n }\n\n const groupByKeys = get(groupKeys);\n\n if (groupByKeys.length === 0)\n return data;\n\n return data.filter(\n column => !groupByKeys.includes(column.key as TableRowKey<T>),\n );\n});\n\nconst itemsLength = ref(0);\n\nconst selectedData = computed<T[IdType][] | undefined>({\n get() {\n return get(modelValue);\n },\n set(value) {\n emit('update:model-value', value);\n },\n});\n\nconst internalSelectedData: Ref<T[IdType][]> = ref([]);\n\nwatchImmediate(modelValue, (modelValue) => {\n set(internalSelectedData, modelValue);\n});\n\nconst rowIdentifier = computed(() => props.rowAttr);\n\nconst internalPaginationState: Ref<TablePaginationData | undefined> = ref();\nconst collapsedRows: Ref<T[]> = ref([]);\n\nconst pagination = computed(() => props.pagination);\n\nwatchImmediate(pagination, (pagination) => {\n set(internalPaginationState, pagination);\n});\n\nwatchImmediate(collapsed, (value) => {\n set(collapsedRows, value ?? []);\n});\n\n/**\n * Pagination is different for search\n * since search is only used for internal filtering\n * we return the length of search results as total\n */\nconst paginationData: Ref<TablePaginationData> = computed({\n get() {\n const paginated = get(internalPaginationState);\n if (!paginated) {\n return {\n total: get(itemsLength),\n limit: props.itemsPerPage,\n page: 1,\n };\n }\n\n if (props.paginationModifiers?.external)\n return paginated;\n\n return {\n total: get(itemsLength),\n limit: paginated.limit,\n page: paginated.page,\n limits: paginated.limits,\n };\n },\n set(value: TablePaginationData) {\n set(internalPaginationState, value);\n emit('update:pagination', value);\n emit('update:options', {\n pagination: value,\n sort: props.sort,\n });\n },\n});\n\nconst sortData = computed({\n get() {\n return props.sort;\n },\n set(value) {\n if (!props.multiPageSelect)\n onToggleAll(false);\n resetCheckboxShiftState();\n emit('update:sort', value);\n emit('update:options', {\n sort: value,\n pagination: get(pagination),\n });\n },\n});\n\n/**\n * A mapping of the sort columns\n * for easily checking if a column is sorted instead of looping through the array\n */\nconst sortedMap = computed(() => {\n const mapped: Partial<Record<TableRowKey<T>, SortColumn<T>>> = {};\n const sortBy = get(sortData);\n if (!sortBy)\n return mapped;\n\n if (!Array.isArray(sortBy)) {\n if (sortBy.column)\n mapped[sortBy.column] = sortBy;\n\n return mapped;\n }\n\n return sortBy.reduce((acc, curr) => {\n if (!curr.column)\n return acc;\n\n return { ...acc, [curr.column]: curr };\n }, mapped);\n});\n\n/**\n * rows filtered based on search query if it exists\n */\nconst searchData = computed<T[]>(() => {\n const query = props.search?.toLocaleLowerCase();\n if (!query)\n return props.rows;\n\n return props.rows.filter(row =>\n getKeys(row).some(key =>\n `${row[key]}`.toLocaleLowerCase().includes(query),\n ),\n );\n});\n\n/**\n * sort the search results\n */\nconst sorted: ComputedRef<T[]> = computed(() => {\n const sortBy = get(sortData);\n const data = [...get(searchData)];\n if (!sortBy || props.sortModifiers?.external)\n return data;\n\n const sortOptions: Intl.CollatorOptions = { sensitivity: 'accent', usage: 'sort' };\n\n const sort = (by: SortColumn<T>) => {\n data.sort((a, b) => {\n const column = by.column;\n if (!column)\n return 0;\n\n let [aValue, bValue] = [a[column], b[column]];\n if (by.direction === 'desc')\n [aValue, bValue] = [bValue, aValue];\n\n const aNumber = Number(aValue);\n const bNumber = Number(bValue);\n if (!isNaN(aNumber) && !isNaN(bNumber))\n return aNumber - bNumber;\n\n return `${aValue}`.localeCompare(\n `${bValue}`,\n undefined,\n sortOptions,\n );\n });\n };\n\n if (!Array.isArray(sortBy))\n sort(sortBy);\n else\n [...sortBy].reverse().forEach(sort);\n\n return data;\n});\n\n/**\n * comprises search, sorted paginated, and grouped data\n */\nconst mappedGroups = computed<Record<string, GroupedTableRow<T>[]>>(() => {\n if (!get(isGrouped)) {\n // no grouping\n return {};\n }\n\n const result = get(sorted);\n const identifier = props.rowAttr;\n\n return result.reduce((acc: Record<string, GroupedTableRow<T>[]>, row) => {\n if (!isDefined(row[identifier]) || row[identifier] === '')\n return acc;\n\n const group = getRowGroup(row);\n const groupVal = Object.values(group).filter(isDefined).join(',');\n if (!acc[groupVal]) {\n acc[groupVal] = [\n {\n __header__: true,\n group,\n identifier: groupVal,\n } satisfies GroupHeader<T>,\n ];\n }\n\n acc[groupVal].push(row);\n\n return acc;\n }, {});\n});\n\n/**\n * comprises search, sorted paginated, and grouped data\n */\nconst grouped = computed<GroupedTableRow<T>[]>(() => {\n const result = get(sorted);\n const groupByKey = get(groupKey);\n\n if (!groupByKey) {\n // no grouping\n return result;\n }\n\n return Object.values(get(mappedGroups)).flatMap(grouped => grouped);\n});\n\n/**\n * comprises search, sorted and paginated data\n */\nconst filtered = computed<GroupedTableRow<T>[]>(() => {\n const result = get(grouped);\n\n const paginated = get(paginationData);\n const limit = paginated.limit;\n if (paginated && !props.paginationModifiers?.external) {\n const start = (paginated.page - 1) * limit;\n const end = start + limit;\n const preGroups = result.slice(0, start + 1).filter(item => !isRow(item));\n const postGroups = result.slice(start + 1, end + preGroups.length).filter(item => !isRow(item));\n const data = result.slice(start + preGroups.length, end + preGroups.length + postGroups.length);\n const nearestGroup = preGroups.at(-1);\n if (data.length > 0) {\n // if our first item is not a group, push in the nearest group\n const firstItem = data[0];\n assert(firstItem);\n if (isRow(firstItem) && nearestGroup)\n data.unshift(nearestGroup);\n const lastItem = data.at(-1);\n // if our last item is a group, remove it\n if (lastItem && !isRow(lastItem))\n data.pop();\n }\n\n return data.filter(row => !isHiddenRow(row));\n }\n\n return result.filter(row => !isHiddenRow(row));\n});\n\n/**\n * list if ids of the visible table rows used for check-all and uncheck-all\n */\nconst visibleIdentifiers = computed<T[IdType][]>(() => {\n const selectBy = props.rowAttr;\n\n if (!selectBy)\n return [];\n\n return get(filtered)\n .filter(isRow)\n .map(row => row[selectBy]);\n});\n\n/**\n * Flag to know when all rows are selected for the current screen\n */\nconst isAllSelected = computed<boolean>(() => {\n const selectedRows = get(selectedData);\n if (!selectedRows)\n return false;\n\n return (\n selectedRows.length > 0\n && get(visibleIdentifiers).every(id => selectedRows.includes(id))\n );\n});\n\nconst indeterminate = computed(() => {\n const selectedRows = get(selectedData);\n if (!selectedRows)\n return false;\n\n return selectedRows.length > 0 && !get(isAllSelected);\n});\n\nconst noData = computed(() => get(filtered).length === 0);\n\nconst colspan = computed(() => {\n let columnLength = get(columns).length;\n if (get(selectedData))\n columnLength++;\n\n return columnLength;\n});\n\nconst isSortedBy = (key: TableRowKey<T>) => key in get(sortedMap);\n\nfunction getSortIndex(key: TableRowKey<T>) {\n const sortBy = get(sortData);\n\n if (!sortBy || !Array.isArray(sortBy) || !isSortedBy(key))\n return -1;\n\n return sortBy.findIndex(sort => sort.column === key) ?? -1;\n}\n\nfunction isSelected(identifier: T[IdType]) {\n const selection = get(selectedData);\n if (!selection)\n return false;\n\n return selection.includes(identifier);\n}\n\nfunction isDisabledRow(rowKey: T[IdType]) {\n const identifier = props.rowAttr;\n if (!identifier)\n return false;\n\n return !!get(disabledRows)?.some((disabledRow: T) => rowKey === disabledRow[identifier]);\n}\n\nfunction isExpanded(identifier: T[IdType]) {\n const { expanded } = props;\n if (!expanded?.length)\n return false;\n\n return expanded.some(data => data[props.rowAttr] === identifier);\n}\n\nfunction onToggleExpand(row: T) {\n const { expanded } = props;\n if (!expanded)\n return;\n\n const key = props.rowAttr;\n const rowExpanded = isExpanded(row[key]);\n\n if (props.singleExpand)\n return emit('update:expanded', rowExpanded ? [] : [row]);\n\n return emit(\n 'update:expanded',\n rowExpanded\n ? expanded.filter(item => item[key] !== row[key])\n : [...expanded, row],\n );\n}\n\nfunction getRowGroup(row: T): Partial<T> {\n return get(groupKeys).reduce((acc, key) => ({ ...acc, [key]: row[key] }), {});\n}\n\nfunction getGroupRows(groupVal: string) {\n if (!get(isGrouped))\n return [];\n\n const groupRows = get(mappedGroups)[groupVal];\n assert(groupRows);\n return groupRows.filter(isRow);\n}\n\nfunction compareGroupsFn(a: T, b: Partial<T>) {\n const group = get(groupKeys);\n if (group.length === 0)\n return false;\n\n return group.every(key => a[key] === b[key]);\n}\n\nfunction isExpandedGroup(value: Partial<T>) {\n return get(collapsedRows).every(row => !compareGroupsFn(row, value));\n}\n\nfunction isHiddenRow(row: GroupedTableRow<T>) {\n const identifier = props.rowAttr;\n return (\n get(isGrouped)\n && get(collapsedRows).some(\n value => isRow(row) && row[identifier] === value[identifier],\n )\n );\n}\n\nfunction onToggleExpandGroup(group: Partial<T>, value?: string) {\n if (!value)\n return;\n\n const collapsed = get(collapsedRows);\n\n const groupExpanded = isExpandedGroup(group);\n\n const groupRows = getGroupRows(value);\n\n set(\n collapsedRows,\n groupExpanded\n ? [...collapsed, ...groupRows]\n : collapsed.filter(row => !compareGroupsFn(row, group)),\n );\n\n emit('update:collapsed', get(collapsedRows));\n}\n\nfunction onUngroup() {\n set(collapsedRows, []);\n\n emit('update:collapsed', []);\n emit('update:group', Array.isArray(props.group) ? [] : undefined);\n}\n\nfunction onCopyGroup(value: GroupData<T>) {\n emit('copy:group', value);\n}\n\n/**\n * Sort to handle single sort or multiple sort columns\n */\nfunction onSort({\n key,\n direction,\n}: {\n key: TableRowKey<T>;\n direction?: 'asc' | 'desc';\n}) {\n const sortBy = get(sortData);\n if (!sortBy)\n return;\n\n if (!Array.isArray(sortBy)) {\n if (isSortedBy(key)) {\n const newDirection = !direction || direction === 'asc' ? 'desc' : 'asc';\n\n if (sortBy.direction === newDirection) {\n set(sortData, { ...sortBy, column: undefined, direction: 'asc' });\n }\n else {\n set(sortData, {\n ...sortBy,\n direction: sortBy.direction === 'asc' ? 'desc' : 'asc',\n });\n }\n }\n else {\n set(sortData, { column: key, direction: direction || 'asc' });\n }\n return;\n }\n\n if (isSortedBy(key)) {\n const newDirection = !direction || direction === 'asc' ? 'desc' : 'asc';\n\n const index = getSortIndex(key);\n const sortByCol = sortBy[index];\n assert(sortByCol);\n\n if (sortByCol.direction === newDirection)\n sortBy.splice(index, 1);\n else\n sortByCol.direction = sortByCol.direction === 'asc' ? 'desc' : 'asc';\n\n set(sortData, sortBy);\n }\n else {\n set(sortData, [...sortBy, { column: key, direction: direction || 'asc' }]);\n }\n}\n\nfunction isSelectable(rowKey: T[IdType]): boolean {\n return isSelected(rowKey) || !isDisabledRow(rowKey);\n}\n\nfunction mustSelect(rowKey: T[IdType]): boolean {\n return isSelected(rowKey) && isDisabledRow(rowKey);\n}\n\n/**\n * toggles selected rows\n * @param {boolean} checked checkbox state\n */\nfunction onToggleAll(checked: boolean) {\n const selectedRows = get(selectedData);\n\n if (!isDefined(selectedRows)) {\n return;\n }\n\n if (!props.multiPageSelect) {\n if (checked)\n set(selectedData, get(visibleIdentifiers).filter(isSelectable));\n else\n set(selectedData, get(visibleIdentifiers).filter(mustSelect));\n }\n else {\n if (checked) {\n set(\n selectedData,\n Array.from(new Set(\n [\n ...selectedRows,\n ...get(visibleIdentifiers).filter(isSelectable),\n ],\n )),\n );\n }\n else {\n set(\n selectedData,\n selectedRows.filter(rowKey => !get(visibleIdentifiers).includes(rowKey) || get(visibleIdentifiers).filter(mustSelect).includes(rowKey)),\n );\n }\n }\n}\n\nconst shiftClicked: Ref<boolean> = ref(false);\nconst lastSelectedIndex: Ref<number> = ref(-1);\n\nfunction resetCheckboxShiftState() {\n set(shiftClicked, false);\n set(lastSelectedIndex, -1);\n}\n\n/**\n * toggles a single row\n * @param {boolean} checked checkbox state\n * @param {string} value the id of the selected row\n * @param {boolean} userAction whether the select triggered by user manually\n *\n */\nfunction onSelect(checked: boolean, value: T[typeof props.rowAttr], userAction = false) {\n if (get(shiftClicked) && userAction)\n return;\n\n const selectedRows = get(internalSelectedData);\n if (!selectedRows)\n return false;\n\n const selected = isSelected(value);\n\n if (checked && !selected) {\n set(internalSelectedData, [...selectedRows, value]);\n }\n else if (!checked && selected) {\n set(\n internalSelectedData,\n [...selectedRows].filter(r => r !== value),\n );\n }\n\n if (userAction)\n set(selectedData, get(internalSelectedData));\n}\n\nfunction onCheckboxClick(event: any, value: T[typeof props.rowAttr], index: number) {\n const input = event.currentTarget.querySelector('input');\n const nodeName = event.target.nodeName;\n\n const shiftKey = event.shiftKey;\n set(shiftClicked, shiftKey);\n\n if (input && nodeName !== 'INPUT') {\n if (shiftKey) {\n setTimeout(() => {\n let lastIndex = get(lastSelectedIndex);\n if (lastIndex === -1)\n lastIndex = index;\n const tableData = get(filtered);\n const lastSelectedData = tableData[lastIndex];\n assert(lastSelectedData);\n\n if (isRow(lastSelectedData)) {\n const id = get(rowIdentifier);\n const valueToApply = isSelected(lastSelectedData[id]);\n\n if (lastIndex === index) {\n onSelect(!valueToApply, value);\n }\n else {\n const from = Math.min(lastIndex, index);\n const to = Math.max(lastIndex, index);\n\n for (let i = from; i <= to; i++) {\n const currSelectedData = tableData[i];\n assert(currSelectedData);\n if (isRow(currSelectedData) && !isDisabledRow(currSelectedData[id]))\n onSelect(valueToApply, currSelectedData[id]);\n }\n }\n\n set(lastSelectedIndex, index);\n set(selectedData, get(internalSelectedData));\n }\n }, 1);\n }\n\n else { set(lastSelectedIndex, index); }\n }\n}\n\nconst search = computed(() => props.search);\n\nfunction deselectRemovedRows() {\n get(selectedData)?.forEach((key: T[IdType]) => {\n if (isSelected(key) && !get(visibleIdentifiers).includes(key))\n onSelect(false, key, true);\n });\n}\n\nfunction onPaginate() {\n emit('update:expanded', []);\n if (!props.multiPageSelect)\n onToggleAll(false);\n resetCheckboxShiftState();\n}\n\nfunction setInternalTotal(items: GroupedTableRow<T>[]) {\n if (!props.paginationModifiers?.external)\n set(itemsLength, items.filter(isRow).length);\n}\n\nfunction cellValue(row: T, key: TableColumn<T>['key']) {\n return row[key as TableRowKey<T>];\n}\n\n/**\n * Keeps the global items per page in sync with the internal state.\n */\nwatch(internalPaginationState, (pagination) => {\n if (pagination?.limit && get(globalItemsPerPageSettings))\n set(tableDefaults.itemsPerPage, pagination.limit);\n});\n\nwatch(tableDefaults.itemsPerPage, (itemsPerPage) => {\n if (!get(globalItemsPerPageSettings))\n return;\n\n set(paginationData, {\n ...get(paginationData),\n limit: itemsPerPage,\n });\n});\n\n/**\n * on changing search query, need to reset pagination page to 1\n */\nwatch(search, () => {\n set(paginationData, {\n ...get(paginationData),\n page: 1,\n });\n onToggleAll(false);\n resetCheckboxShiftState();\n});\n\nwatch(sorted, (items) => {\n if (!props.multiPageSelect)\n deselectRemovedRows();\n setInternalTotal(items);\n});\n\n/**\n * Automatically adjust page when current page exceeds maximum available pages\n * This can happen when total data decreases while user is on a higher page\n */\nwatch(paginationData, (pagination) => {\n const { total, limit, page } = pagination;\n const maxPages = Math.ceil(total / limit);\n\n if (maxPages > 0 && page > maxPages) {\n set(paginationData, {\n ...pagination,\n page: maxPages,\n });\n }\n});\n\nonMounted(() => {\n setInternalTotal(get(sorted));\n\n if (!get(globalItemsPerPageSettings))\n return;\n\n set(paginationData, {\n ...get(paginationData),\n limit: get(tableDefaults.itemsPerPage),\n });\n});\n</script>\n\n<template>\n <div\n :class=\"[\n $style.wrapper,\n $style[`rounded__${rounded}`],\n { [$style.outlined]: outlined },\n ]\"\n >\n <RuiTablePagination\n v-if=\"paginationData && !hideDefaultHeader\"\n v-model=\"paginationData\"\n :dense=\"dense\"\n :loading=\"loading\"\n :disable-per-page=\"disablePerPage\"\n data-cy=\"table-pagination\"\n @update:model-value=\"onPaginate()\"\n />\n <div\n ref=\"tableScroller\"\n :class=\"$style.scroller\"\n >\n <table\n ref=\"table\"\n :class=\"[$style.table, { [$style.dense]: dense }]\"\n :aria-busy=\"loading\"\n aria-label=\"\"\n >\n <RuiTableHead\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 :no-data=\"noData\"\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\"\n :loading=\"loading\"\n :capitalize-headers=\"!cols\"\n :colspan=\"colspan\"\n :column-attr=\"columnAttr\"\n :columns=\"columns\"\n :dense=\"dense\"\n :no-data=\"noData\"\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 <tbody :class=\"[$style.tbody, { [$style['tbody--striped'] ?? '']: striped }]\">\n <slot\n v-if=\"slots['body.prepend']\"\n :colspan=\"colspan\"\n name=\"body.prepend\"\n />\n <template v-for=\"(row, index) in filtered\">\n <tr\n v-if=\"!isRow(row)\"\n :key=\"`row-${index}`\"\n :class=\"[$style.tr, $style.tr__group]\"\n >\n <slot\n name=\"group.header\"\n :colspan=\"colspan\"\n :header=\"row\"\n :is-open=\"isExpandedGroup(row.group)\"\n :toggle=\"() => onToggleExpandGroup(row.group, row.identifier)\"\n >\n <td\n :class=\"[$style.td]\"\n class=\"!p-2\"\n :colspan=\"colspan\"\n >\n <div class=\"flex items-center gap-2\">\n <RuiExpandButton\n v-if=\"groupExpandButtonPosition === 'start'\"\n :expanded=\"isExpandedGroup(row.group)\"\n @click=\"onToggleExpandGroup(row.group, row.identifier)\"\n />\n <slot\n :group-key=\"groupKey\"\n name=\"group.header.content\"\n :header=\"row\"\n >\n <span>{{ groupKey }}: {{ row.identifier }}</span>\n <RuiButton\n size=\"sm\"\n variant=\"text\"\n icon\n data-cy=\"group-copy-button\"\n @click=\"\n onCopyGroup({ key: groupKey, value: row.group })\n \"\n >\n <RuiIcon\n name=\"lu-copy\"\n size=\"16\"\n />\n </RuiButton>\n </slot>\n <RuiTooltip\n :popper=\"{ placement: 'top' }\"\n class=\"ml-auto mr-2\"\n >\n <template #activator>\n <RuiButton\n size=\"sm\"\n variant=\"text\"\n icon\n @click=\"onUngroup()\"\n >\n <RuiIcon\n name=\"lu-trash-2\"\n size=\"14\"\n />\n </RuiButton>\n </template>\n Ungroup\n </RuiTooltip>\n <RuiExpandButton\n v-if=\"groupExpandButtonPosition === 'end'\"\n :expanded=\"isExpandedGroup(row.group)\"\n @click=\"onToggleExpandGroup(row.group, row.identifier)\"\n />\n </div>\n </td>\n </slot>\n </tr>\n <template v-else>\n <tr\n :key=\"`row-${index}`\"\n :class=\"[\n $style.tr,\n { [$style.tr__selected ?? '']: isSelected(row[rowIdentifier]) },\n typeof itemClass === 'string' ? itemClass : itemClass(row),\n ]\"\n :aria-selected=\"selectedData ? isSelected(row[rowIdentifier]) : undefined\"\n >\n <td\n v-if=\"selectedData\"\n :class=\"$style.checkbox\"\n colspan=\"1\"\n rowspan=\"1\"\n >\n <RuiCheckbox\n :data-cy=\"`table-toggle-check-${index}`\"\n :model-value=\"isSelected(row[rowIdentifier])\"\n :disabled=\"isDisabledRow(row[rowIdentifier])\"\n :size=\"dense ? 'sm' : undefined\"\n color=\"primary\"\n class=\"select-none\"\n hide-details\n @update:model-value=\"onSelect($event, row[rowIdentifier], true)\"\n @click=\"onCheckboxClick($event, row[rowIdentifier], index)\"\n />\n </td>\n\n <td\n v-for=\"(column, subIndex) in columns\"\n :key=\"subIndex\"\n :class=\"[\n $style.td,\n column.cellClass,\n $style[`align__${column.align ?? 'start'}`],\n ]\"\n :colspan=\"column.colspan ?? 1\"\n :rowspan=\"column.rowspan ?? 1\"\n >\n <slot\n v-if=\"column.key === 'expand'\"\n :name=\"`item.${column.key.toString()}`\"\n :column=\"column\"\n :row=\"row\"\n :index=\"index\"\n >\n <RuiExpandButton\n v-if=\"!slots['item.expand']\"\n :expanded=\"isExpanded(row[rowIdentifier])\"\n @click=\"onToggleExpand(row)\"\n />\n </slot>\n <slot\n v-else\n :column=\"column\"\n :index=\"index\"\n :name=\"`item.${column.key.toString()}`\"\n :row=\"row\"\n >\n {{ cellValue(row, column.key) }}\n </slot>\n </td>\n </tr>\n\n <tr\n v-if=\"expandable && isExpanded(row[rowIdentifier])\"\n :key=\"`row-expand-${index}`\"\n :class=\"[$style.tr, $style.tr__expandable]\"\n >\n <td\n :colspan=\"colspan\"\n :class=\"[$style.td]\"\n >\n <slot\n name=\"expanded-item\"\n :row=\"row\"\n :index=\"index\"\n />\n </td>\n </tr>\n </template>\n </template>\n <tr\n v-if=\"loading && noData\"\n >\n <td\n :class=\"$style.tbody__loader\"\n :colspan=\"colspan\"\n >\n <RuiProgress\n color=\"primary\"\n variant=\"indeterminate\"\n circular\n />\n </td>\n </tr>\n <tr\n v-if=\"noData && empty && !loading\"\n :class=\"[$style.tr, $style.tr__empty]\"\n >\n <Transition\n appear\n enter-active-class=\"transition ease-out duration-200 delay-200\"\n enter-from-class=\"opacity-0 translate-y-1\"\n enter-to-class=\"opacity-100 translate-y-0\"\n leave-active-class=\"transition ease-in duration-150\"\n leave-from-class=\"opacity-100 translate-y-0\"\n leave-to-class=\"opacity-0 translate-y-1\"\n >\n <td\n :class=\"$style.td\"\n :colspan=\"colspan\"\n >\n <slot name=\"no-data\">\n <div :class=\"$style.empty\">\n <img\n :src=\"isDark ? noDataPlaceholderDark : noDataPlaceholder\"\n :alt=\"empty.label\"\n class=\"h-32\"\n />\n <p\n v-if=\"empty.label\"\n :class=\"$style.empty__label\"\n >\n {{ empty.label }}\n </p>\n\n <slot name=\"empty-description\">\n <p\n v-if=\"empty.description\"\n :class=\"$style.empty__description\"\n >\n {{ empty.description }}\n </p>\n </slot>\n </div>\n </slot>\n </td>\n </Transition>\n </tr>\n <slot\n v-if=\"slots['body.append']\"\n :colspan=\"colspan\"\n name=\"body.append\"\n />\n </tbody>\n <tfoot>\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 :disable-per-page=\"disablePerPage\"\n data-cy=\"table-pagination\"\n @update:model-value=\"onPaginate()\"\n />\n </div>\n</template>\n\n<style module lang=\"scss\">\n.wrapper {\n @apply relative divide-y divide-black/[0.12] overflow-hidden;\n &.outlined {\n @apply border border-black/[0.12];\n }\n\n &.rounded__sm {\n @apply rounded-[.25rem];\n\n .image {\n @apply rounded-t-[.25rem];\n }\n }\n\n &.rounded__md {\n @apply rounded-[.75rem];\n\n .image {\n @apply rounded-t-[.75rem];\n }\n }\n\n &.rounded__lg {\n @apply rounded-[1rem];\n\n .image {\n @apply rounded-t-[1rem];\n }\n }\n\n .scroller {\n @apply overflow-x-auto overflow-y-hidden;\n clip-path: inset(0 0 0 0);\n }\n\n .table {\n @apply min-w-full table-fixed divide-y divide-black/[0.12] whitespace-nowrap mx-auto my-0 max-w-fit relative border-black/[0.12];\n\n .tbody {\n @apply divide-y divide-black/[0.12];\n\n &--striped {\n > .tr {\n &:nth-child(even) {\n @apply bg-rui-grey-50;\n }\n }\n }\n\n > .tr {\n @apply hover:bg-black/[0.04];\n\n &__selected {\n @apply bg-rui-primary/[0.08];\n }\n\n &__empty {\n @apply hover:bg-transparent;\n }\n\n &__expandable {\n @apply bg-[#f9fafb] hover:bg-[#f9fafb];\n }\n\n &__group {\n @apply bg-black/[0.02];\n }\n\n .td {\n @apply p-4 text-rui-text text-body-2;\n text-wrap: initial;\n\n &.align__start {\n @apply text-left rtl:text-right;\n }\n\n &.align__center {\n @apply text-center;\n }\n\n &.align__end {\n @apply text-right rtl:text-left;\n }\n\n .empty {\n @apply flex flex-col gap-3 items-center justify-center flex-1 min-h-[4.4rem] my-4;\n\n &__label {\n @apply text-body-1 leading-none font-bold text-center text-current pb-0 mb-0;\n }\n\n &__description {\n @apply text-body-2 text-center text-rui-text-secondary pb-0 mb-0;\n }\n }\n }\n }\n\n &__loader {\n @apply py-8 text-center;\n }\n }\n\n .checkbox {\n @apply px-2 w-[3.625rem] max-w-[3.625rem];\n label {\n @apply ml-0;\n }\n }\n\n &.dense {\n .tbody {\n .td {\n @apply py-[0.38rem];\n }\n }\n }\n }\n}\n\n:global(.dark) {\n .wrapper {\n @apply divide-white/[0.12];\n\n &.outlined {\n @apply border-white/[0.12];\n }\n\n .table {\n @apply divide-white/[0.12] border-white/[0.12];\n\n .tbody {\n @apply divide-white/[0.12];\n\n &--striped {\n > .tr {\n &:nth-child(even) {\n @apply bg-rui-grey-900;\n }\n }\n }\n\n > .tr {\n @apply hover:bg-white/[0.04];\n\n &__selected {\n @apply bg-rui-dark-primary/[0.08];\n }\n\n &__expandable {\n @apply bg-[#121212] hover:bg-[#121212];\n }\n\n &__group {\n @apply bg-white/[0.02];\n }\n }\n }\n }\n }\n}\n</style>\n"],"names":["_useSlots","modelValue","pagination","grouped","collapsed","_createElementBlock","_normalizeClass","$style","_unref","_createBlock","_createElementVNode","_createVNode","_renderList","_withCtx","_renderSlot","_normalizeProps","_guardReactiveProps","_openBlock","_Fragment","_toDisplayString","_createTextVNode","_Transition"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0KA,UAAM,QAAQ;AAiCd,UAAM,OAAO;AAWb,UAAM,QAAQA,SAAA;AA6Bd,UAAM,EAAE,cAAc,WAAW,YAAY,aAAA,IAAiB,OAAO,KAAK;AAC1E,UAAM,gBAAgB,SAAA;AAEtB,UAAM,EAAE,OAAA,IAAW,cAAA;AAEnB,UAAM,qBAAqB,SAAS,MAAM,MAAM,iBAAiB,SAAY,MAAM,eAAe,IAAI,cAAc,YAAY,CAAC;AAEjI,aAAS,MAAwB,MAAqC;AACpE,aAAO,EAAE,gBAAgB;AAAA,IAC3B;AAEA,aAAS,aAAa,UAAkD;AACtE,aAAO,SAAS,WAAW,SAAS;AAAA,IACtC;AAEA,UAAM,EAAE,OAAO,OAAO,cAAA,IAAkB;AAAA,MACtC;AAAA,MACA,IAAI,kBAAkB;AAAA,IAAA;AAGxB,UAAM,aAAa,SAAS,MAAM,MAAM,YAAY,MAAM,eAAe,CAAC;AAE1E,UAAM,cAAc;AAAA,MAA+B,MACjD,OAAO,KAAK,KAAK,EAAE,OAAO,YAAY;AAAA,IAAA;AAGxC,UAAM,6BAA6B,SAAS,MAAM;AAChD,UAAI,MAAM,uBAAuB;AAC/B,eAAO,MAAM;AAEf,aAAO,IAAI,cAAc,kBAAkB;AAAA,IAC7C,CAAC;AAED,UAAM,UAAU,CAAmB,MAAS,OAAO,KAAK,CAAC;AAEzD,UAAM,YAA2C,SAAS,MAAM;AAC9D,YAAM,UAAU,MAAM;AAEtB,UAAI,CAAC,SAAS;AAEZ,eAAO,CAAA;AAAA,MACT;AAEA,UAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AAG3B,eAAO,CAAC,OAAO;AAAA,MACjB;AAEA,aAAO;AAAA,IACT,CAAC;AAED,UAAM,WAAW,SAAS,MAAM,IAAI,SAAS,EAAE,KAAK,GAAG,CAAC;AAExD,UAAM,YAAY,SAAS,MAAM,CAAC,CAAC,IAAI,QAAQ,CAAC;AAKhD,UAAM,UAAU,SAA2B,MAAM;AAC/C,YAAM,OACF,MAAM,QACH,QAAQ,MAAM,KAAK,CAAC,KAAK,CAAA,CAAE,EAAE;AAAA,QAC9B,CAAA,SACC;AAAA,UACC;AAAA,UACA,CAAC,MAAM,UAAU,GAAG,OAAO,GAAG;AAAA,QAAA;AAAA,MAChC;AAGN,YAAM,kBAAkB,KAAK,KAAK,CAAA,QAAO,IAAI,QAAQ,QAAQ;AAE7D,UAAI,IAAI,UAAU,KAAK,CAAC,iBAAiB;AACvC,eAAO;AAAA,UACL,GAAG;AAAA,UACH;AAAA,YACE,KAAK;AAAA,YACL,UAAU;AAAA,YACV,OAAO;AAAA,YACP,WAAW;AAAA,YACX,OAAO;AAAA,UAAA;AAAA,QACT;AAAA,MAEJ;AAEA,YAAM,cAAc,IAAI,SAAS;AAEjC,UAAI,YAAY,WAAW;AACzB,eAAO;AAET,aAAO,KAAK;AAAA,QACV,CAAA,WAAU,CAAC,YAAY,SAAS,OAAO,GAAqB;AAAA,MAAA;AAAA,IAEhE,CAAC;AAED,UAAM,cAAc,IAAI,CAAC;AAEzB,UAAM,eAAe,SAAkC;AAAA,MACrD,MAAM;AACJ,eAAO,IAAI,UAAU;AAAA,MACvB;AAAA,MACA,IAAI,OAAO;AACT,aAAK,sBAAsB,KAAK;AAAA,MAClC;AAAA,IAAA,CACD;AAED,UAAM,uBAAyC,IAAI,EAAE;AAErD,mBAAe,YAAY,CAACC,gBAAe;AACzC,UAAI,sBAAsBA,WAAU;AAAA,IACtC,CAAC;AAED,UAAM,gBAAgB,SAAS,MAAM,MAAM,OAAO;AAElD,UAAM,0BAAgE,IAAA;AACtE,UAAM,gBAA0B,IAAI,EAAE;AAEtC,UAAM,aAAa,SAAS,MAAM,MAAM,UAAU;AAElD,mBAAe,YAAY,CAACC,gBAAe;AACzC,UAAI,yBAAyBA,WAAU;AAAA,IACzC,CAAC;AAED,mBAAe,WAAW,CAAC,UAAU;AACnC,UAAI,eAAe,SAAS,EAAE;AAAA,IAChC,CAAC;AAOD,UAAM,iBAA2C,SAAS;AAAA,MACxD,MAAM;AACJ,cAAM,YAAY,IAAI,uBAAuB;AAC7C,YAAI,CAAC,WAAW;AACd,iBAAO;AAAA,YACL,OAAO,IAAI,WAAW;AAAA,YACtB,OAAO,MAAM;AAAA,YACb,MAAM;AAAA,UAAA;AAAA,QAEV;AAEA,YAAI,MAAM,qBAAqB;AAC7B,iBAAO;AAET,eAAO;AAAA,UACL,OAAO,IAAI,WAAW;AAAA,UACtB,OAAO,UAAU;AAAA,UACjB,MAAM,UAAU;AAAA,UAChB,QAAQ,UAAU;AAAA,QAAA;AAAA,MAEtB;AAAA,MACA,IAAI,OAA4B;AAC9B,YAAI,yBAAyB,KAAK;AAClC,aAAK,qBAAqB,KAAK;AAC/B,aAAK,kBAAkB;AAAA,UACrB,YAAY;AAAA,UACZ,MAAM,MAAM;AAAA,QAAA,CACb;AAAA,MACH;AAAA,IAAA,CACD;AAED,UAAM,WAAW,SAAS;AAAA,MACxB,MAAM;AACJ,eAAO,MAAM;AAAA,MACf;AAAA,MACA,IAAI,OAAO;AACT,YAAI,CAAC,MAAM;AACT,sBAAY,KAAK;AACnB,gCAAA;AACA,aAAK,eAAe,KAAK;AACzB,aAAK,kBAAkB;AAAA,UACrB,MAAM;AAAA,UACN,YAAY,IAAI,UAAU;AAAA,QAAA,CAC3B;AAAA,MACH;AAAA,IAAA,CACD;AAMD,UAAM,YAAY,SAAS,MAAM;AAC/B,YAAM,SAAyD,CAAA;AAC/D,YAAM,SAAS,IAAI,QAAQ;AAC3B,UAAI,CAAC;AACH,eAAO;AAET,UAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC1B,YAAI,OAAO;AACT,iBAAO,OAAO,MAAM,IAAI;AAE1B,eAAO;AAAA,MACT;AAEA,aAAO,OAAO,OAAO,CAAC,KAAK,SAAS;AAClC,YAAI,CAAC,KAAK;AACR,iBAAO;AAET,eAAO,EAAE,GAAG,KAAK,CAAC,KAAK,MAAM,GAAG,KAAA;AAAA,MAClC,GAAG,MAAM;AAAA,IACX,CAAC;AAKD,UAAM,aAAa,SAAc,MAAM;AACrC,YAAM,QAAQ,MAAM,QAAQ,kBAAA;AAC5B,UAAI,CAAC;AACH,eAAO,MAAM;AAEf,aAAO,MAAM,KAAK;AAAA,QAAO,CAAA,QACvB,QAAQ,GAAG,EAAE;AAAA,UAAK,CAAA,QAChB,GAAG,IAAI,GAAG,CAAC,GAAG,oBAAoB,SAAS,KAAK;AAAA,QAAA;AAAA,MAClD;AAAA,IAEJ,CAAC;AAKD,UAAM,SAA2B,SAAS,MAAM;AAC9C,YAAM,SAAS,IAAI,QAAQ;AAC3B,YAAM,OAAO,CAAC,GAAG,IAAI,UAAU,CAAC;AAChC,UAAI,CAAC,UAAU,MAAM,eAAe;AAClC,eAAO;AAET,YAAM,cAAoC,EAAE,aAAa,UAAU,OAAO,OAAA;AAE1E,YAAM,OAAO,CAAC,OAAsB;AAClC,aAAK,KAAK,CAAC,GAAG,MAAM;AAClB,gBAAM,SAAS,GAAG;AAClB,cAAI,CAAC;AACH,mBAAO;AAET,cAAI,CAAC,QAAQ,MAAM,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,MAAM,CAAC;AAC5C,cAAI,GAAG,cAAc;AACnB,aAAC,QAAQ,MAAM,IAAI,CAAC,QAAQ,MAAM;AAEpC,gBAAM,UAAU,OAAO,MAAM;AAC7B,gBAAM,UAAU,OAAO,MAAM;AAC7B,cAAI,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO;AACnC,mBAAO,UAAU;AAEnB,iBAAO,GAAG,MAAM,GAAG;AAAA,YACjB,GAAG,MAAM;AAAA,YACT;AAAA,YACA;AAAA,UAAA;AAAA,QAEJ,CAAC;AAAA,MACH;AAEA,UAAI,CAAC,MAAM,QAAQ,MAAM;AACvB,aAAK,MAAM;AAAA;AAEX,SAAC,GAAG,MAAM,EAAE,QAAA,EAAU,QAAQ,IAAI;AAEpC,aAAO;AAAA,IACT,CAAC;AAKD,UAAM,eAAe,SAA+C,MAAM;AACxE,UAAI,CAAC,IAAI,SAAS,GAAG;AAEnB,eAAO,CAAA;AAAA,MACT;AAEA,YAAM,SAAS,IAAI,MAAM;AACzB,YAAM,aAAa,MAAM;AAEzB,aAAO,OAAO,OAAO,CAAC,KAA2C,QAAQ;AACvE,YAAI,CAAC,UAAU,IAAI,UAAU,CAAC,KAAK,IAAI,UAAU,MAAM;AACrD,iBAAO;AAET,cAAM,QAAQ,YAAY,GAAG;AAC7B,cAAM,WAAW,OAAO,OAAO,KAAK,EAAE,OAAO,SAAS,EAAE,KAAK,GAAG;AAChE,YAAI,CAAC,IAAI,QAAQ,GAAG;AAClB,cAAI,QAAQ,IAAI;AAAA,YACd;AAAA,cACE,YAAY;AAAA,cACZ;AAAA,cACA,YAAY;AAAA,YAAA;AAAA,UACd;AAAA,QAEJ;AAEA,YAAI,QAAQ,EAAE,KAAK,GAAG;AAEtB,eAAO;AAAA,MACT,GAAG,CAAA,CAAE;AAAA,IACP,CAAC;AAKD,UAAM,UAAU,SAA+B,MAAM;AACnD,YAAM,SAAS,IAAI,MAAM;AACzB,YAAM,aAAa,IAAI,QAAQ;AAE/B,UAAI,CAAC,YAAY;AAEf,eAAO;AAAA,MACT;AAEA,aAAO,OAAO,OAAO,IAAI,YAAY,CAAC,EAAE,QAAQ,CAAAC,aAAWA,QAAO;AAAA,IACpE,CAAC;AAKD,UAAM,WAAW,SAA+B,MAAM;AACpD,YAAM,SAAS,IAAI,OAAO;AAE1B,YAAM,YAAY,IAAI,cAAc;AACpC,YAAM,QAAQ,UAAU;AACxB,UAAI,aAAa,CAAC,MAAM,qBAAqB,UAAU;AACrD,cAAM,SAAS,UAAU,OAAO,KAAK;AACrC,cAAM,MAAM,QAAQ;AACpB,cAAM,YAAY,OAAO,MAAM,GAAG,QAAQ,CAAC,EAAE,OAAO,CAAA,SAAQ,CAAC,MAAM,IAAI,CAAC;AACxE,cAAM,aAAa,OAAO,MAAM,QAAQ,GAAG,MAAM,UAAU,MAAM,EAAE,OAAO,CAAA,SAAQ,CAAC,MAAM,IAAI,CAAC;AAC9F,cAAM,OAAO,OAAO,MAAM,QAAQ,UAAU,QAAQ,MAAM,UAAU,SAAS,WAAW,MAAM;AAC9F,cAAM,eAAe,UAAU,GAAG,EAAE;AACpC,YAAI,KAAK,SAAS,GAAG;AAEnB,gBAAM,YAAY,KAAK,CAAC;AACxB,iBAAO,SAAS;AAChB,cAAI,MAAM,SAAS,KAAK;AACtB,iBAAK,QAAQ,YAAY;AAC3B,gBAAM,WAAW,KAAK,GAAG,EAAE;AAE3B,cAAI,YAAY,CAAC,MAAM,QAAQ;AAC7B,iBAAK,IAAA;AAAA,QACT;AAEA,eAAO,KAAK,OAAO,CAAA,QAAO,CAAC,YAAY,GAAG,CAAC;AAAA,MAC7C;AAEA,aAAO,OAAO,OAAO,CAAA,QAAO,CAAC,YAAY,GAAG,CAAC;AAAA,IAC/C,CAAC;AAKD,UAAM,qBAAqB,SAAsB,MAAM;AACrD,YAAM,WAAW,MAAM;AAEvB,UAAI,CAAC;AACH,eAAO,CAAA;AAET,aAAO,IAAI,QAAQ,EAChB,OAAO,KAAK,EACZ,IAAI,CAAA,QAAO,IAAI,QAAQ,CAAC;AAAA,IAC7B,CAAC;AAKD,UAAM,gBAAgB,SAAkB,MAAM;AAC5C,YAAM,eAAe,IAAI,YAAY;AACrC,UAAI,CAAC;AACH,eAAO;AAET,aACE,aAAa,SAAS,KACnB,IAAI,kBAAkB,EAAE,MAAM,CAAA,OAAM,aAAa,SAAS,EAAE,CAAC;AAAA,IAEpE,CAAC;AAED,UAAM,gBAAgB,SAAS,MAAM;AACnC,YAAM,eAAe,IAAI,YAAY;AACrC,UAAI,CAAC;AACH,eAAO;AAET,aAAO,aAAa,SAAS,KAAK,CAAC,IAAI,aAAa;AAAA,IACtD,CAAC;AAED,UAAM,SAAS,SAAS,MAAM,IAAI,QAAQ,EAAE,WAAW,CAAC;AAExD,UAAM,UAAU,SAAS,MAAM;AAC7B,UAAI,eAAe,IAAI,OAAO,EAAE;AAChC,UAAI,IAAI,YAAY;AAClB;AAEF,aAAO;AAAA,IACT,CAAC;AAED,UAAM,aAAa,CAAC,QAAwB,OAAO,IAAI,SAAS;AAEhE,aAAS,aAAa,KAAqB;AACzC,YAAM,SAAS,IAAI,QAAQ;AAE3B,UAAI,CAAC,UAAU,CAAC,MAAM,QAAQ,MAAM,KAAK,CAAC,WAAW,GAAG;AACtD,eAAO;AAET,aAAO,OAAO,UAAU,CAAA,SAAQ,KAAK,WAAW,GAAG,KAAK;AAAA,IAC1D;AAEA,aAAS,WAAW,YAAuB;AACzC,YAAM,YAAY,IAAI,YAAY;AAClC,UAAI,CAAC;AACH,eAAO;AAET,aAAO,UAAU,SAAS,UAAU;AAAA,IACtC;AAEA,aAAS,cAAc,QAAmB;AACxC,YAAM,aAAa,MAAM;AACzB,UAAI,CAAC;AACH,eAAO;AAET,aAAO,CAAC,CAAC,IAAI,YAAY,GAAG,KAAK,CAAC,gBAAmB,WAAW,YAAY,UAAU,CAAC;AAAA,IACzF;AAEA,aAAS,WAAW,YAAuB;AACzC,YAAM,EAAE,aAAa;AACrB,UAAI,CAAC,UAAU;AACb,eAAO;AAET,aAAO,SAAS,KAAK,CAAA,SAAQ,KAAK,MAAM,OAAO,MAAM,UAAU;AAAA,IACjE;AAEA,aAAS,eAAe,KAAQ;AAC9B,YAAM,EAAE,aAAa;AACrB,UAAI,CAAC;AACH;AAEF,YAAM,MAAM,MAAM;AAClB,YAAM,cAAc,WAAW,IAAI,GAAG,CAAC;AAEvC,UAAI,MAAM;AACR,eAAO,KAAK,mBAAmB,cAAc,CAAA,IAAK,CAAC,GAAG,CAAC;AAEzD,aAAO;AAAA,QACL;AAAA,QACA,cACI,SAAS,OAAO,CAAA,SAAQ,KAAK,GAAG,MAAM,IAAI,GAAG,CAAC,IAC9C,CAAC,GAAG,UAAU,GAAG;AAAA,MAAA;AAAA,IAEzB;AAEA,aAAS,YAAY,KAAoB;AACvC,aAAO,IAAI,SAAS,EAAE,OAAO,CAAC,KAAK,SAAS,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,IAAI,GAAG,EAAA,IAAM,CAAA,CAAE;AAAA,IAC9E;AAEA,aAAS,aAAa,UAAkB;AACtC,UAAI,CAAC,IAAI,SAAS;AAChB,eAAO,CAAA;AAET,YAAM,YAAY,IAAI,YAAY,EAAE,QAAQ;AAC5C,aAAO,SAAS;AAChB,aAAO,UAAU,OAAO,KAAK;AAAA,IAC/B;AAEA,aAAS,gBAAgB,GAAM,GAAe;AAC5C,YAAM,QAAQ,IAAI,SAAS;AAC3B,UAAI,MAAM,WAAW;AACnB,eAAO;AAET,aAAO,MAAM,MAAM,CAAA,QAAO,EAAE,GAAG,MAAM,EAAE,GAAG,CAAC;AAAA,IAC7C;AAEA,aAAS,gBAAgB,OAAmB;AAC1C,aAAO,IAAI,aAAa,EAAE,MAAM,SAAO,CAAC,gBAAgB,KAAK,KAAK,CAAC;AAAA,IACrE;AAEA,aAAS,YAAY,KAAyB;AAC5C,YAAM,aAAa,MAAM;AACzB,aACE,IAAI,SAAS,KACV,IAAI,aAAa,EAAE;AAAA,QACpB,CAAA,UAAS,MAAM,GAAG,KAAK,IAAI,UAAU,MAAM,MAAM,UAAU;AAAA,MAAA;AAAA,IAGjE;AAEA,aAAS,oBAAoB,OAAmB,OAAgB;AAC9D,UAAI,CAAC;AACH;AAEF,YAAMC,aAAY,IAAI,aAAa;AAEnC,YAAM,gBAAgB,gBAAgB,KAAK;AAE3C,YAAM,YAAY,aAAa,KAAK;AAEpC;AAAA,QACE;AAAA,QACA,gBACI,CAAC,GAAGA,YAAW,GAAG,SAAS,IAC3BA,WAAU,OAAO,CAAA,QAAO,CAAC,gBAAgB,KAAK,KAAK,CAAC;AAAA,MAAA;AAG1D,WAAK,oBAAoB,IAAI,aAAa,CAAC;AAAA,IAC7C;AAEA,aAAS,YAAY;AACnB,UAAI,eAAe,EAAE;AAErB,WAAK,oBAAoB,EAAE;AAC3B,WAAK,gBAAgB,MAAM,QAAQ,MAAM,KAAK,IAAI,CAAA,IAAK,MAAS;AAAA,IAClE;AAEA,aAAS,YAAY,OAAqB;AACxC,WAAK,cAAc,KAAK;AAAA,IAC1B;AAKA,aAAS,OAAO;AAAA,MACd;AAAA,MACA;AAAA,IAAA,GAIC;AACD,YAAM,SAAS,IAAI,QAAQ;AAC3B,UAAI,CAAC;AACH;AAEF,UAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC1B,YAAI,WAAW,GAAG,GAAG;AACnB,gBAAM,eAAe,CAAC,aAAa,cAAc,QAAQ,SAAS;AAElE,cAAI,OAAO,cAAc,cAAc;AACrC,gBAAI,UAAU,EAAE,GAAG,QAAQ,QAAQ,QAAW,WAAW,OAAO;AAAA,UAClE,OACK;AACH,gBAAI,UAAU;AAAA,cACZ,GAAG;AAAA,cACH,WAAW,OAAO,cAAc,QAAQ,SAAS;AAAA,YAAA,CAClD;AAAA,UACH;AAAA,QACF,OACK;AACH,cAAI,UAAU,EAAE,QAAQ,KAAK,WAAW,aAAa,OAAO;AAAA,QAC9D;AACA;AAAA,MACF;AAEA,UAAI,WAAW,GAAG,GAAG;AACnB,cAAM,eAAe,CAAC,aAAa,cAAc,QAAQ,SAAS;AAElE,cAAM,QAAQ,aAAa,GAAG;AAC9B,cAAM,YAAY,OAAO,KAAK;AAC9B,eAAO,SAAS;AAEhB,YAAI,UAAU,cAAc;AAC1B,iBAAO,OAAO,OAAO,CAAC;AAAA;AAEtB,oBAAU,YAAY,UAAU,cAAc,QAAQ,SAAS;AAEjE,YAAI,UAAU,MAAM;AAAA,MACtB,OACK;AACH,YAAI,UAAU,CAAC,GAAG,QAAQ,EAAE,QAAQ,KAAK,WAAW,aAAa,MAAA,CAAO,CAAC;AAAA,MAC3E;AAAA,IACF;AAEA,aAAS,aAAa,QAA4B;AAChD,aAAO,WAAW,MAAM,KAAK,CAAC,cAAc,MAAM;AAAA,IACpD;AAEA,aAAS,WAAW,QAA4B;AAC9C,aAAO,WAAW,MAAM,KAAK,cAAc,MAAM;AAAA,IACnD;AAMA,aAAS,YAAY,SAAkB;AACrC,YAAM,eAAe,IAAI,YAAY;AAErC,UAAI,CAAC,UAAU,YAAY,GAAG;AAC5B;AAAA,MACF;AAEA,UAAI,CAAC,MAAM,iBAAiB;AAC1B,YAAI;AACF,cAAI,cAAc,IAAI,kBAAkB,EAAE,OAAO,YAAY,CAAC;AAAA;AAE9D,cAAI,cAAc,IAAI,kBAAkB,EAAE,OAAO,UAAU,CAAC;AAAA,MAChE,OACK;AACH,YAAI,SAAS;AACX;AAAA,YACE;AAAA,YACA,MAAM,KAAK,oBAAI;AAAA,cACb;AAAA,gBACE,GAAG;AAAA,gBACH,GAAG,IAAI,kBAAkB,EAAE,OAAO,YAAY;AAAA,cAAA;AAAA,YAChD,CACD;AAAA,UAAA;AAAA,QAEL,OACK;AACH;AAAA,YACE;AAAA,YACA,aAAa,OAAO,CAAA,WAAU,CAAC,IAAI,kBAAkB,EAAE,SAAS,MAAM,KAAK,IAAI,kBAAkB,EAAE,OAAO,UAAU,EAAE,SAAS,MAAM,CAAC;AAAA,UAAA;AAAA,QAE1I;AAAA,MACF;AAAA,IACF;AAEA,UAAM,eAA6B,IAAI,KAAK;AAC5C,UAAM,oBAAiC,IAAI,EAAE;AAE7C,aAAS,0BAA0B;AACjC,UAAI,cAAc,KAAK;AACvB,UAAI,mBAAmB,EAAE;AAAA,IAC3B;AASA,aAAS,SAAS,SAAkB,OAAgC,aAAa,OAAO;AACtF,UAAI,IAAI,YAAY,KAAK;AACvB;AAEF,YAAM,eAAe,IAAI,oBAAoB;AAC7C,UAAI,CAAC;AACH,eAAO;AAET,YAAM,WAAW,WAAW,KAAK;AAEjC,UAAI,WAAW,CAAC,UAAU;AACxB,YAAI,sBAAsB,CAAC,GAAG,cAAc,KAAK,CAAC;AAAA,MACpD,WACS,CAAC,WAAW,UAAU;AAC7B;AAAA,UACE;AAAA,UACA,CAAC,GAAG,YAAY,EAAE,OAAO,CAAA,MAAK,MAAM,KAAK;AAAA,QAAA;AAAA,MAE7C;AAEA,UAAI;AACF,YAAI,cAAc,IAAI,oBAAoB,CAAC;AAAA,IAC/C;AAEA,aAAS,gBAAgB,OAAY,OAAgC,OAAe;AAClF,YAAM,QAAQ,MAAM,cAAc,cAAc,OAAO;AACvD,YAAM,WAAW,MAAM,OAAO;AAE9B,YAAM,WAAW,MAAM;AACvB,UAAI,cAAc,QAAQ;AAE1B,UAAI,SAAS,aAAa,SAAS;AACjC,YAAI,UAAU;AACZ,qBAAW,MAAM;AACf,gBAAI,YAAY,IAAI,iBAAiB;AACrC,gBAAI,cAAc;AAChB,0BAAY;AACd,kBAAM,YAAY,IAAI,QAAQ;AAC9B,kBAAM,mBAAmB,UAAU,SAAS;AAC5C,mBAAO,gBAAgB;AAEvB,gBAAI,MAAM,gBAAgB,GAAG;AAC3B,oBAAM,KAAK,IAAI,aAAa;AAC5B,oBAAM,eAAe,WAAW,iBAAiB,EAAE,CAAC;AAEpD,kBAAI,cAAc,OAAO;AACvB,yBAAS,CAAC,cAAc,KAAK;AAAA,cAC/B,OACK;AACH,sBAAM,OAAO,KAAK,IAAI,WAAW,KAAK;AACtC,sBAAM,KAAK,KAAK,IAAI,WAAW,KAAK;AAEpC,yBAAS,IAAI,MAAM,KAAK,IAAI,KAAK;AAC/B,wBAAM,mBAAmB,UAAU,CAAC;AACpC,yBAAO,gBAAgB;AACvB,sBAAI,MAAM,gBAAgB,KAAK,CAAC,cAAc,iBAAiB,EAAE,CAAC;AAChE,6BAAS,cAAc,iBAAiB,EAAE,CAAC;AAAA,gBAC/C;AAAA,cACF;AAEA,kBAAI,mBAAmB,KAAK;AAC5B,kBAAI,cAAc,IAAI,oBAAoB,CAAC;AAAA,YAC7C;AAAA,UACF,GAAG,CAAC;AAAA,QACN,OAEK;AAAE,cAAI,mBAAmB,KAAK;AAAA,QAAG;AAAA,MACxC;AAAA,IACF;AAEA,UAAM,SAAS,SAAS,MAAM,MAAM,MAAM;AAE1C,aAAS,sBAAsB;AAC7B,UAAI,YAAY,GAAG,QAAQ,CAAC,QAAmB;AAC7C,YAAI,WAAW,GAAG,KAAK,CAAC,IAAI,kBAAkB,EAAE,SAAS,GAAG;AAC1D,mBAAS,OAAO,KAAK,IAAI;AAAA,MAC7B,CAAC;AAAA,IACH;AAEA,aAAS,aAAa;AACpB,WAAK,mBAAmB,EAAE;AAC1B,UAAI,CAAC,MAAM;AACT,oBAAY,KAAK;AACnB,8BAAA;AAAA,IACF;AAEA,aAAS,iBAAiB,OAA6B;AACrD,UAAI,CAAC,MAAM,qBAAqB;AAC9B,YAAI,aAAa,MAAM,OAAO,KAAK,EAAE,MAAM;AAAA,IAC/C;AAEA,aAAS,UAAU,KAAQ,KAA4B;AACrD,aAAO,IAAI,GAAqB;AAAA,IAClC;AAKA,UAAM,yBAAyB,CAACF,gBAAe;AAC7C,UAAIA,aAAY,SAAS,IAAI,0BAA0B;AACrD,YAAI,cAAc,cAAcA,YAAW,KAAK;AAAA,IACpD,CAAC;AAED,UAAM,cAAc,cAAc,CAAC,iBAAiB;AAClD,UAAI,CAAC,IAAI,0BAA0B;AACjC;AAEF,UAAI,gBAAgB;AAAA,QAClB,GAAG,IAAI,cAAc;AAAA,QACrB,OAAO;AAAA,MAAA,CACR;AAAA,IACH,CAAC;AAKD,UAAM,QAAQ,MAAM;AAClB,UAAI,gBAAgB;AAAA,QAClB,GAAG,IAAI,cAAc;AAAA,QACrB,MAAM;AAAA,MAAA,CACP;AACD,kBAAY,KAAK;AACjB,8BAAA;AAAA,IACF,CAAC;AAED,UAAM,QAAQ,CAAC,UAAU;AACvB,UAAI,CAAC,MAAM;AACT,4BAAA;AACF,uBAAiB,KAAK;AAAA,IACxB,CAAC;AAMD,UAAM,gBAAgB,CAACA,gBAAe;AACpC,YAAM,EAAE,OAAO,OAAO,KAAA,IAASA;AAC/B,YAAM,WAAW,KAAK,KAAK,QAAQ,KAAK;AAExC,UAAI,WAAW,KAAK,OAAO,UAAU;AACnC,YAAI,gBAAgB;AAAA,UAClB,GAAGA;AAAAA,UACH,MAAM;AAAA,QAAA,CACP;AAAA,MACH;AAAA,IACF,CAAC;AAED,cAAU,MAAM;AACd,uBAAiB,IAAI,MAAM,CAAC;AAE5B,UAAI,CAAC,IAAI,0BAA0B;AACjC;AAEF,UAAI,gBAAgB;AAAA,QAClB,GAAG,IAAI,cAAc;AAAA,QACrB,OAAO,IAAI,cAAc,YAAY;AAAA,MAAA,CACtC;AAAA,IACH,CAAC;;0BAICG,mBAgUM,OAAA;AAAA,QA/TH,OAAKC,eAAA;AAAA,UAAUC,KAAAA,OAAO;AAAA,UAAeA,KAAAA,mBAAmB,QAAA,OAAO,EAAA;AAAA,aAAcA,KAAAA,OAAO,QAAQ,GAAG,QAAA,SAAA;AAAA,QAAQ;;QAOhGC,MAAA,cAAA,MAAmB,QAAA,kCAD3BC,YAQE,oBAAA;AAAA;sBANSD,MAAA,cAAA;AAAA;0EAAA,eAAc,QAAA,SAAA;AAAA,kDAKF,WAAA;AAAA,UAAU;AAAA,UAJ9B,OAAO,QAAA;AAAA,UACP,SAAS,QAAA;AAAA,UACT,oBAAkB,QAAA;AAAA,UACnB,WAAQ;AAAA,QAAA;QAGVE,mBAsSM,OAAA;AAAA,mBArSA;AAAA,UAAJ,KAAI;AAAA,UACH,OAAKJ,eAAEC,KAAAA,OAAO,QAAQ;AAAA,QAAA;UAEvBG,mBAiSQ,SAAA;AAAA,qBAhSF;AAAA,YAAJ,KAAI;AAAA,YACH,OAAKJ,eAAA,CAAGC,YAAO,UAAUA,KAAAA,OAAO,KAAK,GAAG,QAAA,MAAA,CAAK,CAAA;AAAA,YAC7C,aAAW,QAAA;AAAA,YACZ,cAAW;AAAA,UAAA;YAEXI,YA4Be,cAAA;AAAA,cA3BZ,SAAS,QAAA;AAAA,cACT,eAAeH,MAAA,aAAA;AAAA,cACf,uBAAqB,QAAA;AAAA,cACrB,SAASA,MAAA,OAAA;AAAA,cACT,eAAa,QAAA;AAAA,cACb,SAASA,MAAA,OAAA;AAAA,cACT,OAAO,QAAA;AAAA,cACP,qBAAiB,CAAGA,MAAA,QAAA,GAAU;AAAA,cAC9B,mBAAiBA,MAAA,aAAA;AAAA,cACjB,WAASA,MAAA,MAAA;AAAA,cACT,cAAcA,MAAA,YAAA;AAAA,cACd,aAAWA,MAAA,QAAA;AAAA,cACX,cAAYA,MAAA,SAAA;AAAA,cACZ,OAAOA,MAAA,KAAA;AAAA,cACP,iBAAeA,MAAA,YAAA;AAAA,cACf,QAAI,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,OAAO,MAAM;AAAA,cACnB,gBAAU,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,YAAY,MAAM;AAAA,YAAA;cAGRI,WAAAJ,MAAA,WAAA,IAAd,eAAU;;wBAChB;AAAA,kBAED,IAAAK,QAAA,CAFe,aAAQ;AAAA,oBAEvBC,WAGE,KAAA,QAFO,YAAUC,eAAAC,mBACT,QAAQ,CAAA,CAAA;AAAA,kBAAA;;;;YAKdR,MAAA,YAAA,kBADRC,YAwBe,cAAA;AAAA;cAtBZ,SAAS,QAAA;AAAA,cACT,uBAAqB,QAAA;AAAA,cACrB,SAASD,MAAA,OAAA;AAAA,cACT,eAAa,QAAA;AAAA,cACb,SAASA,MAAA,OAAA;AAAA,cACT,OAAO,QAAA;AAAA,cACP,WAASA,MAAA,MAAA;AAAA,cACT,cAAcA,MAAA,YAAA;AAAA,cACd,aAAWA,MAAA,QAAA;AAAA,cACX,cAAYA,MAAA,SAAA;AAAA,cACb,WAAQ;AAAA,cACR,OAAM;AAAA,YAAA;cAGiBI,WAAAJ,MAAA,WAAA,IAAd,eAAU;;wBAChB;AAAA,kBAED,IAAAK,QAAA,CAFe,aAAQ;AAAA,oBAEvBC,WAGE,KAAA,QAFO,YAAUC,eAAAC,mBACT,QAAQ,CAAA,CAAA;AAAA,kBAAA;;;;YAItBN,mBAiOQ,SAAA;AAAA,cAjOA,uBAAQH,KAAAA,OAAO,OAAK,EAAA,CAAKA,KAAAA,iCAAiC,QAAA,QAAA,CAAO,CAAA;AAAA,YAAA;cAE/D,MAAK,cAAA,IADbO,WAIE,KAAA,QAAA,gBAAA;AAAA;gBAFC,SAASN,MAAA,OAAA;AAAA,cAAA;eAGZS,UAAA,IAAA,GAAAZ,mBA2JWa,UAAA,MAAAN,WA3JsBJ,MAAA,QAAA,GAAQ,CAAvB,KAAK,UAAK;;kBAEjB,CAAA,MAAM,GAAG,kBADlBH,mBAuEK,MAAA;AAAA,oBArEF,YAAY,KAAK;AAAA,oBACjB,uBAAQE,KAAAA,OAAO,IAAIA,KAAAA,OAAO,SAAS,CAAA;AAAA,kBAAA;oBAEpCO,WAiEO,KAAA,QAAA,gBAAA;AAAA,sBA/DJ,SAASN,MAAA,OAAA;AAAA,sBACT,QAAQ;AAAA,sBACR,QAAS,gBAAgB,IAAI,KAAK;AAAA,sBAClC,QAAM,MAAQ,oBAAoB,IAAI,OAAO,IAAI,UAAU;AAAA,oBAAA,GAL9D,MAiEO;AAAA,sBA1DLE,mBAyDK,MAAA;AAAA,wBAxDF,OAAKJ,eAAA,CAAA,CAAGC,KAAAA,OAAO,EAAE,GACZ,MAAM,CAAA;AAAA,wBACX,SAASC,MAAA,OAAA;AAAA,sBAAA;wBAEVE,mBAmDM,OAnDN,YAmDM;AAAA,0BAjDI,QAAA,8BAAyB,wBADjCD,YAIE,iBAAA;AAAA;4BAFC,UAAU,gBAAgB,IAAI,KAAK;AAAA,4BACnC,SAAK,CAAA,WAAE,oBAAoB,IAAI,OAAO,IAAI,UAAU;AAAA,0BAAA;0BAEvDK,WAoBO,KAAA,QAAA,wBAAA;AAAA,4BAnBJ,UAAWN,MAAA,QAAA;AAAA,4BAEX,QAAQ;AAAA,0BAAA,GAHX,MAoBO;AAAA,4BAfLE,mBAAiD,8BAAxCF,MAAA,QAAA,CAAQ,IAAG,OAAEW,gBAAG,IAAI,UAAU,GAAA,CAAA;AAAA,4BACvCR,YAaY,WAAA;AAAA,8BAZV,MAAK;AAAA,8BACL,SAAQ;AAAA,8BACR,MAAA;AAAA,8BACA,WAAQ;AAAA,8BACP,SAAK,CAAA,WAA6B,YAAW,EAAA,KAAQH,MAAA,QAAA,GAAQ,OAAS,IAAI,MAAA,CAAK;AAAA,4BAAA;+CAIhF,MAGE;AAAA,gCAHFG,YAGE,SAAA;AAAA,kCAFA,MAAK;AAAA,kCACL,MAAK;AAAA,gCAAA;;;;;0BAIXA,YAkBa,YAAA;AAAA,4BAjBV,QAAQ,EAAA,WAAA,MAAA;AAAA,4BACT,OAAM;AAAA,0BAAA;4BAEK,mBACT,MAUY;AAAA,8BAVZA,YAUY,WAAA;AAAA,gCATV,MAAK;AAAA,gCACL,SAAQ;AAAA,gCACR,MAAA;AAAA,gCACC,+CAAO,UAAA;AAAA,8BAAS;iDAEjB,MAGE;AAAA,kCAHFA,YAGE,SAAA;AAAA,oCAFA,MAAK;AAAA,oCACL,MAAK;AAAA,kCAAA;;;;;6CAGA,MAEb;AAAA,wEAFa,aAEb,EAAA;AAAA,4BAAA;;;0BAEQ,QAAA,8BAAyB,sBADjCF,YAIE,iBAAA;AAAA;4BAFC,UAAU,gBAAgB,IAAI,KAAK;AAAA,4BACnC,SAAK,CAAA,WAAE,oBAAoB,IAAI,OAAO,IAAI,UAAU;AAAA,0BAAA;;;;yCAM/DJ,mBAiFWa,UAAA,EAAA,KAAA,KAAA;AAAA,kCAhFTb,mBA8DK,MAAA;AAAA,sBA7DF,YAAY,KAAK;AAAA,sBACjB,OAAKC,eAAA;AAAA,wBAAsBC,KAAAA,OAAO;AAAA,wBAAyBA,EAAAA,CAAAA,KAAAA,OAAO,gBAAY,EAAA,GAAS,WAAW,IAAIC,MAAA,aAAA,CAAa,CAAA,EAAA;AAAA,wBAA+B,OAAA,QAAA,cAAS,WAAgB,QAAA,YAAY,QAAA,UAAU,GAAG;AAAA,sBAAA;sBAKpM,iBAAeA,sBAAe,WAAW,IAAIA,MAAA,aAAA,CAAa,CAAA,IAAK;AAAA,oBAAA;sBAGxDA,MAAA,YAAA,kBADRH,mBAiBK,MAAA;AAAA;wBAfF,OAAKC,eAAEC,KAAAA,OAAO,QAAQ;AAAA,wBACvB,SAAQ;AAAA,wBACR,SAAQ;AAAA,sBAAA;wBAERI,YAUE,aAAA;AAAA,0BATC,iCAA+B,KAAK;AAAA,0BACpC,eAAa,WAAW,IAAIH,MAAA,aAAA,CAAa,CAAA;AAAA,0BACzC,UAAU,cAAc,IAAIA,MAAA,aAAA,CAAa,CAAA;AAAA,0BACzC,MAAM,QAAA,QAAK,OAAU;AAAA,0BACtB,OAAM;AAAA,0BACN,OAAM;AAAA,0BACN,gBAAA;AAAA,0BACC,mCAAoB,SAAS,QAAQ,IAAIA,MAAA,aAAA,CAAa,GAAA,IAAA;AAAA,0BACtD,SAAK,CAAA,WAAE,gBAAgB,QAAQ,IAAIA,MAAA,aAAA,CAAa,GAAG,KAAK;AAAA,wBAAA;;uBAI7DS,UAAA,IAAA,GAAAZ,mBAiCKa,UAAA,MAAAN,WAhC0BJ,MAAA,OAAA,GAAO,CAA5B,QAAQ,aAAQ;4CAD1BH,mBAiCK,MAAA;AAAA,0BA/BF,KAAK;AAAA,0BACL,OAAKC,eAAA;AAAA,4BAAwBC,KAAAA,OAAO;AAAA,4BAAwB,OAAO;AAAA,4BAA+BA,KAAAA,OAAM,UAAW,OAAO,SAAK,OAAA,EAAA;AAAA,0BAAA;0BAK/H,SAAS,OAAO,WAAO;AAAA,0BACvB,SAAS,OAAO,WAAO;AAAA,wBAAA;0BAGhB,OAAO,QAAG,WADlBO,WAYO,KAAA,QAAA,QAVU,OAAO,IAAI,SAAA,CAAQ,IAAA;AAAA;4BACjC;AAAA,4BACA;AAAA,4BACA;AAAA,0BAAA,GALH,MAYO;AAAA,6BAJI,MAAK,aAAA,kBADdL,YAIE,iBAAA;AAAA;8BAFC,UAAU,WAAW,IAAID,MAAA,aAAA,CAAa,CAAA;AAAA,8BACtC,SAAK,CAAA,WAAE,eAAe,GAAG;AAAA,4BAAA;+BAG9BM,WAQO,KAAA,QAAA,QAJU,OAAO,IAAI,SAAA,CAAQ,IAAA;AAAA;4BAFjC;AAAA,4BACA;AAAA,4BAEA;AAAA,0BAAA,GALH,MAQO;AAAA,4BADFM,gBAAAD,gBAAA,UAAU,KAAK,OAAO,GAAG,CAAA,GAAA,CAAA;AAAA,0BAAA;;;;oBAM1BX,MAAA,UAAA,KAAc,WAAW,IAAIA,MAAA,aAAA,CAAa,CAAA,kBADlDH,mBAeK,MAAA;AAAA,sBAbF,mBAAmB,KAAK;AAAA,sBACxB,uBAAQE,KAAAA,OAAO,IAAIA,KAAAA,OAAO,cAAc,CAAA;AAAA,oBAAA;sBAEzCG,mBASK,MAAA;AAAA,wBARF,SAASF,MAAA,OAAA;AAAA,wBACT,OAAKF,eAAA,CAAGC,KAAAA,OAAO,EAAE,CAAA;AAAA,sBAAA;wBAElBO,WAIE,KAAA,QAAA,iBAAA;AAAA,0BAFC;AAAA,0BACA;AAAA,wBAAA;;;;;;cAOH,QAAA,WAAWN,MAAA,MAAA,kBADnBH,mBAaK,MAAA,YAAA;AAAA,gBAVHK,mBASK,MAAA;AAAA,kBARF,OAAKJ,eAAEC,KAAAA,OAAO,aAAa;AAAA,kBAC3B,SAASC,MAAA,OAAA;AAAA,gBAAA;kBAEVG,YAIE,aAAA;AAAA,oBAHA,OAAM;AAAA,oBACN,SAAQ;AAAA,oBACR,UAAA;AAAA,kBAAA;;;cAKEH,MAAA,MAAA,KAAU,QAAA,SAAK,CAAK,QAAA,wBAD5BH,mBA2CK,MAAA;AAAA;gBAzCF,uBAAQE,KAAAA,OAAO,IAAIA,KAAAA,OAAO,SAAS,CAAA;AAAA,cAAA;gBAEpCI,YAsCaU,YAAA;AAAA,kBArCX,QAAA;AAAA,kBACA,sBAAmB;AAAA,kBACnB,oBAAiB;AAAA,kBACjB,kBAAe;AAAA,kBACf,sBAAmB;AAAA,kBACnB,oBAAiB;AAAA,kBACjB,kBAAe;AAAA,gBAAA;mCAEf,MA4BK;AAAA,oBA5BLX,mBA4BK,MAAA;AAAA,sBA3BF,OAAKJ,eAAEC,KAAAA,OAAO,EAAE;AAAA,sBAChB,SAASC,MAAA,OAAA;AAAA,oBAAA;sBAEVM,WAuBO,4BAvBP,MAuBO;AAAA,wBAtBLJ,mBAqBM,OAAA;AAAA,0BArBA,OAAKJ,eAAEC,KAAAA,OAAO,KAAK;AAAA,wBAAA;0BACvBG,mBAIE,OAAA;AAAA,4BAHC,KAAKF,MAAA,MAAA,IAASA,MAAA,qBAAA,IAAwBA,MAAA,iBAAA;AAAA,4BACtC,KAAK,QAAA,MAAM;AAAA,4BACZ,OAAM;AAAA,0BAAA;0BAGA,QAAA,MAAM,sBADdH,mBAKI,KAAA;AAAA;4BAHD,OAAKC,eAAEC,KAAAA,OAAO,YAAY;AAAA,0BAAA,GAExBY,gBAAA,QAAA,MAAM,KAAK,GAAA,CAAA;0BAGhBL,WAOO,sCAPP,MAOO;AAAA,4BALG,QAAA,MAAM,4BADdT,mBAKI,KAAA;AAAA;8BAHD,OAAKC,eAAEC,KAAAA,OAAO,kBAAkB;AAAA,4BAAA,GAE9BY,gBAAA,QAAA,MAAM,WAAW,GAAA,CAAA;;;;;;;;;cAS1B,MAAK,aAAA,IADbL,WAIE,KAAA,QAAA,eAAA;AAAA;gBAFC,SAASN,MAAA,OAAA;AAAA,cAAA;;YAIdE,mBAEQ,SAAA,MAAA;AAAA,cADNI,WAAqB,KAAA,QAAA,OAAA;AAAA,YAAA;;;QAKnBN,MAAA,cAAA,MAAmB,QAAA,kCAD3BC,YAQE,oBAAA;AAAA;sBANSD,MAAA,cAAA;AAAA;0EAAA,eAAc,QAAA,SAAA;AAAA,kDAKF,WAAA;AAAA,UAAU;AAAA,UAJ9B,OAAO,QAAA;AAAA,UACP,SAAS,QAAA;AAAA,UACT,oBAAkB,QAAA;AAAA,UACnB,WAAQ;AAAA,QAAA;;;;;"}
@@ -1,4 +1,4 @@
1
- import { defineComponent, createBlock, openBlock, mergeProps, withCtx, renderSlot, createVNode, normalizeClass } from "vue";
1
+ import { defineComponent, openBlock, createBlock, mergeProps, withCtx, renderSlot, createVNode, normalizeClass } from "vue";
2
2
  import RuiButton from "../buttons/button/RuiButton.vue.js";
3
3
  import RuiIcon from "../icons/RuiIcon.vue.js";
4
4
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -19,6 +19,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
19
19
  [_ctx.$style.tr__expander_button_open ?? ""]: __props.expanded
20
20
  }
21
21
  ],
22
+ "aria-expanded": __props.expanded,
22
23
  icon: "",
23
24
  size: "sm",
24
25
  variant: "text"
@@ -32,7 +33,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
32
33
  ])
33
34
  ]),
34
35
  _: 3
35
- }, 16, ["class"]);
36
+ }, 16, ["class", "aria-expanded"]);
36
37
  };
37
38
  }
38
39
  });
@@ -1 +1 @@
1
- {"version":3,"file":"RuiExpandButton.vue2.js","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\nwithDefaults(defineProps<Props>(), { icon: 'lu-chevron-down' });\n</script>\n\n<template>\n <RuiButton\n :class=\"[\n $style.tr__expander_button,\n {\n [$style.tr__expander_button_open ?? '']: expanded,\n },\n ]\"\n icon\n size=\"sm\"\n variant=\"text\"\n v-bind=\"$attrs\"\n >\n <slot>\n <RuiIcon\n :class=\"$style.tr__expander_button_icon\"\n :name=\"icon\"\n />\n </slot>\n </RuiButton>\n</template>\n\n<style lang=\"scss\" module>\n.tr__expander {\n &_button {\n @apply relative;\n\n &_icon {\n @apply transition rotate-0;\n }\n\n &_open .tr__expander_button_icon {\n @apply rotate-180;\n }\n }\n}\n</style>\n"],"names":["_openBlock","_createBlock","_mergeProps","$style","$attrs","_renderSlot","_createVNode","_normalizeClass"],"mappings":";;;;;;;;;;;;;;AAkBE,aAAAA,UAAA,GAAAC,YAkBY,WAlBZC,WAkBY;AAAA,QAjBT,OAAK;AAAA,UAAUC,KAAAA,OAAO;AAAA;aAAsCA,KAAAA,OAAO,4BAAwB,EAAA,GAAS,QAAA;AAAA,UAAA;AAAA;QAMrG,MAAA;AAAA,QACA,MAAK;AAAA,QACL,SAAQ;AAAA,MAAA,GACAC,KAAAA,MAAM,GAAA;AAAA,yBAEd,MAKO;AAAA,UALPC,WAKO,4BALP,MAKO;AAAA,YAJLC,YAGE,SAAA;AAAA,cAFC,OAAKC,eAAEJ,KAAAA,OAAO,wBAAwB;AAAA,cACtC,MAAM,QAAA;AAAA,YAAA;;;;;;;;"}
1
+ {"version":3,"file":"RuiExpandButton.vue2.js","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\nwithDefaults(defineProps<Props>(), { icon: 'lu-chevron-down' });\n</script>\n\n<template>\n <RuiButton\n :class=\"[\n $style.tr__expander_button,\n {\n [$style.tr__expander_button_open ?? '']: expanded,\n },\n ]\"\n :aria-expanded=\"expanded\"\n icon\n size=\"sm\"\n variant=\"text\"\n v-bind=\"$attrs\"\n >\n <slot>\n <RuiIcon\n :class=\"$style.tr__expander_button_icon\"\n :name=\"icon\"\n />\n </slot>\n </RuiButton>\n</template>\n\n<style lang=\"scss\" module>\n.tr__expander {\n &_button {\n @apply relative;\n\n &_icon {\n @apply transition rotate-0;\n }\n\n &_open .tr__expander_button_icon {\n @apply rotate-180;\n }\n }\n}\n</style>\n"],"names":["_openBlock","_createBlock","_mergeProps","$style","$attrs","_renderSlot","_createVNode","_normalizeClass"],"mappings":";;;;;;;;;;;;;;AAkBE,aAAAA,UAAA,GAAAC,YAmBY,WAnBZC,WAmBY;AAAA,QAlBT,OAAK;AAAA,UAAUC,KAAAA,OAAO;AAAA;aAAsCA,KAAAA,OAAO,4BAAwB,EAAA,GAAS,QAAA;AAAA,UAAA;AAAA;QAMpG,iBAAe,QAAA;AAAA,QAChB,MAAA;AAAA,QACA,MAAK;AAAA,QACL,SAAQ;AAAA,MAAA,GACAC,KAAAA,MAAM,GAAA;AAAA,yBAEd,MAKO;AAAA,UALPC,WAKO,4BALP,MAKO;AAAA,YAJLC,YAGE,SAAA;AAAA,cAFC,OAAKC,eAAEJ,KAAAA,OAAO,wBAAwB;AAAA,cACtC,MAAM,QAAA;AAAA,YAAA;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { defineComponent, createElementBlock, openBlock, normalizeClass, createElementVNode, createCommentVNode, createVNode, Fragment, renderList, renderSlot, createBlock, withCtx, createSlots, createTextVNode, toDisplayString } from "vue";
1
+ import { defineComponent, openBlock, createElementBlock, normalizeClass, createElementVNode, createVNode, createCommentVNode, Fragment, renderList, renderSlot, createBlock, withCtx, createSlots, createTextVNode, toDisplayString } 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";
@@ -15,8 +15,8 @@ declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {},
15
15
  }, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
16
16
  "onUpdate:model-value"?: ((value: TablePaginationData) => any) | undefined;
17
17
  }>, {
18
- dense: boolean;
19
18
  loading: boolean;
19
+ dense: boolean;
20
20
  disablePerPage: boolean;
21
21
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
22
22
  declare const _default: typeof __VLS_export;
@@ -1,10 +1,10 @@
1
- import { defineComponent, toRefs, computed, createElementBlock, openBlock, normalizeClass, createElementVNode, createVNode, unref, isRef, createBlock, createCommentVNode, toDisplayString, withCtx } from "vue";
1
+ import { defineComponent, toRefs, computed, openBlock, createElementBlock, normalizeClass, createElementVNode, createVNode, unref, isRef, createBlock, createCommentVNode, toDisplayString, withCtx } from "vue";
2
2
  import RuiButton from "../buttons/button/RuiButton.vue.js";
3
3
  import RuiMenuSelect from "../forms/select/RuiMenuSelect.vue.js";
4
4
  import RuiIcon from "../icons/RuiIcon.vue.js";
5
5
  import { useTable } from "../../composables/defaults/table.js";
6
- import { get } from "@vueuse/shared";
7
6
  import { formatInteger } from "../../utils/helpers.js";
7
+ import { get } from "@vueuse/shared";
8
8
  const _sfc_main = /* @__PURE__ */ defineComponent({
9
9
  __name: "RuiTablePagination",
10
10
  props: {
@@ -108,7 +108,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
108
108
  "key-attr": "limit",
109
109
  "text-attr": "limit",
110
110
  "hide-details": "",
111
- dense: ""
111
+ dense: "",
112
+ "data-cy": "table-pagination-limit"
112
113
  }, null, 8, ["modelValue", "options", "disabled"])
113
114
  ], 2),
114
115
  createElementVNode("div", {
@@ -128,20 +129,23 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
128
129
  "key-attr": "page",
129
130
  "text-attr": "text",
130
131
  "hide-details": "",
131
- dense: ""
132
+ dense: "",
133
+ "data-cy": "table-pagination-ranges"
132
134
  }, null, 8, ["modelValue", "options", "disabled"])) : createCommentVNode("", true),
133
135
  createElementVNode("span", {
134
136
  class: normalizeClass(_ctx.$style.indicator)
135
137
  }, toDisplayString(unref(indicatorText)), 3)
136
138
  ], 2),
137
139
  createElementVNode("div", {
138
- class: normalizeClass(_ctx.$style.navigation)
140
+ class: normalizeClass(_ctx.$style.navigation),
141
+ "data-cy": "table-pagination-navigation"
139
142
  }, [
140
143
  createVNode(RuiButton, {
141
144
  size: __props.dense ? "sm" : void 0,
142
145
  disabled: !unref(hasPrev) || __props.loading,
143
146
  variant: "text",
144
147
  icon: "",
148
+ "data-cy": "table-pagination-first",
145
149
  onClick: _cache[2] || (_cache[2] = ($event) => onFirst())
146
150
  }, {
147
151
  default: withCtx(() => [
@@ -154,6 +158,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
154
158
  disabled: !unref(hasPrev) || __props.loading,
155
159
  variant: "text",
156
160
  icon: "",
161
+ "data-cy": "table-pagination-prev",
157
162
  onClick: _cache[3] || (_cache[3] = ($event) => onPrev())
158
163
  }, {
159
164
  default: withCtx(() => [
@@ -166,6 +171,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
166
171
  disabled: !unref(hasNext) || __props.loading,
167
172
  variant: "text",
168
173
  icon: "",
174
+ "data-cy": "table-pagination-next",
169
175
  onClick: _cache[4] || (_cache[4] = ($event) => onNext())
170
176
  }, {
171
177
  default: withCtx(() => [
@@ -178,6 +184,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
178
184
  disabled: !unref(hasNext) || __props.loading,
179
185
  variant: "text",
180
186
  icon: "",
187
+ "data-cy": "table-pagination-last",
181
188
  onClick: _cache[5] || (_cache[5] = ($event) => onLast())
182
189
  }, {
183
190
  default: withCtx(() => [
@@ -1 +1 @@
1
- {"version":3,"file":"RuiTablePagination.vue2.js","sources":["../../../src/components/tables/RuiTablePagination.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiMenuSelect from '@/components/forms/select/RuiMenuSelect.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\n\nexport interface TablePaginationData {\n page: number;\n total: number;\n limit: number;\n limits?: number[];\n}\n\nexport interface Props {\n modelValue: TablePaginationData;\n dense?: boolean;\n disablePerPage?: boolean;\n loading?: boolean;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n dense: false,\n loading: false,\n disablePerPage: false,\n});\n\nconst emit = defineEmits<{\n (e: 'update:model-value', value: TablePaginationData): void;\n}>();\n\nconst { modelValue } = toRefs(props);\n\nconst tableDefaults = useTable();\n\nconst limits = computed(() => (get(modelValue).limits ?? get(tableDefaults.limits)).map(limit => ({ limit })));\n\nconst currentLimit = computed({\n get: () => get(modelValue).limit,\n set: limit =>\n emit('update:model-value', {\n ...get(modelValue),\n limit: Number(limit),\n page: 1,\n }),\n});\n\nconst pages = computed(() => {\n const { limit, total } = get(modelValue);\n if (!total)\n return 0;\n\n return Math.ceil(total / limit);\n});\n\nconst ranges = computed(() => {\n const segments = [];\n\n for (let page = 1; page <= get(pages); page++)\n segments.push({ page, text: pageRangeText(page) });\n\n return segments;\n});\n\nconst indicatorText = computed(() => {\n const { total } = get(modelValue);\n return `${!total ? '0 ' : ''}of ${formatInteger(total)}`;\n});\n\nconst currentRange = computed({\n get: () => get(modelValue).page,\n set: page =>\n emit('update:model-value', {\n ...get(modelValue),\n page,\n }),\n});\n\nconst hasPrev = computed(() => get(modelValue).page > 1);\nconst hasNext = computed(() => get(pages) > get(modelValue).page);\n\nfunction goToPage(page: number) {\n emit('update:model-value', {\n ...get(modelValue),\n page,\n });\n}\n\nfunction pageRangeText(page: number) {\n const { limit, total } = get(modelValue);\n return `${formatInteger((page - 1) * limit + 1)} - ${formatInteger(\n Math.min(page * limit, total),\n )}`;\n}\n\nfunction onNavigate(delta: number) {\n goToPage(get(modelValue).page + delta);\n}\n\nfunction onPrev() {\n if (!get(hasPrev))\n return;\n\n onNavigate(-1);\n}\n\nfunction onNext() {\n if (!get(hasNext))\n return;\n\n onNavigate(1);\n}\n\nfunction onFirst() {\n if (!get(hasPrev))\n return;\n\n goToPage(1);\n}\n\nfunction onLast() {\n if (!get(hasNext))\n return;\n\n goToPage(get(pages));\n}\n</script>\n\n<template>\n <div :class=\"[$style.wrapper, { [$style['wrapper-dense'] ?? '']: dense }]\">\n <div :class=\"$style.limit\">\n <span :class=\"$style.limit__text\">Rows per page:</span>\n <RuiMenuSelect\n v-model=\"currentLimit\"\n :options=\"limits\"\n :disabled=\"loading || disablePerPage\"\n label-class=\"!text-xs !min-h-8\"\n name=\"limit\"\n key-attr=\"limit\"\n text-attr=\"limit\"\n hide-details\n dense\n />\n </div>\n <div :class=\"$style.ranges\">\n <span :class=\"$style.ranges__text\">Items #</span>\n <RuiMenuSelect\n v-if=\"ranges.length > 0\"\n v-model=\"currentRange\"\n :options=\"ranges\"\n :disabled=\"loading\"\n label-class=\"!text-xs !min-h-8\"\n name=\"ranges\"\n key-attr=\"page\"\n text-attr=\"text\"\n hide-details\n dense\n />\n <span :class=\"$style.indicator\">\n {{ indicatorText }}\n </span>\n </div>\n <div :class=\"$style.navigation\">\n <RuiButton\n :size=\"dense ? 'sm' : undefined\"\n :disabled=\"!hasPrev || loading\"\n variant=\"text\"\n icon\n @click=\"onFirst()\"\n >\n <RuiIcon name=\"lu-chevrons-left\" />\n </RuiButton>\n <RuiButton\n :size=\"dense ? 'sm' : undefined\"\n :disabled=\"!hasPrev || loading\"\n variant=\"text\"\n icon\n @click=\"onPrev()\"\n >\n <RuiIcon name=\"lu-chevron-left\" />\n </RuiButton>\n <RuiButton\n :size=\"dense ? 'sm' : undefined\"\n :disabled=\"!hasNext || loading\"\n variant=\"text\"\n icon\n @click=\"onNext()\"\n >\n <RuiIcon name=\"lu-chevron-right\" />\n </RuiButton>\n <RuiButton\n :size=\"dense ? 'sm' : undefined\"\n :disabled=\"!hasNext || loading\"\n variant=\"text\"\n icon\n @click=\"onLast()\"\n >\n <RuiIcon name=\"lu-chevrons-right\" />\n </RuiButton>\n </div>\n </div>\n</template>\n\n<style module lang=\"scss\">\n.wrapper {\n @apply relative flex flex-wrap items-center justify-end gap-x-4 gap-y-0;\n\n .limit {\n @apply flex items-center space-x-2 text-caption;\n\n &__text {\n @apply text-rui-text-secondary whitespace-nowrap py-3;\n }\n }\n\n .ranges {\n @apply flex items-center space-x-2 text-caption pr-2;\n\n &__text {\n @apply text-rui-text-secondary whitespace-nowrap py-3;\n }\n }\n\n .indicator {\n @apply text-rui-text text-caption whitespace-nowrap;\n }\n\n .navigation {\n @apply flex items-center;\n }\n\n &-dense {\n @apply gap-x-2;\n }\n}\n</style>\n"],"names":["_createElementBlock","$style","_createElementVNode","_normalizeClass","_createVNode","_unref","_createBlock"],"mappings":"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"}
1
+ {"version":3,"file":"RuiTablePagination.vue2.js","sources":["../../../src/components/tables/RuiTablePagination.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiMenuSelect from '@/components/forms/select/RuiMenuSelect.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport { useTable } from '@/composables/defaults/table';\nimport { formatInteger } from '@/utils/helpers';\n\nexport interface TablePaginationData {\n page: number;\n total: number;\n limit: number;\n limits?: number[];\n}\n\nexport interface Props {\n modelValue: TablePaginationData;\n dense?: boolean;\n disablePerPage?: boolean;\n loading?: boolean;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n dense: false,\n loading: false,\n disablePerPage: false,\n});\n\nconst emit = defineEmits<{\n (e: 'update:model-value', value: TablePaginationData): void;\n}>();\n\nconst { modelValue } = toRefs(props);\n\nconst tableDefaults = useTable();\n\nconst limits = computed(() => (get(modelValue).limits ?? get(tableDefaults.limits)).map(limit => ({ limit })));\n\nconst currentLimit = computed({\n get: () => get(modelValue).limit,\n set: limit =>\n emit('update:model-value', {\n ...get(modelValue),\n limit: Number(limit),\n page: 1,\n }),\n});\n\nconst pages = computed(() => {\n const { limit, total } = get(modelValue);\n if (!total)\n return 0;\n\n return Math.ceil(total / limit);\n});\n\nconst ranges = computed(() => {\n const segments = [];\n\n for (let page = 1; page <= get(pages); page++)\n segments.push({ page, text: pageRangeText(page) });\n\n return segments;\n});\n\nconst indicatorText = computed(() => {\n const { total } = get(modelValue);\n return `${!total ? '0 ' : ''}of ${formatInteger(total)}`;\n});\n\nconst currentRange = computed({\n get: () => get(modelValue).page,\n set: page =>\n emit('update:model-value', {\n ...get(modelValue),\n page,\n }),\n});\n\nconst hasPrev = computed(() => get(modelValue).page > 1);\nconst hasNext = computed(() => get(pages) > get(modelValue).page);\n\nfunction goToPage(page: number) {\n emit('update:model-value', {\n ...get(modelValue),\n page,\n });\n}\n\nfunction pageRangeText(page: number) {\n const { limit, total } = get(modelValue);\n return `${formatInteger((page - 1) * limit + 1)} - ${formatInteger(\n Math.min(page * limit, total),\n )}`;\n}\n\nfunction onNavigate(delta: number) {\n goToPage(get(modelValue).page + delta);\n}\n\nfunction onPrev() {\n if (!get(hasPrev))\n return;\n\n onNavigate(-1);\n}\n\nfunction onNext() {\n if (!get(hasNext))\n return;\n\n onNavigate(1);\n}\n\nfunction onFirst() {\n if (!get(hasPrev))\n return;\n\n goToPage(1);\n}\n\nfunction onLast() {\n if (!get(hasNext))\n return;\n\n goToPage(get(pages));\n}\n</script>\n\n<template>\n <div :class=\"[$style.wrapper, { [$style['wrapper-dense'] ?? '']: dense }]\">\n <div :class=\"$style.limit\">\n <span :class=\"$style.limit__text\">Rows per page:</span>\n <RuiMenuSelect\n v-model=\"currentLimit\"\n :options=\"limits\"\n :disabled=\"loading || disablePerPage\"\n label-class=\"!text-xs !min-h-8\"\n name=\"limit\"\n key-attr=\"limit\"\n text-attr=\"limit\"\n hide-details\n dense\n data-cy=\"table-pagination-limit\"\n />\n </div>\n <div :class=\"$style.ranges\">\n <span :class=\"$style.ranges__text\">Items #</span>\n <RuiMenuSelect\n v-if=\"ranges.length > 0\"\n v-model=\"currentRange\"\n :options=\"ranges\"\n :disabled=\"loading\"\n label-class=\"!text-xs !min-h-8\"\n name=\"ranges\"\n key-attr=\"page\"\n text-attr=\"text\"\n hide-details\n dense\n data-cy=\"table-pagination-ranges\"\n />\n <span :class=\"$style.indicator\">\n {{ indicatorText }}\n </span>\n </div>\n <div\n :class=\"$style.navigation\"\n data-cy=\"table-pagination-navigation\"\n >\n <RuiButton\n :size=\"dense ? 'sm' : undefined\"\n :disabled=\"!hasPrev || loading\"\n variant=\"text\"\n icon\n data-cy=\"table-pagination-first\"\n @click=\"onFirst()\"\n >\n <RuiIcon name=\"lu-chevrons-left\" />\n </RuiButton>\n <RuiButton\n :size=\"dense ? 'sm' : undefined\"\n :disabled=\"!hasPrev || loading\"\n variant=\"text\"\n icon\n data-cy=\"table-pagination-prev\"\n @click=\"onPrev()\"\n >\n <RuiIcon name=\"lu-chevron-left\" />\n </RuiButton>\n <RuiButton\n :size=\"dense ? 'sm' : undefined\"\n :disabled=\"!hasNext || loading\"\n variant=\"text\"\n icon\n data-cy=\"table-pagination-next\"\n @click=\"onNext()\"\n >\n <RuiIcon name=\"lu-chevron-right\" />\n </RuiButton>\n <RuiButton\n :size=\"dense ? 'sm' : undefined\"\n :disabled=\"!hasNext || loading\"\n variant=\"text\"\n icon\n data-cy=\"table-pagination-last\"\n @click=\"onLast()\"\n >\n <RuiIcon name=\"lu-chevrons-right\" />\n </RuiButton>\n </div>\n </div>\n</template>\n\n<style module lang=\"scss\">\n.wrapper {\n @apply relative flex flex-wrap items-center justify-end gap-x-4 gap-y-0;\n\n .limit {\n @apply flex items-center space-x-2 text-caption;\n\n &__text {\n @apply text-rui-text-secondary whitespace-nowrap py-3;\n }\n }\n\n .ranges {\n @apply flex items-center space-x-2 text-caption pr-2;\n\n &__text {\n @apply text-rui-text-secondary whitespace-nowrap py-3;\n }\n }\n\n .indicator {\n @apply text-rui-text text-caption whitespace-nowrap;\n }\n\n .navigation {\n @apply flex items-center;\n }\n\n &-dense {\n @apply gap-x-2;\n }\n}\n</style>\n"],"names":["_createElementBlock","$style","_createElementVNode","_normalizeClass","_createVNode","_unref","_createBlock"],"mappings":"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"}
@@ -27,11 +27,11 @@ declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, i
27
27
  onClick?: ((value: string | number) => any) | undefined;
28
28
  }>, {
29
29
  value: number | string;
30
- color: ContextColorsType;
31
30
  link: boolean;
32
- disabled: boolean;
33
31
  active: boolean;
34
32
  vertical: boolean;
33
+ color: ContextColorsType;
34
+ disabled: boolean;
35
35
  align: "start" | "center" | "end";
36
36
  target: string;
37
37
  to: RouteLocationRaw;
@@ -1,4 +1,4 @@
1
- import { defineComponent, useSlots, toRefs, useCssModule, computed, resolveComponent, createBlock, unref, openBlock, mergeProps, createSlots, renderList, withCtx, renderSlot, normalizeProps, guardReactiveProps, createVNode } from "vue";
1
+ import { defineComponent, useSlots, toRefs, useCssModule, computed, resolveComponent, unref, openBlock, createBlock, mergeProps, createSlots, renderList, withCtx, renderSlot, normalizeProps, guardReactiveProps, createVNode } from "vue";
2
2
  import RuiButton from "../../buttons/button/RuiButton.vue.js";
3
3
  import { generateId } from "../../../utils/generate-id.js";
4
4
  import { get } from "@vueuse/shared";
@@ -55,7 +55,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
55
55
  class: unref(tabClass),
56
56
  "hide-focus-indicator": "",
57
57
  tabindex: "-1",
58
- role: "tab"
58
+ role: "tab",
59
+ "aria-selected": unref(active)
59
60
  }, _ctx.$attrs), createSlots({ _: 2 }, [
60
61
  renderList(slots, (_, name) => {
61
62
  return {
@@ -65,11 +66,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
65
66
  ])
66
67
  };
67
68
  })
68
- ]), 1040, ["class"])) : !__props.link ? (openBlock(), createBlock(RuiButton, mergeProps({
69
+ ]), 1040, ["class", "aria-selected"])) : !__props.link ? (openBlock(), createBlock(RuiButton, mergeProps({
69
70
  key: 1,
70
71
  class: unref(tabClass),
71
72
  color: unref(active) ? __props.color : void 0,
72
- role: "tab"
73
+ role: "tab",
74
+ "aria-selected": unref(active)
73
75
  }, _ctx.$attrs, {
74
76
  tabindex: "-1",
75
77
  "hide-focus-indicator": "",
@@ -84,7 +86,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
84
86
  ])
85
87
  };
86
88
  })
87
- ]), 1040, ["class", "color"])) : (openBlock(), createBlock(_component_RouterLink, {
89
+ ]), 1040, ["class", "color", "aria-selected"])) : (openBlock(), createBlock(_component_RouterLink, {
88
90
  key: 2,
89
91
  to: __props.to,
90
92
  exact: __props.exact,
@@ -103,6 +105,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
103
105
  href: unref(isSelf) ? void 0 : href,
104
106
  target: unref(target),
105
107
  role: "tab",
108
+ "aria-selected": unref(active) || (__props.exact ? isExactActive : isActive),
106
109
  "no-outline": "",
107
110
  tag: "a",
108
111
  "hide-focus-indicator": "",
@@ -122,7 +125,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
122
125
  ])
123
126
  };
124
127
  })
125
- ]), 1040, ["class", "color", "href", "target", "onClick"])
128
+ ]), 1040, ["class", "color", "href", "target", "aria-selected", "onClick"])
126
129
  ]),
127
130
  _: 3
128
131
  }, 8, ["to", "exact", "exact-path"]));