import { cn } from '@/lib/utils'; import * as LucideIcons from 'lucide-react'; interface FeatureItem { title?: string; description?: string; icon?: string; } interface FeatureGridSectionProps { id: string; layout?: string; colorScheme?: string; heading?: string; items?: FeatureItem[]; elementStyles?: Record; } export function FeatureGridSection({ id, layout = 'grid-3', colorScheme = 'default', heading, items = [], features = [], elementStyles, styles, }: FeatureGridSectionProps & { features?: FeatureItem[], styles?: Record }) { // Use items or features (priority to items if both exist, but usually only one comes from props) const listItems = items.length > 0 ? items : features; const gridCols = { 'grid-2': 'md:grid-cols-2', 'grid-3': 'md:grid-cols-3', 'grid-4': 'md:grid-cols-2 lg:grid-cols-4', }[layout] || 'md:grid-cols-3'; // Helper to get text styles (including font family) const getTextStyles = (elementName: string) => { const styles = elementStyles?.[elementName] || {}; return { classNames: cn( styles.fontSize, styles.fontWeight, { 'font-sans': styles.fontFamily === 'secondary', 'font-serif': styles.fontFamily === 'primary', } ), style: { color: styles.color, textAlign: styles.textAlign, backgroundColor: styles.backgroundColor, borderColor: styles.borderColor, borderWidth: styles.borderWidth, borderRadius: styles.borderRadius, } }; }; const headingStyle = getTextStyles('heading'); const featureItemStyle = getTextStyles('feature_item'); return (
{heading && (

{heading}

)}
{listItems.map((item, index) => (
{item.icon && (() => { const IconComponent = (LucideIcons as any)[item.icon]; if (!IconComponent) return null; return (
); })()} {item.title && (

{item.title}

)} {item.description && (

{item.description}

)}
))}
); }