import type { MDXComponents } from "mdx/types";
import ShellHighlighter from "@/components/ShellHighlighter";
import LuaHighlighter from "@/components/LuaHighlighter";
function slugify(text: string): string {
return text
.toLowerCase()
.replace(/[^a-z0-9]+/g, "-")
.replace(/(^-|-$)/g, "");
}
export function useMDXComponents(components: MDXComponents): MDXComponents {
return {
h1: ({ children }) => (
{children}
),
h2: ({ children }) => {
const id = typeof children === "string" ? slugify(children) : "";
return (
{children}
);
},
h3: ({ children }) => {
const id = typeof children === "string" ? slugify(children) : "";
return (
{children}
);
},
h4: ({ children }) => (
{children}
),
p: ({ children }) => (
{children}
),
ul: ({ children }) => (
),
ol: ({ children }) => (
{children}
),
li: ({ children }) => {children},
code: ({ children, className }) => {
const isBlock = className?.includes("language-");
const isShell =
className?.includes("language-bash") ||
className?.includes("language-sh") ||
className?.includes("language-shell");
const isLua = className?.includes("language-lua");
if (isBlock) {
if (isShell && typeof children === "string") {
return ;
}
if (isLua && typeof children === "string") {
return ;
}
return (
{children}
);
}
return (
{children}
);
},
pre: ({ children }) => (
{children}
),
blockquote: ({ children }) => (
{children}
),
a: ({ href, children }) => (
{children}
),
table: ({ children }) => (
),
th: ({ children }) => (
{children}
|
),
td: ({ children }) => (
{children}
|
),
hr: () => (
),
...components,
};
}