Skip to content

Commit ed09ef3

Browse files
committed
docs: pages -> app router
1 parent 41869ef commit ed09ef3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+1084
-733
lines changed

examples/next-ts/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@
9696
"image-conversion": "2.1.1",
9797
"lucide-react": "0.548.0",
9898
"match-sorter": "8.1.0",
99-
"next": "16.0.1",
99+
"next": "16.0.6",
100100
"next-cloudinary": "6.17.0",
101101
"react": "19.2.0",
102102
"react-dom": "19.2.0",
@@ -106,7 +106,7 @@
106106
"virtua": "^0.46.4"
107107
},
108108
"devDependencies": {
109-
"@next/eslint-plugin-next": "16.0.1",
109+
"@next/eslint-plugin-next": "16.0.6",
110110
"@types/form-serialize": "0.7.4",
111111
"@types/node": "24.9.2",
112112
"@types/react": "^19",

examples/preact-ts/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@
9595
},
9696
"devDependencies": {
9797
"@preact/preset-vite": "2.10.2",
98-
"eslint": "9.38.0",
98+
"eslint": "9.39.1",
9999
"eslint-config-preact": "2.0.0",
100100
"typescript": "5.9.3",
101101
"vite": "7.1.12"

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,21 +69,21 @@
6969
"@changesets/cli": "2.29.7",
7070
"@commitlint/cli": "20.1.0",
7171
"@commitlint/config-conventional": "20.0.0",
72-
"@eslint/eslintrc": "3.3.1",
72+
"@eslint/eslintrc": "3.3.3",
7373
"@internationalized/date": "3.10.0",
7474
"@octokit/rest": "22.0.1",
7575
"@playwright/test": "1.56.1",
7676
"@swc/core": "1.15.0",
7777
"@types/jsdom": "^27.0.0",
7878
"@types/node": "24.10.0",
7979
"@types/signale": "1.4.7",
80-
"@typescript-eslint/eslint-plugin": "8.46.3",
81-
"@typescript-eslint/parser": "8.46.3",
80+
"@typescript-eslint/eslint-plugin": "8.48.0",
81+
"@typescript-eslint/parser": "8.48.0",
8282
"axe-core": "4.11.0",
8383
"commitlint": "20.1.0",
8484
"cross-env": "^10.1.0",
8585
"dotenv": "17.2.3",
86-
"eslint": "9.38.0",
86+
"eslint": "9.39.1",
8787
"eslint-config-prettier": "10.1.8",
8888
"eslint-plugin-import": "2.32.0",
8989
"eslint-plugin-prettier": "5.5.4",

pnpm-lock.yaml

Lines changed: 445 additions & 282 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

starters/react/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,18 +71,18 @@
7171
"form-serialize": "0.7.2",
7272
"match-sorter": "8.1.0",
7373
"lucide-react": "0.548.0",
74-
"next": "16.0.1",
74+
"next": "16.0.6",
7575
"react": "19.2.0",
7676
"react-dom": "19.2.0",
7777
"react-spinners": "0.17.0"
7878
},
7979
"devDependencies": {
80-
"@next/eslint-plugin-next": "16.0.1",
80+
"@next/eslint-plugin-next": "16.0.6",
8181
"@types/node": "24.9.2",
8282
"@types/react": "^19",
8383
"@types/react-dom": "^19",
84-
"eslint": "9.38.0",
85-
"eslint-config-next": "16.0.1",
84+
"eslint": "9.39.1",
85+
"eslint-config-next": "16.0.6",
8686
"typescript": "5.9.3"
8787
}
8888
}

