import { RowData, SortDescriptor, FilterDescriptor, SelectionModel, ExpandedState, PaginationState, EditingState, TableContextValue, FilterMatchMode, ColumnDef } from './types';

export declare const useTable: <TData extends RowData = RowData>() => TableContextValue<TData>;
export declare const useTableData: <TData extends RowData = RowData>(data: TData[], { sort, filters, globalFilter, groupBy, pagination, paginationMode, }: {
    sort: SortDescriptor[];
    filters: FilterDescriptor[];
    globalFilter: string;
    groupBy: string[];
    pagination: PaginationState;
    paginationMode: "client" | "server";
}) => {
    processedData: TData[];
    paginatedData: TData[];
    totalCount: number;
};
export declare const useTableSelection: <TData extends RowData = RowData>(data: TData[], getRowId: (row: TData, index: number) => string | number, isRowSelectable?: (row: TData) => boolean) => {
    selectedRows: SelectionModel;
    setSelectedRows: import('react').Dispatch<import('react').SetStateAction<SelectionModel>>;
    toggleRowSelection: (rowId: string | number) => void;
    toggleAllRowsSelection: () => void;
};
export declare const useTableSort: (enableMultiSort?: boolean, maxMultiSortColCount?: number) => {
    sort: SortDescriptor[];
    setSort: import('react').Dispatch<import('react').SetStateAction<SortDescriptor[]>>;
    toggleSort: (columnId: string, multiSort?: boolean) => void;
};
export declare const useTableFilter: () => {
    filters: FilterDescriptor[];
    setFilters: import('react').Dispatch<import('react').SetStateAction<FilterDescriptor[]>>;
    globalFilter: string;
    setGlobalFilter: import('react').Dispatch<import('react').SetStateAction<string>>;
    setColumnFilter: (columnId: string, value: unknown, matchMode?: FilterMatchMode) => void;
    clearFilters: () => void;
};
export declare const useTablePagination: (totalCount: number, defaultPageSize?: number) => {
    pagination: PaginationState;
    setPagination: import('react').Dispatch<import('react').SetStateAction<PaginationState>>;
    pageCount: number;
    canPreviousPage: boolean;
    canNextPage: boolean;
    previousPage: () => void;
    nextPage: () => void;
    gotoPage: (pageIndex: number) => void;
    setPageSize: (pageSize: number) => void;
};
export declare const useTableExpansion: () => {
    expandedRows: ExpandedState;
    setExpandedRows: import('react').Dispatch<import('react').SetStateAction<ExpandedState>>;
    toggleRowExpansion: (rowId: string | number) => void;
    expandAllRows: (rowIds: (string | number)[]) => void;
    collapseAllRows: () => void;
};
export declare const useTableEditing: <TData extends RowData = RowData>(onEditCommit?: (rowId: string | number, columnId: string, value: unknown, row: TData) => void | Promise<void>, onEditCancel?: (rowId: string | number, columnId: string) => void) => {
    editingCell: EditingState | null;
    setEditingCell: import('react').Dispatch<import('react').SetStateAction<EditingState | null>>;
    startEditing: (rowId: string | number, columnId: string, initialValue?: unknown) => void;
    commitEdit: (value: unknown, row: TData) => Promise<void>;
    cancelEdit: () => void;
};
export declare const useTableKeyboardNavigation: <TData extends RowData = RowData>(tableRef: React.RefObject<HTMLTableElement>, { data, columns, getRowId, selectionMode, toggleRowSelection, expandedRows, toggleRowExpansion, editMode, startEditing, }: {
    data: TData[];
    columns: ColumnDef<TData>[];
    getRowId: (row: TData, index: number) => string | number;
    selectionMode: "none" | "single" | "multiple";
    toggleRowSelection: (rowId: string | number) => void;
    expandedRows: ExpandedState;
    toggleRowExpansion: (rowId: string | number) => void;
    editMode: "none" | "cell" | "row" | "inline";
    startEditing: (rowId: string | number, columnId: string) => void;
}) => {
    focusedCell: {
        rowIndex: number;
        columnIndex: number;
    } | null;
    setFocusedCell: import('react').Dispatch<import('react').SetStateAction<{
        rowIndex: number;
        columnIndex: number;
    } | null>>;
};
