SPB Git forge

spb/polyllm

Public
15commits 1branches 0releases
2.2 MBsize
maindefault branch
13 days agolast push
TypeScript 97.4% SQL 1% JavaScript 0.9% CSS 0.6%
5.7 KB · 99 lines tsx
Raw Blame History
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