Sidebar
A collapsible application sidebar with its own layout primitives.
Installation
npx shadcn@latest add @blank/sidebarUsage
import {
Sidebar,
SidebarContent,
SidebarGroup,
SidebarGroupLabel,
SidebarMenu,
SidebarMenuButton,
SidebarMenuItem,
SidebarProvider,
SidebarTrigger,
} from "@/components/ui/sidebar"<SidebarProvider>
<Sidebar>
<SidebarContent>
<SidebarGroup>
<SidebarGroupLabel>Application</SidebarGroupLabel>
<SidebarMenu>
<SidebarMenuItem>
<SidebarMenuButton isActive>Home</SidebarMenuButton>
</SidebarMenuItem>
</SidebarMenu>
</SidebarGroup>
</SidebarContent>
</Sidebar>
<main>
<SidebarTrigger />
</main>
</SidebarProvider>The examples use collapsible="none" to fit in the page. In an app, leave the default offcanvas (or set icon), and SidebarProvider handles the ⌘B shortcut, the cookie that remembers the state and the sheet on mobile.
Examples
Collapsible sub menu
A Collapsible around the menu item opens SidebarMenuSub; SidebarMenuBadge adds a count that hides when the sidebar collapses to icons.
Search and actions
SidebarGroupAction sits beside a group label; SidebarMenuAction with showOnHover appears on the row being pointed at and stays visible while its menu is open.
API Reference
SidebarProvider
Every div prop, plus:
| Prop | Type | Default |
|---|---|---|
defaultOpen | boolean | true |
open | boolean | — |
onOpenChange | (open: boolean) => void | — |
Sidebar
Every div prop, plus:
| Prop | Type | Default |
|---|---|---|
side | "left" | "right" | "left" |
variant | "sidebar" | "floating" | "inset" | "sidebar" |
collapsible | "offcanvas" | "icon" | "none" | "offcanvas" |
SidebarMenuButton
Every button prop, plus:
| Prop | Type | Default |
|---|---|---|
asChild | boolean | false |
isActive | boolean | false |
variant | "default" | "outline" | "default" |
size | "sm" | "default" | "lg" | "default" |
tooltip | string | TooltipContent props | — |
SidebarMenuAction
| Prop | Type | Default |
|---|---|---|
showOnHover | boolean | false |
asChild | boolean | false |
SidebarMenuSubButton
| Prop | Type | Default |
|---|---|---|
size | "sm" | "md" | "md" |
isActive | boolean | false |
asChild | boolean | false |
useSidebar
Returns { state, open, setOpen, openMobile, setOpenMobile, isMobile, toggleSidebar }.