import { type Component } from "@earendil-works/pi-tui"; import type { QuestionData } from "../../../tool/types.js"; import type { StatefulView } from "../../stateful-view.ts"; import type { OptionListView } from "../option-list-view.ts"; import type { PreviewBlockRenderer } from "./preview-block-renderer.ts"; export { MAX_PREVIEW_HEIGHT_SIDE_BY_SIDE, MAX_PREVIEW_HEIGHT_STACKED, NO_PREVIEW_TEXT, NOTES_AFFORDANCE_OVERHEAD, } from "./markdown-content-cache.ts"; export { NOTES_AFFORDANCE_TEXT, PreviewBlockRenderer } from "./preview-block-renderer.ts"; export { BORDER_HORIZONTAL_OVERHEAD, BORDER_INNER_PADDING_HORIZONTAL, BORDER_VERTICAL_OVERHEAD, BOX_MIN_CONTENT_WIDTH, renderBorderedBox, stripFenceMarkers, } from "./preview-box-renderer.ts"; export { PREVIEW_COLUMN_GAP, PREVIEW_MIN_WIDTH, PREVIEW_PADDING_LEFT, STACKED_GAP_ROWS, } from "./preview-layout-decider.ts"; /** * Per-tick projection of PreviewPane state. Replaces the prior * `setNotesVisible(boolean)` sliver-setter and the sibling reads of * `optionListView.getSelectedIndex()` / `isFocused()`. The pane now reads * `selectedIndex` and `focused` from its own props — both derived from * canonical state via `selectPreviewPaneProps`. `OptionListView` and * `PreviewPane` see the same source of truth without the cross-component * live read. */ export interface PreviewPaneProps { notesVisible: boolean; selectedIndex: number; focused: boolean; } export interface PreviewPaneConfig { question: QuestionData; getTerminalWidth: () => number; optionListView: OptionListView; previewBlock: PreviewBlockRenderer; } /** * Thin layout composer. Receives `selectedIndex` / `focused` / `notesVisible` * via `setProps` per tick (computed by `selectPreviewPaneProps` from canonical * state). Delegates option-side rendering to `OptionListView` (which still * owns its render-time state — input buffer, confirmedIndex) and preview-side * rendering to `PreviewBlockRenderer` (which owns the markdown cache and * bordered-box composition). * * `naturalHeight` and `maxNaturalHeight` query both children's heights; `render` * combines them via `decideLayout` (mode threaded into both calls — never * re-derived). */ export declare class PreviewPane implements StatefulView, Component { private readonly question; private readonly getTerminalWidth; private readonly optionListView; private readonly previewBlock; private props; /** * Cross-tab max left-width getter. Set exactly once by `buildQuestionnaire.injectGlobalLeftWidth` * before any render. Initialized to a throwing sentinel so missing injection is a hard fail * rather than a silent fallback to a magic constant — render is illegal until injected. */ private globalLeftWidth; constructor(config: PreviewPaneConfig); setGlobalLeftWidth(getter: (paneWidth: number) => number): void; private getAdaptiveLeft; setProps(props: PreviewPaneProps): void; handleInput(_data: string): void; invalidate(): void; render(width: number): string[]; naturalHeight(width: number): number; maxNaturalHeight(width: number): number; private renderSideBySide; private renderPaddedPreviewLines; } //# sourceMappingURL=preview-pane.d.ts.map