import { AssistantMessageProps } from "../props"; import { useChatContext } from "../ChatContext"; import { Markdown } from "../Markdown"; import { useState } from "react"; import React from "react"; import { copyToClipboard } from "@copilotkit/shared"; export const AssistantMessage = (props: AssistantMessageProps) => { const { icons, labels } = useChatContext(); const { message, isLoading, onRegenerate, onCopy, onThumbsUp, onThumbsDown, isCurrentMessage, feedback, markdownTagRenderers, } = props; const [copied, setCopied] = useState(false); const handleCopy = async () => { const content = message?.content || ""; if (!content) return; const success = await copyToClipboard(content); if (success) { setCopied(true); if (onCopy) onCopy(content); setTimeout(() => setCopied(false), 2000); } }; const handleRegenerate = () => { if (onRegenerate) onRegenerate(); }; const handleThumbsUp = () => { if (onThumbsUp && message) { onThumbsUp(message); } }; const handleThumbsDown = () => { if (onThumbsDown && message) { onThumbsDown(message); } }; const LoadingIcon = () => {icons.activityIcon}; const content = message?.content || ""; const subComponent = message?.generativeUI?.() ?? props.subComponent; const subComponentPosition = message?.generativeUIPosition ?? "after"; const renderBefore = subComponent && subComponentPosition === "before"; const renderAfter = subComponent && subComponentPosition !== "before"; return ( <> {renderBefore ? (