Data-aware container. Same layout as Container — one DOM element, no extra wrapper — but repeats its children per item from a connector (Stripe products, customer orders, nested item arrays). Children act as a template with {{item.*}} variables.
Outer element is the repeat boundary — its className controls layout of the item cards. Inside, reference {{item.title}} / {{item.price.formatted}} / etc. in children. Nested Data (scope) reads from the enclosing item context. Connector bindings attach data-ph-connector-* attrs so app hooks can page/empty-state the list.
3-column responsive grid that repeats per Stripe product.
{
"className": "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-space-md w-full",
"dataSource": {
"provider": "stripe",
"collection": "products",
"filter": {
"demo": "true"
},
"limit": 12,
"refetchOnUrlChange": true,
"bindingKey": "featured"
}
}Stacked order rows for the logged-in site customer.
{
"className": "flex flex-col gap-space-xs w-full",
"dataSource": {
"provider": "customer",
"collection": "orders"
}
}Inside a product card — repeats each image off the parent item.
{
"className": "grid grid-cols-4 gap-space-xs",
"dataSource": {
"scope": "item.images"
}
}Split item.metadata.sizes (e.g. 'S,M,L,XL') into repeated chips.
{
"className": "flex flex-row flex-wrap gap-space-xs",
"dataSource": {
"scope": "item.metadata.sizes",
"splitBy": ","
}
}