import {useState} from 'react'; import {Button} from '@plunk/ui'; import {Check, Copy, Eye, EyeOff, RefreshCw} from 'lucide-react'; interface ApiKeyDisplayProps { label: string; value: string; description?: string; isSecret?: boolean; onRegenerate?: () => Promise; showRegenerate?: boolean; } export function ApiKeyDisplay({ label, value, description, isSecret = false, onRegenerate, showRegenerate = false, }: ApiKeyDisplayProps) { const [showKey, setShowKey] = useState(!isSecret); const [copied, setCopied] = useState(false); const [isRegenerating, setIsRegenerating] = useState(false); const handleCopy = async () => { try { await navigator.clipboard.writeText(value); setCopied(true); setTimeout(() => setCopied(false), 2000); } catch (error) { console.error('Failed to copy:', error); } }; const handleRegenerate = async () => { if (!onRegenerate) return; try { setIsRegenerating(true); await onRegenerate(); } catch (error) { console.error('Failed to regenerate:', error); } finally { setIsRegenerating(false); } }; const displayValue = showKey ? value : '•'.repeat(48); return (
{displayValue}
{isSecret && ( )} {showRegenerate && onRegenerate && ( )}
{description &&

{description}

}
); }