'use client'; import { forwardRef, HTMLAttributes } from 'react'; export interface SpecItem { label: string; value: string | number; unit?: string; description?: string; icon?: string; highlighted?: boolean; } export interface SpecGridProps extends HTMLAttributes { specs: SpecItem[]; variant?: 'cyan' | 'green' | 'amber' | 'blood'; columns?: number; showHeader?: boolean; headerTitle?: string; compact?: boolean; striped?: boolean; } const variantStyles = { cyan: { accent: 'text-cyan-400', headerBg: 'bg-cyan-400', hoverBg: 'hover:bg-cyan-400/5', borderHighlight: 'border-l-cyan-400' }, green: { accent: 'text-emerald-400', headerBg: 'bg-emerald-400', hoverBg: 'hover:bg-emerald-400/5', borderHighlight: 'border-l-emerald-400' }, amber: { accent: 'text-amber-400', headerBg: 'bg-amber-400', hoverBg: 'hover:bg-amber-400/5', borderHighlight: 'border-l-amber-400' }, blood: { accent: 'text-red-800', headerBg: 'bg-red-800', hoverBg: 'hover:bg-red-800/5', borderHighlight: 'border-l-red-800' }, }; export const SpecGrid = forwardRef( ({ specs, variant = 'cyan', columns, showHeader = false, headerTitle = 'SYSTEM SPECS', compact = false, striped = false, className = '', style, ...props }, ref) => { const colors = variantStyles[variant]; const gridCols = columns ? { gridTemplateColumns: `repeat(${columns}, 1fr)` } : {}; return (
{showHeader && (
{headerTitle}
)} {specs.map((spec, index) => (
{spec.icon && {spec.icon}}
{spec.label} {spec.value} {spec.unit && {spec.unit}} {spec.description && ( {spec.description} )}
))}
); } ); SpecGrid.displayName = 'SpecGrid'; export default SpecGrid;