import { ComponentProps, forwardRef, useMemo, useState } from "react"; import { CheckCircleIcon, DocumentDuplicateIcon, } from "@heroicons/react/24/outline"; interface Props extends Omit, "className" | "onClick" | "title"> { text: string; } const CopyButton = forwardRef( ({ text, ...rest }, ref) => { const [copied, setCopied] = useState(false); const onClick = () => { navigator.clipboard?.writeText(text).then(() => setCopied(true)); }; const Icon = useMemo( () => (copied ? CheckCircleIcon : DocumentDuplicateIcon), [copied] ); const title = copied ? "Copied" : "Click to copy to clipboard"; return (
{text} (click to copy to clipboard)
); } ); export default CopyButton;