"use client"; import { Children } from "react"; import { CardStackProps } from "./types"; import GridLayout from "./layouts/grid/GridLayout"; import AutoCarousel from "./layouts/carousels/AutoCarousel"; import ButtonCarousel from "./layouts/carousels/ButtonCarousel"; import { gridConfigs } from "./layouts/grid/gridConfigs"; const CardStack = ({ children, mode = "buttons", gridVariant = "uniform-all-items-equal", uniformGridCustomHeightClasses, gridRowsClassName, itemHeightClassesOverride, animationType, supports3DAnimation = false, title, titleSegments, description, tag, tagIcon, tagAnimation, buttons, buttonAnimation, textboxLayout = "default", useInvertedBackground, carouselThreshold = 5, bottomContent, className = "", containerClassName = "", gridClassName = "", carouselClassName = "", carouselItemClassName = "", controlsClassName = "", textBoxClassName = "", titleClassName = "", titleImageWrapperClassName = "", titleImageClassName = "", descriptionClassName = "", tagClassName = "", buttonContainerClassName = "", buttonClassName = "", buttonTextClassName = "", ariaLabel = "Card stack", }: CardStackProps) => { const childrenArray = Children.toArray(children); const itemCount = childrenArray.length; // Check if the current grid config has gridRows defined const gridConfig = gridConfigs[gridVariant]?.[itemCount]; const hasFixedGridRows = gridConfig && 'gridRows' in gridConfig && gridConfig.gridRows; // If grid has fixed row heights and we have uniformGridCustomHeightClasses, // we need to use min-h-0 on md+ to prevent conflicts let adjustedHeightClasses = uniformGridCustomHeightClasses; if (hasFixedGridRows && uniformGridCustomHeightClasses) { // Extract the mobile min-height and add md:min-h-0 const mobileMinHeight = uniformGridCustomHeightClasses.split(' ')[0]; adjustedHeightClasses = `${mobileMinHeight} md:min-h-0`; } // Use grid for items below threshold, carousel for items at or above threshold const useCarousel = itemCount >= carouselThreshold; // Grid layout for 1-4 items if (!useCarousel) { return ( {childrenArray} ); } // Auto-scroll carousel for 5+ items if (mode === "auto") { // Convert depth-3d to scale-rotate for carousel (doesn't support 3D) const carouselAnimationType = animationType === "depth-3d" ? "scale-rotate" : animationType; return ( {childrenArray} ); } // Button-controlled carousel for 5+ items // Convert depth-3d to scale-rotate for carousel (doesn't support 3D) const carouselAnimationType = animationType === "depth-3d" ? "scale-rotate" : animationType; return ( {childrenArray} ); }; export default CardStack;