35 lines
836 B
TypeScript
35 lines
836 B
TypeScript
'use client';
|
|
|
|
import { useState } from 'react';
|
|
|
|
interface CopyButtonProps {
|
|
text: string;
|
|
label?: string;
|
|
className?: string;
|
|
}
|
|
|
|
export default function CopyButton({ text, label = 'Copy', className = '' }: CopyButtonProps) {
|
|
const [copied, setCopied] = useState(false);
|
|
|
|
const handleCopy = async () => {
|
|
try {
|
|
await navigator.clipboard.writeText(text);
|
|
setCopied(true);
|
|
setTimeout(() => setCopied(false), 2000);
|
|
} catch (err) {
|
|
console.error('Failed to copy:', err);
|
|
}
|
|
};
|
|
|
|
return (
|
|
<button
|
|
onClick={handleCopy}
|
|
className={`px-4 py-2 text-sm font-medium rounded-lg transition-colors ${
|
|
copied ? 'bg-green-600 text-white' : 'bg-slate-700 text-slate-200 hover:bg-slate-600'
|
|
} ${className}`}
|
|
>
|
|
{copied ? '✓ Copied!' : label}
|
|
</button>
|
|
);
|
|
}
|