All Taste components
Overlays
Context menu
Right-click actions for an item in a list, opened where the pointer is.
at pointer · submenu arrow · shortcuts · destructive item
Brand assets12 files
Website brief.pdf2.4 MB
Quote Q-318.pdf180 KB
Site photos.zip48 MB
// Built on Radix (npm i @radix-ui/react-context-menu): opens at the pointer on
// right-click or long-press, with arrow keys, submenus and Escape handled.
import * as CM from "@radix-ui/react-context-menu";
import { ChevronRight, FileText, Folder, Link, Pencil, Share2, Trash2 } from "lucide-react";
import { cn } from "@/lib/utils";
const item =
"flex h-8 cursor-pointer select-none items-center gap-2.5 rounded px-2 text-[13.5px] text-fg outline-none data-[highlighted]:bg-surface-2 data-[state=open]:bg-surface-2 [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-fg-muted";
const panel = "w-[220px] rounded-lg border border-border bg-bg p-1 text-fg shadow-lg";
const kbd = "ml-auto rounded-sm border border-b-2 border-border-strong bg-surface px-1.5 font-mono text-[11px] text-fg-muted";
export function FileRow({ name, folders, children }: { name: string; folders: string[]; children: React.ReactNode }) {
return (
<CM.Root>
<CM.Trigger asChild>{children}</CM.Trigger>
<CM.Portal>
<CM.Content className={panel} aria-label={name}>
<CM.Item className={item}><FileText aria-hidden />Open</CM.Item>
<CM.Item className={item}><Pencil aria-hidden />Rename<kbd className={kbd}>F2</kbd></CM.Item>
<CM.Sub>
<CM.SubTrigger className={item}>
<Folder aria-hidden />Move to<ChevronRight className="ml-auto !size-3.5 !text-fg-subtle" aria-hidden />
</CM.SubTrigger>
<CM.Portal>
<CM.SubContent className={panel} sideOffset={4}>
{folders.map((f) => <CM.Item key={f} className={item}><Folder aria-hidden />{f}</CM.Item>)}
</CM.SubContent>
</CM.Portal>
</CM.Sub>
<CM.Item className={item}><Share2 aria-hidden />Share…</CM.Item>
<CM.Separator className="-mx-1 my-1 h-px bg-border" />
<CM.Item className={item}><Link aria-hidden />Copy link<kbd className={kbd}>⌘L</kbd></CM.Item>
<CM.Separator className="-mx-1 my-1 h-px bg-border" />
<CM.Item className={cn(item, "text-danger data-[highlighted]:bg-danger-soft [&>svg]:text-danger")}>
<Trash2 aria-hidden />Delete
</CM.Item>
</CM.Content>
</CM.Portal>
</CM.Root>
);
}
The code uses the Taste Tailwind preset. Make yours on the Taste page with Export my system.