"use client"; import { memo, Children } from "react"; import CardStackTextBox from "@/components/cardStack/CardStackTextBox"; import { useCardAnimation } from "@/components/cardStack/hooks/useCardAnimation"; import { cls } from "@/lib/utils"; import type { LucideIcon } from "lucide-react"; import type { ButtonConfig, CardAnimationType, TitleSegment } from "@/components/cardStack/types"; import type { TextboxLayout, InvertedBackground } from "@/providers/themeProvider/config/constants"; interface CardListProps { children: React.ReactNode; animationType: CardAnimationType; useUncappedRounding?: boolean; title?: string; titleSegments?: TitleSegment[]; description?: string; tag?: string; tagIcon?: LucideIcon; buttons?: ButtonConfig[]; textboxLayout: TextboxLayout; useInvertedBackground?: InvertedBackground; disableCardWrapper?: boolean; ariaLabel?: string; className?: string; containerClassName?: string; cardClassName?: string; textBoxClassName?: string; titleClassName?: string; titleImageWrapperClassName?: string; titleImageClassName?: string; descriptionClassName?: string; tagClassName?: string; buttonContainerClassName?: string; buttonClassName?: string; buttonTextClassName?: string; } const CardList = ({ children, animationType, useUncappedRounding = false, title, titleSegments, description, tag, tagIcon, buttons, textboxLayout, useInvertedBackground, disableCardWrapper = false, ariaLabel = "Card list", className = "", containerClassName = "", cardClassName = "", textBoxClassName = "", titleClassName = "", titleImageWrapperClassName = "", titleImageClassName = "", descriptionClassName = "", tagClassName = "", buttonContainerClassName = "", buttonClassName = "", buttonTextClassName = "", }: CardListProps) => { const childrenArray = Children.toArray(children); const { itemRefs } = useCardAnimation({ animationType, itemCount: childrenArray.length }); return (
{childrenArray.map((child, index) => (
{ itemRefs.current[index] = el; }} className={cls(!disableCardWrapper && "card", !disableCardWrapper && (useUncappedRounding ? "rounded-theme" : "rounded-theme-capped"), cardClassName)} > {child}
))}
); }; CardList.displayName = "CardList"; export default memo(CardList);