enableSlider = true), orenableSlider = false)/brands/brand/<alias>{
"showAllBrandsButton": false,
"enableSlider": false,
"brands": [
{
"name": "Sample brand name",
"alias": "sample-brand-alias",
"mediaItem": {
"id": "Image Id",
"link": "https://example.com/sample",
"mediaType": "Image"
}
},
...
],
"name": "BrandList",
"view": "Default",
"section": "SectionA",
"settings": {
"showAllBrandsButton": false,
"enableSlider": false,
"brandIds": [],
"id": "Component Id",
"section": "SectionA",
"type": "NoirBrandList",
"name": "BrandList",
"configuredInContentApi": true,
"view": "Default",
"displayName": "",
"cssClass": "(UNDEFINED)"
},
"translations": {
"showAllBrands": "Sample translation",
"clickToLearnMoreAbout": "Sample translation",
"previous": "Sample translation",
"...": "..."
}
}settings.idcomp-{{ id }}brands-carousel-{{ id }}swiper-button-next-{{ id }}, swiper-button-prev-{{ id }}brands[]brands exists and brands.length > 0.settings.cssClass(UNDEFINED).settings.header (string)settings.alignment (string enum)Left (default)CenterRightsettings.enableSlider (boolean)true, Swiper is initialized and next/prev buttons are rendered.settings.showAllBrandsButton (boolean)true, renders a CTA button linking to /brands.settings.brandIds (array)x-init:x-init="brandlistdefault.swiperInit('{{ id }}', {{ enableSlider }})"swiperInit(id, enableSlider)enableSlider is falsy:#brands-carousel-<id>.swiper-slideenableSlider as a boolean from Liquid. If it comes as a string ("true"), it will still be truthy; if you ever suspect type issues, normalize with enableSlider === true..swiper-button-next-<id>.swiper-button-prev-<id>.swiper-pagination-<id>slidesPerView = 2.5slidesPerView = 4.5slidesPerView = 6.5enableLoop = slides.length > slidesPerViewDesktop6.5 (a fractional value). That means practically loop is enabled when slides.length >= 7.Math.floor(slidesPerViewDesktop) or a dedicated integer threshold.slidesPerView is intentional: it gives a “peek” of the next slide and communicates scrollability.loop: enableLoopslidesPerView: 2.5spaceBetween: 40slidesPerGroup: 1centeredSlides: falseobserver: true, observeParents: true (helps when layout changes)lazy: truepagination: false (unless pagination element exists)slidesPerView: 4.5slidesPerGroup: 2navigation: { nextEl, prevEl } only when both existslidesPerView: 6.5slidesPerGroup: 1navigation only when both exist.swiper-pagination-<id> exists, it enables:pagination: { el, clickable: true }new Swiper(carousel, swiperConfig);Swiper exists).observer/observeParents is useful, but if you dynamically replace slides, Swiper may still need manual swiper.update() or destroy/re-init, depending on the change.slidesPerGroup differs (2 on tablet, 1 on desktop). This is usually a UX choice:x-init, not for reactive state)brands[] is empty or missing, the component renders nothing.enableSlider is true but Swiper isn’t loaded, the list will not behave as a slider.mediaItem.link will use the no-image fallback; depending on mode, the brand name may also appear as text in the card.settings.header exists, it prints a title (uppercase).settings.alignment.settings.enableSlider is true, Swiper initialization is triggered via:x-init="brandlistdefault.swiperInit('{{ id }}', {{ enableSlider }})"previous, next)settings.showAllBrandsButton is true:/brandstranslations.showAllBrands