{"success":true,"data":{"block":{"id":"hero-billing-platform-logos","name":"Billing Platform Logos Hero","title":"Hero Billing Platform Logos","category":"Hero","categorySlug":"hero","description":"A hero for billing and payment platforms featuring trusted company logos in a carousel. Builds trust for fintech products.","thumbnail":{"desktop":"https://cdn.ing/assets/i/r/290308/d4e1e26ctxd9qfqpwql8hikcq2dg/cleanshot-2026-02-18-at-05-05-58.png","mobile":"https://cdn.ing/assets/i/r/290307/unyo6thq4mxlffg3vl8f71reespo/cleanshot-2026-02-18-at-05-06-11.png"},"componentPath":"blocks/hero/hero-billing-platform-logos.tsx","code":"import { brandLogoPlaceholders, imagePlaceholders } from \"@/lib/media\";\nimport { HeroBillingPlatformLogos } from \"@opensite/ui/blocks/hero/hero-billing-platform-logos\";\nimport { DynamicIcon } from \"@opensite/ui/components/dynamic-icon\";\n\nexport default function Demo() {\n  return (\n    <HeroBillingPlatformLogos\n      heading=\"Simplified billing for modern businesses\"\n      description=\"Accept payments, manage subscriptions, and handle invoicing all in one place. Trusted by thousands of companies worldwide.\"\n      actions={[\n        {\n          label: \"Start Free Trial\",\n          href: \"#\",\n          variant: \"default\",\n          iconAfter: <DynamicIcon name=\"lucide/arrow-right\" size={16} />,\n        },\n        {\n          label: \"View Pricing\",\n          href: \"#\",\n          variant: \"outline\",\n        },\n      ]}\n      mainImage={{ src: imagePlaceholders[122], alt: \"Billing dashboard\" }}\n      logos={[\n        { src: brandLogoPlaceholders.black[0], alt: \"Partner 1\" },\n        { src: brandLogoPlaceholders.black[1], alt: \"Partner 2\" },\n        { src: brandLogoPlaceholders.black[2], alt: \"Partner 3\" },\n        { src: brandLogoPlaceholders.black[3], alt: \"Partner 4\" },\n        { src: brandLogoPlaceholders.black[4], alt: \"Partner 5\" },\n        { src: brandLogoPlaceholders.black[5], alt: \"Partner 6\" },\n      ]}\n      background=\"gray\"\n    />\n  );\n}","propsSchema":{"heading":{"type":"object","description":"Main heading content","typeLabel":"React.ReactNode","required":false},"description":{"type":"object","description":"Description text below heading","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},"mainImage":{"type":"object","description":"Main hero 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},"overlayImages":{"type":"array","description":"Floating overlay 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":false},"imagesSlot":{"type":"object","description":"Custom slot for images (overrides mainImage and overlayImages)","typeLabel":"React.ReactNode","required":false},"logosTagline":{"type":"object","description":"Logos tagline text","typeLabel":"React.ReactNode","required":false},"logos":{"type":"array","description":"Array of logo items for the carousel","items":{"type":"object","description":"","fields":{"src":{"type":"object","description":"Image source URL or light/dark mode variants","typeLabel":"string | { light: string; dark?: string }","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 logo wrapper","required":false},"imgClassName":{"type":"string","description":"Additional CSS classes for the img element","required":false}},"typeLabel":"LogoItem"},"typeLabel":"LogoItem[]","required":false},"logosSlot":{"type":"object","description":"Custom slot for logos (overrides logos array)","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":"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 column","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},"logosClassName":{"type":"string","description":"Additional CSS classes for the logos section","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},"sectionId":{"type":"string","description":"Optional Section ID","required":false}},"defaultProps":{},"dependencies":["@opensite/ui"],"tags":["hero","billing","platform","logos","payment","fintech","trust","carousel"],"performance":{},"importantUsageNotes":"Only use if you can use 6-8 valid logos for the 'logos' prop. Do not exceed 40 characters for the 'heading' prop. Do not exceed 140 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:45:03.419Z"}