import type { LayoutMeasurements } from './types.js';
interface ResizeObserverLike {
    observe(target: Element): void;
    disconnect(): void;
}
interface VisualViewportLike {
    readonly height: number;
    addEventListener(type: 'resize', listener: (event: Event) => void): void;
    removeEventListener(type: 'resize', listener: (event: Event) => void): void;
}
export interface LayoutObservationOptions {
    viewport: HTMLElement;
    content: HTMLElement;
    onChange(measurements: LayoutMeasurements): void;
    getSafeArea?: () => {
        top: number;
        bottom: number;
    };
    visualViewport?: VisualViewportLike | null;
    createResizeObserver?: (callback: () => void) => ResizeObserverLike | null;
}
export interface LayoutObservation {
    measure(): void;
    dispose(): void;
}
export declare function observeLayout({ viewport, content, onChange, getSafeArea, visualViewport, createResizeObserver, }: LayoutObservationOptions): LayoutObservation;
export {};
