Capítulo 51 de 108
Menu de ações disparado por clique-direito (desktop) ou long-press (touch). Built on Base UI Context Menu; API praticamente idêntica ao Dropdown Menu.
checked/defaultChecked).value/onValueChange.ContextMenuItem, estiliza a ação como perigosa (ex. Delete)."top" | "right" | "bottom" | "left" ou lógico "inline-end", controla onde o painel abre relativo ao ponto de clique.<ContextMenu>
<ContextMenuTrigger className="flex aspect-video w-full max-w-xs items-center justify-center rounded-xl border border-dashed text-sm">
<span className="hidden pointer-fine:inline-block">Right click here</span>
<span className="hidden pointer-coarse:inline-block">Long press here</span>
</ContextMenuTrigger>
<ContextMenuContent className="w-48">
<ContextMenuGroup>
<ContextMenuItem>
Back
<ContextMenuShortcut>⌘[</ContextMenuShortcut>
</ContextMenuItem>
<ContextMenuSub>
<ContextMenuSubTrigger>More Tools</ContextMenuSubTrigger>
<ContextMenuSubContent className="w-44">
<ContextMenuGroup>
<ContextMenuItem variant="destructive">Delete</ContextMenuItem>
</ContextMenuGroup>
</ContextMenuSubContent>
</ContextMenuSub>
</ContextMenuGroup>
<ContextMenuSeparator />
<ContextMenuGroup>
<ContextMenuRadioGroup value="pedro">
<ContextMenuLabel>People</ContextMenuLabel>
<ContextMenuRadioItem value="pedro">Pedro Duarte</ContextMenuRadioItem>
</ContextMenuRadioGroup>
</ContextMenuGroup>
</ContextMenuContent>
</ContextMenu>
Composição:
ContextMenu
├── ContextMenuTrigger
└── ContextMenuContent
├── ContextMenuGroup
│ ├── ContextMenuLabel
│ ├── ContextMenuItem
│ └── ContextMenuItem
├── ContextMenuSeparator
├── ContextMenuGroup (Checkbox items)
├── ContextMenuSeparator
├── ContextMenuGroup (RadioGroup)
└── ContextMenuSub
├── ContextMenuSubTrigger
└── ContextMenuSubContent
pointer-fine:/pointer-coarse: para "Right click" vs "Long press", já que touch não tem clique-direito.ContextMenuTrigger envolve a área de conteúdo alvo, não um botão de disparo (diferente de Dropdown Menu).side="inline-end" posiciona o menu no lado lógico direito, respeitando RTL.pointer-fine:/pointer-coarse: são as variantes Tailwind recomendadas para adaptar texto/comportamento a mouse vs touch.npm install @base-ui/react.