TypeScript 97.4%
SQL 1%
JavaScript 0.9%
CSS 0.6%
1"use client";2import * as React from "react";3import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";4import { Check, ChevronRight } from "lucide-react";5import { cn } from "@/lib/utils";67export const DropdownMenu = DropdownMenuPrimitive.Root;8export const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;9export const DropdownMenuGroup = DropdownMenuPrimitive.Group;10export const DropdownMenuPortal = DropdownMenuPrimitive.Portal;11export const DropdownMenuSub = DropdownMenuPrimitive.Sub;12export const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;1314export const DropdownMenuSubTrigger = React.forwardRef<React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>, React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger>>(15 function DropdownMenuSubTrigger({ className, children, ...props }, ref) {16 return (17 <DropdownMenuPrimitive.SubTrigger ref={ref} className={cn("flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-bg-muted data-[state=open]:bg-bg-muted [&_svg]:size-4", className)} {...props}>18 {children}19 <ChevronRight className="ml-auto" />20 </DropdownMenuPrimitive.SubTrigger>21 );22 },23);2425export const DropdownMenuSubContent = React.forwardRef<React.ElementRef<typeof DropdownMenuPrimitive.SubContent>, React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>>(26 function DropdownMenuSubContent({ className, ...props }, ref) {27 return <DropdownMenuPrimitive.SubContent ref={ref} className={cn("z-50 min-w-[8rem] overflow-hidden rounded-lg border border-border bg-bg-elevated p-1 shadow-lg animate-scale-in", className)} {...props} />;28 },29);3031export const DropdownMenuContent = React.forwardRef<React.ElementRef<typeof DropdownMenuPrimitive.Content>, React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>>(32 function DropdownMenuContent({ className, sideOffset = 6, ...props }, ref) {33 return (34 <DropdownMenuPrimitive.Portal>35 <DropdownMenuPrimitive.Content ref={ref} sideOffset={sideOffset} className={cn("z-50 min-w-[10rem] overflow-hidden rounded-lg border border-border bg-bg-elevated p-1 shadow-lg animate-scale-in", className)} {...props} />36 </DropdownMenuPrimitive.Portal>37 );38 },39);4041export const DropdownMenuItem = React.forwardRef<React.ElementRef<typeof DropdownMenuPrimitive.Item>, React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & { inset?: boolean; destructive?: boolean }>(42 function DropdownMenuItem({ className, inset, destructive, ...props }, ref) {43 return (44 <DropdownMenuPrimitive.Item45 ref={ref}46 className={cn(47 "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-bg-muted data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:size-4 [&_svg]:text-fg-muted",48 inset && "pl-8",49 destructive && "text-danger focus:bg-danger-soft [&_svg]:text-danger",50 className,51 )}52 {...props}53 />54 );55 },56);5758export const DropdownMenuCheckboxItem = React.forwardRef<React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>, React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>>(59 function DropdownMenuCheckboxItem({ className, children, checked, ...props }, ref) {60 return (61 <DropdownMenuPrimitive.CheckboxItem ref={ref} className={cn("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-bg-muted data-[disabled]:opacity-50", className)} checked={checked} {...props}>62 <span className="absolute left-2 flex size-4 items-center justify-center">63 <DropdownMenuPrimitive.ItemIndicator>64 <Check className="size-4" />65 </DropdownMenuPrimitive.ItemIndicator>66 </span>67 {children}68 </DropdownMenuPrimitive.CheckboxItem>69 );70 },71);7273export const DropdownMenuRadioItem = React.forwardRef<React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>, React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>>(74 function DropdownMenuRadioItem({ className, children, ...props }, ref) {75 return (76 <DropdownMenuPrimitive.RadioItem ref={ref} className={cn("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-bg-muted data-[disabled]:opacity-50", className)} {...props}>77 <span className="absolute left-2 flex size-4 items-center justify-center">78 <DropdownMenuPrimitive.ItemIndicator>79 <Check className="size-4" />80 </DropdownMenuPrimitive.ItemIndicator>81 </span>82 {children}83 </DropdownMenuPrimitive.RadioItem>84 );85 },86);8788export const DropdownMenuLabel = React.forwardRef<React.ElementRef<typeof DropdownMenuPrimitive.Label>, React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & { inset?: boolean }>(function DropdownMenuLabel({ className, inset, ...props }, ref) {89 return <DropdownMenuPrimitive.Label ref={ref} className={cn("px-2 py-1.5 text-[11px] font-medium uppercase tracking-wide text-fg-subtle", inset && "pl-8", className)} {...props} />;90});9192export const DropdownMenuSeparator = React.forwardRef<React.ElementRef<typeof DropdownMenuPrimitive.Separator>, React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>>(function DropdownMenuSeparator({ className, ...props }, ref) {93 return <DropdownMenuPrimitive.Separator ref={ref} className={cn("-mx-1 my-1 h-px bg-border", className)} {...props} />;94});9596export function DropdownMenuShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {97 return <span className={cn("ml-auto text-xs tracking-widest text-fg-subtle", className)} {...props} />;98}99