import React, { ReactElement, JSXElementConstructor } from 'react';
import ReactMarkdown from 'react-markdown';
export function Message({ message }: MessageProps) {
return (
<div
className={`mb-2 p-2 rounded ${
message.sender === 'USER'
? 'bg-blue-600 text-white ml-auto'
: 'bg-gray-200 text-black'
} max-w-[80%]`}
>
{(() => {
switch (typeof message.content) {
case 'string':
return (
<ReactMarkdown className="prose max-w-none">
{message.content}
</ReactMarkdown>
);
case 'object':
if (React.isValidElement(message.content)) {
return message.content;
}
return <div>{JSON.stringify(message.content)}</div>;
default:
return (
<ReactMarkdown className="prose max-w-none">
{String(message.content)}
</ReactMarkdown>
);
}
})()}
</div>
);
}
interface Message {
content: string | ReactElement<unknown, string | JSXElementConstructor<any>> | Record<string, unknown>;
sender: 'USER' | 'ASSISTANT';
}
interface MessageProps {
message: Message;
}