import { Object3D, Vector3 } from 'three';
import { Easing } from 'popmotion';
import { AViewerPluginSync, ThreeViewer } from '../../viewer';
import { UiObjectConfig } from 'uiconfig.js';
import { EasingFunctionType } from '../../utils';
import { CameraView, ICamera, ICameraView } from '../../core';
import { PopmotionPlugin } from './PopmotionPlugin';
export interface CameraViewPluginOptions {
    duration?: number;
    ease?: EasingFunctionType;
    interpolateMode?: 'spherical' | 'linear';
}
/**
 * Camera View Plugin
 *
 * Provides API to save, interact and animate and loop between with multiple camera states/views using the {@link PopmotionPlugin}.
 *
 */
export declare class CameraViewPlugin extends AViewerPluginSync<'viewChange' | 'startViewChange' | 'viewAdd' | 'viewDelete'> {
    static readonly PluginType = "CameraViews";
    enabled: boolean;
    constructor(options?: CameraViewPluginOptions);
    private _cameraViews;
    get cameraViews(): CameraView[];
    get camViews(): CameraView[];
    viewLooping: boolean;
    /**
     * Pauses time between view changes when animating all views or looping.
     */
    viewPauseTime: number;
    /**
     * {@link EasingFunctions}
     */
    animEase: EasingFunctionType;
    animDuration: number;
    interpolateMode: 'spherical' | 'linear';
    rotationOffset: number;
    private _animating;
    get animating(): boolean;
    dependencies: (typeof PopmotionPlugin)[];
    onAdded(viewer: ThreeViewer): void;
    onRemove(viewer: ThreeViewer): void;
    resetToFirstView(duration?: number): Promise<void>;
    addCurrentView(): Promise<CameraView | undefined>;
    addView(view: CameraView): void;
    protected _viewSetView: ({ view, camera }: {
        view?: CameraView;
        camera?: ICamera;
    }) => void;
    protected _viewUpdateView: ({ view, camera }: {
        view: CameraView;
        camera?: ICamera;
    }) => void;
    protected _viewDeleteView: ({ view }: {
        view: CameraView;
    }) => void;
    protected _viewAnimateView: ({ view, camera, duration, easing, throwOnStop }: {
        view: CameraView;
        camera?: ICamera;
        duration?: number;
        easing?: Easing | EasingFunctionType;
        throwOnStop?: boolean;
    }) => Promise<void>;
    deleteView(view: CameraView): void;
    getView(camera?: ICamera, worldSpace?: boolean, view?: CameraView): CameraView;
    setView(view: ICameraView, camera?: ICamera): void;
    private _currentView;
    focusNext: (wrap?: boolean) => void;
    focusPrevious: (wrap?: boolean) => void;
    private _popAnimations;
    animateToView(_view: CameraView | number | string, duration?: number, easing?: Easing | EasingFunctionType, camera?: ICamera, throwOnStop?: boolean): Promise<void>;
    animateAllViews(): Promise<void>;
    stopAllAnimations(): Promise<void>;
    fromJSON(data: any, meta?: any): this | null;
    animateToObject(selected?: Object3D, distanceMultiplier?: number, duration?: number, ease?: Easing | EasingFunctionType, distanceBounds?: {
        min: number;
        max: number;
    }): Promise<void>;
    animateToFitObject(selected?: Object3D, distanceMultiplier?: number, duration?: number, ease?: Easing | EasingFunctionType, distanceBounds?: {
        min: number;
        max: number;
    }): Promise<void>;
    /**
     *
     * @param distanceFromTarget - in world units
     * @param center - target (center) of the view in world coordinates
     * @param duration - in milliseconds
     * @param ease
     */
    animateToTarget(distanceFromTarget: number, center: Vector3, duration?: number, ease?: Easing | EasingFunctionType): Promise<void>;
    uiConfig: UiObjectConfig;
    get animationLooping(): boolean;
    private _viewQueue;
    private _animationLooping;
    private _infiniteLooping;
    private _animationLoop;
    /**
     * @deprecated - renamed to {@link getView} or {@link ICamera.getView}
     * @param camera
     * @param worldSpace
     */
    getCurrentCameraView(camera?: ICamera, worldSpace?: boolean): CameraView;
    /**
     * @deprecated - renamed to {@link setView} or {@link ICamera.setView}
     * @param view
     */
    setCurrentCameraView(view: CameraView): void;
    /**
     * @deprecated - use {@link animateToView} instead
     * @param view
     */
    focusView(view: CameraView): Promise<void>;
}
//# sourceMappingURL=CameraViewPlugin.d.ts.map