Spaces:
Build error
Build error
import { FC, memo } from "react"; | |
import ReactMarkdown, { Options } from "react-markdown"; | |
import remarkGfm from "remark-gfm"; | |
import remarkMath from "remark-math"; | |
import { CodeBlock } from "./codeblock"; | |
const MemoizedReactMarkdown: FC<Options> = memo( | |
ReactMarkdown, | |
(prevProps, nextProps) => | |
prevProps.children === nextProps.children && | |
prevProps.className === nextProps.className, | |
); | |
export default function Markdown({ content }: { content: string }) { | |
return ( | |
<MemoizedReactMarkdown | |
className="prose dark:prose-invert prose-p:leading-relaxed prose-pre:p-0 break-words" | |
remarkPlugins={[remarkGfm, remarkMath]} | |
components={{ | |
p({ children }) { | |
return <p className="mb-2 last:mb-0">{children}</p>; | |
}, | |
code({ node, inline, className, children, ...props }) { | |
if (children.length) { | |
if (children[0] == "β") { | |
return ( | |
<span className="mt-1 animate-pulse cursor-default">β</span> | |
); | |
} | |
children[0] = (children[0] as string).replace("`β`", "β"); | |
} | |
const match = /language-(\w+)/.exec(className || ""); | |
if (inline) { | |
return ( | |
<code className={className} {...props}> | |
{children} | |
</code> | |
); | |
} | |
return ( | |
<CodeBlock | |
key={Math.random()} | |
language={(match && match[1]) || ""} | |
value={String(children).replace(/\n$/, "")} | |
{...props} | |
/> | |
); | |
}, | |
}} | |
> | |
{content} | |
</MemoizedReactMarkdown> | |
); | |
} | |