import CameraControls from "camera-controls";
import { Box3, type Object3D, OrthographicCamera, PerspectiveCamera, Raycaster, Vector3 } from "three";
import { ViralCameraEventType, type ViralutionCamera, type ViralViewerState } from "../..";
import type { ViralViewerApi } from "../../viral-viewer-api";
export declare class ViralCamera {
    viralViewerApi: ViralViewerApi;
    raycaster: Raycaster;
    camera: PerspectiveCamera | OrthographicCamera | null;
    private _orthoCamera;
    private _perspectiveCamera;
    get isOrthographic(): boolean;
    get isPerspective(): boolean;
    private _frustumSize;
    private static readonly _tempVec3A;
    private static readonly _tempVec3B;
    private static readonly _tempVec3C;
    private static readonly _tempBox3;
    cameraControls: CameraControls | null;
    targetElement: HTMLElement;
    onUsing: boolean;
    private _homeBounds;
    constructor(viralViewerApi: ViralViewerApi);
    setupCamera(): void;
    private _isFirstInit;
    private _initCameraControl;
    enablePerspectiveCamera(): void;
    enableOrthographicCamera(): void;
    /**
     * resize canvas by resize div
     */
    resizeCanvas(): void;
    resizeCanvas2(): void;
    getState(): ViralViewerState | null;
    restoreState(state: ViralViewerState, enableTransition?: boolean): void;
    modelId: string;
    elementId: string;
    zoomTo(elements?: {
        modelId: string;
        elementId: string;
    }[]): void;
    clientToWorld(items?: Object3D[]): import("three").Intersection<Object3D<import("three").Object3DEventMap>>[] | null;
    worldToClient(point: Vector3): Vector3 | null;
    worldToClient2(point: Vector3): Vector3 | null;
    private castRay;
    updateMainCamera(): void;
    adjustCameraFarFromScene(margin?: number): void;
    private cameraWakeQueuedEvents;
    private cameraSleepQueuedEvents;
    private cameraUpdateQueuedEvents;
    /**
     *
     * @param type Mouse type event
     * @param key key of action
     * @param resolve callback
     */
    addEventListener(type: ViralCameraEventType, key: string, resolve: () => void): void;
    removeEventListener(type: ViralCameraEventType, key: string): void;
    getAllEventListener(): void;
    backHome(): Promise<void>;
    /**
     * This function focus camera on model by given ViralutionCamera
     * @param camera
     */
    focusCameraOnModel(camera: ViralutionCamera, transition?: boolean): Promise<void>;
    /**
     * Focus camera on a Three.js Box3 directly (no Revit coordinate transform).
     * Used by IFC loader and backHome for IFC models.
     */
    focusCameraOnBounds(bounds: Box3, transition?: boolean): Promise<void>;
    setHomeBounds(bounds: Box3): void;
}
