import { CameraMux } from "../interface";
import { Point } from "../../utils/misc";
import { ObservableBoardCamera } from "../../board-camera";
import { PanControlStateMachine } from "./pan-control-state-machine";
import { ZoomControlStateMachine } from "./zoom-control-state-machine";
import { RotateControlStateMachine } from "./rotate-control-state-machine";
import { CameraRig } from "../../board-camera/camera-rig";
/**
 * @description The flow control with animation and lock input.
 *
 * This is a customized input flow control that suits a specific use case.
 *
 * You can use the default one ({@link SimpleRelayFlowControl}) instead or implement your own.
 *
 * The internal ruleset on which input is used and which is ignored is controlled by the state machines.
 *
 * @category Input Flow Control
 */
export declare class CameraMuxWithAnimationAndLock implements CameraMux {
    private _panStateMachine;
    private _zoomStateMachine;
    private _rotateStateMachine;
    constructor(panStateMachine: PanControlStateMachine, zoomStateMachine: ZoomControlStateMachine, rotateStateMachine: RotateControlStateMachine);
    notifyPanToAnimationInput(target: Point): void;
    notifyPanInput(delta: Point): void;
    notifyZoomInput(delta: number, at: Point): void;
    notifyRotateByInput(delta: number): void;
    notifyRotateToAnimationInput(target: number): void;
    notifyZoomInputAnimation(targetZoom: number, at?: Point): void;
    notifyZoomInputAnimationWorld(targetZoom: number, at?: Point): void;
    notifyRotationInput(delta: number): void;
    initatePanTransition(): void;
    initateZoomTransition(): void;
    initateRotateTransition(): void;
    get rotateStateMachine(): RotateControlStateMachine;
    get panStateMachine(): PanControlStateMachine;
    get zoomStateMachine(): ZoomControlStateMachine;
}
/**
 * @description Create a flow control that allows animation and lock inputs.
 *
 * @category Input Flow Control
 */
export declare function createCameraMuxWithAnimationAndLock(camera: ObservableBoardCamera): CameraMux;
/**
 * @description Create a default flow control with a camera rig.
 *
 * @category Input Flow Control
 */
export declare function createCameraMuxWithAnimationAndLockWithCameraRig(cameraRig: CameraRig): CameraMux;
