/// <reference types="react" />
import { TablePaginationProps } from 'types';
export interface SingleSortIconProps {
    columnName: string;
    sortable: boolean;
    onClick: () => void;
    currentHeadCell: string;
    sort: '' | 'asc' | 'desc';
}
export interface MaltiSortIconProps {
    columnName: string;
    sortable: boolean;
    onClick: () => void;
    sort: Record<string, 'asc' | 'desc' | ''>;
}
export interface TaskTableProps {
    columns: TableColoumn[];
    setColumns: (columns: TableColoumn[]) => void;
    data: TableData;
    setData: (data: TableRow) => void;
    selectable?: boolean;
    expandable?: boolean;
    expandComponent: React.ComponentType<{
        rowData: TableRow;
    }>;
    resizable?: boolean;
    selectedRows: Set<number>;
    setSelectedRows: (rows: Set<number>) => void;
    isDragAndDropEnabled?: boolean;
    paginationOptions?: TablePaginationProps;
    sort?: '' | 'asc' | 'desc' | Record<string, '' | 'asc' | 'desc'>;
    setSort?: React.Dispatch<React.SetStateAction<'' | 'asc' | 'desc' | Record<string, '' | 'asc' | 'desc'>>>;
    currentHeadCell?: string;
    setCurrentHeadCell?: React.Dispatch<React.SetStateAction<string>>;
    maltiSort: boolean;
}
export interface setSingleSortProps {
    headCell: {
        id: string;
    };
    currentHeadCell: string;
    setCurrentHeadCell: (value: string) => void;
    sort: '' | 'asc' | 'desc';
    setSort: (value: '' | 'asc' | 'desc') => void;
}
export interface setMaltiSortProps {
    headCell: {
        id: string;
    };
    sort: Record<string, 'asc' | 'desc' | ''>;
    setSort: (value: Record<string, 'asc' | 'desc' | ''>) => void;
}
export type HeaderType = {
    getResizeHandler: () => (event: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>) => void;
    column: {
        getIsResizing: () => boolean;
        id: string;
    };
};
export interface ResizableColumnProps {
    header: HeaderType;
    resizable: boolean;
}
export interface SortableHeaderProps {
    header: HeaderType;
    currentHeadCell: string;
    setCurrentHeadCell: (value: string) => void;
    sort: '' | 'asc' | 'desc' | Record<string, '' | 'asc' | 'desc'>;
    setSort: (value: '' | 'asc' | 'desc' | Record<string, '' | 'asc' | 'desc'>) => void;
    sortable: boolean;
    maltiSort: boolean;
}
export interface DraggableColumnProps {
    index: number;
    moveColumn: (fromIndex: number, toIndex: number) => void;
    children: React.ReactNode;
    isDragAndDropEnabled: boolean;
    header: HeaderType;
    resizable: boolean;
    currentHeadCell?: string;
    setCurrentHeadCell?: (value: string) => void;
    sortable: boolean;
    sort?: '' | 'asc' | 'desc' | Record<string, '' | 'asc' | 'desc'>;
    setSort?: (value: '' | 'asc' | 'desc' | Record<string, '' | 'asc' | 'desc'>) => void;
    maltiSort: boolean;
}
type CellProps = {
    getValue: () => void;
    row: {
        original: Record<string, string | number | boolean | Record<string, string | number | boolean>>;
    };
};
export type TableColoumn = {
    accessorKey: string | number;
    header: string;
    cell: (props: CellProps) => React.ReactNode;
    size?: number;
    sortable?: boolean;
    [key: string]: string | boolean | number | object | undefined;
};
export type TableRow = Record<string, string | number | boolean | Object | Record<string, string | number | boolean | Object>> | any;
export type TableData = TableRow[] | any;
export interface SelectAllRowsProps {
    selectable: boolean;
    data: TableData;
    selectedRows: Set<number>;
    setSelectedRows: (rows: TableData) => void;
}
export interface SelectRowProps {
    rowIndex: number;
    selectable: boolean;
    selectedRows: Set<number>;
    setSelectedRows: (rows: TableData) => void;
}
export type Column = {
    accessorKey: string;
    header: string;
    cell: (props: {
        getValue: () => void;
    }) => React.ReactNode;
};
export interface ExpandableSectionProps<TData extends {
    id: string;
}> {
    expandedRows: Set<string>;
    selectable: boolean;
    columns: TableColoumn[];
    expandable: boolean;
    row: TData;
    ExpandComponent: React.ComponentType<{
        rowData: TData;
    }>;
}
export {};
