50 lines
1.4 KiB
TypeScript
50 lines
1.4 KiB
TypeScript
"use client";
|
|
|
|
import ReactMarkdown from "react-markdown";
|
|
import remarkGfm from "remark-gfm";
|
|
|
|
export function MarkdownContent({ content }: { content: string }) {
|
|
return (
|
|
<ReactMarkdown
|
|
remarkPlugins={[remarkGfm]}
|
|
components={{
|
|
a: ({ children, ...props }) => (
|
|
<a
|
|
{...props}
|
|
className="font-medium text-primary underline underline-offset-4"
|
|
target="_blank"
|
|
rel="noreferrer"
|
|
>
|
|
{children}
|
|
</a>
|
|
),
|
|
p: ({ children }) => (
|
|
<p className="mb-3 leading-7 last:mb-0">{children}</p>
|
|
),
|
|
ul: ({ children }) => (
|
|
<ul className="mb-3 list-disc space-y-1 pl-5">{children}</ul>
|
|
),
|
|
ol: ({ children }) => (
|
|
<ol className="mb-3 list-decimal space-y-1 pl-5">{children}</ol>
|
|
),
|
|
h1: ({ children }) => (
|
|
<h1 className="mb-3 text-2xl font-semibold">{children}</h1>
|
|
),
|
|
h2: ({ children }) => (
|
|
<h2 className="mb-3 text-xl font-semibold">{children}</h2>
|
|
),
|
|
h3: ({ children }) => (
|
|
<h3 className="mb-2 text-lg font-semibold">{children}</h3>
|
|
),
|
|
blockquote: ({ children }) => (
|
|
<blockquote className="mb-3 border-l-4 pl-4 text-muted-foreground">
|
|
{children}
|
|
</blockquote>
|
|
),
|
|
}}
|
|
>
|
|
{content}
|
|
</ReactMarkdown>
|
|
);
|
|
}
|