mirror of
https://wget.la/https://github.com/leookun/cursor-byok
synced 2026-10-03 18:23:51 +08:00
- Introduced a new documentation site for Cursor BYOK using Next.js and Fumadocs. - Added a product demo page with a corresponding Vite configuration. - Implemented a demo API to simulate LLM calls and responses. - Enhanced the Makefile to include new build and development commands for the documentation. - Updated package.json scripts for building and running the documentation site. - Created various components and layouts for the documentation structure, including blog and user documentation sections. - Added styling for the new components and layouts to ensure a cohesive design. - Included a README and other necessary files for local development and deployment.
62 lines
2.0 KiB
TypeScript
62 lines
2.0 KiB
TypeScript
import Link from 'next/link';
|
|
import type { Metadata } from 'next';
|
|
import { notFound } from 'next/navigation';
|
|
import { ArrowLeft } from 'lucide-react';
|
|
import { InlineTOC } from 'fumadocs-ui/components/inline-toc';
|
|
import { createRelativeLink } from 'fumadocs-ui/mdx';
|
|
import { getMDXComponents } from '@/components/mdx';
|
|
import { blogSource, formatBlogDate } from '@/lib/blog';
|
|
|
|
export default async function BlogPostPage(props: PageProps<'/blog/[slug]'>) {
|
|
const { slug } = await props.params;
|
|
const page = blogSource.getPage([slug]);
|
|
if (!page) notFound();
|
|
|
|
const MDX = page.data.body;
|
|
|
|
return (
|
|
<main className="mx-auto w-full max-w-3xl px-6 py-12 sm:py-20">
|
|
<article>
|
|
<Link
|
|
href="/blog"
|
|
className="mb-10 inline-flex items-center gap-2 text-sm text-fd-muted-foreground transition-colors hover:text-fd-foreground"
|
|
>
|
|
<ArrowLeft className="size-4" />
|
|
返回开发者博客
|
|
</Link>
|
|
|
|
<header className="border-b pb-8">
|
|
<time className="text-sm text-fd-muted-foreground">{formatBlogDate(page.path)}</time>
|
|
<h1 className="mt-4 text-3xl font-bold tracking-tight sm:text-4xl">{page.data.title}</h1>
|
|
<p className="mt-4 text-lg leading-8 text-fd-muted-foreground">{page.data.description}</p>
|
|
<p className="mt-5 text-sm font-medium">cursor-byok 开发团队</p>
|
|
</header>
|
|
|
|
<div className="prose mt-10 min-w-0">
|
|
<InlineTOC items={page.data.toc} />
|
|
<MDX
|
|
components={getMDXComponents({
|
|
a: createRelativeLink(blogSource, page),
|
|
})}
|
|
/>
|
|
</div>
|
|
</article>
|
|
</main>
|
|
);
|
|
}
|
|
|
|
export function generateStaticParams() {
|
|
return blogSource.getPages().map((page) => ({ slug: page.slugs[0] }));
|
|
}
|
|
|
|
export async function generateMetadata(props: PageProps<'/blog/[slug]'>): Promise<Metadata> {
|
|
const { slug } = await props.params;
|
|
const page = blogSource.getPage([slug]);
|
|
if (!page) notFound();
|
|
|
|
return {
|
|
title: page.data.title,
|
|
description: page.data.description,
|
|
};
|
|
}
|