import { type GizmoPivotMode, type GizmoSettings, type GizmoSpaceMode } from "./Gizmo";
export interface EditorStateStorage {
    getItem(key: string): string | null;
    setItem(key: string, value: string): void;
    removeItem?(key: string): void;
}
export interface EditorViewportSettings {
    readonly showGrid: boolean;
    readonly gridSize: number;
    readonly gridSubdivisions: number;
    readonly showAxisGizmo: boolean;
    readonly showStats: boolean;
    readonly showWireframe: boolean;
    readonly showBounds: boolean;
    readonly showLights: boolean;
    readonly showCameras: boolean;
    readonly fov: number;
    readonly near: number;
    readonly far: number;
}
export interface EditorGridSnapSettings {
    readonly snapToGrid: boolean;
    readonly positionSnap: number;
    readonly rotationSnapEnabled: boolean;
    readonly rotationSnapDegrees: number;
    readonly scaleSnapEnabled: boolean;
    readonly scaleSnap: number;
}
export interface EditorStateSnapshot {
    readonly activeTool: string;
    readonly transformSpace: GizmoSpaceMode;
    readonly pivotMode: GizmoPivotMode;
    readonly viewport: EditorViewportSettings;
    readonly gridSnap: EditorGridSnapSettings;
    readonly persisted: boolean;
    readonly storageKey: string;
    readonly changeCount: number;
    readonly evidence: {
        readonly oldCodebasePort: true;
        readonly persistentEditorState: boolean;
        readonly viewportSettings: boolean;
        readonly gridSnapSettings: boolean;
        readonly transformSpacePivotMode: boolean;
    };
}
export interface EditorStateChange {
    readonly property: string;
    readonly oldValue: unknown;
    readonly newValue: unknown;
}
export interface EditorStateModelOptions {
    readonly storage?: EditorStateStorage;
    readonly storageKey?: string;
}
type Listener = (change: EditorStateChange) => void;
export declare class EditorStateModel {
    private activeToolRef;
    private transformSpaceRef;
    private pivotModeRef;
    private viewportRef;
    private gridSnapRef;
    private readonly listeners;
    private readonly storageKey;
    private readonly storage;
    private persisted;
    private changes;
    constructor(options?: EditorStateModelOptions);
    get activeTool(): string;
    get transformSpace(): GizmoSpaceMode;
    get pivotMode(): GizmoPivotMode;
    setActiveTool(tool: string): void;
    setTransformSpace(space: GizmoSpaceMode): void;
    setPivotMode(mode: GizmoPivotMode): void;
    configureViewport(settings: Partial<EditorViewportSettings>): EditorViewportSettings;
    configureGridSnap(settings: Partial<EditorGridSnapSettings>): EditorGridSnapSettings;
    configureFromGizmoSettings(settings: GizmoSettings): void;
    gizmoSettings(): GizmoSettings;
    snapPosition(value: number): number;
    snapRotation(radians: number): number;
    snapScale(value: number): number;
    subscribe(listener: Listener): () => void;
    snapshot(): EditorStateSnapshot;
    reset(): void;
    private setValue;
    private emit;
    private persist;
    private load;
}
export declare function createMemoryEditorStateStorage(initial?: Record<string, string>): EditorStateStorage & {
    readonly values: Record<string, string>;
};
export {};
//# sourceMappingURL=EditorStateModel.d.ts.map