From f78fb8a700b6bbb048efcca0303eebc831dc17a2 Mon Sep 17 00:00:00 2001 From: bender Date: Wed, 11 Mar 2026 20:30:41 +0000 Subject: [PATCH] Update src/components/sections/feature/FeatureCardTwentyFour.tsx --- .../feature/FeatureCardTwentyFour.tsx | 262 ++++++------------ 1 file changed, 78 insertions(+), 184 deletions(-) diff --git a/src/components/sections/feature/FeatureCardTwentyFour.tsx b/src/components/sections/feature/FeatureCardTwentyFour.tsx index 5da7878..dda40bc 100644 --- a/src/components/sections/feature/FeatureCardTwentyFour.tsx +++ b/src/components/sections/feature/FeatureCardTwentyFour.tsx @@ -1,199 +1,93 @@ "use client"; -import CardList from "@/components/cardStack/CardList"; -import Tag from "@/components/shared/Tag"; -import MediaContent from "@/components/shared/MediaContent"; -import { cls, shouldUseInvertedText } from "@/lib/utils"; -import { useTheme } from "@/providers/themeProvider/ThemeProvider"; +import React, { useMemo } from "react"; +import CardList from "@/components/card/CardList"; +import type { ButtonAnimationType } from "@/types/animations"; import type { LucideIcon } from "lucide-react"; -import type { ButtonConfig, ButtonAnimationType, CardAnimationType, TitleSegment } from "@/components/cardStack/types"; -import type { TextboxLayout, InvertedBackground } from "@/providers/themeProvider/config/constants"; -type MediaProps = - | { - imageSrc: string; - imageAlt?: string; - videoSrc?: never; - videoAriaLabel?: never; - } - | { - videoSrc: string; - videoAriaLabel?: string; - imageSrc?: never; - imageAlt?: never; - }; - -type FeatureItem = MediaProps & { +export interface FeatureCardTwentyFourProps { + features?: Array<{ id: string; title: string; - author: string; description: string; - tags: string[]; - onFeatureClick?: () => void; -}; - -interface FeatureCardTwentyFourProps { - features: FeatureItem[]; - animationType: CardAnimationType; - 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; - textBoxTitleClassName?: string; - textBoxDescriptionClassName?: string; - textBoxClassName?: string; - textBoxTagClassName?: string; - textBoxButtonContainerClassName?: string; - textBoxButtonClassName?: string; - textBoxButtonTextClassName?: string; - titleImageWrapperClassName?: string; - titleImageClassName?: string; - cardContentClassName?: string; - cardTitleClassName?: string; - authorClassName?: string; - cardDescriptionClassName?: string; - tagsContainerClassName?: string; - tagClassName?: string; - mediaWrapperClassName?: string; - mediaClassName?: string; + icon?: React.ReactNode; + }>; + animationType?: ButtonAnimationType; + textboxLayout?: "default" | "split" | "split-actions" | "split-description" | "inline-image"; + description?: string; + tag?: string; + tagIcon?: LucideIcon; + tagAnimation?: "none" | "opacity" | "slide-up" | "blur-reveal"; + buttons?: Array<{ text: string; onClick?: () => void; href?: string }>; + buttonAnimation?: "none" | "opacity" | "slide-up" | "blur-reveal"; + useInvertedBackground?: boolean; + ariaLabel?: string; + className?: string; + containerClassName?: string; + cardClassName?: string; + textBoxTitleClassName?: string; + textBoxDescriptionClassName?: string; + cardTitleClassName?: string; + cardDescriptionClassName?: string; + cardIconClassName?: string; + cardIconWrapperClassName?: string; + listClassName?: string; + itemClassName?: string; + textBoxClassName?: string; + textBoxTagClassName?: string; + textBoxButtonContainerClassName?: string; + textBoxButtonClassName?: string; + textBoxButtonTextClassName?: string; } -const FeatureCardTwentyFour = ({ - features, - animationType, - title, - titleSegments, - description, - tag, - tagIcon, - tagAnimation, - buttons, - buttonAnimation, - textboxLayout, - useInvertedBackground, - ariaLabel = "Features section", - className = "", - containerClassName = "", - cardClassName = "", - textBoxTitleClassName = "", - textBoxDescriptionClassName = "", - textBoxClassName = "", - textBoxTagClassName = "", - textBoxButtonContainerClassName = "", - textBoxButtonClassName = "", - textBoxButtonTextClassName = "", - titleImageWrapperClassName = "", - titleImageClassName = "", - cardContentClassName = "", - cardTitleClassName = "", - authorClassName = "", - cardDescriptionClassName = "", - tagsContainerClassName = "", - tagClassName = "", - mediaWrapperClassName = "", - mediaClassName = "", -}: FeatureCardTwentyFourProps) => { - const theme = useTheme(); - const shouldUseLightText = shouldUseInvertedText(useInvertedBackground, theme.cardStyle); +const FeatureCardTwentyFour: React.FC = ({ + features = [], + animationType = "slide-up", textboxLayout = "default", description = "", tag, + tagIcon, + tagAnimation, + buttons, + buttonAnimation, + useInvertedBackground = false, + ariaLabel = "Feature section", className = "", containerClassName = "", cardClassName = "", textBoxTitleClassName = "", textBoxDescriptionClassName = "", cardTitleClassName = "", cardDescriptionClassName = "", cardIconClassName = "", cardIconWrapperClassName = "", listClassName = "", itemClassName = "", textBoxClassName = "", textBoxTagClassName = "", textBoxButtonContainerClassName = "", textBoxButtonClassName = "", textBoxButtonTextClassName = ""}) => { + const listItems = useMemo( + () => + features.map((feature) => ( +
+ {feature.icon && ( +
+ {feature.icon} +
+ )} +
+

+ {feature.title} +

+

+ {feature.description} +

+
+
+ )), + [features, itemClassName, cardIconWrapperClassName, cardIconClassName, cardTitleClassName, cardDescriptionClassName] + ); - return ( + return ( +
+
- {features.map((feature) => ( -
-
-

- {feature.title}{" "} - - by {feature.author} - -

- -
-
- {feature.tags.map((tagText, index) => ( - - ))} -
- -

- {feature.description} -

-
-
- -
- -
-
- ))} + {listItems.map((item) => item)}
- ); +
+
+ ); }; -FeatureCardTwentyFour.displayName = "FeatureCardTwentyFour"; - -export default FeatureCardTwentyFour; +export default FeatureCardTwentyFour; \ No newline at end of file