ComboboxData Table
Get Started
Introduction
Components
Accordion
Badge
Button
Card
Checkbox
Command
Dialog
Dropdown Menu
Input
Select
Switch
Table
Tabs
Toast
Tooltip
Forms
Controlled Input
Field Arrays
Submit
Validation

Context Menu

A menu triggered by right-click, displayed at the cursor position.

Right-click here
default
destructive

#Installation

bunx --bun barefoot add context-menu

#Usage

Right-click here
1"use client"23import { createSignal } from '@barefootjs/dom'4import {5  ContextMenu,6  ContextMenuTrigger,7  ContextMenuContent,8  ContextMenuItem,9  ContextMenuSeparator,10  ContextMenuShortcut,11} from '@/components/ui/context-menu'1213function ContextMenuDemo() {14  const [open, setOpen] = createSignal(false)1516  return (17    <ContextMenu open={open()} onOpenChange={setOpen}>18      <ContextMenuTrigger>19        <div className="flex h-[150px] w-[300px] items-center justify-center rounded-md border border-dashed text-sm">20          Right-click here21        </div>22      </ContextMenuTrigger>23      <ContextMenuContent>24        <ContextMenuItem>25          <span>Back</span>26          <ContextMenuShortcut>⌘[</ContextMenuShortcut>27        </ContextMenuItem>28        <ContextMenuItem>29          <span>Forward</span>30          <ContextMenuShortcut>⌘]</ContextMenuShortcut>31        </ContextMenuItem>32        <ContextMenuSeparator />33        <ContextMenuItem>34          <span>Reload</span>35          <ContextMenuShortcut>⌘R</ContextMenuShortcut>36        </ContextMenuItem>37      </ContextMenuContent>38    </ContextMenu>39  )40}

#Examples

#Basic

Right-click here
1"use client"23import { createSignal } from '@barefootjs/dom'4import {5  ContextMenu,6  ContextMenuTrigger,7  ContextMenuContent,8  ContextMenuItem,9  ContextMenuShortcut,10  ContextMenuSeparator,11} from '@/components/ui/context-menu'1213function BasicContextMenu() {14  const [open, setOpen] = createSignal(false)1516  return (17    <ContextMenu open={open()} onOpenChange={setOpen}>18      <ContextMenuTrigger>19        <div className="flex h-[150px] w-[300px] items-center justify-center rounded-md border border-dashed text-sm">20          Right-click here21        </div>22      </ContextMenuTrigger>23      <ContextMenuContent>24        <ContextMenuItem>25          <span>Back</span>26          <ContextMenuShortcut>⌘[</ContextMenuShortcut>27        </ContextMenuItem>28        <ContextMenuItem>29          <span>Forward</span>30          <ContextMenuShortcut>⌘]</ContextMenuShortcut>31        </ContextMenuItem>32        <ContextMenuItem>33          <span>Reload</span>34          <ContextMenuShortcut>⌘R</ContextMenuShortcut>35        </ContextMenuItem>36        <ContextMenuSeparator />37        <ContextMenuItem>38          <span>Save As...</span>39          <ContextMenuShortcut>⇧⌘S</ContextMenuShortcut>40        </ContextMenuItem>41      </ContextMenuContent>42    </ContextMenu>43  )44}

#Checkbox Items

Right-click here
1"use client"23import { createSignal } from '@barefootjs/dom'4import {5  ContextMenu,6  ContextMenuTrigger,7  ContextMenuContent,8  ContextMenuCheckboxItem,9  ContextMenuLabel,10  ContextMenuSeparator,11} from '@/components/ui/context-menu'1213function CheckboxContextMenu() {14  const [open, setOpen] = createSignal(false)15  const [showBookmarks, setShowBookmarks] = createSignal(true)16  const [showFullUrls, setShowFullUrls] = createSignal(false)1718  return (19    <ContextMenu open={open()} onOpenChange={setOpen}>20      <ContextMenuTrigger>21        <div className="flex h-[150px] w-[300px] items-center justify-center rounded-md border border-dashed text-sm">22          Right-click here23        </div>24      </ContextMenuTrigger>25      <ContextMenuContent>26        <ContextMenuLabel>Appearance</ContextMenuLabel>27        <ContextMenuSeparator />28        <ContextMenuCheckboxItem checked={showBookmarks()} onCheckedChange={setShowBookmarks}>29          <span>Show Bookmarks Bar</span>30        </ContextMenuCheckboxItem>31        <ContextMenuCheckboxItem checked={showFullUrls()} onCheckedChange={setShowFullUrls}>32          <span>Show Full URLs</span>33        </ContextMenuCheckboxItem>34      </ContextMenuContent>35    </ContextMenu>36  )37}

#API Reference

ContextMenu

PropTypeDefaultDescription
openbooleanfalseWhether the context menu is open.
onOpenChange(open: boolean) => void-Callback when open state should change.

ContextMenuTrigger

Area that listens for right-click. Uses display:contents wrapper.

ContextMenuContent

PropTypeDefaultDescription
childrenChild-Menu items to display.

ContextMenuItem

PropTypeDefaultDescription
disabledbooleanfalseWhether the item is disabled.
onSelect() => void-Callback when the item is selected. Menu auto-closes after selection.
variant'default' | 'destructive''default'Visual variant. Use "destructive" for dangerous actions.

ContextMenuCheckboxItem

PropTypeDefaultDescription
checkedbooleanfalseWhether the checkbox is checked.
onCheckedChange(checked: boolean) => void-Callback when checked state changes. Menu stays open.
disabledbooleanfalseWhether the item is disabled.

ContextMenuRadioGroup

PropTypeDefaultDescription
valuestring-Currently selected value.
onValueChange(value: string) => void-Callback when value changes.

ContextMenuRadioItem

PropTypeDefaultDescription
valuestring-Value for this radio item.
disabledbooleanfalseWhether the item is disabled.

ContextMenuSub

Submenu container. Manages sub-open state internally. Wrap SubTrigger and SubContent.

ContextMenuSubTrigger

PropTypeDefaultDescription
disabledbooleanfalseWhether the sub trigger is disabled.

ContextMenuSubContent

Content container for submenu items. Positioned to the right of the trigger.

ContextMenuLabel

PropTypeDefaultDescription
childrenChild-The label text to display.

ContextMenuShortcut

PropTypeDefaultDescription
childrenChild-The keyboard shortcut text (e.g., "⇧⌘B").