{ "$schema": "https://blode.co/ui/schema/registry-item.json", "name": "use-copy-to-clipboard", "title": "Use Copy To Clipboard", "author": "Matthew Blode", "description": "A hook that copies text to the clipboard and resets after a timeout.", "files": [ { "path": "hooks/use-copy-to-clipboard.ts", "content": "\"use client\";\n\nimport { useState } from \"react\";\n\nexport const useCopyToClipboard = ({\n timeout = 2000,\n onCopy,\n}: {\n timeout?: number;\n onCopy?: () => void;\n} = {}) => {\n const [isCopied, setIsCopied] = useState(false);\n\n const copyToClipboard = async (value: string) => {\n if (typeof window === \"undefined\" || !navigator.clipboard.writeText) {\n return;\n }\n\n if (!value) {\n return;\n }\n\n try {\n await navigator.clipboard.writeText(value);\n setIsCopied(true);\n\n if (onCopy) {\n onCopy();\n }\n\n if (timeout !== 0) {\n setTimeout(() => {\n setIsCopied(false);\n }, timeout);\n }\n } catch (error) {\n console.error(error);\n }\n };\n\n return { copyToClipboard, isCopied };\n};\n", "type": "registry:lib", "target": "" } ], "type": "registry:lib" }