From b64672fb06f64b6697b3523267e45fbe6594db91 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Thu, 16 Oct 2025 19:01:21 +0000 Subject: [PATCH] Refactor chat message UI --- src/components/ChatHeader.tsx | 18 ++++++-- src/components/chat/ChatMessage.tsx | 66 ++++++++++++++++------------- src/components/chat/ChatView.tsx | 11 ++++- 3 files changed, 61 insertions(+), 34 deletions(-) diff --git a/src/components/ChatHeader.tsx b/src/components/ChatHeader.tsx index 0f0ed5c..b498927 100644 --- a/src/components/ChatHeader.tsx +++ b/src/components/ChatHeader.tsx @@ -9,9 +9,15 @@ import { interface ChatHeaderProps { showModelSelector?: boolean; + selectedModel?: string; + onModelChange?: (model: string) => void; } -export const ChatHeader = ({ showModelSelector = false }: ChatHeaderProps) => { +export const ChatHeader = ({ + showModelSelector = false, + selectedModel = "ChatGPT 4.1", + onModelChange +}: ChatHeaderProps) => { const models = [ "ChatGPT 4.1", "ChatGPT 5", @@ -27,17 +33,21 @@ export const ChatHeader = ({ showModelSelector = false }: ChatHeaderProps) => { Online - {showModelSelector && ( + {showModelSelector && onModelChange && ( {models.map((model) => ( - + onModelChange(model)} + > {model} ))} diff --git a/src/components/chat/ChatMessage.tsx b/src/components/chat/ChatMessage.tsx index c925372..d3c4aec 100644 --- a/src/components/chat/ChatMessage.tsx +++ b/src/components/chat/ChatMessage.tsx @@ -1,16 +1,28 @@ -import { Bot, User, Copy, Edit, Trash2 } from "lucide-react"; +import { Bot, User, Copy } from "lucide-react"; import { Button } from "@/components/ui/button"; +import { Badge } from "@/components/ui/badge"; import { useState } from "react"; +import { useToast } from "@/hooks/use-toast"; interface ChatMessageProps { role: "user" | "assistant"; content: string; + model?: string; } -export const ChatMessage = ({ role, content }: ChatMessageProps) => { +export const ChatMessage = ({ role, content, model }: ChatMessageProps) => { const [showActions, setShowActions] = useState(false); + const { toast } = useToast(); const isAssistant = role === "assistant"; + const handleCopy = () => { + navigator.clipboard.writeText(content); + toast({ + title: "Copiado!", + description: "Mensagem copiada para a área de transferência", + }); + }; + return (
{ onMouseEnter={() => setShowActions(true)} onMouseLeave={() => setShowActions(false)} > -
- {isAssistant ? ( - - ) : ( - +
+
+ {isAssistant ? ( + + ) : ( + + )} +
+ + {isAssistant && model && ( + + {model} + )}
@@ -43,27 +66,12 @@ export const ChatMessage = ({ role, content }: ChatMessageProps) => { - -
)}
diff --git a/src/components/chat/ChatView.tsx b/src/components/chat/ChatView.tsx index 73a353c..7659c8f 100644 --- a/src/components/chat/ChatView.tsx +++ b/src/components/chat/ChatView.tsx @@ -9,15 +9,18 @@ interface Message { id: string; role: "user" | "assistant"; content: string; + model?: string; } export const ChatView = () => { const [isChatSidebarCollapsed, setIsChatSidebarCollapsed] = useState(false); + const [selectedModel, setSelectedModel] = useState("ChatGPT 4.1"); const [messages, setMessages] = useState([ { id: "1", role: "assistant", content: "Olá! Sou o assistente HGTX Codex. Como posso ajudá-lo hoje?", + model: "ChatGPT 4.1", }, ]); @@ -40,6 +43,7 @@ export const ChatView = () => { role: "assistant", content: "Esta é uma resposta simulada. Em breve, estarei conectado a modelos de IA reais para fornecer respostas inteligentes e úteis.", + model: selectedModel, }; setMessages((prev) => [...prev, aiResponse]); setIsLoading(false); @@ -56,7 +60,11 @@ export const ChatView = () => { {/* Main Chat Area */}
- +
@@ -65,6 +73,7 @@ export const ChatView = () => { key={message.id} role={message.role} content={message.content} + model={message.model} /> ))}