import { Group, Image, Paper, Stack, Text } from "@mantine/core"; import { CopyButton } from "../CopyButton/CopyButton"; export interface MessageBubbleProps { index: number; role: "user" | "assistant"; content: string; imageContent?: { data: string; mimeType: string }; audioContent?: { data: string; mimeType: string }; } function buildDataUri(mimeType: string, data: string): string { return `data:${mimeType};base64,${data}`; } function formatRoleLabel(index: number, role: string): string { return `[${index}] role: ${role}`; } function formatQuotedContent(content: string): string { return `"${content}"`; } const BubbleContainer = Paper.withProps({ p: "md", radius: "md", withBorder: true, }); const RoleLabel = Text.withProps({ size: "xs", c: "dimmed", }); const PreviewImage = Image.withProps({ maw: 300, radius: "sm", mt: "xs", }); export function MessageBubble({ index, role, content, imageContent, audioContent, }: MessageBubbleProps) { return ( {formatRoleLabel(index, role)} {formatQuotedContent(content)} {imageContent && ( )} {audioContent && ( )} ); }