-
-
Notifications
You must be signed in to change notification settings - Fork 293
Expand file tree
/
Copy pathlayout.tsx
More file actions
104 lines (102 loc) · 3 KB
/
Copy pathlayout.tsx
File metadata and controls
104 lines (102 loc) · 3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import { getSharedLayoutProps } from '@/src/components/shared-layout'
import { SidebarFooter } from '@/src/components/sidebar-footer'
import { categorizeRegistryItems, readRegistry } from '@/src/registry/read'
import { DocsLayout } from 'fumadocs-ui/layouts/notebook'
import type { Metadata } from 'next'
import { notFound } from 'next/navigation'
import { Suspense, type ReactNode } from 'react'
import { SideBanner } from '../banners'
export const metadata = {
alternates: {
types: {
'application/rss+xml': [
{
url: '/registry/rss.xml',
title: '@nuqs shadcn registry RSS feed'
}
]
}
}
} satisfies Metadata
export default async function RegistryLayout({
children
}: {
children: ReactNode
}) {
const sharedLayoutProps = getSharedLayoutProps()
const [registry, error] = await readRegistry()
if (error || !registry) {
notFound()
}
const categories = categorizeRegistryItems(registry)
return (
<>
<DocsLayout
tree={{
$id: 'root',
name: 'Registry',
children: [
{
$id: '#introduction-heading',
type: 'page',
name: 'Shadcn Registry',
url: '/registry',
description:
'Use the shadcn CLI to install custom parsers, adapters and utilities from the community.'
},
{
$id: '#adapters-heading',
type: 'separator',
name: 'Adapters'
},
...categories.adapter.map(item => ({
$id: `#${item.name}`,
type: 'page' as const,
name: item.title.replace(/adapter/gi, '').trim(),
url: `/registry/${item.name}`,
description: item.description
})),
// todo: Enable this when we have parsers
// {
// $id: '#parsers-heading',
// type: 'separator',
// name: 'Parsers'
// },
// ...categories.Parsers.map(item => ({
// $id: `#${item.name}`,
// type: 'page' as const,
// name: item.title,
// url: `/registry/${item.name}`,
// description: item.description
// })),
{
$id: '#utilities-heading',
type: 'separator',
name: 'Utilities'
},
...categories.utility.map(item => ({
$id: `#${item.name}`,
type: 'page' as const,
name: item.title,
url: `/registry/${item.name}`,
description: item.description
}))
]
}}
{...sharedLayoutProps}
nav={{ ...sharedLayoutProps.nav, mode: 'top' }}
sidebar={{
collapsible: false,
banner: <SideBanner />,
footer: (
<Suspense>
<SidebarFooter />
</Suspense>
)
}}
>
{children}
</DocsLayout>
</>
)
}