diff --git a/src/components/sections/pricing/PricingCardThree.tsx b/src/components/sections/pricing/PricingCardThree.tsx
index 125333a..fa11efb 100644
--- a/src/components/sections/pricing/PricingCardThree.tsx
+++ b/src/components/sections/pricing/PricingCardThree.tsx
@@ -1,11 +1,247 @@
-import { useCardAnimation } from '@/components/cardStack/CardStack';
+"use client";
-export function PricingCardThree() {
- const { animate } = useCardAnimation();
+import { memo } from "react";
+import CardStack from "@/components/cardStack/CardStack";
+import PricingFeatureList from "@/components/shared/PricingFeatureList";
+import Button from "@/components/button/Button";
+import { useTheme } from "@/providers/themeProvider/ThemeProvider";
+import { getButtonProps } from "@/lib/buttonUtils";
+import { cls, shouldUseInvertedText } from "@/lib/utils";
+import type { LucideIcon } from "lucide-react";
+import type { ButtonConfig, CardAnimationType, 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;
+ name: string;
+ buttons: ButtonConfig[];
+ features: string[];
+};
+
+interface PricingCardThreeProps {
+ plans: PricingPlan[];
+ carouselMode?: "auto" | "buttons";
+ uniformGridCustomHeightClasses?: string;
+ 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;
+ textBoxTitleImageWrapperClassName?: string;
+ textBoxTitleImageClassName?: string;
+ textBoxDescriptionClassName?: string;
+ badgeClassName?: string;
+ priceClassName?: string;
+ nameClassName?: string;
+ planButtonContainerClassName?: string;
+ planButtonClassName?: 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;
+ nameClassName?: string;
+ planButtonContainerClassName?: string;
+ planButtonClassName?: string;
+ featuresClassName?: string;
+ featureItemClassName?: string;
+}
+
+const PricingCardItem = memo(({
+ plan,
+ shouldUseLightText,
+ cardClassName = "",
+ badgeClassName = "",
+ priceClassName = "",
+ nameClassName = "",
+ planButtonContainerClassName = "",
+ planButtonClassName = "",
+ featuresClassName = "",
+ featureItemClassName = "",
+}: PricingCardItemProps) => {
+ const theme = useTheme();
+
+ const getButtonConfigProps = () => {
+ if (theme.defaultButtonVariant === "hover-bubble") {
+ return { bgClassName: "w-full" };
+ }
+ if (theme.defaultButtonVariant === "icon-arrow") {
+ return { className: "justify-between" };
+ }
+ return {};
+ };
+
+ return (
+
+
+ {plan.badgeIcon &&
}
+ {plan.badge || "placeholder"}
+
+
+
+
+
+ {plan.price}
+
+
+
+ {plan.name}
+
+
+
+
+
+
+
+
+ {plan.buttons && plan.buttons.length > 0 && (
+
+ {plan.buttons.slice(0, 2).map((button, index) => (
+
+ ))}
+
+ )}
+
+
+ );
+});
+
+PricingCardItem.displayName = "PricingCardItem";
+
+const PricingCardThree = ({
+ 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 = "",
+ nameClassName = "",
+ planButtonContainerClassName = "",
+ planButtonClassName = "",
+ featuresClassName = "",
+ featureItemClassName = "",
+ gridClassName = "",
+ carouselClassName = "",
+ controlsClassName = "",
+ textBoxClassName = "",
+ textBoxTagClassName = "",
+ textBoxButtonContainerClassName = "",
+ textBoxButtonClassName = "",
+ textBoxButtonTextClassName = "",
+}: PricingCardThreeProps) => {
+ const theme = useTheme();
+ const shouldUseLightText = shouldUseInvertedText(useInvertedBackground, theme.cardStyle);
+
+ return (
+
+ {plans.map((plan, index) => (
+
+ ))}
+
+ );
+};
+
+PricingCardThree.displayName = "PricingCardThree";
+
+export default PricingCardThree;