import type { MarkdownTheme } from "@earendil-works/pi-tui"; import type { Theme } from "../../../../../../modes/interactive/theme/theme.js"; import type { QuestionData } from "../../../tool/types.js"; import type { PreviewLayoutMode } from "./preview-layout-decider.ts"; /** * Affordance text shown below the bordered preview when focused on a preview-bearing option. * Re-exported by `preview-pane.ts` for the existing test surface. */ export declare const NOTES_AFFORDANCE_TEXT = "Notes: n add notes"; export interface PreviewBlockRendererConfig { question: QuestionData; theme: Theme; markdownTheme: MarkdownTheme; } /** * Renders the bordered markdown preview block for a single question (one block per render call, * for the option at `optionIndex`). Owns a per-question `MarkdownContentCache`. * * NOT a `Component` — pure render-and-measure helper consumed by `PreviewPane`. The layout mode * is threaded as an explicit param (never re-derived from column width post-split). * * The affordance row is always emitted (visually empty when gated) so the preview block's row * count is height-stable across affordance-state transitions. */ export declare class PreviewBlockRenderer { private readonly theme; private readonly cache; constructor(config: PreviewBlockRendererConfig); hasAnyPreview(): boolean; has(optionIndex: number): boolean; invalidate(): void; /** * Height contribution of the preview block: `BORDER_VERTICAL_OVERHEAD + contentRows + * NOTES_AFFORDANCE_OVERHEAD`. Always returns the same value as `renderBlock(...).length` * — the affordance overhead is constant, not gated by `focused`/`notesVisible`. */ blockHeight(width: number, optionIndex: number, mode: PreviewLayoutMode): number; /** * Render the full preview block at `width`: bordered box + blank separator + affordance row. * `focused` and `notesVisible` together gate the affordance text (visible only when the * focused option carries a preview AND notes mode is inactive). The affordance row is ALWAYS * emitted (as an empty string when gated) so the row count is invariant. */ renderBlock(width: number, optionIndex: number, mode: PreviewLayoutMode, focused: boolean, notesVisible: boolean): string[]; } //# sourceMappingURL=preview-block-renderer.d.ts.map