import type { ViewerOptions } from ".";
import { ViralAnimation } from "./components/animation/viral-animation";
import { ViralAvatarManager } from "./components/avatar-manager/viral-avatar-manager";
import { ViralEditor } from "./components/editor/viral-editor";
import { ViralBVH } from "./components/bvh/viral-bvh";
import { ViralCamera } from "./components/camera/viral-camera";
import { ViralCompressProcessor } from "./components/compress/viral-compress.processor";
import { ViralDataManager } from "./components/data-manager/viral-data-manager";
import { EventDispatcher } from "./components/event-handler/base/event-dispatcher";
import { ViralKeyboard } from "./components/event-handler/keyboard/viral-keyboard";
import { ViralMouse } from "./components/event-handler/mouse/viral-mouse";
import { ViralCentralizedEventHandler } from "./components/event-handler/viral-centralized-event-handler";
import { ViralLifecycleEventHandler } from "./components/event-handler/viral-lifecycle-event-handler";
import { ViralLoader } from "./components/loader/viral.loader";
import { ViralMaterialManager } from "./components/material/viral-material-manager";
import { ViralRenderer } from "./components/renderer/viral-renderer";
import { ViralScene } from "./components/scene/viral-scene";
import { ViralElevationSection } from "./components/section-box/viral-elevation-section";
import { ViralSectionBox } from "./components/section-box/viral-section-box";
import { ViralStats } from "./components/stats/viral-stats";
import { ViralVisibilityManager } from "./components/visibility-manager/viral-visibility-manager";
import { ViralContextMenu } from "./gui/context-menu/viral-context-menu";
import { ViralDraggableModal } from "./gui/draggable-modal/viral-draggable-modal";
import { ViralMeshDebugPanel } from "./gui/mesh-debug-panel/viral-mesh-debug-panel";
import { ViralNavigationCube } from "./gui/navigation-cube/viral-navigation-cube";
import { ViralPivotPoint } from "./gui/pivot-point/viral-pivot-point";
import { ViralRenderDebugPanel } from "./gui/render-debug-panel/viral-render-debug-panel";
import { ViralSpinner } from "./gui/spinner/viral-spinner";
import { ViralTools } from "./gui/tools/viral-tools";
import { LandscapeLayerPanel } from "./gui/landscape-layer-panel/landscape-layer-panel";
import { MapPickerModal } from "./gui/map-picker/map-picker-modal";
import type { MapPickerSearchResult, MapPickerSearchProvider, MapPickerMapStyle } from "./gui/map-picker/map-picker-modal";
import { ViralLandscape } from "./components/landscape/viral-landscape";
import { LocalStorageService } from "./services/local-storage.service";
import { SessionPersistence } from "./services/session/session-persistence";
import { SnapshotManager } from "./services/snapshot/snapshot-manager";
import type { SnapshotEnvelope, SnapshotMetadata } from "./services/snapshot/snapshot-types";
import { SceneSnapshotManager } from "./services/snapshot/scene-snapshot-manager";
import type { SaveSceneProgress } from "./services/snapshot/scene-snapshot-types";
import type { MetricsCallback } from "./components/telemetry/performance-metrics";
export { ViralAnimation, ViralAvatarManager, ViralBVH, ViralCamera, ViralCompressProcessor, ViralDataManager, };
export { EventDispatcher, ViralKeyboard, ViralMouse, ViralCentralizedEventHandler, ViralLifecycleEventHandler, };
export { ViralLoader, ViralMaterialManager, ViralRenderer, ViralScene, ViralSectionBox, ViralElevationSection, ViralStats, };
export { ViralEditor, ViralVisibilityManager, SessionPersistence, SnapshotManager, SceneSnapshotManager };
export type { SnapshotEnvelope, SnapshotMetadata, SaveSceneProgress };
export { ViralMeshDebugPanel, ViralContextMenu, ViralDraggableModal, ViralNavigationCube, ViralPivotPoint, ViralRenderDebugPanel, ViralSpinner, ViralTools, MapPickerModal, LandscapeLayerPanel, MapPickerSearchResult, MapPickerSearchProvider, MapPickerMapStyle, };
export { ViralLandscape };
export type { LandscapeDefinition, LandscapeLayerConfig, TerrainStyle } from "./components/landscape/landscape-types";
export type { TerrainTileFetcher } from "./components/landscape/terrain-style";
export type { TrafficTileFetcher } from "./components/landscape/traffic-overlay";
export type { CatalogItem, CatalogCategory } from "./components/editor/catalog/catalog-types";
/**
 * Root of library
 */
