Menu

A dropdown menu for displaying a list of actions or options

Built on Menu

Installation#

npmpnpmyarnbun
npx sugarcoat add menu

Examples#

Default#

Default

Sizes#

Available in multiple sizes.

Sizes

Colors#

Menu items support different color schemes.

Colors

With Groups#

Organize items into logical groups with labels.

Groups

Checkbox Items#

Checkbox Items

Radio Items#

Radio Items

Disabled Items#

Disabled Items

With Keyboard Shortcuts#

Keyboard Shortcuts

Context Menu Style#

Actions Menu

User Account Menu#

Account Menu

Anatomy#

<Menu>
  <Menu.Trigger>
    <button>Open</button>
  </Menu.Trigger>
  <Menu.Portal>
    <Menu.Positioner>
      <Menu.Popup>
        <Menu.Group>
          <Menu.GroupLabel>Group</Menu.GroupLabel>
          <Menu.Item>Item</Menu.Item>
        </Menu.Group>
        <Menu.Separator />
        <Menu.CheckboxItem>Checkbox</Menu.CheckboxItem>
        <Menu.RadioGroup>
          <Menu.RadioItem value="a">Radio A</Menu.RadioItem>
        </Menu.RadioGroup>
        <Menu.SubmenuTrigger>Submenu</Menu.SubmenuTrigger>
      </Menu.Popup>
    </Menu.Positioner>
  </Menu.Portal>
</Menu>

Usage#

Import
import { Menu } from "@sugarcoat/ui-nxt";
Usage
<Menu>
<Menu.Trigger>
  <button>Open Menu</button>
</Menu.Trigger>
<Menu.Portal>
  <Menu.Positioner>
    <Menu.Popup>
      <Menu.Item>Action 1</Menu.Item>
      <Menu.Item>Action 2</Menu.Item>
      <Menu.Separator />
      <Menu.Item>Action 3</Menu.Item>
    </Menu.Popup>
  </Menu.Positioner>
</Menu.Portal>
</Menu>

Props#

PropTypeDefaultDescription
size"xs" | "sm" | "md" | "lg""md"Size of the menu items
color"default" | "primary" | "accent""default"Color scheme for menu items
shadow"none" | "xs" | "sm" | "md" | "lg""md"Box shadow elevation for the popup
openboolean-Controlled open state
defaultOpenboolean-Initial open state (uncontrolled)
onOpenChange(open: boolean) => void-Callback when open state changes
PropTypeDefaultDescription
disabledboolean-Whether the item is disabled
onSelect() => void-Callback when item is selected
PropTypeDefaultDescription
checkedboolean-Controlled checked state
onCheckedChange(checked: boolean) => void-Callback when checked state changes
PropTypeDefaultDescription
valuestring-Value of the selected radio item
onValueChange(value: string) => void-Callback when selection changes

Accessibility#

  • Built on Base UI Menu for robust accessibility
  • Supports keyboard navigation (Arrow keys, Enter, Escape)
  • Proper ARIA roles for menu, menuitem, menuitemcheckbox, menuitemradio
  • Focus management and trap when open
  • Type-ahead search to jump to items
Customize Theme
Build your own sugarcoat/ui theme
PresetLime / Violet / Slate
Brand ColorLime
Accent ColorViolet
Gray ScaleSlate
Border RadiusLg