|
import React from "react";
|
|
import { ExtraProps } from "react-markdown";
|
|
import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
|
|
import { vscDarkPlus } from "react-syntax-highlighter/dist/esm/styles/prism";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function code({
|
|
children,
|
|
className,
|
|
}: React.ClassAttributes<HTMLElement> &
|
|
React.HTMLAttributes<HTMLElement> &
|
|
ExtraProps) {
|
|
const match = /language-(\w+)/.exec(className || "");
|
|
|
|
if (!match) {
|
|
const isMultiline = String(children).includes("\n");
|
|
|
|
if (!isMultiline) {
|
|
return (
|
|
<code
|
|
className={className}
|
|
style={{
|
|
backgroundColor: "#2a3038",
|
|
padding: "0.2em 0.4em",
|
|
borderRadius: "4px",
|
|
color: "#e6edf3",
|
|
border: "1px solid #30363d",
|
|
}}
|
|
>
|
|
{children}
|
|
</code>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<pre
|
|
style={{
|
|
backgroundColor: "#2a3038",
|
|
padding: "1em",
|
|
borderRadius: "4px",
|
|
color: "#e6edf3",
|
|
border: "1px solid #30363d",
|
|
overflow: "auto",
|
|
}}
|
|
>
|
|
<code className={className}>{String(children).replace(/\n$/, "")}</code>
|
|
</pre>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<SyntaxHighlighter
|
|
className="rounded-lg"
|
|
style={vscDarkPlus}
|
|
language={match?.[1]}
|
|
PreTag="div"
|
|
>
|
|
{String(children).replace(/\n$/, "")}
|
|
</SyntaxHighlighter>
|
|
);
|
|
}
|
|
|