Capítulo 52 de 108
Exibe um menu de ações/funções disparado por um botão trigger. É o componente mais completo da família de menus (compartilha padrão com Context Menu e Menubar). Built on Base UI Menu.
DropdownMenuLabel para título de seção.checked/onCheckedChange); checked recebe boolean, callback recebe checked === true para normalizar.value/onValueChange).DropdownMenuSubContent deve ser envolvido em DropdownMenuPortal (diferente do Context Menu, que dispensa portal explícito nos exemplos).DropdownMenuItem, para ações irreversíveis."start" | "center" | "end" em DropdownMenuContent; em RTL, inverter (dir === "rtl" ? "end" : "start").<DropdownMenu>
<DropdownMenuTrigger render={<Button variant="outline" />}>Open</DropdownMenuTrigger>
<DropdownMenuContent className="w-40" align="start">
<DropdownMenuGroup>
<DropdownMenuLabel>My Account</DropdownMenuLabel>
<DropdownMenuItem>
Profile
<DropdownMenuShortcut>⇧⌘P</DropdownMenuShortcut>
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuGroup>
<DropdownMenuItem>Team</DropdownMenuItem>
<DropdownMenuSub>
<DropdownMenuSubTrigger>Invite users</DropdownMenuSubTrigger>
<DropdownMenuPortal>
<DropdownMenuSubContent>
<DropdownMenuItem>Email</DropdownMenuItem>
<DropdownMenuItem>Message</DropdownMenuItem>
</DropdownMenuSubContent>
</DropdownMenuPortal>
</DropdownMenuSub>
</DropdownMenuGroup>
</DropdownMenuContent>
</DropdownMenu>
DropdownMenuPortal.<DropdownMenuTrigger
render={<Button variant="ghost" size="icon" className="rounded-full" />}
>
<Avatar>
<AvatarImage src="https://github.com/shadcn.png" alt="shadcn" />
<AvatarFallback>LR</AvatarFallback>
</Avatar>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">...</DropdownMenuContent>
Avatar como trigger e align="end" (menu abre alinhado à direita, comum em headers).Composição:
DropdownMenu
├── DropdownMenuTrigger
└── DropdownMenuContent
├── DropdownMenuGroup (Label + Items)
├── DropdownMenuSeparator
├── DropdownMenuGroup (CheckboxItems)
├── DropdownMenuSeparator
├── DropdownMenuGroup (RadioGroup)
└── DropdownMenuSub
├── DropdownMenuSubTrigger
└── DropdownMenuSubContent (dentro de DropdownMenuPortal)
DropdownMenuPortal ao redor de DropdownMenuSubContent: os exemplos oficiais sempre envolvem submenus em portal explícito, diferente do padrão simplificado do Context Menu.checked direto sem normalizar em onCheckedChange: usar checked === true no callback evita estados indeterminados incorretos.DropdownMenuSubContent deve estar dentro de DropdownMenuPortal (padrão consistente em todos os exemplos oficiais, inclusive aninhados em múltiplos níveis).align="end" é o padrão para triggers de avatar/ícone no canto direito de um header.variant="destructive") — a diferença é só o gatilho (clique vs. clique-direito).npm install @base-ui/react.Dropdown→Context e a forma de disparo.