diff --git a/src/components/sections/blog/BlogCardTwo.tsx b/src/components/sections/blog/BlogCardTwo.tsx
index dbf7600..c0b3f30 100644
--- a/src/components/sections/blog/BlogCardTwo.tsx
+++ b/src/components/sections/blog/BlogCardTwo.tsx
@@ -1,11 +1,241 @@
-import { useCardAnimation } from '@/components/cardStack/CardStack';
+"use client";
-export function BlogCardTwo() {
- const { animate } = useCardAnimation();
+import { memo } from "react";
+import Image from "next/image";
+import CardStack from "@/components/cardStack/CardStack";
+import Badge from "@/components/shared/Badge";
+import OverlayArrowButton from "@/components/shared/OverlayArrowButton";
+import { cls, shouldUseInvertedText } from "@/lib/utils";
+import { useTheme } from "@/providers/themeProvider/ThemeProvider";
+import type { BlogPost } from "@/lib/api/blog";
+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 BlogCard = Omit & {
+ category: string | string[];
+};
+
+interface BlogCardTwoProps {
+ blogs: BlogCard[];
+ 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;
+ imageWrapperClassName?: string;
+ imageClassName?: string;
+ authorAvatarClassName?: string;
+ authorDateClassName?: string;
+ cardTitleClassName?: string;
+ excerptClassName?: string;
+ categoryClassName?: string;
+ textBoxTitleClassName?: string;
+ textBoxTitleImageWrapperClassName?: string;
+ textBoxTitleImageClassName?: string;
+ textBoxDescriptionClassName?: string;
+ gridClassName?: string;
+ carouselClassName?: string;
+ controlsClassName?: string;
+ textBoxClassName?: string;
+ textBoxTagClassName?: string;
+ textBoxButtonContainerClassName?: string;
+ textBoxButtonClassName?: string;
+ textBoxButtonTextClassName?: string;
}
+
+interface BlogCardItemProps {
+ blog: BlogCard;
+ shouldUseLightText: boolean;
+ cardClassName?: string;
+ imageWrapperClassName?: string;
+ imageClassName?: string;
+ authorAvatarClassName?: string;
+ authorDateClassName?: string;
+ cardTitleClassName?: string;
+ excerptClassName?: string;
+ categoryClassName?: string;
+}
+
+const BlogCardItem = memo(({
+ blog,
+ shouldUseLightText,
+ cardClassName = "",
+ imageWrapperClassName = "",
+ imageClassName = "",
+ authorAvatarClassName = "",
+ authorDateClassName = "",
+ cardTitleClassName = "",
+ excerptClassName = "",
+ categoryClassName = "",
+}: BlogCardItemProps) => {
+ return (
+
+
+
+
+
+
+
+
+
+ {blog.authorAvatar && (
+
+ )}
+
+ {blog.authorName} • {blog.date}
+
+
+
+
+ {blog.title}
+
+
+
+ {blog.excerpt}
+
+
+
+
+ {Array.isArray(blog.category) ? (
+ blog.category.map((cat, index) => (
+
+ ))
+ ) : (
+
+ )}
+
+
+
+ );
+});
+
+BlogCardItem.displayName = "BlogCardItem";
+
+const BlogCardTwo = ({
+ blogs = [],
+ carouselMode = "buttons",
+ uniformGridCustomHeightClasses,
+ animationType,
+ title,
+ titleSegments,
+ description,
+ tag,
+ tagIcon,
+ tagAnimation,
+ buttons,
+ buttonAnimation,
+ textboxLayout,
+ useInvertedBackground,
+ ariaLabel = "Blog section",
+ className = "",
+ containerClassName = "",
+ cardClassName = "",
+ imageWrapperClassName = "",
+ imageClassName = "",
+ authorAvatarClassName = "",
+ authorDateClassName = "",
+ cardTitleClassName = "",
+ excerptClassName = "",
+ categoryClassName = "",
+ textBoxTitleClassName = "",
+ textBoxTitleImageWrapperClassName = "",
+ textBoxTitleImageClassName = "",
+ textBoxDescriptionClassName = "",
+ gridClassName = "",
+ carouselClassName = "",
+ controlsClassName = "",
+ textBoxClassName = "",
+ textBoxTagClassName = "",
+ textBoxButtonContainerClassName = "",
+ textBoxButtonClassName = "",
+ textBoxButtonTextClassName = "",
+}: BlogCardTwoProps) => {
+ const theme = useTheme();
+ const shouldUseLightText = shouldUseInvertedText(useInvertedBackground, theme.cardStyle);
+
+ return (
+
+ {blogs.map((blog) => (
+
+ ))}
+
+ );
+};
+
+BlogCardTwo.displayName = "BlogCardTwo";
+
+export default BlogCardTwo;