import { TableState, Column, SortDirection, ColumnResizeInfoState, ServerSideConfig, TableEventMap } from './types.mjs';

interface UseTableContextOptions<T extends Record<string, unknown>> {
    data: T[];
    columns: Column<T>[];
    initialState?: Partial<TableState<T>>;
    onStateChange?: (state: TableState<T>) => void;
    events?: Partial<TableEventMap<T>>;
    columnResizeMode?: "onChange" | "onResize";
    columnResizeDirection?: "ltr" | "rtl";
    debounceMs?: number;
    isLoading?: boolean;
    serverSide?: ServerSideConfig<T>;
}
/**
 * Main hook for table functionality
 * Combines state and event management
 */
declare function useTableContext<T extends Record<string, unknown>>({ data, columns, initialState, onStateChange, events, columnResizeMode, columnResizeDirection, debounceMs, isLoading, serverSide, }: UseTableContextOptions<T>): {
    state: TableState<T>;
    columns: Column<T>[];
    data: T[];
    filteredData: T[];
    visibleColumns: (keyof T)[];
    toggleColumnVisibility: (columnId: keyof T, isVisible: boolean) => void;
    pinnedColumns: {
        left: (keyof T)[];
        right: (keyof T)[];
    };
    toggleColumnPin: (columnId: keyof T, position: "left" | "right" | false) => void;
    sortColumn: keyof T;
    sortDirection: SortDirection;
    handleSort: (column: Column<T>) => void;
    filterValue: string;
    setFilterValue: (value: string) => void;
    columnSizing: {
        columnSizes: {
            [key: string]: number;
        };
    };
    columnResizeInfo: ColumnResizeInfoState;
    columnResizeMode: "onChange" | "onResize";
    columnResizeDirection: "ltr" | "rtl";
    handleColumnResize: (columnId: keyof T, width: number) => void;
    handleColumnResizeStart: (columnId: string, startX: number) => void;
    handleColumnResizeMove: (currentX: number) => void;
    handleColumnResizeEnd: () => void;
    updateColumnSizing: (columnId: string, width: number) => void;
    handleRowSelect: (row: T, index: number) => void;
    resetState: () => void;
    setData: (newData: T[]) => void;
    handleStateChange: (newState: TableState<T>) => void;
    serverSide: ServerSideConfig<T> | undefined;
};
declare const useTableGrid: typeof useTableContext;

export { useTableGrid as u };
