import { ExportProgress, RasterizeSlide } from './export-controller.svelte'; /** * Video (WebM) export driven by the shared `video-plan` maths: segment timing * comes from `planVideoSegments` (default duration + per-slide overrides + * fps -> frame count), the frame pacing from `fpsToFrameIntervalMs`, and the * recorder MIME type from `pickSupportedMimeType(WEBM_MIME_CANDIDATES)`. This * module owns the browser glue only: rasterise every slide first (capture * phase), then replay each canvas onto a recording canvas whose * `captureStream()` feeds a `MediaRecorder` (recording phase). Mirrors * React's `exportAllSlidesAsVideo`, minus the live-stage slide flipping (the * injected rasteriser renders off-screen instead). */ /** Options for the WebM video export. */ export interface ExportVideoOptions { /** Duration each slide is shown, in milliseconds. Default 3000. */ slideDurationMs?: number; /** Per-slide duration overrides in milliseconds (index maps to slide index). */ slideTimingsMs?: number[]; /** Recording frame rate. Default 30. */ fps?: number; /** Recorder bitrate. Default 5,000,000 (5 Mbps). */ videoBitsPerSecond?: number; /** Capture-phase progress callback: `(currentSlide, totalSlides)`. */ onProgress?: ExportProgress; /** Recording-phase progress callback: `(currentSlide, totalSlides)`. */ onRecordProgress?: ExportProgress; /** Abort the export early; checked between slides and between frames. */ signal?: AbortSignal; } /** The `MediaRecorder` surface this module drives (mockable in unit tests). */ export interface RecorderLike { start(): void; stop(): void; ondataavailable: ((event: { data: Blob; }) => void) | null; onstop: (() => void) | null; onerror: ((event: unknown) => void) | null; } /** Injected capture/recording dependencies (kept DOM-free for unit tests). */ export interface VideoCaptureDeps { /** Live slide count; read fresh on every call. */ getSlideCount(): number; rasterizeSlide: RasterizeSlide; /** Canvas factory override (test seam). Defaults to `document.createElement`. */ createCanvas?: (width: number, height: number) => HTMLCanvasElement; /** Recorder factory override (test seam). Defaults to `new MediaRecorder`. */ createRecorder?: (stream: MediaStream, options: MediaRecorderOptions) => RecorderLike; } /** * Capture every slide and record the sequence as a WebM video Blob, holding * each slide for its planned duration. Rejects with the shared `AbortError` * when `signal` aborts (the recorder is stopped first). */ export declare function exportSlidesToWebmBlob(deps: VideoCaptureDeps, options?: ExportVideoOptions): Promise; //# sourceMappingURL=export-video.d.ts.map