import React from "react"; interface TranscriptViewportProps { /** Flat ANSI transcript lines (history + liveItems + streaming, serialized). */ lines: readonly string[]; /** Terminal width — bounds each rendered row. */ columns: number; /** Number of rows the transcript region occupies. */ viewportRows: number; } /** * Bounded, bottom-anchored transcript region rendered entirely inside Ink. * * Renders a windowed slice of the pre-flattened transcript line buffer as * truncated rows. The controls sit below it in the same full-height * frame, so the footer stays pinned to the bottom while the transcript scrolls * *within* this box. * * Sizing: `height={viewportRows}` is the PREFERRED height, but the box is * `flexShrink={1}` so it yields when the controls region grows taller than * expected — e.g. when the slash-command menu or a task picker opens below * the input. Without this the menu would overflow off the bottom of the screen * (it's pinned). `justifyContent="flex-end"` + `overflowY="hidden"` means any * shrink clips the OLDEST rows at the top, keeping the newest output and the * controls visible. */ declare function TranscriptViewportImpl({ lines, columns, viewportRows }: TranscriptViewportProps): import("react/jsx-runtime").JSX.Element; /** * Memoized so unrelated App re-renders (streaming ticks, footer timers, status * shimmer) don't force the transcript subtree to reconcile. It only re-renders * when its line buffer, dimensions, or scroll offset actually change. */ export declare const TranscriptViewport: React.MemoExoticComponent; export {}; //# sourceMappingURL=TranscriptViewport.d.ts.map