import type { Ray } from "@aura3d/math";
import { CommandHistory } from "./CommandHistory";
import type { Command, CommandContext } from "./Command";
import { DiagnosticsOverlayModel, type EditorDiagnosticsInput, type EditorDiagnosticsSnapshot } from "./DiagnosticsOverlayModel";
import { type GizmoDrag, type GizmoSettings } from "./Gizmo";
import { EditorStateModel, type EditorStateSnapshot, type EditorStateStorage, type EditorViewportSettings } from "./EditorStateModel";
import { HierarchyModel, type HierarchyLikeNode, type HierarchyNodeDescriptor } from "./HierarchyModel";
import { InspectorModel, type InspectorEditableValue, type InspectorProperty } from "./InspectorModel";
import { MaterialVariantWorkflow, type MaterialVariantState } from "./MaterialVariantWorkflow";
import type { PlayModeBridge } from "./PlayModeBridge";
import { type EditorPickHit, type EditorPickTarget, type EditorPickingEvidenceSnapshot } from "./PickingService";
import { PrefabRegistry, type EditorPrefabNodeBase } from "./PrefabRegistry";
import { Selection, type SelectionId } from "./Selection";
import type { TransformTarget } from "./commands/TransformCommand";
export type EditorMode = "edit" | "play" | "paused";
export interface EditorRuntimeSnapshot {
    readonly mode: EditorMode;
    readonly activeTool: string;
    readonly selection: readonly (string | number)[];
    readonly canUndo: boolean;
    readonly canRedo: boolean;
    readonly undoDepth: number;
    readonly redoDepth: number;
    readonly materialVariants: readonly MaterialVariantState[];
    readonly prefabCount: number;
    readonly picking: EditorPickingEvidenceSnapshot;
    readonly diagnostics: EditorDiagnosticsSnapshot;
    readonly gizmoSettings: GizmoSettings;
    readonly editorState: EditorStateSnapshot;
}
export interface EditorRuntimeOptions {
    readonly stateStorage?: EditorStateStorage;
    readonly stateStorageKey?: string;
}
export declare class EditorRuntime {
    readonly selection: Selection;
    readonly history: CommandHistory;
    readonly inspector: InspectorModel;
    readonly hierarchy: HierarchyModel;
    readonly materialVariants: MaterialVariantWorkflow;
    readonly diagnostics: DiagnosticsOverlayModel;
    readonly prefabs: PrefabRegistry<EditorPrefabNodeBase>;
    readonly state: EditorStateModel;
    private readonly picking;
    private modeRef;
    private activeToolRef;
    private gizmoSettingsRef;
    private disposed;
    private activePlayModeBridge;
    constructor(options?: EditorRuntimeOptions);
    get mode(): EditorMode;
    get activeTool(): string;
    setTool(tool: string): void;
    configureGizmos(settings: Partial<GizmoSettings>): GizmoSettings;
    gizmoSettings(): GizmoSettings;
    configureViewportState(settings: Partial<EditorViewportSettings>): EditorStateSnapshot;
    editorStateSnapshot(): EditorStateSnapshot;
    setMode(mode: EditorMode): void;
    pruneSelection(alive: (id: SelectionId) => boolean): void;
    currentSelection(): readonly SelectionId[];
    select(ids: readonly SelectionId[]): void;
    clearSelection(): void;
    executeCommand(command: Command, context?: CommandContext): Promise<void>;
    executeTransaction(commands: readonly Command[], context?: CommandContext): Promise<void>;
    undo(context?: CommandContext): Promise<void>;
    redo(context?: CommandContext): Promise<void>;
    clearHistory(): void;
    inspect(target: object): readonly InspectorProperty[];
    editInspectedProperty<T extends object>(target: T, path: readonly string[], value: InspectorEditableValue, context?: CommandContext): Promise<void>;
    describeHierarchy(root: HierarchyLikeNode): HierarchyNodeDescriptor;
    flattenHierarchy(root: HierarchyLikeNode): readonly HierarchyNodeDescriptor[];
    setPickTargets(targets: readonly EditorPickTarget[]): void;
    configurePickingBuffer(width: number, height: number): EditorPickingEvidenceSnapshot;
    pick(ray: Ray): EditorPickHit | undefined;
    pickingSnapshot(): EditorPickingEvidenceSnapshot;
    translateTarget(target: TransformTarget | undefined, input: GizmoDrag): Promise<void>;
    rotateTarget(target: TransformTarget | undefined, input: GizmoDrag): Promise<void>;
    scaleTarget(target: TransformTarget | undefined, input: GizmoDrag): Promise<void>;
    updateDiagnostics(input: EditorDiagnosticsInput): EditorDiagnosticsSnapshot;
    diagnosticsSnapshot(): EditorDiagnosticsSnapshot;
    registerMaterialVariants(assetId: string, variants: readonly string[], selected?: string | null): MaterialVariantState;
    setMaterialVariant(assetId: string, variant: string | null): MaterialVariantState;
    materialVariantState(assetId: string): MaterialVariantState;
    enterPlayMode(bridge: PlayModeBridge<unknown>): void;
    pausePlayMode(): void;
    resumePlayMode(): void;
    exitPlayMode({ restore }?: {
        restore?: boolean | undefined;
    }): void;
    snapshot(): EditorRuntimeSnapshot;
    dispose(): void;
    private assertAlive;
    private assertEditable;
}
//# sourceMappingURL=EditorRuntime.d.ts.map