diff --git a/src/components/sections/feature/FeatureCardTwentySeven.tsx b/src/components/sections/feature/FeatureCardTwentySeven.tsx
index 8e95b1a..57f0c0d 100644
--- a/src/components/sections/feature/FeatureCardTwentySeven.tsx
+++ b/src/components/sections/feature/FeatureCardTwentySeven.tsx
@@ -1,127 +1,44 @@
"use client";
-import { useState } from "react";
-import { Plus } from "lucide-react";
-import CardStack from "@/components/cardStack/CardStack";
-import MediaContent from "@/components/shared/MediaContent";
-import { cls } from "@/lib/utils";
-import type { LucideIcon } from "lucide-react";
-import type { ButtonConfig, GridVariant, CardAnimationType, TitleSegment, ButtonAnimationType } from "@/components/cardStack/types";
-import type { TextboxLayout, InvertedBackground } from "@/providers/themeProvider/config/constants";
+import React, { useMemo } from "react";
+import CardStack from "@/components/card/CardStack";
+import TextBox from "@/components/Textbox";
+import type { CardAnimationType } from "@/types/animations";
+import type { GridVariant } from "@/types/grid";
-type FeatureCard = {
- id: string;
- title: string;
- descriptions: string[];
- imageSrc?: string;
- videoSrc?: string;
- imageAlt?: string;
-};
-
-interface FeatureCardTwentySevenItemProps {
- title: string;
- descriptions: string[];
- imageSrc?: string;
- videoSrc?: string;
- imageAlt?: string;
- className?: string;
- titleClassName?: string;
- descriptionClassName?: string;
-}
-
-const FeatureCardTwentySevenItem = ({
- title,
- descriptions,
- imageSrc,
- videoSrc,
- imageAlt = "",
- className = "",
- titleClassName = "",
- descriptionClassName = "",
-}: FeatureCardTwentySevenItemProps) => {
- const [isFlipped, setIsFlipped] = useState(false);
-
- return (
-
setIsFlipped(!isFlipped)}
- >
-
-
-
-
-
-
- {descriptions.map((desc, index) => (
-
- {desc}
-
- ))}
-
-
-
-
- );
-};
-
-interface FeatureCardTwentySevenProps {
- features: FeatureCard[];
- carouselMode?: "auto" | "buttons";
- gridVariant: GridVariant;
+export interface FeatureCardTwentySevenProps {
+ features?: Array<{
+ id: string;
+ title: string;
+ description: string;
+ icon?: React.ReactNode;
+ mediaItems?: Array<{ type: string; src: string; alt?: string }>;
+ }>;
+ gridVariant?: GridVariant;
uniformGridCustomHeightClasses?: string;
- animationType: CardAnimationType;
- title: string;
- titleSegments?: TitleSegment[];
- description: string;
+ animationType?: CardAnimationType;
+ title?: string;
+ titleSegments?: Array<{ type: "text"; content: string } | { type: "image"; src: string; alt?: string }>;
+ description?: string;
tag?: string;
- tagIcon?: LucideIcon;
- tagAnimation?: ButtonAnimationType;
- buttons?: ButtonConfig[];
- buttonAnimation?: ButtonAnimationType;
- textboxLayout: TextboxLayout;
- useInvertedBackground: InvertedBackground;
+ tagAnimation?: "none" | "opacity" | "slide-up" | "blur-reveal";
+ buttons?: Array<{ text: string; onClick?: () => void; href?: string }>;
+ buttonAnimation?: "none" | "opacity" | "slide-up" | "blur-reveal";
+ textboxLayout?: "default" | "split" | "split-actions" | "split-description" | "inline-image";
+ useInvertedBackground?: boolean;
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;
@@ -132,90 +49,94 @@ interface FeatureCardTwentySevenProps {
textBoxButtonTextClassName?: string;
}
-const FeatureCardTwentySeven = ({
- features,
- carouselMode = "buttons",
- gridVariant,
- uniformGridCustomHeightClasses = "min-h-none",
- animationType,
- title,
+const FeatureCardTwentySeven: React.FC = ({
+ features = [],
+ gridVariant = "uniform-all-items-equal", uniformGridCustomHeightClasses = "min-h-95 2xl:min-h-105", animationType = "slide-up", title,
titleSegments,
- description,
- tag,
- tagIcon,
+ description = "", tag,
tagAnimation,
buttons,
buttonAnimation,
- textboxLayout,
- useInvertedBackground,
- ariaLabel = "Feature section",
- className = "",
- containerClassName = "",
- cardClassName = "",
- textBoxTitleClassName = "",
- textBoxTitleImageWrapperClassName = "",
- textBoxTitleImageClassName = "",
- textBoxDescriptionClassName = "",
- cardTitleClassName = "",
- cardDescriptionClassName = "",
- gridClassName = "",
- carouselClassName = "",
- controlsClassName = "",
- textBoxClassName = "",
- textBoxTagClassName = "",
- textBoxButtonContainerClassName = "",
- textBoxButtonClassName = "",
- textBoxButtonTextClassName = "",
-}: FeatureCardTwentySevenProps) => {
+ textboxLayout = "default", useInvertedBackground = false,
+ ariaLabel = "Feature section", className = "", containerClassName = "", cardClassName = "", mediaClassName = "", textBoxTitleClassName = "", textBoxTitleImageWrapperClassName = "", textBoxTitleImageClassName = "", textBoxDescriptionClassName = "", cardTitleClassName = "", cardDescriptionClassName = "", cardIconClassName = "", cardIconWrapperClassName = "", gridClassName = "", carouselClassName = "", controlsClassName = "", textBoxClassName = "", textBoxTagClassName = "", textBoxButtonContainerClassName = "", textBoxButtonClassName = "", textBoxButtonTextClassName = ""}) => {
+ const cardItems = useMemo(
+ () =>
+ features.map((feature) => (
+
+ {feature.icon && (
+
+ {feature.icon}
+
+ )}
+
+ {feature.title}
+
+
+ {feature.description}
+
+ {feature.mediaItems && (
+
+ {feature.mediaItems.map((media, idx) => (
+

+ ))}
+
+ )}
+
+ )),
+ [features, cardClassName, cardIconWrapperClassName, cardIconClassName, cardTitleClassName, cardDescriptionClassName, mediaClassName]
+ );
+
return (
-
- {features.map((feature, index) => (
-
- ))}
-
+ {title && (
+
+
+
+ )}
+
+
+
+ {cardItems.map((item) => item)}
+
+
+
);
};
-FeatureCardTwentySeven.displayName = "FeatureCardTwentySeven";
-
-export default FeatureCardTwentySeven;
+export default FeatureCardTwentySeven;
\ No newline at end of file