type SectionBox = { index: number; elements: HTMLElement[]; }; /** How far each section shifts once `from` moves to `to`, keeping the original gaps between slots. */ export declare function getMovedSectionOffsets({ sections, from, to, }: { sections: readonly { index: number; top: number; bottom: number; }[]; from: number; to: number; }): Map; export type ViewportBox = { top: number; bottom: number; left: number; right: number; }; /** A section's on-screen box: the union of its connected elements, or null when it renders nothing visible. */ export declare function getSectionViewportBox(elements: readonly HTMLElement[] | undefined): ViewportBox | null; /** * Shows a dropped section in its new place before the source change reaches the preview, by * shifting sections with transforms instead of moving DOM nodes: React keeps positional children, * so nodes moved behind its back would get the wrong content when the refresh commits. The shift * clears itself the moment the preview's own DOM reflects the move (checked before paint), so the * page never shows the old order in between. */ export declare function startOptimisticSectionMove({ sections, from, to, onLanded, }: { sections: readonly SectionBox[]; from: number; to: number; onLanded: () => void; }): { revert: () => void; settle: () => void; }; export {};