Context Menu
Adds a right-click menu to any region or element. It shares the visual style of Dropmenu but opens at the pointer position and supports nested submenus, disabled items, and separators. Menus automatically adjust their placement to stay within the viewport, flipping away from edges when needed.
<x-bladewind::context-menu name="basic-menu">
<x-slot:region>
<div class="rounded-lg border border-dashed ...">Right-click anywhere in this box</div>
</x-slot:region>
<x-bladewind::context-menu.item icon="pencil-square">Edit</x-bladewind::context-menu.item>
<x-bladewind::context-menu.item icon="document-duplicate">Duplicate</x-bladewind::context-menu.item>
<x-bladewind::context-menu.item divider="true" />
<x-bladewind::context-menu.item icon="trash" tone="danger">Delete</x-bladewind::context-menu.item>
</x-bladewind::context-menu>
The region slot defines the area that opens the menu when right-clicked. The keyboard context-menu key works
automatically because it triggers the same browser contextmenu event. All other children are treated as menu
items and appear in the order they are defined.
Disabled items
Set disabled="true" on an item to grey it out and remove it from pointer and
keyboard interaction entirely: it is skipped by arrow-key navigation and cannot be clicked or activated.
<x-bladewind::context-menu name="disabled-menu">
...
<x-bladewind::context-menu.item divider="true" />
<x-bladewind::context-menu.item disabled icon="trash" tone="danger">Delete</x-bladewind::context-menu.item>
</x-bladewind::context-menu>
Tone
tone="danger" tints an item's label and icon red, for destructive actions like
the Delete item above. The default is normal.
Nested submenus
Give an item a submenu slot containing further
x-bladewind::context-menu.item elements to turn it into a submenu trigger. A
submenu opens on hover, click, or →, and can itself contain another submenu,
nesting is unlimited. ← or Escape closes the deepest
open submenu and returns focus to its parent item.
<x-bladewind::context-menu name="submenu-example">
<x-slot:region>
...
<x-bladewind::context-menu.item icon="folder-plus">
New
<x-slot:submenu>
<x-bladewind::context-menu.item icon="document">File
<x-slot:submenu>
<x-bladewind::context-menu.item icon="document">Word</x-bladewind::context-menu.item>
<x-bladewind::context-menu.item icon="document">Excel</x-bladewind::context-menu.item>
</x-slot:submenu>
</x-bladewind::context-menu.item>
<x-bladewind::context-menu.item icon="folder">Folder</x-bladewind::context-menu.item>
</x-slot:submenu>
</x-bladewind::context-menu.item>
<x-bladewind::context-menu.item icon="pencil-square">Rename</x-bladewind::context-menu.item>
</x-bladewind::context-menu>
</x-bladewind::context-menu>
Targeting an element elsewhere on the page
Wrapping an element in the component’s region slot works well for a
single card or row, but can be inconvenient for larger areas such as the entire page or elements you do not want to restructure.
The target attribute provides an alternative. Set it to a CSS selector
or element ID, and the component will listen for right-clicks on that element instead of using a region slot.
The component can then be placed anywhere on the page, commonly just before the closing