Files
2026-09-29 11:34:18 +08:00

31 lines
924 B
TypeScript

"use client";
import { useState } from "react";
import { Check, Copy } from "lucide-react";
import { Button } from "@/components/ui/button";
export function CopyButton({ value }: { value: string }) {
const [status, setStatus] = useState<"idle" | "copied" | "error">("idle");
return (
<span className="inline-flex items-center gap-2">
<Button
type="button"
size="sm"
variant="outline"
onClick={async () => {
try {
await navigator.clipboard.writeText(value);
setStatus("copied");
} catch {
setStatus("error");
}
}}
>
{status === "copied" ? <Check /> : <Copy />}
{status === "copied" ? "已复制" : "复制"}
</Button>
<span role="status" className="muted">
{status === "error" ? "复制失败,请选中链接手动复制" : ""}
</span>
</span>
);
}