import type { AnyStructure } from '../structure'; import type { TrajectoryController, TrajectoryFrame, TrajectoryMetadata } from './index'; import type { TrajectoryRun } from './run'; interface TrajectorySessionInputs { run: () => TrajectoryRun | undefined; index: () => number; set_index: (idx: number) => void; fps: () => number; set_fps: (fps: number) => void; fps_range: () => readonly [number, number]; should_auto_play: () => boolean; on_play?: () => void; on_pause?: () => void; on_end?: () => void; on_loop?: () => void; on_step_change?: (idx: number) => void; on_frame_error?: (frame_idx: number, error: Error) => void; } interface TrajectorySessionOptions { cache_max_frames?: number; cache_max_atoms?: number; scrub_settle_ms?: number; prefetch_delay_ms?: number; } export declare function create_trajectory_session(inputs: TrajectorySessionInputs, options?: TrajectorySessionOptions): { readonly frame_count: number; readonly current_frame: TrajectoryFrame | null; readonly current_structure: AnyStructure | undefined; readonly loading: boolean; readonly scrubbing: boolean; readonly property_rows: readonly TrajectoryMetadata[]; readonly properties_complete: boolean; readonly cached_frames: number; player: { readonly is_playing: boolean; readonly fps_limits: readonly [number, number]; fps: number; fps_step: number; go_to: (index: number) => void; play: () => void; pause: () => void; seek: (index: number) => void; previous: () => void; next: () => void; toggle: () => void; handle_keydown: (event: KeyboardEvent) => boolean; }; controller: TrajectoryController; scrub: (idx: number) => void; commit: (idx?: number | undefined) => void; resolve_frame: (frame_idx: number) => Promise; dispose: () => void; }; export {};