{"version":3,"file":"table.mjs","sources":["../../src/components/table/TableMobileSort.vue","../../src/components/table/TableColumn.vue","../../src/components/table/TablePagination.vue","../../src/components/table/Table.vue","../../src/components/table/index.ts"],"sourcesContent":["<script setup lang=\"ts\" generic=\"T\">\nimport { computed, watch, ref, type PropType } from \"vue\";\n\nimport OButton from \"@/components/button/Button.vue\";\nimport OSelect from \"@/components/select/Select.vue\";\nimport OIcon from \"@/components/icon/Icon.vue\";\nimport OField from \"@/components/field/Field.vue\";\n\nimport type { TableColumnItem } from \"./types\";\nimport type { ClassBind } from \"@/types\";\n\ndefineOptions({\n    isOruga: true,\n    name: \"OTableMobileSort\",\n    configField: \"table\",\n});\n\nconst props = defineProps({\n    currentSortColumn: {\n        type: Object as PropType<TableColumnItem<T>>,\n        default: undefined,\n    },\n    columns: {\n        type: Array as PropType<TableColumnItem<T>[]>,\n        default: undefined,\n    },\n    placeholder: { type: String, default: undefined },\n    iconPack: { type: String, default: undefined },\n    sortIcon: { type: String, default: \"arrow-up\" },\n    sortIconSize: { type: String, default: \"small\" },\n    isAsc: { type: Boolean, default: false },\n    mobileSortClasses: { type: Array as PropType<ClassBind[]>, required: true },\n});\n\nconst emits = defineEmits<{\n    sort: [column: TableColumnItem<T>, event: Event];\n}>();\n\nconst mobileSort = ref<string | undefined>(props.currentSortColumn?.identifier);\n\nconst showPlaceholder = computed(\n    () =>\n        !props.columns ||\n        props.columns.every((column) => column.identifier !== mobileSort.value),\n);\n\nconst sortableColumns = computed(() =>\n    props.columns ? props.columns.filter((c) => c.sortable) : [],\n);\n\nconst isCurrentSort = computed(\n    () => props.currentSortColumn?.identifier === mobileSort.value,\n);\n\nwatch(mobileSort, (value) => {\n    if (props.currentSortColumn?.identifier === value) return;\n    sort(new Event(\"sort\"));\n});\n\nwatch(\n    () => props.currentSortColumn,\n    (column) => {\n        mobileSort.value = column?.identifier;\n    },\n);\n\nfunction sort(event: Event): void {\n    const column = sortableColumns.value.find(\n        (column) => column.identifier === mobileSort.value,\n    );\n    if (!column) return;\n    emits(\"sort\", column, event);\n}\n</script>\n\n<template>\n    <div :class=\"mobileSortClasses\">\n        <o-field addons>\n            <o-select v-model=\"mobileSort\" expanded>\n                <template v-if=\"placeholder\">\n                    <option\n                        v-show=\"showPlaceholder\"\n                        :value=\"{}\"\n                        selected\n                        disabled\n                        hidden>\n                        {{ placeholder }}\n                    </option>\n                </template>\n                <option\n                    v-for=\"(column, index) in sortableColumns\"\n                    :key=\"column.field || index\"\n                    :value=\"column.identifier\">\n                    {{ column.label }}\n                </option>\n            </o-select>\n\n            <o-button @click=\"sort($event)\">\n                <o-icon\n                    v-show=\"isCurrentSort\"\n                    :icon=\"sortIcon\"\n                    :pack=\"iconPack\"\n                    :size=\"sortIconSize\"\n                    :rotation=\"!isAsc ? 180 : 0\" />\n            </o-button>\n        </o-field>\n    </div>\n</template>\n","<script setup lang=\"ts\" generic=\"T, K extends string\">\nimport { computed, getCurrentInstance } from \"vue\";\n\nimport { defineClasses, useProviderChild } from \"@/composables\";\nimport { toCssDimension } from \"@/utils/helpers\";\n\nimport type { TableColumnComponent, TableComponent } from \"./types\";\nimport type { TableColumnProps } from \"./props\";\n\n/**\n * Define a column used by the table component.\n * @displayName Table Column\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OTableColumn\",\n    configField: \"table\",\n});\n\nconst props = withDefaults(defineProps<TableColumnProps<T, K>>(), {\n    label: undefined,\n    field: undefined,\n    formatter: undefined,\n    subheading: undefined,\n    width: undefined,\n    numeric: false,\n    position: undefined,\n    searchable: false,\n    sortable: false,\n    hidden: false,\n    sticky: false,\n    headerSelectable: false,\n    customSort: undefined,\n    customSearch: undefined,\n    thAttrs: undefined,\n    tdAttrs: undefined,\n});\n\nconst style = computed(() => ({\n    width: toCssDimension(props.width),\n}));\n\nconst isHeaderUnselectable = computed(\n    () => !props.headerSelectable && props.sortable,\n);\n\nconst vm = getCurrentInstance();\n\n// provided data is a computed ref to ensure reactivity\nconst providedData = computed<TableColumnComponent<T>>(() => ({\n    ...props,\n    $el: vm!.proxy!,\n    $slots: vm!.slots,\n    style: style.value,\n    thClasses: thClasses.value,\n    tdClasses: tdClasses.value,\n}));\n\n/** inject functionalities and data from the parent component */\nconst { parent, item } = useProviderChild<\n    TableComponent,\n    TableColumnComponent<T>\n>({ data: providedData });\n\n// --- Computed Component Classes ---\n\nconst thClasses = defineClasses(\n    [\n        \"thCurrentSortClass\",\n        \"o-table__th-current-sort\",\n        null,\n        computed(() => parent.value?.isColumnSorted(item.value)),\n    ],\n    [\n        \"thSortableClass\",\n        \"o-table__th--sortable\",\n        null,\n        computed(() => props.sortable),\n    ],\n    [\n        \"thUnselectableClass\",\n        \"o-table__th--unselectable\",\n        null,\n        isHeaderUnselectable,\n    ],\n    [\n        \"thPositionClass\",\n        \"o-table__th--\",\n        computed(() => props.position),\n        computed(() => !!props.position),\n    ],\n    [\n        \"thStickyClass\",\n        \"o-table__th--sticky\",\n        null,\n        computed(() => props.sticky),\n    ],\n);\n\nconst tdClasses = defineClasses(\n    [\n        \"tdPositionClass\",\n        \"o-table__td--\",\n        computed(() => props.position),\n        computed(() => !!props.position),\n    ],\n    [\n        \"tdStickyClass\",\n        \"o-table__td--sticky\",\n        null,\n        computed(() => props.sticky),\n    ],\n);\n\n// --- SLOTS TYPED OBJECTS ---\n\n// these properties are just for type addings\n// slot props will be set in Table.vue\nconst row = {} as any;\nconst column = {} as TableColumnProps<T, K>;\nconst index = 0;\nconst toggle = () => {};\nconst filters = {} as Record<string, string>;\n</script>\n\n<template>\n    <span data-oruga=\"table-column\" :data-id=\"`table-${item.identifier}`\">\n        {{ label }}\n\n        <!--\n            Do not render these slots here.\n            These are only for documentation purposes.\n            Slots are defined in table component.\n        -->\n        <template v-if=\"false\">\n            <!--\n                @slot Default Slot\n                @binding {T} row - row data \n                @binding {TableColumn} column - column definition \n                @binding {number} index - row index \n                @binding {number} colindex - column index \n                @binding {(): void} toggle-details - toggle details function \n            -->\n            <slot\n                :row=\"row\"\n                :column=\"column\"\n                :index=\"index\"\n                :colindex=\"index\"\n                :toggle-details=\"toggle\" />\n            <!--\n                @slot Override header label \n                @binding {TableColumn} column - column definition \n                @binding {number} index - column index \n            -->\n            <slot name=\"header\" :column=\"column\" :index=\"index\" />\n            <!--\n                @slot Override subheading label \n                @binding {TableColumn} column - column definition \n                @binding {number} index - column index \n            -->\n            <slot name=\"subheading\" :column=\"column\" :index=\"index\" />\n\n            <!--\n                @slot Override searchable input \n                @binding {TableColumn} column - column definition \n                @binding {number} index - column index \n                @binding {object} filters - active filters object\n            -->\n            <slot\n                name=\"searchable\"\n                :column=\"column\"\n                :index=\"index\"\n                :filters=\"filters\" />\n        </template>\n    </span>\n</template>\n","<script setup lang=\"ts\">\nimport type { PropType } from \"vue\";\n\nimport OPagination from \"@/components/pagination/Pagination.vue\";\n\nimport type { ComponentClass } from \"@/types\";\n\ndefineOptions({\n    isOruga: true,\n    name: \"OTablePagination\",\n    configField: \"table\",\n    inheritAttrs: false,\n});\n\ndefineProps({\n    current: { type: Number, default: undefined },\n    paginated: { type: Boolean, default: false },\n    rootClass: {\n        type: [String, Array, Object] as PropType<ComponentClass>,\n        default: undefined,\n    },\n});\n\nconst emits = defineEmits<{\n    /**\n     * current prop two-way binding\n     * @param value {number} updated current prop\n     */\n    \"update:current\": [value: number];\n    /**\n     * on current change event\n     * @param value {number} current value\n     */\n    change: [event: number];\n}>();\n\nconst currentPage = defineModel<number>(\"current\");\n\n/** paginator change listener */\nfunction pageChanged(page: number): void {\n    const newPage = page > 0 ? page : 1;\n    currentPage.value = newPage;\n    emits(\"change\", newPage);\n}\n</script>\n\n<template>\n    <div :class=\"rootClass\">\n        <div>\n            <slot />\n        </div>\n\n        <div>\n            <o-pagination\n                v-if=\"paginated\"\n                v-bind=\"$attrs\"\n                :current=\"currentPage\"\n                @change=\"pageChanged\" />\n        </div>\n    </div>\n</template>\n","<script setup lang=\"ts\" generic=\"T\">\nimport {\n    computed,\n    ref,\n    watch,\n    onMounted,\n    nextTick,\n    useSlots,\n    toValue,\n    useTemplateRef,\n    toRaw,\n    triggerRef,\n    type MaybeRefOrGetter,\n} from \"vue\";\n\nimport OCheckbox from \"@/components/checkbox/Checkbox.vue\";\nimport OIcon from \"@/components/icon/Icon.vue\";\nimport OInput from \"@/components/input/Input.vue\";\nimport OLoading from \"@/components/loading/Loading.vue\";\nimport OSlotComponent from \"@/components/utils/SlotComponent\";\n\nimport OTableMobileSort from \"./TableMobileSort.vue\";\nimport OTableColumn from \"./TableColumn.vue\";\nimport OTablePagination from \"./TablePagination.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport {\n    getValueByPath,\n    toCssDimension,\n    escapeRegExpChars,\n    removeDiacriticsFromString,\n    sortBy,\n    isDefined,\n    getPropertyValue,\n} from \"@/utils/helpers\";\nimport {\n    defineClasses,\n    getActiveClasses,\n    useProviderParent,\n    useMatchMedia,\n    useDebounce,\n    isOptionViable,\n    filterOptionsItems,\n    useSequentialId,\n} from \"@/composables\";\n\nimport type { ClassBind, DeepKeys } from \"@/types\";\nimport type {\n    TableColumn,\n    TableRow,\n    TableColumnItem,\n    TableColumnComponent,\n    TableComponent,\n} from \"./types\";\nimport type { TableProps } from \"./props\";\n\n/**\n * Tabulated data are sometimes needed, it's even better when it's responsive.\n * @displayName Table\n * @requires ./TableColumn.vue\n * @style _table.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OTable\",\n    configField: \"table\",\n    inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<TableProps<T>>(), {\n    override: undefined,\n    data: undefined,\n    columns: undefined,\n    rowKey: () => getDefault(\"table.rowKey\"),\n    rowClass: getDefault(\"table.rowClass\", () => \"\"),\n    thAttrs: undefined,\n    tdAttrs: undefined,\n    customCompare: undefined,\n    bordered: () => getDefault(\"table.bordered\", false),\n    striped: () => getDefault(\"table.striped\", false),\n    narrowed: () => getDefault(\"table.narrowed\", false),\n    hoverable: () => getDefault(\"table.hoverable\", false),\n    selected: undefined,\n    selectable: () => getDefault(\"table.selectable\", false),\n    isRowSelectable: () => true,\n    showHeader: () => getDefault(\"table.showHeader\", true),\n    draggable: false,\n    draggableColumn: false,\n    scrollable: undefined,\n    stickyHeader: false,\n    height: undefined,\n    checkable: false,\n    stickyCheckbox: false,\n    checkableHeader: true,\n    checkedRows: () => [],\n    checkboxPosition: () => getDefault(\"table.checkboxPosition\", \"left\"),\n    checkboxVariant: () => getDefault(\"table.checkboxVariant\"),\n    isRowChecked: undefined,\n    isRowCheckable: getDefault(\"table.isRowCheckable\", () => true),\n    backendSorting: () => getDefault(\"table.backendSorting\", false),\n    defaultSort: () => getDefault(\"table.defaultSort\"),\n    defaultSortDirection: () => getDefault(\"table.defaultSortDirection\", \"asc\"),\n    sortIcon: () => getDefault(\"table.sortIcon\", \"arrow-up\"),\n    sortIconSize: () => getDefault(\"table.sortIconSize\", \"small\"),\n    iconPack: () => getDefault(\"table.iconPack\"),\n    detailed: false,\n    detailedRows: () => [],\n    isDetailedVisible: getDefault(\"table.isDetailedVisible\", () => true),\n    showDetailIcon: () => getDefault(\"table.showDetailIcon\", true),\n    detailIcon: () => getDefault(\"table.detailIcon\", \"chevron-right\"),\n    customDetailRow: false,\n    detailTransition: () => getDefault(\"table.detailTransition\", \"slide\"),\n    paginated: () => getDefault(\"table.paginated\", false),\n    backendPagination: false,\n    total: 0,\n    currentPage: 1,\n    perPage: () => getDefault(\"table.perPage\", 20),\n    paginationPosition: () => getDefault(\"table.paginationPosition\", \"bottom\"),\n    paginationSize: () => getDefault(\"table.paginationSize\", \"small\"),\n    paginationRounded: () => getDefault(\"table.paginationRounded\", false),\n    paginationSimple: () => getDefault(\"table.paginationSimple\", false),\n    paginationOrder: () => getDefault(\"table.paginationOrder\"),\n    paginationRangeBefore: undefined,\n    paginationRangeAfter: undefined,\n    backendFiltering: () => getDefault(\"table.backendFiltering\", false),\n    filtersIcon: () => getDefault(\"table.filterIcon\"),\n    filtersPlaceholder: () => getDefault(\"table.filterPlaceholder\"),\n    filtersEvent: \"\",\n    filterDebounce: () => getDefault(\"table.filterDebounce\", 300),\n    emptyLabel: () => getDefault(\"table.emptyLabel\"),\n    emptyIcon: () => getDefault(\"table.emptyIcon\"),\n    emptyIconSize: () => getDefault(\"table.emptyIconSize\"),\n    loading: false,\n    loadingIcon: () => getDefault(\"table.loadingIcon\", \"loading\"),\n    loadingLabel: () => getDefault(\"table.loadingLabel\"),\n    mobileBreakpoint: () => getDefault(\"table.mobileBreakpoint\"),\n    mobileCards: () => getDefault(\"table.mobileCards\", true),\n    mobileSortPlaceholder: () => getDefault(\"table.mobileSortPlaceholder\"),\n    ariaNextLabel: () => getDefault(\"table.ariaNextLabel\"),\n    ariaPreviousLabel: () => getDefault(\"table.ariaPreviousLabel\"),\n    ariaPageLabel: () => getDefault(\"table.ariaPageLabel\"),\n    ariaCurrentLabel: () => getDefault(\"table.ariaCurrentLabel\"),\n});\n\nconst emits = defineEmits<{\n    /**\n     * currentPage prop two-way binding\n     * @param value {number} updated currentPage prop\n     */\n    \"update:currentPage\": [value: number];\n    /**\n     * on pagination page change event\n     * @param page {number} updated page\n     */\n    \"page-change\": [page: number];\n    /**\n     * select prop two-way binding\n     * @param value {T} updated select prop\n     */\n    \"update:selected\": [value: T];\n    /**\n     * on row select event\n     * @param newRow {T} new select value\n     * @param oldRow {T} old select value\n     */\n    select: [newRow: T, oldRow: T];\n    /**\n     * on row checked event\n     * @param value {T[]} all checked rows\n     * @param row {T} row data\n     */\n    check: [value: T[], row: T];\n    /**\n     * on all rows checked event\n     * @param value {T[]} all checked rows\n     */\n    \"check-all\": [value: T[]];\n    /**\n     * checkedRows prop two-way binding\n     * @param value {T[]} updated checkedRows prop\n     */\n    \"update:checkedRows\": [value: T[]];\n    /**\n     * on column sort change event\n     * @param column {TableColumn} column data\n     * @param direction {string}  'asc' or 'desc'\n     * @param event {Event} native  event\n     */\n    sort: [column: TableColumn<T>, direction: \"asc\" | \"desc\", event: Event];\n    /**\n     * on filter change event\n     * @param filters {object} filter object\n     */\n    \"filters-change\": [value: Record<string, string>];\n    /**\n     * on native filter event based on props filtersEvent\n     * @param filtersEvent {string} props filtersEvent value\n     * @param filters {object} filter object\n     * @param event {Event} native  event\n     */\n    \"filters-event\": [\n        filtersEvent: string,\n        filters: Record<string, string>,\n        event: Event,\n    ];\n    /**\n     * detailedRows prop two-way binding\n     * @param value {T[]} updated detailedRows prop\n     */\n    \"update:detailedRows\": [value: T[]];\n    /**\n     * on details open event\n     * @param row {T} row data\n     */\n    \"details-open\": [row: T];\n    /**\n     * on details close event\n     * @param row {T} row data\n     */\n    \"details-close\": [row: T];\n    /**\n     * on row click event\n     * @param row {T} row data\n     * @param index {number} index of clicked row\n     * @param event {Event} native click event\n     */\n    click: [row: T, index: number, event: Event];\n    /**\n     * on row double click event\n     * @param row {T} row data\n     * @param index {number} index of clicked row\n     * @param event {Event} native click event\n     */\n    dblclick: [row: T, index: number, event: Event];\n    /**\n     * on row right click event\n     * @param row {T} row data\n     * @param index {number} index of clicked row\n     * @param event {Event} native contextmenu event\n     */\n    contextmenu: [row: T, index: number, event: Event];\n    /**\n     * on row mouseenter event\n     * @param row {T} row data\n     * @param index {number} index of clicked row\n     * @param event {Event} native mouseenter event\n     */\n    mouseenter: [row: T, index: number, event: Event];\n    /**\n     * on row mouseleave event\n     * @param row {T} row data\n     * @param index {number} index of clicked row\n     * @param event {Event} native mouseleave event\n     */\n    mouseleave: [row: T, index: number, event: Event];\n    /**\n     * on cell click event\n     * @param row {T} row data\n     * @param column {TableColumn} column data\n     * @param index {number} row index\n     * @param colindex {number} column index\n     * @param event {Event} native click event\n     */\n    \"cell-click\": [\n        row: T,\n        column: TableColumn<T>,\n        index: number,\n        colindex: number,\n        event: Event,\n    ];\n    /**\n     * on row dragstart event\n     * @param row {T} row data\n     * @param index {number} index of draged row\n     * @param event {DragEvent} native dragstart event\n     */\n    dragstart: [row: T, index: number, event: DragEvent];\n    /**\n     * on row dragend event\n     * @param row {T} row data\n     * @param index {number} index of draged row\n     * @param event {DragEvent} native dragend event\n     */\n    dragend: [row: T, index: number, event: DragEvent];\n    /**\n     * on row drop event\n     * @param row {T} row data\n     * @param index {number} index of draged row\n     * @param event {DragEvent} native drop event\n     */\n    drop: [row: T, index: number, event: DragEvent];\n    /**\n     * on row dragleave event\n     * @param row {T} row data\n     * @param index {number} index of draged row\n     * @param event {DragEvent} native dragleave event\n     */\n    dragleave: [row: T, index: number, event: DragEvent];\n    /**\n     * on row dragover event\n     * @param row {T} row data\n     * @param index {number} index of draged row\n     * @param event {DragEvent} native dragover event\n     */\n    dragover: [row: T, index: number, event: DragEvent];\n    /**\n     * on column columndragstart event\n     * @param column {TableColumn} column data\n     * @param index {number} index of draged column\n     * @param event {DragEvent} native columndragstart event\n     */\n    columndragstart: [column: TableColumn<T>, index: number, event: DragEvent];\n    /**\n     * on column columndragend event\n     * @param column {TableColumn} column data\n     * @param index {number} index of draged column\n     * @param event {DragEvent} native columndragend event\n     */\n    columndragend: [column: TableColumn<T>, index: number, event: DragEvent];\n    /**\n     * on column columndrop event\n     * @param column {TableColumn} column data\n     * @param index {number} index of draged column\n     * @param event {DragEvent} native columndrop event\n     */\n    columndrop: [column: TableColumn<T>, index: number, event: DragEvent];\n    /**\n     * on column columndragleave event\n     * @param column {TableColumn} column data\n     * @param index {number} index of draged column\n     * @param event {DragEvent} native columndragleave event\n     */\n    columndragleave: [column: TableColumn<T>, index: number, event: DragEvent];\n    /**\n     * on column columndragover event\n     * @param column {TableColumn} column data\n     * @param index {number} index of draged column\n     * @param event {DragEvent} native columndragover event\n     */\n    columndragover: [column: TableColumn<T>, index: number, event: DragEvent];\n}>();\n\nconst slots = useSlots();\n\nconst { isMobile } = useMatchMedia(props.mobileBreakpoint);\n\nconst isMobileActive = computed(() => props.mobileCards && isMobile.value);\n\nconst slotsRef = useTemplateRef(\"slotsWrapper\");\n\n// provided data is a computed ref to ensure reactivity\nconst provideData = computed<TableComponent>(() => ({\n    isColumnSorted,\n}));\n\n/** provide functionalities and data to child item components */\nconst { childItems } = useProviderParent<TableColumnComponent<T>>({\n    rootRef: slotsRef,\n    data: provideData,\n});\n\n// #region --- TABLE COLUMNS ---\n\n/** all defined columns */\nconst tableColumns = computed<TableColumnItem<T>[]>(() => {\n    if (!childItems.value.length) return [];\n    return childItems.value.map((columnItem) => {\n        const column = toValue(columnItem.data!);\n\n        // create additional th attrs data\n        let thAttrsData =\n            typeof props.thAttrs === \"function\" ? props.thAttrs(column) : {};\n        thAttrsData = Object.assign(thAttrsData, column.thAttrs);\n\n        // create additional td attrs data\n        const tdAttrsData = (props.data ?? []).map((data) => {\n            const tdAttrs =\n                typeof props.tdAttrs === \"function\"\n                    ? props.tdAttrs(data, column)\n                    : {};\n            return Object.assign(tdAttrs, column.tdAttrs);\n        });\n\n        return {\n            ...column,\n            value: column,\n            index: columnItem.index,\n            identifier: columnItem.identifier,\n            thAttrsData: thAttrsData,\n            tdAttrsData: tdAttrsData,\n        };\n    });\n});\n\n/** total columns count */\nconst columnCount = computed(() => {\n    let i = tableColumns.value.length;\n    if (showDetailRowIcon.value) i++;\n    if (props.checkable) i++;\n    return i;\n});\n\n/** aria-colindex start value for ths */\nconst ariaColIndexStart = computed(() => {\n    let i = 1;\n    if (showDetailRowIcon.value) i++;\n    if (props.checkable && props.checkboxPosition === \"left\") i++;\n    return i;\n});\n\n/** check if table has subheadings  */\nconst hasSubheadings = computed(() => {\n    if (slots.subheading) return true;\n    return tableColumns.value.some((column) => !!column.subheading);\n});\n\n/** check if table is scrollable */\nconst isScrollable = computed(() => {\n    if (props.scrollable) return true;\n    return tableColumns.value.some((column) => column.sticky);\n});\n\n// #endregion --- TABLE COLUMNS ---\n\n// #region --- TABLE ROWS ---\n\nconst tableCurrentPage = defineModel<number>(\"currentPage\", { default: 1 });\n\n// recompute table rows visibility on page change or data change\nwatch(\n    [\n        tableCurrentPage,\n        () => props.perPage,\n        () => props.data,\n        () => props.paginated,\n    ],\n    () => filterTableRows(),\n);\n\n// create a unique id sequence\nconst { nextSequence } = useSequentialId();\n\n/** all defined data elements as normalized options with a unique key*/\nconst tableRows = computed<TableRow<T>[]>(() => {\n    if (!props.data) return [];\n    return props.data.map((value: T, idx: number) => ({\n        label: \"row \" + idx, // row display label\n        value: toValue(value), // normalizes wrapped ref values\n        index: idx, // row index\n        key:\n            // if no key is given and data is object, create unique row id for each row\n            String(getValueByPath(value, props.rowKey) || nextSequence()),\n    }));\n});\n\n/** visible rows which are filtered by viability */\nconst availableRows = computed<TableRow<T>[]>(() =>\n    tableRows.value.filter(isOptionViable),\n);\n\n/** applies visability filter of reactive tableRows */\nfunction filterTableRows(): void {\n    // calculate pagination information\n    const currentPage = tableCurrentPage.value;\n    const perPage = Number(props.perPage);\n    const pageStart = (currentPage - 1) * perPage;\n    const pageEnd = pageStart + perPage;\n\n    // update hidden state for each row\n    filterOptionsItems(tableRows, (row, idx) => {\n        // if paginated not backend paginated, paginate row\n        if (props.paginated && !props.backendPagination) {\n            // if not only one page and not on active page\n            if (\n                tableRows.value.length > perPage &&\n                (idx < pageStart || idx >= pageEnd)\n            )\n                // return row is invisible (filtered out)\n                return true;\n        }\n\n        // if not backend filtered, filter row\n        if (!props.backendFiltering)\n            // return row is visible based on filters\n            return !isRowFiltered(row.value);\n\n        // return row is visible (not filtered out)\n        return false;\n    });\n}\n\n/*\n * Total data count.\n * If backend paginated, use props total else use rows data length as pagination total.\n */\nconst tableTotal = computed(() =>\n    props.backendPagination ? props.total : tableRows.value.length,\n);\n\n/** total rows count  */\nconst rowCount = computed(() => {\n    return tableTotal.value + ariaRowIndexStart.value;\n});\n\n/** aria-rowindex start value for tds based if it's Searchable or has subheadings */\nconst ariaRowIndexStart = computed(() => {\n    let i = 1;\n    if (hasSearchableColumns.value) i++;\n    if (hasSubheadings.value) i++;\n    return i;\n});\n\n/**\n * Check if footer slot has custom content.\n * Must be called during rendering.\n */\nfunction hasCustomFooterSlot(): boolean {\n    if (!slots.footer) return false;\n\n    const footer = slots.footer({\n        columnCount: columnCount.value,\n        rowCount: rowCount.value,\n    });\n    if (footer.length > 1) return true;\n\n    const tag = footer[0][\"type\"];\n    return tag === \"th\" || tag === \"td\";\n}\n\n/** get the formated row value for a column */\nfunction getColumnValue(row: T, column: TableColumn<T>): string {\n    return getPropertyValue(row, column.field as DeepKeys<T>, column.formatter);\n}\n\n/** check if two rows are equal by a custom compare function or the rowKey attribute */\nfunction isRowEqual(\n    sourceRow: MaybeRefOrGetter<T>,\n    targetRow: MaybeRefOrGetter<T>,\n): boolean {\n    const el1 = toRaw(toValue(sourceRow));\n    const el2 = toRaw(toValue(targetRow));\n    if (!isDefined(targetRow)) return false;\n    if (typeof props.customCompare === \"function\")\n        return props.customCompare(el1, el2);\n    if (props.rowKey)\n        return (\n            getPropertyValue(el1, props.rowKey) ==\n            getPropertyValue(el2, props.rowKey)\n        );\n    return el1 == el2;\n}\n\n// #endregion  --- TABLE ROWS ---\n\n// #region --- Select Feature ---\n\nconst tableSelectedRow = defineModel<T>(\"selected\", { default: undefined });\n\n/** table arrow keys listener, change selection */\nfunction onArrowPressed(delta: 1 | -1, event: KeyboardEvent): void {\n    if (!availableRows.value.length) return;\n\n    let index =\n        availableRows.value.findIndex((row) =>\n            isRowEqual(row.value, tableSelectedRow.value),\n        ) + delta;\n\n    // check if index overflow\n    index =\n        index > availableRows.value.length - 1\n            ? availableRows.value.length - 1\n            : index;\n    // check if index underflow\n    index = index < 0 ? 0 : index;\n\n    // get row element\n    const row = availableRows.value[index];\n\n    if (!props.isRowSelectable(row.value)) {\n        let newIndex: number | undefined;\n        if (delta > 0) {\n            for (\n                let i = index;\n                i < availableRows.value.length && newIndex === undefined;\n                i++\n            ) {\n                if (props.isRowSelectable(availableRows.value[i].value))\n                    newIndex = i;\n            }\n        } else {\n            for (let i = index; i >= 0 && newIndex === undefined; i--) {\n                if (props.isRowSelectable(availableRows.value[i].value))\n                    newIndex = i;\n            }\n        }\n        if (newIndex != undefined && newIndex >= 0)\n            selectRow(availableRows.value[newIndex], event);\n    } else {\n        selectRow(row, event);\n    }\n}\n\n/**\n * Row click listener.\n * Emit all necessary events.\n */\nfunction selectRow(row: TableRow<T>, event: Event): void {\n    emits(\"click\", row.value, row.index, event);\n\n    if (!props.selectable) return;\n\n    if (isRowEqual(tableSelectedRow, row.value)) return;\n    if (!props.isRowSelectable(row.value)) return;\n\n    tableSelectedRow.value = row.value;\n    // emit new and old row\n    emits(\"select\", row.value, tableSelectedRow.value);\n}\n\n// #endregion --- Select Feature ---\n\n// #region --- Filter Feature ---\n\n/** search filter record alias { fieldKey: filterValue } */\nconst filters = ref<Record<string, string>>({});\n\n/** check if has any searchable column */\nconst hasSearchableColumns = computed(() =>\n    tableColumns.value.some((column) => column.searchable),\n);\n\nlet debouncedFilter: ReturnType<\n    typeof useDebounce<Parameters<typeof handleFiltersChange>>\n>;\n\n// initialise and update debounces filter function\nwatch(\n    () => props.filterDebounce,\n    (debounce) =>\n        (debouncedFilter = useDebounce(handleFiltersChange, debounce || 0)),\n    { immediate: true },\n);\n\n// react on filters got changed\nwatch(filters, (value) => debouncedFilter(value), { deep: true });\n\nfunction handleFiltersChange(value: Record<string, string>): void {\n    emits(\"filters-change\", value);\n    // if not backend filtered, recompute rows visibility with updated filters\n    if (!props.backendFiltering) {\n        filterTableRows();\n        // force tableRows reactivity to update\n        triggerRef(tableRows);\n    }\n}\n\nfunction onFiltersEvent(event: Event): void {\n    emits(\"filters-event\", props.filtersEvent, filters.value, event);\n}\n\n/**\n * check whether a row is filtered by active filters or not\n * @param row - row element\n *\n * @returns is row filtered in\n * */\nfunction isRowFiltered(row: T): boolean {\n    if (!Object.values(filters.value).filter(Boolean).length) return true;\n    return Object.entries(filters.value).some(([key, filter]) => {\n        if (!filter) return false;\n        // get column for filter\n        const column = tableColumns.value.find((c) => c.field === key);\n        // if column has onSearch return result\n        if (typeof column?.customSearch === \"function\")\n            return column.customSearch(row, filter);\n\n        const value =\n            typeof row === \"object\" && !!row ? getValueByPath(row, key) : row;\n        if (value == null) return false;\n        // if number compare values\n        if (Number.isInteger(value)) return value === Number(filter);\n        const re = new RegExp(escapeRegExpChars(filter), \"i\");\n        if (Array.isArray(value))\n            return value.some(\n                (val) =>\n                    re.test(removeDiacriticsFromString(val)) || re.test(val),\n            );\n        if (typeof value !== \"string\") return !!value;\n        return re.test(removeDiacriticsFromString(value)) || re.test(value);\n    });\n}\n\n// #endregion --- Filter Feature ---\n\n// #region --- Sort Feature ---\n\nconst currentSortColumn = ref<TableColumnItem<T>>();\nconst isAsc = ref(true);\n\n/** check if has any sortable column */\nconst hasSortableColumns = computed(() =>\n    tableColumns.value.some((column) => column.sortable),\n);\n\n/** check if the column is the current sort column */\nfunction isColumnSorted(column: TableColumnItem<T>): boolean {\n    return currentSortColumn.value?.identifier === column.identifier;\n}\n\n// call initSort only first time (for example async data)\n// initSort must be called after async TableColumns got initialised first time\nonMounted(() => nextTick(() => initSort()));\n\n/** initial sorted column based on the default-sort prop */\nfunction initSort(): void {\n    if (!tableColumns.value.length || currentSortColumn.value) return;\n    if (!props.defaultSort) return;\n    let sortField = \"\";\n    let sortDirection = props.defaultSortDirection;\n    if (Array.isArray(props.defaultSort)) {\n        sortField = props.defaultSort[0];\n        if (props.defaultSort[1]) sortDirection = props.defaultSort[1];\n    } else {\n        sortField = props.defaultSort;\n    }\n    sortByField(sortField, sortDirection);\n}\n\nfunction sortByField(field: string, direction: \"asc\" | \"desc\"): void {\n    const sortColumn = tableColumns.value.find(\n        (column) => column.field === field,\n    );\n    if (sortColumn) {\n        isAsc.value = direction.toLowerCase() === \"asc\";\n        sort(sortColumn);\n    }\n}\n\n/**\n * Sort the column.\n * Toggle current direction on column if it's sortable\n * and not just updating the prop.\n */\nfunction sort(\n    column: TableColumnItem<T>,\n    updateDirection = false,\n    event?: Event,\n): void {\n    if (!column?.sortable) return;\n\n    if (updateDirection)\n        isAsc.value = isColumnSorted(column)\n            ? !isAsc.value\n            : props.defaultSortDirection.toLowerCase() === \"asc\";\n\n    // if not first time sort\n    if (currentSortColumn.value)\n        emits(\n            \"sort\",\n            column,\n            isAsc.value ? \"asc\" : \"desc\",\n            event || new Event(\"sort\"),\n        );\n\n    currentSortColumn.value = column;\n\n    // if not backend sorted\n    if (!props.backendSorting) {\n        // sort rows by mutating the tableRows array\n        sortByColumn(tableRows.value);\n\n        // recalculate the page filter\n        filterTableRows();\n    }\n}\n\nfunction sortByColumn(rows: TableRow<T>[]): TableRow<T>[] {\n    const column = currentSortColumn.value;\n    if (!column) return rows;\n    return sortBy<TableRow<T>>(\n        rows,\n        column?.field ? \"value.\" + column.field : \"\",\n        column?.customSort\n            ? (a, b, asc): number => column.customSort!(a.value, b.value, asc)\n            : undefined,\n        isAsc.value,\n        true,\n    );\n}\n\n// #endregion --- Sort Feature ---\n\n// #region --- Checkable Feature ---\n\nconst tableCheckedRows = defineModel<T[]>(\"checkedRows\", {\n    default: [],\n});\n\n/** check if all rows in the page are checked */\nconst isAllChecked = computed(() => {\n    const validVisibleData = availableRows.value.filter((row) =>\n        props.isRowCheckable(row.value),\n    );\n    if (validVisibleData.length === 0) return false;\n    return validVisibleData.every((currentVisibleRow) =>\n        isChecked(currentVisibleRow),\n    );\n});\n\n/** check if all rows in the page are checkable */\nconst isAllUncheckable = computed(\n    () => !availableRows.value.some((row) => props.isRowCheckable(row.value)),\n);\n\n/** check if the row is checked (is added to the array) */\nfunction isChecked(row: TableRow<T>): boolean {\n    if (typeof props.isRowChecked === \"function\")\n        return props.isRowChecked(row.value);\n    else return tableCheckedRows.value.some((r) => isRowEqual(r, row.value));\n}\n\n/** add a checked row to the the array */\nfunction addCheckedRow(row: TableRow<T>): void {\n    tableCheckedRows.value = [...tableCheckedRows.value, row.value];\n}\n\n/** remove a checked row from the array */\nfunction removeCheckedRow(row: TableRow<T>): void {\n    const idx = tableCheckedRows.value.findIndex((r) =>\n        isRowEqual(r, row.value),\n    );\n    if (idx >= 0)\n        tableCheckedRows.value = tableCheckedRows.value.toSpliced(idx, 1);\n}\n\n/**\n * Header checkbox click listener.\n * Add or remove all rows in current page.\n */\nfunction checkAll(): void {\n    if (isAllChecked.value)\n        // if all rows are already checked, check nothing\n        tableCheckedRows.value = [];\n    else {\n        // else set all visible rows as checked\n        tableCheckedRows.value = availableRows.value\n            .filter((row) => props.isRowCheckable(row.value))\n            .map((row) => row.value);\n    }\n\n    // emit event after the reactive checked rows list got updated\n    nextTick(() => emits(\"check-all\", tableCheckedRows.value));\n}\n\n/** row checkbox click listener */\nfunction checkRow(row: TableRow<T>): void {\n    if (!props.isRowCheckable(row.value)) return;\n\n    if (isChecked(row)) removeCheckedRow(row);\n    else addCheckedRow(row);\n\n    // emit event after the reactive checked rows list got updated\n    nextTick(() => emits(\"check\", tableCheckedRows.value, row.value));\n}\n\n// #endregion --- Checkable Feature ---\n\n// #region --- Detail Row Feature ---\n\nconst visibleDetailedRows = defineModel<T[]>(\"detailedRows\", {\n    default: [],\n});\n\n/**\n * Return if detailed row tabled.\n * Will be with chevron column & icon or not.\n */\nconst showDetailRowIcon = computed(\n    () => props.detailed && props.showDetailIcon,\n);\n\n/** toggle to show/hide details slot */\nfunction toggleDetails(row: TableRow<T>): void {\n    if (isDetailRowVisible(row)) {\n        closeDetailRow(row);\n        emits(\"details-close\", row.value);\n    } else {\n        openDetailRow(row);\n        emits(\"details-open\", row.value);\n    }\n}\n\nfunction openDetailRow(row: TableRow<T>): void {\n    visibleDetailedRows.value = [...visibleDetailedRows.value, row.value];\n}\n\nfunction closeDetailRow(row: TableRow<T>): void {\n    const idx = visibleDetailedRows.value.findIndex((r) =>\n        isRowEqual(r, row.value),\n    );\n    if (idx >= 0)\n        visibleDetailedRows.value = visibleDetailedRows.value.toSpliced(idx, 1);\n}\n\nfunction isDetailRowVisible(row: TableRow<T>): boolean {\n    return (\n        props.detailed &&\n        visibleDetailedRows.value.some((r) => isRowEqual(r, row.value))\n    );\n}\n\n// #endregion --- Detail Row Feature ---\n\n// #region --- Drag&Drop Feature ---\n\nconst isDraggingRow = ref(false);\nconst isDraggingColumn = ref(false);\n\nconst canDragRow = computed(() => props.draggable && !isDraggingColumn.value);\n\nconst canDragColumn = computed(\n    () => props.draggableColumn && !isDraggingRow.value,\n);\n\n/** emits drag start event */\nfunction handleDragStart(row: TableRow<T>, event: DragEvent): void {\n    if (!props.draggable) return;\n    emits(\"dragstart\", row.value, row.index, event);\n}\n\n/** emits drag leave event */\nfunction handleDragEnd(row: TableRow<T>, event: DragEvent): void {\n    if (!props.draggable) return;\n    emits(\"dragend\", row.value, row.index, event);\n}\n\n/** emits drop event */\nfunction handleDrop(row: TableRow<T>, event: DragEvent): void {\n    if (!props.draggable) return;\n    emits(\"drop\", row.value, row.index, event);\n}\n\n/** emits drag over event */\nfunction handleDragOver(row: TableRow<T>, event: DragEvent): void {\n    if (!props.draggable) return;\n    emits(\"dragover\", row.value, row.index, event);\n}\n\n/** emits drag leave event */\nfunction handleDragLeave(row: TableRow<T>, event: DragEvent): void {\n    if (!props.draggable) return;\n    emits(\"dragleave\", row.value, row.index, event);\n}\n\n/** emits drag start event (column) */\nfunction handleColumnDragStart(\n    column: TableColumnItem<T>,\n    event: DragEvent,\n): void {\n    if (!canDragColumn.value) return;\n    isDraggingColumn.value = true;\n    emits(\"columndragstart\", column.value, column.index, event);\n}\n\n/** emits drag leave event (column) */\nfunction handleColumnDragEnd(\n    column: TableColumnItem<T>,\n    event: DragEvent,\n): void {\n    if (!canDragColumn.value) return;\n    isDraggingColumn.value = false;\n    emits(\"columndragend\", column.value, column.index, event);\n}\n\n/** emits drop event (column) */\nfunction handleColumnDrop(column: TableColumnItem<T>, event: DragEvent): void {\n    if (!canDragColumn.value) return;\n    emits(\"columndrop\", column.value, column.index, event);\n}\n\n/** emits drag over event (column) */\nfunction handleColumnDragOver(\n    column: TableColumnItem<T>,\n    event: DragEvent,\n): void {\n    if (!canDragColumn.value) return;\n    emits(\"columndragover\", column.value, column.index, event);\n}\n\n/** emits drag leave event (column) */\nfunction handleColumnDragLeave(\n    column: TableColumnItem<T>,\n    event: DragEvent,\n): void {\n    if (!canDragColumn.value) return;\n    emits(\"columndragleave\", column.value, column.index, event);\n}\n\n// #endregion --- Drag&Drop Feature ---\n\n// #region --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-table__root\"],\n    [\"mobileClass\", \"o-table__root--mobile\", null, isMobileActive],\n);\n\nconst tableWrapperClasses = defineClasses(\n    [\"wrapperClass\", \"o-table__wrapper\"],\n    [\n        \"stickyHeaderClass\",\n        \"o-table__wrapper--sticky-header\",\n        null,\n        computed(() => props.stickyHeader),\n    ],\n    [\"scrollableClass\", \"o-table__wrapper--scrollable\", null, isScrollable],\n    [\"mobileClass\", \"o-table__wrapper--mobile\", null, isMobileActive],\n);\n\nconst tableWrapperStyle = computed(() => ({\n    height: toCssDimension(props.height),\n}));\n\nconst tableClasses = defineClasses(\n    [\"tableClass\", \"o-table\"],\n    [\n        \"borderedClass\",\n        \"o-table--bordered\",\n        null,\n        computed(() => props.bordered),\n    ],\n    [\"stripedClass\", \"o-table--striped\", null, computed(() => props.striped)],\n    [\n        \"narrowedClass\",\n        \"o-table--narrowed\",\n        null,\n        computed(() => props.narrowed),\n    ],\n    [\n        \"hoverableClass\",\n        \"o-table--hoverable\",\n        null,\n        computed(\n            () =>\n                (props.hoverable || props.selectable) &&\n                !!availableRows.value.length,\n        ),\n    ],\n    [\n        \"emptyClass\",\n        \"o-table--empty\",\n        null,\n        computed(() => !availableRows.value.length),\n    ],\n);\n\nconst thBaseClasses = defineClasses([\"thClass\", \"o-table__th\"]);\n\nconst thCheckboxClasses = defineClasses(\n    [\"thCheckboxClass\", \"o-table__th-checkbox\"],\n    [\n        \"thStickyClass\",\n        \"o-table__th--sticky\",\n        null,\n        computed(() => props.stickyCheckbox),\n    ],\n);\n\nconst thDetailedClasses = defineClasses([\n    \"thDetailedClass\",\n    \"o-table__th-detailed\",\n]);\n\nconst thSubheadingClasses = defineClasses([\n    \"thSubheadingClass\",\n    \"o-table__th-subheading\",\n]);\n\nconst thSortIconClasses = defineClasses([\n    \"thSortIconClass\",\n    \"o-table__th__sort-icon\",\n]);\n\nconst trSelectedClasses = defineClasses([\n    \"trSelectedClass\",\n    \"o-table__tr--selected\",\n]);\n\nconst trCheckedClasses = defineClasses([\n    \"trCheckedClass\",\n    \"o-table__tr--checked\",\n]);\n\nconst trEmptyClasses = defineClasses([\"trEmptyClass\", \"o-table__tr-empty\"]);\n\nconst trDetailedClasses = defineClasses([\n    \"trDetailedClass\",\n    \"o-table__tr-detail\",\n]);\n\nconst tdBaseClasses = defineClasses([\"tdClass\", \"o-table__td\"]);\n\nconst tdCheckboxClasses = defineClasses(\n    [\"tdCheckboxClass\", \"o-table__td-checkbox\"],\n    [\n        \"thStickyClass\",\n        \"o-table__th--sticky\",\n        null,\n        computed(() => props.stickyCheckbox),\n    ],\n);\n\nconst tdDetailedChevronClasses = defineClasses([\n    \"tdDetailedChevronClass\",\n    \"o-table__td-chevron\",\n]);\n\nconst footerClasses = defineClasses([\"footerClass\", \"o-table__footer\"]);\n\nconst mobileSortClasses = defineClasses([\n    \"mobileSortClass\",\n    \"o-table__mobile-sort\",\n]);\n\nconst paginationWrapperClasses = defineClasses([\n    \"paginationWrapperClass\",\n    \"o-table__pagination\",\n]);\n\nconst paginationWrapperRootClasses = computed(() =>\n    getActiveClasses(paginationWrapperClasses),\n);\n\nfunction rowClasses(row: TableRow<T>): ClassBind[] {\n    const selectedClasses = isRowEqual(row.value, tableSelectedRow.value)\n        ? trSelectedClasses.value\n        : [];\n\n    const checkedClasses = isChecked(row) ? trCheckedClasses.value : [];\n\n    const rowClass =\n        typeof props.rowClass === \"function\"\n            ? props.rowClass(row.value, row.index) || \"\"\n            : \"\";\n\n    return [...selectedClasses, ...checkedClasses, { [rowClass]: true }];\n}\n\n// #endregion --- Computed Component Classes ---\n\n// compute initial row visibility\nfilterTableRows();\n\n// #region --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ rows: tableRows, sort: sortByField });\n\n// #endregion\n</script>\n\n<template>\n    <div data-oruga=\"table\" :class=\"rootClasses\">\n        <div ref=\"slotsWrapper\" style=\"display: none\">\n            <!--\n                @slot Place o-table-column here\n            -->\n            <slot>\n                <!--\n                    @slot Place extra `o-table-column` components here, even if you have some columns defined by prop\n                -->\n                <slot name=\"before\" />\n\n                <template v-if=\"columns?.length\">\n                    <o-table-column\n                        v-for=\"(column, idx) in columns\"\n                        :key=\"column.field || idx\"\n                        v-slot=\"{ row }\"\n                        v-bind=\"column\">\n                        {{ getColumnValue(row, column) }}\n                    </o-table-column>\n                </template>\n\n                <!--\n                    @slot Place extra `o-table-column` components here, even if you have some columns defined by prop\n                -->\n                <slot name=\"after\" />\n            </slot>\n        </div>\n\n        <o-table-mobile-sort\n            v-if=\"isMobileActive && hasSortableColumns\"\n            :current-sort-column=\"currentSortColumn\"\n            :columns=\"tableColumns\"\n            :placeholder=\"mobileSortPlaceholder\"\n            :icon-pack=\"iconPack\"\n            :sort-icon=\"sortIcon\"\n            :sort-icon-size=\"sortIconSize\"\n            :is-asc=\"isAsc\"\n            :mobile-sort-classes=\"mobileSortClasses\"\n            @sort=\"(column, event) => sort(column, true, event)\" />\n\n        <template\n            v-if=\"\n                paginated &&\n                (paginationPosition === 'top' || paginationPosition === 'both')\n            \">\n            <!--\n                @slot Override pagination label\n                @binding {number} current - current page\n                @binding {number} per-page - rows per page\n                @binding {number} total - total rows count\n                @binding {(page: number): void } change - on page change event\n            -->\n            <slot\n                name=\"pagination\"\n                :current=\"tableCurrentPage\"\n                :per-page=\"perPage\"\n                :total=\"tableTotal\"\n                :change=\"(page) => (tableCurrentPage = page)\">\n                <o-table-pagination\n                    v-model:current=\"tableCurrentPage\"\n                    :paginated=\"paginated\"\n                    :per-page=\"perPage\"\n                    :total=\"tableTotal\"\n                    :rounded=\"paginationRounded\"\n                    :size=\"paginationSize\"\n                    :order=\"paginationOrder\"\n                    :simple=\"paginationSimple\"\n                    :range-before=\"paginationRangeBefore\"\n                    :range-after=\"paginationRangeAfter\"\n                    :icon-pack=\"iconPack\"\n                    :aria-next-label=\"ariaNextLabel\"\n                    :aria-previous-label=\"ariaPreviousLabel\"\n                    :aria-page-label=\"ariaPageLabel\"\n                    :aria-current-label=\"ariaCurrentLabel\"\n                    :root-class=\"paginationWrapperRootClasses\"\n                    @change=\"(page) => $emit('page-change', page)\">\n                    <!--\n                        @slot Additional slot if table is paginated\n                    -->\n                    <slot name=\"top-left\" />\n                </o-table-pagination>\n            </slot>\n        </template>\n\n        <div :class=\"tableWrapperClasses\" :style=\"tableWrapperStyle\">\n            <table\n                v-if=\"tableColumns.length\"\n                v-bind=\"$attrs\"\n                :class=\"tableClasses\"\n                :tabindex=\"selectable || isScrollable ? 0 : undefined\"\n                :aria-rowcount=\"rowCount\"\n                :aria-colcount=\"columnCount\"\n                @keydown.prevent.up=\"onArrowPressed(-1, $event)\"\n                @keydown.prevent.down=\"onArrowPressed(1, $event)\"\n                @keydown.prevent.home=\"selectRow(availableRows[0], $event)\"\n                @keydown.prevent.end=\"\n                    selectRow(availableRows[availableRows.length - 1], $event)\n                \">\n                <caption v-if=\"$slots.caption\">\n                    <!--\n                        @slot Define a table caption here\n                    -->\n                    <slot name=\"caption\" />\n                </caption>\n\n                <thead v-if=\"showHeader\">\n                    <!--\n                        @slot Define preheader content here\n                    -->\n                    <slot name=\"preheader\" />\n\n                    <tr :aria-rowindex=\"1\">\n                        <!-- detailed toggle column -->\n                        <th\n                            v-if=\"showDetailRowIcon\"\n                            :class=\"[...thBaseClasses, ...thDetailedClasses]\"\n                            :aria-colindex=\"1\"\n                            aria-hidden=\"true\" />\n\n                        <!-- checkable column left -->\n                        <th\n                            v-if=\"checkable && checkboxPosition === 'left'\"\n                            :class=\"[...thBaseClasses, ...thCheckboxClasses]\"\n                            :aria-colindex=\"showDetailRowIcon ? 2 : 1\">\n                            <!--\n                                @slot Override check all checkbox\n                                @binding {boolean} is-all-checked - if all rows are checked\n                                @binding {boolean} is-all-uncheckable - if check all is uncheckable\n                                @binding {(): void} check-all - check all function\n                            -->\n                            <slot\n                                v-if=\"checkableHeader\"\n                                name=\"check-all\"\n                                :is-all-checked=\"isAllChecked\"\n                                :is-all-uncheckable=\"isAllUncheckable\"\n                                :check-all=\"checkAll\">\n                                <o-checkbox\n                                    :model-value=\"isAllChecked\"\n                                    autocomplete=\"off\"\n                                    name=\"row_check_all\"\n                                    :variant=\"checkboxVariant\"\n                                    :disabled=\"isAllUncheckable\"\n                                    aria-label=\"Check all\"\n                                    @update:model-value=\"checkAll\" />\n                            </slot>\n                        </th>\n\n                        <!-- row data columns -->\n                        <template\n                            v-for=\"column in tableColumns\"\n                            :key=\"column.identifier\">\n                            <th\n                                v-if=\"!column.hidden\"\n                                v-bind=\"column.thAttrsData\"\n                                :class=\"[...thBaseClasses, ...column.thClasses]\"\n                                :style=\"isMobileActive ? {} : column.style\"\n                                :draggable=\"canDragColumn\"\n                                :aria-sort=\"\n                                    isColumnSorted(column)\n                                        ? isAsc\n                                            ? 'ascending'\n                                            : 'descending'\n                                        : undefined\n                                \"\n                                :aria-colindex=\"\n                                    ariaColIndexStart + column.index\n                                \"\n                                @click.stop=\"sort(column, true, $event)\"\n                                @dragstart=\"\n                                    handleColumnDragStart(column, $event)\n                                \"\n                                @dragend=\"handleColumnDragEnd(column, $event)\"\n                                @drop=\"handleColumnDrop(column, $event)\"\n                                @dragover=\"handleColumnDragOver(column, $event)\"\n                                @dragleave=\"\n                                    handleColumnDragLeave(column, $event)\n                                \">\n                                <o-slot-component\n                                    v-if=\"column.$slots?.header\"\n                                    :component=\"column.$el\"\n                                    name=\"header\"\n                                    tag=\"span\"\n                                    :props=\"{\n                                        column: column.value,\n                                        index: column.index,\n                                    }\" />\n\n                                <span v-else>\n                                    {{ column.label }}\n                                    <span\n                                        v-if=\"column.sortable\"\n                                        v-show=\"isColumnSorted(column)\"\n                                        :class=\"thSortIconClasses\"\n                                        :aria-hidden=\"!isColumnSorted(column)\">\n                                        <o-icon\n                                            :icon=\"sortIcon\"\n                                            :pack=\"iconPack\"\n                                            :size=\"sortIconSize\"\n                                            :rotation=\"!isAsc ? 180 : 0\" />\n                                    </span>\n                                </span>\n                            </th>\n                        </template>\n\n                        <!-- checkable column right -->\n                        <th\n                            v-if=\"checkable && checkboxPosition === 'right'\"\n                            :class=\"[...thBaseClasses, ...thCheckboxClasses]\"\n                            :aria-colindex=\"\n                                ariaColIndexStart + tableColumns.length\n                            \">\n                            <!--\n                                @slot Override check all checkbox\n                                @binding {boolean} is-all-checked - if all rows are checked\n                                @binding {boolean} is-all-uncheckable - if check all is uncheckable\n                                @binding {(): void} check-all - check all function\n                            -->\n                            <slot\n                                v-if=\"checkableHeader\"\n                                name=\"check-all\"\n                                :is-all-checked=\"isAllChecked\"\n                                :is-all-uncheckable=\"isAllUncheckable\"\n                                :check-all=\"checkAll\">\n                                <o-checkbox\n                                    :model-value=\"isAllChecked\"\n                                    autocomplete=\"off\"\n                                    name=\"row_check_all\"\n                                    :variant=\"checkboxVariant\"\n                                    :disabled=\"isAllUncheckable\"\n                                    aria-label=\"Check all\"\n                                    @update:model-value=\"checkAll\" />\n                            </slot>\n                        </th>\n                    </tr>\n\n                    <tr v-if=\"hasSearchableColumns\" :aria-rowindex=\"2\">\n                        <!-- detailed toggle column -->\n                        <th\n                            v-if=\"showDetailRowIcon\"\n                            :class=\"[...thBaseClasses, ...thDetailedClasses]\"\n                            aria-hidden=\"true\" />\n\n                        <!-- checkable column left -->\n                        <th v-if=\"checkable && checkboxPosition === 'left'\" />\n\n                        <!-- row data columns -->\n                        <template\n                            v-for=\"column in tableColumns\"\n                            :key=\"column.identifier\">\n                            <th\n                                v-if=\"!column.hidden\"\n                                v-bind=\"column.thAttrsData\"\n                                :class=\"[...thBaseClasses, ...column.thClasses]\"\n                                :style=\"isMobileActive ? {} : column.style\">\n                                <template v-if=\"column.searchable\">\n                                    <template v-if=\"column.$slots?.searchable\">\n                                        <o-slot-component\n                                            :component=\"column.$el\"\n                                            name=\"searchable\"\n                                            tag=\"span\"\n                                            :props=\"{\n                                                column: column.value,\n                                                index: column.index,\n                                                filters,\n                                            }\" />\n                                    </template>\n                                    <o-input\n                                        v-else-if=\"column.field\"\n                                        v-model=\"filters[column.field]\"\n                                        :name=\"`column_${column.field}_filter`\"\n                                        :type=\"\n                                            column.numeric ? 'number' : 'search'\n                                        \"\n                                        :placeholder=\"filtersPlaceholder\"\n                                        :icon=\"filtersIcon\"\n                                        :pack=\"iconPack\"\n                                        size=\"small\"\n                                        :aria-label=\"`${column.label} search`\"\n                                        @[filtersEvent]=\"onFiltersEvent\" />\n                                </template>\n                            </th>\n                        </template>\n\n                        <!-- checkable column right -->\n                        <th v-if=\"checkable && checkboxPosition === 'right'\" />\n                    </tr>\n\n                    <tr\n                        v-if=\"hasSubheadings\"\n                        :aria-rowindex=\"hasSearchableColumns ? 3 : 2\">\n                        <!-- detailed toggle column -->\n                        <th\n                            v-if=\"showDetailRowIcon\"\n                            :class=\"[...thBaseClasses, ...thDetailedClasses]\" />\n\n                        <!-- checkable column left -->\n                        <th v-if=\"checkable && checkboxPosition === 'left'\" />\n\n                        <!-- row data columns -->\n                        <template\n                            v-for=\"column in tableColumns\"\n                            :key=\"column.identifier\">\n                            <th\n                                v-if=\"!column.hidden\"\n                                :style=\"isMobileActive ? {} : column.style\"\n                                :class=\"[\n                                    ...thBaseClasses,\n                                    ...thSubheadingClasses,\n                                ]\">\n                                <o-slot-component\n                                    v-if=\"column.$slots?.subheading\"\n                                    :component=\"column.$el\"\n                                    name=\"subheading\"\n                                    tag=\"span\"\n                                    :props=\"{\n                                        column: column.value,\n                                        index: column.index,\n                                    }\" />\n                                <span v-else>\n                                    <slot name=\"subheading\">\n                                        {{ column.subheading }}\n                                    </slot>\n                                </span>\n                            </th>\n                        </template>\n\n                        <!-- checkable column right -->\n                        <th v-if=\"checkable && checkboxPosition === 'right'\" />\n                    </tr>\n                </thead>\n\n                <tbody>\n                    <!-- table rows -->\n                    <template\n                        v-for=\"(row, rowIndex) in tableRows\"\n                        :key=\"row.key\">\n                        <tr\n                            v-if=\"!row.hidden\"\n                            :class=\"rowClasses(row)\"\n                            :draggable=\"canDragRow\"\n                            :aria-rowindex=\"ariaRowIndexStart + rowIndex + 1\"\n                            @click=\"selectRow(row, $event)\"\n                            @dblclick=\"\n                                $emit('dblclick', row.value, row.index, $event)\n                            \"\n                            @mouseenter=\"\n                                $emit(\n                                    'mouseenter',\n                                    row.value,\n                                    row.index,\n                                    $event,\n                                )\n                            \"\n                            @mouseleave=\"\n                                $emit(\n                                    'mouseleave',\n                                    row.value,\n                                    row.index,\n                                    $event,\n                                )\n                            \"\n                            @contextmenu=\"\n                                $emit(\n                                    'contextmenu',\n                                    row.value,\n                                    row.index,\n                                    $event,\n                                )\n                            \"\n                            @dragstart=\"handleDragStart(row, $event)\"\n                            @dragend=\"handleDragEnd(row, $event)\"\n                            @drop=\"handleDrop(row, $event)\"\n                            @dragover=\"handleDragOver(row, $event)\"\n                            @dragleave=\"handleDragLeave(row, $event)\">\n                            <!-- detailed toggle column -->\n                            <td\n                                v-if=\"showDetailRowIcon\"\n                                :class=\"[\n                                    ...tdBaseClasses,\n                                    ...tdDetailedChevronClasses,\n                                ]\">\n                                <o-icon\n                                    v-if=\"isDetailedVisible(row.value)\"\n                                    :icon=\"detailIcon\"\n                                    :pack=\"iconPack\"\n                                    :rotation=\"isDetailRowVisible(row) ? 90 : 0\"\n                                    clickable\n                                    :aria-label=\"`Open ${row.label} details`\"\n                                    @click.prevent=\"toggleDetails(row)\" />\n                            </td>\n\n                            <!-- checkable column left -->\n                            <td\n                                v-if=\"checkable && checkboxPosition === 'left'\"\n                                :class=\"[\n                                    ...thBaseClasses,\n                                    ...tdCheckboxClasses,\n                                ]\">\n                                <o-checkbox\n                                    :model-value=\"isChecked(row)\"\n                                    autocomplete=\"off\"\n                                    :name=\"`row_${row.index}_check`\"\n                                    :variant=\"checkboxVariant\"\n                                    :disabled=\"!isRowCheckable(row.value)\"\n                                    :aria-label=\"`Check ${row.label}`\"\n                                    @update:model-value=\"checkRow(row)\" />\n                            </td>\n\n                            <!-- row data columns -->\n                            <template\n                                v-for=\"column in tableColumns\"\n                                :key=\"column.identifier\">\n                                <o-slot-component\n                                    v-if=\"!column.hidden\"\n                                    v-bind=\"column.tdAttrsData[row.index]\"\n                                    :component=\"column.$el\"\n                                    name=\"default\"\n                                    tag=\"td\"\n                                    :class=\"[\n                                        ...tdBaseClasses,\n                                        ...column.tdClasses,\n                                    ]\"\n                                    :data-label=\"column.label\"\n                                    :style=\"isMobileActive ? {} : column.style\"\n                                    :props=\"{\n                                        row: row.value,\n                                        index: row.index,\n                                        column: column.value,\n                                        colindex: column.index,\n                                        toggleDetails: () => toggleDetails(row),\n                                    }\"\n                                    @click=\"\n                                        $emit(\n                                            'cell-click',\n                                            row.value,\n                                            column.value,\n                                            row.index,\n                                            column.index,\n                                            $event,\n                                        )\n                                    \">\n                                    {{ getColumnValue(row.value, column) }}\n                                </o-slot-component>\n                            </template>\n\n                            <!-- checkable column right -->\n                            <td\n                                v-if=\"checkable && checkboxPosition === 'right'\"\n                                :class=\"[\n                                    ...thBaseClasses,\n                                    ...tdCheckboxClasses,\n                                ]\">\n                                <o-checkbox\n                                    :model-value=\"isChecked(row)\"\n                                    autocomplete=\"off\"\n                                    :variant=\"checkboxVariant\"\n                                    :disabled=\"!isRowCheckable(row.value)\"\n                                    :aria-label=\"`Check ${row.label}`\"\n                                    @update:model-value=\"checkRow(row)\" />\n                            </td>\n                        </tr>\n\n                        <transition-group\n                            v-if=\"props.detailed\"\n                            :name=\"detailTransition\">\n                            <template v-if=\"isDetailRowVisible(row)\">\n                                <!--\n                                    @slot Place row detail content here\n                                    @binding {T} row - row content\n                                    @binding {number} index - row index\n                                -->\n                                <slot\n                                    v-if=\"customDetailRow\"\n                                    name=\"detail\"\n                                    :row=\"row.value\"\n                                    :index=\"row.index\" />\n                                <tr\n                                    v-else\n                                    :key=\"`${row.key}_detail`\"\n                                    :class=\"trDetailedClasses\">\n                                    <td :colspan=\"columnCount\">\n                                        <!--\n                                            @slot Place row detail content here\n                                            @binding {T} row - row content\n                                            @binding {number} index - row index\n                                        -->\n                                        <slot\n                                            name=\"detail\"\n                                            :row=\"row.value\"\n                                            :index=\"row.index\" />\n                                    </td>\n                                </tr>\n                            </template>\n                        </transition-group>\n                    </template>\n\n                    <tr v-if=\"!availableRows.length\" :class=\"trEmptyClasses\">\n                        <td :colspan=\"columnCount\">\n                            <!--\n                                @slot Define content if table is empty\n                            -->\n                            <slot name=\"empty\">\n                                <o-icon\n                                    v-if=\"emptyIcon\"\n                                    :icon=\"emptyIcon\"\n                                    :size=\"emptyIconSize\"\n                                    :pack=\"iconPack\" />\n                                {{ emptyLabel }}\n                            </slot>\n                        </td>\n                    </tr>\n                </tbody>\n\n                <tfoot v-if=\"$slots.footer\">\n                    <tr :class=\"footerClasses\">\n                        <!--\n                            @slot Define a custom footer\n                            @binding {number} column-count - counts of visible columns\n                            @binding {number} row-count - counts of visible rows\n                        -->\n                        <slot\n                            v-if=\"hasCustomFooterSlot()\"\n                            name=\"footer\"\n                            :column-count=\"columnCount\"\n                            :row-count=\"rowCount\" />\n                        <th v-else :colspan=\"columnCount\">\n                            <!--\n                                @slot Define a custom footer\n                                @binding {number} column-count - counts of visible columns\n                                @binding {number} row-count - counts of visible rows\n                            -->\n                            <slot\n                                name=\"footer\"\n                                :column-count=\"columnCount\"\n                                :row-count=\"rowCount\" />\n                        </th>\n                    </tr>\n                </tfoot>\n            </table>\n\n            <!--\n                @slot Override loading component\n                @binding {boolean} loading - is loading state enabled\n            -->\n            <slot name=\"loading\" :loading=\"loading\">\n                <o-loading\n                    v-bind=\"loadingClasses\"\n                    :full-page=\"false\"\n                    :active=\"loading\"\n                    :icon=\"loadingIcon\"\n                    :label=\"loadingLabel\" />\n            </slot>\n        </div>\n\n        <template\n            v-if=\"\n                (checkable && $slots['bottom-left']) ||\n                (paginated &&\n                    (paginationPosition === 'bottom' ||\n                        paginationPosition === 'both'))\n            \">\n            <!--\n                @slot Override pagination label\n                @binding {number} current - current page\n                @binding {number} per-page - rows per page\n                @binding {number} total - total rows count\n                @binding {(page: number): void } change - on page change event\n            -->\n            <slot\n                name=\"pagination\"\n                :current=\"tableCurrentPage\"\n                :per-page=\"perPage\"\n                :total=\"tableTotal\"\n                :change=\"(page) => (tableCurrentPage = page)\">\n                <o-table-pagination\n                    v-model:current=\"tableCurrentPage\"\n                    :paginated=\"paginated\"\n                    :per-page=\"perPage\"\n                    :total=\"tableTotal\"\n                    :rounded=\"paginationRounded\"\n                    :size=\"paginationSize\"\n                    :order=\"paginationOrder\"\n                    :simple=\"paginationSimple\"\n                    :range-before=\"paginationRangeBefore\"\n                    :range-after=\"paginationRangeAfter\"\n                    :icon-pack=\"iconPack\"\n                    :aria-next-label=\"ariaNextLabel\"\n                    :aria-previous-label=\"ariaPreviousLabel\"\n                    :aria-page-label=\"ariaPageLabel\"\n                    :aria-current-label=\"ariaCurrentLabel\"\n                    :root-class=\"paginationWrapperRootClasses\"\n                    @change=\"(page) => $emit('page-change', page)\">\n                    <!--\n                        @slot Additional slot if table is paginated\n                    -->\n                    <slot name=\"bottom-left\" />\n                </o-table-pagination>\n            </slot>\n        </template>\n    </div>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Table from \"./Table.vue\";\nimport TableColumn from \"./TableColumn.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export table specific types */\nexport type { TableColumn, TableRow } from \"./types\";\n\n/** export table plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Table);\n        registerComponent(app, TableColumn);\n    },\n} as Plugin;\n\n/** export table components */\nexport { Table as OTable, TableColumn as OTableColumn };\n"],"names":["_a","column","_useModel","index","row","Table","TableColumn"],"mappings":"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"}