/categories/<path>/<alias>{
"description": null,
"showAllCategoriesButton": null,
"enableSlider": null,
"categories": [
{
"title": "Sample category title",
"alias": "sample-category-alias",
"path": "category",
"mediaItem": {
"id": "Image Id",
"link": "https://example.com/sample",
"mediaType": "Image"
}
},
...
],
"name": "CategoriesList",
"view": "Default",
"section": "SectionA",
"settings": {
"categoryIds": [],
"id": "Component Id",
"section": "SectionA",
"type": "NoirCategoriesList",
"name": "CategoriesList",
"configuredInContentApi": true,
"view": "Default",
"displayName": "Sample display name",
"cssClass": "(UNDEFINED)",
"header": "Sample header",
"alignment": "Left"
},
"translations": {
"showAllCategories": "Sample translation",
"clickToLearnMoreAbout": "Sample translation"
}
}settings.idcomp-{{ id }}categories-carousel-{{ id }}swiper-pagination-{{ id }} (when slider is enabled)categories[]categories exists and categories.length > 0.settings.cssClass(UNDEFINED).settings.header (string)settings.description (string)settings.alignment (string enum)Left (default)CenterRightsettings.enableSlider (boolean)settings.showAllCategoriesButton (boolean)/categories.settings.categoryIds (array)x-init:x-init="categorieslistdefault.swiperInit('{{ id }}', {{ enableSlider }})"swiperInit(id, enableSlider)enableSlider is falsy:#categories-carousel-<id>enableSlider as a boolean. If it ever becomes a string (e.g. "false"), it will be truthy—so if you suspect data-type issues, normalize it before using it..swiper-pagination-<id>pagination.el.paginationEl will be null and Swiper pagination can break or behave unexpectedly.pagination: paginationEl ? { el: paginationEl, clickable: true } : falseloop: falseslidesPerView: 1spaceBetween: 24slidesPerGroup: 1grid: { rows: 1, fill: "row" }pagination: { el: paginationEl, clickable: true }slidesPerView: 2slidesPerGroup: 2spaceBetween: 0grid: { rows: 2 }slidesPerView: 4slidesPerGroup: 4spaceBetween: 24grid: { rows: 2 }new Swiper(carousel, swiperConfig);.swiper-slide is treated as one grid cell).loop is intentionally disabled. Loop + grid typically creates confusing UX and can be buggy unless heavily tuned.spaceBetween consistent or set it to 0 to avoid double spacing.new Swiper(...) will throw.x-init, not for reactive state)enableSlider = false, the list is rendered without Swiper behavior.enableSlider = true, the carousel won’t behave as intended.Root.Page.Breadcrumbs[2].label when present; this is useful for category pages but can surprise you if breadcrumb structure changes.path being correct (category vs categories), since the template builds URLs directly from it.Root.Page.Breadcrumbs[2].labelRoot.Page.Breadcrumbs[2].label (if present)settings.header (if present)enableSlider is true, Swiper is initialized via:x-init="categorieslistdefault.swiperInit('{{ id }}', {{ enableSlider }})"enableSlider is false, no Swiper is created./<path>/<alias>aria-label based on translations + titleshowAllCategoriesButton is true:/categoriestranslations.showAllCategories