From d310408c404bdfaff9855e314e30aad5fcb84a6f Mon Sep 17 00:00:00 2001 From: bender Date: Wed, 4 Mar 2026 00:29:17 +0000 Subject: [PATCH] Switch to version 1: modified src/components/sections/hero/HeroBillboardCarousel.tsx --- .../sections/hero/HeroBillboardCarousel.tsx | 161 +++++++++++++++++- 1 file changed, 153 insertions(+), 8 deletions(-) diff --git a/src/components/sections/hero/HeroBillboardCarousel.tsx b/src/components/sections/hero/HeroBillboardCarousel.tsx index 423b9f0..f6bc30b 100644 --- a/src/components/sections/hero/HeroBillboardCarousel.tsx +++ b/src/components/sections/hero/HeroBillboardCarousel.tsx @@ -1,10 +1,155 @@ -import React from 'react'; -import { AutoCarousel } from '../../cardStack/layouts/carousels/AutoCarousel'; +"use client"; -export function HeroBillboardCarousel() { - return ( -
- -
- ); +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; + 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; +} + +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 ( +
+ +
+ + +
+ + {mediaItems?.map(renderCarouselItem)} + +
+
+
+ ); +}; + +HeroBillboardCarousel.displayName = "HeroBillboardCarousel"; + +export default HeroBillboardCarousel; \ No newline at end of file