{"version":3,"file":"main.min.js","sources":["../../../../../Frontend/js/utils/windowResize.js","../../../../../Frontend/js/utils/onReady.js","../../../../../Frontend/js/utils/helpers.js","../../../../../Frontend/js/modules/header.js","../../../../../Frontend/js/utils/scrollTo.js","../../../../../Frontend/js/utils/elementProperties.js","../../../../../Frontend/js/components/anchors.js","../../../../../Frontend/js/utils/scroll.js","../../../../../Frontend/js/components/intersect.js","../../../../../node_modules/@vimeo/player/dist/player.es.js","../../../../../Frontend/js/utils/lazyImage.js","../../../../../Frontend/js/components/filter.js","../../../../../Frontend/js/components/accordion.js","../../../../../node_modules/ssr-window/ssr-window.esm.js","../../../../../node_modules/dom7/dom7.esm.js","../../../../../node_modules/swiper/esm/utils/dom.js","../../../../../node_modules/swiper/esm/utils/get-support.js","../../../../../node_modules/swiper/esm/utils/get-device.js","../../../../../node_modules/swiper/esm/utils/get-browser.js","../../../../../node_modules/swiper/esm/utils/utils.js","../../../../../node_modules/swiper/esm/modules/resize/resize.js","../../../../../node_modules/swiper/esm/modules/observer/observer.js","../../../../../node_modules/swiper/esm/components/core/events/onTouchStart.js","../../../../../node_modules/swiper/esm/components/core/events/onResize.js","../../../../../node_modules/swiper/esm/components/core/events/index.js","../../../../../node_modules/swiper/esm/components/core/defaults.js","../../../../../node_modules/swiper/esm/components/core/core-class.js","../../../../../node_modules/swiper/esm/components/core/modular.js","../../../../../node_modules/swiper/esm/components/core/events-emitter.js","../../../../../node_modules/swiper/esm/components/core/update/index.js","../../../../../node_modules/swiper/esm/components/core/update/updateSize.js","../../../../../node_modules/swiper/esm/components/core/update/updateSlides.js","../../../../../node_modules/swiper/esm/components/core/update/updateAutoHeight.js","../../../../../node_modules/swiper/esm/components/core/update/updateSlidesOffset.js","../../../../../node_modules/swiper/esm/components/core/update/updateSlidesProgress.js","../../../../../node_modules/swiper/esm/components/core/update/updateProgress.js","../../../../../node_modules/swiper/esm/components/core/update/updateSlidesClasses.js","../../../../../node_modules/swiper/esm/components/core/update/updateActiveIndex.js","../../../../../node_modules/swiper/esm/components/core/update/updateClickedSlide.js","../../../../../node_modules/swiper/esm/components/core/translate/index.js","../../../../../node_modules/swiper/esm/components/core/translate/getTranslate.js","../../../../../node_modules/swiper/esm/components/core/translate/setTranslate.js","../../../../../node_modules/swiper/esm/components/core/translate/minTranslate.js","../../../../../node_modules/swiper/esm/components/core/translate/maxTranslate.js","../../../../../node_modules/swiper/esm/components/core/translate/translateTo.js","../../../../../node_modules/swiper/esm/components/core/transition/index.js","../../../../../node_modules/swiper/esm/components/core/transition/setTransition.js","../../../../../node_modules/swiper/esm/components/core/transition/transitionStart.js","../../../../../node_modules/swiper/esm/components/core/transition/transitionEnd.js","../../../../../node_modules/swiper/esm/components/core/slide/index.js","../../../../../node_modules/swiper/esm/components/core/slide/slideTo.js","../../../../../node_modules/swiper/esm/components/core/slide/slideToLoop.js","../../../../../node_modules/swiper/esm/components/core/slide/slideNext.js","../../../../../node_modules/swiper/esm/components/core/slide/slidePrev.js","../../../../../node_modules/swiper/esm/components/core/slide/slideReset.js","../../../../../node_modules/swiper/esm/components/core/slide/slideToClosest.js","../../../../../node_modules/swiper/esm/components/core/slide/slideToClickedSlide.js","../../../../../node_modules/swiper/esm/components/core/loop/index.js","../../../../../node_modules/swiper/esm/components/core/loop/loopCreate.js","../../../../../node_modules/swiper/esm/components/core/loop/loopFix.js","../../../../../node_modules/swiper/esm/components/core/loop/loopDestroy.js","../../../../../node_modules/swiper/esm/components/core/grab-cursor/index.js","../../../../../node_modules/swiper/esm/components/core/grab-cursor/setGrabCursor.js","../../../../../node_modules/swiper/esm/components/core/grab-cursor/unsetGrabCursor.js","../../../../../node_modules/swiper/esm/components/core/manipulation/index.js","../../../../../node_modules/swiper/esm/components/core/manipulation/appendSlide.js","../../../../../node_modules/swiper/esm/components/core/manipulation/prependSlide.js","../../../../../node_modules/swiper/esm/components/core/manipulation/addSlide.js","../../../../../node_modules/swiper/esm/components/core/manipulation/removeSlide.js","../../../../../node_modules/swiper/esm/components/core/manipulation/removeAllSlides.js","../../../../../node_modules/swiper/esm/components/core/events/onTouchMove.js","../../../../../node_modules/swiper/esm/components/core/events/onTouchEnd.js","../../../../../node_modules/swiper/esm/components/core/events/onScroll.js","../../../../../node_modules/swiper/esm/components/core/events/onClick.js","../../../../../node_modules/swiper/esm/components/core/breakpoints/index.js","../../../../../node_modules/swiper/esm/components/core/breakpoints/setBreakpoint.js","../../../../../node_modules/swiper/esm/components/core/breakpoints/getBreakpoint.js","../../../../../node_modules/swiper/esm/components/core/check-overflow/index.js","../../../../../node_modules/swiper/esm/components/core/classes/index.js","../../../../../node_modules/swiper/esm/components/core/classes/addClasses.js","../../../../../node_modules/swiper/esm/components/core/classes/removeClasses.js","../../../../../node_modules/swiper/esm/components/core/images/index.js","../../../../../node_modules/swiper/esm/components/core/images/loadImage.js","../../../../../node_modules/swiper/esm/components/core/images/preloadImages.js","../../../../../node_modules/swiper/esm/components/pagination/pagination.js","../../../../../node_modules/swiper/esm/components/parallax/parallax.js","../../../../../Frontend/js/components/swiper.js","../../../../../Frontend/js/components/navigation.js","../../../../../Frontend/js/modules/process-line.js","../../../../../Frontend/js/modules/search.js","../../../../../Frontend/js/main.js","../../../../../Frontend/js/components/video.js"],"sourcesContent":["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 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","/**\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","\r\nexport 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\nexport const isTouch = 'ontouchstart' in window;\r\nexport const isIE11 = !!window.MSInputMethodContext && !!document.documentMode;\r\n\r\n/**\r\n * Sets a custom CSS variable to ensure precise vh unit mesuarment\r\n *\r\n */\r\n\r\n export function setVhProp(event, callback) {\r\n\r\n // Small delay is needed when orientationchange is triggered\r\n const delay = event != undefined && event.type == 'orientationchange' ? 100 : 0;\r\n setTimeout(() => {\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 if (callback) {\r\n callback();\r\n }\r\n }, delay);\r\n}\r\n\r\nexport function initVhUnitOverwrite(callback = null) {\r\n setVhProp(event, callback);\r\n window.addEventListener('orientationchange', (event) => {\r\n setVhProp(event, callback)\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\n/**\r\n * Detect if a device as touch support\r\n *\r\n * 'ontouchstart' in window - works on most browsers\r\n * navigator.maxTouchPoints - works on IE10/11 and Surface\r\n */\r\nexport function isTouchDevice() {\r\n return !!('ontouchstart' in window || navigator.maxTouchPoints);\r\n}\r\n","export function setHeaderVideoWidth (selector = '.header') {\r\n const header = document.querySelector(selector);\r\n\r\n if (header) {\r\n const headerVideo = header.querySelector('.header__video');\r\n\r\n if (headerVideo) {\r\n const headerWidth = header.clientWidth;\r\n const headerHeight = header.clientHeight;\r\n let videoHeight = headerWidth * .5625;\r\n\r\n headerVideo.style.width = null;\r\n headerVideo.style.height = Math.ceil(videoHeight) + 'px';\r\n\r\n if (headerHeight > videoHeight) {\r\n let videoWidth = headerHeight * 1.777777777777778;\r\n\r\n headerVideo.style.height = null;\r\n headerVideo.style.width = Math.ceil(videoWidth) + 'px';\r\n }\r\n }\r\n }\r\n}","import { getElementPosition } from './elementProperties';\r\n\r\nconst easeInOutQuad = function(currentTime, start, change, duration) {\r\n let time = currentTime;\r\n time /= duration / 2;\r\n if (time < 1) {\r\n return (change / 2) * time * time + start;\r\n }\r\n time--;\r\n return (-change / 2) * (time * (time - 2) - 1) + start;\r\n};\r\n\r\nconst easeInOutQuintic = function(currentTime, start, change, duration) {\r\n let time = currentTime;\r\n const ts = (time /= duration) * time,\r\n tc = ts * time;\r\n return start + change * (6 * tc * ts + -15 * ts * ts + 10 * tc);\r\n};\r\n\r\nexport function scrollTo(to, duration = 750, callback) {\r\n function move(amount) {\r\n if (document.scrollingElement) {\r\n document.scrollingElement.scrollTop = amount;\r\n } else {\r\n document.documentElement.scrollTop = amount;\r\n document.body.parentNode.scrollTop = amount;\r\n document.body.scrollTop = amount;\r\n }\r\n }\r\n function position() {\r\n return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop;\r\n }\r\n\r\n const start = position(),\r\n change = to instanceof Element ? getElementPosition(to).top - start : to - start,\r\n increment = 20;\r\n\r\n\r\n let currentTime = 0;\r\n\r\n const animate = function() {\r\n // increment the time\r\n currentTime += increment;\r\n // find the value with the quadratic in-out easing function\r\n const val = easeInOutQuintic(currentTime, start, change, duration);\r\n // move the document.body\r\n move(val);\r\n // do the animation unless its over\r\n if (currentTime < duration) {\r\n requestAnimationFrame(animate);\r\n } else {\r\n if (callback && typeof callback === 'function') {\r\n // the animation is done so lets callback\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }\r\n }\r\n };\r\n animate();\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