import React from "react";
import type { ImageAttachment } from "../../utils/image.js";
import { type SlashCommandInfo } from "./SlashCommandMenu.js";
import type { TaskListItem } from "../../core/task-store.js";
export interface PasteInfo {
    offset: number;
    length: number;
    lineCount: number;
}
interface InputAreaProps {
    onSubmit: (value: string, images: ImageAttachment[], paste?: PasteInfo) => void;
    onAbort: () => void;
    /**
     * Text to push into the composer from outside (e.g. queued messages restored
     * after an interrupt). Bumping `nonce` re-triggers injection even when the
     * text is unchanged. Injected text is appended after any existing draft.
     */
    injectText?: {
        text: string;
        nonce: number;
    } | null;
    disabled?: boolean;
    isActive?: boolean;
    onDownAtEnd?: () => void;
    onShiftTab?: () => void;
    onToggleTasks?: () => void;
    taskPickerOpen?: boolean;
    tasks?: readonly TaskListItem[];
    onCloseTaskPicker?: () => void;
    onStartTask?: (task: TaskListItem) => void;
    onRunAllTasks?: (task?: TaskListItem) => void;
    onDeleteTask?: (task: TaskListItem) => void;
    onToggleSkills?: () => void;
    onTogglePixel?: () => void;
    onToggleGoal?: () => void;
    onToggleMarkdown?: () => void;
    onToggleAutoApprove?: () => void;
    cwd: string;
    commands?: SlashCommandInfo[];
    /**
     * Locked badge rendered before the prompt arrow on the first visual line.
     * The user cannot delete or edit it — typed text always follows. Used by
     * downstream tools (ezboss) to show the active scope/project pill.
     */
    scopeBadge?: React.ReactNode;
    /**
     * Skip the SGR mouse-tracking enable/disable dance entirely. Some terminals
     * (notably Ghostty mid-2026) interpret rapid `\x1b[?1000h` / `\x1b[?1006h`
     * mode toggles as bracketed-paste boundaries, which makes the terminal
     * paste whatever's in the system clipboard repeatedly during high-frequency
     * UI updates (e.g. when workers are running and the input rapidly rerenders).
     * Setting this to true disables click-to-cursor inside the input but kills
     * the phantom-paste bug. Default: false (mouse tracking enabled, ezcoder
     * behaviour preserved).
     */
    disableMouseTracking?: boolean;
    /**
     * Fired when the user presses Tab (outside slash-completion mode). Used by
     * downstream tools (ezboss) to cycle the scope badge.
     */
    onTab?: () => void;
    /**
     * Fullscreen alt-screen mode: there is no native scrollback, so mouse-wheel
     * events must drive the in-app transcript scroll instead of being passed
     * through to the terminal. When set, wheel-up/down call `onScroll` and mouse
     * tracking is kept enabled regardless of input text so wheel events arrive.
     */
    mouseScroll?: boolean;
    /**
     * Called with a signed line delta when the user scrolls the mouse wheel in
     * fullscreen mode. Positive = scroll UP (older output), negative = DOWN.
     */
    onScroll?: (deltaLines: number) => void;
}
export declare function InputArea({ onSubmit, onAbort, injectText, disabled, isActive, onDownAtEnd, onShiftTab, onToggleTasks, taskPickerOpen, tasks, onCloseTaskPicker, onStartTask, onRunAllTasks, onDeleteTask, onToggleSkills, onTogglePixel, onToggleGoal, onToggleMarkdown, onToggleAutoApprove, cwd, commands, scopeBadge, disableMouseTracking, mouseScroll, onScroll, onTab, }: InputAreaProps): import("react/jsx-runtime").JSX.Element;
export {};
//# sourceMappingURL=InputArea.d.ts.map