import type { Page } from "playwright-core";
/**
 * Move mouse along a bezier curve with slow-fast-slow timing.
 *
 * For non-trivial distances, ~15% of moves overshoot the target by a few px
 * then make a quick corrective move back — real hands rarely land dead-on.
 */
export declare function humanMove(page: Page, targetX: number, targetY: number): Promise<void>;
/**
 * Human-like drag: bezier move to source, mousedown, bezier move to target, pause, mouseup.
 */
export declare function humanDrag(page: Page, srcX: number, srcY: number, dstX: number, dstY: number): Promise<void>;
/**
 * Type text into the focused element one character at a time with
 * randomized inter-key delays. Uses real CDP key events (isTrusted=true)
 * so React/Vue/Svelte controlled inputs see the changes through their
 * native input handler — no value-tracker workarounds needed.
 *
 * Constant `delay` on Playwright's `keyboard.type(text, { delay })` is
 * uniformly spaced and easy for behavioral fingerprinting to flag; this
 * helper jitters per stroke. The trailing delay is omitted so we don't
 * pay tail latency on the last character.
 */
export declare function humanType(page: Page, text: string): Promise<void>;
/**
 * Insert text into the currently focused element using whichever path the
 * element type supports best. Caller is responsible for focusing first.
 *
 * Strategy by host type:
 *
 * - `<input>` / `<textarea>`: bypass any framework value-setter override
 *   (React's controlled-component tracker) by writing through the
 *   prototype's native setter, then fire `input`+`change` so onChange
 *   sees the new value.
 *
 * - contenteditable hosts (Draft.js / Lexical / ProseMirror / Tiptap /
 *   Slate / plain CE): send a single CDP `Input.insertText` via
 *   `page.keyboard.insertText`. This is a browser-level trusted
 *   text-input commit — Draft.js's `beforeinput` handler picks it up and
 *   inserts through its EditorState reducer cleanly. The previous
 *   `document.execCommand('insertText', ...)` path triggered a React
 *   reconciliation crash on Draft.js (NotFoundError: removeChild not a
 *   child of this node) which manifested in production as duplicated
 *   text (DOM left in inconsistent state mid-render with both old and
 *   new content present). Confirmed locally with a Playwright + real
 *   Draft.js 0.10.5 + React 16.14 fixture: execCommand left the editor
 *   empty with the React error logged; CDP insertText inserted the text
 *   exactly once with no errors. Same behavior on plain CE and
 *   <input>/<textarea> when tested through the same CDP path.
 *
 * Notes:
 * - Does NOT touch the system clipboard (safe for concurrent dipclaw
 *   instances and the user's own clipboard).
 */
export declare function pasteText(page: Page, text: string): Promise<void>;
/**
 * Human-like scrolling: multiple small chunks with random intervals.
 */
export declare function humanScroll(page: Page, totalDelta: number): Promise<void>;
