{"version":3,"sources":["modules.carousel.js"],"names":["app","carousel","items","section","viewport","querySelector","prevBtn","nextBtn","querySelectorAll","let","startIndex","align","dataset","containScroll","parseInt","EmblaCarousel","inViewThreshold","breakpoints","(min-width: 992px)","draggable","on","event","embla","onSelect","onSettle","onReInit","initHeroCarousel","init","document","initGeneric","forEach","dots","pageUrl","window","pathname","reInit","scrollTo","loop","initDots","dotsArray","dot","slide","generateDots","util","debounce","index","dataLayer","pushEvent","location","selectDot","onInit","initTabsCarousel","stopOnInteraction","stopOnMouseEnter","delay","buttons","emblaRoot","parentElement","classList","autoPlay","updateButtons","slideIndex","target","add","button","id","buttonHandler","preventDefault","contains","remove","removeEventListener","destroy","setTimeout","selectedScrollSnap","options","addEventListener","removeAttribute"],"mappings":"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","file":"../modules.carousel.min.js","sourcesContent":["/* ========================================================================\n Carousels\n ========================================================================== */\n\napp.carousel = (function () {\n 'use strict';\n\n function init() {\n document.querySelectorAll('[data-carousel]').forEach((section) => {\n initGeneric(section);\n });\n\n document.querySelectorAll('[data-hero-carousel]').forEach((section) => {\n initHeroCarousel(section);\n });\n\n document.querySelectorAll('[data-logo-carousel]').forEach((section) => {\n initLogoCarousel(section);\n });\n\n document.querySelectorAll('[data-tabs-carousel]').forEach((section) => {\n initTabsCarousel(section);\n });\n }\n\n function initGeneric(section) {\n const viewport = section.querySelector('[data-carousel-viewport]');\n const prevBtn = section.querySelector('[data-carousel-prev]');\n const nextBtn = section.querySelector('[data-carousel-next]');\n const items = section.querySelectorAll('[data-carousel-item]');\n\n //\n // Init carousel\n //\n\n let startIndex = 0;\n\n if (viewport.dataset.startIndex) {\n startIndex = parseInt(viewport.dataset.startIndex);\n }\n\n const carousel = new EmblaCarousel(viewport, {\n inViewThreshold: 0.1,\n align: 'start',\n containScroll: 'trimSnaps',\n startIndex: startIndex,\n breakpoints: {\n '(min-width: 992px)': { draggable: false },\n },\n });\n\n //\n // Event listeners\n //\n\n carousel.on('init', (event) => {\n app.embla.onInit(prevBtn, nextBtn, viewport, carousel);\n });\n\n carousel.on('reInit', (event) => {\n app.embla.onReInit(prevBtn, nextBtn, carousel);\n });\n\n carousel.on('select', (event) => {\n app.embla.onSelect(prevBtn, nextBtn, carousel);\n });\n\n carousel.on('settle', (event) => {\n app.embla.onSettle(carousel);\n });\n }\n\n function initHeroCarousel(section) {\n const viewport = section.querySelector('[data-carousel-viewport]');\n const dots = section.querySelector('[data-carousel-dots]');\n const items = section.querySelectorAll('[data-carousel-item]');\n\n //\n // Init carousel\n //\n\n let startIndex = 0;\n\n if (viewport.dataset.startIndex) {\n startIndex = parseInt(viewport.dataset.startIndex);\n }\n\n const emblaOptions = {\n inViewThreshold: 0.1,\n align: 'start',\n containScroll: 'trimSnaps',\n loop: false,\n breakpoints: {\n '(min-width: 992px)': { draggable: false },\n },\n };\n\n const carousel = new EmblaCarousel(viewport, emblaOptions);\n const dotsArray = app.embla.generateDots(dots, carousel);\n\n const reInit = util.debounce(() => {\n carousel.scrollTo(0, true);\n });\n\n app.embla.initDots(dotsArray, carousel);\n\n dotsArray.forEach((dot, index) => {\n dot.addEventListener('click', () => {\n // DATALAYER\n app.dataLayer.pushEvent('heroCarouselPager', {\n pageUrl: window.location.pathname,\n slide: index + 1,\n });\n });\n });\n\n //\n // Event listeners\n //\n\n carousel.on('init', (event) => {\n app.embla.onInit(null, null, viewport, carousel);\n app.embla.selectDot(dotsArray, carousel);\n });\n\n carousel.on('reInit', (event) => {\n app.embla.onReInit(null, null, carousel);\n app.embla.selectDot(dotsArray, carousel);\n reInit();\n });\n\n carousel.on('select', (event) => {\n app.embla.onSelect(null, null, carousel);\n app.embla.selectDot(dotsArray, carousel);\n });\n\n carousel.on('settle', (event) => {\n app.embla.onSettle(carousel);\n });\n }\n\n function initLogoCarousel(section) {\n const viewport = section.querySelector('[data-carousel-viewport]');\n const items = section.querySelectorAll('[data-carousel-item]');\n\n //\n // Init carousels\n //\n\n const emblaOptions = {\n inViewThreshold: 0.1,\n align: 'start',\n containScroll: 'trimSnaps',\n loop: true,\n breakpoints: {\n '(min-width: 992px)': { draggable: false },\n },\n };\n\n const autoPlay = EmblaAutoplay(\n { delay: 3000, stopOnInteraction: false, stopOnMouseEnter: true },\n (emblaRoot) => emblaRoot.parentElement\n );\n\n const carousel = new EmblaCarousel(viewport, emblaOptions, [autoPlay]);\n\n //\n // Event listeners\n //\n\n carousel.on('init', (event) => {\n viewport.classList.add('is-initialized');\n });\n }\n\n function initTabsCarousel(section) {\n const viewport = section.querySelector('[data-carousel-viewport]');\n const prevBtn = section.querySelector('[data-carousel-prev]');\n const nextBtn = section.querySelector('[data-carousel-next]');\n const buttons = document.querySelectorAll('[data-tab-button=\"' + section.id + '\"]');\n\n //\n // Init carousel\n //\n\n let startIndex = 0;\n\n const buttonHandler = function (event) {\n event.preventDefault();\n\n if (event.target.classList.contains('is-selected')) return;\n\n const slideIndex = parseInt(event.target.dataset.slideIndex);\n updateButtons(slideIndex);\n\n event.target.classList.add('is-selected');\n carousel.scrollTo(slideIndex);\n };\n\n const updateButtons = function (slideIndex) {\n buttons.forEach((button) => {\n if (button.dataset.slideIndex == slideIndex) {\n button.classList.add('is-selected');\n } else {\n button.classList.remove('is-selected');\n }\n });\n };\n\n if (viewport.dataset.startIndex) {\n startIndex = parseInt(viewport.dataset.startIndex);\n }\n\n const options = {\n inViewThreshold: 0.1,\n align: 'start',\n containScroll: 'trimSnaps',\n startIndex: startIndex,\n breakpoints: {\n '(min-width: 768px)': { draggable: false },\n },\n };\n\n let carousel = new EmblaCarousel(viewport, options);\n\n //\n // Event listeners\n //\n\n carousel.on('init', (event) => {\n app.embla.onInit(prevBtn, nextBtn, viewport, carousel);\n });\n\n carousel.on('reInit', (event) => {\n buttons.forEach((button) => {\n button.removeEventListener('click', buttonHandler);\n });\n\n section.removeAttribute('data-overflow');\n section.removeAttribute('data-initialized');\n\n carousel.destroy();\n\n setTimeout(() => {\n initTabsCarousel(section);\n }, 100);\n });\n\n carousel.on('select', (event) => {\n updateButtons(carousel.selectedScrollSnap());\n app.embla.onSelect(prevBtn, nextBtn, carousel);\n });\n\n carousel.on('settle', (event) => {\n app.embla.onSettle(carousel);\n });\n\n //\n // Handle buttons\n //\n\n buttons.forEach((button) => {\n button.addEventListener('click', buttonHandler);\n });\n }\n\n // Expose public functions and variables\n return {\n init: init,\n initGeneric: initGeneric,\n };\n})();\n"]}