import type { BrowserUserContext } from './browser.js';
import type { BrowsingContextBrowsingContext } from './browsing_context.js';
import type { EmptyResult, JsInt, JsUint } from './common.js';
import type { ScriptSharedReference } from './script.js';
export type InputCommand = InputPerformActions | InputReleaseActions | InputSetFiles;
export type InputResult = InputPerformActionsResult | InputReleaseActionsResult | InputSetFilesResult;
export type InputEvent = InputFileDialogOpened;
export interface InputElementOrigin {
    type: "element";
    element: ScriptSharedReference;
}
export interface InputPerformActions {
    method: "input.performActions";
    params: InputPerformActionsParameters;
}
export interface InputPerformActionsParameters {
    context: BrowsingContextBrowsingContext;
    actions: InputSourceActions[];
}
export type InputSourceActions = InputNoneSourceActions | InputKeySourceActions | InputPointerSourceActions | InputWheelSourceActions;
export interface InputNoneSourceActions {
    type: "none";
    id: string;
    actions: InputNoneSourceAction[];
}
export type InputNoneSourceAction = InputPauseAction;
export interface InputKeySourceActions {
    type: "key";
    id: string;
    actions: InputKeySourceAction[];
}
export type InputKeySourceAction = InputPauseAction | InputKeyDownAction | InputKeyUpAction;
export interface InputPointerSourceActions {
    type: "pointer";
    id: string;
    parameters?: InputPointerParameters;
    actions: InputPointerSourceAction[];
}
export type InputPointerType = "mouse" | "pen" | "touch";
export interface InputPointerParameters {
    /**
     * @default 'mouse'
     */
    pointerType?: InputPointerType;
}
export type InputPointerSourceAction = InputPauseAction | InputPointerDownAction | InputPointerUpAction | InputPointerMoveAction;
export interface InputWheelSourceActions {
    type: "wheel";
    id: string;
    actions: InputWheelSourceAction[];
}
export type InputWheelSourceAction = InputPauseAction | InputWheelScrollAction;
export interface InputPauseAction {
    type: "pause";
    duration?: JsUint;
}
export interface InputKeyDownAction {
    type: "keyDown";
    value: string;
}
export interface InputKeyUpAction {
    type: "keyUp";
    value: string;
}
export interface InputPointerUpAction {
    type: "pointerUp";
    button: JsUint;
}
export type InputPointerDownAction = InputPointerCommonProperties & {
    type: "pointerDown";
    button: JsUint;
};
export type InputPointerMoveAction = InputPointerCommonProperties & {
    type: "pointerMove";
    x: number;
    y: number;
    duration?: JsUint;
    origin?: InputOrigin;
};
export interface InputWheelScrollAction {
    type: "scroll";
    x: JsInt;
    y: JsInt;
    deltaX: JsInt;
    deltaY: JsInt;
    duration?: JsUint;
    /**
     * @default 'viewport'
     */
    origin?: InputOrigin;
}
export interface InputPointerCommonProperties {
    width?: JsUint;
    height?: JsUint;
    pressure?: number;
    tangentialPressure?: number;
    /**
     * 0 .. Math.PI / 2
     */
    twist?: number;
    /**
     * 0 .. 2 * Math.PI
     */
    altitudeAngle?: number;
    azimuthAngle?: number;
}
export type InputOrigin = "viewport" | "pointer" | InputElementOrigin;
export type InputPerformActionsResult = EmptyResult;
export interface InputReleaseActions {
    method: "input.releaseActions";
    params: InputReleaseActionsParameters;
}
export interface InputReleaseActionsParameters {
    context: BrowsingContextBrowsingContext;
}
export type InputReleaseActionsResult = EmptyResult;
export interface InputSetFiles {
    method: "input.setFiles";
    params: InputSetFilesParameters;
}
export interface InputSetFilesParameters {
    context: BrowsingContextBrowsingContext;
    element: ScriptSharedReference;
    files: string[];
}
export type InputSetFilesResult = EmptyResult;
export interface InputFileDialogOpened {
    method: "input.fileDialogOpened";
    params: InputFileDialogInfo;
}
export interface InputFileDialogInfo {
    context: BrowsingContextBrowsingContext;
    userContext?: BrowserUserContext;
    element?: ScriptSharedReference;
    multiple: boolean;
}
/** @deprecated Use {@link Input.create} instead — will be removed in a future major version. */
export declare function getInputInstance(driver: unknown): Promise<Input>;
export declare class Input {
    private readonly bidi;
    private constructor();
    static create(driver: unknown): Promise<Input>;
    performActions(params: InputPerformActionsParameters): Promise<void>;
    releaseActions(params: InputReleaseActionsParameters): Promise<void>;
    setFiles(params: InputSetFilesParameters): Promise<void>;
    onFileDialogOpened(callback: (params: InputFileDialogInfo) => void): Promise<void>;
    /** @deprecated Use {@link performActions} instead — will be removed in a future major version. */
    perform(browsingContextId: string, actions: InputSourceActions[]): Promise<void>;
    /** @deprecated Use {@link releaseActions} instead — will be removed in a future major version. */
    release(browsingContextId: string): Promise<void>;
}
