/**
 * 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;
};
