import * as THREE from "three";
import { TransformMode } from "./TransformGizmo";
export type TransformControlsMode = TransformMode;
export type PropertyName = "camera" | "object" | "enabled" | "axis" | "mode" | "translationSnap" | "rotationSnap" | "scaleSnap" | "space" | "size" | "dragging" | "showX" | "showY" | "showZ" | "minX" | "maxX" | "minY" | "maxY" | "minZ" | "maxZ" | "worldPosition" | "worldPositionStart" | "worldQuaternion" | "worldQuaternionStart" | "cameraPosition" | "cameraQuaternion" | "pointStart" | "pointEnd" | "rotationAxis" | "rotationAngle" | "eye";
export type EventName = "camera-changed" | "object-changed" | "enabled-changed" | "axis-changed" | "mode-changed" | "translationSnap-changed" | "rotationSnap-changed" | "scaleSnap-changed" | "space-changed" | "size-changed" | "dragging-changed" | "showX-changed" | "showY-changed" | "showZ-changed" | "minX-changed" | "maxX-changed" | "minY-changed" | "maxY-changed" | "minZ-changed" | "maxZ-changed" | "worldPosition-changed" | "worldPositionStart-changed" | "worldQuaternion-changed" | "worldQuaternionStart-changed" | "cameraPosition-changed" | "cameraQuaternion-changed" | "pointStart-changed" | "pointEnd-changed" | "rotationAxis-changed" | "rotationAngle-changed" | "eye-changed";
export interface TransformControlsEventMap {
    /**
     * Fires if any type of change (object or property change) is performed. Property changes are separate events you
     * can add event listeners to. The event type is "propertyname-changed".
     */
    change: object;
    /**
     * Fires if a pointer (mouse/touch) becomes active.
     */
    mouseDown: {
        mode: TransformControlsMode;
    };
    /**
     * Fires if a pointer (mouse/touch) is no longer active.
     */
    mouseUp: {
        mode: TransformControlsMode;
    };
    /**
     * Fires if the controlled 3D object is changed.
     */
    objectChange: object;
    /**
     * start dragging.
     */
    draggingStart: object;
    /**
     * dragging.
     */
    dragging: object;
    /**
     * end dragging.
     */
    draggingEnd: object;
    "camera-changed": {
        value: unknown;
    };
    "object-changed": {
        value: unknown;
    };
    "enabled-changed": {
        value: unknown;
    };
    "axis-changed": {
        value: unknown;
    };
    "mode-changed": {
        value: unknown;
    };
    "translationSnap-changed": {
        value: unknown;
    };
    "rotationSnap-changed": {
        value: unknown;
    };
    "scaleSnap-changed": {
        value: unknown;
    };
    "space-changed": {
        value: unknown;
    };
    "size-changed": {
        value: unknown;
    };
    "dragging-changed": {
        value: unknown;
    };
    "showX-changed": {
        value: unknown;
    };
    "showY-changed": {
        value: unknown;
    };
    "showZ-changed": {
        value: unknown;
    };
    "minX-changed": {
        value: unknown;
    };
    "maxX-changed": {
        value: unknown;
    };
    "minY-changed": {
        value: unknown;
    };
    "maxY-changed": {
        value: unknown;
    };
    "minZ-changed": {
        value: unknown;
    };
    "maxZ-changed": {
        value: unknown;
    };
    "worldPosition-changed": {
        value: unknown;
    };
    "worldPositionStart-changed": {
        value: unknown;
    };
    "worldQuaternion-changed": {
        value: unknown;
    };
    "worldQuaternionStart-changed": {
        value: unknown;
    };
    "cameraPosition-changed": {
        value: unknown;
    };
    "cameraQuaternion-changed": {
        value: unknown;
    };
    "pointStart-changed": {
        value: unknown;
    };
    "pointEnd-changed": {
        value: unknown;
    };
    "rotationAxis-changed": {
        value: unknown;
    };
    "rotationAngle-changed": {
        value: unknown;
    };
    "eye-changed": {
        value: unknown;
    };
}
/**
 * This class can be used to transform objects in 3D space by adapting a similar interaction model of DCC tools like
 * Blender. Unlike other controls, it is not intended to transform the scene's camera.
 *
 * TransformControls expects that its attached 3D object is part of the scene graph.
 */
