import { Camera } from '../../core/cameras/Camera';
import { Vec3 } from '../../math/Vec3';
/** Defines the base parameters used to set / reset an {@link OrbitControls}. */
export interface OrbitControlsBaseParams {
    /** The {@link Vec3 | focus point} or the {@link OrbitControls}. */
    target?: Vec3;
    /** Whether to allow zooming or not. */
    enableZoom?: boolean;
    /** Minimum zoom value to use. */
    minZoom?: number;
    /** Maximum zoom value to use. */
    maxZoom?: number;
    /** Zoom speed value to use. */
    zoomSpeed?: number;
    /** Whether to allow rotating or not. */
    enableRotate?: boolean;
    /** Minimum angle to use for vertical rotation. */
    minPolarAngle?: number;
    /** Maximum angle to use for vertical rotation. */
    maxPolarAngle?: number;
    /** Minimum angle to use for horizontal rotation. */
    minAzimuthAngle?: number;
    /** Maximum angle to use for horizontal rotation. */
    maxAzimuthAngle?: number;
    /** Rotate speed value to use. */
    rotateSpeed?: number;
    /** Whether to allow paning or not. */
    enablePan?: boolean;
    /** Pan speed value to use. */
    panSpeed?: number;
}
/** Defines base parameters used to create an {@link OrbitControls}. */
export interface OrbitControlsParams extends OrbitControlsBaseParams {
    /** Optional {@link Camera} to use. */
    camera?: Camera;
    /** Optional {@link HTMLElement} (or {@link Window} element) to use for event listeners. */
    element?: HTMLElement | Window;
}
/**
 * Helper to create orbit camera controls (sometimes called arc ball camera).
 *
 * @example
 * ```javascript
 * // assuming renderer is a valid CameraRenderer
 * const { camera } = renderer
 * const orbitControls = new OrbitControls({ camera })
 * ```
 */
export declare class OrbitControls {
    #private;
    /** {@link Camera} to use with this {@link OrbitControls}. */
    camera: Camera;
    /** The {@link Vec3 | focus point} or the {@link OrbitControls}. Default to `Vec3(0)`. */
    target: Vec3;
    /** Whether the {@link OrbitControls} are enabled or not. Default to `true`. */
    enabled: boolean;
    /** Whether to allow zooming or not. Default to `true`. */
    enableZoom: boolean;
    /** Minimum zoom value to use. Default to `0`. */
    minZoom: number;
    /** Maximum zoom value to use. Default to `Infinity`. */
    maxZoom: number;
    /** Zoom speed value to use. Default to `1`. */
    zoomSpeed: number;
    /** Whether to allow rotating or not. Default to `true`. */
    enableRotate: boolean;
    /** Minimum angle to use for vertical rotation. Default to `0`. */
    minPolarAngle: number;
    /** Maximum angle to use for vertical rotation. Default to `Math.PI`. */
    maxPolarAngle: number;
    /** Minimum angle to use for horizontal rotation. Default to `-Infinity`. */
    minAzimuthAngle: number;
    /** Maximum angle to use for horizontal rotation. Default to `Infinity`. */
    maxAzimuthAngle: number;
    /** Rotate speed value to use. Default to `1`. */
    rotateSpeed: number;
    /** Whether to allow paning or not. Default to `true`. */
    enablePan: boolean;
    /** Pan speed value to use. Default to `1`. */
    panSpeed: number;
    /**
     * OrbitControls constructor
     * @param parameters - parameters to use.
     */
    constructor({ camera, element, target, enableZoom, minZoom, maxZoom, zoomSpeed, enableRotate, minPolarAngle, maxPolarAngle, minAzimuthAngle, maxAzimuthAngle, rotateSpeed, enablePan, panSpeed, }: OrbitControlsParams);
    /**
     * Allow to set or reset this {@link OrbitControls.camera | OrbitControls camera}.
     * @param camera - New {@link OrbitControls.camera | camera} to use.
     */
    useCamera(camera: Camera): void;
    /**
     * Reset the {@link OrbitControls} values.
     * @param parameters - Parameters used to reset the values. Those are the same as {@link OrbitControlsBaseParams} with an additional position parameter to allow to override the {@link OrbitControls} position.
     */
    reset({ position, target, enableZoom, minZoom, maxZoom, zoomSpeed, enableRotate, minPolarAngle, maxPolarAngle, minAzimuthAngle, maxAzimuthAngle, rotateSpeed, enablePan, panSpeed, }?: {
        position?: Vec3;
    } & OrbitControlsBaseParams): void;
    /**
     * Allow to override the {@link camera} position.
     * @param position - new {@link camera} position to set.
     */
    updatePosition(position?: Vec3): void;
    /**
     * Set the element to use for event listeners. Can remove previous event listeners first if needed.
     * @param value - {@link HTMLElement} (or {@link Window} element) to use.
     */
    set element(value: HTMLElement | Window | null);
    /**
     * Get our element to use for event listeners.
     * @returns - {@link HTMLElement} (or {@link Window} element) used.
     */
    get element(): HTMLElement | Window | null;
    /**
     * Destroy the {@link OrbitControls}.
     */
    destroy(): void;
}
