'use client'; import * as React from 'react'; import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'; import { ArrowRight, ArrowUpRight, CaretRight, Check3 as Check, ChevronRight } from '../icons/NucleoIconOutlined'; import { cn } from '@/lib/classMerge'; import { Checkbox } from '../checkbox/Checkbox'; import { Button } from '../buttons/Button'; import Link from 'next/link'; const DropdownMenu = DropdownMenuPrimitive.Root; const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger; const DropdownMenuGroup = DropdownMenuPrimitive.Group; const DropdownMenuPortal = DropdownMenuPrimitive.Portal; const DropdownMenuSub = DropdownMenuPrimitive.Sub; const DropdownMenuSubTrigger = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { inset?: boolean; } >(({ className, inset, children, ...props }, ref) => ( {children}
)); DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName; const baseContentClass = cn( `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 z-50 min-w-[8rem] overflow-hidden `, 'bg-background text-foreground ', 'rounded-md border p-1' ); const DropdownMenuSubContent = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )); DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName; const DropdownMenuContent = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { footerContent?: React.ReactNode; } >(({ className, children, sideOffset = 4, footerContent, ...props }, ref) => { const NodeWrapper = footerContent ? 'div' : React.Fragment; const nodeWrapperProps = footerContent ? { className: 'p-2' } : {}; return ( {children} {footerContent &&
{footerContent}
}
); }); DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName; const DropdownMenuItem = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { inset?: boolean; closeOnSelect?: boolean; selectType?: string; truncate?: boolean; } >(({ className, closeOnSelect = true, onClick, inset, selectType, truncate, ...props }, ref) => ( { if (!closeOnSelect) { e.stopPropagation(); e.preventDefault(); } onClick?.(e); }} {...props} /> )); DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName; const itemClass = cn( 'focus:bg-item-hover focus:text-foreground', 'relative flex cursor-pointer items-center rounded-sm py-1.5 text-sm transition-colors outline-none select-none', 'data-[disabled]:pointer-events-none data-[disabled]:opacity-60', 'gap-1.5' ); const DropdownMenuCheckboxItemSingle = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { closeOnSelect?: boolean; selectType?: boolean; } >(({ className, children, onClick, checked, closeOnSelect = true, selectType, ...props }, ref) => ( { if (closeOnSelect) { e.stopPropagation(); e.preventDefault(); } onClick?.(e); }} {...props}> {children}
)); DropdownMenuCheckboxItemSingle.displayName = DropdownMenuPrimitive.CheckboxItem.displayName; const DropdownMenuCheckboxItemMultiple = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { closeOnSelect?: boolean; selectType?: boolean; } >( ( { className, children, onClick, checked = false, closeOnSelect = true, selectType, ...props }, ref ) => { return ( { if (closeOnSelect) { e.stopPropagation(); e.preventDefault(); } onClick?.(e); }} {...props}> {children} ); } ); DropdownMenuCheckboxItemMultiple.displayName = 'DropdownMenuCheckboxItemMultiple'; const DropdownMenuLabel = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { inset?: boolean; } >(({ className, inset, ...props }, ref) => ( )); DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName; const DropdownMenuSeparator = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )); DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName; const DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes) => { return ( ); }; DropdownMenuShortcut.displayName = 'DropdownMenuShortcut'; const DropdownMenuLink: React.FC<{ className?: string; link: string | null; linkIcon?: 'arrow-right' | 'arrow-external' | 'caret-right'; }> = ({ className, link, linkIcon = 'arrow-external', ...props }) => { const icon = React.useMemo(() => { if (linkIcon === 'arrow-right') return ; if (linkIcon === 'arrow-external') return ; if (linkIcon === 'caret-right') return ; }, [linkIcon]); const isExternal = link?.startsWith('http'); const content = (