Right click hereLong press here
"use client";
import {
ContextMenu,
ContextMenuPopup,
ContextMenuItem,
ContextMenuTrigger,
} from "@/components/ui/context-menu";
export default function ContextMenuDemo() {
return (
<ContextMenu>
<ContextMenuTrigger className="border text-muted-foreground flex aspect-video w-full max-w-xs items-center justify-center rounded-card corner-shape border-dashed text-sm select-none">
<span className="hidden pointer-fine:inline-block">Right click here</span>
<span className="hidden pointer-coarse:inline-block">Long press here</span>
</ContextMenuTrigger>
<ContextMenuPopup>
<ContextMenuItem>Profile</ContextMenuItem>
<ContextMenuItem>Settings</ContextMenuItem>
<ContextMenuItem>Billing</ContextMenuItem>
</ContextMenuPopup>
</ContextMenu>
);
}Installation
Usage
import {
ContextMenu,
ContextMenuPopup,
ContextMenuItem,
ContextMenuTrigger,
} from "@/components/ui/context-menu";<ContextMenu>
<ContextMenuTrigger>Right click here</ContextMenuTrigger>
<ContextMenuPopup>
<ContextMenuItem>Profile</ContextMenuItem>
<ContextMenuItem>Settings</ContextMenuItem>
<ContextMenuItem>Billing</ContextMenuItem>
</ContextMenuPopup>
</ContextMenu>Examples
With Submenu
Right click hereLong press here
"use client";
import {
ContextMenu,
ContextMenuPopup,
ContextMenuItem,
ContextMenuSub,
ContextMenuSubPopup,
ContextMenuSubTrigger,
ContextMenuTrigger,
} from "@/components/ui/context-menu";
export default function ContextMenuSubmenu() {
return (
<ContextMenu>
<ContextMenuTrigger className="border text-muted-foreground flex aspect-video w-full max-w-xs items-center justify-center rounded-card corner-shape border-dashed text-sm select-none">
<span className="hidden pointer-fine:inline-block">Right click here</span>
<span className="hidden pointer-coarse:inline-block">Long press here</span>
</ContextMenuTrigger>
<ContextMenuPopup>
<ContextMenuItem>Undo</ContextMenuItem>
<ContextMenuItem>Redo</ContextMenuItem>
<ContextMenuSub>
<ContextMenuSubTrigger>Find</ContextMenuSubTrigger>
<ContextMenuSubPopup>
<ContextMenuItem>Search the Web</ContextMenuItem>
<ContextMenuItem>Find Next</ContextMenuItem>
<ContextMenuItem>Find Previous</ContextMenuItem>
</ContextMenuSubPopup>
</ContextMenuSub>
</ContextMenuPopup>
</ContextMenu>
);
}With Shortcut
Right click hereLong press here
"use client";
import {
ContextMenu,
ContextMenuPopup,
ContextMenuItem,
ContextMenuShortcut,
ContextMenuTrigger,
} from "@/components/ui/context-menu";
export default function ContextMenuShortcut_() {
return (
<ContextMenu>
<ContextMenuTrigger className="border text-muted-foreground flex aspect-video w-full max-w-xs items-center justify-center rounded-card corner-shape border-dashed text-sm select-none">
<span className="hidden pointer-fine:inline-block">Right click here</span>
<span className="hidden pointer-coarse:inline-block">Long press here</span>
</ContextMenuTrigger>
<ContextMenuPopup>
<ContextMenuItem>
New Tab
<ContextMenuShortcut>⌘T</ContextMenuShortcut>
</ContextMenuItem>
<ContextMenuItem>
New Window
<ContextMenuShortcut>⌘N</ContextMenuShortcut>
</ContextMenuItem>
<ContextMenuItem>
Close Tab
<ContextMenuShortcut>⌘W</ContextMenuShortcut>
</ContextMenuItem>
</ContextMenuPopup>
</ContextMenu>
);
}With Icon
Right click hereLong press here
"use client";
import {
ContextMenu,
ContextMenuPopup,
ContextMenuItem,
ContextMenuTrigger,
} from "@/components/ui/context-menu";
import { UserIcon, CreditCardIcon, SettingsIcon } from "lucide-react";
export default function ContextMenuIcon() {
return (
<ContextMenu>
<ContextMenuTrigger className="border text-muted-foreground flex aspect-video w-full max-w-xs items-center justify-center rounded-card corner-shape border-dashed text-sm select-none">
<span className="hidden pointer-fine:inline-block">Right click here</span>
<span className="hidden pointer-coarse:inline-block">Long press here</span>
</ContextMenuTrigger>
<ContextMenuPopup>
<ContextMenuItem>
<UserIcon />
Profile
</ContextMenuItem>
<ContextMenuItem>
<CreditCardIcon />
Billing
</ContextMenuItem>
<ContextMenuItem>
<SettingsIcon />
Settings
</ContextMenuItem>
</ContextMenuPopup>
</ContextMenu>
);
}With Checkbox
Right click hereLong press here
"use client";
import * as React from "react";
import {
ContextMenu,
ContextMenuCheckboxItem,
ContextMenuPopup,
ContextMenuTrigger,
} from "@/components/ui/context-menu";
export default function ContextMenuCheckbox() {
const [showStatusBar, setShowStatusBar] = React.useState(true);
const [showActivityBar, setShowActivityBar] = React.useState(false);
const [showPanel, setShowPanel] = React.useState(false);
return (
<ContextMenu>
<ContextMenuTrigger className="border text-muted-foreground flex aspect-video w-full max-w-xs items-center justify-center rounded-card corner-shape border-dashed text-sm select-none">
<span className="hidden pointer-fine:inline-block">Right click here</span>
<span className="hidden pointer-coarse:inline-block">Long press here</span>
</ContextMenuTrigger>
<ContextMenuPopup>
<ContextMenuCheckboxItem
checked={showStatusBar}
onCheckedChange={setShowStatusBar}
>
Status Bar
</ContextMenuCheckboxItem>
<ContextMenuCheckboxItem
checked={showActivityBar}
onCheckedChange={setShowActivityBar}
>
Activity Bar
</ContextMenuCheckboxItem>
<ContextMenuCheckboxItem
checked={showPanel}
onCheckedChange={setShowPanel}
>
Panel
</ContextMenuCheckboxItem>
</ContextMenuPopup>
</ContextMenu>
);
}With Radio Group
Right click hereLong press here
"use client";
import * as React from "react";
import {
ContextMenu,
ContextMenuPopup,
ContextMenuRadioGroup,
ContextMenuRadioItem,
ContextMenuTrigger,
} from "@/components/ui/context-menu";
export default function ContextMenuRadio() {
const [position, setPosition] = React.useState("bottom");
return (
<ContextMenu>
<ContextMenuTrigger className="border text-muted-foreground flex aspect-video w-full max-w-xs items-center justify-center rounded-card corner-shape border-dashed text-sm select-none">
<span className="hidden pointer-fine:inline-block">Right click here</span>
<span className="hidden pointer-coarse:inline-block">Long press here</span>
</ContextMenuTrigger>
<ContextMenuPopup>
<ContextMenuRadioGroup value={position} onValueChange={setPosition}>
<ContextMenuRadioItem value="top">Top</ContextMenuRadioItem>
<ContextMenuRadioItem value="bottom">Bottom</ContextMenuRadioItem>
<ContextMenuRadioItem value="right">Right</ContextMenuRadioItem>
</ContextMenuRadioGroup>
</ContextMenuPopup>
</ContextMenu>
);
}Destructive
Right click hereLong press here
"use client";
import {
ContextMenu,
ContextMenuPopup,
ContextMenuItem,
ContextMenuSeparator,
ContextMenuTrigger,
} from "@/components/ui/context-menu";
export default function ContextMenuDestructive() {
return (
<ContextMenu>
<ContextMenuTrigger className="border text-muted-foreground flex aspect-video w-full max-w-xs items-center justify-center rounded-card corner-shape border-dashed text-sm select-none">
<span className="hidden pointer-fine:inline-block">Right click here</span>
<span className="hidden pointer-coarse:inline-block">Long press here</span>
</ContextMenuTrigger>
<ContextMenuPopup>
<ContextMenuItem>Rename</ContextMenuItem>
<ContextMenuItem>Duplicate</ContextMenuItem>
<ContextMenuSeparator />
<ContextMenuItem variant="destructive">Delete</ContextMenuItem>
</ContextMenuPopup>
</ContextMenu>
);
}Groups
Right click hereLong press here
"use client";
import {
ContextMenu,
ContextMenuPopup,
ContextMenuGroup,
ContextMenuItem,
ContextMenuLabel,
ContextMenuSeparator,
ContextMenuTrigger,
} from "@/components/ui/context-menu";
export default function ContextMenuGroups() {
return (
<ContextMenu>
<ContextMenuTrigger className="border text-muted-foreground flex aspect-video w-full max-w-xs items-center justify-center rounded-card corner-shape border-dashed text-sm select-none">
<span className="hidden pointer-fine:inline-block">Right click here</span>
<span className="hidden pointer-coarse:inline-block">Long press here</span>
</ContextMenuTrigger>
<ContextMenuPopup>
<ContextMenuGroup>
<ContextMenuLabel>Personal</ContextMenuLabel>
<ContextMenuItem>Profile</ContextMenuItem>
<ContextMenuItem>Settings</ContextMenuItem>
</ContextMenuGroup>
<ContextMenuSeparator />
<ContextMenuGroup>
<ContextMenuLabel>Team</ContextMenuLabel>
<ContextMenuItem>Members</ContextMenuItem>
<ContextMenuItem>Billing</ContextMenuItem>
</ContextMenuGroup>
</ContextMenuPopup>
</ContextMenu>
);
}