SOURCE.IO / src /components /MarkdownView.tsx
Adeen
style: remove width constraints to allow full-width notes
db584ca
import ReactMarkdown from "react-markdown";
import remarkGfm from "remark-gfm";
import remarkMath from "remark-math";
import rehypeKatex from "rehype-katex";
export default function MarkdownView({ children }: { children: string }) {
return (
<div className="max-w-none w-full py-8 px-4 sm:px-16 bg-slate-900/30 rounded-2xl border border-slate-800/50 backdrop-blur-sm shadow-2xl">
<ReactMarkdown
remarkPlugins={[remarkGfm, remarkMath]}
rehypePlugins={[rehypeKatex]}
components={{
h1: ({ children }) => (
<div className="text-center mb-12 mt-4">
<h1 className="text-4xl sm:text-5xl font-bold tracking-tight text-white inline-block relative pb-4">
{children}
<span className="absolute bottom-0 left-1/4 right-1/4 h-1 bg-primary rounded-full opacity-60" />
</h1>
</div>
),
h2: ({ children }) => (
<h2 className="text-2xl sm:text-3xl font-bold mt-12 mb-6 text-white flex items-center gap-3 group">
<span className="w-1.5 h-8 bg-primary rounded-full group-hover:scale-y-110 transition-transform" />
{children}
</h2>
),
h3: ({ children }) => (
<h3 className="text-xl font-semibold mt-8 mb-4 text-slate-100 flex items-center gap-2">
<span className="w-1 h-1 rounded-full bg-primary/60" />
{children}
</h3>
),
p: ({ children }) => (
<p className="text-slate-300 leading-relaxed mb-6 text-lg font-light">
{children}
</p>
),
blockquote: ({ children }) => (
<div className="my-8 p-6 bg-primary/5 border-l-4 border-primary rounded-r-xl backdrop-blur-md">
<div className="text-primary-foreground/90 italic text-lg leading-relaxed font-medium">
{children}
</div>
</div>
),
ul: ({ children }) => (
<ul className="space-y-3 mb-8 ml-4">
{children}
</ul>
),
li: ({ children }) => (
<li className="flex items-start gap-3 text-slate-300 text-lg">
<span className="mt-2.5 w-1.5 h-1.5 rounded-full bg-primary/40 shrink-0" />
<span>{children}</span>
</li>
),
table: ({ children }) => (
<div className="my-10 overflow-hidden rounded-xl border border-slate-800 shadow-xl bg-slate-900/50">
<table className="w-full border-collapse text-left">
{children}
</table>
</div>
),
thead: ({ children }) => (
<thead className="bg-slate-800/80 text-slate-200">
{children}
</thead>
),
th: ({ children }) => (
<th className="px-6 py-4 font-bold uppercase tracking-wider text-xs border-b border-slate-700">
{children}
</th>
),
td: ({ children }) => (
<td className="px-6 py-4 border-b border-slate-800 text-slate-300 text-sm">
{children}
</td>
),
strong: ({ children }) => (
<strong className="font-bold text-primary/90 underline decoration-primary/30 underline-offset-4">
{children}
</strong>
),
hr: () => (
<hr className="my-12 border-t border-slate-800/80" />
),
}}
>
{children}
</ReactMarkdown>
</div>
);
}