import { Box, List, Paper, styled, Typography } from '@mui/material'; import React from 'react'; import { useTranslation } from 'react-i18next'; export interface PreviewMessage { role: string; content: string; } const MessageItem = styled(Paper)(({ theme }) => ({ marginBottom: theme.spacing(1.5), padding: theme.spacing(2), borderRadius: theme.shape.borderRadius, border: `1px solid ${theme.palette.divider}`, transition: 'all 0.2s ease-in-out', '&:hover': { boxShadow: theme.shadows[2], }, })); const RoleChip = styled(Typography, { shouldForwardProp: (property: string) => property !== 'role', })<{ role: string }>(({ theme, role }) => ({ display: 'inline-block', padding: theme.spacing(0.5, 1), borderRadius: Number(theme.shape.borderRadius) / 2, fontSize: 12, fontWeight: 600, marginBottom: theme.spacing(1), background: (() => { switch (role.toLowerCase()) { case 'system': return theme.palette.info.main; case 'assistant': return theme.palette.success.main; case 'user': return theme.palette.primary.main; default: return theme.palette.grey[500]; } })(), color: theme.palette.common.white, })); const EmptyState = styled(Box)(({ theme }) => ({ display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', height: 240, color: theme.palette.text.secondary, '& > svg': { fontSize: 48, marginBottom: theme.spacing(2), opacity: 0.5, }, })); /** * Flat prompt list component */ export const FlatPromptList = ({ flatPrompts }: { flatPrompts?: PreviewMessage[] }): React.ReactElement => { const { t } = useTranslation('agent'); if (!flatPrompts?.length) { return {t('Prompt.NoMessages')}; } return ( {flatPrompts.map((message, index) => ( {message.role.toUpperCase()} {message.content} ))} ); };