import type { Frame, Snippet } from './types'; /** * Pure-state playback driver for a `Snippet` produced by `recordSnippet`. * * Holds the current frame index and exposes `forward` / `back` / `reset` / * `goTo`. Stateless w.r.t. wall-clock — consumers wire their own ticking * (`setInterval`, `requestAnimationFrame`, `IntersectionObserver`, etc.). * Renderer-agnostic — consumers read `currentFrame` and apply it however * they like (e.g. `applyHighlight(snippet.graph, frame.highlight, ops)` * for state-graph highlight, plus app-specific tape rendering). * * Two players over the same `Snippet` are independent — frame storage is * shared and read-only. * * Mirrors the engine's `DebugSession` shape (a stateful playback driver * for live runs); this is the analogous driver for prerecorded runs. */ export declare class SnippetPlayer { #private; constructor(snippet: Snippet); /** The frame at the current index. Live getter — re-reads on every access. */ get currentFrame(): Frame; /** Current frame index (0 = initial state, `snippet.frames.length - 1` = final). */ get frameIndex(): number; /** True when `frameIndex === snippet.frames.length - 1`. */ get done(): boolean; /** * Advance one frame. Returns `true` if advanced, `false` if already at the * last frame (no-op in that case). */ forward(): boolean; /** * Retreat one frame. Returns `true` if retreated, `false` if already at * the first frame (no-op in that case). */ back(): boolean; /** Jump to frame 0. */ reset(): void; /** * Jump to a specific frame index. Throws `RangeError` if out of bounds * (negative, beyond the last frame, or not an integer). */ goTo(frameIndex: number): void; }