export interface RuntHit { /** Human label for the owning block: `tag#id` / `tag.class` / `tag`. */ block: string; /** The lone word on the last visual line (trailing punctuation included). */ word: string; /** First ~80 chars of the block's text, for locating it. */ snippet: string; /** Document-relative rect of the runt word (scroll offsets applied). */ rect: { x: number; y: number; width: number; height: number; }; /** Number of visual lines in the block. */ lines: number; } export interface RuntsResult { /** Requested selector scope, or null for the document body. */ scope: string | null; /** False when a requested selector matched nothing. */ found: boolean; /** Unknown means the sweep hit a safety cap before proving the page clean. */ outcome: "pass" | "fail" | "unknown"; /** Text blocks scanned (post length/inline-children filters). */ scannedBlocks: number; /** True when the block sweep hit the internal cap (very large page). */ truncated: boolean; runts: RuntHit[]; } /** * Build the JS function passed to `page.evaluate`. `scope` narrows the sweep * to one container (null = whole body); `minChars` filters out tiny labels * that can't meaningfully wrap (default 40). */ export declare function buildRuntsCheck(): (args: { scope: string | null; minChars: number; }) => RuntsResult; /** * Annotate runt hits onto the live page before the screenshot. Uses a * document-absolute root (not fixed-inset like the other check overlays) * because runts are usually below the fold and the rects are document * coordinates — this keeps boxes aligned on full-page captures. */ export declare function buildRuntsAnnotateScript(): (args: { runts: RuntHit[]; }) => void; export declare function buildClearRuntsAnnotationsScript(): () => void; //# sourceMappingURL=runts.d.ts.map