\r\n {\r\n if (ref.current) {\r\n copyToClipboard(\r\n ref.current.querySelector(\"code\")?.innerText ?? \"\",\r\n );\r\n }\r\n }}\r\n >\r\n {props.children}\r\n \r\n {mermaidCode.length > 0 && (\r\n \r\n {props.children}\r\n \r\n\r\n {renderShowMoreButton()}\r\n >\r\n );\r\n}\r\n\r\nfunction escapeBrackets(text: string) {\r\n const pattern =\r\n /(```[\\s\\S]*?```|`.*?`)|\\\\\\[([\\s\\S]*?[^\\\\])\\\\\\]|\\\\\\((.*?)\\\\\\)/g;\r\n return text.replace(\r\n pattern,\r\n (match, codeBlock, squareBracket, roundBracket) => {\r\n if (codeBlock) {\r\n return codeBlock;\r\n } else if (squareBracket) {\r\n return `$$${squareBracket}$$`;\r\n } else if (roundBracket) {\r\n return `$${roundBracket}$`;\r\n }\r\n return match;\r\n },\r\n );\r\n}\r\n\r\nfunction tryWrapHtmlCode(text: string) {\r\n // try add wrap html code (fixed: html codeblock include 2 newline)\r\n // ignore embed codeblock\r\n if (text.includes(\"```\")) {\r\n return text;\r\n }\r\n return text\r\n .replace(\r\n /([`]*?)(\\w*?)([\\n\\r]*?)()/g,\r\n (match, quoteStart, lang, newLine, doctype) => {\r\n return !quoteStart ? \"\\n```html\\n\" + doctype : match;\r\n },\r\n )\r\n .replace(\r\n /(<\\/body>)([\\r\\n\\s]*?)(<\\/html>)([\\n\\r]*)([`]*)([\\n\\r]*?)/g,\r\n (match, bodyEnd, space, htmlEnd, newLine, quoteEnd) => {\r\n return !quoteEnd ? bodyEnd + space + htmlEnd + \"\\n```\\n\" : match;\r\n },\r\n );\r\n}\r\n\r\nfunction _MarkDownContent(props: { content: string }) {\r\n const escapedContent = useMemo(() => {\r\n return tryWrapHtmlCode(escapeBrackets(props.content));\r\n }, [props.content]);\r\n\r\n return (\r\n \r\n \r\n {Locale.Sd.Status.Name}: {s}\r\n \r\n {item.status === \"error\" && (\r\n {\r\n showModal({\r\n title: Locale.Sd.Detail,\r\n children: (\r\n
\r\n {Locale.SdPanel.Prompt}:{\" \"}\r\n {\r\n showModal({\r\n title: Locale.Sd.Detail,\r\n children: (\r\n
\r\n {Locale.SdPanel.AIModel}: {item.model_name}\r\n
\r\n {getSdTaskStatus(item)}\r\n{item.created_at}
\r\n