Skip to main content

Menu

Menu displays a list of actions in a popup anchored to a trigger. It supports size, variant, color, side, align, and integrates with the sl styling system.

Demo

Alignment and sides

Usage

import React from 'react';
import {
MenuRoot,
MenuTrigger,
MenuBackdrop,
MenuPositioner,
MenuPopup,
MenuArrow,
MenuItem,
MenuSeparator,
MenuGroup,
MenuGroupLabel,
} from '@libdev-ui/base';

export default function Example() {
return (
<MenuRoot>
<MenuTrigger
sl={{ px: 12, py: 8, bgcolor: 'background.level2', color: 'text', borderRadius: 'md', boxShadow: 'sm' }}
>
Open menu
</MenuTrigger>

<MenuBackdrop />

<MenuPositioner side="bottom" align="start" offset={6}>
<MenuPopup sl={{ p: 8, minWidth: 220 }}>
<MenuArrow />

<MenuItem>New File</MenuItem>
<MenuItem>Open…</MenuItem>
<MenuSeparator />

<MenuGroup>
<MenuGroupLabel>Views</MenuGroupLabel>
<MenuItem>Explorer</MenuItem>
<MenuItem>Search</MenuItem>
</MenuGroup>
</MenuPopup>
</MenuPositioner>
</MenuRoot>
);
}

Props

PropTypeDefaultDescription
openbooleanControls open state
defaultOpenbooleanUncontrolled initial open state
onClose() => voidCalled when menu requests close
onOpenChange(open: boolean) => voidCalled when open changes
side'top' | 'bottom' | 'left' | 'right''bottom'Popup side relative to trigger
align'start' | 'center' | 'end''start'Popup alignment on the chosen side
offsetnumber6Gap between trigger and popup
disablePortalbooleanfalseRender under parent hierarchy
keepMountedbooleanfalseKeep popup in DOM when closed
size'sm' | 'md' | 'lg' | string'md'Size token forwarded to popup
variant'outlined' | 'plain' | 'soft' | 'solid' | string'outlined'Variant token
color'neutral' | 'primary' | 'success' | 'warning' | 'danger' | string'neutral'Color token
slSlPropSystem styles for the root wrapper
PropTypeDefaultDescription
as'button' | 'div''button'Element used for the trigger
slSlPropSystem styles
...buttonPropsButtonHTMLAttributesNative button props when as='button'
...divPropsHTMLAttributesNative div props when as='div'
PropTypeDefault
side'top' | 'bottom' | 'left' | 'right''bottom'
align'start' | 'center' | 'end''start'
offsetnumber6
slSlProp
PropTypeDefault
size'sm' | 'md' | 'lg' | string'md'
variant'outlined' | 'plain' | 'soft' | 'solid' | string'outlined'
color'neutral' | 'primary' | 'success' | 'warning' | 'danger' | string'neutral'
instantbooleanfalse
slSlProp
PropTypeDefault
role'menuitem' | 'menuitemradio' | 'menuitemcheckbox''menuitem'
disabledbooleanfalse
slSlProp

Utilities

Use sl tokens like bgcolor: 'background.level2', color: 'text', borderRadius: 'md', boxShadow: 'sm', p: 8, px: 12, py: 8 to style the trigger and the popup.