UNPKG

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
"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"] })); }