/** * ChatMessageList -- Shared chat message display component. * * Renders a scrollable list of messages with Markdown support. * Used by both the Workspace ChatStream and the Editor ChatPanel. */ import React, { useRef, useEffect } from 'react'; import ReactMarkdown from 'react-markdown'; import remarkGfm from 'remark-gfm'; import { useLanguage } from '../../providers/language/LanguageContext'; export interface ChatMessage { id: string; role: 'user' | 'assistant' | 'system'; content: string; timestamp?: number; } interface ChatMessageListProps { messages: ChatMessage[]; isProcessing?: boolean; emptyMessage?: string; style?: React.CSSProperties; } const _roleColors: Record = { user: 'var(--color-primary, #2563eb)', assistant: 'var(--text-primary, #333)', system: 'var(--text-secondary, #888)', }; export const ChatMessageList: React.FC = ({ messages, isProcessing, emptyMessage, style, }) => { const { t } = useLanguage(); const resolvedEmpty = emptyMessage ?? t('Noch keine Nachrichten.'); const bottomRef = useRef(null); useEffect(() => { bottomRef.current?.scrollIntoView({ behavior: 'smooth' }); }, [messages]); return (
{messages.length === 0 && (
{resolvedEmpty}
)} {messages.map((msg) => (
{msg.role}
{msg.content}
))} {isProcessing && (
{t('Wird verarbeitet…')}
)}
); };