import { TreeNode } from 'treemate'; import { CSSProperties, InjectionKey, Ref, VNodeChild, HTMLAttributes } from 'vue'; import { EllipsisProps } from '../../ellipsis/src/Ellipsis'; import { NLocale } from '../../locales'; import { MergedTheme } from '../../_mixins'; import { DataTableTheme } from '../styles'; import { RowItem, ColItem } from './use-group-header'; import { DataTableSelectionOption } from './TableParts/SelectionMenu'; export declare type FilterOptionValue = string | number; export declare type ColumnKey = string | number; export declare type RowKey = string | number; export declare type SortOrderFlag = 1 | -1 | 0; export declare type RowData = Record; export interface InternalRowData { [key: string]: unknown; } export declare type CreateRowKey = (row: T) => RowKey; export declare type CreateRowClassName = (row: T, index: number) => string; export declare type CreateRowProps = (row: T, index: number) => HTMLAttributes; export declare type CompareFn = (row1: T, row2: T) => number; export declare type Sorter = CompareFn | SorterMultiple; export interface SorterMultiple { multiple: number; compare?: CompareFn | 'default'; } export declare type Filter = (filterOptionValue: FilterOptionValue, row: T) => boolean; export interface FilterOption { label: string; value: FilterOptionValue; } export declare type TmNode = TreeNode; export declare type SortOrder = 'ascend' | 'descend' | false; export declare type Ellipsis = boolean | EllipsisProps; export interface CommonColumnInfo { fixed?: 'left' | 'right'; width?: number; className?: string; align?: 'left' | 'center' | 'right'; ellipsis?: Ellipsis; } export declare type TableColumnTitle = string | ((column: TableBaseColumn) => VNodeChild); export declare type TableExpandColumnTitle = string | ((column: TableExpandColumn) => VNodeChild); export declare type TableColumnGroupTitle = string | ((column: TableColumnGroup) => VNodeChild); export declare type TableColumnGroup = { title?: TableColumnGroupTitle; type?: never; key: ColumnKey; children: Array>; filterOptions?: never; } & CommonColumnInfo; export declare type TableBaseColumn = { title?: TableColumnTitle; titleColSpan?: number; type?: never; key: ColumnKey; sorter?: boolean | Sorter | 'default'; defaultSortOrder?: SortOrder; sortOrder?: SortOrder; filter?: 'default' | boolean | Filter; filterOptions?: FilterOption[]; filterOptionValues?: FilterOptionValue[] | null; filterOptionValue?: FilterOptionValue | null; filterMode?: 'or' | 'and'; defaultFilterOptionValues?: FilterOptionValue[] | null; defaultFilterOptionValue?: FilterOptionValue | null; filterMultiple?: boolean; render?: (rowData: T, rowIndex: number) => VNodeChild; renderSorter?: RenderSorter; renderFilter?: RenderFilter; renderFilterIcon?: RenderFilter; renderFilterMenu?: RenderFilterMenu; colSpan?: (rowData: T, rowIndex: number) => number; rowSpan?: (rowData: T, rowIndex: number) => number; } & CommonColumnInfo; export declare type TableSelectionColumn = { type: 'selection'; disabled?: (row: T) => boolean; options?: DataTableSelectionOptions; sorter?: never; filter?: never; filterOptions?: never; filterOptionValues?: never; filterOptionValue?: never; colSpan?: never; rowSpan?: never; } & CommonColumnInfo; export declare type RenderExpand = (row: T, index: number) => VNodeChild; export declare type Expandable = (row: T, index: number) => boolean; export interface TableExpandColumn extends Omit, 'type'> { type: 'expand'; title?: TableExpandColumnTitle; renderExpand: RenderExpand; expandable?: Expandable; } export declare type TableColumn = TableColumnGroup | TableBaseColumn | TableSelectionColumn | TableExpandColumn; export declare type TableColumns = Array>; export declare type DataTableSelectionOptions = Array void; }>; export interface DataTableInjection { indentRef: Ref; hasChildrenRef: Ref; firstContentfulColIndexRef: Ref; componentId: string; checkOptionsRef: Ref; hoverKeyRef: Ref; mergedClsPrefixRef: Ref; mergedThemeRef: Ref>; scrollXRef: Ref; rowsRef: Ref; colsRef: Ref; paginatedDataRef: Ref; leftFixedColumnsRef: Ref; rightFixedColumnsRef: Ref; leftActiveFixedColKeyRef: Ref; rightActiveFixedColKeyRef: Ref; fixedColumnLeftMapRef: Ref>; fixedColumnRightMapRef: Ref>; mergedCurrentPageRef: Ref; someRowsCheckedRef: Ref; allRowsCheckedRef: Ref; mergedSortStateRef: Ref; mergedFilterStateRef: Ref; loadingRef: Ref; rowClassNameRef: Ref; mergedCheckedRowKeySetRef: Ref>; mergedInderminateRowKeySetRef: Ref>; localeRef: Ref; filterMenuCssVarsRef: Ref; mergedExpandedRowKeysRef: Ref; rowKeyRef: Ref; renderExpandRef: Ref; summaryRef: Ref; rawPaginatedDataRef: Ref; virtualScrollRef: Ref; bodyWidthRef: Ref; scrollPartRef: Ref<'head' | 'body'>; mergedTableLayoutRef: Ref<'auto' | 'fixed'>; maxHeightRef: Ref; minHeightRef: Ref; rowPropsRef: Ref; flexHeightRef: Ref; headerCheckboxDisabledRef: Ref; doUpdateExpandedRowKeys: (keys: RowKey[]) => void; doUpdateFilters: (filters: FilterState, sourceColumn?: TableBaseColumn) => void; deriveNextSorter: (sorter: SortState | null) => void; doUncheckAll: (checkWholeTable?: boolean) => void; doCheckAll: (checkWholeTable?: boolean) => void; doCheck: (rowKey: RowKey | RowKey[]) => void; doUncheck: (rowKey: RowKey | RowKey[]) => void; handleTableHeaderScroll: (e: Event) => void; handleTableBodyScroll: (e: Event) => void; syncScrollState: (deltaX?: number, deltaY?: number) => void; setHeaderScrollLeft: (scrollLeft: number) => void; } export declare const dataTableInjectionKey: InjectionKey; export interface MainTableInjection { leftActiveFixedColKey: ColumnKey | null; rightActiveFixedColKey: ColumnKey | null; } export declare type RenderFilter = (props: { active: boolean; show: boolean; }) => VNodeChild; export declare type RenderSorter = (props: { order: SortOrder | false; }) => VNodeChild; export declare type RenderFilterMenu = (actions: { hide: () => void; }) => VNodeChild; export declare type OnUpdateExpandedRowKeys = (keys: RowKey[]) => void; export declare type OnUpdateCheckedRowKeys = (keys: RowKey[]) => void; export declare type OnUpdateSorter = (sortState: SortState & SortState[] & null) => void; export declare type OnUpdateSorterImpl = (sortState: SortState | SortState[] | null) => void; export declare type OnUpdateFilters = (filterState: FilterState, sourceColumn?: TableBaseColumn) => void; export interface SortState { columnKey: ColumnKey; order: SortOrder; sorter: Sorter | boolean | 'default'; } export interface FilterState { [key: string]: FilterOptionValue[] | FilterOptionValue | null | undefined; } export interface MainTableRef { getHeaderElement: () => HTMLElement | null; getBodyElement: () => HTMLElement | null; } export interface MainTableBodyRef { getScrollContainer: () => HTMLElement | null; } export interface MainTableHeaderRef { $el: HTMLElement | null; } export declare type OnFilterMenuChange = (value: T) => void; export declare type OnFilterMenuChangeImpl = (value: FilterOptionValue[] | FilterOptionValue | null) => void; export interface DataTableInst { filter: (filters: FilterState | null) => void; filters: (filters: FilterState | null) => void; clearFilter: () => void; clearFilters: () => void; page: (page: number) => void; sort: (columnKey: ColumnKey, order: SortOrder) => void; } export declare type CreateSummary = (pageData: T[]) => SummaryRowData | SummaryRowData[]; export interface SummaryCell { value?: string | number; colSpan?: number; rowSpan?: number; } export interface SummaryRowData { [key: string]: SummaryCell; }