export interface RainHandle {
    stop(): void;
    isRunning(): boolean;
}
export interface RainOptions {
    row: number;
    col: number;
    width: number;
    height: number;
    tickMs?: number;
    /** When provided, every render also paints these lines to the right of the rain. */
    sidePanelLines?: () => string[];
    /** Width of the rain pane only (the rest of `width` is the side panel). */
    rainWidth?: number;
}
/**
 * Start the rain animation. Caller MUST call `.stop()` before exit or after
 * the awaited work completes, otherwise the interval leaks.
 *
 * Safe in non-TTY contexts (returns a no-op handle) so callers don't need
 * to branch.
 */
export declare function startRain(opts: RainOptions): RainHandle;
/**
 * Static (non-interactive) sample frame — used in tests to confirm the
 * renderer doesn't blow up and produces reasonable bytes.
 */
export declare function sampleFrame(width?: number, height?: number): string;
