Vercel/src/components/CopyButton.tsx
2025-05-12 09:10:28 -05:00

42 lines
955 B
TypeScript

import { BiCopy } from 'react-icons/bi';
import LoaderButton from './primitives/LoaderButton';
import clsx from 'clsx/lite';
import { toastSuccess } from '@/toast';
import { ComponentProps } from 'react';
import { useAppText } from '@/i18n/state/client';
export default function CopyButton({
label,
text,
subtle,
iconSize = 15,
className,
...props
}: {
label: string
text?: string,
subtle?: boolean
iconSize?: number
className?: string
} & ComponentProps<typeof LoaderButton>) {
const appText = useAppText();
return (
<LoaderButton
{...props}
icon={<BiCopy size={iconSize} />}
className={clsx(
subtle && 'text-gray-300 dark:text-gray-700',
className,
)}
onClick={text
? () => {
navigator.clipboard.writeText(text);
toastSuccess(appText.misc.copyPhrase(label));
}
: undefined}
styleAs="link"
disabled={!text}
/>
);
}