Skip to content

Menu

A dropdown of actions or options on the popover surface: icons, a second line, shortcuts, links, submenus, and radio or checkbox items.

Language
Appearance

Actions

import { CopySimpleIcon, DotsThreeIcon, FolderIcon, PencilSimpleIcon, TrashIcon } from '@phosphor-icons/react';
import { Button, Menu, MenuItem, MenuSeparator, MenuTrigger, SubmenuTrigger } from '@arbol-ai/ui';

<MenuTrigger>
  <Button aria-label="Campaign actions" size="icon" variant="ghost">
    <DotsThreeIcon weight="bold" />
  </Button>
  <Menu placement="bottom end">
    <MenuItem icon={<PencilSimpleIcon />} shortcut="E">
      Edit
    </MenuItem>
    <MenuItem description="Same audience and message" icon={<CopySimpleIcon />}>
      Duplicate
    </MenuItem>
    <SubmenuTrigger>
      <MenuItem icon={<FolderIcon />}>Move to</MenuItem>
      <Menu>
        <MenuItem>Reminders</MenuItem>
        <MenuItem>Follow-ups</MenuItem>
      </Menu>
    </SubmenuTrigger>
    <MenuSeparator />
    <MenuItem icon={<TrashIcon />} variant="destructive">
      Delete
    </MenuItem>
  </Menu>
</MenuTrigger>

Options

import { useState } from 'react';
import type { Selection } from 'react-aria-components';
import { Button, Menu, MenuHeader, MenuItem, MenuSection, MenuTrigger } from '@arbol-ai/ui';

const ViewMenuExample = () => {
  const [sort, setSort] = useState<Selection>(new Set(['recent']));
  const [columns, setColumns] = useState<Selection>(new Set(['phone', 'agent']));
  return (
    <MenuTrigger>
      <Button variant="outline">View</Button>
      <Menu>
        <MenuSection onSelectionChange={setSort} selectedKeys={sort} selectionMode="single">
          <MenuHeader>Sort by</MenuHeader>
          <MenuItem id="recent">Most recent</MenuItem>
          <MenuItem id="name">Name</MenuItem>
        </MenuSection>
        <MenuSection onSelectionChange={setColumns} selectedKeys={columns} selectionMode="multiple">
          <MenuHeader>Columns</MenuHeader>
          <MenuItem id="phone">Phone</MenuItem>
          <MenuItem id="agent">Agent</MenuItem>
          <MenuItem id="channel">Channel</MenuItem>
        </MenuSection>
      </Menu>
    </MenuTrigger>
  );
};

<ViewMenuExample />

Source

The examples above are src/components/menu/menu.examples.tsx, which the library’s tests render too.

Type to search…

↑↓ navigate↵ selectEsc close