import { cn } from "@/lib/utils"; import { ArrowUp } from "lucide-react"; import { useEffect, useRef, useState } from "react"; import TextareaAutosize from "react-textarea-autosize"; import Attach from "./MessageInputActions/Attach"; import CopilotToggle from "./MessageInputActions/Copilot"; const MessageInput = ({ sendMessage, loading }: { sendMessage: (message: string) => void; loading: boolean }) => { const [copilotEnabled, setCopilotEnabled] = useState(false); const [message, setMessage] = useState(""); const [textareaRows, setTextareaRows] = useState(1); const [mode, setMode] = useState<"multi" | "single">("single"); useEffect(() => { if (textareaRows >= 2 && message && mode === "single") { setMode("multi"); } else if (!message && mode === "multi") { setMode("single"); } }, [textareaRows, mode, message]); const inputReference = useRef(null); const handleKeyDown = (e: KeyboardEvent) => { if (e.key === "/") { e.preventDefault(); inputReference.current?.focus(); } }; useEffect(() => { document.addEventListener("keydown", handleKeyDown); return () => { document.removeEventListener("keydown", handleKeyDown); }; }, []); return (
{ if (loading) return; e.preventDefault(); sendMessage(message); setMessage(""); }} onKeyDown={e => { if (e.key === "Enter" && !e.shiftKey && !loading) { e.preventDefault(); sendMessage(message); setMessage(""); } }} className={cn( "bg-light-secondary dark:bg-dark-secondary p-4 flex items-center overflow-hidden border border-light-200 dark:border-dark-200", mode === "multi" ? "flex-col rounded-lg" : "flex-row rounded-full", )} > {mode === "single" && } setMessage(e.target.value)} onHeightChange={(height, properties) => { setTextareaRows(Math.ceil(height / properties.rowHeight)); }} className="transition bg-transparent dark:placeholder:text-white/50 placeholder:text-sm text-sm dark:text-white resize-none focus:outline-none w-full px-2 max-h-24 lg:max-h-36 xl:max-h-48 flex-grow flex-shrink" placeholder="Ask a follow-up" /> {mode === "single" && (
)} {mode === "multi" && (
)} ); }; export default MessageInput;