"use client";
import HeaderLockup from "../../type/HeaderLockup";
import Card from "../../cards/Card";
import type { CardStackViewProps } from "./CardStack.types";
export function CardStackView({
cards,
selectedIds,
onCardSelect,
expanded,
onToggleExpand,
hasMore,
toggleLabel,
showLessLabel,
title,
description,
layout,
compactRecommendedLimit,
compactDesktopLayout,
headerLockupSize,
toggleAlignment,
className,
}: CardStackViewProps) {
const lockupSize = headerLockupSize ?? "L";
const isSelected = (id: string) => selectedIds.includes(id);
// Compact: recommended only (default up to 5). Expanded: all cards.
const compactCards = cards
.filter((c) => c.recommended ?? false)
.slice(0, compactRecommendedLimit);
// Single stack: always one column; expand reveals more in same stack (scrollable)
if (layout === "singleStack") {
const displayedCards = expanded ? cards : compactCards;
return (
{title || description ? (
) : null}
{expanded ? (
{cards.map((item) => (
onCardSelect(item.id)}
/>
))}
) : compactDesktopLayout === "pyramidFive" ? (
<>
{compactCards.map((item) => (
onCardSelect(item.id)}
/>
))}
{/*
lg+: fixed 3 + 2 rows (no flex-wrap on the top row — avoids 2+1+2 when the first row wraps).
md–lg: same shell as the 3-card step — each row is `flex justify-center gap-2` so cards
stay a tight cluster with gap-2 until lg expands to the 3+2 pyramid.
*/}
{compactCards.slice(0, 3).map((item) => (
onCardSelect(item.id)}
/>
))}
{compactCards.length > 3 ? (
{compactCards
.slice(3, compactRecommendedLimit)
.map((item) => (
onCardSelect(item.id)}
/>
))}
) : null}
{compactCards.slice(0, 2).map((item) => (
onCardSelect(item.id)}
/>
))}
{compactCards.slice(2, 4).map((item) => (
onCardSelect(item.id)}
/>
))}
{compactCards[4] ? (
onCardSelect(compactCards[4].id)}
/>
) : null}
>
) : compactDesktopLayout === "flexWrap" ? (
<>
{compactCards.map((item) => (
onCardSelect(item.id)}
/>
))}
{/* md–lg: pyramid (2 + 1), each row centered; lg+: one centered row (not edge-to-edge in a 2-col grid) */}
{compactCards.length === 3 ? (
<>
{compactCards.slice(0, 2).map((item) => (
onCardSelect(item.id)}
/>
))}
onCardSelect(compactCards[2].id)}
/>
{compactCards.map((item) => (
onCardSelect(item.id)}
/>
))}
>
) : (
{compactCards.map((item) => (
onCardSelect(item.id)}
/>
))}
)}
>
) : (
<>
{/* Compact under 640: single column, up to 5 recommended cards */}
{compactCards.map((item) => (
onCardSelect(item.id)}
/>
))}
{/* Compact 640+: 6-col grid so each card spans 2; second row centered (cols 2–3 and 4–5) */}
{compactCards.map((item, index) => {
const colClass =
index <= 2
? "md:col-span-2"
: index === 3 && compactCards.length === 4
? "md:col-start-3 md:col-span-2"
: index === 3
? "md:col-start-2 md:col-span-2"
: "md:col-start-4 md:col-span-2";
return (
onCardSelect(item.id)}
/>
);
})}
>
)}
{hasMore ? (
{expanded ? showLessLabel : toggleLabel}
) : null}
);
}