42 lines
955 B
TypeScript
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}
|
|
/>
|
|
);
|
|
}
|