columnsbannerHeight{
"name": "BannerCarousel",
"view": "Default",
"section": "SectionA",
"settings": {
"bannerExtended": true,
"bannerHeight": "Standard",
"columns": "One",
"banners": [
{
"backgroundImage": {
"id": "Image Id",
"galleryId": "Gallery Id",
"link": "https://example.com/sample",
"mediaType": "Image"
},
"backgroundImageMobile": {
"id": "Mobile image Id",
"galleryId": "Mobile gallery Id",
"link": "https://example.com/sample",
"mediaType": "Image"
},
"sets": [
{
"backgroundColor": true,
"alignment": "Left",
"header": "Sample header",
"text": "<p>Sample text</p>\n",
"buttonText": "Sample button text",
"buttonLink": "/sample"
},
...
]
},
...
],
"id": "Component Id",
"section": "SectionA",
"type": "NoirBannerCarousel",
"name": "BannerCarousel",
"configuredInContentApi": true,
"view": "Default",
"displayName": "Sample display name",
"cssClass": "Sample cssClass"
},
"translations": {
"clickToLearnMoreAbout": "Sample translation",
"bannerLink": "Sample translation",
"...": "..."
}
}settings.idcomp-{{ id }}banner-carousel-{{ id }}settings.banners[]banners.length > 0.settings.cssClass(UNDEFINED).settings.bannerExtended (boolean)true renders full width; otherwise it uses container.settings.columns (string)OneTwo, Three, Four, TwoThirdOneThird, OneThirdTwoThird.settings.bannerHeight (string)StandardSmall, FullHeight.settings.CarouselAutoplay (boolean)true, Swiper autoplays through slides automatically.settings.CarouselAutoplayDelay (number)3000.settings.CarouselPauseOnHover (boolean)true (default), autoplay pauses when the user hovers over the carousel.settings.CarouselNavigation (string enum)'Dots'.Dots, Arrows, Both.settings.Animation (string enum)'None'.None, SlideFade, RiseSlide, ExpandZoom..swiper:not(.swiper-initialized) .swiper-slide rule, with or without an animation, so the area is never blank. The skeleton height follows settings.BannerHeight: 220px for Small (and on mobile), 590px for Standard and the full viewport height for FullHeight from the md breakpoint, via the heightSmall / heightStandard / heightFull class on .carousel-wrap. The slides fade in once Swiper initialises. See ThemeClasses.fetchpriority="high"; the others get loading="lazy". Videos use preload="metadata" on the first slide and preload="none" on the rest, with the slide image as poster.settings.Animation is not None, the section also gets bannerCarousel--anim plus one of bannerCarousel--anim-slideFade, bannerCarousel--anim-riseSlide or bannerCarousel--anim-expandZoom.x-data="bannercarouseldefault.initComponent('{{ id }}', '{{ columns }}', {{ carouselAutoplay }}, {{ carouselAutoplayDelay }}, {{ carouselPauseOnHover }}, '{{ carouselNavigation }}')"initComponent(...) returns the Alpine component state + methods and then boots Swiper.id, columns, navbarHeight, topbarHeight, bannersHeight, isMobile, carouselAutoplay, carouselAutoplayDelay, carouselPauseOnHover, carouselNavigationinit()getBannersHeight(), updateNavbarHeight(), updateTopbarHeight(), swiperInit(id, columns)id and columns are passed as strings from Liquid.getBannersHeight()), wires a resize handler (with a small delay), and then initializes Swiper via swiperInit(this.id, this.columns).bannersHeight differently for desktop vs mobile.window.innerHeight - topbarHeight - navbarHeight. On mobile it uses "auto"..navbar height and stores it in navbarHeight.document.querySelector(".navbar")this.navbarHeight = navbar.offsetHeight.topbar height and stores it in topbarHeight.document.querySelector(".topbar")this.topbarHeight = topbar.offsetHeightSwiper instance on #banner-carousel-<id> with rules based on columns, a "Small height" mode, and the carousel navigation/autoplay settings.columns, resolves the carousel DOM (container + pagination), decides whether looping is enabled based on slide count, and creates the Swiper instance.carouselNavigation controls which UI elements are shown: 'Dots' enables pagination only, 'Arrows' enables prev/next buttons only, 'Both' enables both.carouselAutoplay enables automatic slide advancement; carouselAutoplayDelay (default 3000 ms) sets the interval; carouselPauseOnHover (default true) pauses autoplay on hover.init callback:bannerCarousel--loading from the section (present only when an animation is configured).bannerCarousel--anim, it then watches the carousel with an IntersectionObserver. When 30% of it (or 30% of the viewport height) is visible, the slides in view get is-animated and is-animating..topbar and .navbar being present; if those class names change, height calculation may become inaccurate.{}) by design.