'use client'; import { Search, Brain, Globe, Package, Loader2, CheckCircle2, XCircle, AlertCircle, ChevronDown, ChevronUp, ExternalLink, Copy, Check } from 'lucide-react'; import { cn } from '@/lib/utils'; import { useState } from 'react'; import type { ThinkingMessageMetadata } from '@/hooks/use-chat'; import { SearchQueriesMonitor } from './search-queries-monitor'; import { ScrapingUrlsMonitor } from './scraping-urls-monitor'; interface MessageStepThinkingProps { metadata: ThinkingMessageMetadata; } export function MessageStepThinking({ metadata }: MessageStepThinkingProps) { const [isExpanded, setIsExpanded] = useState(false); const [copiedIndex, setCopiedIndex] = useState(null); const getStepIcon = () => { const isSpinning = metadata.stepType === 'response-generation' && metadata.status === 'running'; switch (metadata.stepType) { case 'preprocessing': return ; case 'web-research': return ; case 'sources-found': return ; case 'processing': return ; case 'response-generation': return ; case 'fallback': return ; case 'error': return ; default: return ; } }; const copyToClipboard = async (url: string, index: number) => { try { await navigator.clipboard.writeText(url); setCopiedIndex(index); setTimeout(() => setCopiedIndex(null), 2000); } catch (error) { console.error('Failed to copy URL:', error); } }; return (
{getStepIcon()} {metadata.label}
{metadata.status === 'running' && ( )} {(metadata.details || metadata.sources || metadata.error) && ( )}
{/* Progress Bar Compacta */} {metadata.progress !== undefined && metadata.progress < 100 && (
)} {/* Conteúdo Expandido */} {isExpanded && (
{metadata.details && (
{metadata.details}
)} {/* Monitoramento em Tempo Real - Queries */} {metadata.activeQueries && metadata.activeQueries.length > 0 && (
)} {/* Monitoramento em Tempo Real - URLs */} {metadata.activeUrls && metadata.activeUrls.length > 0 && (
)} {metadata.sources && metadata.sources.length > 0 && (
Fontes Encontradas ({metadata.sources.length})
{metadata.sources.map((source, idx) => (
{source.title || source.url}
))}
)} {metadata.error && (
{metadata.error}
)}
)}
); }