import { ColumnDef, InitialTableState, SortingState, ColumnFiltersState, PaginationState, VisibilityState, FilterFn, Table, Header, HeaderGroup, Row, Cell } from '@tanstack/react-table';
export { AccessorFn, Cell, CellContext, Column, ColumnDef, ColumnDefBase, ColumnFilter, ColumnFiltersState, ColumnHelper, ColumnMeta, ColumnOrderState, ColumnSort, FilterFn, Header, HeaderContext, HeaderGroup, PaginationState, Row, SortingFn, SortingState, Table, VisibilityState, createColumnHelper, flexRender } from '@tanstack/react-table';
import * as react_jsx_runtime from 'react/jsx-runtime';
import { RankingInfo } from '@tanstack/match-sorter-utils';
import { FC, InputHTMLAttributes, Dispatch, SetStateAction, ReactNode } from 'react';

type FilterInputComponent = FC<InputHTMLAttributes<HTMLInputElement>>;
type FilterSelectComponent = FC<InputHTMLAttributes<HTMLSelectElement>>;
type Renderer = FC<{
    children: ReactNode;
}>;
interface UnstyledTableProps<TData extends any, TValue = any> {
    columns: ColumnDef<TData, TValue>[];
    data: TData[];
    initialState?: InitialTableState;
    defaultColumn?: Partial<ColumnDef<TData, unknown>>;
    state?: {
        sorting?: SortingState;
        columnFilters?: ColumnFiltersState;
        pagination?: PaginationState;
        columnVisibility?: VisibilityState;
        globalFilter?: string;
    };
    setSorting?: Dispatch<SetStateAction<SortingState>>;
    setColumnFilters?: Dispatch<SetStateAction<ColumnFiltersState>>;
    setPagination?: Dispatch<SetStateAction<PaginationState>>;
    setColumnVisibility?: Dispatch<SetStateAction<VisibilityState>>;
    setGlobalFilter?: Dispatch<SetStateAction<string>>;
    manualSorting?: boolean;
    manualFiltering?: boolean;
    manualPagination?: boolean;
    disableGlobalFilter?: boolean;
    disableColumnVisibility?: boolean;
    pageCount?: number;
    showFooter?: boolean;
    hidePagination?: boolean;
    debugAll?: boolean;
    debugTable?: boolean;
    debugColumns?: boolean;
    debugRows?: boolean;
    debugHeaders?: boolean;
    components?: {
        table?: Renderer;
        header?: Renderer;
        headerRow?: Renderer;
        headerCell?: Renderer;
        body?: Renderer;
        bodyRow?: Renderer;
        bodyCell?: Renderer;
        footer?: Renderer;
        footerRow?: Renderer;
        footerCell?: Renderer;
        empty?: Renderer;
        loading?: Renderer;
        pagination?: FC;
        filterInput?: FilterInputComponent;
        filterSelect?: FilterSelectComponent;
    };
}

declare module '@tanstack/table-core' {
    interface FilterFns {
        fuzzy: FilterFn<unknown>;
    }
    interface FilterMeta {
        itemRank: RankingInfo;
    }
}
declare const UnstyledTable: <TData, TValue = any>({ components, ...props }: UnstyledTableProps<TData, TValue>) => react_jsx_runtime.JSX.Element;

declare function useTable<T extends unknown>(): Table<T>;

declare function useHeader<T extends unknown, U = unknown>(): Header<T, U>;

declare function useHeaderGroup<T extends unknown>(): HeaderGroup<T>;

declare function useRow<T extends unknown>(): Row<T>;

declare function useCell<T extends unknown, U = unknown>(): Cell<T, U>;

export { FilterInputComponent, FilterSelectComponent, UnstyledTable, UnstyledTableProps, useCell, useHeader, useHeaderGroup, useRow, useTable };
