diff --git a/src/components/sections/feature/FeatureCardOne.tsx b/src/components/sections/feature/FeatureCardOne.tsx index db4fcd9..40eeeb4 100644 --- a/src/components/sections/feature/FeatureCardOne.tsx +++ b/src/components/sections/feature/FeatureCardOne.tsx @@ -1,28 +1,196 @@ -import React from "react"; -import { CardStack } from "@/components/cardStack/CardStack"; +"use client"; + +import CardStack from "@/components/cardStack/CardStack"; +import MediaContent from "@/components/shared/MediaContent"; +import Button from "@/components/button/Button"; +import { cls, shouldUseInvertedText } from "@/lib/utils"; +import { getButtonProps } from "@/lib/buttonUtils"; +import { useTheme } from "@/providers/themeProvider/ThemeProvider"; +import type { LucideIcon } from "lucide-react"; +import type { ButtonConfig, GridVariant, CardAnimationTypeWith3D, TitleSegment, ButtonAnimationType } from "@/components/cardStack/types"; + +import type { TextboxLayout, InvertedBackground } from "@/providers/themeProvider/config/constants"; + +type FeatureCard = { + title: string; + description: string; + button?: ButtonConfig; +} & ( + | { + imageSrc: string; + imageAlt?: string; + videoSrc?: never; + videoAriaLabel?: never; + } + | { + videoSrc: string; + videoAriaLabel?: string; + imageSrc?: never; + imageAlt?: never; + } + ); interface FeatureCardOneProps { - features?: any[]; - title?: string; - description?: string; - animationType?: string; - textboxLayout?: string; - useInvertedBackground?: boolean; + features: FeatureCard[]; + carouselMode?: "auto" | "buttons"; + gridVariant: GridVariant; + 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; + cardButtonClassName?: string; + cardButtonTextClassName?: string; + gridClassName?: string; + carouselClassName?: string; + controlsClassName?: string; + textBoxClassName?: string; + textBoxTagClassName?: string; + textBoxButtonContainerClassName?: string; + textBoxButtonClassName?: string; + textBoxButtonTextClassName?: string; } -export default function FeatureCardOne({ - features = [], - title = "Features", description = "Our features", animationType = "slide-up", textboxLayout = "default", useInvertedBackground = false, -}: FeatureCardOneProps) { - const items = features.map((feature) => ({ - id: feature.id, - label: feature.title, - detail: feature.description, - })); +const FeatureCardOne = ({ + features, + carouselMode = "buttons", + gridVariant, + uniformGridCustomHeightClasses, + animationType, + title, + titleSegments, + description, + tag, + tagIcon, + tagAnimation, + buttons, + buttonAnimation, + textboxLayout, + useInvertedBackground, + ariaLabel = "Feature section", + className = "", + containerClassName = "", + cardClassName = "", + mediaClassName = "", + textBoxTitleClassName = "", + textBoxTitleImageWrapperClassName = "", + textBoxTitleImageClassName = "", + textBoxDescriptionClassName = "", + cardTitleClassName = "", + cardDescriptionClassName = "", + cardButtonClassName = "", + cardButtonTextClassName = "", + gridClassName = "", + carouselClassName = "", + controlsClassName = "", + textBoxClassName = "", + textBoxTagClassName = "", + textBoxButtonContainerClassName = "", + textBoxButtonClassName = "", + textBoxButtonTextClassName = "", +}: FeatureCardOneProps) => { + const theme = useTheme(); + const shouldUseLightText = shouldUseInvertedText(useInvertedBackground, theme.cardStyle); + + const getButtonConfigProps = () => { + if (theme.defaultButtonVariant === "hover-bubble") { + return { bgClassName: "w-full" }; + } + if (theme.defaultButtonVariant === "icon-arrow") { + return { className: "justify-between" }; + } + return {}; + }; return ( -
- -
+ + {features.map((feature, index) => ( +
+ +
+

+ {feature.title} +

+

+ {feature.description} +

+
+ {feature.button && ( +
+ ))} +
); -} +}; + +FeatureCardOne.displayName = "FeatureCardOne"; + +export default FeatureCardOne;