import { Screen, type Element, type Frame } from "../tui/index.js";
import type { Checkpoint } from "../runtime/state/checkpointStore.js";
import type { FunctionParameter } from "../types.js";
import type { DebuggerCommand, DebuggerIO } from "./types.js";
import { UIState } from "./uiState.js";
type PaneSlot = {
    name: string;
    color: string;
    label: string;
    content: () => string;
};
export declare class DebuggerUI implements DebuggerIO {
    private screen;
    state: UIState;
    prevState: UIState | null;
    private focusIndex;
    private zoomedPane;
    private threadDisplayIndex;
    private scrollOffsets;
    private spinnerInterval;
    private spinnerText;
    private commandBarOverride;
    private inputPrompt;
    private inputValue;
    lastFrame: Frame | null;
    constructor(screen: Screen);
    private formatKeyVal;
    private getPanes;
    private buildSourceContent;
    private buildThreadsContent;
    private buildLocalsContent;
    private buildGlobalsContent;
    private buildCallStackContent;
    private buildActivityContent;
    private buildStdoutContent;
    private buildStatsContent;
    private renderPane;
    private buildCommandBar;
    private buildStatsBar;
    /**
     * Build the top two rows of the standard layout:
     * row 1: source (+ threads if present)
     * row 2: locals, globals, call stack
     */
    buildTopRows(panes: PaneSlot[], focusedName: string | undefined): Element[];
    private buildElementTree;
    private renderUI;
    render(checkpoint?: Checkpoint, _full?: boolean): Promise<void>;
    private static SPINNER_FRAMES;
    private static SPINNER_PHRASES;
    startSpinner(): void;
    stopSpinner(): void;
    cleanup(error?: string): void;
    waitForCommand(): Promise<DebuggerCommand>;
    private handleInteractiveKey;
    private scrollPane;
    private enterTextInput;
    promptForInput(prompt: string): Promise<string>;
    promptForNodeArgs(parameters: FunctionParameter[]): Promise<unknown[]>;
    appendStdout(text: string): void;
    renderActivityOnly(): void;
    private overlayContext;
    showRewindSelector(checkpoints: Checkpoint[]): Promise<number | null>;
    showCheckpointsPanel(checkpoints: Checkpoint[]): Promise<void>;
    destroy(): void;
}
export {};
