{"success":true,"data":{"block":{"id":"hero-software-growth-video-dialog","name":"Software Growth Video Dialog Hero","title":"Hero Software Growth Video Dialog","category":"Hero","categorySlug":"hero","description":"A hero focused on software growth with a video dialog modal. Features scattered images and growth-focused messaging.","thumbnail":{"desktop":"https://cdn.ing/assets/i/r/290334/f1n1bezyudyrs7l7d07qv9iyaxu2/cleanshot-2026-02-18-at-08-51-12.png","mobile":"https://cdn.ing/assets/i/r/290334/f1n1bezyudyrs7l7d07qv9iyaxu2/cleanshot-2026-02-18-at-08-51-12.png"},"componentPath":"blocks/hero/hero-software-growth-video-dialog.tsx","code":"import { HeroSoftwareGrowthVideoDialog } from \"@opensite/ui/blocks/hero/hero-software-growth-video-dialog\";\nimport { DynamicIcon } from \"@opensite/ui/components/dynamic-icon\";\n\nexport default function Demo() {\n  return (\n    <HeroSoftwareGrowthVideoDialog\n      heading=\"Accelerate your growth with data-driven insights\"\n      description=\"See how top companies use our platform to scale faster, make smarter decisions, and achieve sustainable growth.\"\n      videoAction={{\n        label: \"Watch Demo\",\n        variant: \"outline\",\n        iconAfter: <DynamicIcon name=\"lucide/play\" size={16} />,\n      }}\n      actions={[\n        {\n          label: \"Get Started\",\n          href: \"#\",\n          variant: \"ghost\",\n          iconAfter: <DynamicIcon name=\"lucide/arrow-right\" size={16} />,\n        },\n      ]}\n      showcaseImages={[\n        { src: \"https://toastability-production.s3.amazonaws.com/a3m42usevv0iet0fpfwa1fsytxmv\", alt: \"Growth metric 1\" },\n        { src: \"https://toastability-production.s3.amazonaws.com/qghzqu1i99vaubyew9s5dxcbel9l\", alt: \"Growth metric 2\" },\n        { src: \"https://toastability-production.s3.amazonaws.com/9covpitzpuuobkg1m4mfokpi0enw\", alt: \"Growth metric 3\" },\n        { src: \"https://toastability-production.s3.amazonaws.com/2d4k8d5shwg82276hzj2ztbj7mxq\", alt: \"Growth metric 4\" },\n      ]}\n      modalVideo={{\n        video: {\n          src: \"https://toastability-production.s3.amazonaws.com/4kox2ux0ye1wlqkdwg03s08a67i1\",\n          title: \"See how it works\",\n        },\n      }}\n      background=\"dark\"\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},"videoAction":{"type":"object","description":"Video action object","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},"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},"showcaseImages":{"type":"array","description":"Array of showcase images (expects 4 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,"minItems":3,"maxItems":4,"mediaHints":{"path":"showcaseImages[]","roles":["feature","hero"],"disallowedRoles":["logo","favicon","video-thumbnail"],"minPixelClass":"medium","required":true,"note":"Product showcase/metric images. IMAGE MEDIA ONLY. Do not use logos, favicons, or video assets."}},"showcaseImagesSlot":{"type":"object","description":"Custom slot for showcase images (overrides showcaseImages array)","typeLabel":"React.ReactNode","required":false},"modalVideo":{"type":"object","description":"Video configuration for modal/dialog","fields":{"image":{"type":"object","description":"Image configuration using standard React img attributes.\nWhen both image and video are provided, image may serve as a poster/fallback.","typeLabel":"React__default.ComponentPropsWithoutRef","required":false},"video":{"type":"object","description":"Video configuration using","typeLabel":"React__default.ComponentPropsWithoutRef<\"video\"> & { /** * Direct HLS master playlist URL (skips transform call) */ masterPlaylistUrl?: string; /** * Fallback progressive MP4 URL if HLS fails */ fallbackSrc?: string; /** * OptixFlow API key for poster optimization */ optixFlowApiKey?: string; /** * Skin classes for custom controls (from @page-speed/skins) */ skinClasses?: { container?: string; video?: string; controlsBar?: string; playButton?: string; timeline?: string; timelineProgress?: string; timelineBuffered?: string; timeText?: string; volumeControl?: string; fullscreenButton?: string; settingsButton?: string; loadingSpinner?: string; playOverlay?: string; playOverlayButton?: string; }; /** * CSS custom properties from skin tokens */ skinStyle?: Record<string, string>; /** * Enable debug logging */ debug?: boolean; }","required":false},"containerClassName":{"type":"string","description":"Additional CSS classes for the media container element.","required":false}},"typeLabel":"MediaItem","required":true,"mediaHints":{"path":"modalVideo.video","roles":[],"disallowedRoles":["logo","favicon","hero","feature","profile","thumbnail"],"note":"VIDEO MEDIA ONLY. Must be an HLS playlist or MP4 URL, not an image URL."}},"videoDialogTitle":{"type":"string","description":"Video dialog title","required":false},"videoDialog":{"type":"object","description":"","fields":{"title":{"type":"string","description":"Dialog title","required":false},"videoUrl":{"type":"string","description":"Video embed URL","required":false}},"typeLabel":"VideoDialogConfig","required":false},"onVideoClick":{"type":"object","description":"Callback when video button is clicked","typeLabel":"() => void","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},"headingClassName":{"type":"string","description":"Additional CSS classes for the heading","required":false},"descriptionClassName":{"type":"string","description":"Additional CSS classes for the description","required":false},"showcaseClassName":{"type":"string","description":"Additional CSS classes for the showcase area","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},"videoAspectRatio":{"type":"string","description":"Video aspect ratio","typeLabel":"\"horizontal\" | \"vertical\"","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}},"exampleProps":{"logo":{"src":"https://cdn.ing/assets/i/r/287634/e4cmvu8nbwoqy2qer90t4gpap0ed/logo-light.png","alt":"Brand Logo"},"heading":"Accelerate your growth with data-driven insights","description":"See how top companies use our platform to scale faster.","videoAction":{"label":"Watch Demo","variant":"outline"},"showcaseImages":[{"src":"https://toastability-production.s3.amazonaws.com/ihgx63s5nfzp2e93e3ccljjnnrov","alt":"Growth metric 1"},{"src":"https://toastability-production.s3.amazonaws.com/b555hwjt7ltr81et05v5254q1ak6","alt":"Growth metric 2"},{"src":"https://toastability-production.s3.amazonaws.com/c4sgsy0g7o2rrjmvm9x7evxems82","alt":"Growth metric 3"},{"src":"https://toastability-production.s3.amazonaws.com/xlp46pzk3a4d73jgjx4s7xdafwpn","alt":"Growth metric 4"}],"modalVideo":{"video":{"masterPlaylistUrl":"https://cdn.ing/assets/video/uploads/283391/hls/38861/master.m3u8","fallbackSrc":"https://toastability-production.s3.amazonaws.com/lvwp8x0nxf8xmarwganmvzvto3r5"}},"background":"dark","actions":[{"label":"Get Started","href":"#","variant":"ghost"}]},"dependencies":["@opensite/ui"],"tags":["hero","software","growth","video","dialog","modal","saas","startup"],"performance":{},"importantUsageNotes":"Only use when you have a real video for the 'modalVideo' prop. Supply 3-4 showcase images. Do not exceed 50 characters for 'heading'. Do not exceed 130 characters for 'description'.  All media src values must be absolute URLs to real assets; relative paths and placeholder media variables are not allowed.","usageRequirements":{"requiredProps":["heading","modalVideo","showcaseImages"],"propConstraints":{"heading":{"required":true,"maxLength":50},"description":{"maxLength":130},"modalVideo":{"required":true,"note":"Must contain a valid video object."},"showcaseImages":{"required":true,"minItems":3,"maxItems":4}},"mediaSlots":{"showcaseImages[]":{"path":"showcaseImages[]","roles":["feature","hero"],"disallowedRoles":["logo","favicon","video-thumbnail"],"minPixelClass":"medium","required":true,"note":"Product showcase/metric images. IMAGE MEDIA ONLY. Do not use logos, favicons, or video assets."},"modalVideo.video":{"path":"modalVideo.video","roles":[],"disallowedRoles":["logo","favicon","hero","feature","profile","thumbnail"],"note":"VIDEO MEDIA ONLY. Must be an HLS playlist or MP4 URL, not an image URL."}},"requiresSiteCapabilities":["media_library"]}}},"timestamp":"2026-06-27T20:18:42.628Z"}