33 lines
759 B
TypeScript
33 lines
759 B
TypeScript
"use client";
|
|
|
|
import { useState } from "react";
|
|
|
|
interface CopyButtonProps {
|
|
value: string;
|
|
label?: string;
|
|
}
|
|
|
|
export function CopyButton({ value, label = "Salin" }: CopyButtonProps) {
|
|
const [copied, setCopied] = useState(false);
|
|
|
|
async function handleClick() {
|
|
try {
|
|
await navigator.clipboard.writeText(value);
|
|
setCopied(true);
|
|
setTimeout(() => setCopied(false), 1500);
|
|
} catch {
|
|
// ignore — user can copy manually
|
|
}
|
|
}
|
|
|
|
return (
|
|
<button
|
|
type="button"
|
|
onClick={handleClick}
|
|
className="rounded-lg border border-neutral-200 bg-white px-2.5 py-1 text-xs font-medium text-neutral-600 transition-colors hover:bg-neutral-50"
|
|
>
|
|
{copied ? "✓ Tersalin" : label}
|
|
</button>
|
|
);
|
|
}
|