Dropdown Menu
A context-managed dropdown menu with trigger, content, items, and separator.
bun x bosia@latest add dropdown-menuA context-managed dropdown with trigger, content, items, and separator. Handles click-outside and Escape to close.
Preview
Props
DropdownMenuContent
| Prop | Type | Default |
|---|---|---|
align |
"start" | "end" | "center" |
"end" |
class |
string |
"" |
Sub-components
DropdownMenu— root wrapper, manages open stateDropdownMenuTrigger— button that toggles the menuDropdownMenuContent— the popup panel (align:"start"|"end"|"center")DropdownMenuItem— individual menu actionDropdownMenuSeparator— divider between items
Usage
<script lang="ts">
import {
DropdownMenu,
DropdownMenuTrigger,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuSeparator,
} from "$lib/components/ui/dropdown-menu";
import { Button } from "$lib/components/ui/button";
</script>
<DropdownMenu>
<DropdownMenuTrigger>
<Button variant="outline">Options</Button>
</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuItem onclick={() => console.log("edit")}>Edit</DropdownMenuItem>
<DropdownMenuItem onclick={() => console.log("copy")}>Copy</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem onclick={() => console.log("delete")}>Delete</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>Alignment
<!-- Align to the left -->
<DropdownMenuContent align="start">...</DropdownMenuContent>
<!-- Centered -->
<DropdownMenuContent align="center">...</DropdownMenuContent>Controlled Open State
<script lang="ts">
let open = $state(false);
</script>
<DropdownMenu bind:open>...</DropdownMenu>
<p>Menu is {open ? "open" : "closed"}</p>