import React from "react";
import type { DOMElement } from "ink";
import type { Provider, ThinkingLevel } from "@kenkaiiii/gg-ai";
import type { ContextWindowOptions } from "../../core/model-registry.js";
import type { TaskRecord } from "../../core/tasks-store.js";
import type { SlashCommandInfo } from "./SlashCommandMenu.js";
import type { ImageAttachment } from "../../utils/image.js";
import type { CompletedItem } from "../app-items.js";
import type { FooterStatusLayoutDecision } from "./BackgroundTasksBar.js";
import type { ThemeName, useTheme } from "../theme/theme.js";
import { type PasteInfo } from "./InputArea.js";
import type { LiveToolEntry } from "./LiveToolPanel.js";
import type { ActivityPhase, RetryInfo } from "../hooks/useAgentLoop.js";
import type { BackgroundProcess } from "../../core/process-manager.js";
interface ChatInputControls {
    onSubmit: (value: string, images: ImageAttachment[], paste?: PasteInfo) => void;
    onAbort: () => void;
    injectText?: {
        text: string;
        nonce: number;
    } | null;
    inputActive: boolean;
    onDownAtEnd: () => void;
    onShiftTab: () => void;
    onToggleTasks: () => void;
    onToggleSkills: () => void;
    onTogglePixel: () => void;
    onToggleMarkdown: () => void;
    cwd: string;
    commands: SlashCommandInfo[];
    /** Fullscreen alt-screen: route mouse-wheel to the transcript scroll. */
    mouseScroll?: boolean;
    onScroll?: (deltaLines: number) => void;
}
interface TaskPickerControls {
    open: boolean;
    tasks: readonly TaskRecord[];
    onClose: () => void;
    onStart: (task: TaskRecord) => void;
    onRunAll: (task?: TaskRecord) => void;
    onDelete: (task: TaskRecord) => void;
}
interface ChatScreenProps {
    columns: number;
    liveItems: CompletedItem[];
    renderItem: (item: CompletedItem, index: number, items: CompletedItem[]) => React.ReactNode;
    isRunning: boolean;
    visibleStreamingText: string;
    streamingThinking: string;
    thinkingMs: number;
    reserveStreamingSpacing: boolean;
    renderMarkdown: boolean;
    measuredLiveAreaRows: number;
    /**
     * Fullscreen alt-screen viewport mode. When true, the transcript is rendered
     * inside Ink (history + liveItems + streaming) as a bounded, app-scrolled
     * region, and the controls below it are pinned to the bottom of a full-height
     * frame. When false, the legacy scrollback `ChatLivePane` tail is used.
     */
    fullscreen?: boolean;
    rows: number;
    transcriptLines: readonly string[];
    viewportRows: number;
    assistantMarginTop: number;
    streamingContinuation: boolean;
    controlsRef: (node: DOMElement | null) => void;
    hiddenQueuedCount: number;
    queueIndicatorMarginTop: number;
    theme: ReturnType<typeof useTheme>;
    statusSlotVisible: boolean;
    activityVisible: boolean;
    stallStatusVisible: boolean;
    liveToolFeed: readonly LiveToolEntry[];
    doneStatus: {
        verb: string;
        durationMs: number;
    } | null;
    activityPhase: ActivityPhase;
    elapsedMs: number;
    runStartRef: React.RefObject<number>;
    isThinking: boolean;
    thinkingLevel?: ThinkingLevel;
    tokenEstimate: number;
    charCountRef: React.RefObject<number>;
    realTokensAccumRef: React.RefObject<number>;
    lastUserMessage?: string;
    activeToolNames: string[];
    retryInfo?: RetryInfo | null;
    planDone: number;
    planTotal: number;
    formatDuration: (durationMs: number) => string;
    inputControls: ChatInputControls;
    taskPicker: TaskPickerControls;
    overlay: string | null;
    onModelSelect: (modelId: string) => void;
    onModelCancel: () => void;
    loggedInProviders: Provider[];
    currentModel: string;
    currentProvider: Provider;
    onThemeSelect: (themeName: ThemeName) => void;
    onThemeCancel: () => void;
    currentTheme: string;
    contextUsed: number;
    contextWindowOptions?: ContextWindowOptions;
    displayedCwd: string;
    gitBranch?: string | null;
    planMode: boolean;
    exitPending: boolean;
    footerStatusLayout: FooterStatusLayoutDecision;
    backgroundTasks: BackgroundProcess[];
    taskBarFocused: boolean;
    taskBarExpanded: boolean;
    selectedTaskIndex: number;
    onTaskBarExpand: () => void;
    onTaskBarCollapse: () => void;
    onTaskKill: (id: string) => void;
    onTaskBarExit: () => void;
    onTaskNavigate: (index: number) => void;
}
export declare function ChatScreen({ columns, liveItems, renderItem, isRunning, visibleStreamingText, streamingThinking, thinkingMs, reserveStreamingSpacing, renderMarkdown, measuredLiveAreaRows, fullscreen, rows, transcriptLines, viewportRows, assistantMarginTop, streamingContinuation, controlsRef, hiddenQueuedCount, queueIndicatorMarginTop, theme, statusSlotVisible, activityVisible, stallStatusVisible, liveToolFeed, doneStatus, activityPhase, elapsedMs, runStartRef, isThinking, thinkingLevel, tokenEstimate, charCountRef, realTokensAccumRef, lastUserMessage, activeToolNames, retryInfo, planDone, planTotal, formatDuration, inputControls, taskPicker, overlay, onModelSelect, onModelCancel, loggedInProviders, currentModel, currentProvider, onThemeSelect, onThemeCancel, currentTheme, contextUsed, contextWindowOptions, displayedCwd, gitBranch, planMode, exitPending, footerStatusLayout, backgroundTasks, taskBarFocused, taskBarExpanded, selectedTaskIndex, onTaskBarExpand, onTaskBarCollapse, onTaskKill, onTaskBarExit, onTaskNavigate, }: ChatScreenProps): React.JSX.Element;
export {};
//# sourceMappingURL=ChatScreen.d.ts.map