2026-08-16 00:54:15 +02:00
|
|
|
import ReactMarkdown from "react-markdown";
|
|
|
|
|
import remarkGfm from "remark-gfm";
|
2026-08-16 00:58:14 +02:00
|
|
|
import { cn } from "@/lib/utils";
|
2026-08-16 00:54:15 +02:00
|
|
|
|
|
|
|
|
export function MarkdownViewer({ content }: { content: string }) {
|
|
|
|
|
return (
|
2026-08-16 00:58:14 +02:00
|
|
|
<div
|
|
|
|
|
className={cn(
|
|
|
|
|
"prose prose-neutral dark:prose-invert max-w-none",
|
|
|
|
|
"prose-pre:bg-muted prose-pre:text-foreground",
|
|
|
|
|
// Typography's default inline `code` style is just bold text wrapped in decorative
|
|
|
|
|
// backtick characters - swap that for the same muted pill used for inline code
|
|
|
|
|
// elsewhere in the app (see the "no scripts configured" message on the dashboard).
|
|
|
|
|
"prose-code:before:content-none prose-code:after:content-none",
|
|
|
|
|
"prose-code:rounded prose-code:bg-muted prose-code:px-1.5 prose-code:py-0.5 prose-code:font-mono prose-code:font-normal prose-code:text-foreground",
|
|
|
|
|
)}
|
|
|
|
|
>
|
2026-08-16 00:54:15 +02:00
|
|
|
<ReactMarkdown remarkPlugins={[remarkGfm]}>{content}</ReactMarkdown>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|