/**
 * OwlCoda Fullscreen Layout
 *
 * Layout primitives mirroring an upstream Ink FullscreenLayout +
 * ScrollBox + VirtualMessageList chain.
 *
 * - ScrollableTranscript: virtual-scrolling transcript container
 *   with imperative scroll API and scroll indicators. Owns app-side
 *   keyboard scrolling while leaving mouse selection, copy, and wheel
 *   scrollback to the terminal.
 *
 * - FullscreenLayout: splits the terminal into scrollable top + fixed bottom,
 *   matching upstream's two-slot design.
 */
import React from 'react';
import { type TranscriptItem } from './repl-shared.js';
export interface ScrollHandle {
    /** Scroll to absolute line offset from bottom (0 = live). */
    scrollTo(y: number): void;
    /** Scroll by delta lines (negative = older/up, positive = newer/down). */
    scrollBy(dy: number): void;
    /** Jump to live (bottom) and re-enable sticky follow. */
    scrollToBottom(): void;
    /** Current scroll offset from live. */
    getScrollOffset(): number;
    /** True when scroll follows new content (at live position). */
    isSticky(): boolean;
    /** Repin to live, clear new-content counter. */
    repin(): void;
}
export interface ScrollableTranscriptProps {
    /** Transcript items to render. */
    items: TranscriptItem[];
    /** Extra content after items (live response preview, inline status). */
    tail?: React.ReactNode;
    /** Footer below tail (notices, hints). */
    footer?: React.ReactNode;
    /** Height of this area in terminal rows. */
    height: number;
    /** Full terminal width. */
    cols: number;
    /** Lines consumed by tail content (for budget calculation). */
    tailLines: number;
    /** Lines consumed by footer content. */
    footerLines: number;
    /** Is a task currently active? Affects scroll indicator. */
    isLoading: boolean;
    /** Imperative scroll control. */
    scrollRef?: React.Ref<ScrollHandle>;
}
export declare const ScrollableTranscript: React.NamedExoticComponent<ScrollableTranscriptProps>;
export interface FullscreenLayoutProps {
    /** Scrollable content (transcript area). */
    scrollable: React.ReactNode;
    /** Fixed bottom (input area + status bar). */
    bottom: React.ReactNode;
    /** Total terminal height. */
    height: number;
}
export declare function FullscreenLayout({ scrollable, bottom, height, }: FullscreenLayoutProps): React.ReactElement;
