"use client"; import TextBox from "@/components/Textbox"; import MediaContent from "@/components/shared/MediaContent"; import AutoCarousel from "@/components/cardStack/layouts/carousels/AutoCarousel"; import HeroBackgrounds, { type HeroBackgroundVariantProps } from "@/components/background/HeroBackgrounds"; import { cls } from "@/lib/utils"; import type { LucideIcon } from "lucide-react"; import type { ButtonConfig } from "@/types/button"; export interface MediaItem { imageSrc?: string; videoSrc?: string; imageAlt?: string; videoAriaLabel?: string; } type HeroBillboardGalleryBackgroundProps = Extract< HeroBackgroundVariantProps, | { variant: "plain" } | { variant: "animated-grid" } | { variant: "canvas-reveal" } | { variant: "cell-wave" } | { variant: "downward-rays-animated" } | { variant: "downward-rays-animated-grid" } | { variant: "downward-rays-static" } | { variant: "downward-rays-static-grid" } | { variant: "gradient-bars" } | { variant: "radial-gradient" } | { variant: "rotated-rays-animated" } | { variant: "rotated-rays-animated-grid" } | { variant: "rotated-rays-static" } | { variant: "rotated-rays-static-grid" } | { variant: "sparkles-gradient" } >; interface HeroBillboardGalleryProps { title: string; description: string; background: HeroBillboardGalleryBackgroundProps; tag?: string; tagIcon?: LucideIcon; buttons?: ButtonConfig[]; mediaItems: MediaItem[]; ariaLabel?: string; className?: string; containerClassName?: string; textBoxClassName?: string; titleClassName?: string; descriptionClassName?: string; tagClassName?: string; buttonContainerClassName?: string; buttonClassName?: string; buttonTextClassName?: string; mediaWrapperClassName?: string; imageClassName?: string; } const HeroBillboardGallery = ({ title, description, background, tag, tagIcon, buttons, mediaItems, ariaLabel = "Hero section", className = "", containerClassName = "", textBoxClassName = "", titleClassName = "", descriptionClassName = "", tagClassName = "", buttonContainerClassName = "", buttonClassName = "", buttonTextClassName = "", mediaWrapperClassName = "", imageClassName = "", }: HeroBillboardGalleryProps) => { const renderCarouselItem = (item: MediaItem, index: number) => (
); const itemCount = mediaItems?.length || 0; const desktopWidthClass = itemCount === 3 ? "md:w-[24%]" : itemCount === 4 ? "md:w-[24%]" : "md:w-[23%]"; return (
{mediaItems?.slice(0, 5).map(renderCarouselItem)}
{mediaItems?.slice(0, 5).map((item, index) => { const rotations = ["-rotate-6", "rotate-6", "-rotate-6", "rotate-6", "-rotate-6"]; const zIndexes = ["z-10", "z-20", "z-30", "z-40", "z-50"]; const translates = ["-translate-y-5", "translate-y-5", "-translate-y-5", "translate-y-5", "-translate-y-5"]; const marginClass = index > 0 ? "-ml-12 md:-ml-15" : ""; return (
); })}
); }; HeroBillboardGallery.displayName = "HeroBillboardGallery"; export default HeroBillboardGallery;