export interface WaterfallItem {
    id: string | number;
    data: any;
    height?: number;
    width?: number;
}
export interface WaterfallTrack<T = any> {
    items: T[];
    size: number;
}
export interface WaterfallLayoutOptions {
    tracks: number;
    trackGap: number;
    itemGap: number;
    direction: 'vertical' | 'horizontal';
}
export interface WaterfallLayout<T = any> {
    tracks: WaterfallTrack<T>[];
    totalSize: number;
}
export declare const useWaterfall: <T extends {
    id: string | number;
    height?: number | undefined;
    width?: number | undefined;
}>(items: T[], options: WaterfallLayoutOptions) => {
    layout: WaterfallLayout<T>;
    registerItemRef: (id: string | number, element: HTMLElement | null) => void;
    measureItemSize: (id: string | number) => {
        width: number;
        height: number;
    };
    recalculateLayout: () => void;
};
export default useWaterfall;
