bearnie

Sidebar

A composable sidebar component for application navigation.

Main content area

Installation

npx bearnie add sidebar
npx bearnie add sidebar

Usage

import {
Sidebar,
SidebarContent,
SidebarFooter,
SidebarGroup,
SidebarGroupLabel,
SidebarHeader,
SidebarMenu,
SidebarMenuButton,
SidebarMenuItem,
} from "@/components/ui/sidebar"
<Sidebar>
<SidebarHeader>
  <span>Logo</span>
</SidebarHeader>
<SidebarContent>
  <SidebarGroup>
    <SidebarGroupLabel>Menu</SidebarGroupLabel>
    <SidebarMenu>
      <SidebarMenuItem>
        <SidebarMenuButton href="/">
          <HomeIcon />
          <span>Home</span>
        </SidebarMenuButton>
      </SidebarMenuItem>
    </SidebarMenu>
  </SidebarGroup>
</SidebarContent>
<SidebarFooter>
  <SidebarMenu>
    <SidebarMenuItem>
      <SidebarMenuButton href="/settings">
        <SettingsIcon />
        <span>Settings</span>
      </SidebarMenuButton>
    </SidebarMenuItem>
  </SidebarMenu>
</SidebarFooter>
</Sidebar>

Examples

With trigger

Use SidebarTrigger to toggle the sidebar.

Multiple groups

Content

Structure

  • Sidebar - Main container with collapsible state
  • SidebarHeader - Sticky header section
  • SidebarContent - Scrollable content area
  • SidebarFooter - Sticky footer section
  • SidebarGroup - Groups related menu items
  • SidebarGroupLabel - Label for a group
  • SidebarMenu - Menu container (ul)
  • SidebarMenuItem - Menu item wrapper (li)
  • SidebarMenuButton - Clickable menu button/link
  • SidebarTrigger - Toggle button
  • SidebarSeparator - Visual divider

Props

PropTypeDefaultDescription
side”left” | “right""left”Side of the screen
collapsiblebooleantrueWhether sidebar can collapse
defaultOpenbooleantrueInitial open state
classstring-Additional CSS classes

SidebarMenuButton

PropTypeDefaultDescription
hrefstring-Link URL (renders as anchor)
isActivebooleanfalseActive state styling
classstring-Additional CSS classes

SidebarTrigger

PropTypeDefaultDescription
forstring-ID of sidebar to target
classstring-Additional CSS classes

Theming

The sidebar uses dedicated CSS variables for theming:

:root {
  --sidebar: oklch(0.985 0 0);
  --sidebar-foreground: oklch(0.145 0 0);
  --sidebar-accent: oklch(0.97 0 0);
  --sidebar-accent-foreground: oklch(0.205 0 0);
  --sidebar-border: oklch(0.922 0 0);
  --sidebar-ring: oklch(0.708 0 0);
}

.dark {
  --sidebar: oklch(0.205 0 0);
  --sidebar-foreground: oklch(0.985 0 0);
  --sidebar-accent: oklch(0.269 0 0);
  --sidebar-accent-foreground: oklch(0.985 0 0);
  --sidebar-border: oklch(1 0 0 / 10%);
  --sidebar-ring: oklch(0.439 0 0);
}