'use client'; import * as React from 'react'; import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'; import { ArrowRight, ArrowUpRight, Check3 as Check } from '../icons/NucleoIconOutlined'; import { CaretRight } from '../icons/NucleoIconFilled'; 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 min-w-48' ); const DropdownMenuSubContent = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )); DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName; const DropdownMenuContent = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, children, sideOffset = 4, ...props }, ref) => { return (
{children}
); }); 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-base outline-none select-none', 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50', 'gap-1.5', 'mx-1 dropdown-item [&.dropdown-item:has(+.dropdown-separator)]:mb-1 [&.dropdown-item:has(~.dropdown-separator)]:mt-1 [&.dropdown-item:first-child]:mt-1! [&.dropdown-item:last-child]:mb-1!' ); const DropdownMenuCheckboxItemSingle = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { closeOnSelect?: boolean; selectType?: boolean; index?: number; } >( ( { className, children, onClick, checked, closeOnSelect = true, selectType, index, ...props }, ref ) => ( { if (closeOnSelect) { e.stopPropagation(); e.preventDefault(); } onClick?.(e); }} {...props}> {children}
{index !== undefined && ( {index} )}
) ); 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 = (