diff --git a/src/components/sections/hero/HeroBillboardCarousel.tsx b/src/components/sections/hero/HeroBillboardCarousel.tsx index 184efe0..f6bc30b 100644 --- a/src/components/sections/hero/HeroBillboardCarousel.tsx +++ b/src/components/sections/hero/HeroBillboardCarousel.tsx @@ -1,33 +1,155 @@ -import React from "react"; +"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, ButtonAnimationType } from "@/types/button"; + +export interface MediaItem { + imageSrc?: string; + videoSrc?: string; + imageAlt?: string; + videoAriaLabel?: string; +} + +type HeroBillboardCarouselBackgroundProps = 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 HeroBillboardCarouselProps { - title?: string; - description?: string; - textboxLayout?: string; - animationType?: string; - className?: string; - carouselClassName?: string; - containerClassName?: string; - itemClassName?: string; - ariaLabel?: string; - mediaItems?: Array<{ imageSrc?: string; videoSrc?: string; imageAlt?: string }>; + title: string; + description: string; + background: HeroBillboardCarouselBackgroundProps; + tag?: string; + tagIcon?: LucideIcon; + tagAnimation?: ButtonAnimationType; + buttons?: ButtonConfig[]; + buttonAnimation?: ButtonAnimationType; + mediaItems: MediaItem[]; + ariaLabel?: string; + className?: string; + containerClassName?: string; + textBoxClassName?: string; + titleClassName?: string; + descriptionClassName?: string; + tagClassName?: string; + buttonContainerClassName?: string; + buttonClassName?: string; + buttonTextClassName?: string; + mediaWrapperClassName?: string; } -export default function HeroBillboardCarousel({ - title = "Hero", description = "Welcome", textboxLayout = "default", animationType = "slide-up", className = "", carouselClassName = "", containerClassName = "", itemClassName = "", ariaLabel = "Hero section", mediaItems = [], -}: HeroBillboardCarouselProps) { - const items = mediaItems.map((item) => ({ - imageSrc: item.imageSrc, - videoSrc: item.videoSrc, - imageAlt: item.imageAlt, - })); +const HeroBillboardCarousel = ({ + title, + description, + background, + tag, + tagIcon, + tagAnimation, + buttons, + buttonAnimation, + mediaItems, + ariaLabel = "Hero section", + className = "", + containerClassName = "", + textBoxClassName = "", + titleClassName = "", + descriptionClassName = "", + tagClassName = "", + buttonContainerClassName = "", + buttonClassName = "", + buttonTextClassName = "", + mediaWrapperClassName = "", +}: HeroBillboardCarouselProps) => { + const renderCarouselItem = (item: MediaItem, index: number) => ( +
+ +
+ ); - return ( -
-

{title}

-

{description}

- -
- ); -} + return ( +
+ +
+ + +
+ + {mediaItems?.map(renderCarouselItem)} + +
+
+
+ ); +}; + +HeroBillboardCarousel.displayName = "HeroBillboardCarousel"; + +export default HeroBillboardCarousel; \ No newline at end of file