Aliases
sidebar navigation
SideNavTwo-level app navigation with expandable branches and a collapsed mode.
Aliases
sidebar navigation
Foundations
SideNav for persistent app navigation with two levels.SideNav for one-off subsection navigation inside a content page.nav row
item Single navigation destination or expandable parent.
expand and collapse control
branch Toggles nested child visibility.
auxiliary status
badge Optional compact count or state marker.
| Name | Type | Default | Description |
|---|---|---|---|
items | Array<{ id: string; label: string; href?: string; icon?: string; badge?: string; disabled?: boolean; children?: SideNavItem[] }> | — | Navigation items with at most two visible levels. |
activeId | string | — | Controlled active navigation ID. |
collapsed | boolean | false | Enables the denser collapsed shell mode. |
onChange | (detail: { id: string }) => void | — | Runs when the active navigation item changes. |
theme | ThemeContract | — | Sets the theme used to resolve component styles. |
| Name | Payload | Description |
|---|---|---|
change | { id: string } | Fires when the active item changes. |
| Name | Description |
|---|---|
default | SideNav is data-driven and does not expose item slots. |
Variants
expanded: Full labels and nested branch state are visible.collapsed: Top-level items compress into a denser shell mode.Sizes
default: SideNav uses one shell density tuned for application navigation.States
rest: Inactive navigation rowselected: Current route or sectionexpanded: Parent branch is openSemantics
Keyboard
Screen readers
Checklist
Implementation notes
A persistent shell navigation with one expanded branch.
<SideNav items={navItems} activeId="overview" onChange={(detail) => activeId = detail.id} /> Collapsed mode preserves the active section marker.
<SideNav items={navItems} activeId="overview" collapsed={true} /> Badges can call attention to queues or inbox-like sections without changing the base navigation contract.
<SideNav items={[{ id: 'inbox', label: 'Inbox', badge: '12' }, { id: 'releases', label: 'Releases', children: [{ id: 'planned', label: 'Planned' }] }]} activeId="inbox" /> Calculated fixtures; browser evidence is not collected. Layout estimates use declared text behavior and maximum token values.