Skip to content
Harness Design System Harness Design System Harness Design System

Sidebar

The Sidebar component provides a responsive, collapsible navigation interface that can be used for application navigation. It supports various states including expanded, collapsed, and mobile views with offcanvas functionality.

Usage

import { Sidebar } from '@harnessio/ui/components'
// Basic usage with all main components
const SidebarExample = () => {
return (
<Sidebar.Provider>
<Sidebar.Root className="h-screen">
<Sidebar.Header>
{/* Your logo and search component */}
<SidebarSearch logo={<YourLogo />} />
</Sidebar.Header>
<Sidebar.Content>
{/* Main navigation items */}
<Sidebar.Group>
<Sidebar.GroupContent>
<Sidebar.Menu>
<Sidebar.MenuItem>
<Sidebar.MenuButton>
<Sidebar.MenuItemText
text="Dashboard"
icon={<Icon name="dashboard" size={14} />}
/>
</Sidebar.MenuButton>
</Sidebar.MenuItem>
<Sidebar.MenuItem>
<Sidebar.MenuButton>
<Sidebar.MenuItemText
text="Projects"
icon={<Icon name="folder" size={14} />}
/>
</Sidebar.MenuButton>
</Sidebar.MenuItem>
</Sidebar.Menu>
</Sidebar.GroupContent>
</Sidebar.Group>
{/* Grouped navigation items */}
<Sidebar.Group title="Recent">
<Sidebar.GroupLabel>Recent</Sidebar.GroupLabel>
<Sidebar.GroupContent>
<Sidebar.Menu>
<Sidebar.MenuItem>
<Sidebar.MenuButton>
<Sidebar.MenuItemText
text="Project Alpha"
icon={<Icon name="folder" size={14} />}
/>
</Sidebar.MenuButton>
</Sidebar.MenuItem>
</Sidebar.Menu>
</Sidebar.GroupContent>
</Sidebar.Group>
</Sidebar.Content>
<Sidebar.Footer>
{/* User profile or other footer content */}
<UserProfile />
</Sidebar.Footer>
<Sidebar.Rail />
</Sidebar.Root>
{/* Main content area */}
<div className="flex-1">
<div className="border-b flex items-center">
<Sidebar.Trigger />
<Sidebar.Separator orientation="vertical" />
{/* Breadcrumb or other header content */}
</div>
<main>
{/* Your main application content */}
</main>
</div>
</Sidebar.Provider>
)
}

Anatomy

The Sidebar component is composed of several nested components that work together to create a complete navigation interface:

<Sidebar.Provider>
<Sidebar.Root>
<Sidebar.Header />
<Sidebar.Content>
<Sidebar.Group>
<Sidebar.GroupLabel />
<Sidebar.GroupContent>
<Sidebar.Menu>
<Sidebar.MenuItem>
<Sidebar.MenuButton>
<Sidebar.MenuItemText />
</Sidebar.MenuButton>
</Sidebar.MenuItem>
</Sidebar.Menu>
</Sidebar.GroupContent>
</Sidebar.Group>
</Sidebar.Content>
<Sidebar.Footer />
<Sidebar.Rail />
</Sidebar.Root>
<Sidebar.Trigger />
<Sidebar.Separator />
</Sidebar.Provider>

API Reference

Sidebar.Provider

PropRequiredDefaultType
childrentrueReactNode
classNamefalsestring
defaultCollapsedfalseboolean
defaultMobileOpenfalseboolean
openfalseboolean
onOpenChangefalse(open: boolean) => void

Sidebar.Root

PropRequiredDefaultType
childrentrueReactNode
classNamefalsestring
sidefalse'left' | 'right'
variantfalse'sidebar' | 'floating' | 'inset'
collapsiblefalse'offcanvas' | 'icon' | 'none'

Sidebar.Header

PropRequiredDefaultType
childrentrueReactNode
classNamefalsestring

Sidebar.Content

PropRequiredDefaultType
childrentrueReactNode
classNamefalsestring

Sidebar.Group

PropRequiredDefaultType
childrentrueReactNode
classNamefalsestring
titlefalsestring

Sidebar.GroupLabel

PropRequiredDefaultType
childrentrueReactNode
classNamefalsestring
asChildfalseboolean

Sidebar.GroupAction

PropRequiredDefaultType
childrentrueReactNode
classNamefalsestring
asChildfalseboolean

Sidebar.GroupContent

PropRequiredDefaultType
childrentrueReactNode
classNamefalsestring

Sidebar.Menu

PropRequiredDefaultType
childrentrueReactNode
classNamefalsestring

Sidebar.MenuItem

PropRequiredDefaultType
childrentrueReactNode
classNamefalsestring

Sidebar.MenuButton

PropRequiredDefaultType
childrentrueReactNode
classNamefalsestring
onClickfalse() => void
activefalseboolean
asChildfalseboolean
isActivefalseboolean
tooltipfalsestring | ComponentProps<typeof Tooltip.Content>
variantfalse'default' | 'outline'
sizefalse'default' | 'sm' | 'lg'

Sidebar.MenuItemText

PropRequiredDefaultType
texttruestring
iconfalseReactElement<SVGSVGElement>
classNamefalsestring
activefalseboolean

Sidebar.MenuAction

PropRequiredDefaultType
childrentrueReactNode
classNamefalsestring
asChildfalseboolean
showOnHoverfalseboolean

Sidebar.MenuBadge

PropRequiredDefaultType
childrentrueReactNode
classNamefalsestring

Sidebar.MenuSkeleton

PropRequiredDefaultType
classNamefalsestring
showIconfalseboolean

Sidebar.MenuSub

PropRequiredDefaultType
childrentrueReactNode
classNamefalsestring

Sidebar.MenuSubItem

PropRequiredDefaultType
childrentrueReactNode
classNamefalsestring

Sidebar.MenuSubButton

PropRequiredDefaultType
childrentrueReactNode
classNamefalsestring
asChildfalseboolean
sizefalse'sm' | 'md'
isActivefalseboolean

Sidebar.Footer

PropRequiredDefaultType
childrentrueReactNode
classNamefalsestring

Sidebar.Rail

PropRequiredDefaultType
classNamefalsestring

Sidebar.Trigger

PropRequiredDefaultType
classNamefalsestring
onClickfalse() => void

Sidebar.Separator

PropRequiredDefaultType
orientationfalse'horizontal' | 'vertical'
classNamefalsestring

Sidebar.Input

PropRequiredDefaultType
classNamefalsestring
placeholderfalsestring

Sidebar.Inset

PropRequiredDefaultType
childrentrueReactNode
classNamefalsestring