import { Camera, DeepImmutable, Observable, PointerInfo } from './loader/babylonjs-import';
import { ViewerCamera } from './camera/ViewerCamera';
/**
 * Pointer button is pressed
 */
export interface PointerButtonInfoDown {
    /** Pointer button is pressed */
    event: 'down';
    /** The pointer button associated with the {@link PointerButtonInfo} instance. */
    button: number;
    /** Exact time in ms, relative ``performance.timeOrigin``, when button was pressed. */
    downAt: number;
    /** Duration in ms that button has been pressed. */
    duration: number;
}
/**
 * Pointer button is released
 */
export interface PointerButtonInfoUp {
    /** Pointer button is released */
    event: 'up';
    /** The pointer button associated with the {@link PointerButtonInfo} instance. */
    button: number;
    /** Exact time in ms, relative ``performance.timeOrigin``, when button was pressed. */
    downAt: number;
    /** Exact time in ms, relative ``performance.timeOrigin``, when button was relased. */
    upAt: number;
    /** Duration in ms that button was pressed. Same as {@link upAt} - {@link downAt}. */
    duration: number;
}
/**
 * Pointer button is not pressed
 */
export interface PointerButtonInfoNone {
    /** No pointer button is pressed */
    event: 'none';
}
/** Represents pointer button events and timings. */
export type PointerButtonInfo = PointerButtonInfoDown | PointerButtonInfoUp | PointerButtonInfoNone;
/** Predefined point button id's */
export declare enum PredefinedPointerButtonId {
    /** Main button , usually the left button */
    Main = 0,
    /** Auxiliary button pressed, usually the wheel button or the middle button (if present) */
    Auxiliary = 1,
    /** Secondary button pressed, usually the right button */
    Secondary = 2,
    /** Fourth button, typically the Browser Back button */
    Fourth = 3,
    /** Fifth button, typically the Browser Forward button */
    Fifth = 4
}
/** Extends BabylonJS `PointerInfo` with additional twinfinity data. */
export interface PointerInfoWithTimings extends PointerInfo {
    /** Twinfinity extensions for pointer info */
    twinfinity: {
        /** Get timing information for a specific button. */
        button(buttonId: number | PredefinedPointerButtonId): PointerButtonInfo;
        /**
         * Perform pick operation in 3D worldspace where pointer is located.
         * @param isGeometryIntersectionEnabled `true` uses geometry intersection testing which
         * gives accurate results (exactly where something intersected). This is more expensive than `false`
         * which gives the object that was intersected but not exactly where, on the object, intersection occured.
         * @returns Picked object (if any)
         */
        pick: (isGeometryIntersectionEnabled: boolean) => ReturnType<ViewerCamera['pick']>;
    };
}
/**
 * Parse the `MouseEvent.buttons` property into a collection of buttons ids corresponding to possible ids
 * that `MouseEvent.button` can assume. In essence a collection of currently pressed pointer event buttons.
 * @param mouseEvent `MouseEvent.buttons`
 * @returns Collection of buttons ids.
 */
export declare function getMouseEventPressedButtons(mouseEvent: Pick<MouseEvent, 'buttons'>): Set<number>;
/**
 * Creates a
 * @hidden
 * @internal
 * @param scene Scene
 * @returns Observable
 */
export declare function createPointerInfoEnricherAndForwarder(camera: Camera): (eventData: PointerInfo, dst: Pick<Observable<DeepImmutable<PointerInfoWithTimings>>, 'notifyObservers'>) => void;
//# sourceMappingURL=PointerInfoWithTimings.d.ts.map