import { useState } from "react"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { v4 as uuidv4 } from "uuid"; import { useChatInteract, useChatMessages, IStep, } from "@chainlit/react-client"; export function Playground() { const [inputValue, setInputValue] = useState(""); const { sendMessage } = useChatInteract(); const { messages } = useChatMessages(); const handleSendMessage = () => { const content = inputValue.trim(); if (content) { const message: IStep = { id: uuidv4(), name: "user", type: "user_message", output: content, createdAt: new Date().toISOString(), }; sendMessage(message, []); setInputValue(""); } }; const renderMessage = (message: IStep) => { const dateOptions: Intl.DateTimeFormatOptions = { hour: "2-digit", minute: "2-digit", }; const date = new Date(message.createdAt).toLocaleTimeString(undefined, dateOptions); return ( <div key={message.id} className="flex items-start space-x-2"> <div className="w-20 text-sm text-green-500">{message.name}</div> <div className="flex-1 border rounded-lg p-2"> <p className="text-black dark:text-white">{message.output}</p> <small className="text-xs text-gray-500">{date}</small> </div> </div> ); }; return ( // Apply the scrollable container to the entire Playground <div className="playground-container bg-gray-100 dark:bg-gray-900 flex flex-col" style={{ borderRadius: '10px' }}> <div style={{ backgroundColor: '#d00404', height: '50px' }}> {/* Add your content for the red section here */} </div> <div className="flex-1 overflow-auto p-6"> <div className="space-y-4"> {messages.map((message) => renderMessage(message))} </div> </div> <div className="border-t p-4 bg-white dark:bg-gray-800"> <div className="flex items-center space-x-2"> <Input autoFocus className="flex-1" id="message-input" placeholder="Type a message" value={inputValue} onChange={(e) => setInputValue(e.target.value)} onKeyUp={(e) => { if (e.key === "Enter") { handleSendMessage(); } }} /> <Button onClick={handleSendMessage} type="submit"> Send </Button> </div> </div> </div> ); }