Lunar Kit LogoLunar Kit
Components

Dropdown Menu

Displays a menu to the user — such as a set of actions or functions — triggered by a button.

Demo
Code
Open Menu

Installation

lunar add dropdown-menu

Usage

import {
DropdownMenu,
DropdownMenuTrigger,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuGroup,
DropdownMenuSub,
DropdownMenuSubContent,
} from '@/components/ui/dropdown-menu';
import { Button } from '@/components/ui/button';

Basic Usage

<DropdownMenu>
<DropdownMenuTrigger asChild>
  <Button>Open Menu</Button>
</DropdownMenuTrigger>
<DropdownMenuContent>
  <DropdownMenuLabel>My Account</DropdownMenuLabel>
  <DropdownMenuSeparator />
  <DropdownMenuItem onPress={() => {}}>Profile</DropdownMenuItem>
  <DropdownMenuItem onPress={() => {}}>Billing</DropdownMenuItem>
  <DropdownMenuItem onPress={() => {}}>Team</DropdownMenuItem>
  <DropdownMenuItem onPress={() => {}}>Subscription</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>

With Icons

import { User, CreditCard, Settings, LogOut } from 'lucide-react-native';
 
<DropdownMenu>
<DropdownMenuTrigger asChild>
  <Button variant="outline">User Options</Button>
</DropdownMenuTrigger>
<DropdownMenuContent className="w-56">
  <DropdownMenuLabel>My Account</DropdownMenuLabel>
  <DropdownMenuSeparator />
  <DropdownMenuGroup>
    <DropdownMenuItem leftIcon={<User size={16} />}>
      Profile
    </DropdownMenuItem>
    <DropdownMenuItem leftIcon={<CreditCard size={16} />}>
      Billing
    </DropdownMenuItem>
    <DropdownMenuItem leftIcon={<Settings size={16} />}>
      Settings
    </DropdownMenuItem>
  </DropdownMenuGroup>
  <DropdownMenuSeparator />
  <DropdownMenuItem leftIcon={<LogOut size={16} />} destructive>
    Log out
  </DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>

With Sub-menu

<DropdownMenu>
<DropdownMenuTrigger asChild>
  <Button variant="outline">Options</Button>
</DropdownMenuTrigger>
<DropdownMenuContent>
  <DropdownMenuItem>Profile</DropdownMenuItem>
  <DropdownMenuSub trigger="More Options">
    <DropdownMenuSubContent>
      <DropdownMenuItem>Rename</DropdownMenuItem>
      <DropdownMenuItem>Duplicate</DropdownMenuItem>
    </DropdownMenuSubContent>
  </DropdownMenuSub>
</DropdownMenuContent>
</DropdownMenu>

API Reference

PropTypeDefaultDescription
childrenReactNodeRequiredContent
openbooleanControlled open state
onOpenChange(open: boolean) => voidOpen state change handler
PropTypeDefaultDescription
childrenReactNodeRequiredTrigger content
asChildbooleanfalseMerges props with child component
PropTypeDefaultDescription
childrenReactNodeRequiredMenu items
align'start' | 'center' | 'end''start'Alignment relative to trigger
side'top' | 'bottom''bottom'Side relative to trigger
sideOffsetnumber4Distance from trigger
classNamestringCustom styles
PropTypeDefaultDescription
childrenReactNodeRequiredItem content
onPress() => voidPress handler
disabledbooleanfalseDisable item
destructivebooleanfalseStyle as destructive action
leftIconReactNodeIcon on left
rightIconReactNodeIcon on right
classNamestringCustom styles
textClassNamestringCustom text styles
PropTypeDefaultDescription
childrenReactNodeRequiredLabel content
classNamestringCustom styles
textClassNamestringCustom text styles
PropTypeDefaultDescription
childrenReactNodeRequiredSub-menu content
triggerReactNodeRequiredThe item acting as trigger
PropTypeDefaultDescription
childrenReactNodeRequiredSub-menu items
sideOffsetnumber4Distance from trigger
classNamestringCustom styles
size'default' | 'sm' | 'lg''default'Content size
shadow'none' | 'sm' | 'md' | 'lg''md'Shadow size

On this page