import type { SortingState, OnChangeFn, VisibilityState } from "@tanstack/react-table";
import { z } from "zod";
import { type FilterValue } from "./types";
declare const ZActiveFilter: z.ZodObject<{
    f: z.ZodString;
    v: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
        type: z.ZodLiteral<import("./types").ColumnFilterType.SINGLE_SELECT>;
        data: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
    }, "strip", z.ZodTypeAny, {
        data: string | number;
        type: import("./types").ColumnFilterType.SINGLE_SELECT;
    }, {
        data: string | number;
        type: import("./types").ColumnFilterType.SINGLE_SELECT;
    }>, z.ZodObject<{
        type: z.ZodLiteral<import("./types").ColumnFilterType.MULTI_SELECT>;
        data: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
    }, "strip", z.ZodTypeAny, {
        data: (string | number)[];
        type: import("./types").ColumnFilterType.MULTI_SELECT;
    }, {
        data: (string | number)[];
        type: import("./types").ColumnFilterType.MULTI_SELECT;
    }>, z.ZodObject<{
        type: z.ZodLiteral<import("./types").ColumnFilterType.TEXT>;
        data: z.ZodObject<{
            operator: z.ZodEnum<["equals", "notEquals", "contains", "notContains", "startsWith", "endsWith", "isEmpty", "isNotEmpty"]>;
            operand: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            operator: "endsWith" | "startsWith" | "equals" | "contains" | "notEquals" | "notContains" | "isEmpty" | "isNotEmpty";
            operand: string;
        }, {
            operator: "endsWith" | "startsWith" | "equals" | "contains" | "notEquals" | "notContains" | "isEmpty" | "isNotEmpty";
            operand: string;
        }>;
    }, "strip", z.ZodTypeAny, {
        data: {
            operator: "endsWith" | "startsWith" | "equals" | "contains" | "notEquals" | "notContains" | "isEmpty" | "isNotEmpty";
            operand: string;
        };
        type: import("./types").ColumnFilterType.TEXT;
    }, {
        data: {
            operator: "endsWith" | "startsWith" | "equals" | "contains" | "notEquals" | "notContains" | "isEmpty" | "isNotEmpty";
            operand: string;
        };
        type: import("./types").ColumnFilterType.TEXT;
    }>, z.ZodObject<{
        type: z.ZodLiteral<import("./types").ColumnFilterType.NUMBER>;
        data: z.ZodObject<{
            operator: z.ZodEnum<["eq", "neq", "gt", "gte", "lt", "lte"]>;
            operand: z.ZodNumber;
        }, "strip", z.ZodTypeAny, {
            operator: "lt" | "lte" | "gt" | "gte" | "eq" | "neq";
            operand: number;
        }, {
            operator: "lt" | "lte" | "gt" | "gte" | "eq" | "neq";
            operand: number;
        }>;
    }, "strip", z.ZodTypeAny, {
        data: {
            operator: "lt" | "lte" | "gt" | "gte" | "eq" | "neq";
            operand: number;
        };
        type: import("./types").ColumnFilterType.NUMBER;
    }, {
        data: {
            operator: "lt" | "lte" | "gt" | "gte" | "eq" | "neq";
            operand: number;
        };
        type: import("./types").ColumnFilterType.NUMBER;
    }>, z.ZodObject<{
        type: z.ZodLiteral<import("./types").ColumnFilterType.DATE_RANGE>;
        data: z.ZodObject<{
            startDate: z.ZodNullable<z.ZodString>;
            endDate: z.ZodNullable<z.ZodString>;
            preset: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            preset: string;
            startDate: string | null;
            endDate: string | null;
        }, {
            preset: string;
            startDate: string | null;
            endDate: string | null;
        }>;
    }, "strip", z.ZodTypeAny, {
        data: {
            preset: string;
            startDate: string | null;
            endDate: string | null;
        };
        type: import("./types").ColumnFilterType.DATE_RANGE;
    }, {
        data: {
            preset: string;
            startDate: string | null;
            endDate: string | null;
        };
        type: import("./types").ColumnFilterType.DATE_RANGE;
    }>]>>;
}, "strip", z.ZodTypeAny, {
    f: string;
    v?: {
        data: string | number;
        type: import("./types").ColumnFilterType.SINGLE_SELECT;
    } | {
        data: (string | number)[];
        type: import("./types").ColumnFilterType.MULTI_SELECT;
    } | {
        data: {
            operator: "endsWith" | "startsWith" | "equals" | "contains" | "notEquals" | "notContains" | "isEmpty" | "isNotEmpty";
            operand: string;
        };
        type: import("./types").ColumnFilterType.TEXT;
    } | {
        data: {
            operator: "lt" | "lte" | "gt" | "gte" | "eq" | "neq";
            operand: number;
        };
        type: import("./types").ColumnFilterType.NUMBER;
    } | {
        data: {
            preset: string;
            startDate: string | null;
            endDate: string | null;
        };
        type: import("./types").ColumnFilterType.DATE_RANGE;
    } | undefined;
}, {
    f: string;
    v?: {
        data: string | number;
        type: import("./types").ColumnFilterType.SINGLE_SELECT;
    } | {
        data: (string | number)[];
        type: import("./types").ColumnFilterType.MULTI_SELECT;
    } | {
        data: {
            operator: "endsWith" | "startsWith" | "equals" | "contains" | "notEquals" | "notContains" | "isEmpty" | "isNotEmpty";
            operand: string;
        };
        type: import("./types").ColumnFilterType.TEXT;
    } | {
        data: {
            operator: "lt" | "lte" | "gt" | "gte" | "eq" | "neq";
            operand: number;
        };
        type: import("./types").ColumnFilterType.NUMBER;
    } | {
        data: {
            preset: string;
            startDate: string | null;
            endDate: string | null;
        };
        type: import("./types").ColumnFilterType.DATE_RANGE;
    } | undefined;
}>;
type ActiveFilter = z.infer<typeof ZActiveFilter>;
export type DataTableContextType = {
    activeFilters: ActiveFilter[];
    clearAll: (exclude?: string[]) => void;
    addFilter: (columnId: string) => void;
    updateFilter: (columnId: string, value: FilterValue) => void;
    removeFilter: (columnId: string) => void;
    sorting: SortingState;
    setSorting: OnChangeFn<SortingState>;
    columnVisibility: VisibilityState;
    setColumnVisibility: OnChangeFn<VisibilityState>;
    pageIndex: number;
    pageSize: number;
    setPageIndex: (pageIndex: number) => void;
    setPageSize: (pageSize: number) => void;
    offset: number;
    limit: number;
};
export declare const DataTableContext: import("react").Context<DataTableContextType | null>;
interface DataTableProviderProps {
    children: React.ReactNode;
    defaultPageSize?: number;
}
export declare function DataTableProvider({ children, defaultPageSize }: DataTableProviderProps): JSX.Element;
export {};
//# sourceMappingURL=context.d.ts.map