export interface ContentBounds { width: number; height: number; } type ContentBoundsMeasurement = (element: Element) => ContentBounds; /** * Measures the actual rendered bounds of a catalog root. Scroll metrics cover * tables and forms that overflow their wrapper; the descendant union covers * positioned content that is not represented by the wrapper's scroll box. */ export declare function measureContentBounds(element: Element): ContentBounds; /** * Measures the authored content root itself instead of its overflow box. * * `data-pygmalion-content-bounds` is an explicit frame boundary. Its layout * border box already grows with normal-flow and max-content children, while * scroll metrics can be polluted by editor-only layers after DOM promotion. * Prefer untransformed layout metrics so canvas zoom never changes the model * frame size. */ export declare function measureContentBorderBounds(element: Element): ContentBounds; /** * Reports stable rendered bounds after layout, font loading, resize, and DOM * mutation. Updates are coalesced through two animation frames so a font or * component layout commit cannot publish an intermediate frame size. */ export declare function observeContentBounds(element: Element, onBoundsChange: (bounds: ContentBounds) => void, measure?: ContentBoundsMeasurement): () => void; /** * Follows the measurable catalog root inside a render host. Catalog components * may mount or be replaced after the frame effect runs, so observing only the * first query result can leave a persisted seed size in place indefinitely. */ export declare function observeContentBoundsTarget(container: Element, selector: string, onBoundsChange: (bounds: ContentBounds) => void, measure?: ContentBoundsMeasurement): () => void; export {};