{"success":true,"data":{"block":{"id":"hero-testimonial-image-grid","name":"Testimonial Image Grid Hero","title":"Hero Testimonial Image Grid","category":"Hero","categorySlug":"hero","description":"A hero combining testimonials with an image grid layout. Shows customer feedback alongside visual content.","thumbnail":{"desktop":"https://cdn.ing/assets/i/r/290348/do85q13ta1010srw4u5teae8yppl/cleanshot-2026-02-18-at-09-02-09.png","mobile":"https://cdn.ing/assets/i/r/290347/0h6qx647ixl6d1ffirwqz6956g9a/cleanshot-2026-02-18-at-09-02-20.png"},"componentPath":"blocks/hero/hero-testimonial-image-grid.tsx","code":"import { imagePlaceholders } from \"@/lib/media\";\nimport { DynamicIcon } from \"@opensite/ui\";\nimport { HeroTestimonialImageGrid } from \"@opensite/ui/blocks/hero/hero-testimonial-image-grid\";\n\nexport default function Demo() {\n  return (\n    <HeroTestimonialImageGrid\n      heading=\"Loved by customers worldwide\"\n      description=\"See why thousands of businesses trust us to power their operations and drive growth.\"\n      testimonial={{\n        quote:\n          \"This platform transformed how we work. Absolutely game-changing.\",\n        author: \"Sarah Johnson\",\n        role: \"CEO\",\n        company: \"TechCorp\",\n        avatars: [{ image: imagePlaceholders[24], fallback: \"SJ\" }],\n      }}\n      gridImages={[\n        { src: imagePlaceholders[25], alt: \"Customer success story 1\" },\n        { src: imagePlaceholders[26], alt: \"Customer success story 2\" },\n        { src: imagePlaceholders[27], alt: \"Customer success story 3\" },\n        { src: imagePlaceholders[28], alt: \"Customer success story 4\" },\n      ]}\n      actions={[\n        {\n          label: \"Get Started\",\n          href: \"#\",\n          variant: \"default\",\n          iconAfter: <DynamicIcon name=\"lucide/arrow-right\" size={16} />,\n        },\n      ]}\n      background=\"dark\"\n      pattern=\"crossPattern\"\n      patternOpacity={0.9}\n    />\n  );\n}","propsSchema":{"heading":{"type":"object","description":"Main heading text","typeLabel":"React.ReactNode","required":false},"description":{"type":"object","description":"Supporting description text","typeLabel":"React.ReactNode","required":false},"actions":{"type":"array","description":"Array of action configurations for CTA buttons","items":{"type":"object","description":"","fields":{"variant":{"type":"string","description":"","typeLabel":"\"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\"","required":false},"size":{"type":"string","description":"","typeLabel":"\"default\" | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\" | \"icon-lg\"","required":false},"label":{"type":"object","description":"Button/link label text or ReactNode","typeLabel":"ReactNode","required":false},"icon":{"type":"object","description":"Icon to display (typically before label)","typeLabel":"ReactNode","required":false},"iconAfter":{"type":"object","description":"Icon to display after the label","typeLabel":"ReactNode","required":false},"href":{"type":"string","description":"URL for link behavior","required":false},"onClick":{"type":"object","description":"Click handler for button behavior","typeLabel":"MouseEventHandler","required":false},"className":{"type":"string","description":"Additional CSS classes for the action","required":false},"children":{"type":"object","description":"Custom children (overrides label + icon rendering)","typeLabel":"ReactNode","required":false},"aria-label":{"type":"string","description":"ARIA label for accessibility","required":false},"asButton":{"type":"boolean","description":"Render as a button element instead of an anchor/link","required":false}},"typeLabel":"ActionConfig"},"typeLabel":"ActionConfig[]","required":false},"actionsSlot":{"type":"object","description":"Custom slot for rendering actions (overrides actions array)","typeLabel":"React.ReactNode","required":false},"actionsClassName":{"type":"string","description":"Additional CSS classes for the actions container","required":false},"testimonial":{"type":"object","description":"Testimonial configuration","fields":{"quote":{"type":"string","description":"Testimonial quote text","required":true},"author":{"type":"string","description":"Author name","required":true},"avatar":{"type":"object","description":"Author avatar image","fields":{"src":{"type":"string","description":"Image source URL","required":true},"alt":{"type":"string","description":"Alt text for accessibility","required":true},"href":{"type":"string","description":"Optional link URL","required":false},"className":{"type":"string","description":"Additional CSS classes for the image","required":false}},"typeLabel":"ImageItem","required":false}},"typeLabel":"TestimonialConfig","required":false},"testimonialSlot":{"type":"object","description":"Custom slot for testimonial (overrides testimonial prop)","typeLabel":"React.ReactNode","required":false},"gridImages":{"type":"array","description":"Grid images configuration (4 images for the grid)","items":{"type":"object","description":"","fields":{"src":{"type":"string","description":"Image source URL","required":true},"alt":{"type":"string","description":"Alt text for the image","required":false}},"typeLabel":"GridImageConfig"},"typeLabel":"GridImageConfig[]","required":false},"imagesSlot":{"type":"object","description":"Custom slot for images grid (overrides gridImages)","typeLabel":"React.ReactNode","required":false},"background":{"type":"string","description":"Background style for the section","typeLabel":"SectionBackground","required":false},"spacing":{"type":"object","description":"Vertical spacing for the section","fields":{},"typeLabel":"SectionSpacing","required":false},"pattern":{"type":"object","description":"Background pattern","fields":{},"typeLabel":"PatternName","required":false},"patternOpacity":{"type":"number","description":"Pattern opacity (0-1)","required":false},"className":{"type":"string","description":"Additional CSS classes for the section wrapper","required":false},"containerClassName":{"type":"string","description":"Additional CSS classes for the container","required":false},"headingClassName":{"type":"string","description":"Additional CSS classes for the heading","required":false},"descriptionClassName":{"type":"string","description":"Additional CSS classes for the description","required":false},"optixFlowConfig":{"type":"object","description":"Optional Optix Flow configuration for image optimization","fields":{"apiKey":{"type":"string","description":"","required":true},"compression":{"type":"number","description":"","required":false}},"typeLabel":"{ apiKey: string; compression?: number; }","required":false},"sectionId":{"type":"string","description":"Optional Section ID","required":false}},"defaultProps":{},"dependencies":["@opensite/ui"],"tags":["hero","testimonial","image","grid","reviews","customers","feedback","social-proof"],"performance":{},"importantUsageNotes":"Only use if you have a valid testimonial - DO NOT MAKE UP A TESTIMONIAL/REVIEW. Supply exactly 4 images to the 'gridImages' prop. Do not exceed 80 characters for the 'testimonial.quote' prop. Do not exceed 40 characters for the 'heading' prop. Do not exceed 130 characters for the 'description' prop. If you supply multiple 'actions', ensure to use a variant of 'default' for the first action, and 'outline' for the second action to ensure proper visual distinction between the two CTAs. Follow the example props closely for this block."}},"timestamp":"2026-05-13T10:42:27.780Z"}