declare class TransformControls extends THREE.Controls<TransformControlsEventMap> {
    object: any;
    enabled: any;
    camera: any;
    axis: "X" | "Y" | "Z" | "E" | "XY" | "YZ" | "XZ" | "XYZ" | "XYZE" | null;
    mode: any;
    translationSnap: any;
    rotationSnap: any;
    scaleSnap: any;
    space: any;
    size: any;
    dragging: any;
    showX: any;
    showY: any;
    showZ: any;
    minX: any;
    maxX: any;
    minY: any;
    maxY: any;
    minZ: any;
    maxZ: any;
    worldPosition: any;
    worldPositionStart: any;
    worldQuaternion: any;
    worldQuaternionStart: any;
    cameraPosition: any;
    cameraQuaternion: any;
    pointStart: any;
    pointEnd: any;
    rotationAxis: any;
    rotationAngle: any;
    eye: any;
    _root: any;
    _gizmo: any;
    _plane: any;
    _offset: any;
    _startNorm: any;
    _endNorm: any;
    _cameraScale: any;
    _parentPosition: any;
    _parentQuaternion: any;
    _parentQuaternionInv: any;
    _parentScale: any;
    _worldScaleStart: any;
    _worldQuaternionInv: any;
    _worldScale: any;
    _positionStart: any;
    _quaternionStart: any;
    _scaleStart: any;
    _getPointer: any;
    _onPointerDown: any;
    _onPointerHover: any;
    _onPointerMove: any;
    _onPointerUp: any;
    constructor(camera: any, domElement?: any);
    connect(): void;
    disconnect(): void;
    getHelper(): any;
    pointerHover(pointer: any): void;
    pointerDown(pointer: any): void;
    pointerMove(pointer: any): void;
    pointerUp(pointer: any): void;
    dispose(): void;
    attach(object: THREE.Object3D): this;
    detach(): this;
    reset(): void;
    getRaycaster(): THREE.Raycaster;
    getMode(): any;
    setMode(mode: any): void;
    setTranslationSnap(translationSnap: any): void;
    setRotationSnap(rotationSnap: any): void;
    setScaleSnap(scaleSnap: any): void;
    setSize(size: any): void;
    setSpace(space: any): void;
}
declare class TransformControlsGizmo extends THREE.Object3D {
    object: any;
    enabled: any;
    camera: any;
    axis: any;
    mode: any;
    translationSnap: any;
    rotationSnap: any;
    scaleSnap: any;
    space: any;
    size: any;
    dragging: any;
    showX: any;
    showY: any;
    showZ: any;
    minX: any;
    maxX: any;
    minY: any;
    maxY: any;
    minZ: any;
    maxZ: any;
    worldPosition: any;
    worldPositionStart: any;
    worldQuaternion: any;
    worldQuaternionStart: any;
    cameraPosition: any;
    cameraQuaternion: any;
    pointStart: any;
    pointEnd: any;
    rotationAxis: any;
    rotationAngle: any;
    eye: any;
    isTransformControlsGizmo: any;
    readonly type: string;
    gizmo: any;
    picker: any;
    helper: any;
    constructor();
    updateMatrixWorld(force: boolean): void;
}
declare class TransformControlsPlane extends THREE.Mesh {
    object: any;
    enabled: any;
    camera: any;
    axis: any;
    mode: any;
    translationSnap: any;
    rotationSnap: any;
    scaleSnap: any;
    space: any;
    size: any;
    dragging: any;
    showX: any;
    showY: any;
    showZ: any;
    minX: any;
    maxX: any;
    minY: any;
    maxY: any;
    minZ: any;
    maxZ: any;
    worldPosition: any;
    worldPositionStart: any;
    worldQuaternion: any;
    worldQuaternionStart: any;
    cameraPosition: any;
    cameraQuaternion: any;
    pointStart: any;
    pointEnd: any;
    rotationAxis: any;
    rotationAngle: any;
    eye: any;
    isTransformControlsPlane: boolean;
    readonly type: string;
    constructor();
    updateMatrixWorld(force: boolean): void;
}
export { TransformControls, TransformControlsGizmo, TransformControlsPlane };
