Menu

Navigation
Layout

Static menu component for displaying lists of actions or navigation items. Use in sidebars, settings panels, or action lists.

Preview

Interactive menu examples

Basic Menu

Simple menu without icons

With Icons

Menu items with leading icons

With Suffix

Menu items with keyboard shortcuts or badges

Submenu Indicator

Items that lead to submenus

Selection State

Menu with selectable items

Grouped Items

Menu with labeled groups

Item Variants

Different item styles

Sizes

Menu size variations

Small

Medium

Large

Bordered Variant

Menu with dividers between all items

Menu Props

Menu component API reference

PropTypeDefaultDescription
size'sm' | 'md' | 'lg''md'Size of the menu text
variant'default' | 'bordered''default'Menu style variant
aria-labelstringAccessible label for the menu
classNamestringAdditional CSS classes

MenuItem Props

MenuItem component API reference

PropTypeDefaultDescription
variant'default' | 'active' | 'danger' | 'disabled''default'Visual style variant
size'sm' | 'md' | 'lg''md'Size of the item
iconReact.ReactNodeIcon to display before the label
suffixReact.ReactNodeContent to display on the right (shortcut, badge)
hasSubmenubooleanfalseShow chevron indicating submenu
selectedbooleanfalseShow checkmark for selected state
disabledbooleanfalseDisable the item
onClick() => voidClick handler

Usage

Import and implementation example

import { Menu, MenuItem, MenuGroup, MenuDivider } from '@/components/ui/menu'
import { User, Settings, LogOut } from 'lucide-react'

export default function Example() {
  return (
    <Menu aria-label="Settings menu">
      <MenuGroup label="Account">
        <MenuItem icon={<User />} onClick={() => {}}>
          Profile
        </MenuItem>
        <MenuItem icon={<Settings />} onClick={() => {}}>
          Settings
        </MenuItem>
      </MenuGroup>
      <MenuDivider />
      <MenuItem icon={<LogOut />} variant="danger" onClick={() => {}}>
        Log out
      </MenuItem>
    </Menu>
  )
}

Features

Built-in functionality

  • Icon support: Leading icons for visual context
  • Suffix content: Keyboard shortcuts, badges, or custom content
  • Submenu indicator: Chevron for items with submenus
  • Selection state: Checkmark for selected/active items
  • Groups & headers: Organize items with labeled groups
  • Dividers: Visual separation between sections
  • Multiple variants: Default, active, danger, and disabled states
  • 3 sizes: Small, medium, and large
  • Dark mode: Full dark mode support

Accessibility

ARIA support and keyboard navigation

ARIA Attributes

role="menu" on containerrole="menuitem" on itemsrole="separator" on dividersrole="group" on grouped sectionsaria-disabled on disabled itemsaria-label for menu description

Keyboard Navigation

KeyAction
TabMove focus between menu items
Enter / SpaceActivate focused item

Notes

  • All items are keyboard accessible
  • Focus is visible on interactive elements
  • Disabled items are not focusable
  • Proper ARIA roles for screen readers