componentes / ações
Dropdown Menu
Um menu de ações que abre a partir de um botão, com itens marcáveis, grupos de rádio e submenus.
dropdown-menu-default.tsx
"use client";
import { ChevronDownIcon } from "lucide-react";
import { useState } from "react";
import { Button } from "@/components/ui/button";
import {
DropdownMenu,
DropdownMenuCheckboxItem,
DropdownMenuGroup,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuPopup,
DropdownMenuRadioGroup,
DropdownMenuRadioItem,
DropdownMenuSeparator,
DropdownMenuShortcut,
DropdownMenuSub,
DropdownMenuSubTrigger,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
export default function DropdownMenuDefault() {
const [grid, setGrid] = useState(true);
const [sort, setSort] = useState("name");
return (
<DropdownMenu>
<DropdownMenuTrigger render={<Button variant="outline" />}>
options <ChevronDownIcon aria-hidden="true" />
</DropdownMenuTrigger>
<DropdownMenuPopup>
<DropdownMenuGroup>
<DropdownMenuLabel>Project</DropdownMenuLabel>
<DropdownMenuItem>
Rename <DropdownMenuShortcut>F2</DropdownMenuShortcut>
</DropdownMenuItem>
<DropdownMenuItem>Duplicate</DropdownMenuItem>
<DropdownMenuSub>
<DropdownMenuSubTrigger>Share</DropdownMenuSubTrigger>
<DropdownMenuPopup>
<DropdownMenuItem>Copy link</DropdownMenuItem>
<DropdownMenuItem>Send by email</DropdownMenuItem>
</DropdownMenuPopup>
</DropdownMenuSub>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuCheckboxItem checked={grid} onCheckedChange={setGrid}>
Grid view
</DropdownMenuCheckboxItem>
<DropdownMenuSeparator />
<DropdownMenuRadioGroup onValueChange={setSort} value={sort}>
<DropdownMenuLabel>Sort by</DropdownMenuLabel>
<DropdownMenuRadioItem value="name">Name</DropdownMenuRadioItem>
<DropdownMenuRadioItem value="date">Date</DropdownMenuRadioItem>
</DropdownMenuRadioGroup>
<DropdownMenuSeparator />
<DropdownMenuItem variant="destructive">Delete</DropdownMenuItem>
</DropdownMenuPopup>
</DropdownMenu>
);
}Instalação
$ npx shadcn@latest add https://cd-ui.vercel.app/r/dropdown-menu.jsonprimeira vez? configure o components.json e o tema antes: veja instalação.
Uso
import { DropdownMenu, DropdownMenuItem, DropdownMenuPopup, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"
<DropdownMenu>
<DropdownMenuTrigger render={<Button />}>Options</DropdownMenuTrigger>
<DropdownMenuPopup>
<DropdownMenuItem onClick={rename}>Rename</DropdownMenuItem>
<DropdownMenuItem variant="destructive">Delete</DropdownMenuItem>
</DropdownMenuPopup>
</DropdownMenu>API
DropdownMenu
Base UI · Menu.RootRaiz. Também serve para cada submenu, por meio do DropdownMenuSub.
| prop | tipo | padrão |
|---|---|---|
open · defaultOpen · onOpenChangeControle de abertura. | boolean / (open) => void | - |
DropdownMenuTrigger
Base UI · Menu.TriggerBotão que abre o menu. Use render pra usar seu Button.
| prop | tipo | padrão |
|---|---|---|
renderTroca o elemento renderizado mantendo comportamento e estilo (ex.: virar | ReactElement | (props) => ReactElement | - |
DropdownMenuPopup
Base UI · Menu.PopupLista de ações. Abre do gatilho em 160ms, fecha em 120ms.
| prop | tipo | padrão |
|---|---|---|
sideLado preferido. Submenus abrem à direita sozinhos. | "top" | "bottom" | "left" | "right" | - |
alignAlinhamento em relação ao gatilho. | "start" | "center" | "end" | - |
sideOffsetDistância do gatilho (px). | number | 6 |
classNameClasses extras, mescladas com | string | - |
DropdownMenuItem
Base UI · Menu.ItemAção. O menu fecha depois que ela é escolhida.
| prop | tipo | padrão |
|---|---|---|
variantUse | "default" | "destructive" | "default" |
onClickChamado ao escolher o item. | () => void | - |
classNameClasses extras, mescladas com | string | - |
DropdownMenuCheckboxItem · DropdownMenuRadioGroup · DropdownMenuRadioItem
Base UI · Menu.CheckboxItem · Menu.RadioGroup · Menu.RadioItemItens com check. O item checkbox alterna sozinho; os itens de rádio ficam dentro de um DropdownMenuRadioGroup.
| prop | tipo | padrão |
|---|---|---|
checked · onCheckedChangeEstado controlado ou inicial. | boolean / (checked) => void | - |
value · onValueChangeEstado controlado ou inicial. | string / (value) => void | - |
DropdownMenuGroup · DropdownMenuLabel · DropdownMenuSeparator · DropdownMenuShortcut · DropdownMenuSub · DropdownMenuSubTrigger
Organize a lista: DropdownMenuGroup com um DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut e DropdownMenuSub com DropdownMenuSubTrigger.
| prop | tipo | padrão |
|---|---|---|
classNameClasses extras, mescladas com | string | - |
Teclado
| tecla | ação |
|---|---|
| EnterSpace↓ | Abre o menu a partir do gatilho. |
| ↑↓ | Navega entre itens. |
| EnterSpace | Escolhe o item. |
| →← | Abre e fecha um submenu. |
| Esc | Fecha e devolve o foco ao gatilho. |
| A-Z | Pula para o item que começa com a letra. |
Acessibilidade
DropdownMenuShortcutsó mostra a dica. Ligue o atalho de verdade por conta própria.