import { GizmoManager } from "@babylonjs/core/Gizmos/gizmoManager.js"; import type { Scene } from "@babylonjs/core/scene.js"; import type { CameraPathKeyframe, CameraPathRecord } from "@skenora/contracts"; import { CameraPathVisualizer, type CameraPathVisualizerOptions } from "./camera-path-visualizer.js"; export type CameraKeyframePart = "position" | "target"; export type CameraPathEditPhase = "preview" | "commit" | "cancel"; export interface CameraPathEditingOptions { snap?: number; gizmoScale?: number; visualizer?: Omit; onChange?: (path: Readonly, phase: CameraPathEditPhase, keyframeId: string | null) => void; onSelectionChange?: (keyframeId: string | null, part: CameraKeyframePart | null) => void; } /** * Optional keyframe gizmo editor. It owns only transient Babylon helpers; * callers decide whether a commit becomes an EditorCommand or stays preview. */ export declare class CameraPathEditingController { #private; readonly scene: Scene; readonly gizmos: GizmoManager; readonly visualizer: CameraPathVisualizer; constructor(scene: Scene, options?: CameraPathEditingOptions); get active(): boolean; get path(): Readonly | null; get selectedKeyframeId(): string | null; get selectedPart(): CameraKeyframePart | null; begin(path: Readonly): void; setPath(path: Readonly): void; selectKeyframe(keyframeId: string | null, part?: CameraKeyframePart): boolean; updateKeyframe(keyframeId: string, update: Partial>, phase?: Exclude): boolean; commit(): Readonly; cancel(): void; dispose(): void; } //# sourceMappingURL=camera-path-editing-controller.d.ts.map