import { useState } from 'react'; import type { ComponentProps } from 'react'; import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'; import { oneDark as prismOneDark } from 'react-syntax-highlighter/dist/esm/styles/prism'; import { copyTextToClipboard } from '../../../../../utils/clipboard'; type MarkdownCodeBlockProps = { inline?: boolean; node?: unknown; } & ComponentProps<'code'>; export default function MarkdownCodeBlock({ inline, className, children, node: _node, ...props }: MarkdownCodeBlockProps) { const [copied, setCopied] = useState(false); const rawContent = Array.isArray(children) ? children.join('') : String(children ?? ''); const looksMultiline = /[\r\n]/.test(rawContent); const shouldRenderInline = inline || !looksMultiline; if (shouldRenderInline) { return ( {children} ); } const languageMatch = /language-(\w+)/.exec(className || ''); const language = languageMatch ? languageMatch[1] : 'text'; return (
{language !== 'text' && (
{language}
)} {rawContent}
); }