import { useTimedBoolean } from "../hooks/useTimedBoolean"; import { copyToClipboard } from "../lib/copy"; import { showToast } from "../lib/toast"; import type { IconButtonProps } from "./core/IconButton"; import { IconButton } from "./core/IconButton"; interface Props extends Omit { text: string | (() => Promise); } export function CopyIconButton({ text, ...props }: Props) { const [copied, setCopied] = useTimedBoolean(); return ( { const content = typeof text === "function" ? await text() : text; if (content == null) { showToast({ id: "failed-to-copy", color: "danger", message: "Failed to copy", }); } else { copyToClipboard(content, { disableToast: true }); setCopied(); } }} /> ); }