import React, { useState } from 'react'; import { Copy, Check } from 'lucide-react'; import type { ReactNode } from 'react'; interface KeyValueItem { key: string; value: ReactNode; copyable?: boolean; } interface KeyValueListProps { items: KeyValueItem[]; layout?: 'horizontal' | 'vertical'; className?: string; } export default function KeyValueList({ items, layout = 'horizontal', className = '' }: KeyValueListProps) { return (
{items.map((item, idx) => ( ))}
); } function KeyValueRow({ item, layout }: { item: KeyValueItem; layout: 'horizontal' | 'vertical' }) { const [copied, setCopied] = useState(false); const handleCopy = async () => { if (typeof item.value === 'string') { await navigator.clipboard.writeText(item.value); setCopied(true); setTimeout(() => setCopied(false), 2000); } }; const containerClasses = layout === 'horizontal' ? 'grid grid-cols-[auto_1fr] gap-2 items-center' : 'flex flex-col gap-1'; const keyClasses = layout === 'horizontal' ? 'text-muted-foreground font-medium' : 'text-xs uppercase tracking-wider text-muted-foreground font-semibold'; return (
{item.key}
{item.value} {item.copyable && typeof item.value === 'string' && ( )}
); }