diff --git a/src/components/sections/feature/FeatureCardTwentyFive.tsx b/src/components/sections/feature/FeatureCardTwentyFive.tsx index ede0671..017345b 100644 --- a/src/components/sections/feature/FeatureCardTwentyFive.tsx +++ b/src/components/sections/feature/FeatureCardTwentyFive.tsx @@ -1,58 +1,178 @@ -import React from 'react'; -import { CardStack } from '@/components/cardStack/CardStack'; +"use client"; -interface FeatureCardTwentyFiveProps { - features: Array<{ - id?: string; - title: string; - description: string; - icon?: any; - mediaItems?: Array<{ imageSrc: string; imageAlt?: string }>; - }>; - title: string; - description: string; - animationType?: string; - textboxLayout?: string; - useInvertedBackground?: boolean; - [key: string]: any; +import CardStack from "@/components/cardStack/CardStack"; +import MediaContent from "@/components/shared/MediaContent"; +import { cls, shouldUseInvertedText } from "@/lib/utils"; +import { useTheme } from "@/providers/themeProvider/ThemeProvider"; +import type { LucideIcon } from "lucide-react"; +import type { CardAnimationTypeWith3D, TitleSegment, ButtonConfig, ButtonAnimationType } from "@/components/cardStack/types"; + +import type { TextboxLayout, InvertedBackground } from "@/providers/themeProvider/config/constants"; + +interface MediaItem { + imageSrc?: string; + videoSrc?: string; + imageAlt?: string; + videoAriaLabel?: string; } -const FeatureCardTwentyFive: React.FC = ({ +type FeatureCard = { + title: string; + description: string; + icon: LucideIcon; + mediaItems: [MediaItem, MediaItem]; +}; + +interface FeatureCardTwentyFiveProps { + features: FeatureCard[]; + carouselMode?: "auto" | "buttons"; + uniformGridCustomHeightClasses?: string; + animationType: CardAnimationTypeWith3D; + title: string; + titleSegments?: TitleSegment[]; + description: string; + tag?: string; + tagIcon?: LucideIcon; + tagAnimation?: ButtonAnimationType; + buttons?: ButtonConfig[]; + buttonAnimation?: ButtonAnimationType; + textboxLayout: TextboxLayout; + useInvertedBackground: InvertedBackground; + ariaLabel?: string; + className?: string; + containerClassName?: string; + cardClassName?: string; + mediaClassName?: string; + textBoxTitleClassName?: string; + textBoxTitleImageWrapperClassName?: string; + textBoxTitleImageClassName?: string; + textBoxDescriptionClassName?: string; + cardTitleClassName?: string; + cardDescriptionClassName?: string; + cardIconClassName?: string; + cardIconWrapperClassName?: string; + gridClassName?: string; + carouselClassName?: string; + controlsClassName?: string; + textBoxClassName?: string; + textBoxTagClassName?: string; + textBoxButtonContainerClassName?: string; + textBoxButtonClassName?: string; + textBoxButtonTextClassName?: string; +} + +const FeatureCardTwentyFive = ({ features, + carouselMode = "buttons", + uniformGridCustomHeightClasses, + animationType, title, + titleSegments, description, - animationType = 'slide-up', - textboxLayout = 'default', - useInvertedBackground = false, - ...props -}) => { - const featureItems = features.map((feature, index) => ( -
-

{feature.title}

-

{feature.description}

- {feature.mediaItems && feature.mediaItems.length > 0 && ( -
- {feature.mediaItems.map((media, idx) => ( - {media.imageAlt - ))} -
- )} -
- )); + tag, + tagIcon, + tagAnimation, + buttons, + buttonAnimation, + textboxLayout, + useInvertedBackground, + ariaLabel = "Feature section", + className = "", + containerClassName = "", + cardClassName = "", + mediaClassName = "", + textBoxTitleClassName = "", + textBoxTitleImageWrapperClassName = "", + textBoxTitleImageClassName = "", + textBoxDescriptionClassName = "", + cardTitleClassName = "", + cardDescriptionClassName = "", + cardIconClassName = "", + cardIconWrapperClassName = "", + gridClassName = "", + carouselClassName = "", + controlsClassName = "", + textBoxClassName = "", + textBoxTagClassName = "", + textBoxButtonContainerClassName = "", + textBoxButtonClassName = "", + textBoxButtonTextClassName = "", +}: FeatureCardTwentyFiveProps) => { + const theme = useTheme(); + const shouldUseLightText = shouldUseInvertedText(useInvertedBackground, theme.cardStyle); return ( - {featureItems} + {features.map((feature, index) => { + const IconComponent = feature.icon; + return ( +
+
+
+ +
+

+ {feature.title} +

+

+ {feature.description} +

+
+
+ {feature.mediaItems.map((item, mediaIndex) => ( +
+ +
+ ))} +
+
+ ); + })}
); }; -export default FeatureCardTwentyFive; \ No newline at end of file +FeatureCardTwentyFive.displayName = "FeatureCardTwentyFive"; + +export default FeatureCardTwentyFive;