import { Pointer } from "ref-napi";
import { RainwayButtonAction, RainwayGamepadReport_Body, RainwayGamepadRumble_Body, RainwayInput, RainwayInput_Tag, RainwayKeyboardAction, RainwayKeyboardInput_Body, RainwayLogicalInput_Body, RainwayLogLevel, RainwayMouseAbsolute_Body, RainwayMouseButton, RainwayMouseClick_Body, RainwayMouseRelative_Body, RainwayMouseScroll_Body, RainwayPenAbsolute_Body, RainwayPenFlags, RainwayPenMask, RainwayScrollAxis, RainwaySetClipboardText_Body, RainwayTouchAbsolute, RainwayTouchesAbsolute_Body, RainwayTouchPenPointerInfo, RainwayViewportResize_Body, RainwayVirtualKey, RainwayXInputButtons } from "./rainway-ffi";
/**
 * An input report describing gamepad input.
 */
export declare class GamepadReport {
    /** @internal */
    constructor(body: RainwayGamepadReport_Body);
    readonly buttons: RainwayXInputButtons;
    readonly leftTrigger: number;
    readonly rightTrigger: number;
    readonly leftThumbX: number;
    readonly leftThumbY: number;
    readonly rightThumbX: number;
    readonly rightThumbY: number;
    readonly slot: number;
}
/**
 *  An input report describing gamepad rumble.
 */
export declare class GamepadRumble {
    /** @internal */
    constructor(body: RainwayGamepadRumble_Body);
    readonly port: number;
    readonly leftMotorSpeed: number;
    readonly rightMotorSpeed: number;
}
/**
 *  An input report describing absolute mouse position input.
 */
export declare class MouseAbsolute {
    /** @internal */
    constructor(body: RainwayMouseAbsolute_Body);
    readonly x: number;
    readonly y: number;
}
/**
 * An input report describing relative mouse position input.
 */
export declare class MouseRelative {
    /** @internal */
    constructor(body: RainwayMouseRelative_Body);
    readonly dx: number;
    readonly dy: number;
}
/**
 *  An input report describing mouse click input.
 */
export declare class MouseClick {
    /** @internal */
    constructor(body: RainwayMouseClick_Body);
    readonly action: RainwayButtonAction;
    readonly button: RainwayMouseButton;
}
/**
 * An input report describing mouse scroll input.
 */
export declare class MouseScroll {
    /** @internal */
    constructor(body: RainwayMouseScroll_Body);
    readonly axis: RainwayScrollAxis;
    readonly delta: number;
}
/**
 *  An input report describing keyboard input.
 */
export declare class KeyboardInput {
    /** @internal */
    constructor(body: RainwayKeyboardInput_Body);
    readonly action: RainwayKeyboardAction;
    readonly keycode: RainwayVirtualKey;
}
/**
 * An input report describing logical input.
 */
export declare class LogicalInput {
    /** @internal */
    constructor(body: RainwayLogicalInput_Body);
    readonly inputString: string;
}
/**
 * Information about a pointer.
 */
export declare class PointerInfo {
    /** @internal */
    constructor(info: RainwayTouchPenPointerInfo);
    pointerId: number;
    frameId: number;
    pointerFlags: number;
    x: number;
    y: number;
}
/**
 * Information about touch.
 */
export declare class Touch {
    /** @internal */
    constructor(touch: RainwayTouchAbsolute);
    pointerInfo: PointerInfo;
    touchMask: number;
    contactLeft: number;
    contactTop: number;
    contactRight: number;
    contactBottom: number;
    orientation: number;
    pressure: number;
}
/**
 *  An input report describing absolute positioned touch input.
 */
export declare class TouchesAbsolute {
    /** @internal */
    constructor(body: RainwayTouchesAbsolute_Body);
    readonly touches: Touch[];
}
/**
 *  An input report describing absolute positioned pen input.
 */
export declare class PenAbsolute {
    /** @internal */
    constructor(body: RainwayPenAbsolute_Body);
    readonly pointerId: number;
    readonly frameId: number;
    readonly pointerFlags: number;
    readonly x: number;
    readonly y: number;
    readonly penFlags: RainwayPenFlags;
    readonly penMask: RainwayPenMask;
    readonly pressure: number;
    readonly rotation: number;
    readonly tiltX: number;
    readonly tiltY: number;
}
/**
 * An input report describing viewport resize changes.
 */
export declare class ViewportResize {
    /** @internal */
    constructor(body: RainwayViewportResize_Body);
    readonly width: number;
    readonly height: number;
}
/**
 * An input report describing clipboard text changes.
 */
export declare class SetClipboardText {
    /** @internal */
    constructor(body: RainwaySetClipboardText_Body);
    readonly text: string;
}
/**
 * The body of an input event.
 */
export declare class InputBody {
    private _native;
    /** @internal */
    constructor(native: Pointer<RainwayInput>, heldKeys: Pointer<RainwayVirtualKey>, heldKeysLength: number);
    /**
     * A tag identifying the type of input.
     */
    get tag(): RainwayInput_Tag;
    /**
     *  The {@link RainwayVirtualKey} keys that were held down during this input event.
     */
    readonly heldKeys: RainwayVirtualKey[];
    /**
     * Retrieve the input as a gamepad report.
     * @returns - gamepad report
     */
    AsGamepadReport(): GamepadReport;
    /**
     * Retrieve the input as a gamepad rumble.
     * @returns - gamepad rumble
     */
    AsGamepadRumble(): GamepadRumble;
    /**
     * Retrieve the input as a mouse absolute.
     * @returns - mouse absolute
     */
    AsMouseAbsolute(): MouseAbsolute;
    /**
     * Retrieve the input as a mouse relative.
     * @returns - mouse relative
     */
    AsMouseRelative(): MouseRelative;
    /**
     * Retrieve the input as a mouse click.
     * @returns - mouse click
     */
    AsMouseClick(): MouseClick;
    /**
     * Retrieve the input as a mouse scroll.
     * @returns - mouse scroll
     */
    AsMouseScroll(): MouseScroll;
    /**
     * Retrieve the input as a keyboard input.
     * @returns - keyboard input
     */
    AsKeyboardInput(): KeyboardInput;
    /**
     * Retrieve the input as a logical input.
     * @returns - logical input
     */
    AsLogicalInput(): LogicalInput;
    /**
     * Retrieve the input as a touches absolute.
     * @returns - touches absolute
     */
    AsTouchesAbsolute(): TouchesAbsolute;
    /**
     * Retrieve the input as a pen absolute.
     * @returns - pen absolute
     */
    AsPenAbsolute(): PenAbsolute;
    /**
     * Retrieve the input as a viewport resize.
     * @returns - viewport resize
     */
    AsViewportResize(): ViewportResize;
    /**
     * Retrieve the input as clipboard text.
     * @returns - clipboard text
     */
    AsSetClipboardText(): SetClipboardText;
}
/**
 *  The body of a log.
 */
export declare class LogBody {
    /**
     *  The level of the log event.
     */
    readonly level: RainwayLogLevel;
    /**
     *  The target component that raised the log event.
     */
    readonly target: string;
    /**
     *  The log contents.
     */
    readonly message: string;
    /** @internal */
    constructor(level: RainwayLogLevel, target: string, message: string);
}
