package main import ( "context" "fmt" "html" "strings" ) // SmartBlockFunc renders a Smart Block by substituting {{field}} placeholders with content values. func SmartBlockFunc(ctx context.Context, content map[string]any) string { // Get metadata meta, ok := content["_meta"].(map[string]any) if !ok { return renderEmptyState() } generations, ok := meta["generations"].([]any) if !ok || len(generations) == 0 { return renderEmptyState() } currentID, _ := meta["currentGenerationId"].(string) if currentID == "" { return renderEmptyState() } // Find the current generation var template string for _, gen := range generations { genMap, ok := gen.(map[string]any) if !ok { continue } if genMap["id"] == currentID { template, _ = genMap["template"].(string) break } } if template == "" { return renderEmptyState() } // Replace {{field}} placeholders with content values result := template for key, value := range content { // Skip meta fields if strings.HasPrefix(key, "_") { continue } placeholder := "{{" + key + "}}" var valueStr string switch v := value.(type) { case string: valueStr = html.EscapeString(v) case float64: valueStr = fmt.Sprintf("%v", v) case int: valueStr = fmt.Sprintf("%d", v) case bool: valueStr = fmt.Sprintf("%t", v) default: valueStr = fmt.Sprintf("%v", v) } result = strings.ReplaceAll(result, placeholder, valueStr) } return result } func renderEmptyState() string { return `
Smart Block
Use the editor to generate content with AI