'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 && (
)}
)
}