import { EventDispatcher, Intersection, Raycaster, Vector2 } from 'three';
import { JSUndoManager } from 'ts-browser-helpers';
import { ICamera, IObject3D } from '../../core';
export interface ObjectPickerEventMap {
    hoverObjectChanged: {
        object: IObject3D | null;
    };
    selectedObjectChanged: {
        object: IObject3D | null;
    };
    hitObject: {
        time: number;
        intersects: {
            selectedObject: IObject3D | null;
            intersect: Intersection<IObject3D> | null;
            intersects: Intersection<IObject3D>[];
        };
    };
}
export declare class ObjectPicker extends EventDispatcher<ObjectPickerEventMap> {
    private _firstHit;
    hoverEnabled: boolean;
    /**
     * Time threshold for a pointer click event
     */
    static PointerClickMaxTime: number;
    /**
     * Distance threshold for a pointer click event
     */
    static PointerClickMaxDistance: number;
    undoManager?: JSUndoManager;
    private _root;
    private _camera;
    private _mouseDownTime;
    private _mouseDownPos;
    private _mouseUpTime;
    private _time;
    selectionCondition: (o: IObject3D) => boolean;
    raycaster: Raycaster;
    mouse: Vector2;
    private _selected;
    private _hovering;
    cursorStyles: {
        default: string;
        down: string;
    };
    domElement: HTMLElement;
    constructor(root: IObject3D, domElement: HTMLElement, camera: ICamera, selectionCondition?: (o: IObject3D) => boolean);
    dispose(): void;
    get camera(): ICamera<import("../../core").ICameraEventMap>;
    set camera(value: ICamera<import("../../core").ICameraEventMap>);
    get selectedObject(): IObject3D | null;
    set selectedObject(object: IObject3D | null);
    private _setSelected;
    get hoverObject(): IObject3D | null;
    set hoverObject(object: IObject3D | IObject3D[] | null);
    get time(): number;
    get isMouseDown(): boolean;
    get mouseDownDeltaTime(): number;
    private _onPointerMove;
    private _onPointerLeave;
    private _onPointerEnter;
    private _onPointerCancel;
    updateMouseFromEvent(event: PointerEvent): void;
    private _onPointerDown;
    private _onPointerUp;
    private _onPointerClick;
    checkIntersection(): {
        selectedObject: IObject3D<import("../../core").IObject3DEventMap>;
        intersect: Intersection<IObject3D<import("../../core").IObject3DEventMap>>;
        intersects: Intersection<IObject3D<import("../../core").IObject3DEventMap>>[];
        mouse: import("three").Vector2Tuple;
    } | null;
    isHovering(): boolean;
    isSelected(): boolean;
}
//# sourceMappingURL=ObjectPicker.d.ts.map