import type { Slide, SlideTheme } from '../types/slides'; import { type FikaExportMediaResolver } from '../configs/exportMediaResolver'; /** * Offscreen slide rendering for hosts and agents. * * Both entry points paint Slide JSON straight to a canvas with the same * painter the thumbnail rail uses, so the pixels match what the user sees * (list markers, text-fit sizes, shapes) without cloning the live DOM. */ export interface FikaRenderSlideOptions { /** Output width in CSS px. Height follows the deck ratio. Default 1280. */ width?: number; /** Device pixel ratio multiplier for the backing store. Default 1. */ dpr?: number; /** * Upper bound on waiting for async resources (images, charts, LaTeX). * Whatever has resolved by then is painted; the rest stays blank. * Default 4000. */ timeoutMs?: number; /** Encoded image type. Default `image/png`. */ format?: 'image/png' | 'image/jpeg' | 'image/webp'; /** Encoder quality for lossy formats (0–1). Default 0.9. */ quality?: number; /** Omit the page background for PNG/WebP without changing element colors. */ transparentBackground?: boolean; /** Load original image pixels, using the host media resolver if needed. Fail if an image cannot load. */ fullResolutionImages?: boolean; /** Per-export resolver; does not replace the mounted editor's configuration. */ mediaResolver?: FikaExportMediaResolver | null; /** Reject instead of encoding incomplete asynchronous resources. */ strictResources?: boolean; /** Share (0..1) of this slide's asynchronous rasters that have landed, as they land. */ onResourceProgress?: (fraction: number) => void; } export interface FikaDeckAtlasOptions extends Omit { /** Width of one slide tile in CSS px. Default 640. */ tileWidth?: number; /** Tiles per row. Default 3. */ columns?: number; /** Slides per sheet; long decks split into several sheets. Default 12. */ maxPerSheet?: number; /** Only these slides (ids or 1-based indexes). Default: every slide. */ slides?: Array; /** Paint "1", "2", … in each tile's corner so the viewer can address slides. Default true. */ numbered?: boolean; /** Sheet background. Default `#1F2937`. */ gutterColor?: string; } export interface FikaDeckAtlasTile { slideId: string; /** 1-based deck position. */ index: number; row: number; column: number; /** Tile rectangle in sheet CSS px. */ left: number; top: number; width: number; height: number; } export interface FikaDeckAtlasSheet { blob: Blob; width: number; height: number; columns: number; rows: number; tiles: FikaDeckAtlasTile[]; } interface RenderTarget { slide: Slide; theme: SlideTheme; viewportSize: number; viewportRatio: number; } /** Render one slide to an encoded image. */ export declare function renderSlideImage(target: RenderTarget, options?: FikaRenderSlideOptions): Promise<{ blob: Blob; width: number; height: number; }>; /** * Render the deck as one or more contact sheets: numbered slide tiles on a * neutral gutter, in reading order. One sheet holds up to `maxPerSheet` * slides so a 30-slide deck yields three images rather than one unreadable one. */ export declare function renderDeckAtlas(deck: { slides: Slide[]; theme: SlideTheme; viewportSize: number; viewportRatio: number; }, options?: FikaDeckAtlasOptions): Promise; export {};