import React, { useRef } from 'react'; import { Box, Paper, Typography, Avatar, useMediaQuery, useTheme } from '@mui/material'; import ReactMarkdown from 'react-markdown'; // @ts-ignore // 临时忽略类型声明缺失,等待官方类型包或自定义声明 import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'; // @ts-ignore import { dark } from 'react-syntax-highlighter/dist/cjs/styles/prism'; import type { Message as MessageType } from '../types/types'; interface MessageProps { message: MessageType; isLast?: boolean; } const Message: React.FC = ({ message, isLast = false }) => { const isUser = message.role === 'user'; const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down('sm')); const paperRef = useRef(null); // 计算气泡的borderRadius const borderRadius = isUser ? '18px 18px 4px 18px' : '18px 18px 18px 4px'; return ( {!isUser && ( 🤖 )} {String(children).replace(/\n$/, '')} ) : ( {children} ); }, p: ({ ...props }) => , h1: ({ ...props }) => , h2: ({ ...props }) => , h3: ({ ...props }) => , ul: ({ ...props }) =>