import { ComputedRef, MaybeRefOrGetter } from 'vue';
import { KeyValue, ScrollDirection, VScrollData } from '../types';
import { DynamicScrollerMeasureQueue } from './dynamicScrollerMeasureQueue';
export interface DynamicScrollerUpdatePayload {
    force: boolean;
}
export interface DynamicScrollerMeasurementContext {
    vscrollData: VScrollData;
    resizeObserver: ResizeObserver | undefined;
    measureQueue: DynamicScrollerMeasureQueue;
    direction: ComputedRef<ScrollDirection>;
    undefinedMap: Record<string | number, boolean | undefined>;
    undefinedSizeCount: {
        value: number;
    };
    onVscrollUpdate: (callback: (payload: DynamicScrollerUpdatePayload) => void) => () => void;
}
export interface DynamicScrollerItemControllerOptions<TItem = unknown> {
    item: TItem;
    watchData: boolean;
    active: boolean;
    index?: number;
    /**
     * @deprecated `sizeDependencies` is a legacy fallback for environments without
     * `ResizeObserver` and will be removed in the next major release.
     */
    sizeDependencies?: Record<string, unknown> | unknown[] | null;
    emitResize: boolean;
}
export interface DynamicScrollerItemControllerCallbacks {
    onResize?: (id: KeyValue) => void;
}
export interface DynamicScrollerItemController {
    id: ComputedRef<KeyValue>;
    size: ComputedRef<number>;
    finalActive: ComputedRef<boolean>;
    updateSize: () => void;
    mount: () => void;
    unmount: () => void;
}
export declare function createDynamicScrollerItemController(options: MaybeRefOrGetter<DynamicScrollerItemControllerOptions<any>>, el: MaybeRefOrGetter<HTMLElement | undefined>, context: DynamicScrollerMeasurementContext, callbacks?: MaybeRefOrGetter<DynamicScrollerItemControllerCallbacks | undefined>): DynamicScrollerItemController;
