diff --git a/susconecta/app/(main-routes)/pacientes/page.tsx b/susconecta/app/(main-routes)/pacientes/page.tsx index f983e68..aa149a4 100644 --- a/susconecta/app/(main-routes)/pacientes/page.tsx +++ b/susconecta/app/(main-routes)/pacientes/page.tsx @@ -297,7 +297,7 @@ export default function PacientesPage() { aria-label="Ordenar por" value={sortBy} onChange={(e) => setSortBy(e.target.value as any)} - className="h-8 sm:h-9 rounded-md border border-input bg-background px-2 sm:px-3 py-1 text-xs sm:text-sm shadow-sm focus:outline-none focus:ring-2 focus:ring-primary hover:border-primary transition-colors cursor-pointer" + className="h-8 sm:h-9 rounded-md border border-input bg-background px-2 sm:px-3 py-1 text-xs sm:text-sm shadow-sm focus:outline-none focus:ring-2 focus:ring-primary hover:border-primary transition-colors cursor-pointer" > diff --git a/susconecta/components/ZoeIA/demo-file-upload.tsx b/susconecta/components/ZoeIA/demo-file-upload.tsx new file mode 100644 index 0000000..ab6a240 --- /dev/null +++ b/susconecta/components/ZoeIA/demo-file-upload.tsx @@ -0,0 +1,5 @@ +import Component from "@/components/ui/file-upload-and-chat"; + +export default function FileUploadChat() { + return ; +} diff --git a/susconecta/components/features/pacientes/chat-widget.tsx b/susconecta/components/features/pacientes/chat-widget.tsx index f038ea2..f389724 100644 --- a/susconecta/components/features/pacientes/chat-widget.tsx +++ b/susconecta/components/features/pacientes/chat-widget.tsx @@ -5,10 +5,7 @@ import { useEffect, useMemo, useState } from "react"; import { ArrowLeft, Mic, MicOff, Sparkles } from "lucide-react"; import { Button } from "@/components/ui/button"; -import { - AIAssistantInterface, - ChatSession, -} from "@/components/ZoeIA/ai-assistant-interface"; +import FileUploadChat from "@/components/ui/file-upload-and-chat"; import { VoicePoweredOrb } from "@/components/ZoeIA/voice-powered-orb"; export function ChatWidget() { @@ -16,7 +13,6 @@ export function ChatWidget() { const [realtimeOpen, setRealtimeOpen] = useState(false); const [isRecording, setIsRecording] = useState(false); const [voiceDetected, setVoiceDetected] = useState(false); - const [history, setHistory] = useState([]); useEffect(() => { if (!assistantOpen && !realtimeOpen) return; @@ -33,7 +29,7 @@ export function ChatWidget() { () => ( ), [] @@ -71,48 +67,26 @@ export function ChatWidget() { openRealtime(); }; - const handleUpsertHistory = (session: ChatSession) => { - setHistory((previous) => { - const index = previous.findIndex((item) => item.id === session.id); - if (index >= 0) { - const updated = [...previous]; - updated[index] = session; - return updated; - } - return [...previous, session]; - }); - }; - - const handleClearHistory = () => { - setHistory([]); - }; - return ( <> {assistantOpen && (
-
+
- +
)} @@ -120,7 +94,7 @@ export function ChatWidget() { {realtimeOpen && (
+ +
+
+ + {/* Description */} +

+ Organizamos exames, orientações e tarefas assistenciais em um painel único para acelerar decisões clínicas. Utilize a Zoe para revisar resultados, registrar percepções e alinhar próximos passos com a equipe de saúde. +

+ + {/* Security Info */} +
+ + Suas informações permanecem criptografadas e seguras com a equipe Zoe. +
+ + {/* Info Section */} +
+
+ + Informativo importante +
+

+ A Zoe acompanha toda a jornada clínica, consolida exames e registra orientações para que você tenha clareza em cada etapa do cuidado. As respostas são informativas e complementam a avaliação de um profissional de saúde qualificado. +

+

+ Em situações de urgência, entre em contato com a equipe médica presencial ou acione os serviços de emergência da sua região. +

+
+ + {/* Files Ready to Send */} + {uploadedFiles.length > 0 && ( +
+
+

+ Files ready to send ({uploadedFiles.length}) +

+ +
+
+ {uploadedFiles.map(file => ( +
+ {getFileIcon(file.name)} +
+

{file.name}

+

{formatFileSize(file.size)}

+
+ +
+ ))} +
+
+ )} +
+ + + {/* Chat Area */} +
+ {/* Chat Header */} +
+
+
+

Chat with AI Assistant

+ Online +
+
+ + {/* Chat Messages */} +
+ {messages.map((message: any) => ( +
+ {message.type !== 'system' && message.type === 'ai' && ( + + Z + + )} + +
+ {message.content &&

{message.content}

} + {message.files && message.files.length > 0 && ( +
+ {message.files.map((file: any) => ( +
+ {getFileIcon(file.name)} + {file.name} + ({formatFileSize(file.size)}) +
+ ))} +
+ )} +

+ {message.timestamp.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })} +

+
+ + {message.type === 'user' && ( +
+ +
+ )} +
+ ))} + + {/* Typing Indicator */} + {isTyping && ( +
+ + Z + +
+
+
+
+
+
+
+
+ )} + +
+
+ + {/* Chat Input */} +
+
+ + +
+