Getting StartedComponentsDesign TokensThemingTheme SynthesizerFrameworksAccessibilityUtilitiesServer RenderingBrowser SupportContributingChangelogApp ShellAspect GridAuth ShellCenterContainerDashboard GridFloat BarInsetMasonryPage HeaderPage LayoutResizableResponsive SwitcherSectionSettings LayoutSplit PaneStatus BarStickyToolbarAnchor NavBottom NavBreadcrumbBreadcrumb MenuCommand BarDrawerFooterLinkMenubarNavigation MenuPage IndicatorPaginationRailScroll IndicatorScroll SpyScroll To TopSidebarSkip LinkStepper NavTabsTop BarTree ViewAccordionAspect RatioAvatarAvatar GroupCardCarouselCollapsibleColor SwatchCTA BannerDividerEmpty StateFeature CardIconImageImage CompareImage HotspotsInfinite ScrollLightboxMarqueeQR CodeScroll AreaSkeletonSpinnerStackVideoVirtual ListActivity HeatmapAnimated NumberBadgeBar ListChartClockComparisonCountdown TimerData GridDescription ListDiffGaugeJSON TreeKanbanLevel MeterListMeterSparklineStatStepperTagTimelineUptimeValue CardWaveformBlockquoteCode BlockCode GroupGradient TextHighlightKbdKeyboard MapMarkdownNumber FormatProseTerminalTextTime AgoTruncateTypewriterButtonButton GroupCalendarCheckboxChipColor PickerComboboxCopy ButtonDate PickerDate Range PickerField ListFieldsetFile UploadFormHotkeyIcon ButtonImage CropperInline EditInputInput GroupKnobLabelMasked InputMulti SelectNumber InputPassword InputPin InputRadio GroupRange SliderRatingSearchSegmented ControlSelectSignature PadSliderSortable ListSwitch GroupTag InputTextareaTheme ToggleTime PickerToggleTransfer ListTree SelectAlertAnnouncementBannerCommand PaletteConfirmConnection StatusContext MenuConversationDialogDropdown MenuHover CardLoading OverlayNotification PanelPopoverProgressSheetToastTooltip
ARC UIARC Radiant Components
v4.9DocsComponentsTokensSynthesizer
Getting StartedFrameworksServer RenderingDesign TokensThemingTheme SynthesizerTypographyUtilitiesAll ComponentsAccessibilityBrowser SupportChangelogContributingStatsApp ShellAspect GridAuth ShellCenterContainerDashboard GridFloat BarInsetMasonryPage HeaderPage LayoutResizableResponsive SwitcherSectionSettings LayoutSplit PaneStatus BarStickyToolbarAnchor NavBottom NavBreadcrumbBreadcrumb MenuCommand BarDrawerFooterLinkMenubarNavigation MenuPage IndicatorPaginationRailScroll IndicatorScroll SpyScroll To TopSidebarSkip LinkStepper NavTabsTop BarTree ViewAccordionAspect RatioAvatarAvatar GroupCardCarouselCollapsibleColor SwatchCTA BannerDividerEmpty StateFeature CardIconImageImage CompareImage HotspotsInfinite ScrollLightboxMarqueeQR CodeScroll AreaSkeletonSpinnerStackVideoVirtual ListActivity HeatmapAnimated NumberBadgeBar ListChartClockComparisonCountdown TimerData GridDescription ListDiffGaugeJSON TreeKanbanLevel MeterListMeterSparklineStatStepperTagTimelineUptimeValue CardWaveformBlockquoteCode BlockCode GroupGradient TextHighlightKbdKeyboard MapMarkdownNumber FormatProseTerminalTextTime AgoTruncateTypewriterButtonButton GroupCalendarCheckboxChipColor PickerComboboxCopy ButtonDate PickerDate Range PickerField ListFieldsetFile UploadFormHotkeyIcon ButtonImage CropperInline EditInputInput GroupKnobLabelMasked InputMulti SelectNumber InputPassword InputPin InputRadio GroupRange SliderRatingSearchSegmented ControlSelectSignature PadSliderSortable ListSwitch GroupTag InputTextareaTheme ToggleTime PickerToggleTransfer ListTree SelectAlertAnnouncementBannerCommand PaletteConfirmConnection StatusContext MenuConversationDialogDropdown MenuHover CardLoading OverlayNotification PanelPopoverProgressSheetToastTooltip

Sidebar

Collapsible navigation sidebar with grouped sections, heading labels, and active link highlighting. Suited to documentation sites, admin panels, and any layout that needs persistent vertical navigation.

ComponentsSidebar
navigationhybrid
<arc-sidebar>

Overview

Sidebar is a vertical navigation panel that organizes links into collapsible, headed sections. Use it for multi-level navigation in documentation sites, admin dashboards, settings panels, and any application where the user needs to move between many related pages without losing context. Each SidebarSection groups links under an optional heading, which gives a visual hierarchy that mirrors your information architecture. The active prop on SidebarLink highlights the current page so users can see where they are in the navigation tree. An `icon` on a section renders before its heading. **Collapsing is opt-in and has an imperative half.** A section is a static group until you set `collapsible`, which turns its heading into a toggle button; `open` then controls whether the links are showing, and defaults to expanded (`no-open` starts it collapsed). Either state change fires `arc-toggle` with `{ open }` in the detail. You can drive it from script with `section.toggle()`, which is how you expand the section containing the current route on load, or collapse everything but one. It fires the same event the header does, so a listener sees both paths identically. It is a no-op on a section without `collapsible`: a section whose header offers no way back would otherwise be collapsible from script into a state the user cannot undo. Sidebar sits inside an AppShell or PageLayout, typically in the left rail. It takes the full viewport height by default and scrolls independently of the main content area, so deep navigation trees stay reachable on long pages. Pair it with TopBar for a complete application chrome.

