/** * Core DOM measurement engine. * Walks the slotted DOM tree and extracts leaf element positions/sizes * to generate shimmer overlay blocks. * * Based on a well-established technique (getBoundingClientRect overlay skeletons) * with prior art from page-skeleton-webpack-plugin (2018) * and @findify/skeleton-generator (~2019). */ interface BaseInfo { x: number; y: number; width: number; height: number; borderRadius: string; } export interface ElementInfo extends BaseInfo { isContainer?: boolean; containerBg?: string; containerBorder?: string; containerShadow?: string; } export interface ContainerInfo extends BaseInfo { backgroundColor: string; border: string; boxShadow: string; } /** * @param piercedRoots collects every open shadow root reached, so the caller can observe * them. MutationObserver does not cross shadow boundaries, so a pierced component * re-rendering its own content is invisible without this. */ export declare function extractElementInfo(element: Element, parentRect: DOMRect, pierceShadow?: boolean, piercedRoots?: Set): ElementInfo[]; export declare function extractContainerInfo(element: Element, parentRect: DOMRect): ContainerInfo | null; /** * Stamp the measured row `count` times down the page, offsetting each copy by the row * height plus `gap`. Container boxes are re-emitted per copy so repeated cards keep * their background, border and shadow. */ export declare function replicateRows(blocks: ElementInfo[], containers: ContainerInfo[], { count, gap, rowHeight }: { count: number; gap: number; rowHeight: number; }): ElementInfo[]; export declare function createResizeObserver(element: Element, callback: () => void): ResizeObserver; export {};