/**
 * Native Action Executor
 *
 * Executes actions on registered native elements and components.
 * In React Native, we execute actions by calling prop handlers directly
 * (onPress, onChangeText, etc.) rather than simulating DOM events.
 */
import type { NativeUIBridgeRegistry } from '../core/registry';
import type { NativeFindRequest, NativeFindResponse, WaitOptions } from '../core/types';
import type { ControlActionRequest, ControlActionResponse, ComponentActionRequest, ComponentActionResponse, WaitResult, NativeActionExecutor, NativeActionListener } from './types';
/**
 * Default native action executor implementation
 */
export declare class DefaultNativeActionExecutor implements NativeActionExecutor {
    private registry;
    private actionListeners;
    constructor(registry: NativeUIBridgeRegistry);
    onActionExecuted(listener: NativeActionListener): () => void;
    /** Notify listeners out-of-band; isolate each invocation so one bad listener can't poison the rest. */
    private emitActionEvent;
    /**
     * Execute an action on an element
     */
    executeAction(elementId: string, request: ControlActionRequest): Promise<ControlActionResponse>;
    /**
     * Perform an action on an element
     */
    private performAction;
    /**
     * Perform press action
     */
    private performPress;
    /**
     * Perform long press action
     */
    private performLongPress;
    /**
     * Perform double tap action
     */
    private performDoubleTap;
    /**
     * Perform type action
     */
    private performType;
    /**
     * Perform setValue action.
     *
     * Web/runner UI Bridge parity: `setValue` replaces the input's value
     * atomically in a single call (no per-character keystroke simulation),
     * mirroring the web bridge's `setValue` semantics. On native there is no
     * DOM value to assign, so we drive the controlled-input handler
     * (`onChangeText`, falling back to `onChange`) with the full string. The
     * registry's `state.value` is then synced so a subsequent GET on the
     * element reflects the new value.
     *
     * Unlike `type`, this does not append to existing content and ignores
     * `delay` — it is the deterministic "set the field to exactly this" action.
     */
    private performSetValue;
    /**
     * Perform clear action
     */
    private performClear;
    /**
     * Perform focus action
     */
    private performFocus;
    /**
     * Perform blur action
     */
    private performBlur;
    /**
     * Perform scroll action
     */
    private performScroll;
    /**
     * Perform swipe action
     */
    private performSwipe;
    /**
     * Perform toggle action
     */
    private performToggle;
    /**
     * Create a synthetic press event
     */
    private createPressEvent;
    /**
     * Execute a component action
     */
    executeComponentAction(componentId: string, request: ComponentActionRequest): Promise<ComponentActionResponse>;
    /**
     * Find elements
     */
    find(request: NativeFindRequest): Promise<NativeFindResponse>;
    /**
     * Wait for element conditions
     */
    waitForElement(elementId: string, options: WaitOptions): Promise<WaitResult>;
    /**
     * Internal wait implementation
     */
    private waitForElementInternal;
}
/**
 * Create a native action executor
 */
export declare function createNativeActionExecutor(registry: NativeUIBridgeRegistry): NativeActionExecutor;
//# sourceMappingURL=action-executor.d.ts.map