{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "copy-button",
  "dependencies": [
    "lucide-react"
  ],
  "registryDependencies": [
    "button",
    "tooltip"
  ],
  "files": [
    {
      "path": "components/ui/copy-button.tsx",
      "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon, CopyIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\n\nexport function copyToClipboard(value: string) {\n  navigator.clipboard.writeText(value)\n}\n\ninterface CopyButtonProps extends React.ComponentProps<typeof Button> {\n  value: string\n  variant?:\n    | \"ghost\"\n    | \"outline\"\n    | \"secondary\"\n    | \"default\"\n    | \"destructive\"\n    | \"link\"\n  iconColor?: string\n}\n\nexport function CopyButton({\n  value,\n  className,\n  variant = \"secondary\",\n  iconColor,\n  ...props\n}: CopyButtonProps) {\n  const [hasCopied, setHasCopied] = React.useState(false)\n\n  React.useEffect(() => {\n    if (hasCopied) {\n      const timer = setTimeout(() => {\n        setHasCopied(false)\n      }, 2000)\n      return () => clearTimeout(timer)\n    }\n  }, [hasCopied])\n\n  return (\n    <Button\n      data-slot=\"copy-button\"\n      size=\"icon\"\n      variant={variant}\n      className={cn(\n        \"hover:bg-muted active:bg-muted size-7 border-none bg-transparent shadow-none\",\n        className\n      )}\n      onClick={() => {\n        copyToClipboard(value)\n        setHasCopied(true)\n      }}\n      {...props}\n    >\n      <span className=\"sr-only\">Copy</span>\n      <div className=\"relative\">\n        <div\n          className={cn(\n            \"absolute inset-0 flex items-center justify-center transition-all duration-300 ease-in-out will-change-[transform,opacity,filter]\",\n            hasCopied\n              ? \"blur-0 scale-100 opacity-100\"\n              : \"scale-[0.25] opacity-0 blur-xs\"\n          )}\n        >\n          <CheckIcon\n            className=\"h-3.5 w-3.5\"\n            style={iconColor ? { color: iconColor } : {}}\n          />\n        </div>\n        <div\n          className={cn(\n            \"transition-[transform,opacity,filter] duration-300 ease-in-out will-change-[transform,opacity,filter]\",\n            hasCopied\n              ? \"scale-[0.25] opacity-0 blur-xs\"\n              : \"blur-0 scale-100 opacity-100\"\n          )}\n        >\n          <CopyIcon\n            className=\"h-3.5 w-3.5\"\n            style={iconColor ? { color: iconColor } : {}}\n          />\n        </div>\n      </div>\n    </Button>\n  )\n}\n",
      "type": "registry:ui"
    }
  ],
  "meta": {
    "hide": true
  },
  "type": "registry:ui"
}