import { useState, useRef, useEffect } from "react"; import { cn, isClosedSessionStatus } from "../lib/utils"; import { Square, SendHorizonal } from "lucide-react"; interface ControlBarProps { sessionId: string; sessionStatus: string | null; activityMode: string; onSend: (text: string) => Promise; onInterrupt: () => Promise; } export function ControlBar({ sessionId, sessionStatus, activityMode, onSend, onInterrupt, }: ControlBarProps) { const [text, setText] = useState(""); const inputRef = useRef(null); const closed = isClosedSessionStatus(sessionStatus); const working = activityMode === "working"; const handleSend = async () => { const trimmed = text.trim(); if (!trimmed || closed) return; setText(""); try { await onSend(trimmed); } catch { setText(trimmed); } }; const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === "Enter" && !e.shiftKey && !e.nativeEvent?.isComposing) { e.preventDefault(); handleSend(); } }; useEffect(() => { inputRef.current?.focus(); }, [sessionId]); return (
setText(e.target.value)} onKeyDown={handleKeyDown} placeholder={closed ? "Session is closed" : "Type a message..."} disabled={closed} className="flex-1 rounded-lg border border-border bg-surface-2 px-4 py-2.5 text-sm text-text-primary placeholder:text-text-muted focus:border-brand focus:outline-none focus:ring-1 focus:ring-brand/20 disabled:opacity-50 transition-colors" />
); }