Gemma-4-WebGPU / src /components /Markdown.jsx
shreyask's picture
Upload folder using huggingface_hub
c38a89e verified
import ReactMarkdown from "react-markdown";
import remarkGfm from "remark-gfm";
const PLUGINS = [remarkGfm];
const COMPONENTS = {
p: ({ children }) => <p className="mb-3 last:mb-0">{children}</p>,
strong: ({ children }) => <strong className="font-semibold text-[var(--color-text)]">{children}</strong>,
em: ({ children }) => <em className="italic">{children}</em>,
h1: ({ children }) => <h1 className="text-xl font-bold mb-2 mt-4">{children}</h1>,
h2: ({ children }) => <h2 className="text-lg font-bold mb-2 mt-3">{children}</h2>,
h3: ({ children }) => <h3 className="text-base font-bold mb-1 mt-2">{children}</h3>,
ul: ({ children }) => <ul className="list-disc pl-5 mb-3 space-y-1">{children}</ul>,
ol: ({ children }) => <ol className="list-decimal pl-5 mb-3 space-y-1">{children}</ol>,
li: ({ children }) => <li className="leading-relaxed">{children}</li>,
a: ({ href, children }) => (
<a href={href} target="_blank" rel="noopener noreferrer" className="text-[var(--color-blue)] hover:underline">
{children}
</a>
),
blockquote: ({ children }) => (
<blockquote className="border-l-2 border-[var(--color-blue)]/40 pl-3 my-2 text-[var(--color-text-secondary)]">
{children}
</blockquote>
),
code: ({ inline, className, children }) => {
if (inline) {
return (
<code className="px-1.5 py-0.5 bg-[var(--color-surface-high)] rounded text-[13px] font-mono text-[var(--color-blue)]">
{children}
</code>
);
}
const lang = className?.replace("language-", "") || "";
return (
<div className="my-3 rounded-xl overflow-hidden border border-[var(--color-outline)]">
{lang && (
<div className="px-3 py-1.5 bg-[var(--color-surface-high)] text-[10px] font-mono text-[var(--color-text-secondary)] uppercase tracking-wider border-b border-[var(--color-outline)]">
{lang}
</div>
)}
<pre className="p-3 bg-[var(--color-surface)] overflow-x-auto">
<code className="text-[13px] font-mono leading-relaxed text-[var(--color-text)]">
{children}
</code>
</pre>
</div>
);
},
table: ({ children }) => (
<div className="my-3 overflow-x-auto">
<table className="w-full text-sm border-collapse">{children}</table>
</div>
),
th: ({ children }) => (
<th className="text-left px-3 py-2 bg-[var(--color-surface)] border border-[var(--color-outline)] font-medium">
{children}
</th>
),
td: ({ children }) => (
<td className="px-3 py-2 border border-[var(--color-outline)]">{children}</td>
),
hr: () => <hr className="my-4 border-[var(--color-outline)]" />,
};
export default function Markdown({ children }) {
return (
<ReactMarkdown remarkPlugins={PLUGINS} components={COMPONENTS}>
{children}
</ReactMarkdown>
);
}