"use client"; 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 { VoicePoweredOrb } from "@/components/ZoeIA/voice-powered-orb"; export function ChatWidget() { const [assistantOpen, setAssistantOpen] = useState(false); const [realtimeOpen, setRealtimeOpen] = useState(false); const [isRecording, setIsRecording] = useState(false); const [voiceDetected, setVoiceDetected] = useState(false); const [history, setHistory] = useState([]); useEffect(() => { if (!assistantOpen && !realtimeOpen) return; const original = document.body.style.overflow; document.body.style.overflow = "hidden"; return () => { document.body.style.overflow = original; }; }, [assistantOpen, realtimeOpen]); const gradientRing = useMemo( () => ( ), [] ); const openAssistant = () => setAssistantOpen(true); const closeAssistant = () => setAssistantOpen(false); const openRealtime = () => setRealtimeOpen(true); const closeRealtime = () => { setRealtimeOpen(false); setAssistantOpen(true); setIsRecording(false); setVoiceDetected(false); }; const toggleRecording = () => { setIsRecording((prev) => { const next = !prev; if (!next) { setVoiceDetected(false); } return next; }); }; const handleOpenDocuments = () => { console.log("[ChatWidget] Abrindo fluxo de documentos"); closeAssistant(); }; const handleOpenChat = () => { console.log("[ChatWidget] Encaminhando para chat em tempo real"); setAssistantOpen(false); 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 && (
)} {realtimeOpen && (
{voiceDetected && ( Ouvindo… )}

Ative a captura para falar com a equipe em tempo real. Assim que sua voz for detectada, a Zoe sinaliza visualmente e encaminha o atendimento.

)}
); }