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/uiindex: ✅
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.