{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "action-menu",
  "type": "registry:block",
  "title": "Action Menu",
  "description": "A dropdown menu for performing actions on a post or user.",
  "registryDependencies": [
    "confirmation-dialog"
  ],
  "files": [
    {
      "path": "src/components/deso/action-menu.tsx",
      "content": "import * as React from 'react';\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuTrigger,\n  DropdownMenuSeparator,\n} from '@/components/ui/dropdown-menu';\nimport { LucideIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils/deso';\nimport {\n  ConfirmationDialog,\n  ConfirmationDialogProps,\n} from './confirmation-dialog';\n\ntype ConfirmationProps = Omit<ConfirmationDialogProps, 'trigger' | 'children'>;\n\ninterface ActionMenuItemProps {\n  children: React.ReactNode;\n  icon?: LucideIcon;\n  onClick?: (e: Event) => void;\n  variant?: 'default' | 'destructive';\n  className?: string;\n  disabled?: boolean;\n  confirmation?: ConfirmationProps;\n}\n\nexport function ActionMenuItem({\n  children,\n  icon: Icon,\n  onClick,\n  variant,\n  className,\n  disabled,\n  confirmation,\n}: ActionMenuItemProps) {\n  const [dialogOpen, setDialogOpen] = React.useState(false);\n\n  const handleSelect = (e: Event) => {\n    if (confirmation) {\n      e.preventDefault();\n      setDialogOpen(true);\n    } else if (onClick) {\n      onClick(e);\n    }\n  };\n\n  const item = (\n    <DropdownMenuItem\n      onSelect={handleSelect}\n      variant={variant}\n      disabled={disabled}\n      className={cn('flex cursor-pointer items-center gap-2', className)}\n    >\n      {Icon && <Icon className=\"h-4 w-4\" />}\n      {children}\n    </DropdownMenuItem>\n  );\n\n  if (confirmation) {\n    return (\n      <ConfirmationDialog\n        {...confirmation}\n        open={dialogOpen}\n        onOpenChange={setDialogOpen}\n        trigger={<>{item}</>}\n        onConfirm={() => {\n          if (onClick) {\n            onClick(new Event('click'));\n          }\n          if (confirmation.onConfirm) {\n            confirmation.onConfirm();\n          }\n        }}\n      />\n    );\n  }\n\n  return item;\n}\n\ninterface ActionMenuProps {\n  trigger: React.ReactNode;\n  children: React.ReactNode;\n  align?: 'center' | 'start' | 'end';\n}\n\nexport function ActionMenu({\n  trigger,\n  children,\n  align = 'end',\n}: ActionMenuProps) {\n  return (\n    <DropdownMenu>\n      <DropdownMenuTrigger asChild>{trigger}</DropdownMenuTrigger>\n      <DropdownMenuContent align={align} className=\"border border-border\">\n        {children}\n      </DropdownMenuContent>\n    </DropdownMenu>\n  );\n}\n\nexport { DropdownMenuSeparator as ActionMenuSeparator }; ",
      "type": "registry:component",
      "target": "src/components/deso-ui/action-menu.tsx"
    }
  ]
}