SPB Git forge

spb/fetcha

Public
11commits 1branches 0releases
1.5 MBsize
maindefault branch
16 days agolast push
TypeScript 97.5% SQL 1.4% Python 0.8%
3.6 KB · 66 lines tsx
Raw Blame History
1"use client";2import * as React from "react";3import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";4import { Check } 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;1112export const DropdownMenuContent = React.forwardRef<React.ElementRef<typeof DropdownMenuPrimitive.Content>, React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>>(({ className, sideOffset = 6, ...props }, ref) => (13  <DropdownMenuPrimitive.Portal>14    <DropdownMenuPrimitive.Content15      ref={ref}16      sideOffset={sideOffset}17      className={cn("z-50 min-w-[10rem] overflow-hidden rounded-md border border-border bg-bg-elevated p-1 text-fg shadow-md data-[state=open]:animate-fade-in", className)}18      {...props}19    />20  </DropdownMenuPrimitive.Portal>21));22DropdownMenuContent.displayName = "DropdownMenuContent";2324export const DropdownMenuItem = React.forwardRef<React.ElementRef<typeof DropdownMenuPrimitive.Item>, React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & { inset?: boolean; destructive?: boolean }>(25  ({ className, inset, destructive, ...props }, ref) => (26    <DropdownMenuPrimitive.Item27      ref={ref}28      className={cn(29        "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-[13px] outline-none transition-colors focus:bg-bg-muted data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:size-4 [&_svg]:text-fg-subtle",30        inset && "pl-8",31        destructive && "text-danger focus:bg-danger-soft [&_svg]:text-danger",32        className,33      )}34      {...props}35    />36  ),37);38DropdownMenuItem.displayName = "DropdownMenuItem";3940export const DropdownMenuCheckboxItem = React.forwardRef<React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>, React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>>(({ className, children, checked, ...props }, ref) => (41  <DropdownMenuPrimitive.CheckboxItem42    ref={ref}43    className={cn("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-[13px] outline-none transition-colors focus:bg-bg-muted data-[disabled]:pointer-events-none data-[disabled]:opacity-50", className)}44    checked={checked}45    {...props}46  >47    <span className="absolute left-2 flex size-3.5 items-center justify-center">48      <DropdownMenuPrimitive.ItemIndicator>49        <Check className="size-3.5" />50      </DropdownMenuPrimitive.ItemIndicator>51    </span>52    {children}53  </DropdownMenuPrimitive.CheckboxItem>54));55DropdownMenuCheckboxItem.displayName = "DropdownMenuCheckboxItem";5657export const DropdownMenuLabel = React.forwardRef<React.ElementRef<typeof DropdownMenuPrimitive.Label>, React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label>>(({ className, ...props }, ref) => (58  <DropdownMenuPrimitive.Label ref={ref} className={cn("px-2 py-1.5 text-[11px] font-medium uppercase tracking-wide text-fg-subtle", className)} {...props} />59));60DropdownMenuLabel.displayName = "DropdownMenuLabel";6162export const DropdownMenuSeparator = React.forwardRef<React.ElementRef<typeof DropdownMenuPrimitive.Separator>, React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>>(({ className, ...props }, ref) => (63  <DropdownMenuPrimitive.Separator ref={ref} className={cn("-mx-1 my-1 h-px bg-border", className)} {...props} />64));65DropdownMenuSeparator.displayName = "DropdownMenuSeparator";66