import { AvatarIcon } from "@/components/bs-icons/avatar"; import { LoadIcon } from "@/components/bs-icons/loading"; import { CodeBlock } from "@/modals/formModal/chatMessage/codeBlock"; import { ChatMessageType } from "@/types/chat"; import { copyText } from "@/utils"; import { useMemo, useRef } from "react"; import ReactMarkdown from "react-markdown"; import rehypeMathjax from "rehype-mathjax"; import remarkGfm from "remark-gfm"; import remarkMath from "remark-math"; import MessageButtons from "./MessageButtons"; import SourceEntry from "./SourceEntry"; import { useMessageStore } from "./messageStore"; // 颜色列表 const colorList = [ "#111", "#FF5733", "#3498DB", "#27AE60", "#E74C3C", "#9B59B6", "#F1C40F", "#34495E", "#16A085", "#E67E22", "#95A5A6" ] export default function MessageBs({ data, onUnlike = () => { }, onSource }: { data: ChatMessageType, onUnlike?: any, onSource?: any }) { const avatarColor = colorList[ (data.sender?.split('').reduce((num, s) => num + s.charCodeAt(), 0) || 0) % colorList.length ] const mkdown = useMemo( () => ( { if (children.length) { if (children[0] === "▍") { return (); } children[0] = (children[0] as string).replace("`▍`", "▍"); } const match = /language-(\w+)/.exec(className || ""); return !inline ? ( ) : ( {children} ); }, }} > {data.message.toString()} ), [data.message, data.message.toString()] ) const messageRef = useRef(null) const handleCopyMessage = () => { copyText(messageRef.current) } const chatId = useMessageStore(state => state.chatId) return
{data.sender &&

{data.sender}

}
{data.message.toString() ?
{mkdown} {/* @user */} {data.receiver &&

@ {data.receiver.user_name}

} {/* 光标 */} {/* {data.message.toString() && !data.end &&
} */}
:
}
{/* 附加信息 */} { !!data.id && data.end &&
onSource?.({ chatId, messageId: data.id, message: data.message || data.thought, })} />
}
};