import type { ColumnDef, ColumnOrderState, ColumnPinningState, OnChangeFn, Row, SortingState, VisibilityState } from "@tanstack/react-table";
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 {
    isDeletable?: boolean;
    moreActions?: ColumnMoreAction[];
    description?: string;
    align?: "left" | "center" | "right";
}
export interface DataTableProps<TData> {
    columns: ColumnDef<TData, unknown>[];
    data: TData[];
    getRowId?: (row: TData) => string;
    sorting?: SortingState;
    onSortingChange?: OnChangeFn<SortingState>;
    enableSorting?: boolean;
    enableURLSort?: boolean;
    totalCount?: number;
    pageSize?: number;
    currentPage?: number;
    onPageChange?: (page: number) => void;
    enableURLPagination?: boolean;
    enableRowSelection?: boolean | ((row: Row<TData>) => boolean);
    selectedRowKeys?: string[];
    onRowSelect?: (keys: string[], rows: TData[]) => void;
    bulkSelectAllRowsProps?: BulkSelectAllRowsProps;
    enableColumnResize?: boolean;
    enableColumnFreeze?: boolean;
    columnPinning?: ColumnPinningState;
    onColumnPinningChange?: OnChangeFn<ColumnPinningState>;
    localStorageKeyPrefix?: string;
    columnVisibility?: VisibilityState;
    onColumnVisibilityChange?: OnChangeFn<VisibilityState>;
    onColumnHide?: (columnId: string) => void;
    enableColumnReorder?: boolean;
    columnOrder?: ColumnOrderState;
    onColumnOrderChange?: OnChangeFn<ColumnOrderState>;
    enableAddColumn?: boolean;
    onColumnAdd?: (position: number) => void;
    onColumnDelete?: (columnId: string) => void;
    onColumnUpdate?: (columns: ColumnDef<TData, unknown>[]) => 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;
}
