NovaUI
Components

Menubar

A horizontal menu bar with dropdown menus, commonly used for application-level navigation.

The Menubar component provides a horizontal strip of menu triggers that each open a dropdown menu. It supports items, checkbox items, radio items, sub-menus, labels, separators, and keyboard shortcuts — ideal for desktop-style app menus.

Preview

File
Edit
View
Help

Installation

npx novaui-cli add menubar

Import

import {
  Menubar,
  MenubarMenu,
  MenubarTrigger,
  MenubarContent,
  MenubarItem,
  MenubarCheckboxItem,
  MenubarRadioItem,
  MenubarLabel,
  MenubarSeparator,
  MenubarShortcut,
  MenubarGroup,
  MenubarPortal,
  MenubarSub,
  MenubarSubContent,
  MenubarSubTrigger,
  MenubarRadioGroup,
} from 'novaui-components'

Basic Usage

File
Edit
View
New Tab⌘T
New Window⌘N
Print⌘P
import {
  Menubar,
  MenubarMenu,
  MenubarTrigger,
  MenubarContent,
  MenubarItem,
  MenubarSeparator,
  MenubarShortcut,
} from 'novaui-components'

export function BasicMenubar() {
  return (
    <Menubar>
      <MenubarMenu>
        <MenubarTrigger>File</MenubarTrigger>
        <MenubarContent>
          <MenubarItem>
            New Tab
            <MenubarShortcut>⌘T</MenubarShortcut>
          </MenubarItem>
          <MenubarItem>
            New Window
            <MenubarShortcut>⌘N</MenubarShortcut>
          </MenubarItem>
          <MenubarSeparator />
          <MenubarItem>
            Print
            <MenubarShortcut>⌘P</MenubarShortcut>
          </MenubarItem>
        </MenubarContent>
      </MenubarMenu>
      <MenubarMenu>
        <MenubarTrigger>Edit</MenubarTrigger>
        <MenubarContent>
          <MenubarItem>
            Undo
            <MenubarShortcut>⌘Z</MenubarShortcut>
          </MenubarItem>
          <MenubarItem>
            Redo
            <MenubarShortcut>⇧⌘Z</MenubarShortcut>
          </MenubarItem>
        </MenubarContent>
      </MenubarMenu>
      <MenubarMenu>
        <MenubarTrigger>View</MenubarTrigger>
        <MenubarContent>
          <MenubarItem>Zoom In</MenubarItem>
          <MenubarItem>Zoom Out</MenubarItem>
        </MenubarContent>
      </MenubarMenu>
    </Menubar>
  )
}

With Checkbox and Radio Items

Panels
Sidebar
Console
import { useState } from 'react'

export function CheckboxMenubar() {
  const [sidebar, setSidebar] = useState(true)
  const [console, setConsole] = useState(false)

  return (
    <Menubar>
      <MenubarMenu>
        <MenubarTrigger>View</MenubarTrigger>
        <MenubarContent>
          <MenubarLabel>Panels</MenubarLabel>
          <MenubarSeparator />
          <MenubarCheckboxItem
            checked={sidebar}
            onPress={() => setSidebar(!sidebar)}
          >
            Sidebar
          </MenubarCheckboxItem>
          <MenubarCheckboxItem
            checked={console}
            onPress={() => setConsole(!console)}
          >
            Console
          </MenubarCheckboxItem>
        </MenubarContent>
      </MenubarMenu>
    </Menubar>
  )
}

Props API

Extends React.ComponentPropsWithoutRef<typeof View>:

PropTypeDefaultDescription
classNamestring-Additional CSS classes
PropTypeDefaultDescription
childrenReact.ReactNode-MenubarTrigger and MenubarContent

Extends React.ComponentPropsWithoutRef<typeof Pressable>:

PropTypeDefaultDescription
asChildbooleanfalseRender as the child element
classNamestring-Additional CSS classes

Extends React.ComponentPropsWithoutRef<typeof View>:

PropTypeDefaultDescription
align'start' | 'center' | 'end''start'Alignment relative to the trigger
sideOffsetnumber8Offset from the trigger in pixels
classNamestring-Additional CSS classes

Extends React.ComponentPropsWithoutRef<typeof Pressable>:

PropTypeDefaultDescription
insetbooleanfalseAdds left padding for alignment
PropTypeDefaultDescription
checkedbooleanfalseWhether the checkbox is checked
PropTypeDefaultDescription
checkedbooleanfalseWhether the radio item is selected
valuestring-The value of the radio item
PropTypeDefaultDescription
insetbooleanfalseAdds left padding for alignment

Best Practices

  1. Use for app-level menus: Menubar is best suited for desktop-style application navigation
  2. Keep triggers short: Use single words or short phrases as trigger labels
  3. Consistent structure: Maintain similar item patterns across all menus
  4. Group with separators: Use MenubarSeparator and MenubarLabel for visual organization
  5. Add shortcuts: Use MenubarShortcut to show keyboard shortcuts for discoverability

On this page