Barazo default frontend barazo.forum
at main 187 lines 7.6 kB view raw
1'use client' 2 3import * as React from 'react' 4import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu' 5import { Check, CaretRight, Circle } from '@phosphor-icons/react' 6 7import { cn } from '@/lib/utils' 8 9const DropdownMenu = DropdownMenuPrimitive.Root 10 11const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger 12 13const DropdownMenuGroup = DropdownMenuPrimitive.Group 14 15const DropdownMenuPortal = DropdownMenuPrimitive.Portal 16 17const DropdownMenuSub = DropdownMenuPrimitive.Sub 18 19const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup 20 21const DropdownMenuSubTrigger = React.forwardRef< 22 React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>, 23 React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & { 24 inset?: boolean 25 } 26>(({ className, inset, children, ...props }, ref) => ( 27 <DropdownMenuPrimitive.SubTrigger 28 ref={ref} 29 className={cn( 30 'flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', 31 inset && 'pl-8', 32 className 33 )} 34 {...props} 35 > 36 {children} 37 <span className="ml-auto"> 38 <CaretRight size={16} aria-hidden="true" /> 39 </span> 40 </DropdownMenuPrimitive.SubTrigger> 41)) 42DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName 43 44const DropdownMenuSubContent = React.forwardRef< 45 React.ElementRef<typeof DropdownMenuPrimitive.SubContent>, 46 React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent> 47>(({ className, ...props }, ref) => ( 48 <DropdownMenuPrimitive.SubContent 49 ref={ref} 50 className={cn( 51 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]', 52 className 53 )} 54 {...props} 55 /> 56)) 57DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName 58 59const DropdownMenuContent = React.forwardRef< 60 React.ElementRef<typeof DropdownMenuPrimitive.Content>, 61 React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content> 62>(({ className, sideOffset = 4, ...props }, ref) => ( 63 <DropdownMenuPrimitive.Portal> 64 <DropdownMenuPrimitive.Content 65 ref={ref} 66 sideOffset={sideOffset} 67 className={cn( 68 'z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]', 69 className 70 )} 71 {...props} 72 /> 73 </DropdownMenuPrimitive.Portal> 74)) 75DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName 76 77const DropdownMenuItem = React.forwardRef< 78 React.ElementRef<typeof DropdownMenuPrimitive.Item>, 79 React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & { 80 inset?: boolean 81 } 82>(({ className, inset, ...props }, ref) => ( 83 <DropdownMenuPrimitive.Item 84 ref={ref} 85 className={cn( 86 '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-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', 87 inset && 'pl-8', 88 className 89 )} 90 {...props} 91 /> 92)) 93DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName 94 95const DropdownMenuCheckboxItem = React.forwardRef< 96 React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>, 97 React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem> 98>(({ className, children, checked, ...props }, ref) => ( 99 <DropdownMenuPrimitive.CheckboxItem 100 ref={ref} 101 className={cn( 102 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50', 103 className 104 )} 105 checked={checked} 106 {...props} 107 > 108 <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center"> 109 <DropdownMenuPrimitive.ItemIndicator> 110 <Check size={16} /> 111 </DropdownMenuPrimitive.ItemIndicator> 112 </span> 113 {children} 114 </DropdownMenuPrimitive.CheckboxItem> 115)) 116DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName 117 118const DropdownMenuRadioItem = React.forwardRef< 119 React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>, 120 React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem> 121>(({ className, children, ...props }, ref) => ( 122 <DropdownMenuPrimitive.RadioItem 123 ref={ref} 124 className={cn( 125 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50', 126 className 127 )} 128 {...props} 129 > 130 <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center"> 131 <DropdownMenuPrimitive.ItemIndicator> 132 <Circle size={8} weight="fill" /> 133 </DropdownMenuPrimitive.ItemIndicator> 134 </span> 135 {children} 136 </DropdownMenuPrimitive.RadioItem> 137)) 138DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName 139 140const DropdownMenuLabel = React.forwardRef< 141 React.ElementRef<typeof DropdownMenuPrimitive.Label>, 142 React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & { 143 inset?: boolean 144 } 145>(({ className, inset, ...props }, ref) => ( 146 <DropdownMenuPrimitive.Label 147 ref={ref} 148 className={cn('px-2 py-1.5 text-sm font-semibold', inset && 'pl-8', className)} 149 {...props} 150 /> 151)) 152DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName 153 154const DropdownMenuSeparator = React.forwardRef< 155 React.ElementRef<typeof DropdownMenuPrimitive.Separator>, 156 React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator> 157>(({ className, ...props }, ref) => ( 158 <DropdownMenuPrimitive.Separator 159 ref={ref} 160 className={cn('-mx-1 my-1 h-px bg-muted', className)} 161 {...props} 162 /> 163)) 164DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName 165 166const DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => { 167 return <span className={cn('ml-auto text-xs tracking-widest opacity-60', className)} {...props} /> 168} 169DropdownMenuShortcut.displayName = 'DropdownMenuShortcut' 170 171export { 172 DropdownMenu, 173 DropdownMenuTrigger, 174 DropdownMenuContent, 175 DropdownMenuItem, 176 DropdownMenuCheckboxItem, 177 DropdownMenuRadioItem, 178 DropdownMenuLabel, 179 DropdownMenuSeparator, 180 DropdownMenuShortcut, 181 DropdownMenuGroup, 182 DropdownMenuPortal, 183 DropdownMenuSub, 184 DropdownMenuSubContent, 185 DropdownMenuSubTrigger, 186 DropdownMenuRadioGroup, 187}