/** * Owns the iframe-side pointer interactions that drive selection: * * - On `pointerdown` we open a `drag` session (storing both client + page * coords plus the current scroll offset). We don't yet know if this will * become a click or an actual drag. * - On `pointermove` we update the drag rect and post `DRAG_RECT_UPDATED` * to the parent so the live drag rectangle can render. We only flip * `hasExceededThreshold` once the rect grows past 6×6 px so that a tiny * accidental drag still resolves as a click. * - On `pointerup` we either: * - resolve as an `ELEMENT_SELECTED` (single click / sub-threshold drag) * - resolve as an `AREA_SELECTED` (drag past threshold), filtering the * candidates snapshotted at drag start against the final rectangle to * enumerate which descendants the user enclosed. * - During an active drag a `requestAnimationFrame` loop keeps the rect in * sync with the page scroll so the rectangle visually "sticks" to the * page rather than the viewport. * * We listen at window capture, the first stop on every event path, and * `preventDefault`/`stopImmediatePropagation` presses and clicks so the * underlying page can't navigate or trigger handlers while the user is * working in selection mode, even from its own document capture listeners. */ export declare function useSelectionInteractions(): void;