192 lines
3.8 KiB
Vue
192 lines
3.8 KiB
Vue
<script setup lang="ts">
|
|
import {
|
|
Collapsible,
|
|
CollapsibleContent,
|
|
CollapsibleTrigger,
|
|
} from '@/registry/default/ui/collapsible'
|
|
|
|
import {
|
|
Sidebar,
|
|
SidebarContent,
|
|
SidebarGroup,
|
|
SidebarGroupContent,
|
|
SidebarMenu,
|
|
SidebarMenuButton,
|
|
SidebarMenuItem,
|
|
SidebarMenuSub,
|
|
SidebarMenuSubButton,
|
|
SidebarMenuSubItem,
|
|
SidebarProvider,
|
|
} from '@/registry/default/ui/sidebar'
|
|
import { ChevronRight } from 'lucide-vue-next'
|
|
|
|
const items = [
|
|
{
|
|
title: 'Getting Started',
|
|
url: '#',
|
|
items: [
|
|
{
|
|
title: 'Installation',
|
|
url: '#',
|
|
},
|
|
{
|
|
title: 'Project Structure',
|
|
url: '#',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
title: 'Building Your Application',
|
|
url: '#',
|
|
items: [
|
|
{
|
|
title: 'Routing',
|
|
url: '#',
|
|
},
|
|
{
|
|
title: 'Data Fetching',
|
|
url: '#',
|
|
isActive: true,
|
|
},
|
|
{
|
|
title: 'Rendering',
|
|
url: '#',
|
|
},
|
|
{
|
|
title: 'Caching',
|
|
url: '#',
|
|
},
|
|
{
|
|
title: 'Styling',
|
|
url: '#',
|
|
},
|
|
{
|
|
title: 'Optimizing',
|
|
url: '#',
|
|
},
|
|
{
|
|
title: 'Configuring',
|
|
url: '#',
|
|
},
|
|
{
|
|
title: 'Testing',
|
|
url: '#',
|
|
},
|
|
{
|
|
title: 'Authentication',
|
|
url: '#',
|
|
},
|
|
{
|
|
title: 'Deploying',
|
|
url: '#',
|
|
},
|
|
{
|
|
title: 'Upgrading',
|
|
url: '#',
|
|
},
|
|
{
|
|
title: 'Examples',
|
|
url: '#',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
title: 'API Reference',
|
|
url: '#',
|
|
items: [
|
|
{
|
|
title: 'Components',
|
|
url: '#',
|
|
},
|
|
{
|
|
title: 'File Conventions',
|
|
url: '#',
|
|
},
|
|
{
|
|
title: 'Functions',
|
|
url: '#',
|
|
},
|
|
{
|
|
title: 'next.config.js Options',
|
|
url: '#',
|
|
},
|
|
{
|
|
title: 'CLI',
|
|
url: '#',
|
|
},
|
|
{
|
|
title: 'Edge Runtime',
|
|
url: '#',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
title: 'Architecture',
|
|
url: '#',
|
|
items: [
|
|
{
|
|
title: 'Accessibility',
|
|
url: '#',
|
|
},
|
|
{
|
|
title: 'Fast Refresh',
|
|
url: '#',
|
|
},
|
|
{
|
|
title: 'Next.js Compiler',
|
|
url: '#',
|
|
},
|
|
{
|
|
title: 'Supported Browsers',
|
|
url: '#',
|
|
},
|
|
{
|
|
title: 'Turbopack',
|
|
url: '#',
|
|
},
|
|
],
|
|
},
|
|
]
|
|
</script>
|
|
|
|
<template>
|
|
<SidebarProvider>
|
|
<Sidebar>
|
|
<SidebarContent>
|
|
<SidebarGroup>
|
|
<SidebarGroupContent>
|
|
<SidebarMenu>
|
|
<Collapsible
|
|
v-for="(item, index) in items"
|
|
:key="index"
|
|
class="group/collapsible"
|
|
:default-open="index === 0"
|
|
>
|
|
<SidebarMenuItem>
|
|
<CollapsibleTrigger as-child>
|
|
<SidebarMenuButton>
|
|
<span>{{ item.title }}</span>
|
|
<ChevronRight class="transition-transform ml-auto group-data-[state=open]/collapsible:rotate-90" />
|
|
</SidebarMenuButton>
|
|
</CollapsibleTrigger>
|
|
<CollapsibleContent>
|
|
<SidebarMenuSub>
|
|
<SidebarMenuSubItem v-for="(subItem, subIndex) in item.items" :key="subIndex">
|
|
<SidebarMenuSubButton as-child>
|
|
<a :href="subItem.url">
|
|
<span>{{ subItem.title }}</span>
|
|
</a>
|
|
</SidebarMenuSubButton>
|
|
</SidebarMenuSubItem>
|
|
</SidebarMenuSub>
|
|
</CollapsibleContent>
|
|
</SidebarMenuItem>
|
|
</Collapsible>
|
|
</SidebarMenu>
|
|
</SidebarGroupContent>
|
|
</SidebarGroup>
|
|
</SidebarContent>
|
|
</Sidebar>
|
|
</SidebarProvider>
|
|
</template>
|