mirror of
https://github.com/shadcn-ui/ui.git
synced 2026-02-08 18:39:31 +08:00
81 lines
2.6 KiB
TypeScript
81 lines
2.6 KiB
TypeScript
import { notFound } from "next/navigation"
|
|
import { allDocs } from "contentlayer/generated"
|
|
|
|
import "@/styles/mdx.css"
|
|
import Link from "next/link"
|
|
|
|
import { getTableOfContents } from "@/lib/toc"
|
|
import { Icons } from "@/components/icons"
|
|
import { Mdx } from "@/components/mdx"
|
|
import { DocsPageHeader } from "@/components/page-header"
|
|
import { DocsPager } from "@/components/pager"
|
|
import { DashboardTableOfContents } from "@/components/toc"
|
|
import { Separator } from "@/components/ui/separator"
|
|
|
|
interface DocPageProps {
|
|
params: {
|
|
slug: string[]
|
|
}
|
|
}
|
|
|
|
export async function generateStaticParams(): Promise<
|
|
DocPageProps["params"][]
|
|
> {
|
|
return allDocs.map((doc) => ({
|
|
slug: doc.slugAsParams.split("/"),
|
|
}))
|
|
}
|
|
|
|
export default async function DocPage({ params }: DocPageProps) {
|
|
const slug = params?.slug?.join("/") || ""
|
|
const doc = allDocs.find((doc) => doc.slugAsParams === slug)
|
|
|
|
if (!doc) {
|
|
notFound()
|
|
}
|
|
|
|
const toc = await getTableOfContents(doc.body.raw)
|
|
|
|
return (
|
|
<main className="relative py-6 lg:gap-10 lg:py-10 xl:grid xl:grid-cols-[1fr_300px]">
|
|
<div className="mx-auto w-full min-w-0">
|
|
<DocsPageHeader heading={doc.title} text={doc.description}>
|
|
{doc.radix ? (
|
|
<div className="flex items-center space-x-2 pt-4">
|
|
{doc.radix?.link && (
|
|
<Link
|
|
href={doc.radix.link}
|
|
target="_blank"
|
|
rel="noreferrer"
|
|
className="inline-flex items-center rounded-full bg-slate-100 px-2.5 py-1 text-xs font-semibold text-slate-900 transition-colors hover:bg-slate-700 hover:text-slate-50"
|
|
>
|
|
<Icons.radix className="mr-1 h-3 w-3" />
|
|
Radix UI
|
|
</Link>
|
|
)}
|
|
{doc.radix?.api && (
|
|
<Link
|
|
href={doc.radix.api}
|
|
target="_blank"
|
|
rel="noreferrer"
|
|
className="inline-flex items-center rounded-full bg-slate-100 px-2.5 py-1 text-xs font-semibold text-slate-900 transition-colors hover:bg-slate-700 hover:text-slate-50"
|
|
>
|
|
API Reference
|
|
</Link>
|
|
)}
|
|
</div>
|
|
) : null}
|
|
</DocsPageHeader>
|
|
<Mdx code={doc.body.code} />
|
|
<Separator className="my-4 md:my-6" />
|
|
<DocsPager doc={doc} />
|
|
</div>
|
|
<div className="hidden text-sm xl:block">
|
|
<div className="sticky top-16 -mt-10 max-h-[calc(var(--vh)-4rem)] overflow-y-auto pt-10">
|
|
<DashboardTableOfContents toc={toc} />
|
|
</div>
|
|
</div>
|
|
</main>
|
|
)
|
|
}
|