Dropdown Menu
トリガーをクリックして開く操作メニュー。テキストボタン版(明示的なメニュー呼び出し)と三点リーダーアイコン版(コンパクトな付帯メニュー)の 2 種類。Popover との違いは「中身が動詞(コマンド)の集合」「menu role の a11y(矢印キー操作)」。
プレビュー
テキストボタン版
明示的に「メニューを開く」とラベル付けする用途。ヘッダーの設定メニュー、ツールバーのアクション群などに。
三点リーダーアイコン版
テーブル行ごとの操作、カードの「もっと見る」など、コンパクトに付帯機能を出す用途。
実装例 (テキストボタン版)
import { Button } from "@/components/Button";
import { Icon } from "@/components/Icon";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
export function Example() {
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="secondary" size="m">
Dropdown Menu を開く
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="start">
<DropdownMenuItem><Icon name="copy" size={16} />コピー</DropdownMenuItem>
<DropdownMenuItem><Icon name="edit" size={16} />編集</DropdownMenuItem>
<DropdownMenuItem><Icon name="download" size={16} />ダウンロード</DropdownMenuItem>
<DropdownMenuItem variant="destructive"><Icon name="trash" size={16} />削除</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);
}実装例 (三点リーダーアイコン版)
import { Button } from "@/components/Button";
import { Icon } from "@/components/Icon";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
export function Example() {
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="secondary" size="m" square aria-label="操作メニュー">
<Icon name="menu-vertical" size={16} />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="start">
<DropdownMenuItem><Icon name="copy" size={16} />コピー</DropdownMenuItem>
<DropdownMenuItem><Icon name="edit" size={16} />編集</DropdownMenuItem>
<DropdownMenuItem><Icon name="download" size={16} />ダウンロード</DropdownMenuItem>
<DropdownMenuItem variant="destructive"><Icon name="trash" size={16} />削除</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);
}仕様
- primitive:
src/components/ui/dropdown-menu.tsx(shadcn 公式そのまま) - 構成:
DropdownMenu/DropdownMenuTrigger/DropdownMenuContent/DropdownMenuLabel/DropdownMenuItem(variant="destructive"で赤系) /DropdownMenuSeparator/DropdownMenuCheckboxItem/DropdownMenuRadioGroupなど - trigger の見せ方は テキスト + caret か 三点リーダーアイコン の 2 系統。前者は「動作を予告したい場面」、後者は「画面密度が高くスペースを取りたくない場面」
align="end"(右寄せ)/"start"(左寄せ)で content の位置を制御- ↑↓ キーで項目移動、Enter / Space で実行、Esc で閉じる(Radix が標準対応)
- アイコンはすべて Bold weight で統一(Icon コンポーネントの既定値)
- 色・余白は Thinca tokens 化済み(
--bg-surface/--text-primary/--overlay-hover/--shadow-layer-1等)
使い分け
- DropdownMenu (text): ヘッダー右端の「設定」「ユーザーメニュー」など、ボタンに明示的なラベルが必要な場面
- DropdownMenu (icon): テーブル行 / カードの「⋮」三点リーダー。コンパクト
- Popover: 任意の content(お知らせ一覧 / フォーム / 設定 / フィルター)。click で開き、中身は動詞ではなく名詞や複合コンテンツ
- NavigationMenu: サイト全体のナビゲーション(複数階層)