import { createFileRoute, notFound } from '@tanstack/react-router' import { DocsLayout } from 'fumadocs-ui/layouts/docs' import { createServerFn } from '@tanstack/react-start' import { source } from '@/lib/source' import browserCollections from 'collections/browser' import { DocsBody, DocsDescription, DocsPage, DocsTitle } from 'fumadocs-ui/layouts/docs/page' import { baseOptions } from '@/lib/layout.shared' import { useFumadocsLoader } from 'fumadocs-core/source/client' import { Suspense } from 'react' import { useMDXComponents } from '@/components/mdx' export const Route = createFileRoute('/docs/$')({ component: Page, loader: async ({ params }) => { const slugs = params._splat?.split('/') ?? [] const data = await serverLoader({ data: slugs }) await clientLoader.preload(data.path) return data }, }) const serverLoader = createServerFn({ method: 'GET', }) .validator((slugs: string[]) => slugs) .handler(async ({ data: slugs }) => { const page = source.getPage(slugs) if (!page) throw notFound() return { path: page.path, pageTree: await source.serializePageTree(source.getPageTree()), } }) const clientLoader = browserCollections.docs.createClientLoader({ component({ toc, frontmatter, default: MDX }, _props: undefined) { return ( {frontmatter.title} {frontmatter.description} ) }, }) function Page() { const data = useFumadocsLoader(Route.useLoaderData()) return ( {clientLoader.useContent(data.path)} ) }