ProductCardContainer

Source: apps/jti-next/src/components/ProductCardContainer/
Builder.io registration: name "ProductCardContainer", canHaveChildren: true, noWrap: true

A Builder.io container that holds one or more ProductCard children, managing shared dynamic product data and rendering either a static grid or a Swiper carousel.

App-level Builder.io inputs

Input Type Default Description
title string Section heading
ctaLabel string Label for the "see all" CTA
ctaHref string URL for the "see all" CTA
isTrial boolean false Route product data requests through the trial Magento store
isCarousel boolean false Render children as a Swiper carousel
desktopItemCount 1–4 3 Visible slides on desktop (carousel only)
tabletItemCount 1–3 2 Visible slides on tablet (carousel only)
isOverflowEnabled boolean false Allow slides to peek outside the container (carousel only)
isControlHidden boolean false Hide previous/next carousel controls (carousel only)

UI primitive: @jti/ui ProductCardContainer

Source: packages/ui/src/components/ProductCardContainer/ProductCardContainer.tsx
Exported from @jti/ui index: ✅

type ProductCardContainerProps = {
  isCarousel?: boolean;
  isTrial?: boolean;
} & ContainerHeaderProps & CarouselProps;

type ContainerHeaderProps = {
  title?: string;
  ctaLabel?: string;
  ctaHref?: string;
};

type CarouselProps = {
  desktopItemCount?: number;    // default: 3
  tabletItemCount?: number;     // default: 2
  children: ReactNode;
  isOverflowEnabled?: boolean;
  isControlHidden?: boolean;
  isViewportHeight?: boolean;
  isAutoHeight?: boolean;
  slidesPerView?: number;
  withoutSlidesMinHeight?: boolean;
  noBorderRadiusOnMobile?: boolean;
  showLoader?: boolean;
};

Internal behaviour: wraps all children in ProductCardContainerContextProvider to enable batched price/stock lookups; when isCarousel is true renders a Swiper-based Carousel, otherwise renders children in a Row/Column grid.