import { useCache } from '../hooks/use-cache';
import { BACKWARD, FORWARD } from '../defaults';
import type { VNode, Ref, UnwrapRef } from 'vue';
import type { StyleValue } from 'hongluan-ui/es/utils';
import type { Alignment, GridConstructorProps, GridScrollOptions } from '../types';
import type { VirtualizedGridProps } from '../props';
declare const createGrid: ({ name, clearCache, getColumnPosition, getColumnStartIndexForOffset, getColumnStopIndexForStartIndex, getEstimatedTotalHeight, getEstimatedTotalWidth, getColumnOffset, getRowOffset, getRowPosition, getRowStartIndexForOffset, getRowStopIndexForStartIndex, initCache, injectToInstance, validateProps, }: GridConstructorProps<VirtualizedGridProps>) => import("vue").DefineComponent<{
    className: {
        type: (ObjectConstructor | StringConstructor | ArrayConstructor)[];
        default: string;
    };
    containerElement: {
        type: (ObjectConstructor | StringConstructor)[];
        default: string;
    };
    containerProps: {
        type: import("vue").PropType<import("hongluan-ui/es/utils").Indexable<any>>;
        default: () => {};
    };
    data: {
        type: import("vue").PropType<any[]>;
        default: () => any[];
    };
    direction: {
        type: import("vue").PropType<import("../types").Direction>;
        default: string;
        validator: (val: import("../types").Direction) => boolean;
    };
    height: {
        readonly type: import("vue").PropType<import("hongluan-ui/es/utils").EpPropMergeType<(StringConstructor | NumberConstructor)[], never, never>>;
        readonly required: true;
        readonly validator: (val: unknown) => boolean;
        __epPropKey: true;
    };
    innerElement: {
        type: (ObjectConstructor | StringConstructor)[];
        default: string;
    };
    innerElementProps: {
        type: import("vue").PropType<import("hongluan-ui/es/utils").Indexable<any>>;
        default: () => {};
    };
    style: {
        type: import("vue").PropType<StyleValue>;
    };
    useIsScrolling: {
        type: BooleanConstructor;
        default: boolean;
    };
    width: {
        readonly type: import("vue").PropType<import("hongluan-ui/es/utils").EpPropMergeType<(StringConstructor | NumberConstructor)[], never, never>>;
        readonly required: false;
        readonly validator: (val: unknown) => boolean;
        __epPropKey: true;
    };
    perfMode: {
        type: BooleanConstructor;
        default: boolean;
    };
    scrollbarAlwaysOn: {
        type: BooleanConstructor;
        default: boolean;
    };
    columnCache: {
        type: import("vue").PropType<number>;
        default: number;
    };
    columnWidth: {
        type: import("vue").PropType<number | import("../types").ItemSize>;
        required: boolean;
    };
    estimatedColumnWidth: {
        type: import("vue").PropType<number>;
    };
    estimatedRowHeight: {
        type: import("vue").PropType<number>;
    };
    initScrollLeft: {
        type: NumberConstructor;
        default: number;
    };
    initScrollTop: {
        type: NumberConstructor;
        default: number;
    };
    itemKey: {
        type: import("vue").PropType<import("../types").GridItemKeyGetter>;
        default: ({ columnIndex, rowIndex, }: {
            columnIndex: number;
            rowIndex: number;
        }) => string;
    };
    rowCache: {
        type: import("vue").PropType<number>;
        default: number;
    };
    rowHeight: {
        type: import("vue").PropType<number | import("../types").ItemSize>;
        required: boolean;
    };
    totalColumn: {
        readonly type: import("vue").PropType<number>;
        readonly required: true;
        readonly validator: (val: unknown) => boolean;
        __epPropKey: true;
    };
    totalRow: {
        readonly type: import("vue").PropType<number>;
        readonly required: true;
        readonly validator: (val: unknown) => boolean;
        __epPropKey: true;
    };
    hScrollbarSize: {
        readonly type: NumberConstructor;
        readonly default: 6;
    };
    vScrollbarSize: {
        readonly type: NumberConstructor;
        readonly default: 6;
    };
    scrollbarStartGap: {
        readonly type: NumberConstructor;
        readonly default: 0;
    };
    scrollbarEndGap: {
        readonly type: NumberConstructor;
        readonly default: 2;
    };
    role: StringConstructor;
}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
    [key: string]: any;
}>, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("scroll" | "itemRendered")[], "scroll" | "itemRendered", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
    className: {
        type: (ObjectConstructor | StringConstructor | ArrayConstructor)[];
        default: string;
    };
    containerElement: {
        type: (ObjectConstructor | StringConstructor)[];
        default: string;
    };
    containerProps: {
        type: import("vue").PropType<import("hongluan-ui/es/utils").Indexable<any>>;
        default: () => {};
    };
    data: {
        type: import("vue").PropType<any[]>;
        default: () => any[];
    };
    direction: {
        type: import("vue").PropType<import("../types").Direction>;
        default: string;
        validator: (val: import("../types").Direction) => boolean;
    };
    height: {
        readonly type: import("vue").PropType<import("hongluan-ui/es/utils").EpPropMergeType<(StringConstructor | NumberConstructor)[], never, never>>;
        readonly required: true;
        readonly validator: (val: unknown) => boolean;
        __epPropKey: true;
    };
    innerElement: {
        type: (ObjectConstructor | StringConstructor)[];
        default: string;
    };
    innerElementProps: {
        type: import("vue").PropType<import("hongluan-ui/es/utils").Indexable<any>>;
        default: () => {};
    };
    style: {
        type: import("vue").PropType<StyleValue>;
    };
    useIsScrolling: {
        type: BooleanConstructor;
        default: boolean;
    };
    width: {
        readonly type: import("vue").PropType<import("hongluan-ui/es/utils").EpPropMergeType<(StringConstructor | NumberConstructor)[], never, never>>;
        readonly required: false;
        readonly validator: (val: unknown) => boolean;
        __epPropKey: true;
    };
    perfMode: {
        type: BooleanConstructor;
        default: boolean;
    };
    scrollbarAlwaysOn: {
        type: BooleanConstructor;
        default: boolean;
    };
    columnCache: {
        type: import("vue").PropType<number>;
        default: number;
    };
    columnWidth: {
        type: import("vue").PropType<number | import("../types").ItemSize>;
        required: boolean;
    };
    estimatedColumnWidth: {
        type: import("vue").PropType<number>;
    };
    estimatedRowHeight: {
        type: import("vue").PropType<number>;
    };
    initScrollLeft: {
        type: NumberConstructor;
        default: number;
    };
    initScrollTop: {
        type: NumberConstructor;
        default: number;
    };
    itemKey: {
        type: import("vue").PropType<import("../types").GridItemKeyGetter>;
        default: ({ columnIndex, rowIndex, }: {
            columnIndex: number;
            rowIndex: number;
        }) => string;
    };
    rowCache: {
        type: import("vue").PropType<number>;
        default: number;
    };
    rowHeight: {
        type: import("vue").PropType<number | import("../types").ItemSize>;
        required: boolean;
    };
    totalColumn: {
        readonly type: import("vue").PropType<number>;
        readonly required: true;
        readonly validator: (val: unknown) => boolean;
        __epPropKey: true;
    };
    totalRow: {
        readonly type: import("vue").PropType<number>;
        readonly required: true;
        readonly validator: (val: unknown) => boolean;
        __epPropKey: true;
    };
    hScrollbarSize: {
        readonly type: NumberConstructor;
        readonly default: 6;
    };
    vScrollbarSize: {
        readonly type: NumberConstructor;
        readonly default: 6;
    };
    scrollbarStartGap: {
        readonly type: NumberConstructor;
        readonly default: 0;
    };
    scrollbarEndGap: {
        readonly type: NumberConstructor;
        readonly default: 2;
    };
    role: StringConstructor;
}>> & {
    onScroll?: (...args: any[]) => any;
    onItemRendered?: (...args: any[]) => any;
}, {
    data: any[];
    className: string | Record<string, any> | unknown[];
    direction: import("../types").Direction;
    scrollbarAlwaysOn: boolean;
    useIsScrolling: boolean;
    scrollbarStartGap: number;
    scrollbarEndGap: number;
    hScrollbarSize: number;
    vScrollbarSize: number;
    perfMode: boolean;
    containerElement: string | Record<string, any>;
    containerProps: {};
    innerElement: string | Record<string, any>;
    innerElementProps: {};
    columnCache: number;
    initScrollLeft: number;
    initScrollTop: number;
    itemKey: import("../types").GridItemKeyGetter;
    rowCache: number;
}>;
export default createGrid;
declare type Dir = typeof FORWARD | typeof BACKWARD;
export declare type GridInstance = InstanceType<ReturnType<typeof createGrid>> & UnwrapRef<{
    windowRef: Ref<HTMLElement>;
    innerRef: Ref<HTMLElement>;
    getItemStyleCache: ReturnType<typeof useCache>;
    scrollTo: (scrollOptions: GridScrollOptions) => void;
    scrollToItem: (rowIndex: number, columnIndex: number, alignment: Alignment) => void;
    states: Ref<{
        isScrolling: boolean;
        scrollLeft: number;
        scrollTop: number;
        updateRequested: boolean;
        xAxisScrollDir: Dir;
        yAxisScrollDir: Dir;
    }>;
}>;
