Sidebar
v1.0.0
Navigation
A collapsible sidebar navigation component with smooth animations and responsive behavior.
Dependencies
@radix-ui/react-slot
framer-motion
Installation
Add this component to your project
CLI Installation
npx shadcn@latest add https://ui.authmate.xyz/registry/sidebar.jsonManual Installation
// 1. Install dependencies
npm install @radix-ui/react-slot framer-motion
// 2. Copy the component code to components/ui/sidebar.tsx
// 3. Usage example:
import {
Sidebar,
SidebarProvider,
SidebarContent,
SidebarMenu,
SidebarMenuItem,
SidebarMenuButton,
} from "@/components/ui/sidebar"
import { Home, Settings } from 'lucide-react'
const links = [
{ label: "Home", href: "/", icon: Home },
{ label: "Settings", href: "/settings", icon: Settings },
]
export function MySidebar() {
return (
<SidebarProvider>
<Sidebar>
<SidebarContent>
<SidebarMenu>
{links.map((link, idx) => (
<SidebarMenuItem key={idx}>
<SidebarMenuButton asChild>
<a href={link.href}>
<link.icon className="h-4 w-4" />
<span>{link.label}</span>
</a>
</SidebarMenuButton>
</SidebarMenuItem>
))}
</SidebarMenu>
</SidebarContent>
</Sidebar>
</SidebarProvider>
)
}Props
Component properties and their types
collapsible'offcanvas' | 'icon' | 'none'
default: 'offcanvas'
The collapsible behavior of the sidebar
side'left' | 'right'
default: 'left'
The side where the sidebar appears
Examples
Code example for this component
Basic Sidebar
"use client"
import React from "react"
import {
Sidebar,
SidebarProvider,
SidebarContent,
SidebarHeader,
SidebarMenu,
SidebarMenuItem,
SidebarMenuButton,
SidebarTrigger,
SidebarInset,
} from "@/components/ui/sidebar"
import { Home, Settings, User } from 'lucide-react'
export function SidebarDemo() {
const links = [
{ label: "Dashboard", href: "#", icon: Home },
{ label: "Profile", href: "#", icon: User },
{ label: "Settings", href: "#", icon: Settings },
]
return (
<SidebarProvider>
<Sidebar>
<SidebarHeader>
<div className="flex items-center gap-2 px-4 py-2">
<div className="h-6 w-6 bg-primary rounded" />
<span className="font-semibold">Acme Inc</span>
</div>
</SidebarHeader>
<SidebarContent>
<SidebarMenu>
{links.map((link, idx) => (
<SidebarMenuItem key={idx}>
<SidebarMenuButton asChild>
<a href={link.href} className="flex items-center gap-2">
<link.icon className="h-4 w-4" />
<span>{link.label}</span>
</a>
</SidebarMenuButton>
</SidebarMenuItem>
))}
</SidebarMenu>
</SidebarContent>
</Sidebar>
<SidebarInset>
<header className="flex h-16 shrink-0 items-center gap-2 border-b px-4">
<SidebarTrigger />
<h1 className="text-lg font-semibold">Dashboard</h1>
</header>
<div className="flex flex-1 flex-col gap-4 p-4">
<p>Your main content goes here.</p>
</div>
</SidebarInset>
</SidebarProvider>
)
}Registry
View the component registry file
Live Preview
Interactive
Interactive component preview