Components
A data table with a per-row ellipsis dropdown menu exposing edit, copy, and remove actions.

import { Button } from "@/components/ui/table-row-actions-utils/button";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuTrigger,
} from "@/components/ui/table-row-actions-utils/dropdown-menu";
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "@/components/ui/table-row-actions-utils/table";
import {
CopyIcon,
MoreHorizontalIcon,
PencilIcon,
TrashIcon,
} from "lucide-react";
const members = [
{ name: "Ava Carter", email: "ava@acme.com", role: "Owner" },
{ name: "Ben Lopez", email: "ben@acme.com", role: "Member" },
{ name: "Cara Diaz", email: "cara@acme.com", role: "Member" },
];
export default function Default() {
return (
<div className="flex w-full items-center justify-center p-6">
<div className="w-full max-w-xl overflow-hidden rounded-lg border">
<Table>
<TableHeader>
<TableRow>
<TableHead>Name</TableHead>
<TableHead>Role</TableHead>
<TableHead className="w-12" />
</TableRow>
</TableHeader>
<TableBody>
{members.map((member, i) => (
<TableRow key={member.email}>
<TableCell>
<div className="flex flex-col">
<span className="font-medium">{member.name}</span>
<span className="text-muted-foreground">
{member.email}
</span>
</div>
</TableCell>
<TableCell>{member.role}</TableCell>
<TableCell>
<DropdownMenu defaultOpen={i === 0}>
<DropdownMenuTrigger
render={
<Button
variant="ghost"
size="icon-sm"
aria-label={`Actions for ${member.name}`}
>
<MoreHorizontalIcon />
</Button>
}
/>
<DropdownMenuContent align="end" className="w-40">
<DropdownMenuGroup>
<DropdownMenuLabel>Actions</DropdownMenuLabel>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuItem>
<PencilIcon />
Edit
</DropdownMenuItem>
<DropdownMenuItem>
<CopyIcon />
Copy email
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem variant="destructive">
<TrashIcon />
Remove
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</div>
</div>
);
}