import { DropTargetDelegate, Node } from '@react-types/shared';
import { Layout } from 'react-stately/private/virtualizer/Layout';
import { JSX, ReactNode } from 'react';
export interface LayoutOptionsDelegate<O> {
    useLayoutOptions?(): O;
}
interface ILayout<O> extends Layout<Node<unknown>, O>, Partial<DropTargetDelegate>, LayoutOptionsDelegate<O> {
}
interface LayoutClass<O> {
    new (): ILayout<O>;
}
export interface VirtualizerProps<O> {
    /** The child collection to virtualize (e.g. ListBox, GridList, or Table). */
    children: ReactNode;
    /** The layout object that determines the position and size of the visible elements. */
    layout: LayoutClass<O> | ILayout<O>;
    /** Options for the layout. */
    layoutOptions?: O;
}
/**
 * A Virtualizer renders a scrollable collection of data using customizable layouts.
 * It supports very large collections by only rendering visible items to the DOM, reusing
 * them as the user scrolls.
 */
export declare function Virtualizer<O>(props: VirtualizerProps<O>): JSX.Element;
export {};
