import { type SceneAnimationClipV1, type SceneAnimationClipState, type SceneAnimationClips, type SceneAnimationTrackPlayOptions, type SceneAnimationTrackResult, type SceneAnimationCancellationReason, type SceneAnimationClipContext } from "@skenora/contracts"; import { AnimationPropertyOwners } from "./animation-property-owners.js"; import type { RuntimeClock } from "./runtime-clock.js"; export interface SceneAnimationClipBinding { readonly keys: readonly string[]; isCurrent(): boolean; /** Sample and validate the complete frame before returning a synchronous commit. */ prepare(timeMs: number): () => void; activate?(): void; release?(): void; } export interface SceneAnimationClipTarget { prepare(clip: Readonly): SceneAnimationClipBinding; } /** One clock cursor and one atomic property reservation per synchronized clip. */ export declare class SceneAnimationClipController implements SceneAnimationClips { #private; readonly target: SceneAnimationClipTarget; readonly owners: AnimationPropertyOwners; readonly onState: (state: SceneAnimationClipState) => void; constructor(clock: RuntimeClock, target: SceneAnimationClipTarget, owners: AnimationPropertyOwners, onState?: (state: SceneAnimationClipState) => void); setDocument(document: SceneAnimationClipContext & { animationClips: Readonly>; }): void; play(clipId: string, options?: SceneAnimationTrackPlayOptions): Promise; pause(clipId: string): boolean; resume(clipId: string): boolean; setPlaybackRate(clipId: string, rate: number): boolean; seek(clipId: string, timeMs: number): SceneAnimationClipState; stop(clipId: string): void; reset(clipId: string): void; getState(clipId: string): SceneAnimationClipState | null; stopAll(reason?: SceneAnimationCancellationReason): void; cancelTargets(kind: "entity" | "material", reason: SceneAnimationCancellationReason): void; clear(reason: SceneAnimationCancellationReason): void; dispose(): void; } //# sourceMappingURL=scene-animation-clip-controller.d.ts.map