import type { Route } from "./+types/page"; import { useFumadocsLoader } from "fumadocs-core/source/client"; import { DocsLayout } from "fumadocs-ui/layouts/docs"; import { DocsBody, DocsDescription, DocsPage, DocsTitle, MarkdownCopyButton, ViewOptionsPopover, } from "fumadocs-ui/layouts/docs/page"; import { use } from "react"; import { useMDXComponents } from "@/components/mdx"; import { baseOptions } from "@/lib/layout.shared"; import { docs, getPageMarkdownUrl, source } from "@/lib/source"; export async function loader({ params }: Route.LoaderArgs) { const slugs = params["*"].split("/").filter((v) => v.length > 0); const page = source.getPage(slugs); if (!page) throw new Response("Not found", { status: 404 }); return { path: page.path, markdownUrl: getPageMarkdownUrl(page).url, pageTree: await source.serializePageTree(source.getPageTree()), }; } function Content({ path, markdownUrl }: { path: string; markdownUrl: string }) { const page = docs.getPage(path); if (!page) throw new Error(`unknown page: ${path}`); // content is loaded lazily, call `page.preload()` in the loader to avoid suspending const { toc } = use(page.load()); const Mdx = page.body; return ( {page.title} {page.title} {page.description}
); } export default function Page({ loaderData }: Route.ComponentProps) { const { pageTree, path, markdownUrl } = useFumadocsLoader(loaderData); return ( ); }