import type { Datum } from "../charts/shared/datumTypes";
import type { SemioticTheme } from "../store/ThemeStore";
export interface AnimatedGifOptions {
    /** Frames per second (default 12) */
    fps?: number;
    /** Number of data points to advance per frame (default: auto-calculated) */
    stepSize?: number;
    /** Data points visible per frame (default: all data up to current step) */
    windowSize?: number;
    /** Total number of frames (default: auto from data length / stepSize) */
    frameCount?: number;
    /** Lock X axis domain to prevent shifting (default: auto from full data) */
    xExtent?: [number, number];
    /** Lock Y axis domain (default: auto from full data) */
    yExtent?: [number, number];
    /** Transition frames between data steps (0 = no easing, default 4). XY charts only — ordinal charts use instant transitions. */
    transitionFrames?: number;
    /** Easing for transitions (default "ease-out") */
    easing?: "linear" | "ease-out";
    /** Apply decay (age-based fade) to older data points */
    decay?: {
        type: "linear" | "exponential" | "step";
        minOpacity?: number;
        halfLife?: number;
    };
    /** Loop the GIF (default true) */
    loop?: boolean;
    /** Scale factor for resolution (default 1) */
    scale?: number;
    /** Background color */
    background?: string;
}
export interface AnimatedGifFrameConfig {
    /** Chart width */
    width: number;
    /** Chart height */
    height: number;
    /** Theme for styling */
    theme: SemioticTheme;
}
/**
 * Generate SVG strings for each animation frame.
 * This is the core logic shared between GIF export and client-side preview.
 */
export declare function generateFrameSVGs(chartType: string, data: Datum[], props: Datum, options?: AnimatedGifOptions): string[];
/**
 * Generate SVG strings from an array of data snapshots.
 *
 * Unlike `generateFrameSVGs` which slices a single array progressively,
 * this accepts pre-built snapshots — each entry is the complete props
 * for one frame. Use for scenarios where data changes non-monotonically
 * (edge deletion, network splits, failover paths).
 *
 * Each snapshot is passed directly to `renderChart()`.
 */
export declare function generateFrameSequence(component: string, snapshots: Datum[], baseProps?: Datum): string[];
/**
 * Render a chart as an animated GIF.
 *
 * Requires `sharp` (SVG→PNG) and `gifenc` (GIF encoding) as optional dependencies.
 *
 * @returns Buffer containing the animated GIF
 */
export declare function renderToAnimatedGif(chartType: string, data: Datum[], props: Datum, options?: AnimatedGifOptions): Promise<Buffer>;
