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 viaNavbarLayout:
Sub-Components
DsNavbarBrand
Displays the logo and team selector dropdown.| Prop | Type | Description |
|---|---|---|
teams | Team[] | List of teams available to select |
selectedTeam | Team | null | Currently selected team |
teamsLoading | boolean | Shows loading state in dropdown |
teamsError | string | Error message to display |
| Event | Payload | Description |
|---|---|---|
select-team | Team | Emitted when a team is selected |
DsNavbarLinks
Renders the main navigation links (desktop only).| Prop | Type | Description |
|---|---|---|
items | NavItem[] | Array of navigation items |
DsNavbarTeamsMenu
Dropdown menu with team-related navigation items: My Teams, Manage Team.DsNavbarAdminMenu
Dropdown menu for admin navigation. Only visible to global admins.| Prop | Type | Description |
|---|---|---|
isVisible | boolean | Controls visibility based on user role |
- Global Settings
- Users
- Teams
- MCP Catalog
- MCP Categories
- Satellites
- Background Jobs
DsNavbarUserMenu
User avatar with dropdown menu for account and logout.| Prop | Type | Description |
|---|---|---|
userName | string | User’s display name |
userEmail | string | User’s email |
userLoading | boolean | Shows loading state |
| Event | Description |
|---|---|
go-to-account | Navigate to account page |
logout | Trigger logout |
DsNavbarMobileMenu
Hamburger button that opens a Sheet drawer with all navigation on mobile.| Prop | Type | Description |
|---|---|---|
navigationItems | NavItem[] | Main navigation items |
isGlobalAdmin | boolean | Show admin section |
teams | Team[] | Available teams |
selectedTeam | Team | null | Currently selected team |
userName | string | User’s display name |
userEmail | string | User’s email |
Variants
The navbar supports style variants via CVA:Active State Detection
Navigation links show an active state when the current route matches:bg-accent text-accent-foreground styling.
Team Selection
The navbar manages team selection state and persists it via EventBus:Responsive Behavior
| Breakpoint | Behavior |
|---|---|
< md (768px) | Row 2 hidden, hamburger menu visible |
>= md | Both rows visible, hamburger hidden |
>= lg | User name shown next to avatar |
Styling
Default navbar classes:Architecture Notes
- DsNavbar.vue fetches user and team data on mount
- Sub-components are presentational and receive data via props
- Events bubble up from sub-components to DsNavbar for handling
- EventBus syncs team selection across the application
- i18n keys follow the existing
sidebar.*namespace for compatibility
Related Documentation
- UI Design System - Overall design patterns
- Page Heading with Breadcrumbs - Breadcrumbs component for pages
- Custom UI Components - Component development guide

