Menu

A menu displays a list of actions or options in a popover.

Usage

'use client'

import { Button } from '@workspace/ui/components/Button'
import { Menu, MenuItem, MenuPopover, MenuTrigger } from '@workspace/ui/components/Menu'
import { MenuIcon } from 'lucide-react'

export function MenuDemo() {
    return (
        <MenuTrigger>
            <Button aria-label="Menu" size="icon" variant="outline">
                <MenuIcon />
            </Button>
            <MenuPopover>
                <Menu>
                    <MenuItem>Open</MenuItem>
                    <MenuItem>Rename</MenuItem>
                    <MenuItem>Duplicate</MenuItem>
                </Menu>
            </MenuPopover>
        </MenuTrigger>
    )
}

Examples

With Icon

'use client'

import { Button } from '@workspace/ui/components/Button'
import { Menu, MenuItem, MenuPopover, MenuTrigger } from '@workspace/ui/components/Menu'
import { MenuIcon, FolderOpen, Pencil, Copy, Share2, Trash2 } from 'lucide-react'

export function MenuWithIcon() {
    return (
        <MenuTrigger>
            <Button aria-label="Menu" size="icon" variant="outline">
                <MenuIcon />
            </Button>
            <MenuPopover>
                <Menu>
                    <MenuItem>
                        <FolderOpen className="size-4" />
                        Open
                    </MenuItem>
                    <MenuItem>
                        <Pencil className="size-4" />
                        Rename
                    </MenuItem>
                    <MenuItem>
                        <Copy className="size-4" />
                        Duplicate
                    </MenuItem>
                    <MenuItem>
                        <Share2 className="size-4" />
                        Share
                    </MenuItem>
                    <MenuItem>
                        <Trash2 className="size-4" />
                        Delete
                    </MenuItem>
                </Menu>
            </MenuPopover>
        </MenuTrigger>
    )
}

With Submenu

import { Button } from '@workspace/ui/components/Button'
import { Menu, MenuItem, MenuPopover, MenuSubTrigger, MenuTrigger } from '@workspace/ui/components/Menu'

export function MenuWithSubmenu() {
    return (
        <MenuTrigger>
            <Button variant="outline">Actions</Button>
            <MenuPopover>
                <Menu>
                    <MenuItem>Copy</MenuItem>
                    <MenuItem>Cut</MenuItem>
                    <MenuItem>Delete</MenuItem>
                    <MenuSubTrigger>
                        <MenuItem>Share</MenuItem>
                        <MenuPopover>
                            <Menu>
                                <MenuItem>SMS</MenuItem>
                                <MenuItem>Twitter</MenuItem>
                                <MenuSubTrigger>
                                    <MenuItem>Email</MenuItem>
                                    <MenuPopover>
                                        <Menu>
                                            <MenuItem>Work</MenuItem>
                                            <MenuItem>Personal</MenuItem>
                                        </Menu>
                                    </MenuPopover>
                                </MenuSubTrigger>
                            </Menu>
                        </MenuPopover>
                    </MenuSubTrigger>
                </Menu>
            </MenuPopover>
        </MenuTrigger>
    )
}

With Keyboard Shortcuts

import { Button } from '@workspace/ui/components/Button'
import { MenuTrigger, MenuItem, MenuKeyboard, MenuPopover, Menu } from '@workspace/ui/components/Menu'

export function MenuWithKeyboard() {
    return (
        <MenuTrigger>
            <Button variant="outline">Shortcuts</Button>
            <MenuPopover>
                <Menu>
                    <MenuItem>
                        New Tab <MenuKeyboard>⌘T</MenuKeyboard>
                    </MenuItem>
                    <MenuItem>
                        Close Tab <MenuKeyboard>⌘W</MenuKeyboard>
                    </MenuItem>
                </Menu>
            </MenuPopover>
        </MenuTrigger>
    )
}