diff --git a/src/components/sections/pricing/PricingCardOne.tsx b/src/components/sections/pricing/PricingCardOne.tsx index 0ea16dd..d1d12f0 100644 --- a/src/components/sections/pricing/PricingCardOne.tsx +++ b/src/components/sections/pricing/PricingCardOne.tsx @@ -1,11 +1,206 @@ -import { useCardAnimation } from '@/components/cardStack/CardStack'; +"use client"; -export function PricingCardOne() { - const { animate } = useCardAnimation(); +import { memo } from "react"; +import CardStack from "@/components/cardStack/CardStack"; +import PricingBadge from "@/components/shared/PricingBadge"; +import PricingFeatureList from "@/components/shared/PricingFeatureList"; +import { cls, shouldUseInvertedText } from "@/lib/utils"; +import { useTheme } from "@/providers/themeProvider/ThemeProvider"; +import type { LucideIcon } from "lucide-react"; +import type { ButtonConfig, CardAnimationTypeWith3D, TitleSegment, ButtonAnimationType } from "@/components/cardStack/types"; +import type { TextboxLayout, InvertedBackground } from "@/providers/themeProvider/config/constants"; - return ( -
- -
- ); +type PricingPlan = { + id: string; + badge: string; + badgeIcon?: LucideIcon; + price: string; + subtitle: string; + features: string[]; +}; + +interface PricingCardOneProps { + plans: PricingPlan[]; + 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; + textBoxTitleClassName?: string; + textBoxTitleImageWrapperClassName?: string; + textBoxTitleImageClassName?: string; + textBoxDescriptionClassName?: string; + badgeClassName?: string; + priceClassName?: string; + subtitleClassName?: string; + featuresClassName?: string; + featureItemClassName?: string; + gridClassName?: string; + carouselClassName?: string; + controlsClassName?: string; + textBoxClassName?: string; + textBoxTagClassName?: string; + textBoxButtonContainerClassName?: string; + textBoxButtonClassName?: string; + textBoxButtonTextClassName?: string; } + +interface PricingCardItemProps { + plan: PricingPlan; + shouldUseLightText: boolean; + cardClassName?: string; + badgeClassName?: string; + priceClassName?: string; + subtitleClassName?: string; + featuresClassName?: string; + featureItemClassName?: string; +} + +const PricingCardItem = memo(({ + plan, + shouldUseLightText, + cardClassName = "", + badgeClassName = "", + priceClassName = "", + subtitleClassName = "", + featuresClassName = "", + featureItemClassName = "", +}: PricingCardItemProps) => { + return ( +
+ + +
+
+ {plan.price} +
+ +

+ {plan.subtitle} +

+
+ +
+ + +
+ ); +}); + +PricingCardItem.displayName = "PricingCardItem"; + +const PricingCardOne = ({ + plans, + carouselMode = "buttons", + uniformGridCustomHeightClasses, + animationType, + title, + titleSegments, + description, + tag, + tagIcon, + tagAnimation, + buttons, + buttonAnimation, + textboxLayout, + useInvertedBackground, + ariaLabel = "Pricing section", + className = "", + containerClassName = "", + cardClassName = "", + textBoxTitleClassName = "", + textBoxTitleImageWrapperClassName = "", + textBoxTitleImageClassName = "", + textBoxDescriptionClassName = "", + badgeClassName = "", + priceClassName = "", + subtitleClassName = "", + featuresClassName = "", + featureItemClassName = "", + gridClassName = "", + carouselClassName = "", + controlsClassName = "", + textBoxClassName = "", + textBoxTagClassName = "", + textBoxButtonContainerClassName = "", + textBoxButtonClassName = "", + textBoxButtonTextClassName = "", +}: PricingCardOneProps) => { + const theme = useTheme(); + const shouldUseLightText = shouldUseInvertedText(useInvertedBackground, theme.cardStyle); + + return ( + + {plans.map((plan, index) => ( + + ))} + + ); +}; + +PricingCardOne.displayName = "PricingCardOne"; + +export default PricingCardOne;