{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "clipboard-icon-button", "title": "ClipboardIconButton", "description": "Icon button that copies a value to the clipboard.", "dependencies": [ "lucide-react" ], "registryDependencies": [ "button" ], "files": [ { "path": "src/components/clipboard-icon-button.tsx", "content": "\"use client\";\n\nimport { useRef, useState, type ComponentProps } from \"react\";\nimport { Check, ClipboardList } from \"lucide-react\";\nimport { Button } from \"@/components/ui/button.js\";\n\nexport interface ClipboardIconButtonProps extends ComponentProps {\n onCopySuccess?: () => void;\n valueToCopy: string;\n /**\n * @default 2000\n */\n timeout?: number;\n}\n\nexport const ClipboardIconButton = ({\n valueToCopy,\n onCopySuccess,\n onClick,\n timeout,\n ...props\n}: ClipboardIconButtonProps) => {\n const [copied, setCopied] = useState(false);\n const currentTimeout = useRef | null>(null);\n\n return (\n {\n if (currentTimeout.current) clearTimeout(currentTimeout.current);\n navigator.clipboard.writeText(valueToCopy).then(() => {\n setCopied(true);\n onCopySuccess?.();\n currentTimeout.current = setTimeout(() => setCopied(false), timeout ?? 2000);\n });\n onClick?.(e);\n }}\n {...props}\n >\n {copied ? : }\n \n );\n};\n", "type": "registry:ui" } ], "type": "registry:ui" }