xlibs-components
Version:
Modern React component library with Aceternity, MagicUI, and ShadCN components for building beautiful web applications
40 lines (39 loc) • 1.9 kB
JavaScript
"use client";
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { Check, Copy } from "lucide-react";
import { useState } from "react";
import { cn } from '../../lib/utils.js';
export function ScriptCopyBtn({ text, className, variant = "default", size = "md", }) {
const [copied, setCopied] = useState(false);
const copyToClipboard = async () => {
try {
await navigator.clipboard.writeText(text);
setCopied(true);
setTimeout(() => setCopied(false), 2000);
}
catch (err) {
console.error("Failed to copy text: ", err);
}
};
const getVariantClasses = () => {
switch (variant) {
case "outline":
return "border border-input bg-background text-foreground hover:bg-accent hover:text-accent-foreground";
case "ghost":
return "text-foreground hover:bg-accent hover:text-accent-foreground";
default:
return "bg-primary text-primary-foreground hover:bg-primary/90";
}
};
const getSizeClasses = () => {
switch (size) {
case "sm":
return "h-8 px-3 text-xs";
case "lg":
return "h-12 px-8 text-base";
default:
return "h-10 px-4 text-sm";
}
};
return (_jsxs("button", { onClick: copyToClipboard, className: cn("inline-flex items-center justify-center whitespace-nowrap rounded-md font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", getVariantClasses(), getSizeClasses(), className), children: [copied ? (_jsx(Check, { className: "mr-2 h-4 w-4" })) : (_jsx(Copy, { className: "mr-2 h-4 w-4" })), copied ? "Copied!" : "Copy"] }));
}