{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "copy-button",
  "type": "registry:ui",
  "title": "Copy button",
  "description": "React copy to clipboard button that writes a value, then swaps to a check icon and Copied label for a moment. Accepts every Button variant and size.",
  "dependencies": [
    "class-variance-authority",
    "lucide-react"
  ],
  "registryDependencies": [
    "https://ui.minidev.pro/r/button.json",
    "utils"
  ],
  "files": [
    {
      "path": "registry/ui/copy-button.tsx",
      "type": "registry:ui",
      "target": "components/ui/copy-button.tsx",
      "content": "\"use client\"\nimport * as React from \"react\"\nimport { CheckIcon, CopyIcon } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport { Button, buttonVariants } from \"@/components/ui/button\"\nimport { type VariantProps } from \"class-variance-authority\"\n\nfunction CopyButton({\n  value,\n  className,\n  variant = \"outline\",\n  size = \"sm\",\n  label = \"Copy\",\n  copiedLabel = \"Copied\",\n  ...props\n}: {\n  value: string\n  label?: string\n  copiedLabel?: string\n} & React.ComponentProps<\"button\"> &\n  VariantProps<typeof buttonVariants>) {\n  const [copied, setCopied] = React.useState(false)\n  return (\n    <Button\n      type=\"button\"\n      variant={variant}\n      size={size}\n      data-slot=\"copy-button\"\n      className={cn(className)}\n      aria-label={copied ? copiedLabel : label}\n      onClick={async () => {\n        try {\n          await navigator.clipboard.writeText(value)\n          setCopied(true)\n          setTimeout(() => setCopied(false), 1500)\n        } catch {\n          /* ignore */\n        }\n      }}\n      {...props}\n    >\n      {copied ? <CheckIcon className=\"text-success\" /> : <CopyIcon />}\n      {copied ? copiedLabel : label}\n    </Button>\n  )\n}\nexport { CopyButton }\n"
    }
  ]
}