website/app/api/demo/route.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { getComponentDemo } from "../../../lib/demo-utils"
2+
import { NextRequest, NextResponse } from "next/server"
3+
4+
export async function POST(request: NextRequest) {
5+
try {
6+
const body = await request.json()
7+
const { component, defaultProps } = body
8+
9+
console.log("[demo] component", component)
10+
console.log("[demo] defaultProps", defaultProps)
11+
12+
const demo = await getComponentDemo(component, defaultProps)
13+
console.log("[demo] response", demo)
14+
15+
return NextResponse.json({ success: true, demo })
16+
} catch (error) {
17+
return NextResponse.json(
18+
{ success: false, error: (error as Error).message },
19+
{ status: 500 },
20+
)
21+
}
22+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
"use client"
2+
3+
import type { Component } from ".velite"
4+
import { FrameworkProvider } from "components/framework"
5+
import { useMDX } from "components/mdx-components"
6+
import DocsLayout from "../../docs-layout"
7+
import type { Framework } from "lib/framework-utils"
8+
9+
type ComponentPageClientProps = {
10+
doc: Component
11+
framework: Framework
12+
}
13+
14+
export default function ComponentPageClient({
15+
doc,
16+
framework,
17+
}: ComponentPageClientProps) {
18+
const mdx = useMDX(doc.body.code)
19+
20+
return (
21+
<FrameworkProvider value={framework}>
22+
<DocsLayout doc={doc}>{mdx}</DocsLayout>
23+
</FrameworkProvider>
24+
)
25+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import {
2+
extractParams,
3+
getComponentDoc,
4+
getComponentPaths,
5+
} from "lib/contentlayer-utils"
6+
import type { Metadata } from "next"
7+
import ComponentPageClient from "./client"
8+
9+
type PageProps = {
10+
params: Promise<{ slug: string[] }>
11+
}
12+
13+
export async function generateMetadata({
14+
params,
15+
}: PageProps): Promise<Metadata> {
16+
const { slug } = await params
17+
const { slug: componentSlug } = extractParams(slug)
18+
const doc = getComponentDoc(componentSlug)
19+
20+
return {
21+
title: doc.title,
22+
description: doc.description,
23+
}
24+
}
25+
26+
export async function generateStaticParams() {
27+
return getComponentPaths().map((path) => ({
28+
slug: path.params.slug,
29+
}))
30+
}
31+
32+
export default async function ComponentPage({ params }: PageProps) {
33+
const { slug } = await params
34+
const { framework, slug: componentSlug } = extractParams(slug)
35+
const doc = getComponentDoc(componentSlug)
36+
37+
return <ComponentPageClient doc={doc} framework={framework} />
38+
}

website/app/docs-layout.tsx

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
"use client"
2+
3+
import { FrameworkSelect } from "components/framework-select"
4+
import { MdxFooter } from "components/mdx-footer"
5+
import { EditPageLink } from "components/mdx/edit-page-link"
6+
import { Search } from "components/search-dialog"
7+
import { Sidebar } from "components/sidebar"
8+
import { SkipNavContent, SkipNavLink } from "components/skip-nav"
9+
import { TableOfContents } from "components/toc"
10+
import { TopNavigation } from "components/top-navigation"
11+
import { Box, Spacer, styled } from "styled-system/jsx"
12+
13+
type DocsLayoutProps = {
14+
children: React.ReactNode
15+
doc: any
16+
toc?: {
17+
title?: string
18+
data?: any[]
19+
getSlug?: (slug: string) => string
20+
}
21+
}
22+
23+
export default function DocsLayout(props: DocsLayoutProps) {
24+
const { children, doc, toc } = props
25+
const tableOfContent = toc?.data ?? doc.frontmatter?.toc ?? []
26+
const hideToc = tableOfContent.length < 2
27+
28+
return (
29+
<Box>
30+
<SkipNavLink>Skip to main content</SkipNavLink>
31+
<TopNavigation />
32+
<styled.div pt="10">
33+
<SkipNavContent />
34+
<Box maxW="8xl" mx="auto" px={{ sm: "6", base: "4", md: "8" }}>
35+
<Box
36+
display={{ base: "none", lg: "block" }}
37+
position="fixed"
38+
zIndex={20}
39+
bottom="0"
40+
top="4rem"
41+
left="max(0px, calc(50% - 45rem - calc(var(--scrollbar-width, 0px) / 2)))"
42+
right="auto"
43+
width="19.5rem"
44+
pb="10"
45+
px="8"
46+
overflowY="auto"
47+
overscrollBehavior="contain"
48+
>
49+
<Box position="relative">
50+
<Box position="sticky" top="0" bg="bg.subtle" pb="8">
51+
<Spacer height="10" bg="transparent" />
52+
<Search />
53+
<Spacer mt="px" height="5" bg="transparent" />
54+
<FrameworkSelect />
55+
</Box>
56+
<Sidebar />
57+
</Box>
58+
</Box>
59+
60+
<Box
61+
as="main"
62+
className="mdx-content"
63+
pl={{ lg: "19.5rem" }}
64+
pt="4"
65+
pr={{ xl: "16" }}
66+
>
67+
<Box mr={{ xl: "15.5rem" }}>
68+
{children}
69+
{doc?.editUrl && (
70+
<EditPageLink href={doc.editUrl}>
71+
Edit this page on GitHub
72+
</EditPageLink>
73+
)}
74+
<MdxFooter />
75+
</Box>
76+
</Box>
77+
78+
<Box
79+
py="10"
80+
px="8"
81+
overflowY="auto"
82+
position="fixed"
83+
top="3.8rem"
84+
bottom="0"
85+
right="max(0px,calc(50% - 45rem + calc(var(--scrollbar-width, 0px) / 2)))"
86+
display={{ base: "none", xl: "block" }}
87+
width="19.5rem"
88+
visibility={hideToc ? "hidden" : undefined}
89+
>
90+
<TableOfContents
91+
title={toc?.title}
92+
data={tableOfContent}
93+
getSlug={toc?.getSlug}
94+
/>
95+
</Box>
96+
</Box>
97+
</styled.div>
98+
</Box>
99+
)
100+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
"use client"
2+
3+
import type { Guide } from ".velite"
4+
import { useMDX } from "components/mdx-components"
5+
import DocsLayout from "../../docs-layout"
6+
7+
type GuidePageClientProps = {
8+
doc: Guide
9+
}
10+
11+
export default function GuidePageClient({ doc }: GuidePageClientProps) {
12+
const mdx = useMDX(doc.body.code)
13+
14+
return <DocsLayout doc={doc}>{mdx}</DocsLayout>
15+
}

0 commit comments

Comments
 (0)