import { FC } from 'react'; import { AssistantModeConfig } from '../../conversation'; import { AssistantMode } from '../../types'; import { AssistantAttachment } from '../../attachments'; interface Props { /** * Writes would be refused in this workspace. Advisory only — the mode stays * fully usable for planning; this exists so the refusal is known BEFORE the * user invests a turn in it, not after. */ writeAccessDenied?: boolean; /** * Send the message. `attachments` are already uploaded and ready; the chat * area folds them into the prompt and onto the user bubble. */ onSend: (message: string, attachments: AssistantAttachment[]) => void; /** True while a turn is in-flight (assistant busy) — disables send + shows the spinner. */ disabled?: boolean; placeholder?: string; mode: AssistantMode; /** Role-filtered list of modes the user may pick. */ availableModes: AssistantModeConfig[]; /** * How many characters of an attached text or document file to KEEP — the * largest per-file limit among ALL the product's modes (BOFF-7334). The send * cuts each file to the sending mode's own limit. * * ★ All modes, not `availableModes`. That list is role-filtered, and while the * role check loads it omits an admin-only mode — so a file attached in that * window was cut to 8,000 characters for good, and the Build mode the admin * switched to a moment later received 8,000 of the 100,000 it asks for. * Absent: the shared default, `MAX_INLINE_CHARS_PER_FILE`. */ attachmentCharsPerFile?: number; onModeChange: (mode: AssistantMode) => void; /** * Opens the hands-free voice conversation. Omitted where a voice session * cannot work at all (no speech input, or nothing able to speak the reply), * which is what hides the control rather than offering a dead button. */ onStartVoiceSession?: () => void; } /** * AssistantComposer — the v2 input surface (per the ai-assistant-v2 mockups). * * A rounded card with, on the input row: a leading circular "+" attach control, * an auto-growing textarea, a microphone, and a prominent filled forest-green * circular send button. BELOW the input sit the mode pills ("Ask" active-green / * "Take action" outline); ABOVE it, chips for any pending attachments. * * Multimodal input (Workstreams 2–3) arrives through three converging paths — * the attach button, drag-and-drop onto the card, and paste (a screenshot from * the clipboard is the single most common way a user shares one) — plus voice * dictation, which appends recognised speech to the draft so it can still be * edited before sending. * * Fully controlled (React state for the text) with auto-grow via a layout * effect. Enter sends, Shift+Enter inserts a newline. */ export declare const AssistantComposer: FC; export {}; //# sourceMappingURL=AssistantComposer.d.ts.map