Dropdown menu
Radix Dropdown Menu primitives for menus, nested submenus, and searchable lists. Powers SumXEditorVariablePicker in @sumx/sumx-editor.
Interactive demo
Default menu
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="outline">Actions</Button>
</DropdownMenuTrigger>
<DropdownMenuContent>...</DropdownMenuContent>
</DropdownMenu>With search (variable-picker pattern)
Import
import {
DropdownMenu,
DropdownMenuTrigger,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuSub,
DropdownMenuSubTrigger,
DropdownMenuSubContent,
DropdownMenuCheckboxItem,
DropdownMenuRadioGroup,
DropdownMenuRadioItem,
DropdownMenuGroup,
DropdownMenuPortal,
DropdownMenuShortcut,
} from '@sumx/ui';Basic menu
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="outline">Actions</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="start">
<DropdownMenuLabel>Section</DropdownMenuLabel>
<DropdownMenuItem onSelect={() => doAction()}>
Run action
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem disabled>Disabled</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>Nested submenu
<DropdownMenuSub>
<DropdownMenuSubTrigger>More</DropdownMenuSubTrigger>
<DropdownMenuSubContent>
<DropdownMenuItem>Child item</DropdownMenuItem>
</DropdownMenuSubContent>
</DropdownMenuSub>Controlled open state
const [open, setOpen] = useState(false);
<DropdownMenu open={open} onOpenChange={setOpen}>
...
</DropdownMenu>Styling tokens
Content uses portal-aligned surfaces:
border-gray-grayon primary content panel- Items:
hover:bg-primary/20, focus matching - High z-index (
z-[99991]) for ERP stacking contexts
Variable picker example
See SumX Editor configuration — merge fields. The editor composes DropdownMenu + Input for search.
Related
- Button — common trigger
- Input — search inside menu
- SumX Editor