import { Observer, SubscriptionOptions } from "../../utils/observable";
export type Rotation = number;
export type RotationVelocity = number;
export type RotationDestinationUpdate = {
    type: 'destination';
    destination: Rotation;
};
export type RotationDeltaUpdate = {
    type: 'delta';
    delta: Rotation;
};
export type RotationUpdate = RotationDestinationUpdate | RotationDeltaUpdate;
export declare class CameraRotationUpdateBatcher {
    private nextRotation;
    private delta;
    private observable;
    private queueRotationUpdateCount;
    private queueRotationUpdateToCount;
    private queueRotationUpdateByCount;
    private lastUpdateCount;
    constructor();
    /**
     * Queue an absolute rotation update to be processed in the next animation frame
     */
    queueRotationUpdate(rotation: Rotation): void;
    /**
     * Queue a rotation update to a specific destination to be processed in the next animation frame
     * This will override any pending delta updates
     */
    queueRotationUpdateTo(destination: Rotation): void;
    /**
     * Queue a rotation update by delta to be processed in the next animation frame
     * This will be ignored if there's a pending destination update
     */
    queueRotationUpdateBy(delta: Rotation): void;
    /**
     * Process and clear all queued rotation updates
     * @returns the update to apply to the rotation, with type information
     */
    processQueuedUpdates(): RotationUpdate | null;
    /**
     * Subscribe to rotation updates
     */
    subscribe(observer: Observer<[RotationUpdate]>, options?: SubscriptionOptions): () => void;
    /**
     * Get debug information about queue method calls since last update
     */
    getDebugInfo(): {
        lastUpdateTotalCalls: number;
        queueRotationUpdateCalls: number;
        queueRotationUpdateToCalls: number;
        queueRotationUpdateByCalls: number;
    };
}
