shadcn-syntax-menu-primitives
shadcn ui : Menu Primitives
Four shadcn primitives share the Radix Menu surface : DropdownMenu, ContextMenu, Menubar, NavigationMenu. They look similar (a list of items in a popover-ish surface), but each maps to a different interaction model. Picking the right one is a one-question decision : how does the user open the menu? Composition of the body is then nearly identical (Item / CheckboxItem / RadioGroup / Sub / Separator / Shortcut), with NavigationMenu being the one exception that swaps the body for a list-based site-nav surface with a shared Viewport.
Quick Reference
Decision Tree : Which menu primitive?
Q1. How does the user OPEN the menu?
click a button (icon, "...", "Options", avatar) -> DropdownMenu
right-click (or long-press) on an area / row / canvas -> ContextMenu
click a label in a desktop-app top bar (File, Edit, View, Help, with
arrow-key navigation between top-level labels) -> Menubar
hover or click an item in a site / page header
nav, often opening a mega-menu of links -> NavigationMenu
ALWAYS pick from the interaction model first. NEVER pick by visual shape ; DropdownMenu and ContextMenu render almost identically but expose different a11y semantics (role="menu" opened from a button vs from contextmenu event).