ComponentsNavigationNavbar

Navbar

16 variants · sidebar · two-row · command · glass · vercel · linear · stripe

SaaSCenteredPillStripeOutlinedVercelLinearCommandNotionTwo-rowGlassFrostedGradientSidebar

Overview

16 variants · sidebar · two-row · command · glass · vercel · linear · stripe

Application navbar

Live preview

Keep product identity, primary destinations, and account actions in a stable top-level region.

ApplicationNavbar.tsx
tsx
import { Navbar, Button, type NavItem } from 'omverse-ui'
 
const items: NavItem[] = [
{ id: 'dashboard', label: 'Dashboard', icon: 'info' },
{ id: 'projects', label: 'Projects', icon: 'info' },
{ id: 'team', label: 'Team', icon: 'info', badge: 3 },
{ id: 'analytics', label: 'Analytics', icon: 'info' },
{ id: 'settings', label: 'Settings', icon: 'settings' },
]
 
<Navbar
variant="saas"
items={items}
activeId={active}
onItemClick={item => setActive(item.id)}
brandName="DesignSystem"
actions={
<div style={{ display: 'flex', gap: 8 }}>
<Button size="sm" variant="outlined">Log in</Button>
<Button size="sm" variant="filled">Get started</Button>
</div>
}
/>

Use a navbar for a small set of persistent, high-level destinations. Put local page navigation closer to the content it controls.

Anatomy

  • Root container and spacing boundary.
  • Primary content and optional secondary metadata.
  • State indicators and utility affordances (icons, badges, controls).
  • Optional helper text, grouping, and behavioral wrappers.

When to use

  • Choose Navbar when a repeated, structured interaction is required.
  • Use it for clear, consistent operations across similar surfaces.
  • Use in forms, lists, and action workflows where clarity matters.

When not to use

  • Do not use only for decorative layout without interaction meaning.
  • Avoid duplicating the same behavior without distinct user context.
  • Prefer simpler HTML or textual content for static, non-interactive labels.

Variants

Component variants should be documented by API props and examples below.

States

Common states include idle, active, disabled, focused, and loading/pending states where applicable.

Behavior

Behavior should remain deterministic and keyboard-friendly, with clear visual feedback for every state transition.

Accessibility

  • Use semantic structure and visible labels whenever possible.
  • Preserve keyboard navigation and focus visibility.
  • Announce status and changes when context requires it.

Content guidelines

  • Prefer short, clear labels.
  • Keep content actions scannable and outcome-oriented.
  • Use consistent wording across similar components.

Examples

Props / API

Api Props

Props

PropTypeDefaultDescription
itemsNavItem[][]Main navigation items
activeIdstring—ID of the currently active item
onItemClick(item: NavItem) => void—Callback when an item is clicked
variant'saas' | 'centered' | 'pill' | 'stripe' | 'outlined' | 'vercel' | 'linear' | 'command' | 'notion' | 'two-row' | 'glass' | 'frosted' | 'gradient''saas'Navbar style preset
brandNamestring'Brand'Brand name text shown when no logo element is provided
logoReactNode—Logo element — overrides brandName when provided
actionsReactNode—Content rendered on the right side (buttons, avatar, search…)
titlestring—Page title shown next to the brand (two-row variant)
subItemsNavItem[][]Secondary nav items shown in the lower row (two-row variant)
activeSubIdstring—Active secondary item ID (two-row variant)
workspaceNamestring'Workspace'Workspace name (linear variant)
workspaceIconstring'WS'Workspace initials or emoji (linear variant)
user{ name: string; email?: string; avatarSrc?: string }—User info shown in the profile area (linear variant)
showSearchbooleanfalseShows a ⌘K search trigger (command variant)
onSearchClick() => void—Callback when the search trigger is clicked
sectionsNavSection[][]Grouped navigation sections
activeIdstring—ID of the currently active item
onItemClick(item: NavItem) => void—Callback when an item is clicked
collapsedbooleanfalseCollapses to icon-only mode
brandNamestring'Brand'Brand name shown in the header
logoReactNode—Logo element — overrides brandName when provided
user{ name: string; email?: string; avatarSrc?: string }—User info shown in the footer area