{
  "name": "copy-button",
  "type": "registry:ui",
  "dependencies": [
    "class-variance-authority",
    "lucide-react",
    "react"
  ],
  "registryDependencies": [
    "button"
  ],
  "files": [
    {
      "path": "./items/components/copy-button/component.tsx",
      "type": "registry:ui",
      "target": "./components/ui/shuip/copy-button.tsx",
      "content": "'use client';\n\nimport type { VariantProps } from 'class-variance-authority';\nimport { CheckIcon, Copy } from 'lucide-react';\nimport * as React from 'react';\nimport { Button, type buttonVariants } from '@/components/ui/button';\n\nconst DEFAULT_TIMEOUT = 2000;\n\ntype ButtonProps = React.ComponentProps<'button'> &\n  VariantProps<typeof buttonVariants> & {\n    asChild?: boolean;\n  };\n\nexport interface CopyButtonProps extends ButtonProps {\n  value: string;\n  copiedIcon?: React.ReactNode;\n  notCopiedIcon?: React.ReactNode;\n}\n\nexport function CopyButton({ value, copiedIcon = <CheckIcon />, notCopiedIcon = <Copy />, ...props }: CopyButtonProps) {\n  const [hasCopied, setHasCopied] = React.useState(false);\n\n  const handleCopy = () => {\n    navigator.clipboard.writeText(value);\n    setHasCopied(true);\n    setTimeout(() => {\n      setHasCopied(false);\n    }, DEFAULT_TIMEOUT);\n  };\n\n  return (\n    <Button size='icon' variant={'ghost'} className={'z-10 size-4'} onClick={handleCopy} {...props}>\n      <span className='sr-only'>Copy</span>\n      {hasCopied ? copiedIcon : notCopiedIcon}\n    </Button>\n  );\n}\n"
    }
  ],
  "$schema": "https://ui.shadcn.com/schema/registry-item.json"
}
