"use client"; import { useEffect, useState } from "react"; import { cn } from "@/lib/utils"; import { Check, Copy } from "lucide-react"; interface CopyButtonProps extends React.HTMLAttributes<HTMLButtonElement> { value: string; } const copyToClipboardWithMeta = (value: string, event?: Event) => { navigator.clipboard.writeText(value); }; export function CopyButton({ value, className, ...props }: CopyButtonProps) { const [hasCopied, setHasCopied] = useState(false); useEffect(() => { setTimeout(() => { setHasCopied(false); }, 2000); }, [hasCopied]); return ( <button className={cn( "z-20 inline-flex h-8 w-8 items-center justify-center rounded-md border bg-background text-sm font-medium transition-all hover:bg-muted focus:outline-none ", className )} onClick={() => { copyToClipboardWithMeta(value); setHasCopied(true); }} {...props} > <span className="sr-only">Copy</span> {hasCopied ? <Check className="h-3 w-3" /> : <Copy className="h-3 w-3" />} </button> ); }