/** Runtime-only sprite sheet playback configuration. */ export interface SpriteSheetConfig { frameCount: number; frameWidth: number; frameHeight: number; sheetWidth?: number; sheetHeight?: number; fps: number; loop: boolean; autoPlay?: boolean; } export interface SpriteSheetFrame { index: number; column: number; row: number; x: number; y: number; width: number; height: number; } export interface SpriteSheetSink { applyFrame(frame: Readonly): void; } export interface SpriteSheetPlaybackState { playing: boolean; frame: number; progress: number; fps: number; loop: boolean; } export interface AnimationFrameScheduler { now(): number; request(callback: (time: number) => void): number; cancel(handle: number): void; } /** Renderer-neutral sprite timing and crop calculation. */ export declare class SpriteSheetController { #private; readonly sink: SpriteSheetSink; readonly scheduler: AnimationFrameScheduler; constructor(sink: SpriteSheetSink, config: SpriteSheetConfig, scheduler?: AnimationFrameScheduler); get state(): SpriteSheetPlaybackState; subscribe(listener: (state: SpriteSheetPlaybackState) => void): () => void; play(): void; pause(): void; stop(): void; goToFrame(frame: number): void; seek(progress: number): void; updateConfig(update: Partial): void; dispose(): void; } //# sourceMappingURL=sprite-sheet-controller.d.ts.map