export interface TextInputProxyParams {
/** Where to mount the proxy — the canvas's parent so it scrolls/positions with it. */
container: HTMLElement;
/** The Rive canvas, used to position the proxy over it (iOS scroll-jump avoidance) and for domain checks. */
canvas: HTMLElement;
/** Forward committed text (typing, IME/dead-key commits, paste) into the focus tree. */
textInput: (text: string) => boolean;
/** Physical key events on the proxy route back through KeyboardInteractions' shared policy. */
onKeyDown: (event: KeyboardEvent) => void;
onKeyUp: (event: KeyboardEvent) => void;
/** The field is empty; fill the clipboard from Rive's selection. */
onCopy: (event: ClipboardEvent) => void;
/** Called when the proxy loses DOM focus; the receiver decides whether to tear the session down. */
onBlur: (relatedTarget: EventTarget | null) => void;
}
/**
* Invisible per-instance capturing IME/dead-key/paste text; focusable inside a
* gesture to raise mobile keyboards. Always empty: C++ owns value and caret. Decorated
* for AT only while it holds DOM focus.
*/
export declare class TextInputProxy {
private params;
private element;
private composing;
private decoratedKeys;
private lastLeft;
private lastTop;
constructor(params: TextInputProxyParams);
private listeners;
private createElement;
private positionOverCanvas;
/** Re-sync before input: the canvas may have scrolled since the session began. */
private reposition;
private onCompositionStart;
private onCompositionEnd;
private onInput;
/**
* Forward the field's text to Rive and clear it.
*
* TODO: iOS won't autorepeat Backspace in an empty field (needs a text mirror).
* */
private commit;
private onPaste;
private onBlur;
/** Clear any transient value and decoration. Does not blur the element. */
endSession(): void;
/** Must be called synchronously inside a gesture on iOS to raise the keyboard. */
focus(): void;
hasDomFocus(): boolean;
owns(target: EventTarget | null): boolean;
/** See EditingHost.decorate. */
decorate(attrs: Record): void;
/**
* type=password for obscured fields so AT doesn't echo keys.
* TODO: source "type" from Core, not semantics.
*/
setSecure(secure: boolean): void;
/** Drop all decoration and return to the AT-invisible baseline. */
resetDecoration(): void;
cleanup(): void;
}