diff --git a/src/components/sections/feature/FeatureCardTen.tsx b/src/components/sections/feature/FeatureCardTen.tsx
index 319e348..aa540ff 100644
--- a/src/components/sections/feature/FeatureCardTen.tsx
+++ b/src/components/sections/feature/FeatureCardTen.tsx
@@ -1,10 +1,263 @@
-import React from 'react';
-import { TimelineProcessFlow } from '../../cardStack/layouts/timelines/TimelineProcessFlow';
+"use client";
-export function FeatureCardTen() {
- return (
-
-
-
- );
+import React, { memo, useMemo } from "react";
+import TimelineProcessFlow from "@/components/cardStack/layouts/timelines/TimelineProcessFlow";
+import MediaContent from "@/components/shared/MediaContent";
+import { cls, shouldUseInvertedText } from "@/lib/utils";
+import { useTheme } from "@/providers/themeProvider/ThemeProvider";
+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 FeatureMedia = {
+ imageAlt?: string;
+ videoAriaLabel?: string;
+} & (
+ | { imageSrc: string; videoSrc?: never }
+ | { videoSrc: string; imageSrc?: never }
+ );
+
+interface FeatureListItem {
+ icon: LucideIcon;
+ text: string;
}
+
+interface FeatureCard {
+ id: string;
+ title: string;
+ description: string;
+ media: FeatureMedia;
+ items: FeatureListItem[];
+ reverse: boolean;
+}
+
+interface FeatureCardTenProps {
+ features: FeatureCard[];
+ title: string;
+ titleSegments?: TitleSegment[];
+ description: string;
+ tag?: string;
+ tagIcon?: LucideIcon;
+ tagAnimation?: ButtonAnimationType;
+ buttons?: ButtonConfig[];
+ buttonAnimation?: ButtonAnimationType;
+ textboxLayout: TextboxLayout;
+ animationType: CardAnimationType;
+ useInvertedBackground: InvertedBackground;
+ ariaLabel?: string;
+ className?: string;
+ containerClassName?: string;
+ textBoxClassName?: string;
+ textBoxTitleClassName?: string;
+ textBoxDescriptionClassName?: string;
+ textBoxTagClassName?: string;
+ textBoxButtonContainerClassName?: string;
+ textBoxButtonClassName?: string;
+ textBoxButtonTextClassName?: string;
+ titleImageWrapperClassName?: string;
+ titleImageClassName?: string;
+ itemClassName?: string;
+ mediaWrapperClassName?: string;
+ mediaCardClassName?: string;
+ numberClassName?: string;
+ contentWrapperClassName?: string;
+ featureTitleClassName?: string;
+ featureDescriptionClassName?: string;
+ listItemClassName?: string;
+ iconContainerClassName?: string;
+ iconClassName?: string;
+ gapClassName?: string;
+}
+
+interface FeatureMediaProps {
+ media: FeatureMedia;
+ title: string;
+ mediaCardClassName: string;
+}
+
+const FeatureMedia = ({
+ media,
+ title,
+ mediaCardClassName,
+}: FeatureMediaProps) => (
+
+
+
+);
+
+interface FeatureContentProps {
+ feature: FeatureCard;
+ useInvertedBackground: InvertedBackground;
+ shouldUseLightText: boolean;
+ featureTitleClassName: string;
+ featureDescriptionClassName: string;
+ listItemClassName: string;
+ iconContainerClassName: string;
+ iconClassName: string;
+}
+
+const FeatureContent = ({
+ feature,
+ useInvertedBackground,
+ shouldUseLightText,
+ featureTitleClassName,
+ featureDescriptionClassName,
+ listItemClassName,
+ iconContainerClassName,
+ iconClassName,
+}: FeatureContentProps) => (
+
+
+ {feature.title}
+
+
+ {feature.description}
+
+
+ {feature.items.map((listItem, listIndex) => {
+ const Icon = listItem.icon;
+ return (
+ -
+
+
+
+
+ {listItem.text}
+
+
+ );
+ })}
+
+
+);
+
+const FeatureCardTen = ({
+ features,
+ title,
+ titleSegments,
+ description,
+ tag,
+ tagIcon,
+ tagAnimation,
+ buttons,
+ buttonAnimation,
+ textboxLayout,
+ animationType,
+ useInvertedBackground,
+ ariaLabel = "Feature section",
+ className = "",
+ containerClassName = "",
+ textBoxClassName = "",
+ textBoxTitleClassName = "",
+ textBoxDescriptionClassName = "",
+ textBoxTagClassName = "",
+ textBoxButtonContainerClassName = "",
+ textBoxButtonClassName = "",
+ textBoxButtonTextClassName = "",
+ titleImageWrapperClassName = "",
+ titleImageClassName = "",
+ itemClassName = "",
+ mediaWrapperClassName = "",
+ mediaCardClassName = "",
+ numberClassName = "",
+ contentWrapperClassName = "",
+ featureTitleClassName = "",
+ featureDescriptionClassName = "",
+ listItemClassName = "",
+ iconContainerClassName = "",
+ iconClassName = "",
+ gapClassName = "",
+}: FeatureCardTenProps) => {
+ const theme = useTheme();
+ const shouldUseLightText = shouldUseInvertedText(useInvertedBackground, theme.cardStyle);
+
+ const timelineItems = useMemo(
+ () =>
+ features.map((feature) => ({
+ id: feature.id,
+ reverse: feature.reverse,
+ media: (
+
+ ),
+ content: (
+
+ ),
+ })),
+ [
+ features,
+ useInvertedBackground,
+ shouldUseLightText,
+ mediaCardClassName,
+ featureTitleClassName,
+ featureDescriptionClassName,
+ listItemClassName,
+ iconContainerClassName,
+ iconClassName,
+ ]
+ );
+
+ return (
+
+ );
+};
+
+FeatureCardTen.displayName = "FeatureCardTen";
+
+export default memo(FeatureCardTen);
\ No newline at end of file