@rotki/ui-library 2.12.2 → 2.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/accordions/accordion/RuiAccordion.vue.d.ts +6 -14
- package/dist/components/accordions/accordion/RuiAccordion.vue.js +3 -4
- package/dist/components/accordions/accordion/RuiAccordion.vue.js.map +1 -1
- package/dist/components/accordions/accordions/RuiAccordions.vue.d.ts +10 -9
- package/dist/components/accordions/accordions/RuiAccordions.vue.js +27 -26
- package/dist/components/accordions/accordions/RuiAccordions.vue.js.map +1 -1
- package/dist/components/alerts/RuiAlert.vue.d.ts +5 -15
- package/dist/components/alerts/RuiAlert.vue2.js +8 -16
- package/dist/components/alerts/RuiAlert.vue2.js.map +1 -1
- package/dist/components/buttons/button/RuiButton.vue.d.ts +5 -7
- package/dist/components/buttons/button/RuiButton.vue2.js +19 -20
- package/dist/components/buttons/button/RuiButton.vue2.js.map +1 -1
- package/dist/components/buttons/button-group/RuiButtonGroup.vue.d.ts +6 -5
- package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js +42 -41
- package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js.map +1 -1
- package/dist/components/calendar/RuiCalendar.vue.d.ts +1 -6
- package/dist/components/calendar/RuiCalendar.vue.js +6 -7
- package/dist/components/calendar/RuiCalendar.vue.js.map +1 -1
- package/dist/components/calendar/RuiCalendarGrid.vue.js +1 -1
- package/dist/components/calendar/RuiCalendarGrid.vue2.js +19 -17
- package/dist/components/calendar/RuiCalendarGrid.vue2.js.map +1 -1
- package/dist/components/calendar/RuiCalendarHeader.vue.js +1 -1
- package/dist/components/calendar/RuiCalendarHeader.vue2.js +2 -3
- package/dist/components/calendar/RuiCalendarHeader.vue2.js.map +1 -1
- package/dist/components/calendar/RuiCalendarMenu.vue.js +1 -1
- package/dist/components/calendar/RuiCalendarMenu.vue2.js +47 -39
- package/dist/components/calendar/RuiCalendarMenu.vue2.js.map +1 -1
- package/dist/components/cards/RuiCard.vue.d.ts +9 -24
- package/dist/components/cards/RuiCard.vue2.js +7 -7
- package/dist/components/cards/RuiCard.vue2.js.map +1 -1
- package/dist/components/cards/RuiCardHeader.vue.d.ts +5 -10
- package/dist/components/cards/RuiCardHeader.vue2.js.map +1 -1
- package/dist/components/chips/RuiChip.vue.d.ts +7 -21
- package/dist/components/chips/RuiChip.vue2.js +16 -21
- package/dist/components/chips/RuiChip.vue2.js.map +1 -1
- package/dist/components/color-picker/RuiColorBoard.vue.d.ts +1 -1
- package/dist/components/color-picker/RuiColorBoard.vue2.js +14 -18
- package/dist/components/color-picker/RuiColorBoard.vue2.js.map +1 -1
- package/dist/components/color-picker/RuiColorDisplay.vue.js +3 -5
- package/dist/components/color-picker/RuiColorDisplay.vue.js.map +1 -1
- package/dist/components/color-picker/RuiColorHue.vue2.js +10 -13
- package/dist/components/color-picker/RuiColorHue.vue2.js.map +1 -1
- package/dist/components/color-picker/RuiColorInput.vue.js +8 -6
- package/dist/components/color-picker/RuiColorInput.vue.js.map +1 -1
- package/dist/components/color-picker/RuiColorPicker.vue.d.ts +7 -9
- package/dist/components/color-picker/RuiColorPicker.vue.js +18 -13
- package/dist/components/color-picker/RuiColorPicker.vue.js.map +1 -1
- package/dist/components/color-picker/utils.js +22 -5
- package/dist/components/color-picker/utils.js.map +1 -1
- package/dist/components/date-time-picker/RuiDateTimePicker.vue.d.ts +2 -44
- package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js +73 -77
- package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js.map +1 -1
- package/dist/components/date-time-picker/dayjs-setup.d.ts +1 -0
- package/dist/components/date-time-picker/dayjs-setup.js +8 -0
- package/dist/components/date-time-picker/dayjs-setup.js.map +1 -0
- package/dist/components/date-time-picker/segment-config.d.ts +14 -0
- package/dist/components/date-time-picker/segment-config.js +23 -0
- package/dist/components/date-time-picker/segment-config.js.map +1 -0
- package/dist/components/date-time-picker/segment-utils.d.ts +5 -0
- package/dist/components/date-time-picker/segment-utils.js +36 -0
- package/dist/components/date-time-picker/segment-utils.js.map +1 -0
- package/dist/components/date-time-picker/use-date-time-selection.d.ts +1 -0
- package/dist/components/date-time-picker/use-date-time-selection.js +1 -0
- package/dist/components/date-time-picker/use-date-time-selection.js.map +1 -1
- package/dist/components/date-time-picker/use-keyboard-handler.d.ts +4 -8
- package/dist/components/date-time-picker/use-keyboard-handler.js +9 -54
- package/dist/components/date-time-picker/use-keyboard-handler.js.map +1 -1
- package/dist/components/date-time-picker/utils.d.ts +1 -0
- package/dist/components/date-time-picker/utils.js +1 -0
- package/dist/components/date-time-picker/utils.js.map +1 -1
- package/dist/components/divider/RuiDivider.vue.d.ts +1 -3
- package/dist/components/divider/RuiDivider.vue.js.map +1 -1
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +9 -1120
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js +144 -160
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js.map +1 -1
- package/dist/components/forms/checkbox/RuiCheckbox.vue.d.ts +15 -24
- package/dist/components/forms/checkbox/RuiCheckbox.vue2.js +31 -31
- package/dist/components/forms/checkbox/RuiCheckbox.vue2.js.map +1 -1
- package/dist/components/forms/radio-button/radio/RuiRadio.vue.d.ts +1 -1
- package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js +18 -21
- package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js.map +1 -1
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.d.ts +3 -1
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js +12 -15
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js.map +1 -1
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.d.ts +5 -11
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js +6 -7
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js.map +1 -1
- package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +9 -784
- package/dist/components/forms/select/RuiMenuSelect.vue2.js +48 -51
- package/dist/components/forms/select/RuiMenuSelect.vue2.js.map +1 -1
- package/dist/components/forms/select/RuiSimpleSelect.vue.d.ts +10 -11
- package/dist/components/forms/select/RuiSimpleSelect.vue2.js +15 -24
- package/dist/components/forms/select/RuiSimpleSelect.vue2.js.map +1 -1
- package/dist/components/forms/slider/RuiSlider.vue.d.ts +10 -26
- package/dist/components/forms/slider/RuiSlider.vue2.js +41 -46
- package/dist/components/forms/slider/RuiSlider.vue2.js.map +1 -1
- package/dist/components/forms/switch/RuiSwitch.vue.d.ts +12 -20
- package/dist/components/forms/switch/RuiSwitch.vue2.js +21 -20
- package/dist/components/forms/switch/RuiSwitch.vue2.js.map +1 -1
- package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +5 -30
- package/dist/components/forms/text-area/RuiTextArea.vue2.js +43 -79
- package/dist/components/forms/text-area/RuiTextArea.vue2.js.map +1 -1
- package/dist/components/forms/text-field/RuiTextField.vue.d.ts +7 -27
- package/dist/components/forms/text-field/RuiTextField.vue2.js +35 -66
- package/dist/components/forms/text-field/RuiTextField.vue2.js.map +1 -1
- package/dist/components/helpers/RuiFormTextDetail.vue.d.ts +1 -5
- package/dist/components/helpers/RuiFormTextDetail.vue.js +5 -9
- package/dist/components/helpers/RuiFormTextDetail.vue.js.map +1 -1
- package/dist/components/icons/LazyIcon.vue.d.ts +1 -3
- package/dist/components/icons/RuiIcon.vue.d.ts +1 -4
- package/dist/components/icons/RuiIcon.vue2.js +8 -8
- package/dist/components/icons/RuiIcon.vue2.js.map +1 -1
- package/dist/components/index.d.ts +3 -3
- package/dist/components/loaders/RuiSkeletonBase.vue.d.ts +1 -3
- package/dist/components/loaders/RuiSkeletonBase.vue2.js +1 -1
- package/dist/components/loaders/RuiSkeletonBase.vue2.js.map +1 -1
- package/dist/components/loaders/RuiSkeletonLoader.vue.d.ts +1 -4
- package/dist/components/loaders/RuiSkeletonLoader.vue2.js +1 -1
- package/dist/components/loaders/RuiSkeletonLoader.vue2.js.map +1 -1
- package/dist/components/logos/RuiLogo.vue.d.ts +1 -7
- package/dist/components/logos/RuiLogo.vue.js +11 -13
- package/dist/components/logos/RuiLogo.vue.js.map +1 -1
- package/dist/components/overlays/badge/RuiBadge.vue.d.ts +5 -20
- package/dist/components/overlays/badge/RuiBadge.vue2.js +11 -13
- package/dist/components/overlays/badge/RuiBadge.vue2.js.map +1 -1
- package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.d.ts +10 -5
- package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js +18 -7
- package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js.map +1 -1
- package/dist/components/overlays/dialog/RuiDialog.vue.d.ts +21 -27
- package/dist/components/overlays/dialog/RuiDialog.vue2.js +80 -63
- package/dist/components/overlays/dialog/RuiDialog.vue2.js.map +1 -1
- package/dist/components/overlays/menu/RuiMenu.vue.d.ts +24 -35
- package/dist/components/overlays/menu/RuiMenu.vue2.js +67 -76
- package/dist/components/overlays/menu/RuiMenu.vue2.js.map +1 -1
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.d.ts +22 -30
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js +71 -47
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js.map +1 -1
- package/dist/components/overlays/notification/RuiNotification.vue.d.ts +12 -12
- package/dist/components/overlays/notification/RuiNotification.vue.js +25 -22
- package/dist/components/overlays/notification/RuiNotification.vue.js.map +1 -1
- package/dist/components/overlays/tooltip/RuiTooltip.vue.d.ts +7 -18
- package/dist/components/overlays/tooltip/RuiTooltip.vue2.js +11 -8
- package/dist/components/overlays/tooltip/RuiTooltip.vue2.js.map +1 -1
- package/dist/components/progress/RuiProgress.vue.d.ts +8 -10
- package/dist/components/progress/RuiProgress.vue2.js +18 -24
- package/dist/components/progress/RuiProgress.vue2.js.map +1 -1
- package/dist/components/steppers/RuiFooterStepper.vue.d.ts +10 -11
- package/dist/components/steppers/RuiFooterStepper.vue2.js +21 -21
- package/dist/components/steppers/RuiFooterStepper.vue2.js.map +1 -1
- package/dist/components/steppers/RuiStepper.vue.d.ts +6 -15
- package/dist/components/steppers/RuiStepper.vue2.js +31 -33
- package/dist/components/steppers/RuiStepper.vue2.js.map +1 -1
- package/dist/components/steppers/RuiStepperCustomIcon.vue.d.ts +1 -3
- package/dist/components/steppers/RuiStepperCustomIcon.vue2.js +1 -1
- package/dist/components/steppers/RuiStepperCustomIcon.vue2.js.map +1 -1
- package/dist/components/steppers/RuiStepperIcon.vue.d.ts +1 -3
- package/dist/components/steppers/RuiStepperIcon.vue2.js +1 -1
- package/dist/components/steppers/RuiStepperIcon.vue2.js.map +1 -1
- package/dist/components/tables/RuiDataTable.vue.d.ts +29 -81
- package/dist/components/tables/RuiDataTable.vue2.js +173 -582
- package/dist/components/tables/RuiDataTable.vue2.js.map +1 -1
- package/dist/components/tables/RuiDataTable.vue3.js +24 -27
- package/dist/components/tables/RuiDataTable.vue3.js.map +1 -1
- package/dist/components/tables/RuiExpandButton.vue.d.ts +3 -6
- package/dist/components/tables/RuiExpandButton.vue2.js +1 -0
- package/dist/components/tables/RuiExpandButton.vue2.js.map +1 -1
- package/dist/components/tables/RuiTableHead.vue.d.ts +4 -7
- package/dist/components/tables/RuiTableHead.vue2.js +19 -19
- package/dist/components/tables/RuiTableHead.vue2.js.map +1 -1
- package/dist/components/tables/RuiTablePagination.vue.d.ts +10 -10
- package/dist/components/tables/RuiTablePagination.vue2.js +17 -16
- package/dist/components/tables/RuiTablePagination.vue2.js.map +1 -1
- package/dist/components/tabs/tab/RuiTab.vue.d.ts +3 -18
- package/dist/components/tabs/tab/RuiTab.vue2.js +80 -51
- package/dist/components/tabs/tab/RuiTab.vue2.js.map +1 -1
- package/dist/components/tabs/tab-item/RuiTabItem.vue.d.ts +3 -11
- package/dist/components/tabs/tab-item/RuiTabItem.vue2.js +1 -1
- package/dist/components/tabs/tab-item/RuiTabItem.vue2.js.map +1 -1
- package/dist/components/tabs/tab-items/RuiTabItems.vue.d.ts +1 -4
- package/dist/components/tabs/tab-items/RuiTabItems.vue2.js +18 -18
- package/dist/components/tabs/tab-items/RuiTabItems.vue2.js.map +1 -1
- package/dist/components/tabs/tabs/RuiTabs.vue.d.ts +10 -14
- package/dist/components/tabs/tabs/RuiTabs.vue2.js +101 -94
- package/dist/components/tabs/tabs/RuiTabs.vue2.js.map +1 -1
- package/dist/components/time-picker/RuiTimePicker.vue.d.ts +1 -4
- package/dist/components/time-picker/RuiTimePicker.vue2.js +68 -35
- package/dist/components/time-picker/RuiTimePicker.vue2.js.map +1 -1
- package/dist/composables/breakpoint.js +8 -13
- package/dist/composables/breakpoint.js.map +1 -1
- package/dist/composables/dropdown-menu.d.ts +7 -4
- package/dist/composables/dropdown-menu.js +73 -50
- package/dist/composables/dropdown-menu.js.map +1 -1
- package/dist/composables/forms/auto-complete/focus.d.ts +7 -5
- package/dist/composables/forms/auto-complete/focus.js +28 -17
- package/dist/composables/forms/auto-complete/focus.js.map +1 -1
- package/dist/composables/forms/auto-complete/index.d.ts +0 -9
- package/dist/composables/forms/auto-complete/keyboard-navigation.d.ts +8 -3
- package/dist/composables/forms/auto-complete/keyboard-navigation.js +11 -5
- package/dist/composables/forms/auto-complete/keyboard-navigation.js.map +1 -1
- package/dist/composables/forms/auto-complete/search.d.ts +7 -0
- package/dist/composables/forms/auto-complete/search.js +10 -8
- package/dist/composables/forms/auto-complete/search.js.map +1 -1
- package/dist/composables/forms/auto-complete/value.d.ts +4 -0
- package/dist/composables/forms/auto-complete/value.js +24 -42
- package/dist/composables/forms/auto-complete/value.js.map +1 -1
- package/dist/composables/forms/use-label-with-quote.d.ts +2 -0
- package/dist/composables/forms/use-label-with-quote.js +14 -0
- package/dist/composables/forms/use-label-with-quote.js.map +1 -0
- package/dist/composables/forms/use-prepend-append-width.d.ts +6 -0
- package/dist/composables/forms/use-prepend-append-width.js +25 -0
- package/dist/composables/forms/use-prepend-append-width.js.map +1 -0
- package/dist/composables/popper.js +60 -46
- package/dist/composables/popper.js.map +1 -1
- package/dist/composables/sticky-header.d.ts +7 -5
- package/dist/composables/sticky-header.js +51 -41
- package/dist/composables/sticky-header.js.map +1 -1
- package/dist/composables/tables/data-table/columns.d.ts +25 -0
- package/dist/composables/tables/data-table/columns.js +54 -0
- package/dist/composables/tables/data-table/columns.js.map +1 -0
- package/dist/composables/tables/data-table/expansion.d.ts +17 -0
- package/dist/composables/tables/data-table/expansion.js +38 -0
- package/dist/composables/tables/data-table/expansion.js.map +1 -0
- package/dist/composables/tables/data-table/grouping.d.ts +29 -0
- package/dist/composables/tables/data-table/grouping.js +136 -0
- package/dist/composables/tables/data-table/grouping.js.map +1 -0
- package/dist/composables/tables/data-table/pagination.d.ts +33 -0
- package/dist/composables/tables/data-table/pagination.js +119 -0
- package/dist/composables/tables/data-table/pagination.js.map +1 -0
- package/dist/composables/tables/data-table/selection.d.ts +29 -0
- package/dist/composables/tables/data-table/selection.js +164 -0
- package/dist/composables/tables/data-table/selection.js.map +1 -0
- package/dist/composables/tables/data-table/sort.d.ts +32 -0
- package/dist/composables/tables/data-table/sort.js +136 -0
- package/dist/composables/tables/data-table/sort.js.map +1 -0
- package/dist/composables/tables/data-table/types.d.ts +14 -0
- package/dist/composables/tables/data-table/types.js +11 -0
- package/dist/composables/tables/data-table/types.js.map +1 -0
- package/dist/composables/theme.js +1 -20
- package/dist/composables/theme.js.map +1 -1
- package/dist/composables/timeout-manager.d.ts +4 -2
- package/dist/composables/timeout-manager.js +2 -1
- package/dist/composables/timeout-manager.js.map +1 -1
- package/dist/icons/icons_1.js +28 -28
- package/dist/icons/icons_1.js.map +1 -1
- package/dist/icons/icons_2.d.ts +8 -8
- package/dist/icons/icons_2.js +52 -52
- package/dist/icons/icons_2.js.map +1 -1
- package/dist/icons/icons_3.d.ts +18 -18
- package/dist/icons/icons_3.js +108 -108
- package/dist/icons/icons_3.js.map +1 -1
- package/dist/icons/icons_4.d.ts +35 -0
- package/dist/icons/icons_4.js +176 -1
- package/dist/icons/icons_4.js.map +1 -1
- package/dist/icons/index.d.ts +1 -1
- package/dist/icons/index.js +1 -1
- package/dist/icons/index.js.map +1 -1
- package/dist/index.js +43 -15
- package/dist/index.js.map +1 -1
- package/dist/style.css +189 -162
- package/dist/theme/index.js +15 -1
- package/dist/theme/index.js.map +1 -1
- package/dist/utils/assert.d.ts +1 -1
- package/dist/utils/assert.js.map +1 -1
- package/dist/utils/form-text-detail.d.ts +9 -8
- package/dist/utils/form-text-detail.js +1 -2
- package/dist/utils/form-text-detail.js.map +1 -1
- package/dist/utils/helpers.d.ts +4 -32
- package/dist/utils/helpers.js +8 -9
- package/dist/utils/helpers.js.map +1 -1
- package/dist/utils/is-equal.d.ts +1 -1
- package/dist/utils/is-equal.js +5 -3
- package/dist/utils/is-equal.js.map +1 -1
- package/dist/web-types.json +359 -359
- package/package.json +44 -35
- package/dist/utils/generate-id.d.ts +0 -5
- package/dist/utils/generate-id.js +0 -21
- package/dist/utils/generate-id.js.map +0 -1
|
@@ -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 { 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
|
+
{"version":3,"file":"RuiDataTable.vue2.js","sources":["../../../src/components/tables/RuiDataTable.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object, IdType extends keyof T = keyof T\">\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiCheckbox from '@/components/forms/checkbox/RuiCheckbox.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiTooltip from '@/components/overlays/tooltip/RuiTooltip.vue';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\nimport RuiExpandButton from '@/components/tables/RuiExpandButton.vue';\nimport RuiTableHead, {\n type GroupData,\n type TableColumn,\n type TableRowKeyData,\n type TableSortData,\n} from '@/components/tables/RuiTableHead.vue';\nimport RuiTablePagination, {\n type TablePaginationData,\n} from '@/components/tables/RuiTablePagination.vue';\nimport 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 { useTableColumns } from '@/composables/tables/data-table/columns';\nimport { useTableExpansion } from '@/composables/tables/data-table/expansion';\nimport { useTableGrouping } from '@/composables/tables/data-table/grouping';\nimport { useTablePagination } from '@/composables/tables/data-table/pagination';\nimport { useTableSelection } from '@/composables/tables/data-table/selection';\nimport { useTableSort } from '@/composables/tables/data-table/sort';\nimport { type GroupHeader, isRow } from '@/composables/tables/data-table/types';\nimport { useRotkiTheme } from '@/composables/theme';\n\nexport type { GroupedTableRow, GroupHeader, TableOptions } from '@/composables/tables/data-table/types';\n\nexport interface Props<T, K extends keyof T> {\n /**\n * list of items for each row\n */\n rows: readonly T[];\n /**\n * the attribute used to identify each row uniquely for selection, usually `id`\n */\n rowAttr: K;\n /**\n * model for internal searching\n */\n search?: string;\n /**\n * model for items per page\n * will be used if the `pagination` model isn't specified\n */\n itemsPerPage?: number;\n /**\n * list of column definitions\n */\n cols?: TableColumn<T>[];\n /**\n * attribute to use from column definitions to display column titles\n */\n columnAttr?: keyof TableColumn<T>;\n /**\n * flag to show a more or less spacious table\n */\n dense?: boolean;\n /**\n * flag to outline the flag with a border\n */\n outlined?: boolean;\n /**\n * should add zebra-striping to the table row\n */\n striped?: boolean;\n /**\n * flag to show loading state of the table\n * triggers indefinite progress at the bottom of the table header\n */\n loading?: boolean;\n disablePerPage?: boolean;\n /**\n * data to display for empty state\n * text and icon\n * @example :empty=\"{ icon: 'transactions-line', label: 'No transactions found' }\"\n */\n empty?: {\n label?: string;\n description?: string;\n };\n /**\n * should hide the header navigation\n */\n hideDefaultHeader?: boolean;\n /**\n * should hide the footer navigation\n */\n hideDefaultFooter?: boolean;\n\n rounded?: 'sm' | 'md' | 'lg';\n /**\n * make expansion work like accordion\n */\n singleExpand?: boolean;\n /**\n * make table head stick to top on scroll\n */\n stickyHeader?: boolean;\n stickyOffset?: number;\n /**\n * Affects how the items per page work across the app.\n * When true, changing the items per page setting in one table will affect other tables.\n */\n globalItemsPerPage?: boolean;\n groupExpandButtonPosition?: 'start' | 'end';\n disabledRows?: readonly T[];\n multiPageSelect?: boolean;\n itemClass?: ((item: T) => string) | string;\n}\n\ndefineOptions({\n name: 'RuiDataTable',\n});\n\nconst selectedData = defineModel<T[IdType][]>();\n\nconst expanded = defineModel<T[]>('expanded');\n\nconst [pagination, paginationModifiers] = defineModel<TablePaginationData, 'external'>('pagination');\n\nconst [sort, sortModifiers] = defineModel<TableSortData<T>, 'external'>('sort');\n\nconst group = defineModel<TableRowKeyData<T>>('group');\n\nconst collapsed = defineModel<T[]>('collapsed');\n\nconst {\n rows,\n rowAttr,\n search = '',\n itemsPerPage = 10,\n cols,\n columnAttr = 'label',\n dense = false,\n outlined = false,\n striped = false,\n loading = false,\n disablePerPage = false,\n empty = { label: 'No item found' },\n hideDefaultHeader = false,\n hideDefaultFooter = false,\n rounded = 'md',\n singleExpand = false,\n stickyHeader = false,\n stickyOffset,\n globalItemsPerPage = undefined,\n groupExpandButtonPosition = 'start',\n disabledRows,\n multiPageSelect = false,\n itemClass = '',\n} = defineProps<Props<T, IdType>>();\n\nconst emit = defineEmits<{\n 'update:options': [value: { pagination?: TablePaginationData; sort?: TableSortData<T> }];\n 'copy:group': [value: GroupData<T>];\n}>();\n\nconst slots = defineSlots<Partial<\n Record<`header.${string}`, (props: { column: TableColumn<T> }) => any> &\n Record<`item.${string}`, (props: { column: TableColumn<T>; row: T; index: number }) => any> & {\n 'body.prepend': (props: { colspan: number }) => any;\n 'body.append': (props: { colspan: number }) => any;\n 'group.header': (props: {\n colspan: number;\n header: GroupHeader<T>;\n isOpen: boolean;\n toggle: () => void;\n }) => any;\n 'group.header.content': (props: { header: GroupHeader<T>; groupKey: string }) => any;\n 'expanded-item': (props: { row: T; index: number }) => any;\n 'no-data': () => any;\n 'empty-description': () => any;\n 'tfoot': () => any;\n }\n>>();\n\nconst tableDefaults = useTable();\n\nconst { isDark } = useRotkiTheme();\n\nconst stickyHeaderOffset = computed<number | undefined>(() =>\n stickyOffset !== undefined ? stickyOffset : get(tableDefaults.stickyOffset),\n);\n\nconst table = useTemplateRef<HTMLTableElement>('table');\nconst tableScroller = useTemplateRef<HTMLElement>('tableScroller');\n\nconst { stick } = useStickyTableHeader(\n toRef(() => stickyHeader),\n stickyHeaderOffset,\n { table, tableScroller },\n);\n\nconst hasExpandedItemSlot = computed<boolean>(() => !!slots['expanded-item']);\n\nconst { expandable, isExpanded, onToggleExpand } = useTableExpansion<T, IdType>(\n { rowAttr, singleExpand },\n { expanded, hasExpandedItemSlot },\n);\n\nfunction emitUpdateOptions(opts: { sort?: TableSortData<T>; pagination?: TablePaginationData }): void {\n emit('update:options', opts);\n}\n\nconst {\n sortData,\n sortedMap,\n sorted,\n onSort: applySort,\n} = useTableSort<T>(\n { rows: () => rows, search: () => search, sortModifiersExternal: sortModifiers.external },\n {\n sort,\n pagination,\n emitUpdateOptions,\n },\n);\n\nconst {\n groupKeys,\n groupKey,\n grouped,\n isExpandedGroup,\n isHiddenRow,\n onToggleExpandGroup,\n onUngroup,\n onCopyGroup,\n} = useTableGrouping<T, IdType>(\n { rowAttr },\n {\n group,\n collapsed,\n sorted,\n emitCopyGroup: (value: GroupData<T>) => emit('copy:group', value),\n },\n);\n\nconst {\n paginationData,\n filtered,\n setInternalTotal,\n resetPagination,\n} = useTablePagination<T>(\n {\n itemsPerPage,\n paginationModifiersExternal: paginationModifiers.external,\n globalItemsPerPage,\n },\n {\n pagination,\n grouped,\n isHiddenRow,\n sort,\n emitUpdateOptions,\n tableDefaults,\n },\n);\n\nconst noData = computed<boolean>(() => get(filtered).length === 0);\n\nconst { columns, colspan, headerSlots, cellValue } = useTableColumns<T, IdType>({\n cols: () => cols,\n columnAttr,\n rows: () => rows,\n expandable,\n groupKeys,\n selectedData,\n slots,\n});\n\nconst {\n isAllSelected,\n indeterminate,\n isSelected,\n isDisabledRow,\n onToggleAll,\n onSelect,\n onCheckboxClick,\n deselectRemovedRows,\n resetCheckboxShiftState,\n} = useTableSelection<T, IdType>(\n { rowAttr, multiPageSelect, disabledRows: () => disabledRows },\n { selectedData, filtered },\n);\n\n// Sort triggers selection reset — handled here to avoid circular dependency between sort and selection\nfunction onSort(payload: Parameters<typeof applySort>[0]): void {\n applySort(payload);\n if (!multiPageSelect)\n onToggleAll(false);\n resetCheckboxShiftState();\n}\n\nfunction onPaginate(): void {\n set(expanded, []);\n if (!multiPageSelect)\n onToggleAll(false);\n resetCheckboxShiftState();\n}\n\n// Reset pagination page to 1 on search query change\nwatch(() => search, () => {\n resetPagination();\n onToggleAll(false);\n resetCheckboxShiftState();\n});\n\nwatch(sorted, (items) => {\n if (!multiPageSelect)\n deselectRemovedRows();\n setInternalTotal(items);\n});\n\nonMounted(() => {\n setInternalTotal(get(sorted));\n});\n</script>\n\n<template>\n <div\n :class=\"[$style.wrapper, $style[`rounded__${rounded}`], { [$style.outlined]: outlined }]\"\n data-id=\"table-wrapper\"\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 data-id=\"table-scroller\"\n >\n <table\n ref=\"table\"\n :class=\"[$style.table, { [$style.dense]: dense }]\"\n :aria-busy=\"loading\"\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 <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n v-if=\"slots['body.prepend']\"\n :colspan=\"colspan\"\n name=\"body.prepend\"\n />\n <template v-for=\"(row, index) in filtered\">\n <tr\n v-if=\"!isRow(row)\"\n :key=\"`row-${index}`\"\n :class=\"[$style.tr, $style.tr__group]\"\n data-id=\"row-group\"\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n name=\"group.header\"\n :colspan=\"colspan\"\n :header=\"row\"\n :is-open=\"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 <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n :group-key=\"groupKey\"\n name=\"group.header.content\"\n :header=\"row\"\n >\n <span>{{ groupKey }}: {{ row.identifier }}</span>\n <RuiButton\n size=\"sm\"\n variant=\"text\"\n icon\n data-cy=\"group-copy-button\"\n @click=\"onCopyGroup({ key: groupKey, value: row.group })\"\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 data-cy=\"group-ungroup-button\"\n @click=\"onUngroup()\"\n >\n <RuiIcon\n name=\"lu-trash-2\"\n size=\"14\"\n />\n </RuiButton>\n </template>\n Ungroup\n </RuiTooltip>\n <RuiExpandButton\n v-if=\"groupExpandButtonPosition === '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[rowAttr]) },\n typeof itemClass === 'string' ? itemClass : itemClass(row),\n ]\"\n :aria-selected=\"selectedData ? isSelected(row[rowAttr]) : undefined\"\n data-id=\"row\"\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[rowAttr])\"\n :disabled=\"isDisabledRow(row[rowAttr])\"\n :size=\"dense ? 'sm' : undefined\"\n color=\"primary\"\n class=\"select-none\"\n hide-details\n @update:model-value=\"onSelect($event, row[rowAttr], true)\"\n @click=\"onCheckboxClick($event, row[rowAttr], 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[rowAttr])\"\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[rowAttr])\"\n :key=\"`row-expand-${index}`\"\n :class=\"[$style.tr, $style.tr__expandable]\"\n data-id=\"row-expanded\"\n >\n <td\n :colspan=\"colspan\"\n :class=\"[$style.td]\"\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n name=\"expanded-item\"\n :row=\"row\"\n :index=\"index\"\n />\n </td>\n </tr>\n </template>\n </template>\n <tr v-if=\"loading && noData\">\n <td\n :class=\"$style.tbody__loader\"\n :colspan=\"colspan\"\n data-id=\"tbody-loader\"\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 data-id=\"row-empty\"\n >\n <Transition\n appear\n enter-active-class=\"transition ease-out duration-200 delay-200\"\n enter-from-class=\"opacity-0 translate-y-1\"\n enter-to-class=\"opacity-100 translate-y-0\"\n leave-active-class=\"transition ease-in duration-150\"\n leave-from-class=\"opacity-100 translate-y-0\"\n leave-to-class=\"opacity-0 translate-y-1\"\n >\n <td\n :class=\"$style.td\"\n :colspan=\"colspan\"\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\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 data-id=\"empty-label\"\n >\n {{ empty.label }}\n </p>\n\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot name=\"empty-description\">\n <p\n v-if=\"empty.description\"\n :class=\"$style.empty__description\"\n data-id=\"empty-description\"\n >\n {{ empty.description }}\n </p>\n </slot>\n </div>\n </slot>\n </td>\n </Transition>\n </tr>\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n v-if=\"slots['body.append']\"\n :colspan=\"colspan\"\n name=\"body.append\"\n />\n </tbody>\n <tfoot>\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot name=\"tfoot\" />\n </tfoot>\n </table>\n </div>\n <RuiTablePagination\n v-if=\"paginationData && !hideDefaultFooter\"\n v-model=\"paginationData\"\n :dense=\"dense\"\n :loading=\"loading\"\n :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 &.rounded__md {\n @apply rounded-[.75rem];\n }\n &.rounded__lg {\n @apply rounded-[1rem];\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-56 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 min-h-56;\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":["_useModel","_useSlots","_createElementBlock","_normalizeClass","$style","_unref","_createBlock","_createElementVNode","_createVNode","_renderList","_withCtx","_renderSlot","_normalizeProps","_guardReactiveProps","_openBlock","_Fragment","_toDisplayString","_createTextVNode","_Transition"],"mappings":"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"}
|
|
@@ -1,38 +1,36 @@
|
|
|
1
|
-
const wrapper = "
|
|
2
|
-
const outlined = "
|
|
3
|
-
const rounded__sm = "
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
const dense = "_dense_15c6t_84";
|
|
1
|
+
const wrapper = "_wrapper_15e82_1";
|
|
2
|
+
const outlined = "_outlined_15e82_4";
|
|
3
|
+
const rounded__sm = "_rounded__sm_15e82_7";
|
|
4
|
+
const rounded__md = "_rounded__md_15e82_10";
|
|
5
|
+
const rounded__lg = "_rounded__lg_15e82_13";
|
|
6
|
+
const scroller = "_scroller_15e82_16";
|
|
7
|
+
const table = "_table_15e82_20";
|
|
8
|
+
const tbody = "_tbody_15e82_23";
|
|
9
|
+
const tr = "_tr_15e82_26";
|
|
10
|
+
const tr__selected = "_tr__selected_15e82_32";
|
|
11
|
+
const tr__empty = "_tr__empty_15e82_35";
|
|
12
|
+
const tr__expandable = "_tr__expandable_15e82_38";
|
|
13
|
+
const tr__group = "_tr__group_15e82_41";
|
|
14
|
+
const td = "_td_15e82_44";
|
|
15
|
+
const align__start = "_align__start_15e82_48";
|
|
16
|
+
const align__center = "_align__center_15e82_51";
|
|
17
|
+
const align__end = "_align__end_15e82_54";
|
|
18
|
+
const empty = "_empty_15e82_57";
|
|
19
|
+
const empty__label = "_empty__label_15e82_60";
|
|
20
|
+
const empty__description = "_empty__description_15e82_63";
|
|
21
|
+
const tbody__loader = "_tbody__loader_15e82_66";
|
|
22
|
+
const checkbox = "_checkbox_15e82_69";
|
|
23
|
+
const dense = "_dense_15e82_75";
|
|
25
24
|
const style0 = {
|
|
26
25
|
wrapper,
|
|
27
26
|
outlined,
|
|
28
27
|
rounded__sm,
|
|
29
|
-
image,
|
|
30
28
|
rounded__md,
|
|
31
29
|
rounded__lg,
|
|
32
30
|
scroller,
|
|
33
31
|
table,
|
|
34
32
|
tbody,
|
|
35
|
-
"tbody--striped": "_tbody--
|
|
33
|
+
"tbody--striped": "_tbody--striped_15e82_26",
|
|
36
34
|
tr,
|
|
37
35
|
tr__selected,
|
|
38
36
|
tr__empty,
|
|
@@ -59,7 +57,6 @@ export {
|
|
|
59
57
|
empty,
|
|
60
58
|
empty__description,
|
|
61
59
|
empty__label,
|
|
62
|
-
image,
|
|
63
60
|
outlined,
|
|
64
61
|
rounded__lg,
|
|
65
62
|
rounded__md,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiDataTable.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RuiDataTable.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -3,13 +3,10 @@ export interface Props {
|
|
|
3
3
|
expanded: boolean;
|
|
4
4
|
icon?: RuiIcons;
|
|
5
5
|
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
default?: (props: typeof __VLS_8) => any;
|
|
6
|
+
type __VLS_Slots = {
|
|
7
|
+
default?: () => any;
|
|
9
8
|
};
|
|
10
|
-
declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
11
|
-
icon: RuiIcons;
|
|
12
|
-
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
9
|
+
declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
13
10
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
14
11
|
declare const _default: typeof __VLS_export;
|
|
15
12
|
export default _default;
|
|
@@ -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\
|
|
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\nconst { expanded, icon = 'lu-chevron-down' } = defineProps<Props>();\n\ndefineSlots<{\n default?: () => any;\n}>();\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 data-id=\"expand-button\"\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":";;;;;;;;;;;;;;AAsBE,aAAAA,UAAA,GAAAC,YAoBY,WApBZC,WAoBY;AAAA,QAnBT,OAAK;AAAA,UAAUC,KAAAA,OAAO;AAAA;aAAsCA,KAAAA,OAAO,4BAAwB,EAAA,GAAS,QAAA;AAAA,UAAA;AAAA;QAMpG,iBAAe,QAAA;AAAA,QAChB,WAAQ;AAAA,QACR,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;;;;;;;;"}
|
|
@@ -90,13 +90,10 @@ declare const __VLS_export: <T extends object, K extends keyof T = keyof T>(__VL
|
|
|
90
90
|
column: NoneSortableTableColumn<T>;
|
|
91
91
|
}) => any) | undefined;
|
|
92
92
|
};
|
|
93
|
-
emit: {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
direction?: "asc" | "desc";
|
|
98
|
-
}): void;
|
|
99
|
-
};
|
|
93
|
+
emit: ((evt: "sort", value: {
|
|
94
|
+
key: TableRowKey<T>;
|
|
95
|
+
direction?: "asc" | "desc";
|
|
96
|
+
}) => void) & ((evt: "select:all", value: boolean) => void);
|
|
100
97
|
}>) => import("vue").VNode & {
|
|
101
98
|
__ctx?: Awaited<typeof __VLS_setup>;
|
|
102
99
|
};
|
|
@@ -5,7 +5,7 @@ import RuiIcon from "../icons/RuiIcon.vue.js";
|
|
|
5
5
|
import RuiBadge from "../overlays/badge/RuiBadge.vue.js";
|
|
6
6
|
import RuiProgress from "../progress/RuiProgress.vue.js";
|
|
7
7
|
const _hoisted_1 = ["data-id"];
|
|
8
|
-
const _hoisted_2 = ["colspan", "rowspan"];
|
|
8
|
+
const _hoisted_2 = ["colspan", "rowspan", "data-id"];
|
|
9
9
|
const _hoisted_3 = ["colspan"];
|
|
10
10
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
11
11
|
__name: "RuiTableHead",
|
|
@@ -15,21 +15,20 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
15
15
|
stick: { type: Boolean, default: false },
|
|
16
16
|
selectable: { type: Boolean, default: false },
|
|
17
17
|
disableCheckAll: { type: Boolean, default: false },
|
|
18
|
-
noData: { type: Boolean
|
|
18
|
+
noData: { type: Boolean },
|
|
19
19
|
colspan: { default: 0 },
|
|
20
|
-
columns: {
|
|
20
|
+
columns: {},
|
|
21
21
|
capitalizeHeaders: { type: Boolean, default: false },
|
|
22
22
|
isAllSelected: { type: Boolean, default: false },
|
|
23
23
|
indeterminate: { type: Boolean, default: false },
|
|
24
24
|
dense: { type: Boolean, default: false },
|
|
25
25
|
sortedMap: { default: () => ({}) },
|
|
26
|
-
sortData: {
|
|
26
|
+
sortData: {},
|
|
27
27
|
columnAttr: { default: "label" },
|
|
28
28
|
dataId: { default: "head-main" }
|
|
29
29
|
},
|
|
30
30
|
emits: ["select:all", "sort"],
|
|
31
31
|
setup(__props, { emit: __emit }) {
|
|
32
|
-
const props = __props;
|
|
33
32
|
const emit = __emit;
|
|
34
33
|
function onSort({ key, direction }) {
|
|
35
34
|
return emit("sort", {
|
|
@@ -38,15 +37,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
38
37
|
});
|
|
39
38
|
}
|
|
40
39
|
const onToggleAll = (checked) => emit("select:all", checked);
|
|
41
|
-
const isSortedBy = (key) => key in
|
|
40
|
+
const isSortedBy = (key) => key in __props.sortedMap;
|
|
42
41
|
function getSortIndex(key) {
|
|
43
|
-
|
|
44
|
-
if (!sortBy || !Array.isArray(sortBy) || !isSortedBy(key))
|
|
42
|
+
if (!__props.sortData || !Array.isArray(__props.sortData) || !isSortedBy(key))
|
|
45
43
|
return -1;
|
|
46
|
-
return
|
|
44
|
+
return __props.sortData.findIndex((sort) => sort.column === key);
|
|
47
45
|
}
|
|
48
46
|
function getSortDirection(key) {
|
|
49
|
-
return
|
|
47
|
+
return __props.sortedMap[key]?.direction;
|
|
50
48
|
}
|
|
51
49
|
return (_ctx, _cache) => {
|
|
52
50
|
return openBlock(), createElementBlock("thead", {
|
|
@@ -81,9 +79,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
81
79
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => onToggleAll($event))
|
|
82
80
|
}, null, 8, ["disabled", "indeterminate", "model-value", "size"])
|
|
83
81
|
], 2)) : createCommentVNode("", true),
|
|
84
|
-
(openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (column
|
|
82
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (column) => {
|
|
85
83
|
return openBlock(), createElementBlock("th", {
|
|
86
|
-
key:
|
|
84
|
+
key: column.key,
|
|
87
85
|
class: normalizeClass([
|
|
88
86
|
_ctx.$style.th,
|
|
89
87
|
column.class,
|
|
@@ -95,7 +93,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
95
93
|
]),
|
|
96
94
|
scope: "col",
|
|
97
95
|
colspan: column.colspan ?? 1,
|
|
98
|
-
rowspan: column.rowspan ?? 1
|
|
96
|
+
rowspan: column.rowspan ?? 1,
|
|
97
|
+
"data-id": column.sortable ? "column-sortable" : void 0
|
|
99
98
|
}, [
|
|
100
99
|
renderSlot(_ctx.$slots, `header.${column.key.toString()}`, { column }, () => [
|
|
101
100
|
column.sortable ? (openBlock(), createBlock(RuiBadge, {
|
|
@@ -112,9 +111,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
112
111
|
_ctx.$style.sort__button,
|
|
113
112
|
{
|
|
114
113
|
[_ctx.$style.sort__active ?? ""]: isSortedBy(column.key),
|
|
115
|
-
[_ctx.$style[`sort__${getSortDirection(column.key)}`] ?? ""]: isSortedBy(
|
|
116
|
-
column.key
|
|
117
|
-
)
|
|
114
|
+
[_ctx.$style[`sort__${getSortDirection(column.key)}`] ?? ""]: isSortedBy(column.key)
|
|
118
115
|
}
|
|
119
116
|
]),
|
|
120
117
|
size: "sm",
|
|
@@ -131,7 +128,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
131
128
|
]),
|
|
132
129
|
default: withCtx(() => [
|
|
133
130
|
createElementVNode("span", {
|
|
134
|
-
class: normalizeClass(_ctx.$style.column__text)
|
|
131
|
+
class: normalizeClass(_ctx.$style.column__text),
|
|
132
|
+
"data-id": "column-text"
|
|
135
133
|
}, [
|
|
136
134
|
renderSlot(_ctx.$slots, `header.text.${column.key.toString()}`, { column }, () => [
|
|
137
135
|
createTextVNode(toDisplayString(column[__props.columnAttr]), 1)
|
|
@@ -156,7 +154,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
156
154
|
_: 2
|
|
157
155
|
}, 1032, ["model-value", "text", "offset-y"])) : (openBlock(), createElementBlock("span", {
|
|
158
156
|
key: 1,
|
|
159
|
-
class: normalizeClass(_ctx.$style.column__text)
|
|
157
|
+
class: normalizeClass(_ctx.$style.column__text),
|
|
158
|
+
"data-id": "column-text"
|
|
160
159
|
}, [
|
|
161
160
|
renderSlot(_ctx.$slots, `header.text.${column.key.toString()}`, { column }, () => [
|
|
162
161
|
createTextVNode(toDisplayString(column[__props.columnAttr]), 1)
|
|
@@ -168,7 +167,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
168
167
|
], 2),
|
|
169
168
|
__props.loading ? (openBlock(), createElementBlock("tr", {
|
|
170
169
|
key: 0,
|
|
171
|
-
class: normalizeClass([_ctx.$style.thead__loader, _ctx.$style.thead__loader_linear])
|
|
170
|
+
class: normalizeClass([_ctx.$style.thead__loader, _ctx.$style.thead__loader_linear]),
|
|
171
|
+
"data-id": "thead-loader"
|
|
172
172
|
}, [
|
|
173
173
|
createElementVNode("th", {
|
|
174
174
|
class: normalizeClass(_ctx.$style.progress),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiTableHead.vue2.js","sources":["../../../src/components/tables/RuiTableHead.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object, K extends keyof T = keyof T\">\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiCheckbox from '@/components/forms/checkbox/RuiCheckbox.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiBadge from '@/components/overlays/badge/RuiBadge.vue';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\n\n/**\n * Represents a sortable column name for a given type.\n * The column name must be a key of the passed data object type.\n * @template T - The type of the data in the column.\n */\nexport type TableRowKey<T> = keyof T extends string ? keyof T : never;\n\nexport interface BaseTableColumn<T> {\n key: TableRowKey<T> | string;\n sortable?: boolean;\n direction?: 'asc' | 'desc';\n align?: 'start' | 'center' | 'end';\n class?: string;\n cellClass?: string;\n colspan?: string | number;\n rowspan?: string | number;\n\n [key: string]: any;\n}\n\n/**\n * Represents a sortable table column.\n * This is used to ensure that when using sortable with a true value,\n * the key matches to an actual property of the object passed.\n *\n * @template T - The type of data in the table column.\n */\nexport interface SortableTableColumn<T> extends BaseTableColumn<T> {\n sortable: true;\n}\n\n/**\n * An interface representing a column in a table that cannot be sorted.\n * This can be mapped to an actual property of the object or to a virtual column.\n *\n * @typeparam T - The type of data in the table.\n */\nexport interface NoneSortableTableColumn<T> extends BaseTableColumn<T> {\n sortable?: false;\n}\n\nexport type TableColumn<T> =\n | SortableTableColumn<T>\n | NoneSortableTableColumn<T>;\n\nexport interface SortColumn<T> {\n column?: TableRowKey<T>;\n direction: 'asc' | 'desc';\n}\n\nexport type TableSortData<T> = SortColumn<T> | SortColumn<T>[] | undefined;\n\nexport type TableRowKeyData<T> = TableRowKey<T> | TableRowKey<T>[] | undefined;\n\nexport interface GroupData<T> {\n key: string;\n value?: Partial<T>;\n}\n\nexport type GroupKey<T> = TableColumn<T>['key'];\n\nexport type GroupKeys<T> = GroupKey<T> | GroupKey<T>[] | undefined;\n\nexport interface Props<T> {\n loading?: boolean;\n stickyHeader?: boolean;\n stick?: boolean;\n selectable?: boolean;\n disableCheckAll?: boolean;\n noData?: boolean;\n colspan?: number;\n columns?: TableColumn<T>[];\n capitalizeHeaders?: boolean;\n isAllSelected?: boolean;\n indeterminate?: boolean;\n dense?: boolean;\n sortedMap?: Partial<Record<TableRowKey<T>, SortColumn<T>>>;\n sortData?: TableSortData<T>;\n columnAttr?: keyof TableColumn<T>;\n dataId?: string;\n}\n\nconst props = withDefaults(defineProps<Props<T>>(), {\n loading: false,\n stickyHeader: false,\n stick: false,\n selectable: false,\n disableCheckAll: false,\n noData: false,\n colspan: 0,\n columns: undefined,\n capitalizeHeaders: false,\n isAllSelected: false,\n indeterminate: false,\n dense: false,\n sortedMap: () => ({}),\n columnAttr: 'label',\n sortData: undefined,\n dataId: 'head-main',\n});\n\nconst emit = defineEmits<{\n (e: 'select:all', value: boolean): void;\n (\n e: 'sort',\n value: {\n key: TableRowKey<T>;\n direction?: 'asc' | 'desc';\n },\n ): void;\n}>();\n\nfunction onSort({ key, direction }: TableColumn<T>) {\n return emit('sort', {\n key: key as TableRowKey<T>,\n direction: direction ?? 'asc',\n });\n}\n\nconst onToggleAll = (checked: boolean) => emit('select:all', checked);\n\nconst isSortedBy = (key: TableColumn<T>['key']) => key in props.sortedMap;\n\nfunction getSortIndex(key: TableColumn<T>['key']): number {\n const sortBy = props.sortData;\n\n if (!sortBy || !Array.isArray(sortBy) || !isSortedBy(key))\n return -1;\n\n return sortBy.findIndex(sort => sort.column === key);\n}\n\nfunction getSortDirection(key: TableColumn<T>['key']) {\n return props.sortedMap[key]?.direction;\n}\n</script>\n\n<template>\n <thead\n :data-id=\"dataId\"\n :class=\"[\n $style.thead,\n {\n [$style.sticky__header]: stickyHeader,\n [$style.stick__top]: stick,\n [$style.dense]: dense,\n },\n ]\"\n >\n <tr :class=\"$style.tr\">\n <th\n v-if=\"selectable\"\n :class=\"$style.checkbox\"\n scope=\"col\"\n colspan=\"1\"\n rowspan=\"1\"\n >\n <RuiCheckbox\n :disabled=\"disableCheckAll\"\n :indeterminate=\"indeterminate\"\n :model-value=\"isAllSelected\"\n :size=\"dense ? 'sm' : undefined\"\n color=\"primary\"\n data-cy=\"table-toggle-check-all\"\n hide-details\n @update:model-value=\"onToggleAll($event)\"\n />\n </th>\n\n <th\n v-for=\"(column, index) in columns\"\n :key=\"index\"\n :class=\"[\n $style.th,\n column.class,\n $style[`align__${column.align ?? 'start'}`],\n {\n capitalize: !capitalizeHeaders,\n [$style.sortable]: column.sortable,\n },\n ]\"\n scope=\"col\"\n :colspan=\"column.colspan ?? 1\"\n :rowspan=\"column.rowspan ?? 1\"\n >\n <slot\n :column=\"column\"\n :name=\"`header.${column.key.toString()}`\"\n >\n <RuiBadge\n v-if=\"column.sortable\"\n :model-value=\"getSortIndex(column.key) >= 0\"\n :text=\"`${getSortIndex(column.key) + 1}`\"\n :offset-y=\"dense ? 8 : 0\"\n color=\"secondary\"\n size=\"sm\"\n >\n <RuiButton\n :class=\"[\n $style.sort__button,\n {\n [$style.sort__active ?? '']: isSortedBy(column.key),\n [$style[`sort__${getSortDirection(column.key)}`] ?? '']: isSortedBy(\n column.key,\n ),\n },\n ]\"\n size=\"sm\"\n variant=\"text\"\n @click=\"onSort(column)\"\n >\n <span :class=\"$style.column__text\">\n <slot\n :name=\"`header.text.${column.key.toString()}`\"\n :column=\"column\"\n >\n {{ column[columnAttr] }}\n </slot>\n </span>\n\n <template\n v-if=\"column.align === 'end'\"\n #prepend\n >\n <RuiIcon\n :class=\"$style.sort__icon\"\n name=\"lu-arrow-down\"\n size=\"18\"\n />\n </template>\n\n <template #append>\n <RuiIcon\n v-if=\"column.align !== 'end'\"\n :class=\"$style.sort__icon\"\n name=\"lu-arrow-down\"\n size=\"18\"\n />\n </template>\n </RuiButton>\n </RuiBadge>\n <span\n v-else\n :class=\"$style.column__text\"\n >\n <slot\n :name=\"`header.text.${column.key.toString()}`\"\n :column=\"column\"\n >\n {{ column[columnAttr] }}\n </slot>\n </span>\n </slot>\n </th>\n </tr>\n <tr\n v-if=\"loading\"\n :class=\"[$style.thead__loader, $style.thead__loader_linear]\"\n >\n <th\n :class=\"$style.progress\"\n :colspan=\"colspan\"\n scope=\"col\"\n >\n <div :class=\"$style.progress__wrapper\">\n <RuiProgress\n color=\"primary\"\n variant=\"indeterminate\"\n />\n </div>\n </th>\n </tr>\n </thead>\n</template>\n\n<style module lang=\"scss\">\n.thead {\n @apply divide-y divide-black/[0.12];\n\n &.sticky__header {\n @apply top-0 z-10 absolute;\n\n &.stick__top {\n @apply fixed;\n\n tr {\n th {\n @apply bg-white border-b border-b-black/[0.12];\n }\n }\n }\n }\n\n &.dense {\n .tr {\n .th {\n @apply py-[0.38rem];\n }\n }\n }\n\n .tr {\n .th {\n @apply p-4;\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 &.sortable {\n &.align__start {\n @apply pl-3;\n }\n\n &.align__center {\n @apply px-3;\n .sort__button {\n @apply ml-6;\n }\n }\n\n &.align__end {\n @apply pr-3;\n }\n\n .sort__button {\n @apply inline-flex;\n\n &:hover .sort__icon {\n @apply opacity-60;\n }\n\n &.sort {\n &__active {\n .sort__icon {\n @apply opacity-100;\n }\n }\n\n &__desc {\n .sort__icon {\n @apply rotate-0;\n }\n }\n\n &__asc {\n .sort__icon {\n @apply rotate-180;\n }\n }\n }\n }\n\n .sort__icon {\n @apply transition opacity-0 rotate-180;\n }\n }\n\n .column__text {\n @apply text-rui-text font-medium text-sm leading-6;\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\n &__loader {\n .progress {\n @apply relative py-8;\n }\n\n &_linear {\n @apply border-none;\n\n .progress {\n @apply p-0 h-0;\n }\n\n .progress__wrapper {\n @apply h-0 -mt-1;\n }\n }\n }\n}\n\n:global(.dark) {\n .thead {\n @apply divide-y divide-white/[0.12];\n\n &.sticky__header.stick__top {\n th {\n @apply bg-[#121212] border-b border-b-white/[0.12];\n }\n }\n\n .tr {\n .th {\n @apply text-white;\n }\n }\n }\n}\n</style>\n"],"names":["_createElementBlock","_normalizeClass","$style","_createElementVNode","_createVNode","_openBlock","_Fragment","_renderList","_renderSlot","_createBlock","_createTextVNode","_toDisplayString"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RuiTableHead.vue2.js","sources":["../../../src/components/tables/RuiTableHead.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object, K extends keyof T = keyof T\">\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiCheckbox from '@/components/forms/checkbox/RuiCheckbox.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiBadge from '@/components/overlays/badge/RuiBadge.vue';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\n\n/**\n * Represents a sortable column name for a given type.\n * The column name must be a key of the passed data object type.\n * @template T - The type of the data in the column.\n */\nexport type TableRowKey<T> = keyof T extends string ? keyof T : never;\n\nexport interface BaseTableColumn<T> {\n key: TableRowKey<T> | string;\n sortable?: boolean;\n direction?: 'asc' | 'desc';\n align?: 'start' | 'center' | 'end';\n class?: string;\n cellClass?: string;\n colspan?: string | number;\n rowspan?: string | number;\n\n [key: string]: any;\n}\n\n/**\n * Represents a sortable table column.\n * This is used to ensure that when using sortable with a true value,\n * the key matches to an actual property of the object passed.\n *\n * @template T - The type of data in the table column.\n */\nexport interface SortableTableColumn<T> extends BaseTableColumn<T> {\n sortable: true;\n}\n\n/**\n * An interface representing a column in a table that cannot be sorted.\n * This can be mapped to an actual property of the object or to a virtual column.\n *\n * @typeparam T - The type of data in the table.\n */\nexport interface NoneSortableTableColumn<T> extends BaseTableColumn<T> {\n sortable?: false;\n}\n\nexport type TableColumn<T> = SortableTableColumn<T> | NoneSortableTableColumn<T>;\n\nexport interface SortColumn<T> {\n column?: TableRowKey<T>;\n direction: 'asc' | 'desc';\n}\n\nexport type TableSortData<T> = SortColumn<T> | SortColumn<T>[] | undefined;\n\nexport type TableRowKeyData<T> = TableRowKey<T> | TableRowKey<T>[] | undefined;\n\nexport interface GroupData<T> {\n key: string;\n value?: Partial<T>;\n}\n\nexport type GroupKey<T> = TableColumn<T>['key'];\n\nexport type GroupKeys<T> = GroupKey<T> | GroupKey<T>[] | undefined;\n\nexport interface Props<T> {\n loading?: boolean;\n stickyHeader?: boolean;\n stick?: boolean;\n selectable?: boolean;\n disableCheckAll?: boolean;\n noData?: boolean;\n colspan?: number;\n columns?: TableColumn<T>[];\n capitalizeHeaders?: boolean;\n isAllSelected?: boolean;\n indeterminate?: boolean;\n dense?: boolean;\n sortedMap?: Partial<Record<TableRowKey<T>, SortColumn<T>>>;\n sortData?: TableSortData<T>;\n columnAttr?: keyof TableColumn<T>;\n dataId?: string;\n}\n\nconst {\n loading = false,\n stickyHeader = false,\n stick = false,\n selectable = false,\n disableCheckAll = false,\n colspan = 0,\n columns,\n capitalizeHeaders = false,\n isAllSelected = false,\n indeterminate = false,\n dense = false,\n sortedMap = {} as Partial<Record<TableRowKey<T>, SortColumn<T>>>,\n columnAttr = 'label',\n sortData,\n dataId = 'head-main',\n} = defineProps<Props<T>>();\n\nconst emit = defineEmits<{\n 'select:all': [value: boolean];\n 'sort': [value: { key: TableRowKey<T>; direction?: 'asc' | 'desc' }];\n}>();\n\nfunction onSort({ key, direction }: TableColumn<T>): void {\n return emit('sort', {\n key: key as TableRowKey<T>,\n direction: direction ?? 'asc',\n });\n}\n\nconst onToggleAll = (checked: boolean) => emit('select:all', checked);\n\nconst isSortedBy = (key: TableColumn<T>['key']) => key in sortedMap;\n\nfunction getSortIndex(key: TableColumn<T>['key']): number {\n if (!sortData || !Array.isArray(sortData) || !isSortedBy(key))\n return -1;\n\n return sortData.findIndex(sort => sort.column === key);\n}\n\nfunction getSortDirection(key: TableColumn<T>['key']): 'asc' | 'desc' | undefined {\n return sortedMap[key]?.direction;\n}\n</script>\n\n<template>\n <thead\n :data-id=\"dataId\"\n :class=\"[\n $style.thead,\n {\n [$style.sticky__header]: stickyHeader,\n [$style.stick__top]: stick,\n [$style.dense]: dense,\n },\n ]\"\n >\n <tr :class=\"$style.tr\">\n <th\n v-if=\"selectable\"\n :class=\"$style.checkbox\"\n scope=\"col\"\n colspan=\"1\"\n rowspan=\"1\"\n >\n <RuiCheckbox\n :disabled=\"disableCheckAll\"\n :indeterminate=\"indeterminate\"\n :model-value=\"isAllSelected\"\n :size=\"dense ? 'sm' : undefined\"\n color=\"primary\"\n data-cy=\"table-toggle-check-all\"\n hide-details\n @update:model-value=\"onToggleAll($event)\"\n />\n </th>\n\n <th\n v-for=\"column in columns\"\n :key=\"column.key\"\n :class=\"[\n $style.th,\n column.class,\n $style[`align__${column.align ?? 'start'}`],\n {\n capitalize: !capitalizeHeaders,\n [$style.sortable]: column.sortable,\n },\n ]\"\n scope=\"col\"\n :colspan=\"column.colspan ?? 1\"\n :rowspan=\"column.rowspan ?? 1\"\n :data-id=\"column.sortable ? 'column-sortable' : undefined\"\n >\n <slot\n :column=\"column\"\n :name=\"`header.${column.key.toString()}`\"\n >\n <RuiBadge\n v-if=\"column.sortable\"\n :model-value=\"getSortIndex(column.key) >= 0\"\n :text=\"`${getSortIndex(column.key) + 1}`\"\n :offset-y=\"dense ? 8 : 0\"\n color=\"secondary\"\n size=\"sm\"\n >\n <RuiButton\n :class=\"[\n $style.sort__button,\n {\n [$style.sort__active ?? '']: isSortedBy(column.key),\n [$style[`sort__${getSortDirection(column.key)}`] ?? '']: isSortedBy(column.key),\n },\n ]\"\n size=\"sm\"\n variant=\"text\"\n @click=\"onSort(column)\"\n >\n <span\n :class=\"$style.column__text\"\n data-id=\"column-text\"\n >\n <slot\n :name=\"`header.text.${column.key.toString()}`\"\n :column=\"column\"\n >\n {{ column[columnAttr] }}\n </slot>\n </span>\n\n <template\n v-if=\"column.align === 'end'\"\n #prepend\n >\n <RuiIcon\n :class=\"$style.sort__icon\"\n name=\"lu-arrow-down\"\n size=\"18\"\n />\n </template>\n\n <template #append>\n <RuiIcon\n v-if=\"column.align !== 'end'\"\n :class=\"$style.sort__icon\"\n name=\"lu-arrow-down\"\n size=\"18\"\n />\n </template>\n </RuiButton>\n </RuiBadge>\n <span\n v-else\n :class=\"$style.column__text\"\n data-id=\"column-text\"\n >\n <slot\n :name=\"`header.text.${column.key.toString()}`\"\n :column=\"column\"\n >\n {{ column[columnAttr] }}\n </slot>\n </span>\n </slot>\n </th>\n </tr>\n <tr\n v-if=\"loading\"\n :class=\"[$style.thead__loader, $style.thead__loader_linear]\"\n data-id=\"thead-loader\"\n >\n <th\n :class=\"$style.progress\"\n :colspan=\"colspan\"\n scope=\"col\"\n >\n <div :class=\"$style.progress__wrapper\">\n <RuiProgress\n color=\"primary\"\n variant=\"indeterminate\"\n />\n </div>\n </th>\n </tr>\n </thead>\n</template>\n\n<style module lang=\"scss\">\n.thead {\n @apply divide-y divide-black/[0.12];\n\n &.sticky__header {\n @apply top-0 z-10 absolute;\n\n &.stick__top {\n @apply fixed;\n\n tr {\n th {\n @apply bg-white border-b border-b-black/[0.12];\n }\n }\n }\n }\n\n &.dense {\n .tr {\n .th {\n @apply py-[0.38rem];\n }\n }\n }\n\n .tr {\n .th {\n @apply p-4;\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 &.sortable {\n &.align__start {\n @apply pl-3;\n }\n\n &.align__center {\n @apply px-3;\n .sort__button {\n @apply ml-6;\n }\n }\n\n &.align__end {\n @apply pr-3;\n }\n\n .sort__button {\n @apply inline-flex;\n\n &:hover .sort__icon {\n @apply opacity-60;\n }\n\n &.sort {\n &__active {\n .sort__icon {\n @apply opacity-100;\n }\n }\n\n &__desc {\n .sort__icon {\n @apply rotate-0;\n }\n }\n\n &__asc {\n .sort__icon {\n @apply rotate-180;\n }\n }\n }\n }\n\n .sort__icon {\n @apply transition opacity-0 rotate-180;\n }\n }\n\n .column__text {\n @apply text-rui-text font-medium text-sm leading-6;\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\n &__loader {\n .progress {\n @apply relative py-8;\n }\n\n &_linear {\n @apply border-none;\n\n .progress {\n @apply p-0 h-0;\n }\n\n .progress__wrapper {\n @apply h-0 -mt-1;\n }\n }\n }\n}\n\n:global(.dark) {\n .thead {\n @apply divide-y divide-white/[0.12];\n\n &.sticky__header.stick__top {\n th {\n @apply bg-[#121212] border-b border-b-white/[0.12];\n }\n }\n\n .tr {\n .th {\n @apply text-white;\n }\n }\n }\n}\n</style>\n"],"names":["_createElementBlock","_normalizeClass","$style","_createElementVNode","_createVNode","_Fragment","_renderList","_renderSlot","_createBlock","_createTextVNode","_toDisplayString"],"mappings":"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"}
|
|
@@ -5,19 +5,19 @@ export interface TablePaginationData {
|
|
|
5
5
|
limits?: number[];
|
|
6
6
|
}
|
|
7
7
|
export interface Props {
|
|
8
|
-
modelValue: TablePaginationData;
|
|
9
8
|
dense?: boolean;
|
|
10
9
|
disablePerPage?: boolean;
|
|
11
10
|
loading?: boolean;
|
|
12
11
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
12
|
+
type __VLS_Props = Props;
|
|
13
|
+
type __VLS_ModelProps = {
|
|
14
|
+
modelValue: TablePaginationData;
|
|
15
|
+
};
|
|
16
|
+
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
17
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
18
|
+
"update:modelValue": (value: TablePaginationData) => any;
|
|
19
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
20
|
+
"onUpdate:modelValue"?: ((value: TablePaginationData) => any) | undefined;
|
|
21
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
22
22
|
declare const _default: typeof __VLS_export;
|
|
23
23
|
export default _default;
|