"use client"; import { memo } from "react"; import { cls, shouldUseInvertedText } from "@/lib/utils"; import { useTheme } from "@/providers/themeProvider/ThemeProvider"; import type { LucideIcon } from "lucide-react"; import type { InvertedBackground } from "@/providers/themeProvider/config/constants"; interface StackCardProps { Icon: LucideIcon; title: string; subtitle: string; detail: string; iconClassName?: string; titleClassName?: string; subtitleClassName?: string; detailClassName?: string; } interface Bento3DStackCardProps extends StackCardProps { className?: string; useInvertedBackground: InvertedBackground; } const StackCard = memo(({ className = "", Icon, title, subtitle, detail, iconClassName = "", titleClassName = "", subtitleClassName = "", detailClassName = "", useInvertedBackground, }: Bento3DStackCardProps) => { const theme = useTheme(); const shouldUseLightText = shouldUseInvertedText(useInvertedBackground, theme.cardStyle); return (

{title}

{subtitle}

{detail}

); }); StackCard.displayName = "StackCard"; interface Bento3DStackCardsProps { cards: StackCardProps[]; useInvertedBackground: InvertedBackground; className?: string; } const Bento3DStackCards = ({ cards, useInvertedBackground, className = "", }: Bento3DStackCardsProps) => { const baseClassNames = [ "[grid-area:stack] -translate-y-14 hover:-translate-y-20", "[grid-area:stack] translate-x-15 translate-y-0 hover:-translate-y-5", "[grid-area:stack] translate-x-31 translate-y-15 hover:translate-y-10", ]; const displayCards = cards.slice(0, 3).map((card, index) => ({ ...card, className: `${baseClassNames[index]} ${card.iconClassName || ""}`, })); return (
{displayCards.map((cardProps, index) => ( ))}
); }; Bento3DStackCards.displayName = "Bento3DStackCards"; export default memo(Bento3DStackCards);