import { ComputedRef, CSSProperties, MaybeRefOrGetter, Ref } from 'vue';
import { CacheSnapshot, DefaultKeyField, ItemKey, ItemSizeValue, KeyFieldValue, ScrollDirection, ScrollState, ScrollToOptions, Sizes, ValidKeyField, ValidSizeField, View } from '../types';
import { ScrollerCallbacks, ScrollerOptionCallbacks, ScrollerOptionElements, ScrollerOptionEnabled } from './scrollerOptions';
export interface UseRecycleScrollerOptions<TItem = unknown, TSizeField extends string = 'size'> extends ScrollerOptionElements, ScrollerOptionCallbacks, ScrollerOptionEnabled {
    items: MaybeRefOrGetter<TItem[]>;
    keyField: KeyFieldValue<TItem>;
    direction?: ScrollDirection;
    itemSize: ItemSizeValue<TItem>;
    gridItems?: number;
    itemSecondarySize?: number;
    minItemSize: number | string | null;
    sizeField?: ValidSizeField<TItem, TSizeField>;
    typeField: string;
    buffer: number;
    pageMode: boolean;
    shift?: boolean;
    cache?: CacheSnapshot;
    prerender: number;
    emitUpdate: boolean;
    disableTransform?: boolean;
    flowMode?: boolean;
    /**
     * Park recycled hidden views at custom main-axis position.
     */
    hiddenPosition?: number;
    updateInterval: number;
}
export interface UseRecycleScrollerReturn<TItem = unknown, TKey = ItemKey<TItem>> {
    pool: Ref<Array<View<TItem, TKey>>>;
    visiblePool: ComputedRef<Array<View<TItem, TKey>>>;
    totalSize: Ref<number>;
    startSpacerSize: Ref<number>;
    endSpacerSize: Ref<number>;
    ready: Ref<boolean>;
    sizes: ComputedRef<Sizes | never[]>;
    simpleArray: ComputedRef<boolean>;
    scrollToItem: (index: number, options?: ScrollToOptions) => void;
    scrollToPosition: (position: number, options?: ScrollToOptions) => void;
    getScroll: () => ScrollState;
    findItemIndex: (offset: number) => number;
    getItemOffset: (index: number) => number;
    getItemSize: (index: number) => number;
    getViewStyle: (view: View<TItem, TKey>) => CSSProperties;
    cacheSnapshot: ComputedRef<CacheSnapshot>;
    restoreCache: (snapshot: CacheSnapshot | null | undefined) => boolean;
    updateVisibleItems: (itemsChanged: boolean, checkPositionDiff?: boolean) => {
        continuous: boolean;
    };
    handleResize: () => void;
    handleVisibilityChange: (isVisible: boolean, entry: IntersectionObserverEntry) => void;
    sortViews: () => void;
}
type ResolvedRecycleScrollerItems<TOptions extends UseRecycleScrollerOptions<any, any>> = TOptions['items'] extends MaybeRefOrGetter<infer TItems extends any[]> ? TItems : never;
type InferredRecycleScrollerItem<TOptions extends UseRecycleScrollerOptions<any, any>> = ResolvedRecycleScrollerItems<TOptions>[number];
type InferredRecycleScrollerKeyField<TOptions extends UseRecycleScrollerOptions<any, any>> = Extract<TOptions['keyField'], KeyFieldValue<InferredRecycleScrollerItem<TOptions>>>;
export declare function useRecycleScroller<TItem, TKeyField extends KeyFieldValue<TItem> = DefaultKeyField<TItem>, TSizeField extends string = 'size'>(options: MaybeRefOrGetter<UseRecycleScrollerOptions<TItem, TSizeField> & {
    keyField: ValidKeyField<TItem, TKeyField>;
}>, el?: MaybeRefOrGetter<HTMLElement | undefined>, before?: MaybeRefOrGetter<HTMLElement | undefined>, after?: MaybeRefOrGetter<HTMLElement | undefined>, callbacks?: ScrollerCallbacks): UseRecycleScrollerReturn<TItem, ItemKey<TItem, TKeyField>>;
export declare function useRecycleScroller<TOptions extends UseRecycleScrollerOptions<any, any>>(options: MaybeRefOrGetter<TOptions>, el?: MaybeRefOrGetter<HTMLElement | undefined>, before?: MaybeRefOrGetter<HTMLElement | undefined>, after?: MaybeRefOrGetter<HTMLElement | undefined>, callbacks?: ScrollerCallbacks): UseRecycleScrollerReturn<InferredRecycleScrollerItem<TOptions>, ItemKey<InferredRecycleScrollerItem<TOptions>, InferredRecycleScrollerKeyField<TOptions>>>;
export {};
