package main import ( "bytes" "context" "git.dev.alexdunmow.com/block/core/blocks" ) // FeaturesBlockMeta defines metadata for the features grid block. var FeaturesBlockMeta = blocks.BlockMeta{ Key: "features", Title: "Feature Cards", Description: "Grid of feature cards with icons and descriptions", Source: "gotham", } // FeaturesBlock renders a feature cards grid. // Content expects: {"section_title": "...", "columns": 3, "features": [{"icon": "...", "title": "...", "description": "..."}]} func FeaturesBlock(ctx context.Context, content map[string]any) string { items := getSlice(content, "features") if len(items) == 0 { return "" } var features []FeatureItem for _, item := range items { features = append(features, FeatureItem{ Icon: getString(item, "icon"), Title: getString(item, "title"), Description: getString(item, "description"), }) } data := FeaturesData{ SectionTitle: getString(content, "section_title"), Columns: getInt(content, "columns", 3), Features: features, } var buf bytes.Buffer _ = featuresComponent(data).Render(ctx, &buf) return buf.String() } // FeaturesData contains data for the features component. type FeaturesData struct { SectionTitle string Columns int Features []FeatureItem } // FeatureItem represents a single feature. type FeatureItem struct { Icon string Title string Description string }