Displays a menu to the user, such as a set of actions or functions, triggered by a button.
package examples import (package examples import ( "github.com/axadrn/shadcn-templ/v2/components/button" "github.com/axadrn/shadcn-templ/v2/components/dropdownmenu") templ DropdownMenuDemo() { @dropdownmenu.DropdownMenu() { @button.Button(button.Props{ Variant: button.VariantOutline, Attributes: dropdownmenu.Trigger(ctx), }) { Open } @dropdownmenu.Content(dropdownmenu.ContentProps{Class: "w-40"}) { @dropdownmenu.Group() { @dropdownmenu.Label() { My Account } @dropdownmenu.Item() { Profile @dropdownmenu.Shortcut() { ⇧⌘P } } @dropdownmenu.Item() { Billing @dropdownmenu.Shortcut() { ⌘B } } @dropdownmenu.Item() { Settings @dropdownmenu.Shortcut() { ⌘S } } } @dropdownmenu.Separator() @dropdownmenu.Group() { @dropdownmenu.Item() { Team } @dropdownmenu.Sub() { @dropdownmenu.SubTrigger() { Invite users } @dropdownmenu.SubContent() { @dropdownmenu.Item() { Email } @dropdownmenu.Item() { Message } @dropdownmenu.Separator() @dropdownmenu.Item() { More... } } } @dropdownmenu.Item() { New Team @dropdownmenu.Shortcut() { ⌘+T } } } @dropdownmenu.Separator() @dropdownmenu.Group() { @dropdownmenu.Item() { GitHub } @dropdownmenu.Item() { Support } @dropdownmenu.Item(dropdownmenu.ItemProps{Disabled: true}) { API } } @dropdownmenu.Separator() @dropdownmenu.Group() { @dropdownmenu.Item() { Log out @dropdownmenu.Shortcut() { ⇧⌘Q } } } } }}Installation
Usage
Composition
Use the following composition to build a DropdownMenu:
Basic
A basic dropdown menu with labels and separators.
package examples import (package examples import ( "github.com/axadrn/shadcn-templ/v2/components/button" "github.com/axadrn/shadcn-templ/v2/components/dropdownmenu") templ DropdownMenuBasic() { @dropdownmenu.DropdownMenu() { @button.Button(button.Props{ Variant: button.VariantOutline, Attributes: dropdownmenu.Trigger(ctx), }) { Open } @dropdownmenu.Content() { @dropdownmenu.Group() { @dropdownmenu.Label() { My Account } @dropdownmenu.Item() { Profile } @dropdownmenu.Item() { Billing } @dropdownmenu.Item() { Settings } } @dropdownmenu.Separator() @dropdownmenu.Item() { GitHub } @dropdownmenu.Item() { Support } @dropdownmenu.Item(dropdownmenu.ItemProps{Disabled: true}) { API } } }}Submenu
Use dropdownmenu.Sub to nest secondary actions.
package examples import (package examples import ( "github.com/axadrn/shadcn-templ/v2/components/button" "github.com/axadrn/shadcn-templ/v2/components/dropdownmenu") templ DropdownMenuSubmenu() { @dropdownmenu.DropdownMenu() { @button.Button(button.Props{ Variant: button.VariantOutline, Attributes: dropdownmenu.Trigger(ctx), }) { Open } @dropdownmenu.Content() { @dropdownmenu.Group() { @dropdownmenu.Item() { Team } @dropdownmenu.Sub() { @dropdownmenu.SubTrigger() { Invite users } @dropdownmenu.SubContent() { @dropdownmenu.Item() { Email } @dropdownmenu.Item() { Message } @dropdownmenu.Sub() { @dropdownmenu.SubTrigger() { More options } @dropdownmenu.SubContent() { @dropdownmenu.Item() { Calendly } @dropdownmenu.Item() { Slack } @dropdownmenu.Separator() @dropdownmenu.Item() { Webhook } } } @dropdownmenu.Separator() @dropdownmenu.Item() { Advanced... } } } @dropdownmenu.Item() { New Team @dropdownmenu.Shortcut() { ⌘+T } } } } }}Shortcuts
Add dropdownmenu.Shortcut to show keyboard hints.
package examples import (package examples import ( "github.com/axadrn/shadcn-templ/v2/components/button" "github.com/axadrn/shadcn-templ/v2/components/dropdownmenu") templ DropdownMenuShortcuts() { @dropdownmenu.DropdownMenu() { @button.Button(button.Props{ Variant: button.VariantOutline, Attributes: dropdownmenu.Trigger(ctx), }) { Open } @dropdownmenu.Content() { @dropdownmenu.Group() { @dropdownmenu.Label() { My Account } @dropdownmenu.Item() { Profile @dropdownmenu.Shortcut() { ⇧⌘P } } @dropdownmenu.Item() { Billing @dropdownmenu.Shortcut() { ⌘B } } @dropdownmenu.Item() { Settings @dropdownmenu.Shortcut() { ⌘S } } } @dropdownmenu.Separator() @dropdownmenu.Item() { Log out @dropdownmenu.Shortcut() { ⇧⌘Q } } } }}Icons
Combine icons with labels for quick scanning.
package examples import (package examples import ( "github.com/axadrn/shadcn-templ/v2/components/button" "github.com/axadrn/shadcn-templ/v2/components/dropdownmenu" "github.com/axadrn/shadcn-templ/v2/components/icon") templ DropdownMenuIcons() { @dropdownmenu.DropdownMenu() { @button.Button(button.Props{ Variant: button.VariantOutline, Attributes: dropdownmenu.Trigger(ctx), }) { Open } @dropdownmenu.Content() { @dropdownmenu.Item() { @icon.User() Profile } @dropdownmenu.Item() { @icon.CreditCard() Billing } @dropdownmenu.Item() { @icon.Settings() Settings } @dropdownmenu.Separator() @dropdownmenu.Item(dropdownmenu.ItemProps{Variant: dropdownmenu.ItemVariantDestructive}) { @icon.LogOut() Log out } } }}Checkboxes
Use dropdownmenu.CheckboxItem for toggles.
package examples import (package examples import ( "github.com/axadrn/shadcn-templ/v2/components/button" "github.com/axadrn/shadcn-templ/v2/components/dropdownmenu") templ DropdownMenuCheckboxes() { @dropdownmenu.DropdownMenu() { @button.Button(button.Props{ Variant: button.VariantOutline, Attributes: dropdownmenu.Trigger(ctx), }) { Open } @dropdownmenu.Content(dropdownmenu.ContentProps{Class: "w-40"}) { @dropdownmenu.Group() { @dropdownmenu.Label() { Appearance } @dropdownmenu.CheckboxItem(dropdownmenu.CheckboxItemProps{Checked: true}) { Status Bar } @dropdownmenu.CheckboxItem(dropdownmenu.CheckboxItemProps{Disabled: true}) { Activity Bar } @dropdownmenu.CheckboxItem() { Panel } } } }}Checkboxes Icons
Add icons to checkbox items.
package examples import (package examples import ( "github.com/axadrn/shadcn-templ/v2/components/button" "github.com/axadrn/shadcn-templ/v2/components/dropdownmenu" "github.com/axadrn/shadcn-templ/v2/components/icon") templ DropdownMenuCheckboxesIcons() { @dropdownmenu.DropdownMenu() { @button.Button(button.Props{ Variant: button.VariantOutline, Attributes: dropdownmenu.Trigger(ctx), }) { Notifications } @dropdownmenu.Content(dropdownmenu.ContentProps{Class: "w-48"}) { @dropdownmenu.Group() { @dropdownmenu.Label() { Notification Preferences } @dropdownmenu.CheckboxItem(dropdownmenu.CheckboxItemProps{Checked: true}) { @icon.Mail() Email notifications } @dropdownmenu.CheckboxItem() { @icon.MessageSquare() SMS notifications } @dropdownmenu.CheckboxItem(dropdownmenu.CheckboxItemProps{Checked: true}) { @icon.Bell() Push notifications } } } }}Radio Group
Use dropdownmenu.RadioGroup for exclusive choices.
package examples import (package examples import ( "github.com/axadrn/shadcn-templ/v2/components/button" "github.com/axadrn/shadcn-templ/v2/components/dropdownmenu") templ DropdownMenuRadioGroupExample() { @dropdownmenu.DropdownMenu() { @button.Button(button.Props{ Variant: button.VariantOutline, Attributes: dropdownmenu.Trigger(ctx), }) { Open } @dropdownmenu.Content(dropdownmenu.ContentProps{Class: "w-32"}) { @dropdownmenu.Group() { @dropdownmenu.Label() { Panel Position } @dropdownmenu.RadioGroup() { @dropdownmenu.RadioItem(dropdownmenu.RadioItemProps{Value: "top"}) { Top } @dropdownmenu.RadioItem(dropdownmenu.RadioItemProps{ Value: "bottom", Checked: true, }) { Bottom } @dropdownmenu.RadioItem(dropdownmenu.RadioItemProps{Value: "right"}) { Right } } } } }}Radio Icons
Show radio options with icons.
package examples import (package examples import ( "github.com/axadrn/shadcn-templ/v2/components/button" "github.com/axadrn/shadcn-templ/v2/components/dropdownmenu" "github.com/axadrn/shadcn-templ/v2/components/icon") templ DropdownMenuRadioIcons() { @dropdownmenu.DropdownMenu() { @button.Button(button.Props{ Variant: button.VariantOutline, Attributes: dropdownmenu.Trigger(ctx), }) { Payment Method } @dropdownmenu.Content(dropdownmenu.ContentProps{Class: "min-w-56"}) { @dropdownmenu.Group() { @dropdownmenu.Label() { Select Payment Method } @dropdownmenu.RadioGroup() { @dropdownmenu.RadioItem(dropdownmenu.RadioItemProps{ Value: "card", Checked: true, }) { @icon.CreditCard() Credit Card } @dropdownmenu.RadioItem(dropdownmenu.RadioItemProps{Value: "paypal"}) { @icon.Wallet() PayPal } @dropdownmenu.RadioItem(dropdownmenu.RadioItemProps{Value: "bank"}) { @icon.Building2() Bank Transfer } } } } }}Destructive
Use Variant: dropdownmenu.ItemVariantDestructive for irreversible actions.
package examples import (package examples import ( "github.com/axadrn/shadcn-templ/v2/components/button" "github.com/axadrn/shadcn-templ/v2/components/dropdownmenu" "github.com/axadrn/shadcn-templ/v2/components/icon") templ DropdownMenuDestructive() { @dropdownmenu.DropdownMenu() { @button.Button(button.Props{ Variant: button.VariantOutline, Attributes: dropdownmenu.Trigger(ctx), }) { Actions } @dropdownmenu.Content() { @dropdownmenu.Group() { @dropdownmenu.Item() { @icon.Pencil() Edit } @dropdownmenu.Item() { @icon.Share() Share } } @dropdownmenu.Separator() @dropdownmenu.Group() { @dropdownmenu.Item(dropdownmenu.ItemProps{Variant: dropdownmenu.ItemVariantDestructive}) { @icon.Trash() Delete } } } }}Avatar
An account switcher dropdown triggered by an avatar.
package examples import (package examples import ( "github.com/axadrn/shadcn-templ/v2/components/avatar" "github.com/axadrn/shadcn-templ/v2/components/button" "github.com/axadrn/shadcn-templ/v2/components/dropdownmenu" "github.com/axadrn/shadcn-templ/v2/components/icon") templ DropdownMenuAvatar() { @dropdownmenu.DropdownMenu() { @button.Button(button.Props{ Variant: button.VariantGhost, Size: button.SizeIcon, Class: "rounded-full", Attributes: dropdownmenu.Trigger(ctx), }) { @avatar.Avatar() { @avatar.Image(avatar.ImageProps{ Src: "https://github.com/axadrn.png", Alt: "axadrn", }) @avatar.Fallback() { AA } } } @dropdownmenu.Content(dropdownmenu.ContentProps{Align: dropdownmenu.AlignEnd}) { @dropdownmenu.Group() { @dropdownmenu.Item() { @icon.BadgeCheck() Account } @dropdownmenu.Item() { @icon.CreditCard() Billing } @dropdownmenu.Item() { @icon.Bell() Notifications } } @dropdownmenu.Separator() @dropdownmenu.Item() { @icon.LogOut() Sign Out } } }}Complex
A richer example combining groups, icons, and submenus.
package examples import (package examples import ( "github.com/axadrn/shadcn-templ/v2/components/button" "github.com/axadrn/shadcn-templ/v2/components/dropdownmenu" "github.com/axadrn/shadcn-templ/v2/components/icon") templ DropdownMenuComplex() { @dropdownmenu.DropdownMenu() { @button.Button(button.Props{ Variant: button.VariantOutline, Attributes: dropdownmenu.Trigger(ctx), }) { Complex Menu } @dropdownmenu.Content(dropdownmenu.ContentProps{Class: "w-44"}) { @dropdownmenu.Group() { @dropdownmenu.Label() { File } @dropdownmenu.Item() { @icon.File() New File @dropdownmenu.Shortcut() { ⌘N } } @dropdownmenu.Item() { @icon.Folder() New Folder @dropdownmenu.Shortcut() { ⇧⌘N } } @dropdownmenu.Sub() { @dropdownmenu.SubTrigger() { @icon.FolderOpen() Open Recent } @dropdownmenu.SubContent() { @dropdownmenu.Group() { @dropdownmenu.Label() { Recent Projects } @dropdownmenu.Item() { @icon.FileCode() Project Alpha } @dropdownmenu.Item() { @icon.FileCode() Project Beta } @dropdownmenu.Sub() { @dropdownmenu.SubTrigger() { @icon.Ellipsis() More Projects } @dropdownmenu.SubContent() { @dropdownmenu.Item() { @icon.FileCode() Project Gamma } @dropdownmenu.Item() { @icon.FileCode() Project Delta } } } } @dropdownmenu.Separator() @dropdownmenu.Group() { @dropdownmenu.Item() { @icon.FolderSearch() Browse... } } } } @dropdownmenu.Separator() @dropdownmenu.Item() { @icon.Save() Save @dropdownmenu.Shortcut() { ⌘S } } @dropdownmenu.Item() { @icon.Download() Export @dropdownmenu.Shortcut() { ⇧⌘E } } } @dropdownmenu.Separator() @dropdownmenu.Group() { @dropdownmenu.Label() { View } @dropdownmenu.CheckboxItem(dropdownmenu.CheckboxItemProps{Checked: true}) { @icon.Eye() Show Sidebar } @dropdownmenu.CheckboxItem() { @icon.LayoutTemplate() Show Status Bar } @dropdownmenu.Sub() { @dropdownmenu.SubTrigger() { @icon.Palette() Theme } @dropdownmenu.SubContent() { @dropdownmenu.Group() { @dropdownmenu.Label() { Appearance } @dropdownmenu.RadioGroup() { @dropdownmenu.RadioItem(dropdownmenu.RadioItemProps{ Value: "light", Checked: true, }) { @icon.Sun() Light } @dropdownmenu.RadioItem(dropdownmenu.RadioItemProps{Value: "dark"}) { @icon.Moon() Dark } @dropdownmenu.RadioItem(dropdownmenu.RadioItemProps{Value: "system"}) { @icon.Monitor() System } } } } } } @dropdownmenu.Separator() @dropdownmenu.Group() { @dropdownmenu.Label() { Account } @dropdownmenu.Item() { @icon.User() Profile @dropdownmenu.Shortcut() { ⇧⌘P } } @dropdownmenu.Item() { @icon.CreditCard() Billing } @dropdownmenu.Sub() { @dropdownmenu.SubTrigger() { @icon.Settings() Settings } @dropdownmenu.SubContent() { @dropdownmenu.Group() { @dropdownmenu.Label() { Preferences } @dropdownmenu.Item() { @icon.Keyboard() Keyboard Shortcuts } @dropdownmenu.Item() { @icon.Languages() Language } @dropdownmenu.Sub() { @dropdownmenu.SubTrigger() { @icon.Bell() Notifications } @dropdownmenu.SubContent() { @dropdownmenu.Group() { @dropdownmenu.Label() { Notification Types } @dropdownmenu.CheckboxItem(dropdownmenu.CheckboxItemProps{Checked: true}) { @icon.Bell() Push Notifications } @dropdownmenu.CheckboxItem(dropdownmenu.CheckboxItemProps{Checked: true}) { @icon.Mail() Email Notifications } } } } } @dropdownmenu.Separator() @dropdownmenu.Group() { @dropdownmenu.Item() { @icon.Shield() Privacy & Security } } } } } @dropdownmenu.Separator() @dropdownmenu.Group() { @dropdownmenu.Item() { @icon.CircleQuestionMark() Help & Support } @dropdownmenu.Item() { @icon.FileText() Documentation } } @dropdownmenu.Separator() @dropdownmenu.Group() { @dropdownmenu.Item(dropdownmenu.ItemProps{Variant: dropdownmenu.ItemVariantDestructive}) { @icon.LogOut() Sign Out @dropdownmenu.Shortcut() { ⇧⌘Q } } } } }}API Reference
Content
The dropdownmenu.Content component is the menu surface, anchored to the trigger.
Item
The dropdownmenu.Item component is a selectable entry. It renders as a link when Href is set and closes the menu on click.
CheckboxItem
The dropdownmenu.CheckboxItem component is a toggleable item with a check indicator. It keeps the menu open on click.
RadioGroup
The dropdownmenu.RadioGroup component wraps radio items and enforces single selection among them.
RadioItem
The dropdownmenu.RadioItem component is a single-select item with a dot indicator. It keeps the menu open on click.
SubTrigger
The dropdownmenu.SubTrigger component opens a nested submenu on hover. Wrap it with dropdownmenu.SubContent in a dropdownmenu.Sub.