{"success":true,"data":{"block":{"id":"hero-centered-image-grid","name":"Centered Image Grid Hero","title":"Hero Centered Image Grid","category":"Hero","categorySlug":"hero","description":"A centered hero section with headline and description above a grid of images. Ideal for portfolios, galleries, or showcasing multiple products or team members.","thumbnail":{"desktop":"https://cdn.ing/assets/i/r/308479/9hhqho86yu2mv4nwu5vked09hxiq/hero-centered-image-grid-dektop.jpg","mobile":"https://cdn.ing/assets/i/r/308480/xp6o3ac7sqkco4kk9amfdkmh4dlm/hero-centered-image-grid-mobile.jpg"},"componentPath":"blocks/hero/hero-centered-image-grid.tsx","code":"import { HeroCenteredImageGrid } from \"@opensite/ui/blocks/hero/hero-centered-image-grid\";\nimport { DynamicIcon } from \"@opensite/ui/components/dynamic-icon\";\n\nexport default function Demo() {\n  return (\n    <HeroCenteredImageGrid\n      heading=\"Visual storytelling at its finest\"\n      description=\"Showcase your work with beautiful grid layouts that capture attention and inspire action.\"\n      logo={{\n        src: \"https://cdn.ing/assets/i/r/288973/lxkmf98s3bmpytziacx1o0rwuun9/ui-placeholder-logo-white-6.png\",\n        alt: \"Brand Logo\",\n      }}\n      actions={[\n        {\n          label: \"View Gallery\",\n          href: \"#\",\n          variant: \"default\",\n          iconAfter: <DynamicIcon name=\"lucide/arrow-right\" size={16} />,\n        },\n        {\n          label: \"Learn More\",\n          href: \"#\",\n          variant: \"outline\",\n        },\n      ]}\n      gridImages={[\n        {\n          src: \"https://toastability-production.s3.amazonaws.com/sj8cs2gpbanaowqwxar1uhhwd23z\",\n          alt: \"Project showcase\",\n        },\n        {\n          src: \"https://toastability-production.s3.amazonaws.com/hu4gmd93sp95wdyr9qijze0rgim9\",\n          alt: \"Studio workspace\",\n        },\n      ]}\n      background=\"dark\"\n      pattern=\"dashedGridFadeTop\"\n      patternOpacity={0.1}\n      spacing=\"hero\"\n    />\n  );\n}","propsSchema":{"heading":{"type":"object","description":"Main heading content","typeLabel":"React.ReactNode","required":true,"maxLength":50},"description":{"type":"object","description":"Description text below heading","typeLabel":"React.ReactNode","required":false,"maxLength":130},"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,"maxItems":2,"pinnedValues":{"0.variant":"default","1.variant":"outline"}},"actionsSlot":{"type":"object","description":"Custom slot for rendering actions (overrides actions array)","typeLabel":"React.ReactNode","required":false},"gridImages":{"type":"array","description":"Grid images (expects 2 images)","items":{"type":"object","description":"","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"},"typeLabel":"ImageItem[]","required":true,"count":6,"minItems":6,"maxItems":6,"mediaHints":{"path":"gridImages[]","roles":["feature","hero"],"disallowedRoles":["logo","favicon","video-thumbnail"],"minPixelClass":"medium","required":true,"note":"Grid gallery images. Use diverse, high-quality content. IMAGE MEDIA ONLY. Do not use logos, favicons, or video assets."}},"gridImagesSlot":{"type":"object","description":"Custom slot for grid images (overrides gridImages)","typeLabel":"React.ReactNode","required":false},"imageOverlayAction":{"type":"object","description":"Image overlay action configuration","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","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":"Optional background pattern name","fields":{},"typeLabel":"PatternName","required":false},"patternOpacity":{"type":"number","description":"Pattern overlay opacity (0-1)","required":false},"className":{"type":"string","description":"Additional CSS classes for the section","required":false},"containerClassName":{"type":"string","description":"Additional CSS classes for the container","required":false},"contentClassName":{"type":"string","description":"Additional CSS classes for the content area","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},"actionsClassName":{"type":"string","description":"Additional CSS classes for the actions container","required":false},"imageGridClassName":{"type":"string","description":"Additional CSS classes for the image grid","required":false},"optixFlowConfig":{"type":"object","description":"OptixFlow image optimization configuration","fields":{"apiKey":{"type":"string","description":"API key for OptixFlow service","required":true},"compression":{"type":"number","description":"Compression level (0-100)","required":false}},"typeLabel":"OptixFlowConfig","required":false},"logo":{"type":"object","description":"Brand logo configuration. LOGO MEDIA ONLY — do not use photos or hero images.","fields":{"url":{"type":"string","description":"URL to navigate to when logo is clicked","required":false},"src":{"type":"string","description":"Image source for the logo","required":false},"alt":{"type":"string","description":"Alt text for the logo image","required":false},"title":{"type":"object","description":"Text title to display (alternative to image)","typeLabel":"React.ReactNode","required":false},"className":{"type":"string","description":"Additional CSS classes for the logo","required":false}},"typeLabel":"LogoConfig","required":false},"logoSlot":{"type":"object","description":"Custom slot for logo (overrides logo prop)","typeLabel":"React.ReactNode","required":false},"logoClassName":{"type":"string","description":"Additional CSS classes for the logo container","required":false},"sectionId":{"type":"string","description":"Optional Section ID","required":false}},"exampleProps":{"logo":{"src":"https://cdn.ing/assets/i/r/287635/1tmeh86afyxszfz7hbmvcc0oct8w/logo-dark.png","alt":"Brand Logo"},"heading":"Visual storytelling at its finest","description":"Showcase your work with beautiful grid layouts.","gridImages":[{"src":"https://toastability-production.s3.amazonaws.com/xlp46pzk3a4d73jgjx4s7xdafwpn","alt":"Gallery image 1"},{"src":"https://toastability-production.s3.amazonaws.com/g1iuifb3yzoofo9c7a00koyn6q1t","alt":"Gallery image 2"},{"src":"https://toastability-production.s3.amazonaws.com/z9u4sdrj2oq3eds0qyui0nxsus3j","alt":"Gallery image 3"},{"src":"https://toastability-production.s3.amazonaws.com/63aotyt2pb4gqpccej2kkw8reson","alt":"Gallery image 4"},{"src":"https://toastability-production.s3.amazonaws.com/pjgb223h1bjywdk15i3zi7pjhutg","alt":"Gallery image 5"},{"src":"https://toastability-production.s3.amazonaws.com/we9r4e711an6d0bd3dwbl9tb9z7q","alt":"Gallery image 6"}],"actions":[{"label":"View Gallery","href":"#","variant":"default"},{"label":"Learn More","href":"#","variant":"outline"}]},"dependencies":["@opensite/ui"],"tags":["hero","centered","grid","images","gallery","portfolio","showcase"],"performance":{},"importantUsageNotes":"Supply exactly 6 images to 'gridImages'. If you supply multiple 'actions', use 'default' for the first and 'outline' for the second.  All media src values must be absolute URLs to real assets; relative paths and placeholder media variables are not allowed.","usageRequirements":{"requiredProps":["heading","gridImages"],"propConstraints":{"heading":{"required":true,"maxLength":50},"description":{"maxLength":130},"gridImages":{"required":true,"count":6,"minItems":6,"maxItems":6},"actions":{"maxItems":2,"pinnedValues":{"0.variant":"default","1.variant":"outline"}}},"mediaSlots":{"gridImages[]":{"path":"gridImages[]","roles":["feature","hero"],"disallowedRoles":["logo","favicon","video-thumbnail"],"minPixelClass":"medium","required":true,"note":"Grid gallery images. Use diverse, high-quality content. IMAGE MEDIA ONLY. Do not use logos, favicons, or video assets."}},"requiresSiteCapabilities":["media_library"]}}},"timestamp":"2026-06-27T20:00:32.074Z"}