/** * ApiKeyCard — displays a single API key entry with edit/delete controls. */ import { useState } from 'react'; import { Badge } from '@renderer/components/ui/badge'; import { Button } from '@renderer/components/ui/button'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from '@renderer/components/ui/tooltip'; import { useStore } from '@renderer/store'; import { Check, Copy, Pencil, Trash2 } from 'lucide-react'; import type { ApiKeyEntry } from '@shared/types/extensions'; interface ApiKeyCardProps { apiKey: ApiKeyEntry; onEdit: (key: ApiKeyEntry) => void; } export const ApiKeyCard = ({ apiKey, onEdit }: ApiKeyCardProps): React.JSX.Element => { const deleteApiKey = useStore((s) => s.deleteApiKey); const [copied, setCopied] = useState(false); const [confirmDelete, setConfirmDelete] = useState(false); const handleCopyEnvVar = async () => { await navigator.clipboard.writeText(apiKey.envVarName); setCopied(true); setTimeout(() => setCopied(false), 1500); }; const handleDelete = () => { if (!confirmDelete) { setConfirmDelete(true); setTimeout(() => setConfirmDelete(false), 3000); return; } void deleteApiKey(apiKey.id); setConfirmDelete(false); }; const createdDate = new Date(apiKey.createdAt).toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric', }); return (
{/* Name + scope badge */}

{apiKey.name}

{apiKey.scope}
{/* Env var name */}
{apiKey.envVarName} {copied ? 'Copied!' : 'Copy env var name'}
{/* Masked value */}

{apiKey.maskedValue}

{/* Footer: date + actions */}
{createdDate}
Edit {confirmDelete ? 'Click again to confirm' : 'Delete'}
); };