import { sortItems } from '@veno-ui/utils';
import type { PropType } from 'vue';
export type DataIteratorSortFunction = <T, K extends keyof T>(items: T[], sortBy: string[], sortDesc: boolean[], locale: string, customSorters?: Record<K, (a: T[K], b: T[K]) => number>) => T[];
interface DataIteratorProps {
    remote: boolean;
    items: Record<string, any>[];
    mustSort: boolean;
    multiSort: boolean;
    sortBy: string | string[];
    sortDesc: boolean | boolean[];
    customSort: DataIteratorSortFunction;
    locale: string;
    pagination?: PaginationProps;
    'onUpdate:pagination': ((val: PaginationProps) => void) | undefined;
    'onUpdate:sortBy': ((val: string | string[]) => void) | undefined;
    'onUpdate:sortDesc': ((val: boolean | boolean[]) => void) | undefined;
}
export type PaginationProps = Partial<typeof defaultPagination>;
declare const defaultPagination: {
    page: number;
    perPage: number;
    perPageOptions: number[];
    total: number;
    totalVisible: number;
    showQuickJumper: boolean;
    showPerPageSelect: boolean;
};
export declare const makeDataIteratorProps: <Defaults extends {
    remote?: unknown;
    items?: unknown;
    mustSort?: unknown;
    multiSort?: unknown;
    sortBy?: unknown;
    sortDesc?: unknown;
    customSort?: unknown;
    locale?: unknown;
    pagination?: unknown;
} = {}>(defaults?: Defaults | undefined) => {
    remote: unknown extends Defaults["remote"] ? BooleanConstructor : {
        type: PropType<unknown extends Defaults["remote"] ? boolean : boolean | Defaults["remote"]>;
        default: unknown extends Defaults["remote"] ? boolean : boolean | Defaults["remote"];
    };
    items: unknown extends Defaults["items"] ? {
        type: PropType<Record<string, any>[]>;
        default: () => never[];
    } : Omit<{
        type: PropType<Record<string, any>[]>;
        default: () => never[];
    }, "type" | "default"> & {
        type: PropType<unknown extends Defaults["items"] ? Record<string, any>[] : Record<string, any>[] | Defaults["items"]>;
        default: unknown extends Defaults["items"] ? Record<string, any>[] : Record<string, any>[] | Defaults["items"];
    };
    mustSort: unknown extends Defaults["mustSort"] ? BooleanConstructor : {
        type: PropType<unknown extends Defaults["mustSort"] ? boolean : boolean | Defaults["mustSort"]>;
        default: unknown extends Defaults["mustSort"] ? boolean : boolean | Defaults["mustSort"];
    };
    multiSort: unknown extends Defaults["multiSort"] ? BooleanConstructor : {
        type: PropType<unknown extends Defaults["multiSort"] ? boolean : boolean | Defaults["multiSort"]>;
        default: unknown extends Defaults["multiSort"] ? boolean : boolean | Defaults["multiSort"];
    };
    sortBy: unknown extends Defaults["sortBy"] ? {
        type: PropType<string | string[]>;
        default: () => never[];
    } : Omit<{
        type: PropType<string | string[]>;
        default: () => never[];
    }, "type" | "default"> & {
        type: PropType<unknown extends Defaults["sortBy"] ? string | string[] : NonNullable<string | string[]> | Defaults["sortBy"]>;
        default: unknown extends Defaults["sortBy"] ? string | string[] : NonNullable<string | string[]> | Defaults["sortBy"];
    };
    sortDesc: unknown extends Defaults["sortDesc"] ? {
        type: PropType<boolean | boolean[]>;
        default: () => never[];
    } : Omit<{
        type: PropType<boolean | boolean[]>;
        default: () => never[];
    }, "type" | "default"> & {
        type: PropType<unknown extends Defaults["sortDesc"] ? boolean | boolean[] : Defaults["sortDesc"] | NonNullable<boolean | boolean[]>>;
        default: unknown extends Defaults["sortDesc"] ? boolean | boolean[] : Defaults["sortDesc"] | NonNullable<boolean | boolean[]>;
    };
    customSort: unknown extends Defaults["customSort"] ? {
        type: PropType<DataIteratorSortFunction>;
        default: typeof sortItems;
    } : Omit<{
        type: PropType<DataIteratorSortFunction>;
        default: typeof sortItems;
    }, "type" | "default"> & {
        type: PropType<unknown extends Defaults["customSort"] ? DataIteratorSortFunction : DataIteratorSortFunction | Defaults["customSort"]>;
        default: unknown extends Defaults["customSort"] ? DataIteratorSortFunction : DataIteratorSortFunction | Defaults["customSort"];
    };
    locale: unknown extends Defaults["locale"] ? {
        type: StringConstructor;
        default: string;
    } : Omit<{
        type: StringConstructor;
        default: string;
    }, "type" | "default"> & {
        type: PropType<unknown extends Defaults["locale"] ? string : string | Defaults["locale"]>;
        default: unknown extends Defaults["locale"] ? string : string | Defaults["locale"];
    };
    pagination: unknown extends Defaults["pagination"] ? {
        type: PropType<Partial<{
            page: number;
            perPage: number;
            perPageOptions: number[];
            total: number;
            totalVisible: number;
            showQuickJumper: boolean;
            showPerPageSelect: boolean;
        }>>;
        defualt: () => {
            page: number;
            perPage: number;
            perPageOptions: number[];
            total: number;
            totalVisible: number;
            showQuickJumper: boolean;
            showPerPageSelect: boolean;
        };
    } : Omit<{
        type: PropType<Partial<{
            page: number;
            perPage: number;
            perPageOptions: number[];
            total: number;
            totalVisible: number;
            showQuickJumper: boolean;
            showPerPageSelect: boolean;
        }>>;
        defualt: () => {
            page: number;
            perPage: number;
            perPageOptions: number[];
            total: number;
            totalVisible: number;
            showQuickJumper: boolean;
            showPerPageSelect: boolean;
        };
    }, "type" | "default"> & {
        type: PropType<unknown extends Defaults["pagination"] ? Partial<{
            page: number;
            perPage: number;
            perPageOptions: number[];
            total: number;
            totalVisible: number;
            showQuickJumper: boolean;
            showPerPageSelect: boolean;
        }> : Partial<{
            page: number;
            perPage: number;
            perPageOptions: number[];
            total: number;
            totalVisible: number;
            showQuickJumper: boolean;
            showPerPageSelect: boolean;
        }> | Defaults["pagination"]>;
        default: unknown extends Defaults["pagination"] ? Partial<{
            page: number;
            perPage: number;
            perPageOptions: number[];
            total: number;
            totalVisible: number;
            showQuickJumper: boolean;
            showPerPageSelect: boolean;
        }> : Partial<{
            page: number;
            perPage: number;
            perPageOptions: number[];
            total: number;
            totalVisible: number;
            showQuickJumper: boolean;
            showPerPageSelect: boolean;
        }> | Defaults["pagination"];
    };
};
export declare function useDataIterator(props: DataIteratorProps): {
    items: import("vue").ComputedRef<Record<string, any>[]>;
    pagination: import("vue").WritableComputedRef<{
        page: number;
        perPage: number;
        total: number;
        perPageOptions: number[];
        totalVisible: number;
        showQuickJumper: boolean;
        showPerPageSelect: boolean;
    }>;
    sortBy: import("vue").WritableComputedRef<string | string[]>;
    sortDesc: import("vue").WritableComputedRef<boolean | boolean[]>;
    sort: (key: string | string[]) => void;
    updateOptions: () => void;
};
export {};
