import { type Component, type Input } from "@earendil-works/pi-tui"; import type { Theme } from "../../../../modes/interactive/theme/theme.js"; import type { QuestionnaireState } from "../state/state.ts"; import type { QuestionData } from "../tool/types.js"; 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; } /** 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; /** 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

` * 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 { 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