'use client' import { useState } from 'react' import ReactMarkdown from 'react-markdown' import { cn } from '@/lib/utils' import { ChevronDown, ChevronUp, FileText, User, Bot } from 'lucide-react' import type { ChatMessage as ChatMessageType, SourceReference } from '@/types/chat' interface ChatMessageProps { message: ChatMessageType isStreaming?: boolean } function SourcesList({ sources }: { sources: SourceReference[] }) { const [isExpanded, setIsExpanded] = useState(false) if (sources.length === 0) return null return (
{isExpanded && (
{sources.map((source, index) => (
{source.title} {source.section_title && ( {' '} › {source.section_title} )}
{source.source_file} ({(source.similarity * 100).toFixed(0)}% relevans)
))}
)}
) } export function ChatMessage({ message, isStreaming }: ChatMessageProps) { const isUser = message.role === 'user' return (
{/* Avatar */}
{isUser ? ( ) : ( )}
{/* Message content */}
{isUser ? (

{message.content}

) : ( {message.content} )} {isStreaming && !isUser && ( )}
{!isUser && message.sources && message.sources.length > 0 && ( )}
) }