import { type Component } from "@earendil-works/pi-tui";
import type { QuestionData } from "../../../tool/types.js";
import type { StatefulView } from "../../stateful-view.js";
import type { OptionListView } from "../option-list-view.js";
import type { PreviewBlockRenderer } from "./preview-block-renderer.js";
export { MAX_PREVIEW_HEIGHT_SIDE_BY_SIDE, MAX_PREVIEW_HEIGHT_STACKED, NO_PREVIEW_TEXT, NOTES_AFFORDANCE_OVERHEAD, } from "./markdown-content-cache.js";
export { NOTES_AFFORDANCE_TEXT, PreviewBlockRenderer } from "./preview-block-renderer.js";
export { BORDER_HORIZONTAL_OVERHEAD, BORDER_INNER_PADDING_HORIZONTAL, BORDER_VERTICAL_OVERHEAD, BOX_MIN_CONTENT_WIDTH, renderBorderedBox, stripFenceMarkers, } from "./preview-box-renderer.js";
export { PREVIEW_COLUMN_GAP, PREVIEW_MIN_WIDTH, PREVIEW_PADDING_LEFT, STACKED_GAP_ROWS, } from "./preview-layout-decider.js";
/**
 * 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<PreviewPaneProps>, 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