/** * Cinema-mode camera math. * * Concept: in cinema mode every slide shares one large "world canvas" (defined * by Project.settings.worldWidth/Height). Each slide has a `camera` viewport — * a rect in world coordinates that we want to fill the visible canvas. The * transition between two slides = animating the camera (pan + zoom + roll). * * To render: we wrap all elements in a transform that maps the camera rect to * the visible canvas dimensions. Element positions stay in world coordinates; * only the wrapper transforms. * * Parallax: each element can declare a `depth` in [-1, +1]. Elements behind * the camera (negative depth) appear to move less; elements in front move * more. Implemented as an additional translate proportional to camera offset. */ import type { CameraViewport } from '../types'; export interface CameraTransformInput { camera: CameraViewport; /** Output viewport — typically the slide canvas dims. */ viewportWidth: number; viewportHeight: number; } /** Build the CSS transform that maps a camera rect over the world to fill the * given output viewport. Returned as a single transform string ready for * `style:transform="..."`. */ export declare function cameraTransform({ camera, viewportWidth, viewportHeight }: CameraTransformInput): string; /** Lerp between two camera viewports for transitions. */ export declare function lerpCamera(a: CameraViewport, b: CameraViewport, t: number): CameraViewport; /** Default camera = full world (no zoom, no pan). Used when a slide is in * cinema mode but its camera is unset. */ export declare function defaultCamera(worldWidth: number, worldHeight: number): CameraViewport; /** Per-element parallax offset. Elements with depth = 0 move 1:1 with the * camera; depth > 0 moves more (closer); depth < 0 moves less (farther). The * factor maps depth → multiplier such that depth=1 doubles motion, depth=-1 * halves it. We compute the offset from the *delta between the camera's * current position and a neutral world center* — gives a plausible parallax * without needing a separate reference camera per element. */ export declare function parallaxOffset(camera: CameraViewport, depth: number, worldWidth: number, worldHeight: number): { x: number; y: number; };