{"version":3,"file":"main.min.js","sources":["../../../../../../../Frontend/src/js/utils/scroll.js","../../../../../../../Frontend/src/js/components/header.js","../../../../../../../Frontend/src/js/utils/windowResize.js","../../../../../../../Frontend/src/js/components/product-inspiraton.js","../../../../../../../Frontend/src/js/utils/helpers.js","../../../../../../../Frontend/src/js/components/canvas.js","../../../../../../../Frontend/src/js/utils/orientationChange.js","../../../../../../../Frontend/src/js/components/usps.js","../../../../../../../Frontend/src/js/utils/onReady.js","../../../../../../../Frontend/src/js/utils/elementProperties.js","../../../../../../../Frontend/src/js/utils/scrollLock.js","../../../../../../../Frontend/src/js/components/search.js","../../../../../../../Frontend/src/js/components/navigation.js","../../../../../../../Frontend/src/js/components/calculator.js","../../../../../../../Frontend/src/js/components/inspiraton-filter.js","../../../../../../../Frontend/src/js/utils/animation.js","../../../../../../../Frontend/src/js/components/accordion.js","../../../../../../../Frontend/src/js/components/news-filter.js","../../../../../../../Frontend/src/js/components/gallery.js","../../../../../../../Frontend/src/js/components/filter.js","../../../../../../../Frontend/src/js/components/delivery-dates.js","../../../../../../../Frontend/src/js/components/map.js","../../../../../../../Frontend/src/js/components/tabs.js","../../../../../../../Frontend/node_modules/ssr-window/ssr-window.esm.js","../../../../../../../Frontend/node_modules/dom7/dom7.esm.js","../../../../../../../Frontend/node_modules/swiper/shared/dom.js","../../../../../../../Frontend/node_modules/swiper/shared/utils.js","../../../../../../../Frontend/node_modules/swiper/shared/get-support.js","../../../../../../../Frontend/node_modules/swiper/shared/get-device.js","../../../../../../../Frontend/node_modules/swiper/shared/get-browser.js","../../../../../../../Frontend/node_modules/swiper/core/transition/transitionEmit.js","../../../../../../../Frontend/node_modules/swiper/core/events/onTouchStart.js","../../../../../../../Frontend/node_modules/swiper/core/events/onResize.js","../../../../../../../Frontend/node_modules/swiper/core/events/index.js","../../../../../../../Frontend/node_modules/swiper/core/breakpoints/setBreakpoint.js","../../../../../../../Frontend/node_modules/swiper/core/defaults.js","../../../../../../../Frontend/node_modules/swiper/core/core.js","../../../../../../../Frontend/node_modules/swiper/core/events-emitter.js","../../../../../../../Frontend/node_modules/swiper/core/update/index.js","../../../../../../../Frontend/node_modules/swiper/core/update/updateSize.js","../../../../../../../Frontend/node_modules/swiper/core/update/updateSlides.js","../../../../../../../Frontend/node_modules/swiper/core/update/updateAutoHeight.js","../../../../../../../Frontend/node_modules/swiper/core/update/updateSlidesOffset.js","../../../../../../../Frontend/node_modules/swiper/core/update/updateSlidesProgress.js","../../../../../../../Frontend/node_modules/swiper/core/update/updateProgress.js","../../../../../../../Frontend/node_modules/swiper/core/update/updateSlidesClasses.js","../../../../../../../Frontend/node_modules/swiper/core/update/updateActiveIndex.js","../../../../../../../Frontend/node_modules/swiper/core/update/updateClickedSlide.js","../../../../../../../Frontend/node_modules/swiper/core/translate/index.js","../../../../../../../Frontend/node_modules/swiper/core/translate/getTranslate.js","../../../../../../../Frontend/node_modules/swiper/core/translate/setTranslate.js","../../../../../../../Frontend/node_modules/swiper/core/translate/minTranslate.js","../../../../../../../Frontend/node_modules/swiper/core/translate/maxTranslate.js","../../../../../../../Frontend/node_modules/swiper/core/translate/translateTo.js","../../../../../../../Frontend/node_modules/swiper/core/transition/index.js","../../../../../../../Frontend/node_modules/swiper/core/transition/setTransition.js","../../../../../../../Frontend/node_modules/swiper/core/transition/transitionStart.js","../../../../../../../Frontend/node_modules/swiper/core/transition/transitionEnd.js","../../../../../../../Frontend/node_modules/swiper/core/slide/index.js","../../../../../../../Frontend/node_modules/swiper/core/slide/slideTo.js","../../../../../../../Frontend/node_modules/swiper/core/slide/slideToLoop.js","../../../../../../../Frontend/node_modules/swiper/core/slide/slideNext.js","../../../../../../../Frontend/node_modules/swiper/core/slide/slidePrev.js","../../../../../../../Frontend/node_modules/swiper/core/slide/slideReset.js","../../../../../../../Frontend/node_modules/swiper/core/slide/slideToClosest.js","../../../../../../../Frontend/node_modules/swiper/core/slide/slideToClickedSlide.js","../../../../../../../Frontend/node_modules/swiper/core/loop/index.js","../../../../../../../Frontend/node_modules/swiper/core/loop/loopCreate.js","../../../../../../../Frontend/node_modules/swiper/core/loop/loopFix.js","../../../../../../../Frontend/node_modules/swiper/core/loop/loopDestroy.js","../../../../../../../Frontend/node_modules/swiper/core/grab-cursor/index.js","../../../../../../../Frontend/node_modules/swiper/core/grab-cursor/setGrabCursor.js","../../../../../../../Frontend/node_modules/swiper/core/grab-cursor/unsetGrabCursor.js","../../../../../../../Frontend/node_modules/swiper/core/events/onTouchMove.js","../../../../../../../Frontend/node_modules/swiper/core/events/onTouchEnd.js","../../../../../../../Frontend/node_modules/swiper/core/events/onScroll.js","../../../../../../../Frontend/node_modules/swiper/core/events/onClick.js","../../../../../../../Frontend/node_modules/swiper/core/breakpoints/index.js","../../../../../../../Frontend/node_modules/swiper/core/breakpoints/getBreakpoint.js","../../../../../../../Frontend/node_modules/swiper/core/check-overflow/index.js","../../../../../../../Frontend/node_modules/swiper/core/classes/index.js","../../../../../../../Frontend/node_modules/swiper/core/classes/addClasses.js","../../../../../../../Frontend/node_modules/swiper/core/classes/removeClasses.js","../../../../../../../Frontend/node_modules/swiper/core/images/index.js","../../../../../../../Frontend/node_modules/swiper/core/images/loadImage.js","../../../../../../../Frontend/node_modules/swiper/core/images/preloadImages.js","../../../../../../../Frontend/node_modules/swiper/core/moduleExtendParams.js","../../../../../../../Frontend/node_modules/swiper/shared/create-element-if-not-defined.js","../../../../../../../Frontend/node_modules/swiper/modules/navigation/navigation.js","../../../../../../../Frontend/node_modules/swiper/shared/classes-to-selector.js","../../../../../../../Frontend/node_modules/swiper/modules/pagination/pagination.js","../../../../../../../Frontend/node_modules/swiper/core/modules/resize/resize.js","../../../../../../../Frontend/node_modules/swiper/core/modules/observer/observer.js","../../../../../../../Frontend/src/js/components/image-gallery-overlay.js","../../../../../../../Frontend/src/js/components/product-modal.js","../../../../../../../Frontend/src/js/components/intersect.js","../../../../../../../Frontend/src/js/components/counter.js","../../../../../../../Frontend/src/js/components/forms.js","../../../../../../../Frontend/src/js/components/search-select.js","../../../../../../../Frontend/src/js/components/duo-range-slider.js","../../../../../../../Frontend/src/js/components/product-images.js","../../../../../../../Frontend/src/js/components/swiper.js","../../../../../../../Frontend/node_modules/swiper/modules/parallax/parallax.js","../../../../../../../Frontend/src/js/components/product-filters.js","../../../../../../../Frontend/src/js/components/checkout-helpers.js","../../../../../../../Frontend/src/js/components/cart-counter.js","../../../../../../../Frontend/src/js/main.js","../../../../../../../Frontend/src/js/components/toggle-content.js","../../../../../../../Frontend/src/js/utils/moveContent.js","../../../../../../../Frontend/src/js/components/product-floating-bar.js","../../../../../../../Frontend/src/js/components/product-overview.js","../../../../../../../Frontend/src/js/components/image-load.js","../../../../../../../Frontend/src/js/components/parallax-image.js"],"sourcesContent":["export let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\r\n\r\nlet ticking = false;\r\nlet scrollFunctions = [];\r\n\r\nfunction animate() {\r\n scrollFunctions.forEach(funcRef => funcRef());\r\n\r\n ticking = false;\r\n}\r\n\r\nfunction requestTick() {\r\n if (!ticking) {\r\n requestAnimationFrame(animate);\r\n ticking = true;\r\n }\r\n}\r\n\r\nfunction scrollHandler() {\r\n scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\r\n requestTick();\r\n}\r\n/**\r\n * Adds a function to a function array, executed on a single scroll-event set on window.\r\n * This avoids the memory load and possible hickups of setting multiple eventlisteners for the same event.\r\n * Also this optimizes rendering by utilising the requestAnimationFrame for these scroll-events.\r\n *\r\n * @param {Function} handler - function to be called on scroll\r\n * @param {boolean} triggerNow - Should the function be called at once\r\n */\r\nexport function onScroll(handler, triggerNow = false) {\r\n // if first call: setup eventlistener on window\r\n !scrollFunctions.length ? initScroll() : null;\r\n\r\n // Trigger function\r\n triggerNow ? handler() : null;\r\n\r\n scrollFunctions.push(handler);\r\n}\r\n\r\nexport function removeScroll(handler) {\r\n scrollFunctions = scrollFunctions.filter(x => x !== handler);\r\n}\r\n\r\nexport function initScroll() {\r\n window.addEventListener('scroll', scrollHandler);\r\n}\r\n","import { onScroll, scrollTop } from '../utils/scroll';\r\n\r\nexport function setupHeader() {\r\n const header = document.querySelector('.header');\r\n\r\n function enableAnimation() {\r\n document.body.classList.add('animate-header');\r\n }\r\n\r\n function setupHeaderAnimation(header) {\r\n const headerCampaignImage = header.querySelector('.header__campaign__image');\r\n\r\n if (headerCampaignImage) {\r\n if (headerCampaignImage.complete) {\r\n enableAnimation();\r\n } else {\r\n headerCampaignImage.addEventListener('load',enableAnimation);\r\n headerCampaignImage.addEventListener('error',enableAnimation);\r\n }\r\n } else {\r\n enableAnimation();\r\n }\r\n }\r\n\r\n function setupLargeHeader(header) {\r\n const headerImageWrap = header.querySelector('.header__image-wrap');\r\n\r\n if (headerImageWrap) {\r\n const height = header.offsetHeight;\r\n const width = headerImageWrap.offsetWidth;\r\n\r\n onScroll(() => {\r\n if (scrollTop <= height) {\r\n /*\r\n RP, 04-05-2022: This is pretty much like in the design - but actually a bit slower.\r\n The customer actually wants is even slower, so we just slow it a bit down by changing the numbers we multiply by.\r\n */\r\n /*const newWidth = width + (scrollTop * 1.83);\r\n const newY = (scrollTop * 1.5) * -1;*/\r\n const newWidth = width + (scrollTop * 1.83);\r\n const newY = scrollTop * -1;\r\n\r\n const scale = newWidth / width;\r\n\r\n // Removed old header transform due to keflico has trouble finding images\r\n // const headerTransform = `translateZ(0) translateX(-50%) translateY(${newY}px) scale(${scale})`;\r\n const headerTransform = `scale(${scale})`;\r\n\r\n headerImageWrap.style.transform = headerTransform;\r\n }\r\n });\r\n }\r\n }\r\n\r\n function setupMediumHeader(header) {\r\n const headerImageWrap = header.querySelector('.header__image-wrap');\r\n const headerImage = header.querySelector('.header__image');\r\n\r\n if (headerImageWrap && headerImage) {\r\n const headerImageWrapBottom = headerImageWrap.getBoundingClientRect().top + headerImageWrap.offsetHeight;\r\n const headerImageBottom = headerImage.getBoundingClientRect().top + headerImage.offsetHeight;\r\n const width = headerImage.offsetWidth;\r\n const minWidth = headerImageWrap.offsetWidth;\r\n const minY = (headerImageBottom - headerImageWrapBottom) * -1;\r\n const maxY = 0;\r\n\r\n onScroll(() => {\r\n let newWidth = width - (scrollTop / 2);\r\n newWidth = newWidth > minWidth ? newWidth : minWidth;\r\n let newY = (scrollTop / 2) * -1;\r\n newY = newY > minY ? newY : minY;\r\n newY = newY < maxY ? newY : maxY;\r\n const scale = newWidth / width;\r\n\r\n newY = newY * scale;\r\n\r\n const headerImageTransform = `translateZ(0) translateX(-50%) translateY(${newY}px) scale(${scale})`;\r\n\r\n headerImage.style.transition = 'none';\r\n headerImage.style.transform = headerImageTransform;\r\n });\r\n }\r\n }\r\n\r\n if (header) {\r\n const isLarge = header.classList.contains('header-large');\r\n const isMedium = header.classList.contains('header-medium');\r\n\r\n if (isLarge) {\r\n setupLargeHeader(header);\r\n }\r\n\r\n if (isMedium) {\r\n setupMediumHeader(header);\r\n }\r\n\r\n setupHeaderAnimation(header);\r\n }\r\n}\r\n","import settings from '../../../settings.json';\r\n\r\nexport const breakpoints = settings.breakpoints;\r\nexport const breakpointKeys = Object.keys(breakpoints);\r\nexport let currentWindowWidth = window.innerWidth;\r\nexport let currentWindowHeight = window.innerHeight;\r\nexport let currentBreakpoint;\r\nexport let currentBreakpointIndex = 0;\r\nlet resizeTimer;\r\n\r\nconst resizeFunctions = [];\r\n\r\n/**\r\n * Get various window sizes - width, height etc.\r\n * This function is fired automatically upon page load. and run each time the window changes size.\r\n *\r\n */\r\nfunction getWindowSizes() {\r\n currentWindowWidth = window.innerWidth;\r\n currentWindowHeight = window.innerHeight;\r\n\r\n // Calculate which breakpoint is currently active, based on the screen width compared to the breakpoint definitions.\r\n\r\n let lastFoundWidth = 0;\r\n\r\n breakpointKeys.forEach((key, index) => {\r\n const width = breakpoints[key];\r\n if (currentWindowWidth >= width && width > lastFoundWidth) {\r\n lastFoundWidth = width;\r\n currentBreakpoint = key;\r\n currentBreakpointIndex = index;\r\n }\r\n });\r\n}\r\n\r\nfunction resizeHandler() {\r\n clearTimeout(resizeTimer);\r\n\r\n resizeTimer = setTimeout(() => {\r\n getWindowSizes();\r\n resizeFunctions.forEach(funcRef => funcRef());\r\n }, 100);\r\n}\r\n\r\nexport function onWindowResize(handler) {\r\n if (!currentBreakpoint) {\r\n initWindowResize();\r\n }\r\n\r\n resizeFunctions.push(handler);\r\n}\r\n\r\nexport function initWindowResize() {\r\n getWindowSizes();\r\n window.addEventListener('resize', resizeHandler);\r\n window.addEventListener('orientationchange', resizeHandler);\r\n}\r\n","export function setupProductInspiration() {\r\n const productInspirations = document.querySelectorAll('.product-inspiration');\r\n\r\n Array.from(productInspirations).forEach(productInspiration => {\r\n const items = productInspiration.querySelectorAll('.product-inspiration__item');\r\n const prev = productInspiration.querySelector('.product-inspiration__prev');\r\n const next = productInspiration.querySelector('.product-inspiration__next');\r\n const current = productInspiration.querySelector('.product-inspiration__counter__current');\r\n let activeIndex = 0;\r\n\r\n function updateCurrentItem() {\r\n items[activeIndex].classList.remove('js-active');\r\n }\r\n\r\n function updateNewItem(direction) {\r\n items[activeIndex].classList.add('js-active');\r\n\r\n if (current) {\r\n current.textContent = parseInt(activeIndex + 1);\r\n productInspiration.setAttribute('data-active-index',activeIndex);\r\n }\r\n }\r\n\r\n function clickPrev() {\r\n if (activeIndex > 0) {\r\n updateCurrentItem();\r\n activeIndex--;\r\n updateNewItem('prev');\r\n }\r\n }\r\n\r\n function clickNext() {\r\n if (activeIndex + 1 < items.length) {\r\n updateCurrentItem();\r\n activeIndex++;\r\n updateNewItem('next');\r\n }\r\n }\r\n\r\n if (prev) {\r\n prev.addEventListener('click',clickPrev);\r\n }\r\n\r\n if (next) {\r\n next.addEventListener('click',clickNext);\r\n }\r\n });\r\n}","export const body = document.body;\r\nexport const qs = (s, o = body) => o.querySelector(s);\r\nexport const qsa = (s, o = body) => o.querySelectorAll(s);\r\n\r\nexport const allowStatCookies = window.CookieInformation && CookieInformation.getConsentGivenFor('cookie_cat_statistic');\r\n\r\nexport const isTouch = 'ontouchstart' in window ? true : false;\r\n\r\n/**\r\n * Sets a custom CSS variable to ensure precise vh unit mesuarment\r\n *\r\n */\r\n\r\nexport function setVhProp() {\r\n // First we get the viewport height and we multiple it by 1% to get a value for a vh unit\r\n const vh = window.innerHeight * 0.01;\r\n // Then we set the value in the --vh custom property to the root of the document\r\n document.documentElement.style.setProperty('--vh', `${vh}px`);\r\n}\r\n\r\nexport function initVhUnitOverwrite() {\r\n setVhProp();\r\n\r\n window.addEventListener('orientationchange',function() {\r\n setTimeout(function() {\r\n setVhProp();\r\n },100);\r\n })\r\n}\r\n\r\nexport function canUseWebP() {\r\n const elem = document.createElement('canvas');\r\n\r\n if (elem.getContext && elem.getContext('2d')) {\r\n // was able or not to get WebP representation\r\n return elem.toDataURL('image/webp').indexOf('data:image/webp') === 0;\r\n }\r\n\r\n // very old browser like IE 8, canvas not supported\r\n return false;\r\n}\r\n\r\n/**\r\n * Add a to the head\r\n */\r\nexport function addPrefetch(kind, url, as) {\r\n const linkElem = document.createElement('link');\r\n linkElem.rel = kind;\r\n linkElem.href = url;\r\n if (as) {\r\n linkElem.as = as;\r\n }\r\n linkElem.crossorigin = true;\r\n document.head.append(linkElem);\r\n}\r\n\r\n/**\r\n * Format number sparated with commas per thousand.\r\n *\r\n * @param {Number} num - Number you want to format\r\n *\r\n * @returns {string} - Returns the number formatet with commas\r\n *\r\n * @example:\r\n * console.info(formatNumber(2665)) // 2,665\r\n * console.info(formatNumber(102665)) // 102,665\r\n * console.info(formatNumber(1240.5)) // 1,240.5\r\n */\r\n\r\nexport function formatNumber(num, seperator = '.') {\r\n return num.toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, `$1${seperator}`);\r\n}\r\n\r\n/**\r\n * Prevent function from being executed as long as it is invoked, while given delay hasn't passed.\r\n *\r\n * @param {Function} callback Callback\r\n * @param {String} delay Delay\r\n * @return {Function} Callback\r\n */\r\nexport function debounce(callback, delay) {\r\n let timer = null;\r\n\r\n return function () {\r\n const context = this,\r\n args = arguments;\r\n\r\n clearTimeout(timer);\r\n\r\n timer = setTimeout(function () {\r\n callback.apply(context, args);\r\n }, delay);\r\n };\r\n}\r\n\r\n/*\r\n* Load JavsScript asynchronously when needed\r\n* @param {String} source The path to the file\r\n* @param {Function} callback The callback to excecute upon load\r\n* @return {Element} Element to attach\r\n*/\r\nexport function loadJS (source, callback) {\r\n const reference = document.getElementsByTagName('script')[0];\r\n const script = document.createElement('script');\r\n\r\n script.src = source;\r\n script.async = true;\r\n reference.parentNode.insertBefore(script, reference);\r\n\r\n if (callback && typeof(callback) === 'function') {\r\n script.onload = callback;\r\n }\r\n\r\n return script;\r\n}\r\n\r\n/**\r\n * Get the thumbnail dimensions to use for a given player size.\r\n *\r\n * @param {Object} options\r\n * @param {number} options.width The width of the player\r\n * @param {number} options.height The height of the player\r\n * @return {Object} The width and height\r\n */\r\nexport function getRoundedDimensions({ width, height }) {\r\n let roundedWidth = width;\r\n let roundedHeight = height;\r\n\r\n // If the original width is a multiple of 320 then we should\r\n // not round up. This is to keep the native image dimensions\r\n // so that they match up with the actual frames from the video.\r\n //\r\n // For example 640x360, 960x540, 1280x720, 1920x1080\r\n //\r\n // Round up to nearest 100 px to improve cacheability at the\r\n // CDN. For example, any width between 601 pixels and 699\r\n // pixels will render the thumbnail at 700 pixels width.\r\n if (roundedWidth % 320 !== 0) {\r\n roundedWidth = Math.ceil(width / 100) * 100;\r\n roundedHeight = Math.round((roundedWidth / width) * height);\r\n }\r\n\r\n return {\r\n width: roundedWidth,\r\n height: roundedHeight\r\n };\r\n}\r\n\r\nexport const isIE11 = !!window.MSInputMethodContext && !!document.documentMode;\r\n","import { isTouch } from '../utils/helpers';\r\nimport { onWindowResize } from '../utils/windowResize';\r\n\r\nexport const mouse = {\r\n x: window.innerWidth / 2,\r\n y: window.innerHeight / 2,\r\n};\r\n\r\nexport function setupCanvas() {\r\n if (!isTouch) {\r\n const canvasMouseTriggers = document.querySelectorAll('.product-slider,.inspiration,.entrance,.related-articles,.gallery');\r\n const scaleTriggers = document.querySelectorAll('.product-slider__list,.inspiration__list,.article-list--small .article-list__item,.gallery__list-wrap');\r\n const canvas = document.querySelector('.canvas');\r\n let hoverScaleTrigger = false;\r\n\r\n if (canvas) {\r\n function Circle(x, y, radius) {\r\n this.x = x;\r\n this.y = y;\r\n this.radius = radius;\r\n hoverRadius = 74;\r\n this.lastMouse = {x: x, y: y};\r\n newRadius = radius;\r\n\r\n this.update = () => {\r\n // Drag effect\r\n this.lastMouse.x += (mouse.x - this.lastMouse.x) * 0.1;\r\n this.lastMouse.y += (mouse.y - this.lastMouse.y) * 0.1;\r\n\r\n // Circular motion\r\n this.x = this.lastMouse.x;\r\n this.y = this.lastMouse.y;\r\n\r\n this.draw();\r\n };\r\n\r\n this.draw = () => {\r\n if (hoverScaleTrigger && newRadius < hoverRadius) {\r\n newRadius += 4;\r\n } else if (!hoverScaleTrigger && newRadius > this.radius) {\r\n newRadius -= 4;\r\n }\r\n\r\n const newX = this.x + (newRadius / 2) + 5;\r\n\r\n c.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n if (\r\n newRadius > (this.radius * 2) &&\r\n (\r\n canvasText.length > 1 ||\r\n canvasIcon.length > 1\r\n )\r\n ) {\r\n c.fillStyle = 'rgba(255,255,255,1)';\r\n } else {\r\n c.fillStyle = 'rgba(255,255,255,1)';\r\n }\r\n\r\n c.beginPath();\r\n c.arc(newX, this.y, newRadius, Math.PI * 2, false);\r\n c.fill();\r\n c.closePath();\r\n\r\n if (newRadius > (this.radius * 2) && canvasText.length > 1) {\r\n c.fillStyle = 'rgba(0,0,0,1)';\r\n c.font = \"18px synthese\";\r\n c.fillText(canvasText, newX - 26, this.y + 7);\r\n }\r\n\r\n if (newRadius > (this.radius * 2) && canvasIcon.length > 1) {\r\n c.drawImage(img, newX - 19, this.y - 8, 38, 17);\r\n }\r\n };\r\n }\r\n\r\n function requestTick() {\r\n if (!ticking) {\r\n requestAnimationFrame(animate);\r\n ticking = true;\r\n }\r\n }\r\n\r\n function animate() {\r\n if (!canceled) {\r\n if (hoverTarget != '') {\r\n if (hoverTarget.hasAttribute('data-canvas-text')) {\r\n canvasText = hoverTarget.getAttribute('data-canvas-text');\r\n } else {\r\n canvasText = '';\r\n }\r\n\r\n if (hoverTarget.hasAttribute('data-canvas-icon')) {\r\n canvasIcon = hoverTarget.getAttribute('data-canvas-icon');\r\n } else {\r\n canvasIcon = '';\r\n }\r\n\r\n canvas.classList.add('js-standard');\r\n } else {\r\n canvas.classList.remove('js-standard');\r\n canvasText = '';\r\n canvasIcon = '';\r\n }\r\n\r\n requestAnimationFrame(animate);\r\n circle.update();\r\n\r\n ticking = false;\r\n } else {\r\n canceled = false;\r\n }\r\n }\r\n\r\n function canvasMouseMove(e) {\r\n mouse.x = e.clientX;\r\n mouse.y = e.clientY;\r\n }\r\n\r\n function addEvents() {\r\n document.body.addEventListener('mousemove', canvasMouseMove);\r\n\r\n onWindowResize(() => {\r\n canvas.width = window.innerWidth;\r\n canvas.height = window.innerHeight;\r\n circle.update();\r\n });\r\n\r\n requestTick();\r\n }\r\n\r\n function enterTrigger(e) {\r\n hoverTarget = e.currentTarget;\r\n }\r\n\r\n function leaveTrigger() {\r\n hoverTarget = '';\r\n }\r\n\r\n /*function removeEvents() {\r\n canvasText = '';\r\n canvasIcon = '';\r\n canceled = true;\r\n cancelAnimationFrame(animate);\r\n document.body.removeEventListener('mousemove', canvasMouseMove);\r\n c.clearRect(0, 0, canvas.width, canvas.height);\r\n }*/\r\n\r\n Array.from(scaleTriggers).forEach(scaleTrigger => {\r\n scaleTrigger.addEventListener('mouseenter', function () {\r\n hoverScaleTrigger = true;\r\n });\r\n\r\n scaleTrigger.addEventListener('mouseleave', function () {\r\n hoverScaleTrigger = false;\r\n });\r\n });\r\n\r\n canvas.width = window.innerWidth;\r\n canvas.height = window.innerHeight;\r\n const c = canvas.getContext('2d');\r\n const circle = new Circle(window.innerWidth, window.innerHeight, 0);\r\n let ticking = false;\r\n let canceled = false;\r\n let newRadius;\r\n let hoverRadius;\r\n let canvasText = '';\r\n let canvasIcon = '';\r\n let hoverTarget = '';\r\n\r\n const img = new Image();\r\n img.src = '/files/templates/designs/keflico/assets/svg/arrow-long.svg';\r\n\r\n Array.from(canvasMouseTriggers).forEach(mouseTrigger => {\r\n /*mouseTrigger.addEventListener('mouseenter',addEvents);\r\n mouseTrigger.addEventListener('mouseleave',removeEvents);*/\r\n\r\n mouseTrigger.addEventListener('mouseenter',enterTrigger);\r\n mouseTrigger.addEventListener('mouseleave',leaveTrigger);\r\n });\r\n\r\n addEvents();\r\n }\r\n }\r\n}","const orientationChangeFunctions = [];\r\n\r\nfunction orientationChangeHandler() {\r\n setTimeout(function() {\r\n orientationChangeFunctions.forEach(funcRef => funcRef());\r\n },100);\r\n}\r\n/**\r\n * Adds a function to a function array, executed on a single orientationchange-event set on window.\r\n * This avoids the memory load and possible hickups of setting multiple eventlisteners for the same event.\r\n *\r\n * @param {Function} handler - function to be called on orientationchange\r\n * @param {boolean} triggerNow - Should the function be called at once\r\n */\r\nexport function orientationChange(handler, triggerNow = false) {\r\n // if first call: setup eventlistener on window\r\n !orientationChangeFunctions.length ? initOrientationChange() : null;\r\n\r\n // Trigger function\r\n triggerNow ? handler() : null;\r\n\r\n orientationChangeFunctions.push(handler);\r\n}\r\n\r\n\r\nexport function initOrientationChange() {\r\n window.addEventListener('orientationchange', orientationChangeHandler);\r\n}\r\n","import { orientationChange } from '../utils/orientationChange';\r\nimport { isIE11 } from '../utils/helpers';\r\n\r\nexport function setupUsps() {\r\n const uspIconList = document.querySelector('.usp-icon-list');\r\n const uspList = document.querySelector('.usp-list');\r\n\r\n if (uspIconList && uspList) {\r\n function iconTransitionEnd(e) {\r\n const icon = e.currentTarget;\r\n const uspsModule = icon.closest('.module');\r\n\r\n if (uspsModule) {\r\n const uspsIcons = uspsModule.querySelectorAll('.usp-icon-list__icon-circle__left');\r\n const uspsTexts = uspsModule.querySelectorAll('.usp-list__item');\r\n\r\n const currentActiveIndex = Array.from(uspsIcons).indexOf(icon);\r\n const nextActiveIndex = currentActiveIndex + 1 < uspsIcons.length ? currentActiveIndex + 1 : 0;\r\n\r\n uspsIcons[currentActiveIndex].removeEventListener('transitionend', iconTransitionEnd);\r\n uspsIcons[currentActiveIndex].closest('.usp-icon-list__item').classList.remove('js-active');\r\n uspsTexts[currentActiveIndex].classList.remove('js-active');\r\n\r\n uspsIcons[nextActiveIndex].addEventListener('transitionend', iconTransitionEnd);\r\n uspsIcons[nextActiveIndex].closest('.usp-icon-list__item').classList.add('js-active');\r\n uspsTexts[nextActiveIndex].classList.add('js-active');\r\n }\r\n }\r\n\r\n function onChange(changes, observer) {\r\n changes.forEach(change => {\r\n const uspModule = change.target.closest('.module');\r\n const uspsIcons = uspModule.querySelectorAll('.usp-icon-list__icon-circle__left');\r\n const uspsTexts = uspModule.querySelectorAll('.usp-list__item');\r\n const activeIcons = Array.from(uspsIcons).filter(x => x.closest('.usp-icon-list__item').classList.contains('js-active'));\r\n\r\n if (change.intersectionRatio > 0.1) {\r\n if (activeIcons.length == 1) {\r\n const currentActiveIndex = Array.from(uspsIcons).indexOf(activeIcons[0]);\r\n const nextActiveIndex = currentActiveIndex + 1 < uspsIcons.length ? currentActiveIndex + 1 : 0;\r\n\r\n uspsIcons[currentActiveIndex].removeEventListener('transitionend', iconTransitionEnd);\r\n uspsIcons[currentActiveIndex].closest('.usp-icon-list__item').classList.remove('js-active');\r\n uspsTexts[currentActiveIndex].classList.remove('js-active');\r\n\r\n uspsIcons[nextActiveIndex].addEventListener('transitionend', iconTransitionEnd);\r\n uspsIcons[nextActiveIndex].closest('.usp-icon-list__item').classList.add('js-active');\r\n uspsTexts[nextActiveIndex].classList.add('js-active');\r\n } else {\r\n uspsIcons[0].addEventListener('transitionend', iconTransitionEnd);\r\n uspsIcons[0].closest('.usp-icon-list__item').classList.add('js-active');\r\n }\r\n } else {\r\n Array.from(uspsIcons).forEach(uspsIcon => {\r\n uspsIcon.removeEventListener('transitionend', iconTransitionEnd);\r\n });\r\n }\r\n });\r\n }\r\n\r\n function setUspTextsHeight() {\r\n const uspsTexts = uspList.querySelectorAll('.usp-list__item');\r\n let height = 0;\r\n\r\n uspsTexts.forEach(uspText => {\r\n if (uspText.scrollHeight > height) {\r\n height = uspText.scrollHeight;\r\n }\r\n });\r\n\r\n uspsTexts.forEach(uspText => {\r\n uspText.style.height = `${height}px`;\r\n });\r\n }\r\n\r\n if (!isIE11) {\r\n const config = {\r\n root: null,\r\n rootMargin: '0px',\r\n threshold: [0.1]\r\n };\r\n\r\n const observer = new IntersectionObserver(onChange, config);\r\n observer.observe(uspIconList);\r\n\r\n setUspTextsHeight();\r\n\r\n orientationChange(() => {\r\n setUspTextsHeight();\r\n });\r\n } else {\r\n Array.from(uspsModules).forEach(uspModule => {\r\n\r\n });\r\n }\r\n }\r\n}","/**\r\n * Handler to trigger callbacks once the browser is ready for them.\r\n *\r\n * You can keep adding references using onReady() even after the page is loaded. In that case they will be\r\n * run at once.\r\n *\r\n * @example\r\n * import { onReady } from './utils/events/onReady';\r\n *\r\n * onReady(yourFunctionHere);\r\n *\r\n */\r\n\r\nlet functionReferences = [];\r\n\r\n// Set the initial readyState based on the browser's current state. If the script has been loaded\r\n// asynchronously, the DOM might be ready for us already, in which case there's no reason to delay\r\n// any further processing. The following will evaluate as true if the DOM is ready, or the page is\r\n// complete.\r\nlet readyState = document.readyState === 'interactive' || document.readyState === 'complete';\r\n\r\n// Defines whether or not the window.onReady event has been bound, so we won't do it twice. That\r\n// would just be stupid.\r\nlet readyEventBound = false;\r\n\r\n/**\r\n * Run the given array of callback functions.\r\n *\r\n * @private\r\n * @param {Array} funcArray\r\n */\r\nfunction runFunctionArray(funcArray) {\r\n funcArray.forEach(funcRef => funcRef());\r\n}\r\n\r\n/**\r\n * Empty the callback arrays\r\n *\r\n * @private\r\n */\r\nfunction emptyCallbackArrays() {\r\n // Keep iterating through the function references until there are none left.\r\n while (functionReferences.length) {\r\n // Set up a temporary array that mirrors the list of callbacks, and empty the real one.\r\n const tempArray = functionReferences.slice(0);\r\n functionReferences = [];\r\n\r\n // Run the callbacks. The callbacks themselves may set up more callbacks, which\r\n // is why we keep looping the array until we're done.\r\n runFunctionArray(tempArray);\r\n }\r\n\r\n // At this point we'll assume we're ready for anything!\r\n readyState = true;\r\n}\r\n\r\n/**\r\n * Make sure the \"ready\"-event is set.\r\n *\r\n * @private\r\n */\r\nfunction bindReadyEvent() {\r\n if (!readyEventBound) {\r\n if (document.readyState === 'loading') {\r\n // loading yet, wait for the event\r\n document.addEventListener('DOMContentLoaded', emptyCallbackArrays);\r\n } else {\r\n // DOM is ready!\r\n emptyCallbackArrays();\r\n }\r\n\r\n readyEventBound = true;\r\n }\r\n}\r\n\r\n/**\r\n * Register a function to run when the page is ready.\r\n *\r\n * @param {Function} functionReference - The function you want to run.\r\n */\r\nexport function onReady(functionReference) {\r\n if (typeof functionReference === 'function') {\r\n if (readyState) {\r\n functionReference();\r\n } else {\r\n bindReadyEvent();\r\n\r\n functionReferences.push(functionReference);\r\n }\r\n }\r\n}\r\n","/**\r\n * Utilities for checking properties and states of elements.\r\n */\r\n\r\n/**\r\n * Check if an element is empty.\r\n *\r\n * @param {Node} element - Check if this element is empty.\r\n * @param {boolean} [strict=true] - Set this to **false** to ignore nodes with whitespace.\r\n * @returns {boolean} **True** if the element is empty.\r\n */\r\nexport function elementIsEmpty(element, strict = true) {\r\n return strict ? !element.childNodes.length : !element.innerHTML.trim().length;\r\n}\r\n\r\n/**\r\n * Check if an element is hidden in the DOM with `display: none;`\r\n *\r\n * @param {HTMLElement} element - The element to check.\r\n * @returns {boolean} **True** if element is hidden, otherwise **false**.\r\n */\r\nexport function elementIsHidden(element) {\r\n return element.offsetParent === null;\r\n}\r\n\r\n/**\r\n * Check if an element is in the viewport\r\n *\r\n * @param {HTMLElement} elem - The element to check\r\n */\r\nexport function isVisible(elem) {\r\n return !!elem && !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\r\n}\r\n\r\n/**\r\n * Find out whether or not the given argument is an element that would react somewhat normally to DOM-manipulations.\r\n *\r\n * @param {*} element - The element to check.\r\n * @returns {boolean} `true` if the given argument is an element (or document, or window), and `false` otherwise.\r\n */\r\nexport function isElement(element) {\r\n return element instanceof Element || element instanceof Document || element instanceof Window;\r\n}\r\n\r\n/**\r\n * Return the position of an element\r\n *\r\n * @param {Element|String} element - The HTML element to work with or its ID\r\n * @param {Element|String|Window} [relativeTo=window] - The HTML element to return the position relative to or its ID\r\n * @returns {{top: Number, left: Number}} An object with top and left positions in pixels\r\n *\r\n *\r\n * @example Basic usage:\r\n * import { getElementPosition } from './utils/dom/elementProperties';\r\n *\r\n * const element = document.querySelector('.anElement');\r\n * getElementPosition(element);\r\n *\r\n *\r\n * @example Perform a search for an element with an ID equal to the string, i.e. 'elementId', and get the position of that:\r\n * import { getElementPosition } from './utils/dom/elementProperties';\r\n *\r\n * getElementPosition('elementId');\r\n */\r\nexport function getElementPosition(element, relativeTo = window) {\r\n const useElement = typeof element === 'string' ? document.getElementById(element) : element;\r\n\r\n // Throw error if element wasn't found\r\n if (!useElement) {\r\n throw 'getElementPosition did not find an element.';\r\n }\r\n\r\n const useRelativeTo = typeof relativeTo === 'string' ? document.getElementById(relativeTo) : relativeTo;\r\n\r\n // Throw error if relative element wasn't found\r\n if (!useRelativeTo) {\r\n throw 'getElementPosition did not find an element to show the position relative to.';\r\n }\r\n\r\n if (relativeTo === window) {\r\n // Return position relative to window\r\n const rect = useElement.getBoundingClientRect();\r\n return {\r\n top: rect.top + (window.pageYOffset || document.documentElement.scrollTop),\r\n left: rect.left + (window.pageXOffset || document.documentElement.scrollLeft)\r\n };\r\n } else {\r\n // Return position relative to declared element\r\n return {\r\n top: useElement.offsetTop - relativeTo.offsetTop,\r\n left: useElement.offsetLeft - relativeTo.offsetLeft\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Get the current scroll values of the given element (or window). Will return an object containing\r\n * \"left\" and \"top\" properties, which are set to the scroll values, or false if no compatible element\r\n * was given.\r\n *\r\n * @param {Element|Window} [element=window]\r\n * @returns {{ left: number, top: number } | boolean}\r\n */\r\nexport function getElementScroll(element = window) {\r\n if (isElement(element)) {\r\n if (element instanceof Window) {\r\n return {\r\n left: element.pageXOffset || document.documentElement.scrollLeft,\r\n top: element.pageYOffset || document.documentElement.scrollTop\r\n };\r\n } else {\r\n return {\r\n left: element.scrollX || element.scrollLeft,\r\n top: element.scrollY || element.scrollTop\r\n };\r\n }\r\n } else {\r\n console.warn('Can\\'t get scroll-position or given argument type.');\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Get both width and height of element\r\n *\r\n * @param {Element} element - The HTML element to work with\r\n * @param {Object} [options={}] - Object of options\r\n * @param {boolean} [options.includePadding=false] - Get size including padding (defaults to true)\r\n * @param {boolean} [options.includeBorder=false] - Get size including border (defaults to true)\r\n * @param {boolean} [options.includeMargin=true] - Get size including margin (defaults to false)\r\n * @param {null|':before'|':after'} [options.pseudoElement=null] - Get size of pseudo element ':before' or ':after'\r\n * @returns {{width: number, height: number}} An object with the width and height as numbers\r\n */\r\nexport function getElementSize(element, options = {}) {\r\n // Get styles\r\n const elementStyle = window.getComputedStyle(element, options.pseudoElement);\r\n\r\n return {\r\n width: getElementWidth(element, options, elementStyle),\r\n height: getElementHeight(element, options, elementStyle)\r\n };\r\n}\r\n\r\n/**\r\n * Get width of element\r\n *\r\n * @param {Element} element - The HTML element to work with\r\n * @param {Object} [options={}] - Object of options\r\n * @param {boolean} [options.includeMargin=false] - Get width including margin (defaults to false)\r\n * @param {boolean} [options.includeBorder=true] - Get width including border (defaults to true)\r\n * @param {boolean} [options.includePadding=true] - Get width including padding (defaults to true)\r\n * @param {null|':before'|':after'} [options.pseudoElement=null] - Get width of pseudo element ':before' or ':after'\r\n * @param {CSSStyleDeclaration} [elementStyle] - Style declaration of element (in case you already have called .getComputedStyle(), pass its returned value here)\r\n * @returns {number} The width as a number\r\n */\r\nexport function getElementWidth(element, options = {}, elementStyle = null) {\r\n // Keep supplied values or set to defaults\r\n options.includeMargin = options.includeMargin === true;\r\n options.includeBorder = options.includeBorder !== false;\r\n options.includePadding = options.includePadding !== false;\r\n\r\n // Get styles\r\n const style = elementStyle || window.getComputedStyle(element, options.pseudoElement);\r\n\r\n // Get width including border and padding\r\n let width = element.offsetWidth;\r\n\r\n // Calculate width with margin\r\n if (options.includeMargin) {\r\n width += parseFloat(style.marginLeft) + parseFloat(style.marginRight);\r\n }\r\n\r\n // Calculate width without border\r\n if (!options.includeBorder) {\r\n width -= parseFloat(style.borderLeftWidth) + parseFloat(style.borderRightWidth);\r\n }\r\n\r\n // Calculate width without padding\r\n if (!options.includePadding) {\r\n width -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\r\n }\r\n\r\n return width;\r\n}\r\n\r\n/**\r\n * Get height of element\r\n *\r\n * @param {Element} element - The HTML element to work with\r\n * @param {Object} [options={}] - Object of options\r\n * @param {boolean} [options.includeMargin=false] - Get height including margin (defaults to false)\r\n * @param {boolean} [options.includeBorder=true] - Get height including border (defaults to true)\r\n * @param {boolean} [options.includePadding=true] - Get height including padding (defaults to true)\r\n * @param {null|':before'|':after'} [options.pseudoElement=null] - Get height of pseudo element ':before' or ':after'\r\n * @param {CSSStyleDeclaration} [elementStyle] - Style declaration of element (in case you already have called .getComputedStyle(), pass its returned value here)\r\n * @returns {number} The height as a number\r\n */\r\nexport function getElementHeight(element, options = {}, elementStyle = null) {\r\n // Keep supplied values or set to defaults\r\n options.includeMargin = options.includeMargin === true;\r\n options.includeBorder = options.includeBorder !== false;\r\n options.includePadding = options.includePadding !== false;\r\n\r\n // Get styles\r\n const style = elementStyle || window.getComputedStyle(element, options.pseudoElement);\r\n\r\n // Get height including border and padding\r\n let height = element.offsetHeight;\r\n\r\n // Calculate height with margin\r\n if (options.includeMargin) {\r\n height += parseFloat(style.marginTop) + parseFloat(style.marginBottom);\r\n }\r\n\r\n // Calculate height without border\r\n if (!options.includeBorder) {\r\n height -= parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);\r\n }\r\n\r\n // Calculate height without padding\r\n if (!options.includePadding) {\r\n height -= parseFloat(style.paddingTop) + parseFloat(style.paddingBottom);\r\n }\r\n\r\n return height;\r\n}\r\n","/**\r\n * A utility to **lock the viewport** at the current position in order to **stop scrolling**.\r\n *\r\n * @example Basic usage\r\n * import { enableScrollLock, disableScrollLock } from './utils/dom/scrollLock';\r\n *\r\n * enableScrollLock();\r\n * window.setTimeout(disableScrollLock, 3000);\r\n */\r\n\r\nimport { getElementScroll } from './elementProperties';\r\n\r\nconst className = 'scroll-lock';\r\nlet scrollTop = 0;\r\n\r\n/**\r\n * Get the current state of the scroll lock. `true` if the scroll lock is enabled, otherwise `false`.\r\n *\r\n * @type {boolean}\r\n */\r\nexport let scrollLocked = false;\r\n\r\n/**\r\n * Enable the scroll lock.\r\n */\r\nexport function enableScrollLock() {\r\n if (!scrollLocked) {\r\n // Get scroll position\r\n const scrollPosition = getElementScroll();\r\n\r\n // Reset scroll position\r\n window.scrollTo(scrollPosition.left, 0);\r\n\r\n const htmlTag = document.documentElement;\r\n htmlTag.classList.add(className);\r\n htmlTag.style.marginTop = `${-scrollPosition.top}px`;\r\n htmlTag.style.position = 'fixed';\r\n htmlTag.style.overflow = 'hidden';\r\n htmlTag.style.width = '100%';\r\n document.body.style.overflowY = 'scroll';\r\n\r\n // Remember state\r\n scrollLocked = true;\r\n scrollTop = scrollPosition.top;\r\n }\r\n}\r\n\r\n/**\r\n * @type {function}\r\n * @ignore\r\n */\r\nexport const enable = enableScrollLock;\r\n\r\n/**\r\n * Disable the scroll lock\r\n */\r\nexport function disableScrollLock() {\r\n if (scrollLocked) {\r\n const scrollPosition = getElementScroll();\r\n\r\n const htmlTag = document.documentElement;\r\n htmlTag.classList.remove(className);\r\n htmlTag.style.marginTop = '';\r\n htmlTag.style.position = '';\r\n htmlTag.style.overflow = '';\r\n htmlTag.style.width = '';\r\n document.body.removeAttribute('style');\r\n // Set the scroll position to what it was before\r\n window.scrollTo(scrollPosition.left, scrollTop);\r\n\r\n // Remember state\r\n scrollLocked = false;\r\n }\r\n}\r\n\r\n/**\r\n * @type {function}\r\n * @ignore\r\n */\r\nexport const disable = disableScrollLock;\r\n\r\n/**\r\n * Toggle the scroll lock between on and off\r\n */\r\nexport function toggleScrollLock() {\r\n if (scrollLocked) {\r\n disableScrollLock();\r\n } else {\r\n enableScrollLock();\r\n }\r\n}\r\n\r\n/**\r\n * @type {function}\r\n * @ignore\r\n */\r\nexport const toggle = toggleScrollLock;\r\n\r\nexport default {\r\n enable,\r\n disable,\r\n toggle\r\n};\r\n","export function setupSearch() {\r\n const search = document.querySelector('.navigation__search');\r\n const searchToggleBtn = document.getElementById('search-toggle-btn');\r\n const searchBarLI = document.getElementById('navigation-searchbar');\r\n const searchBarInput = document.getElementById('q');\r\n const searchBarIcon = document.getElementById('searchbar-icon');\r\n const searchClose = document.getElementById('search-close');\r\n\r\n document.body.addEventListener('keyup', event => {\r\n if (event.code && event.code.toLowerCase() == 'escape') {\r\n closeSearchBar();\r\n }\r\n });\r\n\r\n document.body.addEventListener('click', event => {\r\n if (document.body.classList.contains('active-searchbar') && (!event.path.includes(search) && !event.path.includes(searchToggleBtn))) {\r\n toggleSearchBar();\r\n }\r\n });\r\n\r\n if (searchToggleBtn) {\r\n searchToggleBtn.addEventListener('click', toggleSearchBar);\r\n }\r\n\r\n if (searchBarIcon) {\r\n searchBarIcon.addEventListener('click', toggleSearchBar);\r\n }\r\n\r\n if (searchClose) {\r\n searchClose.addEventListener('click', toggleSearchBar);\r\n }\r\n\r\n function toggleSearchBar() {\r\n document.body.classList.toggle('active-searchbar');\r\n\r\n if (document.body.classList.contains('active-searchbar')) {\r\n searchBarInput.focus();\r\n }\r\n }\r\n};\r\n\r\nexport function closeSearchBar() {\r\n document.body.classList.remove('active-searchbar');\r\n}\r\n","import { orientationChange } from '../utils/orientationChange';\r\nimport { onScroll, removeScroll, scrollTop } from '../utils/scroll';\r\nimport { enableScrollLock, disableScrollLock } from '../utils/scrollLock';\r\nimport { closeSearchBar } from './search';\r\nimport { isTouch } from '../utils/helpers';\r\n\r\nexport function setupNavigation() {\r\n const navigation = document.querySelector('.navigation');\r\n let logo;\r\n let primary;\r\n let primaryWithChildren;\r\n let level2WithChildren;\r\n const mdMq = window.matchMedia('(min-width: 1024px)');\r\n\r\n const scrollFunction = () => {\r\n if (scrollTop > 10) {\r\n navigation.classList.add('js-white');\r\n } else {\r\n navigation.classList.remove('js-white');\r\n }\r\n };\r\n\r\n function toggleMenuOpen() {\r\n if (document.body.classList.contains('js-nav-open')) {\r\n disableScrollLock();\r\n document.body.classList.remove('js-nav-open');\r\n\r\n if (window.pageYOffset > 50) {\r\n setTimeout(() => document.body.classList.add('going-up'), 40);\r\n }\r\n\r\n closeSearchBar();\r\n } else {\r\n enableScrollLock();\r\n document.body.classList.add('js-nav-open');\r\n }\r\n }\r\n\r\n function watchMegaMenu() {\r\n const megaMenus = document.querySelectorAll('.navigation__mega-menu');\r\n\r\n if (megaMenus.length > 0) {\r\n Array.from(megaMenus).forEach(menu => {\r\n menu.addEventListener('mouseenter', event => {\r\n navigation.classList.add('js-megamenu-active');\r\n });\r\n\r\n menu.addEventListener('mouseleave', event => {\r\n navigation.classList.remove('js-megamenu-active');\r\n });\r\n });\r\n }\r\n }\r\n\r\n function hideOpenMenus() {\r\n const activeLinks = Array.from(primaryWithChildren).filter(x => x.classList.contains('js-active'));\r\n const activeLevel2Links = Array.from(level2WithChildren).filter(x => x.closest('.navigation__sub-item').classList.contains('js-active'));\r\n\r\n activeLinks.forEach(activeLink => {\r\n activeLink.classList.remove('js-active');\r\n\r\n const activeElement = activeLink.closest('.navigation__item');\r\n\r\n if (activeElement) {\r\n activeElement.classList.remove('js-open');\r\n }\r\n });\r\n\r\n activeLevel2Links.forEach(activeLink => {\r\n activeLink.closest('.navigation__sub-item').classList.remove('js-active');\r\n });\r\n\r\n if (isTouch) {\r\n removeBodyEvents();\r\n }\r\n }\r\n\r\n function updateMenu(e) {\r\n if (!e.target.closest('.navigation')) {\r\n hideOpenMenus();\r\n }\r\n }\r\n\r\n function addBodyEvents() {\r\n document.body.addEventListener('click',updateMenu);\r\n }\r\n\r\n function removeBodyEvents() {\r\n document.body.addEventListener('click',updateMenu);\r\n }\r\n\r\n function toggleLevel1Open(item,level2) {\r\n if (item.classList.contains('js-open')) {\r\n item.classList.remove('js-open');\r\n level2.style.height = null;\r\n\r\n if (isTouch) {\r\n removeBodyEvents();\r\n }\r\n } else {\r\n item.classList.add('js-open');\r\n\r\n if (!mdMq.matches) {\r\n level2.style.height = `${level2.scrollHeight}px`;\r\n }\r\n\r\n if (isTouch) {\r\n addBodyEvents();\r\n }\r\n }\r\n }\r\n\r\n function clickLinkWithChildren(e) {\r\n const link = e.currentTarget;\r\n\r\n if (!link.classList.contains('js-active')) {\r\n e.preventDefault();\r\n }\r\n\r\n const item = e.target.closest('.level-1.navigation__item');\r\n\r\n if (item && link) {\r\n if (isTouch) {\r\n hideOpenMenus();\r\n }\r\n\r\n if (link.classList.contains('js-active')) {\r\n link.classList.remove('js-active');\r\n } else {\r\n link.classList.add('js-active');\r\n }\r\n\r\n const level2 = item.querySelector('.navigation__sub');\r\n\r\n if (level2) {\r\n toggleLevel1Open(item,level2);\r\n }\r\n }\r\n }\r\n\r\n function addLinkEvents() {\r\n Array.from(primaryWithChildren).forEach(link => {\r\n link.addEventListener('click',clickLinkWithChildren);\r\n });\r\n }\r\n\r\n function removeLinkEvents() {\r\n Array.from(primaryWithChildren).forEach(link => {\r\n link.removeEventListener('click', clickLinkWithChildren);\r\n });\r\n }\r\n\r\n function watchSamePageLinks() {\r\n const path = window.location.pathname;\r\n const subLinks = document.querySelectorAll('.navigation__sub-link[href*=\"#module\"]');\r\n\r\n subLinks.forEach(subLink => {\r\n const subLinkPath = subLink.href.substring(subLink.href.lastIndexOf('/'),subLink.href.indexOf('#'));\r\n\r\n if (path == subLinkPath) {\r\n subLink.addEventListener('click',toggleMenuOpen);\r\n }\r\n });\r\n }\r\n\r\n function clickL2LinkWithChildren(e) {\r\n const item = e.currentTarget.closest('.navigation__sub-item--has-children');\r\n\r\n if (!item.classList.contains('js-active') && mdMq.matches) {\r\n e.preventDefault();\r\n item.classList.add('js-active');\r\n }\r\n }\r\n\r\n if (navigation) {\r\n logo = navigation.querySelector('.navigation__logo');\r\n primary = navigation.querySelector('.navigation__primary');\r\n const navigationButton = navigation.querySelector('.navigation__burger');\r\n\r\n if (logo && primary) {\r\n primaryWithChildren = document.querySelectorAll('.level-1.navigation__item--has-children > a');\r\n\r\n orientationChange(() => {\r\n if (mdMq.matches && !isTouch) {\r\n onScroll(scrollFunction);\r\n removeLinkEvents();\r\n } else {\r\n removeScroll(scrollFunction);\r\n addLinkEvents();\r\n }\r\n }, true);\r\n\r\n watchMegaMenu();\r\n watchSamePageLinks();\r\n }\r\n\r\n if (navigationButton) {\r\n navigationButton.addEventListener('click', toggleMenuOpen);\r\n }\r\n\r\n if (isTouch) {\r\n level2WithChildren = document.querySelectorAll('.navigation__sub-item--has-children > a');\r\n\r\n level2WithChildren.forEach(link => {\r\n link.addEventListener('click',clickL2LinkWithChildren);\r\n });\r\n }\r\n }\r\n}\r\n","export function setupCalculator() {\r\n const calculator = document.querySelector('.module.calculator');\r\n\r\n if (calculator) {\r\n let terraceArea;\r\n const productSelector = document.getElementById('productSelector');\r\n const productImage = document.getElementById('productImage');\r\n const calculateTriggers = calculator.querySelectorAll('[data-action=\"calculate\"]');\r\n const updateFields = calculator.querySelectorAll('[data-factor]');\r\n const lengthField = document.getElementById('deckingLength');\r\n const widthField = document.getElementById('deckingWidth');\r\n const m2Field = document.getElementById('deckingM2');\r\n const deckingAreaText = document.getElementById('deckingArea');\r\n const printButton = calculator.querySelector('[data-action=\"print\"]');\r\n\r\n const categoryErrorMessage = calculator.getAttribute('data-category-error-message');\r\n const addressErrorMessage = calculator.getAttribute('data-address-error-message');\r\n const areaErrorMessage = calculator.getAttribute('Du bedes udfylde længde + bredde eller areal');\r\n\r\n function Terrasseberegner_counter() {\r\n var xhttp;\r\n xhttp = new XMLHttpRequest();\r\n\r\n xhttp.onreadystatechange = function () {\r\n if (this.readyState == 4 && this.status == 200) {}\r\n };\r\n\r\n xhttp.open(\"GET\", window.location.href + \"?terrasseberegner-add-count=1\", true);\r\n xhttp.send();\r\n }\r\n\r\n function Terrasseberegner_print_result(e) {\r\n const category = productSelector.options[productSelector.selectedIndex].text;\r\n const width = widthField.value;\r\n const length = lengthField.value;\r\n const navn = document.getElementById('navn').value;\r\n const adresse = document.getElementById('adresse').value;\r\n const by = document.getElementById('by').value;\r\n const telefon = document.getElementById('telefon').value;\r\n const cvr = document.getElementById('cvr').value;\r\n const tareal = deckingArea.innerHTML;\r\n const mm120 = document.getElementById('mm120').innerHTML;\r\n const mm145 = document.getElementById('mm145').innerHTML;\r\n const c_45 = document.getElementById('c_45').innerHTML;\r\n const c50 = document.getElementById('c50').innerHTML;\r\n const c60 = document.getElementById('c60').innerHTML;\r\n const uPic = document.getElementById('usage_pic').innerHTML;\r\n const upic2 = document.getElementById('for_stk').innerHTML;\r\n const upk = document.getElementById('usage_pk').innerHTML;\r\n const fPs = document.getElementById('for_ps').innerHTML;\r\n const cat_img = productSelector.options[productSelector.selectedIndex].value;\r\n\r\n if (cat_img == \"\") {\r\n alert(categoryErrorMessage);\r\n\r\n return;\r\n }\r\n\r\n function print_result() {\r\n var myWindow = window.open(\"\", \"\", \"fullscreen=yes\");\r\n var myHTML = \"\";\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += ' ';\r\n myHTML += '';\r\n myHTML += '
\"\"
';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '
';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += ' ';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += ' ';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += ' ';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '
Indtast Oplysninger
Navn' + navn + '
Adresse' + adresse + '
Postnr. / By' + by + '
Telefon' + telefon + '
Tømmerhandel' + cvr + '
';\r\n myHTML += '
';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n\r\n if (document.getElementById('check_1').checked == true) {\r\n myHTML += '';\r\n myHTML += ' ';\r\n myHTML += '';\r\n }\r\n if (document.getElementById('check_2').checked == true) {\r\n myHTML += '';\r\n myHTML += ' ';\r\n myHTML += '';\r\n }\r\n if (document.getElementById('check_3').checked == true) {\r\n myHTML += '';\r\n myHTML += ' ';\r\n myHTML += '';\r\n }\r\n if (document.getElementById('check_4').checked == true) {\r\n myHTML += '';\r\n myHTML += ' ';\r\n myHTML += '';\r\n }\r\n if (document.getElementById('check_5').checked == true) {\r\n myHTML += '';\r\n myHTML += ' ';\r\n myHTML += '';\r\n }\r\n\r\n myHTML += '
Pris på andet tilbehør
Olie
Voks
Propbor
Håndlister
Stolper
';\r\n myHTML += '
';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '


' + category + '
Terrassens Længde' + length + '
Terrassens Bredde' + width + '
Areal' + terraceArea + '
';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '
Samlet areal' + tareal + ' m²
120mm/(117mm) ' + mm120 + '
145mm ' + mm145 + '
';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '
Strøer
C/C 45cm ' + c_45 + '
C/C 60cm ' + c60 + '
';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '
Skruer
Forbrug ' + uPic + '
pk á 200 stk.= ' + upk + '
';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '';\r\n myHTML += '
Propper
Forbrug ' + upic2 + '
ps á 500 stk.= ' + fPs + '
\"\"
';\r\n myHTML += '';\r\n myHTML += '';\r\n\r\n myWindow.document.write(myHTML);\r\n myWindow.document.close();\r\n\r\n Terrasseberegner_counter();\r\n\r\n return false;\r\n }\r\n\r\n if (terraceArea != '') {\r\n if (navn != '' && adresse != '' && by != '' && telefon != '' && cvr != '') {\r\n print_result();\r\n } else {\r\n alert(addressErrorMessage);\r\n }\r\n } else {\r\n alert(areaErrorMessage);\r\n }\r\n }\r\n\r\n function setFieldValues(terraceArea) {\r\n const dec = decimalPlaces(terraceArea);\r\n\r\n if (dec > 0) {\r\n deckingAreaText.textContent = terraceArea.toFixed(2);\r\n } else {\r\n deckingAreaText.textContent = terraceArea;\r\n }\r\n\r\n Array.from(updateFields).forEach(field => {\r\n const factor = field.getAttribute('data-factor');\r\n let value = terraceArea * factor;\r\n let showDecimals = true;\r\n\r\n if (field.hasAttribute('data-pr-piece')) {\r\n const prPiece = field.getAttribute('data-pr-piece');\r\n value = value / prPiece;\r\n }\r\n\r\n if (field.hasAttribute('data-disable-decimals')) {\r\n showDecimals = false;\r\n value = Math.ceil(value);\r\n }\r\n\r\n field.textContent = showDecimals ? value.toFixed(2) : value;\r\n });\r\n }\r\n\r\n function clearFieldValues() {\r\n deckingAreaText.textContent = '';\r\n\r\n Array.from(updateFields).forEach(field => {\r\n field.textContent = '';\r\n });\r\n }\r\n\r\n function calculate() {\r\n let length = lengthField.value.replace(',','.');\r\n let width = widthField.value.replace(',','.');\r\n const m2 = m2Field.value.replace(',','.');\r\n\r\n if (length != '' && width != '') {\r\n length = Number(length);\r\n width = Number(width);\r\n\r\n terraceArea = length * width;\r\n } else if (m2 != '') {\r\n terraceArea = Number(m2);\r\n } else {\r\n terraceArea = null;\r\n }\r\n\r\n if (terraceArea) {\r\n setFieldValues(terraceArea);\r\n } else {\r\n clearFieldValues();\r\n }\r\n }\r\n\r\n function decimalPlaces(num) {\r\n const match = ('' + num).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\r\n\r\n if (!match) {\r\n return 0;\r\n }\r\n\r\n return Math.max(0, (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0));\r\n }\r\n\r\n if (lengthField && widthField && m2Field && deckingAreaText) {\r\n Array.from(calculateTriggers).forEach(trigger => {\r\n trigger.addEventListener('keyup',calculate);\r\n });\r\n }\r\n\r\n if (productSelector && productImage) {\r\n productSelector.addEventListener('change',function() {\r\n productImage.src = this.options[this.selectedIndex].value;\r\n });\r\n }\r\n\r\n if (printButton) {\r\n printButton.addEventListener('click', Terrasseberegner_print_result);\r\n }\r\n }\r\n}","export function setupInspirationFilter() {\r\n const inspirationFilter = event => {\r\n const element = event.target;\r\n const filterType = element.getAttribute('data-filter');\r\n const filterValue = [];\r\n let listFiltered = false;\r\n\r\n // Get values of the checked filters and check if list has been filtered by a different filter type\r\n inspirationFilters.forEach(filter => {\r\n if (filter.getAttribute('data-filter') === filterType && filter.checked) {\r\n filterValue.push(filter.value);\r\n }\r\n if (filter.getAttribute('data-filter') !== filterType && filter.checked) {\r\n listFiltered = true;\r\n }\r\n });\r\n\r\n // Only show matching items\r\n inspirationItems.forEach(item => {\r\n let itemInclude = false;\r\n\r\n //if (filterValue.length === 0 || filterValue.some(value => value.indexOf(item.getAttribute(`data-${filterType}`)) > -1)) {\r\n if (filterValue.length === 0) {\r\n itemInclude = true;\r\n } else {\r\n filterValue.forEach(value => {\r\n if (item.getAttribute(`data-${filterType}`).indexOf(value) != -1) {\r\n itemInclude = true;\r\n }\r\n });\r\n }\r\n\r\n if (itemInclude) {\r\n item.classList.remove(`js-hidden-${filterType}`);\r\n } else {\r\n item.classList.add(`js-hidden-${filterType}`);\r\n }\r\n });\r\n\r\n // Only check for available filters if list haven't been filtered by different filter type\r\n if (!listFiltered) {\r\n if (filterValue.length === 0) {\r\n inspirationFilterAvailability('reset');\r\n } else {\r\n inspirationFilterAvailability(filterType);\r\n }\r\n }\r\n\r\n if (inspirationList) {\r\n if (filterValue.length !== 0) {\r\n inspirationList.classList.add('js-filtered');\r\n } else {\r\n inspirationList.classList.remove('js-filtered');\r\n }\r\n }\r\n };\r\n\r\n const inspirationFilterAvailability = filterType => {\r\n if (filterType === 'reset') {\r\n inspirationFilters.forEach(filter => {\r\n filter.disabled = false;\r\n });\r\n } else {\r\n const filterValue = [];\r\n\r\n inspirationItems.forEach(item => {\r\n if (!item.classList.contains(`js-hidden-${filterType}`)) {\r\n filterValue.push(item.getAttribute('data-project-type'));\r\n filterValue.push(item.getAttribute('data-wood-type'));\r\n }\r\n });\r\n inspirationFilters.forEach(filter => {\r\n if (filter.getAttribute('data-filter') !== filterType) {\r\n if (!filter.checked && filterValue.some(value => value.indexOf(filter.value) > -1)) {\r\n filter.disabled = false;\r\n } else {\r\n filter.disabled = true;\r\n }\r\n }\r\n });\r\n }\r\n };\r\n\r\n const inspirationList = document.querySelector('.inspiration-overview .overview__list');\r\n const inspirationItems = document.querySelectorAll('.inspiration-overview .overview__item');\r\n const inspirationFilters = document.querySelectorAll('[data-action=\"inspiration-filter\"]');\r\n\r\n inspirationFilters.forEach(filter => {\r\n filter.addEventListener('change', inspirationFilter);\r\n });\r\n}","export const transitionEndEventName = detectStyleDeclatationName();\r\nexport const animationEndEventName = detectStyleDeclatationName('animation');\r\n\r\n/**\r\n * Detects which prefixed eventName is in CSSStyleDeclaration\r\n *\r\n * @param {string} eventTypeName - choose 'transition' or 'animation'\r\n * @returns {string}\r\n */\r\nexport function detectStyleDeclatationName(eventTypeName = 'transition') {\r\n const transitions = {\r\n transition: `${eventTypeName}end`,\r\n OTransition: `o${eventTypeName}end`,\r\n MozTransition: `${eventTypeName}end`,\r\n WebkitTransition: `webkit${eventTypeName}end`\r\n };\r\n\r\n const el = document.createElement('div');\r\n\r\n for (const t in transitions) {\r\n if (el.style[t] !== undefined) {\r\n return transitions[t];\r\n }\r\n }\r\n return '';\r\n}\r\n\r\n/**\r\n *\r\n * @param {HTMLElement} container - container to animate height of\r\n * @param {HTMLElement} classTarget [default = container] - target element that gets class\r\n * @param {Boolean} classOnBoth [default = false] - set class on both container and classTarget\r\n */\r\nexport function cssAnimateNewHeight(container, classTarget = container, classOnBoth = false) {\r\n let newHeight;\r\n const prevHeight = container.offsetHeight;\r\n\r\n const delayedClose = () => {\r\n if (classOnBoth) {\r\n container.classList.remove('open');\r\n classTarget.classList.remove('open');\r\n } else {\r\n classTarget.classList.remove('open');\r\n }\r\n\r\n container.removeEventListener(transitionEndEventName, delayedClose);\r\n };\r\n\r\n container.removeAttribute('style');\r\n\r\n if (classTarget.classList.contains('open')) {\r\n newHeight = 0;\r\n container.addEventListener(transitionEndEventName, delayedClose);\r\n\r\n if (classOnBoth) {\r\n classTarget.classList.remove('open');\r\n }\r\n } else {\r\n classTarget.classList.add('open');\r\n\r\n if (classOnBoth) {\r\n container.classList.add('open');\r\n }\r\n\r\n newHeight = container.offsetHeight;\r\n }\r\n\r\n container.style.height = `${prevHeight}px`;\r\n\r\n setTimeout(() => {\r\n container.style.height = `${newHeight}px`;\r\n }, 10);\r\n}","import { cssAnimateNewHeight } from '../utils/animation';\r\n\r\n/**\r\n * Attention\r\n * Be aware that this module is dependent on support for Element.prototype.closest\r\n * This is included as default in https://polyfill.io/v3/polyfill.min.js\r\n */\r\n\r\n /**\r\n * Get proper browser prefix for events such as 'ontransitionend' or 'onaminationend'\r\n * @param {Node} element Element to attach the event\r\n * @param {String} type The event you want a prefix for\r\n * @param {Function} callback The callback with the correct prefix\r\n */\r\nconst setPrefixedEvent = (element, type, callback) => {\r\n const prefixes = ['webkit', 'moz', 'MS', 'o', ''];\r\n\r\n prefixes.forEach((prefix) => {\r\n if (!prefix) {\r\n type = type.toLowerCase();\r\n }\r\n element.addEventListener(prefix + type, callback, false);\r\n });\r\n};\r\n\r\n// Used keycodes\r\nconst keycode = {\r\n space: 32,\r\n end: 35,\r\n home: 36,\r\n arrowUp: 38,\r\n arrowDown: 40\r\n};\r\n\r\n/**\r\n * Function that opens new accordion and if in a group closes the active accordion\r\n *\r\n * @param {object|HTMLElement} e - click event or tab element\r\n */\r\nconst accordionChange = (element) => {\r\n if (element) {\r\n const accordions = element.closest('.accordions');\r\n const accordionTarget = document.getElementById(element.getAttribute('aria-controls'));\r\n\r\n if (accordions) {\r\n accordions.querySelectorAll('.accordion').forEach((accordion) => {\r\n if (accordion === accordionTarget.closest('.accordion') && accordion.classList.contains('accordion--inactive')) {\r\n // Button\r\n accordion.querySelector('.accordion__item').setAttribute('aria-expanded', true);\r\n accordion.querySelector('.accordion__item').focus();\r\n\r\n // Content\r\n accordion.querySelector('.accordion__content').setAttribute('aria-hidden', false);\r\n accordion.querySelector('.accordion__content').style.height = accordion.querySelector('.accordion__content').scrollHeight + 'px';\r\n accordion.querySelector('.accordion__content').style.overflow = 'hidden';\r\n\r\n accordion.classList.remove('accordion--inactive');\r\n } else {\r\n // Button\r\n accordion.querySelector('.accordion__item').setAttribute('aria-expanded', false);\r\n\r\n // Content\r\n if (!accordion.classList.contains('accordion--inactive')) {\r\n accordion.querySelector('.accordion__content').setAttribute('aria-hidden', true);\r\n accordion.querySelector('.accordion__content').style.height = accordion.querySelector('.accordion__content').scrollHeight + 'px';\r\n accordion.querySelector('.accordion__content').style.overflow = 'hidden';\r\n\r\n setTimeout(() => {\r\n accordion.querySelector('.accordion__content').style.height = '0';\r\n }, 20);\r\n }\r\n\r\n accordion.classList.add('accordion--inactive');\r\n }\r\n });\r\n } else {\r\n const accordion = element.closest('.accordion');\r\n\r\n // Button\r\n element.setAttribute('aria-expanded', !(element.getAttribute('aria-expanded') === 'true'));\r\n element.focus();\r\n\r\n // Content\r\n accordionTarget.setAttribute('aria-hidden', !(accordionTarget.getAttribute('aria-hidden') === 'true'));\r\n accordionTarget.style.height = accordionTarget.scrollHeight + 'px';\r\n accordionTarget.style.overflow = 'hidden';\r\n\r\n if (!accordion.classList.contains('accordion--inactive')) {\r\n setTimeout(() => {\r\n accordionTarget.style.height = '0';\r\n }, 20);\r\n }\r\n\r\n accordion.classList.toggle('accordion--inactive');\r\n }\r\n }\r\n};\r\n\r\nconst accordionToggle = (event) => {\r\n if (!(event.ctrlKey || event.metaKey || event.shiftKey)) {\r\n event.preventDefault();\r\n }\r\n\r\n const element = event.target;\r\n\r\n accordionChange(element);\r\n};\r\n\r\nconst accordionTtransition = (event) => {\r\n const element = event.target;\r\n\r\n if (element.getAttribute('style')) {\r\n element.removeAttribute('style');\r\n }\r\n};\r\n\r\n\r\n/**\r\n * Initialise Accordions with this function\r\n * Will only run if given selector elements are found in DOM\r\n *\r\n * @param {string} selector - element selector string\r\n */\r\nexport function setupAccordions(selector = '[data-action=\"accordion-toggle\"]') {\r\n const accordionButtonToggle = document.querySelectorAll('[data-action=\"accordion-toggle\"]');\r\n\r\n accordionButtonToggle.forEach((button) => {\r\n button.addEventListener('click', accordionToggle);\r\n setPrefixedEvent(document.getElementById(button.getAttribute('aria-controls')), 'TransitionEnd', accordionTtransition);\r\n });\r\n};\r\n\r\nif (window.location.hash.startsWith('accordion', 1) && document.getElementById(window.location.hash.replace('#accordion-', ''))) {\r\n accordionChange(document.getElementById(document.getElementById(window.location.hash.replace('#accordion-', '')).getAttribute('aria-labelledby')));\r\n}\r\n\r\nwindow.addEventListener('hashchange', () => {\r\n if (window.location.hash.startsWith('accordion', 1) && document.getElementById(window.location.hash.replace('#', ''))) {\r\n accordionChange(document.getElementById(document.getElementById(window.location.hash.replace('#', '')).getAttribute('aria-labelledby')));\r\n }\r\n}, false);\r\n\r\nwindow.addEventListener('keydown', (event) => {\r\n const focusedElement = document.activeElement;\r\n const accordions = document.activeElement.closest('.accordions');\r\n\r\n if (focusedElement.getAttribute('data-action') === 'accordion-toggle') {\r\n if (event.keyCode === keycode.space) {\r\n // Toggle accordion\r\n event.preventDefault();\r\n accordionChange(focusedElement);\r\n }\r\n }\r\n if (focusedElement && accordions) {\r\n if (event.keyCode === keycode.arrowUp) {\r\n // Focus prevoius accordion\r\n if (focusedElement.closest('.accordion').previousElementSibling && focusedElement.closest('.accordion').previousElementSibling.querySelector('.accordion__item')) {\r\n event.preventDefault();\r\n focusedElement.closest('.accordion').previousElementSibling.querySelector('.accordion__item').focus();\r\n }\r\n }\r\n if (event.keyCode === keycode.arrowDown) {\r\n // Focus next accordion\r\n if (focusedElement.closest('.accordion').nextElementSibling && focusedElement.closest('.accordion').nextElementSibling.querySelector('.accordion__item')) {\r\n event.preventDefault();\r\n focusedElement.closest('.accordion').nextElementSibling.querySelector('.accordion__item').focus();\r\n }\r\n }\r\n if (event.keyCode === keycode.home) {\r\n // Focus first accordion\r\n if (accordions.querySelector('.accordion:first-child .accordion__item')) {\r\n event.preventDefault();\r\n accordions.querySelector('.accordion:first-child .accordion__item').focus();\r\n }\r\n }\r\n if (event.keyCode === keycode.end) {\r\n // Focus last accordion\r\n if (accordions.querySelector('.accordion:last-child .accordion__item')) {\r\n event.preventDefault();\r\n accordions.querySelector('.accordion:last-child .accordion__item').focus();\r\n }\r\n }\r\n }\r\n});","export function setupNewsFilter() {\r\n const newsFilter = event => {\r\n const element = event.target;\r\n const filterType = element.getAttribute('data-filter');\r\n const filterValue = [];\r\n\r\n // Get values of the checked filters\r\n newsFilters.forEach(filter => {\r\n if (filter.getAttribute('data-filter') === filterType && filter.checked && filter.value !== '') {\r\n filterValue.push(filter.value);\r\n }\r\n });\r\n\r\n // Only show matching items\r\n newsItems.forEach(item => {\r\n let itemInclude = false;\r\n\r\n if (filterValue.length === 0 || item.getAttribute(`data-${filterType}`).indexOf(filterValue[0]) != -1) {\r\n itemInclude = true;\r\n }\r\n if (itemInclude) {\r\n item.classList.remove(`js-hidden-${filterType}`);\r\n } else {\r\n item.classList.add(`js-hidden-${filterType}`);\r\n }\r\n });\r\n\r\n if (newsList) {\r\n if (filterValue.length !== 0) {\r\n newsList.classList.add('js-filtered');\r\n } else {\r\n newsList.classList.remove('js-filtered');\r\n }\r\n }\r\n };\r\n\r\n const newsList = document.querySelector('.news-overview .overview__list');\r\n const newsItems = document.querySelectorAll('.news-overview .overview__item');\r\n const newsFilters = document.querySelectorAll('[data-action=\"news-filter\"]');\r\n\r\n newsFilters.forEach(filter => {\r\n filter.addEventListener('change', newsFilter);\r\n });\r\n}","import { currentWindowHeight, currentWindowWidth } from '../utils/windowResize';\r\n\r\nexport function setupGalleries(snapToItems = false) {\r\n const galleries = Array.from(document.querySelectorAll('.gallery')).filter(x => x.querySelectorAll('.gallery__item').length > 0);\r\n\r\n Array.from(galleries).forEach(gallery => {\r\n const galleryImages = gallery.querySelectorAll('.gallery__image');\r\n let imagesTotalWidth;\r\n let imageCount = 0;\r\n\r\n function imageLoaded(e) {\r\n imageCount++;\r\n //imagesTotalWidth = e.currentTarget.offsetWidth();\r\n checkImages();\r\n }\r\n\r\n function imageError(e) {\r\n imageCount++;\r\n //imagesTotalWidth = e.currentTarget.offsetWidth();\r\n checkImages();\r\n }\r\n\r\n Array.from(galleryImages).forEach(image => {\r\n if (image.complete) {\r\n imageCount++;\r\n checkImages();\r\n } else {\r\n image.addEventListener('load', imageLoaded);\r\n image.addEventListener('error', imageError);\r\n }\r\n });\r\n\r\n function checkImages() {\r\n if (imageCount == galleryImages.length) {\r\n loadGallery();\r\n }\r\n }\r\n\r\n function loadGallery() {\r\n const maxPxPrSecond = 10000;\r\n const galleryWrap = gallery.querySelector('.gallery__list-wrap');\r\n const galleryList = gallery.querySelector('.gallery__list');\r\n const galleryItems = gallery.querySelectorAll('.gallery__item');\r\n const progressBar = gallery.querySelector('.gallery__slider-bar');\r\n const maxTranslate = 0;\r\n const minTranslate = galleryWrap.offsetWidth - galleryList.scrollWidth;\r\n\r\n let listAnimation = -1;\r\n\r\n gallery.setAttribute('data-max-translate', maxTranslate);\r\n gallery.setAttribute('data-min-translate', minTranslate);\r\n\r\n let move = false;\r\n let touch = false;\r\n\r\n // Start y and start x is where whe start touching the screen. Only set once at touchstart and mousedown\r\n let startX = -1;\r\n let startY = -1;\r\n\r\n // Updated as we move the mouse (when button is down) or slide the screen\r\n let moveX = -1;\r\n let moveY = -1;\r\n\r\n // Used to set the direction - do we need to slide left or right\r\n let direction = -1;\r\n\r\n // Let's save the distance between startX and moveX here so we know how much to move it around\r\n let distanceX = -1;\r\n\r\n // This is used for the current move. This + pxMoved is what we want to translate the slider\r\n let translateX = -1;\r\n\r\n // Lets update this every time we move the slider. We don't want to start from 0 each time\r\n let pxMoved = 0;\r\n\r\n // Did we move at all? Or just click / touch once. If not we don't want to move at all\r\n let moved = false;\r\n\r\n // Let's take a look at how much px. we moved pr. second when moving. Maybe we can use that to calculate if we want to slide a bit mmore - and maybe even bounce if we move more than the slider alows.\r\n let startTime = -1;\r\n let endTime = -1;\r\n let time = -1;\r\n\r\n // Let's know if we are currently sliding some extra px\r\n let animating = false;\r\n\r\n // Array to contain the animations steps\r\n let animationSteps = [];\r\n\r\n // Only the last part where we bounce back. The rest is in the \"getAnimationSteps\"\r\n function getBounceSteps(bouncePx) {\r\n let lastMove = 0;\r\n let nextMove = 0;\r\n let bouncedExtra = 0;\r\n\r\n function getNextBounceMove() {\r\n if (lastMove == 0) {\r\n nextMove = direction == 'left' ? 5 : -5;\r\n } else {\r\n nextMove = lastMove * 1.1;\r\n }\r\n\r\n if (direction == 'left') {\r\n if ((bouncedExtra + nextMove) > (bouncePx * -1)) {\r\n nextMove = (bouncePx * -1) - bouncedExtra;\r\n }\r\n } else if (direction == 'right') {\r\n if ((bouncedExtra + nextMove) < (bouncePx * -1)) {\r\n nextMove = (bouncePx * -1) - bouncedExtra;\r\n }\r\n }\r\n\r\n lastMove = nextMove;\r\n\r\n return nextMove;\r\n }\r\n\r\n if (direction == 'left') {\r\n while (bouncedExtra < (bouncePx * -1)) {\r\n nextMove = getNextBounceMove(lastMove);\r\n bouncedExtra = bouncedExtra + nextMove;\r\n\r\n animationSteps.push(nextMove);\r\n }\r\n } else if (direction == 'right') {\r\n while (bouncedExtra > (bouncePx * -1)) {\r\n nextMove = getNextBounceMove(lastMove);\r\n bouncedExtra = bouncedExtra + nextMove;\r\n\r\n animationSteps.push(nextMove);\r\n }\r\n }\r\n }\r\n\r\n // Get the animtionsteps to animate the move we made - including bounce mvoes (above) if we did it really fast ;-)\r\n function getAnimationSteps(moveExtra) {\r\n const maxBounce = gallery.offsetWidth / 3;\r\n const maxPrFrame = 100;\r\n animationSteps = [];\r\n let lastMove = 0;\r\n let nextMove = 0;\r\n let movedTotal = 0;\r\n let bouncePx = 0;\r\n let bounce = false;\r\n\r\n if (direction == 'left') {\r\n if (translateX + moveExtra < minTranslate) {\r\n bounce = true;\r\n }\r\n } else if (direction == 'right') {\r\n if (translateX + moveExtra > 0) {\r\n bounce = true;\r\n }\r\n }\r\n\r\n if (bounce) {\r\n if (direction == 'left') {\r\n //itemIndex = galleryItems.length - 1;\r\n\r\n // TODO: When bouncing its the opposite way, so no * -1 here... Remeber in getBounceSteps...\r\n if ((pxMoved + moveExtra) < (minTranslate - maxBounce)) {\r\n bouncePx = maxBounce * -1;\r\n } else {\r\n bouncePx = (pxMoved + moveExtra) - minTranslate;\r\n }\r\n\r\n if (pxMoved + moveExtra < minTranslate) {\r\n moveExtra = minTranslate - pxMoved;\r\n moveExtra = moveExtra + bouncePx;\r\n }\r\n } else if (direction == 'right') {\r\n //itemIndex = 0;\r\n\r\n if (pxMoved + moveExtra > (maxTranslate + maxBounce)) {\r\n bouncePx = maxBounce;\r\n } else {\r\n bouncePx = (pxMoved + moveExtra);\r\n }\r\n\r\n if (pxMoved + moveExtra > maxTranslate) {\r\n moveExtra = maxTranslate - pxMoved;\r\n moveExtra = moveExtra + bouncePx;\r\n }\r\n }\r\n\r\n //updateNav(itemIndex);\r\n } else {\r\n if (snapToItems) {\r\n if (direction == 'left') {\r\n const newPosition = (moveExtra + pxMoved) * -1;\r\n const newIndex = Math.round((newPosition + itemSnapStart) / itemWidth);\r\n\r\n let moveTotal = 0;\r\n\r\n if (newIndex == 0) {\r\n moveTotal = 0;\r\n } else {\r\n if (galleryItems.length - 1 >= newIndex) {\r\n moveTotal = (galleryItems[newIndex].offsetLeft * -1) - 10;\r\n }\r\n }\r\n\r\n moveExtra = moveTotal - pxMoved;\r\n // = newIndex;\r\n\r\n //updateNav(itemIndex);\r\n } else if (direction == 'right') {\r\n const newPosition = (moveExtra + pxMoved) * -1;\r\n const newIndex = Math.round((newPosition + itemSnapStart) / itemWidth) - 1;\r\n\r\n let moveTotal = 0;\r\n\r\n if (newIndex == 0) {\r\n moveTotal = 10;\r\n } else {\r\n if (galleryItems.length - 1 >= newIndex) {\r\n moveTotal = (galleryItems[newIndex].offsetLeft * -1) + 10;\r\n }\r\n }\r\n\r\n moveExtra = moveTotal - pxMoved;\r\n //itemIndex = newIndex;\r\n\r\n //updateNav(itemIndex);\r\n }\r\n }\r\n }\r\n\r\n let movedExtra = 0;\r\n\r\n function getNextMove() {\r\n if (lastMove == 0) {\r\n nextMove = direction == 'left' ? -5 : 5;\r\n } else {\r\n nextMove = lastMove * 1.1;\r\n }\r\n\r\n if (direction == 'left') {\r\n if ((nextMove * -1) > maxPrFrame) {\r\n nextMove = maxPrFrame * -1;\r\n }\r\n\r\n if ((movedExtra + nextMove) < moveExtra) {\r\n nextMove = moveExtra - movedExtra;\r\n }\r\n } else if (direction == 'right') {\r\n if (nextMove > maxPrFrame) {\r\n nextMove = maxPrFrame;\r\n }\r\n\r\n if ((movedExtra + nextMove) > moveExtra) {\r\n nextMove = moveExtra - movedExtra;\r\n }\r\n }\r\n\r\n movedExtra = movedExtra + nextMove;\r\n lastMove = nextMove;\r\n\r\n return nextMove;\r\n }\r\n\r\n if (bounce) {\r\n getBounceSteps(bouncePx);\r\n }\r\n\r\n if (direction == 'left') {\r\n while (movedTotal > moveExtra) {\r\n nextMove = getNextMove(lastMove);\r\n movedTotal = movedTotal + nextMove;\r\n\r\n animationSteps.push(nextMove);\r\n }\r\n\r\n animationSteps.push(5);\r\n } else if (direction == 'right') {\r\n while (movedTotal < moveExtra) {\r\n nextMove = getNextMove(lastMove);\r\n movedTotal = movedTotal + nextMove;\r\n\r\n animationSteps.push(nextMove);\r\n }\r\n\r\n animationSteps.push(-5);\r\n }\r\n\r\n animationSteps = animationSteps.reverse();\r\n\r\n return animationSteps;\r\n }\r\n\r\n // Start gallery (at touch start and mousedown)\r\n function startGallery(e) {\r\n move = true;\r\n startTime = new Date();\r\n\r\n if (e.changedTouches) {\r\n touch = true;\r\n\r\n startX = e.changedTouches[0].pageX;\r\n startY = e.changedTouches[0].pageY;\r\n } else {\r\n startX = e.clientX;\r\n startY = e.clientY;\r\n\r\n if (e.target.closest('a')) {\r\n e.preventDefault();\r\n }\r\n\r\n document.addEventListener('mousemove', documentMouseMove);\r\n }\r\n }\r\n\r\n // Move gallery (when swiping and moving mouse)\r\n function moveGallery(e) {\r\n if (e.touches) {\r\n if (e.touches.length == 1) {\r\n move = true;\r\n moved = true;\r\n\r\n moveX = e.targetTouches[0].pageX;\r\n moveY = e.targetTouches[0].pageY;\r\n }\r\n } else {\r\n moved = true;\r\n\r\n moveX = e.clientX;\r\n moveY = e.clientY;\r\n }\r\n\r\n if (move) {\r\n distanceX = startX - moveX;\r\n let distanceY = startY - moveY;\r\n\r\n direction = startX > moveX ? 'left' : 'right';\r\n\r\n distanceX = distanceX < 0 ? distanceX * -1 : distanceX;\r\n distanceY = distanceY < 0 ? distanceY * -1 : distanceY;\r\n\r\n if (distanceX > distanceY) {\r\n if (e.touches) {\r\n e.preventDefault();\r\n }\r\n\r\n moveList();\r\n }\r\n }\r\n }\r\n\r\n // End gallery (touch end and mouse up)\r\n function endGallery(e) {\r\n if (moved) {\r\n if (!touch) {\r\n document.removeEventListener('mousemove', documentMouseMove);\r\n }\r\n\r\n pxMoved = translateX;\r\n\r\n endTime = new Date();\r\n\r\n if (startTime != -1) {\r\n time = (endTime.getTime() - startTime.getTime()) / 1000;\r\n\r\n let pxPrSecond = distanceX / time;\r\n pxPrSecond = pxPrSecond >= 0 ? pxPrSecond : pxPrSecond * -1;\r\n\r\n if (pxPrSecond > maxPxPrSecond) {\r\n pxPrSecond = maxPxPrSecond;\r\n }\r\n\r\n if (pxPrSecond > 500) {\r\n moveListExtra(pxPrSecond);\r\n } else {\r\n resetGallery();\r\n }\r\n } else {\r\n resetGallery();\r\n }\r\n }\r\n }\r\n\r\n // Reset gallery variables\r\n function resetGallery() {\r\n if (listAnimation != -1) {\r\n cancelAnimationFrame(listAnimation);\r\n listAnimation = -1;\r\n }\r\n\r\n move = false;\r\n\r\n startX = -1;\r\n startY = -1;\r\n\r\n moveX = -1;\r\n moveY = -1;\r\n\r\n direction = -1;\r\n\r\n distanceX = -1;\r\n\r\n translateX = -1;\r\n\r\n touch = false;\r\n\r\n startTime = -1;\r\n endTime = -1;\r\n time = -1;\r\n\r\n animating = false;\r\n\r\n setTimeout(function() {\r\n moved = false;\r\n }, 50);\r\n }\r\n\r\n if (progressBar) {\r\n const progress = progressBar.querySelector('.gallery__slider-bar__progress');\r\n const maxScale = progressBar.offsetWidth;\r\n const scalePrPx = maxScale / (minTranslate * -1);\r\n\r\n //progress.setAttribute('data-max-scale',maxScale);\r\n progress.setAttribute('data-scale-pr-px',scalePrPx);\r\n }\r\n\r\n // Move list - just when swiping and moving mouse around\r\n function moveList() {\r\n translateX = direction == 'left' ? distanceX * -1 : distanceX;\r\n\r\n let newTranslateX = translateX + pxMoved;\r\n\r\n // ---------- RP - start Keflico specfic stuff\r\n if (newTranslateX <= 0 && newTranslateX >= minTranslate) {\r\n if (progressBar) {\r\n const progress = progressBar.querySelector('.gallery__slider-bar__progress');\r\n const scalePrPx = progress.getAttribute('data-scale-pr-px');\r\n const scale = (newTranslateX * -1) * scalePrPx;\r\n progress.style.transform = `translateZ(0) scaleX(${scale})`;\r\n }\r\n }\r\n // ---------- RP - end Keflico specfic stuff\r\n\r\n newTranslateX = newTranslateX > 0 ? 0 : newTranslateX;\r\n newTranslateX = newTranslateX < minTranslate ? minTranslate : newTranslateX;\r\n\r\n galleryList.style.transform = `translate3d(${newTranslateX}px,0,0)`;\r\n\r\n moved = true;\r\n translateX = newTranslateX;\r\n }\r\n\r\n function galleryTransitionEnd() {\r\n galleryList.style.transition = null;\r\n galleryList.removeEventListener('transitionend', galleryTransitionEnd);\r\n }\r\n\r\n // Move list extra if we did it really fast ;-)\r\n function moveListExtra(pxPrSecond) {\r\n animating = true;\r\n\r\n let moveExtra = (pxPrSecond / 100000000) * (pxPrSecond * pxPrSecond);\r\n\r\n if (touch) {\r\n const _pxPrSecond = pxPrSecond * 2;\r\n moveExtra = (_pxPrSecond / 100000000) * (_pxPrSecond * _pxPrSecond);\r\n }\r\n\r\n if (direction == 'left') {\r\n moveExtra = moveExtra * -1;\r\n }\r\n\r\n let newTranslateX = -1;\r\n let movedExtra = 0;\r\n let animationStepIndex = 0;\r\n\r\n const animationSteps = getAnimationSteps(moveExtra);\r\n\r\n function animateList() {\r\n if (animationStepIndex + 1 >= animationSteps.length) {\r\n if (newTranslateX != -1) {\r\n translateX = newTranslateX;\r\n pxMoved = translateX;\r\n }\r\n\r\n resetGallery();\r\n } else {\r\n movedExtra = movedExtra + animationSteps[animationStepIndex];\r\n animationStepIndex++;\r\n movedExtra = movedExtra;\r\n\r\n newTranslateX = translateX + movedExtra;\r\n galleryList.style.transform = `translate3d(${newTranslateX}px,0,0)`;\r\n\r\n // ---------- RP - start Keflico specfic stuff\r\n if (newTranslateX <= 0 && newTranslateX >= minTranslate) {\r\n if (progressBar) {\r\n const progress = progressBar.querySelector('.gallery__slider-bar__progress');\r\n const scalePrPx = progress.getAttribute('data-scale-pr-px');\r\n const scale = (newTranslateX * -1) * scalePrPx;\r\n progress.style.transform = `translateZ(0) scaleX(${scale})`;\r\n }\r\n }\r\n // ---------- RP - end Keflico specfic stuff\r\n\r\n requestAnimationFrame(animateList);\r\n }\r\n }\r\n\r\n listAnimation = requestAnimationFrame(animateList);\r\n }\r\n\r\n // Events\r\n function galleryTouchStart(e) {\r\n if (!animating) {\r\n resetGallery();\r\n\r\n if (e.touches.length == 1) {\r\n startGallery(e);\r\n }\r\n }\r\n }\r\n\r\n function galleryTouchMove(e) {\r\n if (!animating) {\r\n moveGallery(e);\r\n }\r\n }\r\n\r\n function galleryTouchEnd(e) {\r\n if (!animating) {\r\n endGallery();\r\n }\r\n }\r\n\r\n function galleryTouchCancel(e) {\r\n if (!animating) {\r\n resetGallery();\r\n }\r\n }\r\n\r\n function documentMouseUp(e) {\r\n if (!animating) {\r\n endGallery();\r\n }\r\n }\r\n\r\n function documentMouseMove(e) {\r\n if (!animating) {\r\n moveGallery(e);\r\n }\r\n }\r\n\r\n function galleryMouseDown(e) {\r\n if (!animating) {\r\n resetGallery();\r\n startGallery(e);\r\n }\r\n }\r\n\r\n galleryWrap.addEventListener('touchstart', galleryTouchStart);\r\n galleryWrap.addEventListener('touchmove', galleryTouchMove);\r\n galleryWrap.addEventListener('touchend', galleryTouchEnd);\r\n galleryWrap.addEventListener('touchcancel', galleryTouchCancel);\r\n document.addEventListener('mouseup', documentMouseUp);\r\n galleryWrap.addEventListener('mousedown', galleryMouseDown);\r\n }\r\n });\r\n}","const classNames = {\r\n activeBtn: 'filter__tab--active',\r\n hiddenItem: 'js-hidden'\r\n};\r\n\r\n/**\r\n *\r\n * @param {HTMLElement} container\r\n *\r\n * @constructor\r\n */\r\nexport class Filter {\r\n\r\n /**\r\n * The constructor is fired once the class is instantiated.\r\n *\r\n * @param {HTMLElement} container - Element containing filter options (Could be .filter__tabs or .filter__select)\r\n */\r\n constructor(container) {\r\n if (container) {\r\n this.dom = {\r\n container,\r\n filters: container.querySelectorAll('[data-filter]'),\r\n allFilter: container.querySelector('[data-filter=\"*\"]'),\r\n targetContainer: document.body.querySelector(container.getAttribute('data-target-container'))\r\n };\r\n\r\n this.settings = {\r\n filterType: container.getAttribute('data-action')\r\n };\r\n\r\n if (this.dom.targetContainer) {\r\n for (let i = 0; i < this.dom.filters.length; i++) {\r\n\r\n const filter = this.dom.filters[i];\r\n const itemCountReplace = filter.getAttribute('data-item-count-replace');\r\n\r\n if (filter.tagName === 'BUTTON') {\r\n filter.addEventListener('click', e => this.filterHandler(e));\r\n } else {\r\n filter.addEventListener('change', e => this.filterHandler(e));\r\n\r\n if (itemCountReplace) {\r\n this.replaceWithNumberOfItems(filter, itemCountReplace);\r\n }\r\n }\r\n }\r\n\r\n } else {\r\n window.console.warn('Can\\'t find [data-target-container] on filter container: ', container);\r\n }\r\n } else {\r\n window.console.warn('Filter container missing');\r\n }\r\n }\r\n\r\n static deselectRadio(e) {\r\n e.target.checked = !e.target.checked;\r\n e.target.removeEventListener('click', Filter.deselectRadio);\r\n\r\n this.filterHandler(e);\r\n }\r\n\r\n /**\r\n * Filter function that compares selected filter values with filter-values on filter-item.\r\n * Added hidden-class to items that hasn't got the selected filter value.\r\n *\r\n * @param {HTMLElement} e - event (click or change event\r\n */\r\n filterHandler(e) {\r\n const filter = e.target;\r\n const filterItems = this.dom.targetContainer.querySelectorAll('[data-filter-value]');\r\n const isButton = filter.tagName === 'BUTTON';\r\n const filterValue = isButton ? filter.getAttribute('data-filter') : filter.value;\r\n\r\n if (isButton) {\r\n if (this.settings.filterType === 'filter-switch') {\r\n\r\n for (let i = 0; i < this.dom.filters.length; i++) {\r\n this.dom.filters[i].classList.remove(classNames.activeBtn);\r\n }\r\n\r\n filter.classList.add(classNames.activeBtn);\r\n } else {\r\n if (this.dom.allFilter && filter != this.dom.allFilter) {\r\n this.dom.allFilter.classList.remove(classNames.activeBtn);\r\n } else {\r\n for (let i = 0; i < this.dom.filters.length; i++) {\r\n if (this.dom.filters[i].tagName === 'SELECT') {\r\n // This is a small hack to avoid misleeding results if selector is not reset\r\n // assumes that your selector has a default value of '*'\r\n this.dom.filters[i].value = '*';\r\n } else {\r\n this.dom.filters[i].classList.remove(classNames.activeBtn);\r\n }\r\n }\r\n }\r\n\r\n if (!filter.classList.contains(classNames.activeBtn)) {\r\n filter.classList.add(classNames.activeBtn);\r\n } else {\r\n filter.classList.remove(classNames.activeBtn);\r\n }\r\n }\r\n } else if (filter.type === 'radio') {\r\n const name = filter.name;\r\n const siblingRadios = this.dom.container.querySelectorAll(`[name=\"${name}\"]`);\r\n\r\n for (let r = 0; r < siblingRadios.length; r++) {\r\n const radio = siblingRadios[r];\r\n radio.removeEventListener('click', Filter.deselectRadio);\r\n }\r\n\r\n filter.addEventListener('click', Filter.deselectRadio.bind(this));\r\n }\r\n\r\n if (this.settings.filterType === 'filter-switch') {\r\n for (let i = 0; i < filterItems.length; i++) {\r\n const item = filterItems[i];\r\n let itemFilterValues = item.getAttribute('data-filter-value').split(',');\r\n const cleanFilterValue = filterValue.trim().toLowerCase();\r\n itemFilterValues = itemFilterValues.map(value => value.trim().toLowerCase());\r\n\r\n if (filterValue !== '*' && itemFilterValues.indexOf(cleanFilterValue) === -1) {\r\n item.classList.add(classNames.hiddenItem);\r\n } else {\r\n item.classList.remove(classNames.hiddenItem);\r\n }\r\n }\r\n } else {\r\n const filterValues = Filter.getSetValues(this.dom.filters);\r\n const isComboFilter = this.settings.filterType === 'filter-combo';\r\n\r\n for (let i = 0; i < filterItems.length; i++) {\r\n const item = filterItems[i];\r\n let itemFilterValues = item.getAttribute('data-filter-value').split(',');\r\n let showItem = !isComboFilter;\r\n\r\n itemFilterValues = itemFilterValues.map(value => value.trim().toLowerCase());\r\n\r\n if (filter === this.dom.allFilter && this.dom.allFilter.classList.contains(classNames.activeBtn)) {\r\n showItem = true;\r\n } else {\r\n for (let i = 0; i < filterValues.length; i++) {\r\n const value = filterValues[i];\r\n const cleanValue = value.trim().toLowerCase();\r\n\r\n if (isComboFilter) {\r\n if (itemFilterValues.indexOf(cleanValue) > -1) {\r\n showItem = true;\r\n\r\n break;\r\n }\r\n } else if (cleanValue != '*' && itemFilterValues.indexOf(cleanValue) === -1) {\r\n showItem = false;\r\n }\r\n }\r\n }\r\n\r\n if (!showItem) {\r\n item.classList.add(classNames.hiddenItem);\r\n } else {\r\n item.classList.remove(classNames.hiddenItem);\r\n }\r\n }\r\n }\r\n\r\n // Hide empty Filter sections\r\n const sections = this.dom.targetContainer.querySelectorAll('[data-filter-section]');\r\n\r\n if (sections.length) {\r\n for (let s = 0; s < sections.length; s++) {\r\n const section = sections[s];\r\n const itemsShownInSection = section.querySelectorAll('[data-filter-value]:not(.hidden)');\r\n\r\n if (itemsShownInSection.length < 1) {\r\n section.classList.add(classNames.hiddenItem);\r\n } else {\r\n section.classList.remove(classNames.hiddenItem);\r\n }\r\n }\r\n }\r\n }\r\n\r\n static getSetValues(filters) {\r\n const valArray = [];\r\n\r\n // loop through list of filters\r\n for (let i = 0, len = filters.length; i < len; i++) {\r\n const filter = filters[i];\r\n if (filter.tagName === 'SELECT') {\r\n if (filter.value !== '*' && filter.value !== '') {\r\n valArray.push(filter.value);\r\n }\r\n } else if (filter.tagName === 'BUTTON') {\r\n if (filter.classList.contains(classNames.activeBtn)) {\r\n valArray.push(filter.getAttribute('data-filter'));\r\n }\r\n } else {\r\n if (filter.checked && filter.value !== '*') { // radio checked?\r\n valArray.push(filter.value); // if so, add its value to array\r\n }\r\n }\r\n }\r\n return valArray; // return value of checked radio or undefined if none checked\r\n }\r\n\r\n replaceWithNumberOfItems(element, replaceValue) {\r\n const options = element.children;\r\n const items = this.dom.targetContainer.querySelectorAll('[data-filter-value]');\r\n\r\n if (options) {\r\n for (let i = 0; i < options.length; i++) {\r\n const option = options[i];\r\n\r\n if (option.value !== '*' && option.value !== '') {\r\n let count = 0;\r\n const optionStr = option.innerText;\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n let itemFilterValues = items[i].getAttribute('data-filter-value').split(',');\r\n\r\n itemFilterValues = itemFilterValues.map(value => value.trim().toLowerCase());\r\n\r\n const cleanValue = option.value.trim().toLowerCase();\r\n\r\n if (itemFilterValues.indexOf(cleanValue) > -1) {\r\n count++;\r\n }\r\n }\r\n\r\n option.innerText = optionStr.replace(replaceValue, count);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function setupFilters(selector = '[data-action*=\"filter\"]') {\r\n const filterContainers = document.body.querySelectorAll(selector);\r\n\r\n for (let i = 0; i < filterContainers.length; i++) {\r\n void new Filter(filterContainers[i]);\r\n }\r\n}\r\n","export function setupDeliveryDates() {\r\n const deliveryDates = document.querySelector('.delivery-dates');\r\n\r\n if (deliveryDates) {\r\n const deliveryDatesSearchField = deliveryDates.querySelector('.delivery-dates__zip');\r\n const deliveryDatesSearchResultText = deliveryDates.querySelector('.delivery-dates__search-result-text');\r\n const deliveryDatesZipPlaceholder = deliveryDates.querySelector('.delivery-dates__zip-placeholder');\r\n const deliveryDatesDaysPlaceholder = deliveryDates.querySelector('.delivery-dates__days-placeholder');\r\n const deliveryDatesErrorMessagePlaceholder = deliveryDates.querySelector('.delivery-dates__error-message-placeholder');\r\n const errorMessage = deliveryDates.getAttribute('data-error-message');\r\n\r\n function showSearchResultText() {\r\n deliveryDatesSearchResultText.classList.add('js-show');\r\n }\r\n\r\n function hideSearchResultText() {\r\n deliveryDatesSearchResultText.classList.remove('js-show');\r\n }\r\n\r\n function showErrorMessage() {\r\n deliveryDatesErrorMessagePlaceholder.textContent = errorMessage;\r\n }\r\n\r\n function hideErrorMessage() {\r\n deliveryDatesErrorMessagePlaceholder.textContent = '';\r\n }\r\n\r\n function searchZipCode(zipCode) {\r\n const jsonUrl = `${window.location.protocol}//${window.location.hostname}/Files/Templates/Designs/keflico/deliverydates.json`;\r\n const request = new XMLHttpRequest();\r\n\r\n request.open('GET', jsonUrl, true);\r\n\r\n request.onload = function () {\r\n if (request.status >= 200 && request.status < 400) {\r\n const data = JSON.parse(request.responseText);\r\n const searchData = data.deliveryZipCodes.filter(x => x.zipCode == zipCode);\r\n\r\n if (searchData.length == 1) {\r\n const areaId = searchData[0].areaId;\r\n const areaData = data.deliveryAreas.filter(x => x.id == areaId);\r\n const weekdays = data.weekdays;\r\n\r\n if (areaData.length == 1) {\r\n const areaDays = areaData[0].days;\r\n\r\n deliveryDatesZipPlaceholder.textContent = zipCode;\r\n\r\n if (areaDays != '0,1,2,3,4') {\r\n const daysArray = areaDays.split(',');\r\n let daysText = '';\r\n\r\n daysArray.forEach((day,index) => {\r\n if (index + 1 < daysArray.length) {\r\n if (daysText.length > 0) {\r\n daysText += `, ${weekdays[day]}`;\r\n } else {\r\n daysText = weekdays[day];\r\n }\r\n } else {\r\n if (daysText.length > 0) {\r\n daysText += ` og ${weekdays[day]}`;\r\n } else {\r\n daysText = weekdays[day];\r\n }\r\n }\r\n });\r\n\r\n showSearchResultText();\r\n deliveryDatesDaysPlaceholder.textContent = daysText;\r\n } else {\r\n showSearchResultText();\r\n deliveryDatesDaysPlaceholder.textContent = 'Alle hverdage';\r\n }\r\n\r\n hideErrorMessage();\r\n } else {\r\n hideSearchResultText();\r\n showErrorMessage();\r\n }\r\n } else {\r\n hideSearchResultText();\r\n showErrorMessage();\r\n }\r\n }\r\n };\r\n\r\n request.onerror = function () {\r\n\r\n };\r\n\r\n request.send();\r\n }\r\n\r\n function searchDates(e) {\r\n const searchValue = e.currentTarget.value.trim();\r\n\r\n if (searchValue.length == 4) {\r\n searchZipCode(searchValue);\r\n } else {\r\n deliveryDatesDaysPlaceholder.textContent = '';\r\n hideSearchResultText();\r\n hideErrorMessage();\r\n }\r\n }\r\n\r\n if (\r\n deliveryDatesSearchField &&\r\n deliveryDatesSearchResultText &&\r\n deliveryDatesZipPlaceholder &&\r\n deliveryDatesDaysPlaceholder &&\r\n deliveryDatesErrorMessagePlaceholder\r\n ) {\r\n deliveryDatesSearchField.addEventListener('keyup',searchDates);\r\n }\r\n }\r\n}","const mapsApiKey = 'AIzaSyCbKYeVX4cShpcdmOjFU7rYQtma0lKJxKo';\r\nconst mapStyles = [{featureType:\"all\",elementType:\"labels.text.fill\",stylers:[{saturation:36},{color:\"#333333\"},{lightness:40}]},{featureType:\"all\",elementType:\"labels.text.stroke\",stylers:[{visibility:\"on\"},{color:\"#ffffff\"},{lightness:16}]},{featureType:\"all\",elementType:\"labels.icon\",stylers:[{visibility:\"off\"}]},{featureType:\"administrative\",elementType:\"geometry.fill\",stylers:[{color:\"#fefefe\"},{lightness:20},{visibility:\"on\"}]},{featureType:\"administrative\",elementType:\"geometry.stroke\",stylers:[{color:\"#fefefe\"},{lightness:17},{weight:1.2},{visibility:\"on\"}]},{featureType:\"administrative\",elementType:\"labels\",stylers:[{visibility:\"on\"}]},{featureType:\"landscape\",elementType:\"geometry\",stylers:[{color:\"#e8e5df\"},{lightness:20},{visibility:\"on\"}]},{featureType:\"poi\",elementType:\"geometry\",stylers:[{color:\"#f5f5f5\"},{lightness:21}]},{featureType:\"poi.park\",elementType:\"geometry\",stylers:[{color:\"#dedede\"},{lightness:21},{visibility:\"off\"}]},{featureType:\"road.highway\",elementType:\"geometry.fill\",stylers:[{color:\"#ffffff\"},{lightness:17},{visibility:\"off\"}]},{featureType:\"road.highway\",elementType:\"geometry.stroke\",stylers:[{color:\"#ffffff\"},{lightness:29},{weight:.2},{visibility:\"off\"}]},{featureType:\"road.arterial\",elementType:\"geometry\",stylers:[{color:\"#ffffff\"},{lightness:18},{visibility:\"off\"}]},{featureType:\"road.local\",elementType:\"geometry\",stylers:[{color:\"#ffffff\"},{lightness:16},{visibility:\"off\"}]},{featureType:\"transit\",elementType:\"geometry\",stylers:[{color:\"#f2f2f2\"},{lightness:19},{visibility:\"off\"}]},{featureType:\"water\",elementType:\"geometry\",stylers:[{visibility:\"on\"},{color:\"#c6dae7\"},{lightness:\"0\"},{gamma:\"1.00\"}]}];\r\nconst userLocation = {\r\n lat: '',\r\n lng: ''\r\n};\r\n\r\nfunction loadScript(url) {\r\n return new Promise(function (resolve, reject) {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.async = false;\r\n\r\n script.onload = function () {\r\n resolve(url);\r\n };\r\n\r\n script.onerror = function () {\r\n reject(url);\r\n };\r\n\r\n document.body.appendChild(script);\r\n });\r\n}\r\n\r\n/**\r\n * Fake pagination that shows the next 10 retailers.\r\n */\r\n//function loadMarkers(event) {\r\nfunction loadMarkers(mapObject) {\r\n const markersHidden = mapObject.mapContainer.querySelectorAll('[data-action=\"marker\"].js-hide');\r\n const size = 10;\r\n\r\n for (let r = 0, rl = size; r < rl; r++) {\r\n if (markersHidden[r]) {\r\n markersHidden[r].classList.remove('js-hide');\r\n }\r\n }\r\n\r\n if (mapObject.markerSearchInput) {\r\n markersShown(mapObject.mapContainer);\r\n }\r\n}\r\n\r\n/**\r\n * Hides the \"Load more\"-button when all retailers are shown.\r\n */\r\nfunction markersExtra(mapContainer) {\r\n const markersExtra = mapContainer.querySelectorAll('[data-action=\"marker\"].js-hide:not(.js-hidden-search):not(.js-hidden-bounds)');\r\n\r\n if (markersExtra.length === 0) {\r\n mapContainer.querySelector('.retailers__list .retailers__list-more') ? mapContainer.querySelector('.retailers__list .retailers__list-more').classList.add('js-hide') : false;\r\n } else {\r\n mapContainer.querySelector('.retailers__list .retailers__list-more') ? mapContainer.querySelector('.retailers__list .retailers__list-more').classList.remove('js-hide') : false;\r\n }\r\n}\r\n\r\n/**\r\n * Shows a \"No results\"-message if no retailers match the search or inside map bounds.\r\n */\r\nfunction markersShown(mapContainer) {\r\n const markersShown = mapContainer.querySelectorAll('[data-action=\"marker\"]:not(.js-hidden-search):not(.js-hidden-bounds)');\r\n\r\n if (markersShown.length === 0) {\r\n mapContainer.querySelector('.retailers__list .retailers__no-results') ? mapContainer.querySelector('.retailers__list .retailers__no-results').classList.remove('js-hide') : false;\r\n } else {\r\n mapContainer.querySelector('.retailers__list .retailers__no-results') ? mapContainer.querySelector('.retailers__list .retailers__no-results').classList.add('js-hide') : false;\r\n }\r\n\r\n markersExtra(mapContainer);\r\n}\r\n\r\n/**\r\n * Simple search to match 1:1 what the user has typed. Once search is intiated all retailers are shown (if inside map bounds).\r\n */\r\nfunction markerSearch(mapObject) {\r\n const filterValue = mapObject.markerSearchInput.value;\r\n const markersNew = [];\r\n\r\n mapObject.markerElements.forEach(markerElement => {\r\n const marker = mapObject.markers.filter(marker => marker.id === markerElement.id)[0];\r\n\r\n markerElement.classList.remove('js-hide');\r\n\r\n if (filterValue === '') {\r\n markerElement.classList.remove('js-hidden-search');\r\n\r\n marker.setMap(mapObject.map);\r\n markersNew.push(marker);\r\n } else if (Array.from(markerElement.querySelectorAll('[data-searchable=\"true\"]')).filter(x => x.textContent.toLowerCase().indexOf(filterValue.toLowerCase()) > -1).length > 0) {\r\n markerElement.classList.remove('js-hidden-search');\r\n\r\n marker.setMap(mapObject.map);\r\n markersNew.push(marker);\r\n } else {\r\n markerElement.classList.add('js-hidden-search');\r\n\r\n marker.setMap(null);\r\n }\r\n });\r\n\r\n if (mapObject.useCluster) {\r\n mapObject.cluster.clearMarkers();\r\n mapObject.cluster.addMarkers(markersNew);\r\n }\r\n\r\n if (mapObject.markerSearchInput) {\r\n markersShown(mapObject.mapContainer);\r\n }\r\n}\r\n\r\nfunction showUserLocation(mapObject) {\r\n if (navigator.geolocation) {\r\n const geolocationSuccess = position => {\r\n addUserMarker('user', 'User location', new google.maps.LatLng(position.coords.latitude, position.coords.longitude), mapObject);\r\n markersSort(mapObject.markerElements, 'distance');\r\n };\r\n\r\n const geolocationError = error => {\r\n alert(`ERROR(${error.code}): ${error.message}`);\r\n };\r\n\r\n const geolocationOptions = {\r\n enableHighAccuracy: true,\r\n timeout: 60000,\r\n maximumAge: Infinity\r\n };\r\n\r\n navigator.geolocation.getCurrentPosition(geolocationSuccess, geolocationError, geolocationOptions);\r\n }\r\n}\r\n\r\n/**\r\n * Converts degrees to radians.\r\n *\r\n * @param degrees Number of degrees.\r\n */\r\nconst degreesToRadians = degrees => degrees * Math.PI / 180;\r\n\r\n/**\r\n * Returns the distance between 2 points of coordinates in Google Maps\r\n *\r\n * @see https://stackoverflow.com/a/1502821/4241030\r\n * @param lat1 Latitude of the point A\r\n * @param lng1 Longitude of the point A\r\n * @param lat2 Latitude of the point B\r\n * @param lng2 Longitude of the point B\r\n */\r\nconst getDistanceBetweenPoints = (lat1, lng1, lat2, lng2) => {\r\n // The radius of the planet earth in meters\r\n const R = 6378137;\r\n const dLat = degreesToRadians(lat2 - lat1);\r\n const dLong = degreesToRadians(lng2 - lng1);\r\n const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(degreesToRadians(lat1)) * Math.cos(degreesToRadians(lat1)) * Math.sin(dLong / 2) * Math.sin(dLong / 2);\r\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n const distance = R * c;\r\n\r\n return distance;\r\n};\r\n// https://ourcodeworld.com/articles/read/1021/how-to-calculate-the-distance-between-2-markers-coordinates-in-google-maps-with-javascript\r\n\r\n/**\r\n * Compare retailers according to distance to the user og map center.\r\n */\r\nconst compareDistances = (a, b) => {\r\n const distanceA = getDistanceBetweenPoints(userLocation.lat, userLocation.lng, a.getAttribute('data-lat'), a.getAttribute('data-lng'));\r\n const distanceB = getDistanceBetweenPoints(userLocation.lat, userLocation.lng, b.getAttribute('data-lat'), b.getAttribute('data-lng'));\r\n\r\n if (distanceA < distanceB) {\r\n return -1;\r\n }\r\n\r\n if (distanceA > distanceB) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n};\r\n\r\nfunction addUserMarker(id, name, location, mapObject) {\r\n const marker = new google.maps.Marker({\r\n map: mapObject.map,\r\n icon: {\r\n anchor: new google.maps.Point(15, 41),\r\n size: new google.maps.Size(30, 41),\r\n url: 'data:image/svg+xml;base64,' + window.btoa('')\r\n },\r\n id: `user-${id}`,\r\n position: location,\r\n title: name\r\n });\r\n\r\n marker.setMap(mapObject.map);\r\n mapObject.map.panTo(location);\r\n mapObject.map.setZoom(12);\r\n\r\n userLocation = {\r\n lat: location.lat(),\r\n lng: location.lng()\r\n };\r\n}\r\n\r\nfunction markersSort(markerElements, order) {\r\n if (order === 'distance') {\r\n const markersSorted = Array.from(markerElements);\r\n markersSorted.sort(compareDistances);\r\n\r\n markersSorted.forEach(marker => {\r\n marker.parentNode.appendChild(marker);\r\n });\r\n } else {\r\n markerElements.forEach(marker => {\r\n marker.parentNode.appendChild(marker);\r\n });\r\n }\r\n};\r\n\r\nfunction markersShowAll(mapObject) {\r\n mapObject.markerElements.forEach(markerElement => {\r\n markerElement.classList.remove('js-hide');\r\n });\r\n};\r\n\r\nfunction markerInfoHighlight(mapObject, id) {\r\n const markerElement = document.getElementById(id);\r\n\r\n markersInfoLowlight(mapObject);\r\n\r\n if (markerElement) {\r\n markerElement.classList.add('js-highlight');\r\n }\r\n};\r\n\r\nfunction markersInfoLowlight (mapObject) {\r\n mapObject.markerElements.forEach(markerElement => {\r\n markerElement.classList.remove('js-highlight');\r\n });\r\n};\r\n\r\nfunction addMapEvents(mapObject) {\r\n mapObject.map.addListener('zoom_changed', () => {\r\n if (mapObject.boundsFit && (!mapObject.zoomBounds || mapObject.zoomBoundsSet)) {\r\n mapObject.mapInteraction = true;\r\n\r\n if (mapObject.useInfoWindows) {\r\n mapObject.infoWindows.forEach(infoWindow => {\r\n infoWindow.close();\r\n });\r\n }\r\n\r\n markersShowAll(mapObject);\r\n }\r\n });\r\n\r\n // Only show marker elements that has actual map markers visible on the map\r\n mapObject.map.addListener('bounds_changed', () => {\r\n if (mapObject.mapInteraction) {\r\n const bounds = mapObject.map.getBounds();\r\n\r\n mapObject.markers.forEach(marker => {\r\n if (bounds.contains(marker.getPosition())) {\r\n document.getElementById(marker.id).classList.remove('js-hidden-bounds');\r\n } else {\r\n document.getElementById(marker.id).classList.add('js-hidden-bounds');\r\n }\r\n });\r\n\r\n markersShowAll(mapObject);\r\n\r\n if (mapObject.markerSearchInput) {\r\n markersShown(mapObject.mapContainer);\r\n }\r\n }\r\n });\r\n\r\n mapObject.map.addListener('center_changed', () => {\r\n if (!mapObject.userLocated) {\r\n mapObject.userLocation = {\r\n lat: mapObject.map.getCenter().lat(),\r\n lng: mapObject.map.getCenter().lng()\r\n };\r\n\r\n markersSort(mapObject.markerElements, 'distance');\r\n }\r\n });\r\n\r\n mapObject.map.addListener('dragend', () => {\r\n mapObject.mapInteraction = true;\r\n\r\n markersShowAll(mapObject);\r\n markersInfoLowlight(mapObject);\r\n });\r\n}\r\n\r\nexport function setupMaps() {\r\n const mapContainers = document.querySelectorAll('[data-action=\"map\"]');\r\n const useClusterApi = Array.from(mapContainers).filter(x => x.hasAttribute('data-cluster')).length > 0;\r\n const scripts = !useClusterApi ? [`https://maps.googleapis.com/maps/api/js?v=3.53&key=${mapsApiKey}`] : [`https://maps.googleapis.com/maps/api/js?v=3.53&key=${mapsApiKey}`, 'https://unpkg.com/@googlemaps/markerclusterer/dist/index.min.js'];\r\n const promises = [];\r\n\r\n scripts.forEach(script => {\r\n promises.push(loadScript(script));\r\n });\r\n\r\n Promise.all(promises).then(function () {\r\n initMaps();\r\n }).catch(function (script) {\r\n console.log(`${script} failed to load`);\r\n });\r\n\r\n /**\r\n * Prevent function (ex. scroll) from being executed on every call\r\n * @param {Function} callback Callback\r\n * @param {String} delay Delay\r\n * @return {Function} Callback\r\n */\r\n const debounce = (callback, delay) => {\r\n let timer = null;\r\n\r\n return function () {\r\n const context = this;\r\n const args = arguments;\r\n\r\n clearTimeout(timer);\r\n\r\n timer = setTimeout(() => {\r\n callback.apply(context, args);\r\n }, delay);\r\n };\r\n };\r\n\r\n function initMaps() {\r\n console.log('initmaps is called');\r\n mapContainers.forEach(mapContainer => {\r\n //const mapStyles = [{'featureType': 'water','elementType': 'geometry.fill','stylers': [{'color': '#d3d3d3'}]},{'featureType': 'transit','stylers': [{'color': '#808080'},{'visibility': 'off'}]},{'featureType': 'road.highway','elementType': 'geometry.stroke','stylers': [{'visibility': 'on'},{'color': '#b3b3b3'}]},{'featureType': 'road.highway','elementType': 'geometry.fill','stylers': [{'color': '#ffffff'}]},{'featureType': 'road.local','elementType': 'geometry.fill','stylers': [{'visibility': 'on'},{'color': '#ffffff'},{'weight': 1.8}]},{'featureType': 'road.local','elementType': 'geometry.stroke','stylers': [{'color': '#d7d7d7'}]},{'featureType': 'poi','elementType': 'geometry.fill','stylers': [{'visibility': 'on'},{'color': '#ebebeb'}]},{'featureType': 'administrative','elementType': 'geometry','stylers': [{'color': '#a7a7a7'}]},{'featureType': 'road.arterial','elementType': 'geometry.fill','stylers': [{'color': '#ffffff'}]},{'featureType': 'road.arterial','elementType': 'geometry.fill','stylers': [{'color': '#ffffff'}]},{'featureType': 'landscape','elementType': 'geometry.fill','stylers': [{'visibility': 'on'},{'color': '#efefef'}]},{'featureType': 'road','elementType': 'labels.text.fill','stylers': [{'color': '#696969'}]},{'featureType': 'administrative','elementType': 'labels.text.fill','stylers': [{'visibility': 'on'},{'color': '#737373'}]},{'featureType': 'poi','elementType': 'labels.icon','stylers': [{'visibility': 'off'}]},{'featureType': 'poi','elementType': 'labels','stylers': [{'visibility': 'off'}]},{'featureType': 'road.arterial','elementType': 'geometry.stroke','stylers': [{'color': '#d6d6d6'}]},{'featureType': 'road','elementType': 'labels.icon','stylers': [{'visibility': 'off'}]},{},{'featureType': 'poi','elementType': 'geometry.fill','stylers': [{'color': '#dadada'}]}];\r\n const mapTarget = mapContainer.querySelector(mapContainer.getAttribute('data-target'));\r\n\r\n const mapObject = {\r\n mapContainer,\r\n markerElements: mapContainer.querySelectorAll('[data-action=\"marker\"]'),\r\n markers: [],\r\n markerIcon: mapContainer.querySelector('[data-action=\"marker-icon\"]'),\r\n infoWindows: [],\r\n useCluster: mapContainer.hasAttribute('data-cluster'),\r\n useInfoWindows: mapContainer.hasAttribute('data-info-windows'),\r\n cluster: null,\r\n map: new google.maps.Map(mapTarget, {\r\n mapTypeId: 'roadmap',\r\n //disableDefaultUI: true,\r\n //draggable: false,\r\n //scrollwheel: false,\r\n //zoomControl: false,\r\n mapTypeControl: false,\r\n styles: mapStyles,\r\n streetViewControl: false,\r\n zoomControl: false\r\n }),\r\n bounds: new google.maps.LatLngBounds(),\r\n showUserLocationButton: mapContainer.querySelector('[data-action=\"user-location\"]'),\r\n markerSearchInput: mapContainer.querySelector('[data-action=\"marker-search\"]'),\r\n loadMarkersButton: mapContainer.querySelector('[data-action=\"load-markers\"]'),\r\n userLocation: null,\r\n mapInteraction: false,\r\n boundsFit: false,\r\n zoomBounds: mapContainer.hasAttribute('data-zoom-bounds') ? parseInt(mapContainer.getAttribute('data-zoom-bounds')) : null,\r\n zoomBoundsSet: false\r\n };\r\n\r\n if (mapObject.markerElements.length > 0) {\r\n mapObject.markerElements.forEach(markerElement => {\r\n const lat = parseFloat(markerElement.getAttribute('data-lat'));\r\n const lng = parseFloat(markerElement.getAttribute('data-lng'));\r\n const elementMarkerIcon = markerElement.querySelector('[data-action=\"marker-icon\"]');\r\n\r\n if (!isNaN(lat) && !isNaN(lng)) {\r\n const marker = new google.maps.Marker({\r\n position: {\r\n lat,\r\n lng\r\n },\r\n map: mapObject.map,\r\n id: markerElement.id\r\n });\r\n\r\n if (elementMarkerIcon !== null) {\r\n marker.setIcon({\r\n anchor: new google.maps.Point(15, 41),\r\n size: new google.maps.Size(30, 41),\r\n url: 'data:image/svg+xml;base64,' + window.btoa(elementMarkerIcon.innerHTML)\r\n });\r\n } else if (mapObject.markerIcon) {\r\n marker.setIcon({\r\n anchor: new google.maps.Point(15, 41),\r\n size: new google.maps.Size(30, 41),\r\n url: 'data:image/svg+xml;base64,' + window.btoa(mapObject.markerIcon.innerHTML)\r\n });\r\n }\r\n\r\n let infoWindow;\r\n\r\n if (mapObject.useInfoWindows) {\r\n const infoWindowNode = markerElement.querySelector('[data-action=\"info-window-content\"]') ? markerElement.querySelector('[data-action=\"info-window-content\"]') : markerElement;\r\n let infoWindowContent = infoWindowNode.innerHTML;\r\n\r\n if (infoWindowNode.hasAttribute('data-wrap')) {\r\n infoWindowContent = `
${infoWindowContent}
`;\r\n }\r\n\r\n infoWindow = new google.maps.InfoWindow({\r\n content: infoWindowContent,\r\n });\r\n }\r\n\r\n marker.addListener('click', event => {\r\n mapObject.mapInteraction = true;\r\n mapObject.map.panTo(event.latLng);\r\n markersShowAll(mapObject);\r\n markerInfoHighlight(mapObject, markerElement.id);\r\n\r\n if (mapObject.useInfoWindows) {\r\n infoWindow.open({\r\n anchor: marker,\r\n map: mapObject.map,\r\n shouldFocus: false,\r\n });\r\n\r\n mapObject.infoWindows.forEach(_infoWindow => {\r\n if (_infoWindow !== infoWindow) {\r\n _infoWindow.close();\r\n }\r\n });\r\n }\r\n });\r\n\r\n\r\n\r\n mapObject.markers.push(marker);\r\n\r\n if (mapObject.useInfoWindows) {\r\n mapObject.infoWindows.push(infoWindow);\r\n }\r\n\r\n mapObject.bounds.extend(marker.position);\r\n }\r\n });\r\n\r\n if (mapObject.useCluster) {\r\n const clusterOptions = {\r\n gridSize: 40,\r\n maxZoom: 15,\r\n styles: [{\r\n height: 51,\r\n textColor: 'black',\r\n textSize: 12,\r\n url: 'data:image/svg+xml;base64,' + window.btoa(''),\r\n width: 30\r\n }]\r\n };\r\n\r\n console.log('breaks here')\r\n mapObject.cluster = new markerClusterer.MarkerClusterer(mapObject.map, mapObject.markers, clusterOptions);\r\n console.log('testing')\r\n }\r\n\r\n mapObject.map.fitBounds(mapObject.bounds);\r\n\r\n mapObject.map.addListener('idle', () => {\r\n mapObject.boundsFit = true;\r\n\r\n if (!mapObject.zoomBoundsSet) {\r\n mapObject.map.setZoom(mapObject.map.getZoom() + mapObject.zoomBounds);\r\n mapObject.zoomBoundsSet = true;\r\n }\r\n });\r\n\r\n addMapEvents(mapObject);\r\n }\r\n\r\n if (mapObject.showUserLocationButton) {\r\n mapObject.showUserLocationButton.addEventListener('click', function () {\r\n showUserLocation(mapObject);\r\n });\r\n }\r\n\r\n if (mapObject.markerSearchInput) {\r\n mapObject.markerSearchInput.addEventListener('keyup', debounce(function () {\r\n markerSearch(mapObject);\r\n }, 200));\r\n }\r\n\r\n if (mapObject.loadMarkersButton) {\r\n mapObject.loadMarkersButton.addEventListener('click', function() {\r\n loadMarkers(mapObject);\r\n });\r\n }\r\n });\r\n }\r\n}","/**\r\n * Attention\r\n * Be aware that this module is dependent on support for Element.prototype.closest\r\n * This is included as default in https://polyfill.io/v3/polyfill.min.js\r\n */\r\n\r\n/**\r\n * Function that opens new tab\r\n * and hides the activeTab if found\r\n *\r\n * @param {object|HTMLElement} e - click event or tab element\r\n */\r\n\r\n// Used keycodes\r\nconst keycode = {\r\n arrowRight: 39,\r\n arrowLeft: 37,\r\n home: 36,\r\n end: 35\r\n};\r\n\r\nfunction openTab(e) {\r\n const tab = e.target ? e.target : e;\r\n\r\n if (!(event.ctrlKey || event.metaKey || event.shiftKey) && e.target) {\r\n e.preventDefault();\r\n }\r\n\r\n const tabContent = document.getElementById(tab.getAttribute('aria-controls').replace('#', ''));\r\n\r\n if (tabContent) {\r\n const activeTab = tab.parentNode.parentNode.querySelector('.tab--active');\r\n\r\n if (activeTab) {\r\n activeTab.classList.remove('tab--active');\r\n activeTab.setAttribute('aria-selected', false);\r\n activeTab.setAttribute('tabindex', -1);\r\n\r\n const activeTabContent = document.getElementById(activeTab.getAttribute('aria-controls').replace('#', ''));\r\n if (activeTabContent) {\r\n activeTabContent.classList.remove('tab__content--active');\r\n activeTabContent.setAttribute('aria-hidden', true);\r\n }\r\n }\r\n\r\n tab.classList.add('tab--active');\r\n tab.removeAttribute('tabindex');\r\n tab.setAttribute('aria-selected', true);\r\n tab.focus();\r\n tabContent.classList.add('tab__content--active');\r\n tabContent.setAttribute('aria-hidden', false);\r\n }\r\n}\r\n\r\nfunction openTabByHashId() {\r\n if (window.location.hash.indexOf('tab') > -1) {\r\n const tabContent = document.getElementById(window.location.hash.replace('#', ''));\r\n if (tabContent) {\r\n const tab = document.getElementById(tabContent.getAttribute('aria-labelledby'));\r\n openTab(tab);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n* Initialise Tabs with this function\r\n* Will only run if given selector elements are found in DOM\r\n*\r\n* @param {string} selector - element selector string\r\n*/\r\nexport function setupTabs(selector = '[data-action=\"tabs\"]') {\r\n const tabsContainer = document.body.querySelectorAll(selector);\r\n\r\n if (tabsContainer) {\r\n for (let i = 0; i < tabsContainer.length; i++) {\r\n const tabs = tabsContainer[i].querySelectorAll('[role=\"tab\"]');\r\n\r\n for (let t = 0; t < tabs.length; t++) {\r\n tabs[t].addEventListener('click', openTab);\r\n }\r\n }\r\n }\r\n\r\n openTabByHashId();\r\n\r\n window.addEventListener('hashchange', openTabByHashId, false);\r\n}\r\n\r\nwindow.addEventListener('keydown', event => {\r\n const focusedElement = document.activeElement;\r\n const tabs = document.activeElement.closest('.tabs__nav');\r\n\r\n if (focusedElement && tabs) {\r\n if (event.keyCode === keycode.arrowLeft) {\r\n // Open prevoius tab\r\n if (focusedElement.closest('li').previousElementSibling && focusedElement.closest('li').previousElementSibling.querySelector('.tab')) {\r\n openTab(focusedElement.closest('li').previousElementSibling.querySelector('.tab'));\r\n }\r\n }\r\n if (event.keyCode === keycode.arrowRight) {\r\n // Open next tab\r\n if (focusedElement.closest('li').nextElementSibling && focusedElement.closest('li').nextElementSibling.querySelector('.tab')) {\r\n openTab(focusedElement.closest('li').nextElementSibling.querySelector('.tab'));\r\n }\r\n }\r\n if (event.keyCode === keycode.home) {\r\n // Open first tab\r\n if (tabs.querySelector('li:first-child .tab')) {\r\n event.preventDefault();\r\n openTab(tabs.querySelector('li:first-child .tab'));\r\n }\r\n }\r\n if (event.keyCode === keycode.end) {\r\n // Open last tab\r\n if (tabs.querySelector('li:last-child .tab')) {\r\n event.preventDefault();\r\n openTab(tabs.querySelector('li:last-child .tab'));\r\n }\r\n }\r\n }\r\n});","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 4.0.4\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2022, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: January 11, 2022\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n}\n\nclass Dom7 extends Array {\n constructor(items) {\n if (typeof items === 'number') {\n super(items);\n } else {\n super(...(items || []));\n makeReactive(this);\n }\n }\n\n}\n\nfunction arrayFlat(arr = []) {\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase());\n}\n\n// eslint-disable-next-line\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf(' c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n}\n\nfunction removeClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n}\n\nfunction toggleClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n}\n\nfunction hasClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n let el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (const dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (let i = 0; i < el.attributes.length; i += 1) {\n const attr = el.attributes[i];\n\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n\n for (const key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n const el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n const values = [];\n\n for (let i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (let j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n}\n\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger(...args) {\n const window = getWindow();\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n}\n\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n const window = getWindow();\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append(...els) {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < els.length; k += 1) {\n newChild = els[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n const before = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (let j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n const after = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (let j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add(...els) {\n const dom = this;\n let i;\n let j;\n\n for (i = 0; i < els.length; i += 1) {\n const toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.nodeType === 1) {\n for (let j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\n// eslint-disable-next-line\n\nfunction scrollTo(...args) {\n const window = getWindow();\n let [left, top, duration, easing, callback] = args;\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n const el = this;\n let currentTop;\n let currentLeft;\n let maxTop;\n let maxLeft;\n let newTop;\n let newLeft;\n let scrollTop; // eslint-disable-line\n\n let scrollLeft; // eslint-disable-line\n\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n let done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\n// eslint-disable-next-line\n\nfunction animate(initialProps, initialParams) {\n const window = getWindow();\n const els = this;\n const a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n\n easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n\n stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n\n done(complete) {\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n const elements = []; // Define & Cache Initials & Units\n\n a.elements.each((el, index) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(prop => {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue,\n initialValue,\n unit,\n finalValue,\n finalFullValue,\n currentValue: initialValue\n };\n });\n });\n let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(element => {\n const el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(prop => {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n const {\n initialValue,\n finalValue,\n unit\n } = el[prop];\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n const currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n\n for (let i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n const els = this;\n\n for (let i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nconst noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler(...args) {\n if (typeof args[0] === 'undefined') {\n for (let i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on(name, ...args);\n }\n\n return eventHandler;\n}\n\nconst click = shortcut('click');\nconst blur = shortcut('blur');\nconst focus = shortcut('focus');\nconst focusin = shortcut('focusin');\nconst focusout = shortcut('focusout');\nconst keyup = shortcut('keyup');\nconst keydown = shortcut('keydown');\nconst keypress = shortcut('keypress');\nconst submit = shortcut('submit');\nconst change = shortcut('change');\nconst mousedown = shortcut('mousedown');\nconst mousemove = shortcut('mousemove');\nconst mouseup = shortcut('mouseup');\nconst mouseenter = shortcut('mouseenter');\nconst mouseleave = shortcut('mouseleave');\nconst mouseout = shortcut('mouseout');\nconst mouseover = shortcut('mouseover');\nconst touchstart = shortcut('touchstart');\nconst touchend = shortcut('touchend');\nconst touchmove = shortcut('touchmove');\nconst resize = shortcut('resize');\nconst scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width };\n","import { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, transform, transition, on, off, trigger, transitionEnd, outerWidth, outerHeight, styles, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove } from 'dom7';\nconst Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove\n};\nObject.keys(Methods).forEach(methodName => {\n Object.defineProperty($.fn, methodName, {\n value: Methods[methodName],\n writable: true\n });\n});\nexport default $;","import { getWindow } from 'ssr-window';\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {// no getter for object\n }\n\n try {\n delete object[key];\n } catch (e) {// something got wrong\n }\n });\n}\n\nfunction nextTick(callback, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n\n return setTimeout(callback, delay);\n}\n\nfunction now() {\n return Date.now();\n}\n\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n\n if (!style) {\n style = el.style;\n }\n\n return style;\n}\n\nfunction getTranslate(el, axis) {\n if (axis === void 0) {\n axis = 'x';\n }\n\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n } // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n\n\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n\n return curTransform || 0;\n}\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\n\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\n\nfunction extend() {\n const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n\n for (let i = 1; i < arguments.length; i += 1) {\n const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n\n return to;\n}\n\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\n\nfunction animateCSSModeScroll(_ref) {\n let {\n swiper,\n targetPosition,\n side\n } = _ref;\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n\n const animate = () => {\n time = new Date().getTime();\n\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n\n animate();\n}\n\nexport { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty };","import { getWindow, getDocument } from 'ssr-window';\nlet support;\n\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n passiveListener: function checkPassiveListener() {\n let supportsPassive = false;\n\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n }\n\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {// No support\n }\n\n return supportsPassive;\n }(),\n gestures: function checkGestures() {\n return 'ongesturestart' in window;\n }()\n };\n}\n\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n\n return support;\n}\n\nexport { getSupport };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCached;\n\nfunction calcDevice(_temp) {\n let {\n userAgent\n } = _temp === void 0 ? {} : _temp;\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n } // Android\n\n\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n } // Export object\n\n\n return device;\n}\n\nfunction getDevice(overrides) {\n if (overrides === void 0) {\n overrides = {};\n }\n\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n\n return deviceCached;\n}\n\nexport { getDevice };","import { getWindow } from 'ssr-window';\nlet browser;\n\nfunction calcBrowser() {\n const window = getWindow();\n\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n\n return {\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\n\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n\n return browser;\n}\n\nexport { getBrowser };","export default function transitionEmit(_ref) {\n let {\n swiper,\n runCallbacks,\n direction,\n step\n } = _ref;\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit(`transition${step}`);\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n\n swiper.emit(`slideChangeTransition${step}`);\n\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js'; // Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\n\nfunction closestElement(selector, base) {\n if (base === void 0) {\n base = this;\n }\n\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n return found || __closestFrom(el.getRootNode().host);\n }\n\n return __closestFrom(base);\n}\n\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return; // change target el for shadow root component\n\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n\n if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) {\n $targetEl = $(event.path[0]);\n }\n\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, e.target) : $targetEl.closest(noSwipingSelector)[0])) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n\n if ($targetEl.is(data.focusableElements)) {\n preventDefault = false;\n\n if ($targetEl[0].nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n\n if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n e.preventDefault();\n }\n }\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n\n swiper.emit('touchStart', e);\n}","export default function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n } // Save locks\n\n\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper; // Disable locks on resize\n\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n } // Return locks after resize\n\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\nlet dummyEventAttached = false;\n\nfunction dummyEventListener() {}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n touchEvents,\n el,\n wrapperEl,\n device,\n support\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method; // Touch Events\n\n if (!support.touch) {\n el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n } else {\n const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n passive: false,\n capture\n } : capture);\n el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n if (touchEvents.cancel) {\n el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n } // Prevent Links Clicks\n\n\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n } // Resize handler\n\n\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n};\n\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n support\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n if (support.touch && !dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n\n events(swiper, 'on');\n}\n\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\n\nexport default {\n attachEvents,\n detachEvents\n};","import { extend } from '../../shared/utils.js';\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\n\nexport default function setBreakpoint() {\n const swiper = this;\n const {\n activeIndex,\n initialized,\n loopedSlides = 0,\n params,\n $el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}grid`);\n\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n $el.addClass(`${params.containerModifierClass}grid-column`);\n }\n\n swiper.emitContainerClasses();\n }\n\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n}","export default {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport $ from '../shared/dom.js';\nimport { extend, now, deleteProps } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\nimport eventsEmitter from './events-emitter.js';\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport images from './images/index.js';\nimport checkOverflow from './check-overflow/index.js';\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes,\n images\n};\nconst extendedDefaults = {};\n\nclass Swiper {\n constructor() {\n let el;\n let params;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n } // Swiper Instance\n\n\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n }); // Extend defaults with modules params\n\n const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params\n\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params); // add event listeners\n\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n } // Save Dom lib\n\n\n swiper.$ = $; // Extend Swiper\n\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEvents: function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3]\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2]\n };\n return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }(),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper'); // Init\n\n if (swiper.params.init) {\n swiper.init();\n } // Return app instance\n\n\n return swiper;\n }\n\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n swiper.emit('enable');\n }\n\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n\n swiper.emit('disable');\n }\n\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n\n slidesPerViewDynamic(view, exact) {\n if (view === void 0) {\n view = 'current';\n }\n\n if (exact === void 0) {\n exact = false;\n }\n\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n let translated;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (!translated) {\n setTranslate();\n }\n }\n\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate) {\n if (needUpdate === void 0) {\n needUpdate = true;\n }\n\n const swiper = this;\n const currentDirection = swiper.params.direction;\n\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.each(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true; // Find el\n\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items\n\n res.children = options => $el.children(options);\n\n return res;\n }\n\n return $el.children(getWrapperSelector());\n }; // Find Wrapper\n\n\n let $wrapperEl = getWrapper();\n\n if ($wrapperEl.length === 0 && swiper.params.createElements) {\n const document = getDocument();\n const wrapper = document.createElement('div');\n $wrapperEl = $(wrapper);\n wrapper.className = swiper.params.wrapperClass;\n $el.append(wrapper);\n $el.children(`.${swiper.params.slideClass}`).each(slideEl => {\n $wrapperEl.append(slideEl);\n });\n }\n\n Object.assign(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box'\n });\n return true;\n }\n\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit'); // Set breakpoint\n\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n } // Add Classes\n\n\n swiper.addClasses(); // Create loop\n\n if (swiper.params.loop) {\n swiper.loopCreate();\n } // Update size\n\n\n swiper.updateSize(); // Update slides\n\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n } // Set Grab Cursor\n\n\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n } // Slide To Initial Slide\n\n\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n } // Attach events\n\n\n swiper.attachEvents(); // Init Flag\n\n swiper.initialized = true; // Emit\n\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n\n destroy(deleteInstance, cleanStyles) {\n if (deleteInstance === void 0) {\n deleteInstance = true;\n }\n\n if (cleanStyles === void 0) {\n cleanStyles = true;\n }\n\n const swiper = this;\n const {\n params,\n $el,\n $wrapperEl,\n slides\n } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy'); // Init Flag\n\n swiper.initialized = false; // Detach events\n\n swiper.detachEvents(); // Destroy loop\n\n if (params.loop) {\n swiper.loopDestroy();\n } // Cleanup styles\n\n\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n\n if (slides && slides.length) {\n slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy'); // Detach emitter events\n\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n\n swiper.destroyed = true;\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n\n Swiper.installModule(module);\n return Swiper;\n }\n\n}\n\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\nexport default Swiper;","/* eslint-disable no-underscore-dangle */\nexport default {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n\n function onceHandler() {\n self.off(events, onceHandler);\n\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n handler.apply(self, args);\n }\n\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n\n return self;\n },\n\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n\n return self;\n },\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n\n emit() {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n\n};","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};","export default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n } // Subtract paddings\n\n\n width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}","import { setCSSProperty } from '../../shared/utils.js';\nexport default function updateSlides() {\n const swiper = this;\n\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n } // prettier-ignore\n\n\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n\n const params = swiper.params;\n const {\n $wrapperEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n\n if (typeof swiperSize === 'undefined') {\n return;\n }\n\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween; // reset margins\n\n if (rtl) slides.css({\n marginLeft: '',\n marginBottom: '',\n marginTop: ''\n });else slides.css({\n marginRight: '',\n marginBottom: '',\n marginTop: ''\n }); // reset cssMode offsets\n\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n } // Calc slides\n\n\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n\n const slideStyles = getComputedStyle(slide[0]);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide[0];\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n\n slidesSizesGrid.push(slideSize);\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({\n width: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (params.setWrapperSize) {\n $wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n } // Remove last grid elements depending on width\n\n\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n\n snapGrid = newSlidesGrid;\n\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode) return true;\n\n if (slideIndex === slides.length - 1) {\n return false;\n }\n\n return true;\n }).css({\n [key]: `${spaceBetween}px`\n });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.$el.hasClass(backFaceHiddenClass);\n\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.$el.addClass(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.$el.removeClass(backFaceHiddenClass);\n }\n }\n}","export default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n }\n\n return swiper.slides.eq(index)[0];\n }; // Find slides currently in view\n\n\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n swiper.visibleSlides.each(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n } // Find new height from highest slide in view\n\n\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n } // Update Height\n\n\n if (newHeight || newHeight === 0) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateSlidesProgress(translate) {\n if (translate === void 0) {\n translate = this && this.translate || 0;\n }\n\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate; // Visible Slides\n\n slides.removeClass(params.slideVisibleClass);\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n\n swiper.visibleSlides = $(swiper.visibleSlides);\n}","export default function updateProgress(translate) {\n const swiper = this;\n\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n\n Object.assign(swiper, {\n progress,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n}","export default function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n $wrapperEl,\n activeIndex,\n realIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n let activeSlide;\n\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n } else {\n activeSlide = slides.eq(activeIndex);\n } // Active classes\n\n\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n }\n } // Next Slide\n\n\n let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n } // Prev Slide\n\n\n let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n }\n\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n }\n }\n\n swiper.emitSlidesClasses();\n}","export default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n\n if (typeof activeIndex === 'undefined') {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n } // Normalize slideIndex\n\n\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n\n return;\n } // Get real index\n\n\n const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n Object.assign(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n let slideIndex;\n\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};","import { getTranslate } from '../../shared/utils.js';\nexport default function getSwiperTranslate(axis) {\n if (axis === void 0) {\n axis = this.isHorizontal() ? 'x' : 'y';\n }\n\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n $wrapperEl\n } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}","export default function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n $wrapperEl,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n}","export default function minTranslate() {\n return -this.snapGrid[0];\n}","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n if (translate === void 0) {\n translate = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (translateBounds === void 0) {\n translateBounds = true;\n }\n\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n\n return true;\n}","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\nexport default {\n setTransition,\n transitionStart,\n transitionEnd\n};","export default function setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionStart(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionEnd(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function slideTo(index, speed, runCallbacks, internal, initial) {\n if (index === void 0) {\n index = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (typeof index !== 'number' && typeof index !== 'string') {\n throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`);\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n const translate = -snapGrid[snapIndex]; // Update progress\n\n swiper.updateProgress(translate); // Normalize slideIndex\n\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n } // Directions locks\n\n\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex); // Update Height\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n swiper.updateSlidesClasses();\n\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n\n return false;\n }\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._swiperImmediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n\n return true;\n}","export default function slideToLoop(index, speed, runCallbacks, internal) {\n if (index === void 0) {\n index = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n let newIndex = index;\n\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n animating,\n enabled,\n params\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n params,\n animating,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n\n let prevIndex = 0;\n\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed, runCallbacks, internal, threshold) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (threshold === void 0) {\n threshold = 0.5;\n }\n\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}","import $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nexport default function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n $wrapperEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\nexport default {\n loopCreate,\n loopFix,\n loopDestroy\n};","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loopCreate() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n $wrapperEl\n } = swiper; // Remove duplicated slides\n\n const $selector = $wrapperEl.children().length > 0 ? $($wrapperEl.children()[0].parentNode) : $wrapperEl;\n $selector.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n let slides = $selector.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n $selector.append(blankNode);\n }\n\n slides = $selector.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n\n if (swiper.loopedSlides > slides.length) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((el, index) => {\n const slide = $(el);\n\n if (index < swiper.loopedSlides) {\n appendSlides.push(el);\n }\n\n if (index < slides.length && index >= slides.length - swiper.loopedSlides) {\n prependSlides.push(el);\n }\n\n slide.attr('data-swiper-slide-index', index);\n });\n\n for (let i = 0; i < appendSlides.length; i += 1) {\n $selector.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $selector.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n}","export default function loopFix() {\n const swiper = this;\n swiper.emit('beforeLoopFix');\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n rtlTranslate: rtl\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n}","export default function loopDestroy() {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n slides\n } = swiper;\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n slides.removeAttr('data-swiper-slide-index');\n}","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\nexport default {\n setGrabCursor,\n unsetGrabCursor\n};","export default function setGrabCursor(moving) {\n const swiper = this;\n if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}","export default function unsetGrabCursor() {\n const swiper = this;\n\n if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js';\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n return;\n }\n\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n\n if (!swiper.allowTouchMove) {\n if (!$(e.target).is(data.focusableElements)) {\n swiper.allowClick = false;\n }\n\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n\n return;\n }\n\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n\n if (!data.startMoving) {\n return;\n }\n\n swiper.allowClick = false;\n\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop && !params.cssMode) {\n swiper.loopFix();\n }\n\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n\n data.allowMomentumBounce = false; // Grab Cursor\n\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n\n swiper.emit('sliderFirstMove', e);\n }\n\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n } // Directions locks\n\n\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n } // Threshold\n\n\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n } // Update progress\n\n\n swiper.updateProgress(data.currentTranslate); // Update translate\n\n swiper.setTranslate(data.currentTranslate);\n}","import { now, nextTick } from '../../shared/utils.js';\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n\n data.allowTouchCallbacks = false;\n\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n\n data.isMoved = false;\n data.startMoving = false;\n return;\n } // Return Grab Cursor\n\n\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n } // Time diff\n\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n } // Find current slide\n\n\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n } // Find current slide size\n\n\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}","export default function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n } // eslint-disable-next-line\n\n\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n}","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\nexport default {\n setBreakpoint,\n getBreakpoint\n};","import { getWindow } from 'ssr-window';\nexport default function getBreakpoint(breakpoints, base, containerEl) {\n if (base === void 0) {\n base = 'window';\n }\n\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n\n return breakpoint || 'max';\n}","function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\n\nexport default {\n checkOverflow\n};","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\nexport default {\n addClasses,\n removeClasses\n};","function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\n\nexport default function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n $el,\n device,\n support\n } = swiper; // prettier-ignore\n\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'pointer-events': !support.touch\n }, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n $el.addClass([...classNames].join(' '));\n swiper.emitContainerClasses();\n}","export default function removeClasses() {\n const swiper = this;\n const {\n $el,\n classNames\n } = swiper;\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n}","import loadImage from './loadImage.js';\nimport preloadImages from './preloadImages.js';\nexport default {\n loadImage,\n preloadImages\n};","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n\n function onReady() {\n if (callback) callback();\n }\n\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n\n if (sizes) {\n image.sizes = sizes;\n }\n\n if (srcset) {\n image.srcset = srcset;\n }\n\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n}","export default function preloadImages() {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n }\n}","import { extend } from '../shared/utils.js';\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj) {\n if (obj === void 0) {\n obj = {};\n }\n\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}","import { getDocument } from 'ssr-window';\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n const document = getDocument();\n\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n\n if (!element) {\n element = document.createElement('div');\n element.className = checkProps[key];\n swiper.$el.append(element);\n }\n\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n\n return params;\n}","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nimport $ from '../../shared/dom.js';\nexport default function Navigation(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock'\n }\n });\n swiper.navigation = {\n nextEl: null,\n $nextEl: null,\n prevEl: null,\n $prevEl: null\n };\n\n function getEl(el) {\n let $el;\n\n if (el) {\n $el = $(el);\n\n if (swiper.params.uniqueNavElements && typeof el === 'string' && $el.length > 1 && swiper.$el.find(el).length === 1) {\n $el = swiper.$el.find(el);\n }\n }\n\n return $el;\n }\n\n function toggleEl($el, disabled) {\n const params = swiper.params.navigation;\n\n if ($el && $el.length > 0) {\n $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass);\n if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n }\n\n function update() {\n // Update Navigation Buttons\n if (swiper.params.loop) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n toggleEl($prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl($nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n }\n\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n }\n\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n const $nextEl = getEl(params.nextEl);\n const $prevEl = getEl(params.prevEl);\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', onNextClick);\n }\n\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', onPrevClick);\n }\n\n Object.assign(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0]\n });\n\n if (!swiper.enabled) {\n if ($nextEl) $nextEl.addClass(params.lockClass);\n if ($prevEl) $prevEl.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n }\n\n on('init', () => {\n init();\n update();\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl) {\n $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n\n if ($prevEl) {\n $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n });\n on('click', (_s, e) => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n const targetEl = e.target;\n\n if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n });\n Object.assign(swiper.navigation, {\n update,\n init,\n destroy\n });\n}","export default function classesToSelector(classes) {\n if (classes === void 0) {\n classes = '';\n }\n\n return `.${classes.trim().replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}","import $ from '../../shared/dom.js';\nimport classesToSelector from '../../shared/classes-to-selector.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Pagination(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`\n }\n });\n swiper.pagination = {\n el: null,\n $el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0;\n }\n\n function setSideBullets($bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n $bulletEl[position]().addClass(`${bulletActiveClass}-${position}`)[position]().addClass(`${bulletActiveClass}-${position}-${position}`);\n }\n\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el; // Current/Total\n\n let current;\n const total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.loop) {\n current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n\n if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n current -= slidesLength - swiper.loopedSlides * 2;\n }\n\n if (current > total - 1) current -= total;\n if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n } // Types\n\n\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n\n if (params.dynamicBullets) {\n bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(swiper.isHorizontal() ? 'width' : 'height', `${bulletSize * (params.dynamicMainBullets + 4)}px`);\n\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n dynamicBulletIndex += current - (swiper.previousIndex - swiper.loopedSlides || 0);\n\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n\n bullets.removeClass(['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`).join(' '));\n\n if ($el.length > 1) {\n bullets.each(bullet => {\n const $bullet = $(bullet);\n const bulletIndex = $bullet.index();\n\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (bulletIndex === firstIndex) {\n setSideBullets($bullet, 'prev');\n }\n\n if (bulletIndex === lastIndex) {\n setSideBullets($bullet, 'next');\n }\n }\n });\n } else {\n const $bullet = bullets.eq(current);\n const bulletIndex = $bullet.index();\n $bullet.addClass(params.bulletActiveClass);\n\n if (params.dynamicBullets) {\n const $firstDisplayedBullet = bullets.eq(firstIndex);\n const $lastDisplayedBullet = bullets.eq(lastIndex);\n\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (swiper.params.loop) {\n if (bulletIndex >= bullets.length) {\n for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n }\n }\n\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n }\n }\n\n if (params.type === 'fraction') {\n $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1));\n $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));\n }\n\n if (params.type === 'progressbar') {\n let progressbarDirection;\n\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n\n $el.find(classesToSelector(params.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n }\n\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n emit('paginationRender', $el[0]);\n } else {\n emit('paginationUpdate', $el[0]);\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el;\n let paginationHTML = '';\n\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.loop && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\">`;\n }\n }\n\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));\n }\n\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `` + ' / ' + ``;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type !== 'custom') {\n emit('paginationRender', swiper.pagination.$el[0]);\n }\n }\n\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let $el = $(params.el);\n if ($el.length === 0) return;\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n $el = swiper.$el.find(params.el); // check if it belongs to another nested Swiper\n\n if ($el.length > 1) {\n $el = $el.filter(el => {\n if ($(el).parents('.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n $el.addClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', classesToSelector(params.bulletClass), function onClick(e) {\n e.preventDefault();\n let index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index += swiper.loopedSlides;\n swiper.slideTo(index);\n });\n }\n\n Object.assign(swiper.pagination, {\n $el,\n el: $el[0]\n });\n\n if (!swiper.enabled) {\n $el.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const $el = swiper.pagination.$el;\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n $el.removeClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n\n if (params.clickable) {\n $el.off('click', classesToSelector(params.bulletClass));\n }\n }\n\n on('init', () => {\n init();\n render();\n update();\n });\n on('activeIndexChange', () => {\n if (swiper.params.loop) {\n update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n if (!swiper.params.loop) {\n update();\n }\n });\n on('slidesLengthChange', () => {\n if (swiper.params.loop) {\n render();\n update();\n }\n });\n on('snapGridLengthChange', () => {\n if (!swiper.params.loop) {\n render();\n update();\n }\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.pagination;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const {\n $el\n } = swiper.pagination;\n\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && $el.length > 0 && !$(targetEl).hasClass(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass);\n\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n\n $el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n });\n Object.assign(swiper.pagination, {\n render,\n update,\n init,\n destroy\n });\n}","import { getWindow } from 'ssr-window';\nexport default function Resize(_ref) {\n let {\n swiper,\n on,\n emit\n } = _ref;\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(_ref2 => {\n let {\n contentBoxSize,\n contentRect,\n target\n } = _ref2;\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}","import { getWindow } from 'ssr-window';\nexport default function Observer(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const observers = [];\n const window = getWindow();\n\n const attach = function (target, options) {\n if (options === void 0) {\n options = {};\n }\n\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n\n const init = () => {\n if (!swiper.params.observer) return;\n\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n } // Observe container\n\n\n attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren\n }); // Observe wrapper\n\n attach(swiper.$wrapperEl[0], {\n attributes: false\n });\n };\n\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}","import Swiper, { Navigation, Pagination } from 'swiper';\r\n\r\nSwiper.use([Navigation, Pagination]);\r\n\r\nexport function setupIGO() {\r\n const triggers = document.querySelectorAll('[data-igo-image]');\r\n\r\n if (triggers && triggers.length > 0) {\r\n Array.from(triggers).forEach(trigger => {\r\n trigger.addEventListener('click', event => {\r\n new IGO(trigger);\r\n });\r\n });\r\n }\r\n}\r\n\r\nconst mainClass = 'image-gallery-overlay';\r\n\r\nclass IGO {\r\n /**\r\n * Creates new Image gallery overlay\r\n * @param {DOM element} triggerElement \r\n */\r\n constructor(triggerElement) {\r\n this.parent = triggerElement.parentElement;\r\n this.igo = null;\r\n this.closeWord = 'Luk';\r\n this.isSingleImage = triggerElement.closest('[data-igo-gallery]') ? false : true;\r\n this.startingIndex = 0;\r\n this.galleryImages = [];\r\n this.swiper = null;\r\n \r\n if(!this.isSingleImage) {\r\n this.getStartIndex(triggerElement);\r\n }\r\n \r\n this.getGalleryImages(triggerElement);\r\n this.createOverlay();\r\n }\r\n \r\n /**\r\n * Get the index in the gallery of the image/trigger clicked\r\n * @paremt {DOM element} startIndexElement - The DOM element of the clicked item\r\n */\r\n getStartIndex(startIndexElement) {\r\n const imageArray = this.parent.children;\r\n this.startingIndex = Array.from(imageArray).indexOf(startIndexElement);\r\n }\r\n \r\n /**\r\n * Builds and array of objects with the images in the gallery.\r\n * As of right now (06/04/22) we store more data than needed, for future ideas\r\n * @param {DOM element} triggerElement\r\n */\r\n getGalleryImages(triggerElement) {\r\n if(this.isSingleImage) {\r\n this.galleryImages.push({\r\n title: triggerElement.getAttribute('title'),\r\n index: 0,\r\n thumb: triggerElement.getAttribute('src'),\r\n fullImage: triggerElement.getAttribute('data-igo-image')\r\n })\r\n } else {\r\n const allImages = this.parent.querySelectorAll('[data-igo-image]');\r\n \r\n Array.from(allImages).forEach(image => {\r\n\r\n const imageInfo = {\r\n title: image.getAttribute('title'),\r\n index: this.getImageIndex(image),\r\n thumb: image.getAttribute('src'),\r\n fullImage: image.getAttribute('data-igo-image')\r\n };\r\n\r\n this.galleryImages.push(imageInfo);\r\n });\r\n }\r\n }\r\n \r\n /**\r\n * Get the index of and image in its container\r\n * Used by the getGalleryImages methods\r\n */\r\n getImageIndex(image) {\r\n const imageContainer = image.parentElement;\r\n const imagesInContainer = imageContainer.children;\r\n \r\n return Array.from(imagesInContainer).indexOf(image);\r\n } \r\n \r\n /**\r\n * Builds all the HTML needed for the overlay. Last it append it to the body element.\r\n */\r\n createOverlay() {\r\n const igoBackdrop = document.createElement('div');\r\n igoBackdrop.classList.add(mainClass + '__backdrop');\r\n igoBackdrop.addEventListener('click', (event) => {\r\n this.igo.remove();\r\n });\r\n \r\n const igoCloseBtn = document.createElement('button');\r\n igoCloseBtn.classList.add(mainClass + '__close-button');\r\n igoCloseBtn.innerText = this.closeWord;\r\n igoCloseBtn.addEventListener('click', (event) => {\r\n this.igo.remove();\r\n });\r\n \r\n const igoContent = document.createElement('div');\r\n igoContent.classList.add(mainClass + '__content');\r\n igoContent.appendChild(this.createGallery());\r\n igoContent.appendChild(igoCloseBtn);\r\n\r\n const igoContainer = document.createElement('div');\r\n igoContainer.classList.add(mainClass);\r\n igoContainer.appendChild(igoBackdrop);\r\n igoContainer.appendChild(igoContent);\r\n \r\n this.igo = igoContainer;\r\n\r\n document.body.appendChild(this.igo);\r\n }\r\n \r\n /**\r\n * Build the image specific HTMl for the overlay.\r\n * If more than one image it builds the correct markup for a swiper\r\n */\r\n createGallery() {\r\n if(this.galleryImages.length > 1) {\r\n const wrapper = document.createElement('div');\r\n wrapper.classList.add('swiper-wrapper');\r\n \r\n Array.from(this.galleryImages).forEach(imageInfo => {\r\n const image = new Image();\r\n image.src = imageInfo.fullImage;\r\n image.alt = imageInfo.title;\r\n \r\n const item = document.createElement('div');\r\n item.classList.add(mainClass + '__content-item', 'swiper-slide');\r\n item.appendChild(image);\r\n \r\n wrapper.appendChild(item);\r\n });\r\n \r\n const prev = document.createElement('div');\r\n prev.classList.add(mainClass + '__button', mainClass + '__button--prev');\r\n \r\n const next = document.createElement('div');\r\n next.classList.add(mainClass + '__button', mainClass + '__button--next');\r\n \r\n const pagination = document.createElement('div');\r\n pagination.classList.add(mainClass + '__pagination');\r\n \r\n const swiperDOM = document.createElement('div');\r\n swiperDOM.classList.add('swiper');\r\n swiperDOM.appendChild(wrapper);\r\n swiperDOM.appendChild(prev);\r\n swiperDOM.appendChild(next);\r\n swiperDOM.appendChild(pagination);\r\n \r\n this.swiper = new Swiper(swiperDOM, {\r\n initialSlide: this.startingIndex,\r\n pagination: {\r\n el: pagination,\r\n type: 'progressbar',\r\n },\r\n navigation: {\r\n nextEl: next,\r\n prevEl: prev,\r\n },\r\n });\r\n \r\n return swiperDOM;\r\n \r\n } else {\r\n const imageInfo = this.galleryImages[0];\r\n const image = new Image();\r\n image.src = imageInfo.fullImage;\r\n image.alt = imageInfo.title;\r\n \r\n const item = document.createElement('div');\r\n item.classList.add(mainClass + '__content-item', mainClass + '__content-item--single');\r\n item.appendChild(image);\r\n \r\n return item;\r\n }\r\n }\r\n}","import { isTouch } from '../utils/helpers';\r\nimport { disableScrollLock, enableScrollLock } from '../utils/scrollLock';\r\n\r\nlet modal;\r\n\r\nexport function setupProductModal() {\r\n if (document.querySelector('.product-modal') && document.querySelector('.product-order-button')) {\r\n modal = document.querySelector('.product-modal');\r\n\r\n const buttons = document.querySelectorAll('.product-order-button');\r\n const back = modal.querySelectorAll('.product-modal__back-link, #product-orderflow-inquire-button');\r\n\r\n Array.from(buttons).forEach(button => {\r\n button.addEventListener('click', e => {\r\n e.preventDefault();\r\n open();\r\n enableScrollLock();\r\n });\r\n });\r\n\r\n Array.from(back).forEach(item => {\r\n item.addEventListener('click', e => {\r\n e.preventDefault();\r\n disableScrollLock();\r\n close();\r\n });\r\n });\r\n\r\n window.onhashchange = function(event) {\r\n if(event.newURL.indexOf('#') < 0) {\r\n modal.classList.remove('js-slide-in');\r\n disableScrollLock();\r\n }\r\n }\r\n }\r\n\r\n if (isTouch && document.querySelector('.product-modal') && !document.querySelector('.product-modal').classList.contains('not-logged-in')) {\r\n modal = document.querySelector('.product-modal');\r\n\r\n if (document.querySelector('.stock-card')) {\r\n //setupStockToggle();\r\n }\r\n }\r\n\r\n if(modal) {\r\n const closeUpsell = modal.querySelector('.close-upsell');\r\n const modalPopup = modal.querySelector('.modal__popup');\r\n if(closeUpsell) {\r\n closeUpsell.addEventListener('click', e => {\r\n modalPopup.classList.add('modal__popup--hidden');\r\n });\r\n }\r\n }\r\n\r\n if(document.querySelector('.bundle-toggle')) {\r\n Array.from(document.querySelectorAll('.bundle-toggle')).forEach(toggle => {\r\n toggle.addEventListener('click', event => {\r\n toggle.closest('.stock-card').classList.toggle('expanded')\r\n })\r\n });\r\n }\r\n}\r\n\r\nfunction open() {\r\n history.pushState({}, '', window.location + '#');\r\n modal.classList.add('js-slide-in');\r\n}\r\n\r\nfunction close() {\r\n history.back();\r\n modal.classList.remove('js-slide-in');\r\n disableScrollLock();\r\n}\r\n","export function setupIntersect() {\r\n function onChange(changes, observer) {\r\n changes.forEach(change => {\r\n if (change.intersectionRatio > 0.2) {\r\n change.target.classList.add('intersected');\r\n }\r\n });\r\n }\r\n\r\n const intersectElements = document.querySelectorAll('[data-action*=\"intersect\"]');\r\n\r\n const config = {\r\n root: null,\r\n rootMargin: '0px',\r\n threshold: [0.2]\r\n };\r\n\r\n const observer = new IntersectionObserver(onChange, config);\r\n\r\n Array.from(intersectElements).forEach(element => {\r\n observer.observe(element);\r\n });\r\n}\r\n","export function setupCounters() {\r\n const counters = document.querySelectorAll('.counter');\r\n\r\n if(counters.length > 0) {\r\n Array.from(counters).forEach(counter => { \r\n const addBtn = counter.querySelector('.add');\r\n const subBtn = counter.querySelector('.substract');\r\n let input = counter.querySelector('.amount');\r\n let min = 1;\r\n\r\n if(input.hasAttribute('data-min')) {\r\n min = parseInt(input.getAttribute('data-min'));\r\n }\r\n\r\n if(input) {\r\n addBtn.addEventListener('click', event => {\r\n let value = parseInt(input.value);\r\n value = add(value);\r\n input.value = value;\r\n });\r\n\r\n subBtn.addEventListener('click', event => {\r\n let value = parseInt(input.value);\r\n value = substract(value, min);\r\n input.value = value;\r\n });\r\n }\r\n })\r\n }\r\n}\r\n\r\nfunction add(value) {\r\n return value +1;\r\n}\r\n\r\nfunction substract(value, min) {\r\n if(value > min) {\r\n return value -1;\r\n }\r\n\r\n return value;\r\n}\r\n","export function setupFormSubmit() {\r\n const submitBtns = document.querySelectorAll('.login-form__button');\r\n const userNav = document.querySelector('.navigation__item--user');\r\n\r\n function submitForm() {\r\n const btnText = this.querySelector('.login-form__button-text');\r\n const btnLoader = this.querySelector('.load-spinner');\r\n btnText.style.display = 'none';\r\n btnLoader.style.display = 'flex';\r\n setTimeout(() => {\r\n btnText.style.display = 'block';\r\n btnLoader.style.display = 'none';\r\n },3000);\r\n\r\n // When user is logged in\r\n userNav.querySelector('.icon-checkmark').classList.add('icon-checkmark--checked');\r\n }\r\n\r\n submitBtns.forEach(submitBtn => {\r\n submitBtn.addEventListener('click', submitForm);\r\n });\r\n\r\n const resetPasswordBtn = document.querySelector('.login-form__forgot-password');\r\n\r\n function toggleResetForm() {\r\n const loginFormWrapper = document.querySelector('form.login-form');\r\n const resetPasswordForm = loginFormWrapper.querySelector('.login-form--reset-password');\r\n resetPasswordForm.style.display = 'block';\r\n const loginForm = loginFormWrapper.querySelector('.login-form--login');\r\n loginForm.style.display = 'none';\r\n userNav.addEventListener('mouseleave', resetForms);\r\n function resetForms () {\r\n resetPasswordForm.style.display = 'none';\r\n setTimeout(() => {\r\n loginForm.style.display = 'block';\r\n },500);\r\n }\r\n }\r\n\r\n if(resetPasswordBtn) {\r\n resetPasswordBtn.addEventListener('click', toggleResetForm);\r\n }\r\n}\r\n","export function setupSearchSelects() {\r\n if(document.querySelector('.search-select')) {\r\n Array.from(document.querySelectorAll('.search-select')).forEach(select => {\r\n const input = select.querySelector('.search-select__search-input');\r\n const dropdown = select.querySelector('.search-select__dropdown');\r\n const options = select.querySelectorAll('.search-select__tags input');\r\n const optionsLabels = select.querySelectorAll('.search-select__dropdown-item');\r\n const clearBtn = select.querySelector('.search-select__search-clear');\r\n\r\n input.addEventListener('focus', open);\r\n clearBtn.addEventListener('click', clear);\r\n\r\n input.addEventListener('input', search);\r\n\r\n Array.from(options).forEach(option => {\r\n option.addEventListener('input', clear);\r\n });\r\n\r\n function clear() {\r\n dropdown.classList.remove('search-select__dropdown--active');\r\n clearBtn.classList.remove('search-select__search-clear--active');\r\n input.value = \"\"; \r\n\r\n resetList();\r\n }\r\n\r\n function open() {\r\n dropdown.classList.add('search-select__dropdown--active');\r\n clearBtn.classList.add('search-select__search-clear--active');\r\n }\r\n\r\n function search() {\r\n const searchTerm = input.value;\r\n\r\n if(searchTerm.length > 0) {\r\n const searchWords = searchTerm.trim().split(' ');\r\n\r\n Array.from(optionsLabels).forEach(option => { \r\n let hasMatch = false;\r\n\r\n searchWords.forEach(word => {\r\n const searchRegEx = new RegExp(word, 'ig');\r\n let matches = option.innerText.match(searchRegEx);\r\n\r\n if(matches && matches.length > 0) {\r\n hasMatch = true;\r\n option.innerHTML = option.innerHTML.replaceAll(/\\(.*?)\\<\\/span\\>/gi, \"$1\").replaceAll(searchRegEx, '' + matches[0] + ''); \r\n }\r\n });\r\n\r\n if(!hasMatch) {\r\n option.classList.add('js-no-match');\r\n } else {\r\n option.classList.remove('js-no-match');\r\n }\r\n })\r\n } else {\r\n resetList();\r\n } \r\n }\r\n\r\n function resetList() {\r\n Array.from(optionsLabels).forEach(option => {\r\n option.classList.remove('js-no-match');\r\n option.innerHTML = option.innerText;\r\n })\r\n }\r\n });\r\n }\r\n}","export function setupDuoRangeSliders() {\r\n if(document.querySelector('.duo-range-slider')) {\r\n Array.from(document.querySelectorAll('.duo-range-slider')).forEach(rangeSlider => {\r\n Array.from(rangeSlider.querySelectorAll('.duo-range-slider__range')).forEach(slider => {\r\n slider.oninput = updateValues;\r\n slider.oninput();\r\n });\r\n\r\n function updateValues() {\r\n const parent = this.parentNode;\r\n const slides = parent.getElementsByTagName('input');\r\n let slide1 = parseFloat(slides[0].value);\r\n let slide2 = parseFloat(slides[1].value);\r\n const displayMin = parent.querySelector('.duo-range-slider__values-min span');\r\n const displayMax = parent.querySelector('.duo-range-slider__values-max span');\r\n\r\n if(slide1 > slide2) {\r\n let temp = slide2;\r\n\r\n slide2 = slide1;\r\n slide1 = temp;\r\n }\r\n\r\n displayMin.innerText = slide1;\r\n displayMax.innerText = slide2;\r\n }\r\n });\r\n }\r\n}","import Swiper, { Navigation, Pagination } from 'swiper';\r\n\r\n// configure Swiper to use modules\r\nSwiper.use([Navigation, Pagination]);\r\n\r\nexport function setupProductImages() {\r\n const productDetailsMedia = document.querySelector('.product-details__media');\r\n\r\n if (productDetailsMedia) {\r\n const numberOfMedias = productDetailsMedia.querySelectorAll('.product-details__image-wrap').length;\r\n\r\n if (numberOfMedias > 1) {\r\n const parent = document.querySelector('.product-details__media');\r\n const children = document.querySelectorAll('.product-details__media picture');\r\n const steps = parent.querySelector('.product-details__media-steps');\r\n\r\n parent.innerHTML = '';\r\n\r\n const wrapper = document.createElement('div');\r\n wrapper.classList.add('swiper-wrapper');\r\n\r\n Array.from(children).forEach(child => {\r\n child.classList.add('swiper-slide');\r\n wrapper.appendChild(child);\r\n });\r\n\r\n const prev = document.createElement('div');\r\n prev.classList.add('product-details__media-control', 'product-details__media-control--prev');\r\n\r\n const next = document.createElement('div');\r\n next.classList.add('product-details__media-control', 'product-details__media-control--next');\r\n\r\n const swiperDOM = document.createElement('div');\r\n swiperDOM.classList.add('swiper');\r\n swiperDOM.appendChild(wrapper);\r\n\r\n parent.appendChild(swiperDOM);\r\n parent.appendChild(prev);\r\n parent.appendChild(next);\r\n parent.appendChild(steps);\r\n\r\n const fractionEl = steps.querySelector('.current');\r\n\r\n const swiper = new Swiper(swiperDOM, {\r\n pagination: {\r\n type: 'fraction',\r\n el: fractionEl\r\n },\r\n navigation: {\r\n nextEl: next,\r\n prevEl: prev\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","import Swiper, { Pagination, Parallax } from 'swiper';\r\nimport { mouse } from './canvas';\r\n\r\nSwiper.use([Pagination, Parallax]);\r\n\r\nexport function setupSwipers() {\r\n const swipers = document.querySelectorAll('[data-action=\"swiper\"]');\r\n\r\n swipers.forEach(swiperContainer => {\r\n const swiper = new Swiper(swiperContainer, {\r\n pagination: {\r\n el: '.swiper-pagination',\r\n type: 'progressbar'\r\n },\r\n slidesPerView: 'auto', // Slide sizes are controlled with css - not here\r\n speed: 500,\r\n parallax: true,\r\n centeredSlides: false,\r\n });\r\n\r\n // By listening to touchmove on swiper, we can move our custom cursor.\r\n // We can't move it with 'mousemove' on document.body as swiper somehow overrules this.\r\n swiper.on('touchMove',function(swiper,event) {\r\n mouse.x = event.clientX;\r\n mouse.y = event.clientY;\r\n });\r\n });\r\n}\r\n","import $ from '../../shared/dom.js';\nexport default function Parallax(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n parallax: {\n enabled: false\n }\n });\n\n const setTransform = (el, progress) => {\n const {\n rtl\n } = swiper;\n const $el = $(el);\n const rtlFactor = rtl ? -1 : 1;\n const p = $el.attr('data-swiper-parallax') || '0';\n let x = $el.attr('data-swiper-parallax-x');\n let y = $el.attr('data-swiper-parallax-y');\n const scale = $el.attr('data-swiper-parallax-scale');\n const opacity = $el.attr('data-swiper-parallax-opacity');\n\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.isHorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n\n if (x.indexOf('%') >= 0) {\n x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n } else {\n x = `${x * progress * rtlFactor}px`;\n }\n\n if (y.indexOf('%') >= 0) {\n y = `${parseInt(y, 10) * progress}%`;\n } else {\n y = `${y * progress}px`;\n }\n\n if (typeof opacity !== 'undefined' && opacity !== null) {\n const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n $el[0].style.opacity = currentOpacity;\n }\n\n if (typeof scale === 'undefined' || scale === null) {\n $el.transform(`translate3d(${x}, ${y}, 0px)`);\n } else {\n const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);\n }\n };\n\n const setTranslate = () => {\n const {\n $el,\n slides,\n progress,\n snapGrid\n } = swiper;\n $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n setTransform(el, progress);\n });\n slides.each((slideEl, slideIndex) => {\n let slideProgress = slideEl.progress;\n\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n }\n\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n setTransform(el, slideProgress);\n });\n });\n };\n\n const setTransition = function (duration) {\n if (duration === void 0) {\n duration = swiper.params.speed;\n }\n\n const {\n $el\n } = swiper;\n $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(parallaxEl => {\n const $parallaxEl = $(parallaxEl);\n let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n $parallaxEl.transition(parallaxDuration);\n });\n };\n\n on('beforeInit', () => {\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n });\n on('init', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTranslate', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTransition', (_swiper, duration) => {\n if (!swiper.params.parallax.enabled) return;\n setTransition(duration);\n });\n}","let activeFilters = {};\r\nlet delay;\r\n\r\nimport { setupSearchSelects } from './search-select';\r\nimport { setupDuoRangeSliders } from './duo-range-slider';\r\n\r\nexport function setupProductFilters() {\r\n\r\n if(document.getElementById('productFilters')) {\r\n new Vue({\r\n el: '#productFilters',\r\n name: 'Product Filters',\r\n data() {\r\n return {\r\n showFilters: false,\r\n facets: null,\r\n translations: null,\r\n allProducts: false,\r\n currentGroup: '',\r\n }\r\n },\r\n created() {\r\n this.allProducts = (document.getElementById('productFilters').getAttribute('data-all').toLowerCase() === 'true');\r\n \r\n if(!this.allProducts) {\r\n this.currentGroup = '&Group=' + document.getElementById('productFilters').getAttribute('data-top-group') + '&GroupID=' + document.getElementById('productFilters').getAttribute('data-group')\r\n } else {\r\n const urlSearchParams = new URLSearchParams(window.location.search);\r\n const params = Object.fromEntries(urlSearchParams.entries());\r\n \r\n let group = '';\r\n\r\n if(params.Group) {\r\n group = '&Group=' + params.Group;\r\n }\r\n\r\n this.currentGroup = group;\r\n }\r\n \r\n fetch('/dwapi/translations/area/1')\r\n .then(response => response.json())\r\n .then(response => {\r\n this.translations = response;\r\n })\r\n .catch(error => {\r\n console.log(error)\r\n })\r\n\r\n fetch(`/dwapi/ecommerce/products/search?RepositoryName=Products&QueryName=FilterQuery&ProductSettings.FilledProperties=Name&FilledProperties=Products,FacetGroups,TotalProductsCount${this.currentGroup}`)\r\n .then(response => response.json())\r\n .then(response => {\r\n this.facets = response.FacetGroups[0].Facets;\r\n this.showFilters = true;\r\n \r\n this.$nextTick(() => {\r\n setUpFilters();\r\n setupSearchSelects();\r\n setupDuoRangeSliders();\r\n })\r\n })\r\n },\r\n methods: {\r\n stringAddition(paramType) {\r\n let stringAddition = '';\r\n \r\n if(paramType == 'System.String[]') {\r\n stringAddition = '[]';\r\n }\r\n \r\n return stringAddition;\r\n },\r\n translation(key) {\r\n return this.translations.find(x => x.Key == key) ? this.translations.find(x => x.Key == key).Value : key;\r\n },\r\n sortedOptions(options) {\r\n let newList = options.filter(x => x.Count && x.Count > 0 && parseInt(x.Value) != -1);\r\n return newList;\r\n },\r\n getLowestValue(options) {\r\n let newList = options.filter(x => x.Count && x.Count > 0);\r\n newList.sort((a, b) => a - b);\r\n\r\n return newList[0].Value\r\n\r\n },\r\n getHighestValue(options) {\r\n let newList = options.filter(x => x.Count && x.Count > 0);\r\n newList.sort((a, b) => a - b);\r\n\r\n return newList.at(-1).Value\r\n }\r\n }\r\n })\r\n }\r\n}\r\n\r\nfunction setUpFilters() {\r\n const filterSection = document.querySelector('.filter-section');\r\n const sorting = document.getElementById('sorting');\r\n\r\n if(filterSection) {\r\n const applyBtn = document.getElementById('applyFilterButton');\r\n const clearBtn = document.getElementById('clearFilterButton');\r\n\r\n const filters = filterSection.querySelectorAll('.filter-option');\r\n setupFromQueryString();\r\n\r\n Array.from(filters).forEach(filter => {\r\n const filterName = filter.getAttribute('data-name');\r\n\r\n filter.addEventListener('input', event => {\r\n clearTimeout(delay);\r\n\r\n switch (filter.type) {\r\n case 'range': \r\n activeFilters[filterName] = filter.value;\r\n break;\r\n\r\n case 'checkbox':\r\n default:\r\n if(filter.checked) {\r\n if(activeFilters[filterName]) {\r\n activeFilters[filterName].push(filter.value);\r\n } else {\r\n activeFilters[filterName] = [filter.value];\r\n }\r\n } else { \r\n if(activeFilters[filterName]) {\r\n const valueIndex = activeFilters[filterName].indexOf(filter.value);\r\n activeFilters[filterName].splice(valueIndex, 1);\r\n \r\n if(activeFilters[filterName].length == 0) {\r\n delete activeFilters[filterName];\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n })\r\n })\r\n\r\n clearBtn.addEventListener('click', event => {\r\n if(activeFilters['Sortby']) {\r\n const tempBy = activeFilters['Sortby'];\r\n const tempOrder = activeFilters['SortOrder'];\r\n\r\n activeFilters = {};\r\n\r\n activeFilters['Sortby'] = tempBy;\r\n activeFilters['SortOrder'] = tempOrder;\r\n } else {\r\n activeFilters = {};\r\n }\r\n \r\n buildQueryString();\r\n });\r\n\r\n applyBtn.addEventListener('click', buildQueryString);\r\n }\r\n\r\n if(sorting) {\r\n sorting.addEventListener('change', event => {\r\n const sortingValue = sorting.value;\r\n \r\n if(sortingValue == 'default') {\r\n delete activeFilters['Sortby'];\r\n delete activeFilters['SortOrder'];\r\n } else {\r\n activeFilters['Sortby'] = 'NameForSort';\r\n activeFilters['SortOrder'] = sortingValue.toUpperCase();\r\n }\r\n\r\n buildQueryString();\r\n })\r\n }\r\n}\r\n\r\nfunction buildQueryString() {\r\n const queryString = new URLSearchParams(activeFilters).toString();\r\n const currentPath = window.location.pathname;\r\n\r\n if(queryString.length > 0) {\r\n window.location.href = currentPath + '?' + queryString.replace(/PageNum=\\d+&/g,'');;\r\n } else {\r\n window.location.href = currentPath;\r\n }\r\n}\r\n\r\nfunction setupFromQueryString() {\r\n const urlSearchParams = new URLSearchParams(window.location.search);\r\n const params = Object.fromEntries(urlSearchParams.entries());\r\n\r\n Object.keys(params).forEach(key => {\r\n const value = params[key];\r\n\r\n if(!activeFilters[key]) {\r\n activeFilters[key] = [];\r\n }\r\n\r\n if(value.indexOf(',') > -1 ) {\r\n value.split(',').forEach(entry => {\r\n activeFilters[key].push(entry);\r\n })\r\n } else {\r\n activeFilters[key].push(value);\r\n } \r\n\r\n if(key != 'GroupID' && key != 'PageNum' && key != 'Sortby' && key != 'SortOrder') {\r\n const inputsWithKey = document.querySelectorAll(`[data-name=\"${key}\"]`);\r\n\r\n Array.from(inputsWithKey).forEach(input => {\r\n switch (input.type) {\r\n case 'range':\r\n input.value = value;\r\n break;\r\n \r\n case 'checkbox':\r\n default:\r\n if(value.indexOf(input.value) > -1) {\r\n input.checked = true;\r\n input.closest('.filter-item').querySelector('.filter-item__checkbox-toggle').checked = true;\r\n }\r\n break;\r\n }\r\n })\r\n }\r\n })\r\n}","export function setupCheckoutHelpers() {\r\n if(document.querySelector('.product-checkout-delivery')) {\r\n document.documentElement.classList.add('prevent-smooth');\r\n\r\n const shippingMethods = document.querySelectorAll('input[name=\"EcomCartShippingmethodID\"]');\r\n\r\n Array.from(shippingMethods).forEach(method => {\r\n method.addEventListener('input', makeRequiredOnPicked);\r\n })\r\n }\r\n\r\n const backButtons = document.querySelectorAll('.checkout-back-button');\r\n\r\n if(backButtons) {\r\n Array.from(backButtons).forEach(btn => {\r\n btn.addEventListener('click', event => {\r\n event.preventDefault();\r\n\r\n const form = btn.closest('form');\r\n\r\n Array.from(document.querySelectorAll('input[required]')).forEach(input => {\r\n input.required = false;\r\n })\r\n\r\n form.submit();\r\n })\r\n })\r\n }\r\n}\r\n\r\nfunction updatePrice(event) {\r\n const shippingPriceContainer = document.querySelector('.price-line__price');\r\n let shippingCurrency = shippingPriceContainer.getAttribute('data-currency');\r\n\r\n let newPrice = parseFloat(event.target.getAttribute('data-price'));\r\n\r\n shippingPriceContainer.setAttribute('data-price', newPrice);\r\n shippingPriceContainer.innerText = newPrice.toLocaleString('da-DK', {maximumFractionDigits: 2, minimumFractionDigits: 2}) + ' ' + shippingCurrency;\r\n\r\n updateTotalPrice();\r\n}\r\n\r\nfunction updateTotalPrice() {\r\n const totalPriceContainer = document.querySelector('.order-total');\r\n const currency = totalPriceContainer.getAttribute('data-currency');\r\n const priceLines = document.querySelectorAll('.product-checkout__price-wrapper .price-line__price:not(.order-total)');\r\n let price = 0;\r\n \r\n Array.from(priceLines).forEach(line => {\r\n const linePrice = parseFloat(line.getAttribute('data-price'));\r\n price = price + linePrice;\r\n });\r\n\r\n totalPriceContainer.innerText = price.toLocaleString('da-DK', {maximumFractionDigits: 2, minimumFractionDigits: 2}) + \" \" + currency;\r\n}\r\n\r\nfunction makeRequiredOnPicked(event) {\r\n if(event.target.value == \"SHIP3\") {\r\n const inputs = event.target.parentElement.querySelectorAll('[data-required=\"true\"]');\r\n Array.from(inputs).forEach(input => {\r\n input.required = true;\r\n });\r\n } else {\r\n const inputs = document.getElementById('EcomCartShippingmethodID_SHIP3').parentElement.querySelectorAll('input');\r\n Array.from(inputs).forEach(input => {\r\n input.required = false;\r\n });\r\n }\r\n}","export function setupAltCartCount() {\r\n const orderlines = getCookie(\"orderLinesInCart\");\r\n const qtyElements = document.querySelectorAll(\".cart-qty\");\r\n\r\n if(qtyElements && orderlines) {\r\n Array.from(qtyElements).forEach(element => {\r\n element.innerHTML = orderlines;\r\n element.setAttribute('data-qty', orderlines);\r\n })\r\n }\r\n\r\n Array.from(qtyElements).forEach(element => {\r\n element.classList.add('show');\r\n })\r\n}\r\n\r\nfunction getCookie(cookieName) {\r\n const match = document.cookie.match(new RegExp('(^| )' + cookieName + '=([^;]+)'));\r\n\r\n if (match) {\r\n return match[2];\r\n }\r\n\r\n return false;\r\n}","import { setupHeader } from './components/header';\r\nimport { setupParallaxImages } from './components/parallax-image';\r\nimport { setupProductInspiration } from './components/product-inspiraton';\r\nimport { setupCanvas } from './components/canvas';\r\nimport { setupUsps } from './components/usps';\r\nimport { onReady } from './utils/onReady';\r\nimport { isTouch, initVhUnitOverwrite } from './utils/helpers';\r\nimport { setupNavigation } from './components/navigation';\r\nimport { setupCalculator } from './components/calculator';\r\nimport { setupInspirationFilter } from './components/inspiraton-filter';\r\nimport { setupAccordions } from './components/accordion';\r\nimport { setupNewsFilter } from './components/news-filter';\r\nimport { setupGalleries } from './components/gallery';\r\nimport { setupFilters } from './components/filter';\r\nimport { setupToggleContent } from './components/toggle-content';\r\nimport { setupDeliveryDates } from './components/delivery-dates';\r\nimport { setupMaps } from './components/map';\r\nimport { setupTabs } from './components/tabs';\r\nimport { setupIGO } from './components/image-gallery-overlay';\r\nimport { setupProductImages } from './components/product-images';\r\nimport { setupProductFloatingBar } from './components/product-floating-bar';\r\nimport { setupSwipers } from './components/swiper';\r\nimport { setupIntersect } from './components/intersect';\r\nimport { setupImageLoad } from './components/image-load';\r\nimport { setupProductModal } from './components/product-modal';\r\nimport { setupCounters } from './components/counter';\r\nimport { setupFormSubmit } from './components/forms';\r\nimport { setupProductOverviewModal } from './components/product-overview';\r\nimport { setupMoveProductData } from './utils/moveContent';\r\nimport { setupProductFilters } from './components/product-filters';\r\nimport { setupSearchSelects } from './components/search-select';\r\nimport { setupDuoRangeSliders } from './components/duo-range-slider';\r\nimport { setupCheckoutHelpers } from './components/checkout-helpers';\r\nimport { setupSearch } from './components/search';\r\nimport { setupAltCartCount } from './components/cart-counter';\r\n\r\nfunction init() {\r\n document.body.classList.remove('standby');\r\n document.body.setAttribute('data-is-touch', isTouch);\r\n\r\n onReady(() => {\r\n\r\n setupHeader();\r\n initVhUnitOverwrite();\r\n setupProductInspiration();\r\n setupCanvas();\r\n setupUsps();\r\n setupNavigation();\r\n setupCalculator();\r\n setupInspirationFilter();\r\n setupAccordions();\r\n setupNewsFilter();\r\n setupFilters();\r\n setupGalleries();\r\n setupToggleContent();\r\n setupDeliveryDates();\r\n setupMaps();\r\n\r\n setTimeout(() => {\r\n setupSwipers();\r\n }, 5000)\r\n\r\n setupCounters();\r\n setupMoveProductData();\r\n setupTabs();\r\n setupIGO();\r\n setupProductImages();\r\n setupProductFloatingBar();\r\n setupProductModal();\r\n setupIntersect();\r\n setupImageLoad();\r\n setupProductFilters();\r\n setupProductOverviewModal();\r\n setupFormSubmit();\r\n setupSearchSelects();\r\n setupDuoRangeSliders();\r\n setupCheckoutHelpers();\r\n setupSearch();\r\n setupAltCartCount();\r\n });\r\n\r\n window.addEventListener('load', () => {\r\n setupParallaxImages();\r\n });\r\n}\r\n\r\ninit();","export function setupToggleContent() {\r\n const toggleTriggers = document.querySelectorAll('[data-action=\"open-content\"]');\r\n\r\n function clickToggleTrigger(e) {\r\n const toggleTrigger = e.currentTarget;\r\n const target = document.querySelector(toggleTrigger.getAttribute('data-target'));\r\n\r\n if (target) {\r\n if (!target.classList.contains('js-open')) {\r\n toggleTrigger.classList.add('js-open');\r\n target.classList.add('js-open');\r\n target.style.height = `${target.scrollHeight}px`;\r\n\r\n if (toggleTrigger.getAttribute('data-action-scroll') != 'no-scroll') {\r\n setTimeout(function() {\r\n target.scrollIntoView({behavior: 'smooth'});\r\n },300);\r\n }\r\n\r\n if (target.classList.contains('dialog')) {\r\n document.querySelector('body').style.overflow = 'hidden';\r\n }\r\n } else {\r\n toggleTrigger.classList.remove('js-open');\r\n target.classList.remove('js-open');\r\n target.style.height = null;\r\n\r\n if (target.classList.contains('dialog')) {\r\n document.querySelector('body').style.overflow = null;\r\n }\r\n }\r\n }\r\n }\r\n\r\n toggleTriggers.forEach(toggleTrigger => {\r\n toggleTrigger.addEventListener('click',clickToggleTrigger);\r\n });\r\n}","export function setupMoveProductData() {\r\n if (document.querySelector('.fillProductNumber') && document.getElementById('productNumber')) {\r\n let productNumber = document.getElementById('productNumber').innerText.toLowerCase();\r\n\r\n productNumber = productNumber.charAt(0).toUpperCase() + productNumber.slice(1)\r\n\r\n Array.from(document.querySelectorAll('.fillProductNumber')).forEach(element => {\r\n const type = element.nodeName.toLowerCase();\r\n\r\n switch(type) {\r\n case 'input':\r\n element.value = productNumber;\r\n break;\r\n\r\n default:\r\n element.innerText = productNumber;\r\n break;\r\n }\r\n });\r\n }\r\n\r\n if (document.querySelector('.fillProductName') && document.getElementById('productName')) {\r\n const productName = document.getElementById('productName').innerText;\r\n\r\n Array.from(document.querySelectorAll('.fillProductName')).forEach(element => {\r\n const type = element.nodeName.toLowerCase();\r\n\r\n switch (type) {\r\n case 'input':\r\n element.value = productName;\r\n break;\r\n\r\n default:\r\n element.innerText = productName;\r\n break;\r\n }\r\n });\r\n }\r\n\r\n Array.from(document.querySelectorAll('.swap-link')).forEach(link => {\r\n const newHref = link.getAttribute('data-link');\r\n\r\n link.setAttribute('href', newHref);\r\n link.removeAttribute('data-link');\r\n });\r\n\r\n Array.from(document.querySelectorAll('.rich-text a, .header__ctas a')).forEach(link => {\r\n const oldHref = link.getAttribute('href');\r\n\r\n if (oldHref && oldHref.indexOf('DWSDownload.aspx') > -1) {\r\n const newHref = oldHref.split('File=')[1];\r\n link.setAttribute('href', newHref);\r\n }\r\n });\r\n}\r\n","import { onScroll, scrollTop } from \"../utils/scroll\";\r\n\r\nexport function setupProductFloatingBar() {\r\n if(document.querySelector('.product-floating-bar') && document.getElementById('product-order-button')) {\r\n const bar = document.querySelector('.product-floating-bar');\r\n const btn = document.getElementById('product-order-button');\r\n const navHeight = parseInt(window.getComputedStyle(document.querySelector('.navigation'), ':before').getPropertyValue('height'));\r\n\r\n let triggerPoint = btn.offsetTop + btn.offsetHeight;\r\n\r\n if(navHeight) {\r\n triggerPoint = triggerPoint - navHeight;\r\n }\r\n\r\n onScroll(() => {\r\n if(scrollTop >= triggerPoint) {\r\n bar.classList.add('js-slide-up');\r\n } else {\r\n bar.classList.remove('js-slide-up');\r\n }\r\n })\r\n }\r\n}","export function setupProductOverviewModal() {\r\n \r\n const toggleFilterBtn = document.getElementById('toggle-filter-btn');\r\n const closeFilterBtn = document.getElementById('filter-article-close');\r\n\r\n if (toggleFilterBtn && closeFilterBtn) {\r\n toggleFilterBtn.addEventListener('click', toggleFilterArticleShow);\r\n closeFilterBtn.addEventListener('click', toggleFilterArticleShow);\r\n }\r\n\r\n function toggleFilterArticleShow () {\r\n document.body.classList.toggle('body-show-filters');\r\n }\r\n};\r\n","export function setupImageLoad() {\r\n const imageLoadELements = document.querySelectorAll('[data-action*=\"image-load\"]');\r\n\r\n function imageLoaded(e) {\r\n const elementImage = e.target ? e.target : e;\r\n const element = elementImage.closest('[data-action*=\"image-load\"]');\r\n\r\n if (element) {\r\n element.classList.add('image-loaded');\r\n }\r\n }\r\n\r\n imageLoadELements.forEach(element => {\r\n const elementImage = element.querySelector('img');\r\n\r\n if (elementImage) {\r\n if (elementImage.complete) {\r\n imageLoaded(elementImage);\r\n } else {\r\n elementImage.addEventListener('load',imageLoaded);\r\n elementImage.addEventListener('error',imageLoaded);\r\n }\r\n }\r\n });\r\n}","import { onScroll, scrollTop } from '../utils/scroll';\r\nimport { currentWindowHeight, currentWindowWidth } from '../utils/windowResize';\r\n\r\nexport function setupParallaxImages() {\r\n const parallaxImageWraps = document.querySelectorAll('[data-action=\"parallax-image\"]');\r\n const mdMq = window.matchMedia('(min-width: 1024px)');\r\n const buffer = mdMq.matches ? currentWindowHeight / 1.25 : currentWindowHeight / 1.25;\r\n\r\n Array.from(parallaxImageWraps).forEach(imageWrap => {\r\n const image = imageWrap.querySelector('img');\r\n const imageWrapHeight = imageWrap.offsetHeight;\r\n const imageHeight = image.offsetHeight;\r\n const top = imageWrap.getBoundingClientRect().top + scrollTop - buffer;\r\n const maxY = (imageHeight - imageWrapHeight); //+ (((200 / 1920) * currentWindowWidth) * 1);\r\n\r\n image.setAttribute('data-top', top);\r\n image.setAttribute('data-max-y', maxY);\r\n });\r\n\r\n onScroll(() => {\r\n Array.from(parallaxImageWraps).forEach(imageWrap => {\r\n const image = imageWrap.querySelector('img');\r\n const top = image.getAttribute('data-top');\r\n const maxY = image.getAttribute('data-max-y');\r\n const newY = mdMq.matches ? (scrollTop - top) / 2.5 : (scrollTop - top) / 5;\r\n let translateY = newY <= maxY ? newY : maxY;\r\n\r\n if (imageWrap.hasAttribute('data-direction')) {\r\n if (imageWrap.getAttribute('data-direction') == 'reverse') {\r\n translateY = translateY * -1;\r\n }\r\n }\r\n\r\n if (scrollTop >= top) {\r\n image.style.transform = `translateZ(0) translateY(${translateY}px)`;\r\n } else {\r\n image.style.transform = null;\r\n }\r\n });\r\n });\r\n}"],"names":["scrollTop","document","documentElement","body","ticking","scrollFunctions","animate","forEach","funcRef","scrollHandler","requestAnimationFrame","onScroll","handler","triggerNow","length","window","addEventListener","push","setupHeader","isLarge","isMedium","header","headerImageWrapBottom","width","minWidth","minY","headerImageWrap","headerImage","height","querySelector","enableAnimation","classList","add","contains","offsetHeight","offsetWidth","headerTransform","style","transform","getBoundingClientRect","top","headerImageBottom","newWidth","newY","scale","headerImageTransform","transition","headerCampaignImage","complete","currentBreakpoint","resizeTimer","breakpoints","breakpointKeys","Object","keys","currentWindowWidth","innerWidth","currentWindowHeight","innerHeight","resizeFunctions","getWindowSizes","lastFoundWidth","key","index","resizeHandler","clearTimeout","setTimeout","onWindowResize","setupProductInspiration","productInspirations","querySelectorAll","Array","from","productInspiration","items","prev","next","current","activeIndex","updateCurrentItem","remove","updateNewItem","textContent","parseInt","setAttribute","CookieInformation","getConsentGivenFor","isTouch","setVhProp","vh","setProperty","isIE11","MSInputMethodContext","documentMode","mouse","x","y","setupCanvas","canceled","hoverTarget","canvasText","hasAttribute","getAttribute","canvasIcon","canvas","circle","update","canvasMouseMove","e","clientX","clientY","enterTrigger","currentTarget","leaveTrigger","canvasMouseTriggers","scaleTriggers","hoverScaleTrigger","c","newRadius","img","scaleTrigger","getContext","radius","lastMouse","_this","draw","newX","clearRect","fillStyle","beginPath","arc","Math","PI","fill","closePath","font","fillText","drawImage","Image","src","mouseTrigger","orientationChangeFunctions","orientationChangeHandler","orientationChange","setupUsps","uspIconList","uspList","iconTransitionEnd","uspsIcons","icon","uspsModule","closest","uspsTexts","nextActiveIndex","currentActiveIndex","indexOf","removeEventListener","setUspTextsHeight","uspText","scrollHeight","uspsModules","uspModule","IntersectionObserver","changes","observer","change","target","activeIcons","filter","intersectionRatio","uspsIcon","root","rootMargin","threshold","observe","functionReferences","readyState","readyEventBound","emptyCallbackArrays","tempArray","slice","onReady","functionReference","getElementScroll","element","Element","Document","Window","left","pageXOffset","scrollLeft","pageYOffset","scrollX","scrollY","console","warn","className","scrollLocked","enableScrollLock","scrollPosition","htmlTag","scrollTo","marginTop","position","overflow","overflowY","disableScrollLock","removeAttribute","closeSearchBar","setupNavigation","scrollFunction","navigation","primaryWithChildren","level2WithChildren","logo","primary","navigationButton","path","megaMenus","mdMq","matchMedia","toggleMenuOpen","hideOpenMenus","activeLinks","activeLevel2Links","activeLink","activeElement","removeBodyEvents","updateMenu","toggleLevel1Open","item","level2","matches","clickLinkWithChildren","link","preventDefault","clickL2LinkWithChildren","menu","event","location","pathname","subLink","subLinkPath","href","substring","lastIndexOf","setupCalculator","terraceArea","productSelector","productImage","calculateTriggers","updateFields","lengthField","widthField","m2Field","deckingAreaText","printButton","categoryErrorMessage","addressErrorMessage","areaErrorMessage","calculator","Terrasseberegner_print_result","category","options","selectedIndex","text","value","navn","getElementById","adresse","by","telefon","cvr","tareal","deckingArea","innerHTML","mm120","mm145","c_45","c60","uPic","upic2","upk","fPs","cat_img","print_result","myWindow","open","myHTML","checked","write","close","xhttp","XMLHttpRequest","onreadystatechange","this","status","send","alert","setFieldValues","dec","num","match","max","decimalPlaces","toFixed","field","factor","showDecimals","ceil","calculate","replace","m2","Number","trigger","setupInspirationFilter","inspirationFilter","filterType","filterValue","listFiltered","inspirationFilters","inspirationItems","itemInclude","inspirationFilterAvailability","inspirationList","disabled","some","detectStyleDeclatationName","t","eventTypeName","transitions","OTransition","MozTransition","WebkitTransition","el","createElement","undefined","accordionChange","accordionTarget","accordion","accordions","focus","toggle","setPrefixedEvent","type","callback","prefix","toLowerCase","keycode","accordionToggle","ctrlKey","metaKey","shiftKey","accordionTtransition","setupNewsFilter","newsFilter","newsFilters","newsItems","newsList","setupGalleries","snapToItems","galleries","gallery","galleryImages","imageCount","imageLoaded","checkImages","imageError","maxPxPrSecond","galleryWrap","galleryList","galleryItems","progressBar","maxTranslate","minTranslate","scrollWidth","listAnimation","move","touch","startX","startY","moveX","moveY","direction","distanceX","translateX","pxMoved","moved","startTime","endTime","time","animating","animationSteps","getAnimationSteps","moveExtra","newIndex","moveTotal","maxBounce","maxPrFrame","lastMove","nextMove","movedTotal","bouncePx","bounce","round","itemSnapStart","itemWidth","offsetLeft","movedExtra","getNextMove","bouncedExtra","getNextBounceMove","getBounceSteps","reverse","startGallery","Date","changedTouches","pageX","pageY","documentMouseMove","moveGallery","distanceY","touches","targetTouches","newTranslateX","progress","scalePrPx","moveList","endGallery","pxPrSecond","getTime","_pxPrSecond","animationStepIndex","animateList","resetGallery","moveListExtra","cancelAnimationFrame","loadGallery","image","hash","startsWith","focusedElement","keyCode","previousElementSibling","nextElementSibling","classNames","Filter","container","dom","filters","allFilter","targetContainer","settings","i","itemCountReplace","tagName","filterHandler","replaceWithNumberOfItems","filterItems","isButton","name","siblingRadios","r","deselectRadio","bind","itemFilterValues","split","cleanFilterValue","trim","map","filterValues","getSetValues","isComboFilter","showItem","cleanValue","sections","s","section","replaceValue","children","option","count","optionStr","innerText","valArray","len","setupDeliveryDates","deliveryDatesSearchField","deliveryDatesSearchResultText","deliveryDatesZipPlaceholder","deliveryDatesDaysPlaceholder","deliveryDatesErrorMessagePlaceholder","errorMessage","deliveryDates","showSearchResultText","hideSearchResultText","showErrorMessage","hideErrorMessage","searchDates","zipCode","request","searchValue","jsonUrl","protocol","hostname","onload","data","areaId","weekdays","areaDays","daysArray","daysText","searchData","JSON","parse","responseText","deliveryZipCodes","areaData","deliveryAreas","id","days","day","onerror","mapsApiKey","mapStyles","featureType","elementType","stylers","saturation","color","lightness","visibility","weight","gamma","userLocation","lat","lng","markersShown","mapContainer","showUserLocation","mapObject","navigator","geolocation","getCurrentPosition","google","maps","LatLng","coords","latitude","longitude","Marker","anchor","Point","size","Size","url","btoa","title","setMap","panTo","setZoom","markersSort","markerElements","error","code","message","enableHighAccuracy","timeout","maximumAge","Infinity","degreesToRadians","degrees","getDistanceBetweenPoints","lat1","lng1","lat2","lng2","dLat","dLong","a","sin","cos","atan2","sqrt","compareDistances","b","distanceA","distanceB","order","markersSorted","sort","marker","parentNode","appendChild","markersShowAll","markerElement","markersInfoLowlight","setupMaps","mapContainers","scripts","promises","script","Promise","resolve","reject","async","all","then","log","mapTarget","markers","markerIcon","infoWindows","useCluster","useInfoWindows","cluster","Map","mapTypeId","mapTypeControl","styles","streetViewControl","zoomControl","bounds","LatLngBounds","showUserLocationButton","markerSearchInput","loadMarkersButton","mapInteraction","boundsFit","zoomBounds","zoomBoundsSet","infoWindow","parseFloat","elementMarkerIcon","isNaN","setIcon","infoWindowContent","infoWindowNode","InfoWindow","content","addListener","latLng","shouldFocus","_infoWindow","extend","clusterOptions","gridSize","maxZoom","textColor","textSize","markerClusterer","MarkerClusterer","fitBounds","getZoom","getBounds","getPosition","userLocated","getCenter","debounce","markersNew","clearMarkers","addMarkers","markersHidden","loadMarkers","catch","delay","timer","context","args","arguments","apply","openTab","tab","tabContent","activeTab","activeTabContent","openTabByHashId","isObject","obj","constructor","tabs","ssrDocument","blur","nodeName","createEvent","initEvent","childNodes","getElementsByTagName","createElementNS","importNode","host","origin","search","getDocument","doc","ssrWindow","userAgent","history","replaceState","pushState","go","back","CustomEvent","getComputedStyle","getPropertyValue","screen","getWindow","win","Dom7","super","proto","__proto__","defineProperty","get","set","makeReactive","arrayFlat","arr","res","isArray","arrayFilter","prototype","call","$","selector","html","toCreate","tempParent","qsa","nodeType","uniqueArray","arrayUnique","fn","Methods","addClass","classes","removeClass","hasClass","toggleClass","attr","attrs","attrName","removeAttr","duration","transitionDuration","on","eventType","targetSelector","listener","capture","handleLiveEvent","eventData","dom7EventData","unshift","is","parents","k","handleEvent","events","j","dom7LiveListeners","proxyListener","dom7Listeners","off","handlers","dom7proxy","splice","evt","detail","bubbles","cancelable","dataIndex","dispatchEvent","fireCallBack","outerWidth","includeMargins","outerHeight","offset","box","clientTop","clientLeft","css","props","prop","each","compareWith","webkitMatchesSelector","msMatchesSelector","child","previousSibling","eq","returnIndex","append","els","newChild","tempDiv","firstChild","prepend","insertBefore","nextAll","nextEls","prevAll","prevEls","parent","find","foundElements","found","removeChild","nextTick","now","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","currentStyle","WebKitCSSMatrix","webkitTransform","join","MozTransform","OTransform","MsTransform","msTransform","toString","m41","m42","o","to","noExtend","nextSource","node","HTMLElement","keysArray","nextIndex","nextKey","desc","getOwnPropertyDescriptor","enumerable","__swiper__","setCSSProperty","varName","varValue","animateCSSModeScroll","_ref","swiper","targetPosition","side","startPosition","translate","params","speed","wrapperEl","scrollSnapType","cssModeFrameID","dir","isOutOfBound","min","easeProgress","currentPosition","methodName","writable","support","getSupport","smoothScroll","DocumentTouch","passiveListener","supportsPassive","opts","gestures","calcSupport","deviceCached","getDevice","overrides","_temp","platform","ua","device","ios","android","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","os","calcDevice","browser","calcBrowser","isSafari","isWebView","test","transitionEmit","runCallbacks","step","previousIndex","emit","closestElement","base","__closestFrom","assignedSlot","getRootNode","onResize","allowSlideNext","allowSlidePrev","setBreakpoint","snapGrid","updateSize","updateSlides","updateSlidesClasses","slidesPerView","isEnd","isBeginning","centeredSlides","slideTo","slides","autoplay","running","paused","run","watchOverflow","checkOverflow","dummyEventAttached","dummyEventListener","method","touchEvents","nested","domMethod","swiperMethod","start","passiveListeners","passive","onTouchStart","onTouchMove","end","onTouchEnd","cancel","preventClicks","preventClicksPropagation","onClick","cssMode","updateOnWindowResize","isGridEnabled","grid","rows","init","touchEventsTarget","initialSlide","resizeObserver","createElements","enabled","focusableElements","preventInteractionOnTransition","edgeSwipeDetection","edgeSwipeThreshold","autoHeight","setWrapperSize","virtualTranslate","effect","breakpointsBase","spaceBetween","slidesPerGroup","slidesPerGroupSkip","slidesPerGroupAuto","centeredSlidesBounds","slidesOffsetBefore","slidesOffsetAfter","normalizeSlideIndex","centerInsufficientSlides","roundLengths","touchRatio","touchAngle","simulateTouch","shortSwipes","longSwipes","longSwipesRatio","longSwipesMs","followFinger","allowTouchMove","touchMoveStopPropagation","touchStartPreventDefault","touchStartForcePreventDefault","touchReleaseOnEdges","uniqueNavElements","resistance","resistanceRatio","watchSlidesProgress","grabCursor","slideToClickedSlide","preloadImages","updateOnImagesReady","loop","loopAdditionalSlides","loopedSlides","loopFillGroupWithBlank","loopPreventsSlide","rewind","swipeHandler","noSwiping","noSwipingClass","noSwipingSelector","maxBackfaceHiddenSlides","containerModifierClass","slideClass","slideBlankClass","slideActiveClass","slideDuplicateActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slideDuplicateNextClass","slidePrevClass","slideDuplicatePrevClass","wrapperClass","runCallbacksOnInit","_emitClasses","prototypes","eventsEmitter","priority","self","eventsListeners","destroyed","once","onceHandler","__emitterProxy","_len","_key","onAny","eventsAnyListeners","offAny","eventHandler","_len2","_key2","eventsArray","$el","clientWidth","clientHeight","isHorizontal","isVertical","assign","getDirectionLabel","property","margin-top","margin-bottom ","margin-left","margin-right","padding-left","padding-right","marginRight","getDirectionPropertyValue","label","$wrapperEl","swiperSize","rtlTranslate","rtl","wrongRTL","isVirtual","virtual","previousSlidesLength","slidesLength","slidesGrid","slidesSizesGrid","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","slidePosition","prevSlideSize","virtualSize","marginLeft","marginBottom","gridEnabled","initSlides","slideSize","shouldResetSlideSize","slide","updateSlide","slideStyles","paddingLeft","paddingRight","currentTransform","currentWebKitTransform","boxSizing","floor","swiperSlideSize","abs","updateWrapperSize","newSlidesGrid","slidesGridItem","_","slideIndex","allSlidesSize","slideSizeValue","maxSnap","snap","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","v","updateSlidesOffset","backFaceHiddenClass","hasClassBackfaceClassAdded","updateAutoHeight","activeSlides","newHeight","setTransition","getSlideByIndex","visibleSlides","swiperSlideOffset","offsetTop","updateSlidesProgress","offsetCenter","visibleSlidesIndexes","slideOffset","slideProgress","originalSlideProgress","slideBefore","slideAfter","originalProgress","updateProgress","multiplier","translatesDiff","wasBeginning","wasEnd","realIndex","activeSlide","nextSlide","prevSlide","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousRealIndex","previousSnapIndex","skip","initialized","updateClickedSlide","slideFound","clickedSlide","clickedIndex","currentTranslate","setTranslate","byController","previousTranslate","newProgress","translateTo","translateBounds","internal","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","transitionStart","transitionEnd","initial","Error","indexAsNumber","isFinite","normalizedTranslate","normalizedGrid","normalizedGridNext","_immediateVirtual","_swiperImmediateVirtual","onSlideToWrapperTransitionEnd","slideToLoop","slideNext","perGroup","slidesPerViewDynamic","increment","loopFix","_clientLeft","slidePrev","normalize","val","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","lastIndex","slideReset","slideToClosest","currentSnap","slideToIndex","loopCreate","$selector","blankSlidesNum","blankNode","prependSlides","appendSlides","cloneNode","diff","loopDestroy","setGrabCursor","moving","isLocked","cursor","unsetGrabCursor","attachEvents","touchEventsData","originalEvent","$targetEl","isTouchEvent","which","button","isTouched","isMoved","shadowRoot","isTargetShadow","allowClick","currentX","currentY","iOSEdgeSwipeDetection","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","shouldPreventDefault","isContentEditable","freeMode","targetTouch","preventedByNestedSwiper","diffX","diffY","stopPropagation","startTranslate","allowMomentumBounce","disableParentSwiper","touchEndTime","timeDiff","pathTree","composedPath","lastClickTime","currentPos","stopIndex","groupSize","rewindFirstIndex","rewindLastIndex","ratio","nextEl","prevEl","stopImmediatePropagation","detachEvents","breakpoint","breakpointParams","needsReLoop","isEnabled","getBreakpoint","originalParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","directionChanged","changeDirection","disable","enable","containerEl","currentHeight","points","point","minRatio","substr","lastSlideIndex","wasLocked","lastSlideRightEdge","addClasses","suffixes","entries","resultClasses","prepareClasses","pointer-events","free-mode","autoheight","grid-column","css-mode","centered","watch-progress","removeClasses","images","loadImage","imageEl","srcset","sizes","checkForComplete","imagesLoaded","imagesToLoad","currentSrc","extendedDefaults","Swiper","swipers","newParams","modules","__modules__","allModulesParams","mod","extendParams","moduleParamName","moduleParams","auto","swiperParams","defaults","passedParams","eventName","velocity","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","velocities","cls","slideEl","updates","getSlideClasses","view","exact","spv","breakLoop","translated","translateValue","newDirection","needUpdate","currentDirection","mounted","getWrapperSelector","getWrapper","wrapper","mount","deleteInstance","cleanStyles","object","deleteProps","newDefaults","module","m","installModule","createElementIfNotDefined","checkProps","Navigation","getEl","toggleEl","disabledClass","lockClass","$nextEl","$prevEl","onPrevClick","onNextClick","destroy","hideOnClick","hiddenClass","_s","targetEl","pagination","clickable","isHidden","classesToSelector","Pagination","pfx","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","bullets","bulletSize","dynamicBulletIndex","isPaginationDisabled","setSideBullets","$bulletEl","total","paginationType","firstIndex","midIndex","suffix","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","progressbarDirection","scaleX","scaleY","render","paginationHTML","numberOfBullets","prototypeGroup","protoMethod","use","animationFrame","ResizeObserver","_ref2","contentBoxSize","contentRect","inlineSize","blockSize","unobserve","observers","attach","ObserverFunc","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","attributes","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","modal","mainClass","IGO","triggerElement","parentElement","igo","closeWord","isSingleImage","startingIndex","getStartIndex","getGalleryImages","createOverlay","startIndexElement","imageArray","thumb","fullImage","allImages","imageInfo","getImageIndex","imagesInContainer","igoBackdrop","_this2","igoCloseBtn","igoContent","createGallery","igoContainer","alt","swiperDOM","setupIntersect","intersectElements","setupProductModal","buttons","closeUpsell","modalPopup","onhashchange","newURL","setupCounters","counters","counter","addBtn","subBtn","input","substract","setupFormSubmit","submitBtns","userNav","submitForm","btnText","btnLoader","display","submitBtn","resetPasswordBtn","loginFormWrapper","resetPasswordForm","loginForm","setupSearchSelects","select","dropdown","optionsLabels","clearBtn","clear","resetList","searchTerm","searchWords","hasMatch","word","searchRegEx","RegExp","replaceAll","setupDuoRangeSliders","rangeSlider","updateValues","slide1","slide2","displayMin","displayMax","temp","slider","oninput","parallax","setTransform","rtlFactor","p","opacity","currentOpacity","currentScale","_swiper","parallaxEl","$parallaxEl","parallaxDuration","activeFilters","setupProductFilters","Vue","showFilters","facets","translations","allProducts","currentGroup","created","group","urlSearchParams","URLSearchParams","fromEntries","Group","fetch","response","json","FacetGroups","Facets","$nextTick","filterSection","sorting","applyBtn","inputsWithKey","entry","setupFromQueryString","filterName","valueIndex","tempBy","tempOrder","buildQueryString","sortingValue","toUpperCase","setUpFilters","methods","stringAddition","paramType","translation","Key","Value","sortedOptions","Count","getLowestValue","newList","getHighestValue","at","queryString","currentPath","makeRequiredOnPicked","inputs","required","setupAltCartCount","orderlines","cookieName","cookie","getCookie","qtyElements","clickToggleTrigger","toggleTrigger","scrollIntoView","productNumber","productName","fractionEl","productDetailsMedia","bar","triggerPoint","toggleFilterBtn","closeFilterBtn","toggleFilterArticleShow","filterContainers","setupFilters","swiperContainer","charAt","newHref","oldHref","tabsContainer","setupTabs","triggers","steps","btn","navHeight","elementImage","shippingMethods","backButtons","form","submit","setupCheckoutHelpers","searchToggleBtn","searchBarInput","searchBarIcon","searchClose","toggleSearchBar","includes","setupSearch","parallaxImageWraps","buffer","imageWrap","imageWrapHeight","imageHeight","maxY","translateY"],"mappings":"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"}