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.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..topbar and .navbar being present; if those class names change, height calculation may become inaccurate.{}) by design.