Guidelines

When to use

  • Group related links under a SidebarSection with a descriptive heading
  • Set the active prop on the link that matches the current route
  • Call `toggle()` on the section holding the active route at page load, so a deep link arrives with its group already open
  • Keep section headings short: one to three words that name the category
  • Place the Sidebar inside an AppShell or PageLayout for consistent layout
  • Use a Drawer to present the Sidebar on narrow viewports
  • Order sections by importance or frequency of use, most common first

When not to use

  • Do not nest Sidebars inside each other; use sections and indentation instead
  • Do not mark more than one link as active at the same time
  • Do not expect `toggle()` to do anything on a section without `collapsible`: it no-ops rather than hiding links behind a header that cannot bring them back
  • Do not use Sidebar for top-level site-wide navigation; prefer TopBar for that role
  • Do not add more than eight to ten links per section; split large groups into sub-sections
  • Do not omit headings on sections: unlabeled groups make navigation harder to scan
  • Do not place actions (buttons, toggles) inside the Sidebar: it is for navigation links only

Features

  • Collapsible sections with heading labels for grouped navigation
  • `toggle()` on a section expands or collapses it from script, firing `arc-toggle` exactly as the header does
  • `arc-toggle` carries `{ open }` and bubbles, so one listener on the sidebar covers every section
  • Active link highlighting to indicate the current page
  • Independent scroll region for deep navigation trees
  • Composable with SidebarSection and SidebarLink sub-components
  • Keyboard navigable with focus-visible indicators on every link
  • Designed to integrate with AppShell and PageLayout for full-page chrome
  • Responsive-ready: pairs with Drawer for mobile breakpoints
  • Token-driven theming for background, border, and active-link colors

Preview

Getting Started Design Tokens Theming Button Card Modal Alert Toast

Usage

Layout and styling work without JavaScript via the HTML/CSS versions. Interactive features like events and state management require the Web Component or a framework wrapper.

<script type="module" src="@arclux/arc-ui"></script>

<arc-sidebar>
  <arc-sidebar-section heading="Guide">
    <arc-sidebar-link href="/docs/getting-started">Getting Started</arc-sidebar-link>
    <arc-sidebar-link href="/docs/tokens">Design Tokens</arc-sidebar-link>
    <arc-sidebar-link href="/docs/theming" active>Theming</arc-sidebar-link>
  </arc-sidebar-section>
  <arc-sidebar-section heading="Components">
    <arc-sidebar-link href="/docs/components/button">Button</arc-sidebar-link>
    <arc-sidebar-link href="/docs/components/card">Card</arc-sidebar-link>
    <arc-sidebar-link href="/docs/components/modal">Modal</arc-sidebar-link>
  </arc-sidebar-section>
</arc-sidebar>

API

activestring''
The href of the currently active sidebar link. Used to highlight the matching link with accent styling.
widthstring''
Width of the sidebar. Accepts any CSS length value. Unset by default, which lets the rail fill whatever container it is placed in, including arc-app-shell, whose own rail is 280px wide and reads --sidebar-width. Set this only for a standalone sidebar; inside the shell the wrapper wins, and the token is the way to move both together.
labelstring'Sidebar navigation'
position'left' | 'right''left'
Controls which side the sidebar appears on. Moves the border line to the opposite edge.
collapsedbooleanfalse
When true, collapses the sidebar away entirely: width 0 with its contents clipped, which is the right behaviour for a rail that slides out of the way but is not an icon-only mode. For a persistent icon rail (the VS Code activity-bar shape), use arc-rail, which is a different component with its own labels and tooltips.
glowbooleanfalse
Enables an accent glow effect on the active sidebar link for enhanced visual emphasis.

Events

arc-navigate
Fired when a sidebar link is clicked

SidebarSection

<arc-sidebar-section>

A collapsible group within a Sidebar. Each section renders an optional heading label above its child links, which groups them visually and semantically, mirroring your information architecture. Fires an `arc-toggle` event with `{ open }` detail when the section is expanded or collapsed.

links
Get child arc-sidebar-link elements
headingstring''
Text label displayed above the group of links. Keep it short (one to three words) so the sidebar stays scannable. When omitted, links render without a heading divider.
iconstring''
Name of an icon to render before the heading. Ignored when the section has no heading.
collapsiblebooleanfalse
When true, the section heading becomes a toggle button that expands/collapses the child links.
openbooleantrue
Controls whether a collapsible section is expanded (true) or collapsed (false). Only relevant when collapsible is true.

Methods

toggle()
Collapse an open section or expand a collapsed one, firing arc-toggle. A no-op unless collapsible is set: a section that cannot collapse has nothing to toggle, and silently doing nothing is better than a state the header offers no way back from.

Events

arc-toggledetail:{ open: boolean }
Fired when a collapsible section expands or collapses.

See Also