'use client'; import { Attachment, Message } from 'ai'; import { useChat } from 'ai/react'; import { AnimatePresence } from 'framer-motion'; import { useState } from 'react'; import { useWindowSize } from 'usehooks-ts'; import { ChatHeader } from '@/components/custom/chat-header'; import { Message as PreviewMessage } from '@/components/custom/message'; import { useScrollToBottom } from '@/components/custom/use-scroll-to-bottom'; import { Canvas, UICanvas } from './canvas'; import { CanvasStreamHandler } from './canvas-stream-handler'; import { MultimodalInput } from './multimodal-input'; import { Overview } from './overview'; export function Chat({ id, initialMessages, selectedModelId, }: { id: string; initialMessages: Array; selectedModelId: string; }) { const { messages, setMessages, handleSubmit, input, setInput, append, isLoading, stop, data: streamingData, } = useChat({ body: { id, modelId: selectedModelId }, initialMessages, onFinish: () => { window.history.replaceState({}, '', `/chat/${id}`); }, }); const { width: windowWidth = 1920, height: windowHeight = 1080 } = useWindowSize(); const [canvas, setCanvas] = useState({ documentId: 'init', content: '', title: '', status: 'idle', isVisible: false, boundingBox: { top: windowHeight / 4, left: windowWidth / 4, width: 250, height: 50, }, }); const [messagesContainerRef, messagesEndRef] = useScrollToBottom(); const [attachments, setAttachments] = useState>([]); return ( <>
{messages.length === 0 && } {messages.map((message) => ( ))}
{canvas && canvas.isVisible && ( )} ); }