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