import type { Theme } from "../../../../modes/interactive/theme/theme.ts";
import { type Component, type Input } from "@earendil-works/pi-tui";
import type { QuestionnaireState } from "../state/state.ts";
import type { QuestionData } from "../tool/types.ts";
import type { ChatRowView } from "./components/chat-row-view.ts";
import type { PreviewPaneProps } from "./components/preview/preview-pane.ts";
import type { TabBar } from "./components/tab-bar.ts";
import type { StatefulView } from "./stateful-view.ts";
import type { TabComponents } from "./tab-components.ts";
export declare const HINT_PART_ENTER = "enter select";
export declare const HINT_PART_NAV = "\u2191/\u2193 navigate";
export declare const HINT_PART_TOGGLE = "space toggle";
export declare const HINT_PART_NOTES = "n add notes";
export declare const HINT_PART_TAB = "tab switch questions";
export declare const HINT_PART_CANCEL = "esc cancel";
export declare const HINT_SINGLE: string;
export declare const HINT_MULTI: string;
export declare const HINT_MULTISELECT_SUFFIX = " \u00B7 space toggle";
export declare const HINT_NOTES_SUFFIX = " \u00B7 n add notes";
export declare const REVIEW_HEADING = "Review your answers";
export declare const READY_PROMPT = "Ready to submit your answers?";
export declare const INCOMPLETE_WARNING_PREFIX = "\u26A0 Answer remaining questions before submitting:";
export type DialogState = QuestionnaireState;
/** Per-tick projection of dialog state. Written by the adapter; read by the strategy thunk. */
export interface DialogProps {
    state: DialogState;
    activePreviewPane: StatefulView<PreviewPaneProps>;
}
/** Construction-time config for `DialogView`. Frozen after construction. */
export interface DialogConfig {
    theme: Theme;
    questions: readonly QuestionData[];
    tabBar: TabBar | undefined;
    notesInput: Input;
    chatRow: ChatRowView;
    isMulti: boolean;
    tabsByIndex: ReadonlyArray<TabComponents>;
    /** Optional so single-question mode and non-submit tests can omit it; SubmitTabStrategy falls back to Spacer rows. */
    submitPicker?: Component;
    /** Worst-case body height across all tabs/options. Determines the stable overall dialog footprint. */
    getBodyHeight: (width: number) => number;
    /** Body height of the CURRENTLY active tab/option. The chrome subtracts this from `getBodyHeight` to absorb the residual OUTSIDE the bordered region. */
    getCurrentBodyHeight: (width: number) => number;
}
/**
 * The 7th renderable, promoted from a structural literal to a named class so
 * all view-layer components share one explicit `implements StatefulView<P>`
 * contract. `setProps(DialogProps)` writes the live cell read by the
 * strategy thunk during `render()`. `liveProps.activePreviewPane` is a
 * resolved pane reference threaded by the adapter per tick — the dialog
 * itself does not derive it.
 */
export declare class DialogView implements StatefulView<DialogProps> {
    private liveProps;
    private readonly config;
    private readonly questionStrategy;
    private readonly submitStrategy;
    private readonly maxFooterRowCount;
    constructor(config: DialogConfig, initialProps: DialogProps);
    setProps(props: DialogProps): void;
    handleInput(_data: string): void;
    invalidate(): void;
    render(width: number): string[];
    private buildContainerFromStrategy;
}
//# sourceMappingURL=dialog-builder.d.ts.map