/**
 * Reads a label's on-screen geometry from the DOM. This is the only place that
 * forces layout (getBoundingClientRect / getComputedStyle), and the engine calls
 * it for every node in one batch at the top of a solve — all reads before any
 * writes — so the per-frame read/write thrash of the old engine is gone.
 */
import type { LabelNode } from './types';
/**
 * Refresh `node`'s anchor, size, and scale from the DOM.
 * Returns false if the label isn't measurable yet (detached or not laid out),
 * in which case the caller skips it this solve and retries.
 */
export declare function measureNode(node: LabelNode): boolean;
