import Link from "next/link" import { notFound } from "next/navigation" import { mdxComponents } from "@/mdx-components" import { IconArrowLeft, IconArrowRight } from "@tabler/icons-react" import { findNeighbour } from "fumadocs-core/page-tree" import { replaceComponentsList } from "@/lib/llm" import { source } from "@/lib/source" import { absoluteUrl } from "@/lib/utils" import { DocsBaseSwitcher } from "@/components/docs-base-switcher" import { DocsCopyPage } from "@/components/docs-copy-page" import { DocsTableOfContents } from "@/components/docs-toc" import { OpenInV0Cta } from "@/components/open-in-v0-cta" import { Button } from "@/registry/new-york-v4/ui/button" export const revalidate = false export const dynamic = "force-static" export const dynamicParams = false export function generateStaticParams() { return source.generateParams() } export async function generateMetadata(props: { params: Promise<{ slug: string[] }> }) { const params = await props.params const page = source.getPage(params.slug) if (!page) { notFound() } const doc = page.data if (!doc.title || !doc.description) { notFound() } return { title: doc.title, description: doc.description, alternates: { canonical: page.url, }, openGraph: { title: doc.title, description: doc.description, type: "article", url: absoluteUrl(page.url), images: [ { url: `/og?title=${encodeURIComponent( doc.title )}&description=${encodeURIComponent(doc.description)}`, }, ], }, twitter: { card: "summary_large_image", title: doc.title, description: doc.description, images: [ { url: `/og?title=${encodeURIComponent( doc.title )}&description=${encodeURIComponent(doc.description)}`, }, ], creator: "@shadcn", }, } } export default async function Page(props: { params: Promise<{ slug: string[] }> }) { const params = await props.params const page = source.getPage(params.slug) if (!page) { notFound() } const doc = page.data const MDX = doc.body const isChangelog = params.slug?.[0] === "changelog" const neighbours = isChangelog ? { previous: null, next: null } : findNeighbour(source.pageTree, page.url) const raw = replaceComponentsList(await page.data.getText("raw")) return (
{doc.description}
)}