import React from "react";
interface TerminalSizeValue {
    columns: number;
    rows: number;
    resizeKey: number;
}
/**
 * Provider that attaches a single resize listener to stdout and shares
 * { columns, rows, resizeKey } with all descendants via context.
 *
 * Mount this once near the root of the component tree (e.g. in render.ts
 * or App.tsx) to avoid the MaxListenersExceededWarning that occurs when
 * every component independently listens for resize events.
 */
export declare function TerminalSizeProvider({ children, isAgentRunning, fullscreen, }: React.PropsWithChildren<{
    /**
     * Optional getter — when it returns true, the resize debounce skips its
     * resizeKey bump while the agent is running. The deferred resetUI() in
     * App.tsx cleans up reflow drift the moment the agent goes idle, so the
     * visual cost of skipping here is minimal.
     */
    isAgentRunning?: () => boolean;
    /**
     * Fullscreen alt-screen mode. Ink owns the whole screen and repaints the
     * full-height frame in place, so on resize we only re-measure dimensions —
     * no manual screen clear (which would flash) and no resizeKey bump (the
     * full-height layout reflows on the dimension change alone).
     */
    fullscreen?: boolean;
}>): React.FunctionComponentElement<React.ProviderProps<TerminalSizeValue | null>>;
/**
 * Returns { columns, rows, resizeKey } from the nearest TerminalSizeProvider.
 *
 * All values (`columns`, `rows`, `resizeKey`) update together after resize
 * events settle (300ms debounce).  Updating dimensions immediately would
 * trigger React re-renders on every resize event while Ink's internal
 * line-tracking still assumes the old width, causing ghost/duplicate renders.
 *
 * `resizeKey` can be used as a React `key` to force live-area remounts after
 * terminal dimensions settle.
 */
export declare function useTerminalSize(): TerminalSizeValue;
export {};
//# sourceMappingURL=useTerminalSize.d.ts.map