import type { Diff, FlickerReason, Frame } from './frame.js';
import { type StylePool } from './screen.js';
type Options = {
    isTTY: boolean;
    stylePool: StylePool;
};
export declare function sanitizeCommitLine(line: string): string;
export declare class LogUpdate {
    private readonly options;
    private state;
    constructor(options: Options);
    renderPreviousOutput_DEPRECATED(prevFrame: Frame): Diff;
    reset(): void;
    private framesSinceFullReset;
    private static readonly SCRUB_EVERY_N_FRAMES;
    private renderFullFrame;
    private getRenderOpsForDone;
    render(prev: Frame, next: Frame, altScreen?: boolean, decstbmSafe?: boolean, forceFullRepaint?: boolean): Diff;
}
/**
 * Unified main-screen full-repaint entry. EVERY path that needs to repaint
 * the whole visible viewport — staticCommit reset, periodic_scrub, resize,
 * offscreen drift detection, forceRedraw, safe_repaint mode — goes through
 * this function.
 *
 * Returned Diff is composed as:
 *   1. flickerMarker — telemetry-only; carries reason + debug for onRender's
 *      flickers[] tracking. Emits ZERO bytes to terminal.
 *   2. inplaceFullRepaintSequence — actual repaint ANSI: CUP + EL + cell
 *      content for the visible viewport rows, CR+LF advance inside the
 *      viewport only, DECAWM bracket. No \x1b[2J. No repaint-owned
 *      scrollback writes. Smear-resistant.
 *
 * INVARIANT: This is the ONLY way main-screen rendering can produce a full
 * repaint. Anything else emitting \x1b[2J on main screen is a bug —
 * tests/ink/no-ed2-on-main-screen.test.ts locks that contract.
 *
 * Note: `clearTerminal` patch type was removed when this entry replaced the
 * legacy fullResetSequence_CAUSES_FLICKER. The patch was a footgun: callers
 * easily slipped a literal \x1b[2J into the main-screen byte stream via
 * writeDiffToTerminal's translation. Now that emission is no-op'd, no
 * accidental ED 2 can leak through the patch system.
 */
export declare function safeFullRepaint(frame: Frame, stylePool: StylePool, reason: FlickerReason, debug?: {
    triggerY: number;
    prevLine: string;
    nextLine: string;
}): Diff;
export {};
