Skip to main content
Use the DsNavbar component to display a Vercel-style top navigation bar with two rows: a brand row and a navigation row. This component is designed to be used inside NavbarLayout.vue.

Component Location

Layout Structure

The navbar has two rows:
  • Row 1 (h-14): Brand with team selector on the left, user menu on the right
  • Row 2 (h-12): Navigation links and dropdown menus (desktop only)
  • Mobile: Row 2 is hidden, hamburger menu opens a Sheet drawer

Usage

The navbar is typically used via NavbarLayout:
For direct usage of just the navbar:

Sub-Components

DsNavbarBrand

Displays the logo and team selector dropdown. Renders the main navigation links (desktop only).

DsNavbarTeamsMenu

Dropdown menu with team-related navigation items: My Teams, Manage Team.

DsNavbarAdminMenu

Dropdown menu for admin navigation. Only visible to global admins. Admin menu items:
  • Global Settings
  • Users
  • Teams
  • MCP Catalog
  • MCP Categories
  • Satellites
  • Background Jobs

DsNavbarUserMenu

User avatar with dropdown menu for account and logout.

DsNavbarMobileMenu

Hamburger button that opens a Sheet drawer with all navigation on mobile.

Variants

The navbar supports style variants via CVA:

Active State Detection

Navigation links show an active state when the current route matches:
Active links get bg-accent text-accent-foreground styling.

Team Selection

The navbar manages team selection state and persists it via EventBus:
Other components can listen for team changes:

Responsive Behavior

Styling

Default navbar classes:

Architecture Notes

  1. DsNavbar.vue fetches user and team data on mount
  2. Sub-components are presentational and receive data via props
  3. Events bubble up from sub-components to DsNavbar for handling
  4. EventBus syncs team selection across the application
  5. i18n keys follow the existing sidebar.* namespace for compatibility