import { memo, useRef } from "react"; import { CopyIcon, CheckIcon } from "lucide-react"; import { Button } from "../ui/button"; import { useCopyToClipboard } from "~/hooks/useCopyToClipboard"; import { cn } from "~/lib/utils"; import { ANCHORED_COPY_TOAST_TIMEOUT_MS, showAnchoredCopyErrorToast, showAnchoredCopySuccessToast, } from "../ui/anchoredCopyToast"; import { Tooltip, TooltipPopup, TooltipTrigger } from "../ui/tooltip"; export const MessageCopyButton = memo(function MessageCopyButton({ text, size = "xs", variant = "outline", className, }: { text: string; size?: "xs" | "icon-xs"; variant?: "outline" | "ghost"; className?: string; }) { const ref = useRef(null); const { copyToClipboard, isCopied } = useCopyToClipboard({ onCopy: () => showAnchoredCopySuccessToast(ref), onError: (error: Error) => showAnchoredCopyErrorToast(ref, error), timeout: ANCHORED_COPY_TOAST_TIMEOUT_MS, }); return ( copyToClipboard(text)} ref={ref} type="button" size={size} variant={variant} className={cn("text-muted-foreground hover:text-foreground", className)} /> } > {isCopied ? : }

Copy to clipboard

); });