/**
 * ComposerPanel — the authoring panel at the bottom of the REPL.
 *
 * Provides the shared frame for the three modes (input / slash picker /
 * permission prompt). Pre-submit authoring surface; transitions into
 * post-submit user block (src/native/tui/user-block.ts) upon Enter.
 *
 * Visual elements (shared with user block for language unity — spec §7):
 *   - Left accent bar ▎ painted by Ink's custom borderStyle, replicating
 *     on EVERY row of the body (not just the top row). Border color is
 *     the authoring accent (rose-mauve #D787AF).
 *   - Background tint #5F5F87 (blue-violet slate — same as user block's
 *     256-color 60 bg) applied to the body Box so draft content sits on
 *     the same colored band the submitted user block uses. "Submit"
 *     reads as a pure state transition, not a format swap.
 *   - One-cell left padding after the bar.
 *   - Bottom ─ separator across the pane width.
 *   - State rail beneath the separator.
 *
 * Layout (rows, top-to-bottom):
 *   1. Body Box with custom left-only border (▎ × N rows) + bg tint.
 *      Children render here with paddingLeft=1 after the border.
 *   2. Separator ─ row (dim).
 *   3. Rail row (single-line rail string from renderComposerRail).
 *
 * The previous design painted the left bar as a single <Text> in a
 * width=2 column — that only rendered on row 1 of the body because
 * <Text> height is 1 regardless of sibling body height. Switching to
 * Ink's borderStyle with a custom BoxStyle makes Ink replicate the
 * left char across every row of the Box. See src/ink/render-border.ts
 * BorderStyle = keyof Boxes | BoxStyle — BoxStyle accepts custom
 * corner/edge chars.
 */
import React from 'react';
export interface ComposerPanelProps {
    /**
     * The composer's active mode body: input / slash picker / permission prompt.
     * Optional because React.createElement's varargs-children form doesn't
     * reliably mark required `children` props as satisfied; typing it optional
     * also allows the panel to render alone (accent bar + separator + rail) as
     * a valid empty-body state, matching React's own practice for component
     * children.
     */
    readonly children?: React.ReactNode;
    /** Single-line state rail string (produced by renderComposerRail). */
    readonly rail: string;
    /**
     * Visible display-row count of the TextInput content (before wrap).
     * Drives minHeight on the bg-tinted Box so the authoring band grows
     * with Shift+Enter and contains multi-line rendering.
     *
     * IMPORTANT: only pass this in the TextInput mode. Overlay (slash
     * picker) and permission-prompt modes render their own content,
     * which has its own natural height — forcing a minHeight in those
     * modes paints an oversized empty bg slab below the overlay.
     * Leave undefined to let the body fit its children with no minimum.
     */
    readonly bodyLines?: number;
}
/**
 * One attachment chip — terminal port of the design's `.oc-attach` pill.
 *
 * The product's attachment surface today is purely path-based (the
 * `@file` reference inserted by the file picker), so callers can derive
 * this list by scanning the current input. When real file uploads land
 * the same chip surface picks them up without changes here.
 */
export interface ComposerAttachment {
    /** Visual kind: img → 🖼 thumb, dir → ▸, file → ◰. */
    readonly kind: 'img' | 'file' | 'dir';
    /** Display name (path or filename). */
    readonly name: string;
    /** Optional pre-formatted size string (e.g. "12 KB"). */
    readonly size?: string;
}
export interface ComposerInputChromeProps {
    /** Runtime mode retained for callers/rail coordination; not shown in the input row. */
    readonly mode: string;
    /** Optional queued message summary shown above the active input row. */
    readonly queued?: string | null;
    /** Terminal column budget for truncating queued summaries. */
    readonly columns?: number;
    /** Inline attachment chips rendered above the prompt row. */
    readonly attachments?: readonly ComposerAttachment[];
    /** The actual TextInput component. */
    readonly children?: React.ReactNode;
}
export declare function ComposerInputChrome({ mode, queued, columns, attachments, children, }: ComposerInputChromeProps): React.ReactElement;
export declare function parseInputAttachments(input: string): ComposerAttachment[];
export declare function ComposerPanel({ children, rail, bodyLines }: ComposerPanelProps): React.ReactElement;
