carousel element
Slides with previous/next buttons and swipe; each child (or each record) is a slide.
Renders
a region with a scroll-snap track, slide groups and controls
Required
Child
elements, or data with item.Native apps
Web, and server-driven native apps
Syntax
carousel element
{ "type": "carousel" }An element lives in a screen's sections, another element's elements, a layout slot or a component root.
Properties
| Property | Type | Description |
|---|---|---|
interval | duration (500ms, 6s…) | durations look like 500ms, 30s, 5m, 1h or 7d |
autoplay | boolean | |
elements | array of element | |
data | object |
|
item | element |
Plus the properties every element accepts: id, className, style, responsive, states, animation, visible, ariaLabel, attributes and more.
Events & actions
Autoplay pauses on hover and focus and is off for visitors who prefer reduced motion.
Example
carousel example
{
"type": "carousel",
"autoplay": true,
"interval": "6s",
"elements": [
{ "type": "image", "source": "/assets/lamp.svg", "alt": "Desk lamp" },
{ "type": "image", "source": "/assets/mug.svg", "alt": "Stoneware mug" }
]
}Expected output
The HTML IWC rendered for the example above (inside the page's content wrapper). Class names such as i807b63fc are generated per element for its scoped CSS.
Rendered HTML
<div class="iwc-page ipage" id="iwc-content">
<div class="iwc-carousel ibe6ef925" data-iwc-carousel data-interval="6s" aria-roledescription="carousel">
<div class="iwc-carousel-track">
<img class="iwc-image ib1ee8769" src="/assets/lamp.svg" alt="Desk lamp" loading="lazy" decoding="async">
<img class="iwc-image if8bc4a8b" src="/assets/mug.svg" alt="Stoneware mug" loading="lazy" decoding="async">
</div>
<button type="button" class="iwc-carousel-nav iwc-carousel-prev" aria-label="Previous slide">
‹
</button>
<button type="button" class="iwc-carousel-nav iwc-carousel-next" aria-label="Next slide">
›
</button>
</div>
</div>Data, conditions & styling
- Conditional rendering:
"visible": {"auth": "signed-in"},{"roles": ["admin"]}or an expression such as"=product.stock > 0". Decided on the server: hidden elements are never sent. - Data binding:
bindtakes text from data (name,user.name,props.title,params.slug,state.cart.count);bindsbinds attributes. Containers become data-driven withdata+item. See data binding. - Styling:
classNamefor your stylesheets,stylefor CSS in JSON,statesfor hover/focus/active,animationfor entrance motion. See the style property reference. - Responsive behaviour:
responsiveapplies CSS at or below a breakpoint ({"mobile": {"padding": "12px"}}); grids also takeresponsiveColumns.