export declare class ViralViewerApi extends EventDispatcher {
    options: ViewerOptions;
    viralLifecycleEventHandler: ViralLifecycleEventHandler;
    targetElement: HTMLElement;
    viralNavigationCube?: ViralNavigationCube;
    viralTools?: ViralTools;
    viralSpinner: ViralSpinner;
    viralDraggableModal: ViralDraggableModal;
    viralContextMenu: ViralContextMenu;
    viralPivotPoint: ViralPivotPoint;
    viralScene: ViralScene;
    viralMaterialManager: ViralMaterialManager;
    viralRenderer: ViralRenderer;
    viralCamera: ViralCamera;
    viralMouse: ViralMouse;
    viralKeyboard: ViralKeyboard;
    viralAnimation: ViralAnimation;
    viralVisibilityManager: ViralVisibilityManager;
    viralCentralizedEventHandler: ViralCentralizedEventHandler;
    viralLoader: ViralLoader;
    viralCompressProcessor: ViralCompressProcessor;
    viralBVH: ViralBVH;
    viralDataManager: ViralDataManager;
    viralAvatarManager: ViralAvatarManager;
    viralEditor: ViralEditor;
    localStorageService: LocalStorageService;
    viralStats: ViralStats | null;
    viralSectionBox: ViralSectionBox | null;
    viralElevationSection: ViralElevationSection | null;
    viralMeshDebugPanel: ViralMeshDebugPanel | null;
    mapPickerModal: MapPickerModal | null;
    landscapeLayerPanel: LandscapeLayerPanel | null;
    viralLandscape: ViralLandscape;
    viralRenderDebugPanel: ViralRenderDebugPanel | null;
    sessionPersistence: SessionPersistence;
    snapshotManager: SnapshotManager;
    sceneSnapshotManager: SceneSnapshotManager;
    constructor(options?: ViewerOptions);
    /**
     * Register a callback to receive per-frame performance metrics.
     * Pass null to unsubscribe.
     * Per D-07: Lightweight telemetry for before/after benchmarking.
     */
    onMetrics(callback: MetricsCallback | null): void;
    private _wireSessionAutoSave;
    /**
     * Restore session state from IndexedDB after model loading completes.
     * Respects autoRestoreSession option (default: true).
     * Call this after models are loaded so element ID filtering works.
     */
    initSessionRestore(): Promise<void>;
    /**
     * Clear persisted session state from IndexedDB.
     */
    clearSessionState(): Promise<void>;
    /**
     * Create a snapshot of the current viewer state.
     * Returns a JSON Blob containing a versioned SnapshotEnvelope.
     * If a name is provided, the snapshot is stored in IDB under that name.
     * Otherwise, an auto-generated ISO timestamp key is used.
     */
    createSnapshot(name?: string): Promise<Blob>;
    /**
     * List all saved snapshots with metadata (key, version, timestamp, name).
     * Does not return the full state data.
     */
    listSnapshots(): Promise<SnapshotMetadata[]>;
    /**
     * Delete a snapshot from IDB by key.
     */
    deleteSnapshot(key: string): Promise<void>;
    /**
     * Load a snapshot and restore the viewer state.
     * - If `source` is a Blob, parses the snapshot JSON from the Blob and restores viewer state.
     * - If `source` is a string, loads a snapshot from IndexedDB by key and restores viewer state.
     */
    loadSnapshot(source: Blob | string): Promise<void>;
    saveScene(name?: string, onProgress?: (progress: SaveSceneProgress) => void): Promise<string>;
    loadScene(key: string): Promise<void>;
    listSceneSnapshots(): Promise<{
        key: string;
        name?: string;
        timestamp: string;
        modelCount: number;
        editorObjectCount: number;
        sizeBytes: number;
    }[]>;
    deleteSceneSnapshot(key: string): Promise<void>;
    exportScene(key: string): Promise<Blob>;
    importScene(blob: Blob): Promise<void>;
    /**
     * [F-05] Dispose all resources to prevent memory leaks when viewer is destroyed/re-created.
     * Call this before removing the viewer from the DOM.
     * Follows reverse-construction order (D-05, D-06: type-safe, no `as any` casts).
     */
    dispose(): void;
}
