import type { ColumnDef, ColumnOrderState, ColumnPinningState, ColumnSizingState, OnChangeFn, Row, SortingState, VisibilityState } from "@tanstack/react-table"; import type { SortInfo } from "./hooks/useTableSort"; export interface BulkSelectAllRowsProps { selectAllRowMessage: string; selectAllRowButtonLabel: string; setBulkSelectedAllRows: (value: boolean) => void; allRowsSelectedMessage?: string; clearSelectionButtonLabel?: string; } export interface ColumnMoreAction { type: string; label: string; icon?: React.ComponentType<{ className?: string; size?: number; }>; } export interface DataTableColumnMeta { enableDelete?: boolean; moreActions?: ColumnMoreAction[]; description?: string; align?: "left" | "center" | "right"; } export interface DataTableProps { columns: ColumnDef[]; data?: TData[]; getRowId?: (row: TData) => string; sorting?: SortingState; onSortingChange?: OnChangeFn; onSort?: (sort: SortInfo | null) => void; enableSorting?: boolean; enableURLSort?: boolean; totalCount?: number; pageSize?: number; currentPage?: number; onPageChange?: (page: number) => void; enableURLPagination?: boolean; enableRowSelection?: boolean | ((row: Row) => boolean); selectedRowKeys?: string[]; onRowSelect?: (keys: string[], rows: TData[]) => void; bulkSelectAllRowsProps?: BulkSelectAllRowsProps; enableColumnResize?: boolean; persistColumnSizing?: boolean; columnSizing?: ColumnSizingState; onColumnSizingChange?: OnChangeFn; enableColumnFreeze?: boolean; columnPinning?: ColumnPinningState; onColumnPinningChange?: OnChangeFn; localStorageKeyPrefix?: string; columnVisibility?: VisibilityState; onColumnVisibilityChange?: OnChangeFn; onColumnHide?: (columnId: string) => void; enableColumnReorder?: boolean; columnOrder?: ColumnOrderState; onColumnOrderChange?: OnChangeFn; enableAddColumn?: boolean; onColumnAdd?: (position: number) => void; onColumnDelete?: (columnId: string) => void; onColumnUpdate?: (columns: ColumnDef[]) => void; onMoreActionClick?: (actionType: string, columnId: string) => void; enableHeaderMenu?: boolean; loading?: boolean; bordered?: boolean; className?: string; emptyMessage?: string | React.ReactNode; onRowClick?: (event: React.MouseEvent, row: TData, index: number) => void; allowRowClick?: boolean; renderBody?: () => React.ReactNode; }