{"version":3,"sources":["base.js","lax.js","matchheight.js","embla.js","lightbox.js","app.base.js","cookiePopup.js","dataLayer.js","faqBlock.js","general.js","iconBlocks.js","linkBlocks.js","navigation.js","newsOverview.js","sliders.js","touch.js","app.init.js"],"names":["breakpoint_tiny","breakpoint_xs","breakpoint_sm","breakpoint_md","breakpoint_lg","breakpoint_xl","breakpoint_tiny_max","breakpoint_xs_max","breakpoint_sm_max","breakpoint_md_max","breakpoint_lg_max","breakpoint_xl_max","window","NodeList","prototype","forEach","Array","util","youTubeRegex","vimeoRegex","onDocumentReady","callback","document","readyState","addEventListener","endsWith","str","lookup","indexOf","length","startsWith","escapeRegExp","replace","isValidEmail","email","test","getCookie","name","value","cookie","parts","split","undefined","pop","shift","setCookie","expiryDays","domain","path","expirationDate","Date","setDate","exdate","getDate","toUTCString","push","join","deleteCookie","deepExtend","extended","Object","assign","target","i","arguments","key","source","hasOwnProperty","call","apply","this","isPlainObject","obj","constructor","isMobile","navigator","userAgent","isIE","isEdge","getQueryString","regex","RegExp","results","exec","location","href","sortSelect","el","sortVal","getElementById","arr","options","text","sort","a","b","op","Option","injectFile","type","ref","createElement","setAttribute","placeholder","parentNode","insertBefore","debounce","func","timeout","timer","context","args","clearTimeout","setTimeout","debounceLeading","addGlobalEventListener","selector","event","matches","getVideoEmbedHtmlFromUrl","url","youTubeMatch","vimeoMatch","dnt","hasCookieConsent","toString","slideUp","duration","cb","style","transitionProperty","transitionDuration","boxSizing","height","offsetHeight","overflow","opacity","paddingTop","paddingBottom","marginTop","marginBottom","display","removeProperty","slideDown","getComputedStyle","slideToggle","category","updateCookieConsent","ccPopup","acceptCategory","_classCallCheck","instance","Constructor","TypeError","_defineProperty","defineProperty","enumerable","configurable","writable","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","o","minLen","_arrayLikeToArray","n","slice","from","len","arr2","Symbol","iterator","_arr","_n","_d","_e","_s","_i","next","done","err","isArray","MatchHeight","targets","opts","Error","debounceTimer","elements","maxHeight","cssProperty","mediaQuery","mq","matchMedia","reset","minHeight","Math","max","clientHeight","isNaN","querySelectorAll","passive","module","exports","_extends","Alignment","align","viewSize","predefined","start","center","end","measure","Number","Axis","axis","contentDirection","scroll","cross","startEdge","endEdge","measureSize","rect","width","Limit","min","abs","reachedMin","reachedMax","reachedAny","constrain","removeOffset","ceil","Counter","loop","_a","loopEnd","counter","withinLimit","get","set","self","add","clone","Direction","direction","sign","applyTo","EventStore","listeners","node","handler","removeEventListener","removeAll","filter","remove","Vector1D","vector","divide","readNumber","multiply","normalize","subtract","mathSign","deltaAbs","valueB","valueA","groupArray","array","size","groups","arrayKeys","keys","map","arrayLast","lastIndex","removeClass","className","cl","classList","contains","addClass","DragHandler","rootNode","dragFree","dragTracker","animation","scrollTo","scrollBody","scrollTarget","index","events","skipSnaps","scrollAxis","crossAxis","focusNodes","startScroll","startCross","dragStartPoint","activationEvents","interactionEvents","snapForceBoost","mouse","touch","freeForceBoost","baseSpeed","baseMass","dragThreshold","pointerIsDown","preventScroll","preventClick","isMouse","down","evt","clearPreventClick","preventDefault","button","isMoving","nodeName","isNotFocusNode","pointerDown","useBaseMass","useSpeed","move","up","readPoint","emit","cancelable","moveScroll","moveCross","diffScroll","diffCross","diff","pointerMove","force","targetChanged","byDistance","rawForce","pointerUp","baseForce","distance","byIndex","forceFactor","isVigorous","isBelowThreshold","speed","mass","useMass","click","addActivationEvents","clickAllowed","removeAllEvents","DragTracker","pxToPercent","coords","x","y","startDrag","diffDrag","lastDrag","pointValue","trackPoints","lastMoveTime","getTime","touches","c","point","nowTime","diffTime","currentPoint","trackPoint","p1","p2","PxToPercent","viewInPx","totalPercent","ScrollBody","decimalPoints","pow","roundToTwoDecimals","round","velocity","acceleration","attraction","attractionDirection","seek","v","iStart","magnitude","oStart","settle","hasSettled","update","useBaseSpeed","ScrollBounds","limit","disabled","friction","diffToTarget","toggleActive","active","ScrollContain","contentSize","snaps","snapsAligned","containScroll","scrollBounds","snapsBounded","snapsContained","startSnap","endSnap","lastIndexOf","findDuplicates","measureContained","ScrollLooper","vectors","loopDistance","ScrollProgress","scrollLength","ScrollSnap","alignment","containerRect","slideRects","slidesToScroll","groupedSnaps","alignments","snap","g","rects","ScrollTarget","scrollSnaps","targetVector","minDistance","d1","d2","shortcut","t1","t2","t3","shortest","scrollSnap","diffToSnap","targetSnapDistance","reachedBound","ScrollTo","indexCurrent","indexPrevious","distanceDiff","indexDiff","targetIndex","SlideFocus","eventStore","lastTabPressTime","registerTabPress","keyCode","addFocusEvent","slide","selectedIndex","scrollLeft","floor","slides","SlidesInView","slideSizes","inViewThreshold","threshold","slideBounds","reduce","offset","concat","findSlideBounds","thresholds","s","check","list","slideBound","Translate","container","containerStyle","translate","clear","transform","to","Engine","root","sizesInPx","animationFrame","startIndex","getBoundingClientRect","slideSizesWithGaps","isLast","endGap","parseFloat","getPropertyValue","_b","slideIndexes","engine","dragHandler","settled","stop","scrollLooper","slideLooper","proceed","ifAnimating","cancelAnimationFrame","requestAnimationFrame","slidesInView","scrollLocation","ascItems","loopPoints","startLocation","scrollProgress","slideFocus","descItems","reverse","gap","canLoop","every","removeSlideSizes","loopPoint","getTarget","findLoopPoints","slidesInGap","indexes","edge","isStartEdge","initial","altered","EventEmitter","getListeners","e","off","on","defaultOptions","draggable","draggableClass","draggingClass","selectedClass","EmblaCarousel","sliderRoot","userOptions","time","optionsPseudo","debouncedResize","activated","rootNodeSize","reActivate","reInit","optionsBase","setupElements","pseudoString","sliderContainer","querySelector","children","content","JSON","parse","error","activate","partialOptions","deActivate","offsetParent","toggleDraggingClass","toggleSelectedClass","inView","slidesNotInView","newOptions","selectedScrollSnap","jump","canScrollNext","canScrollPrev","containerNode","dangerouslyGetEngine","destroy","previousScrollSnap","scrollNext","scrollPrev","scrollSnapList","slideNodes","toElement","html","elem","innerHTML","trim","firstChild","containsTag","tag","tagName","visible","ownerDocument","body","BasicLightbox","elemHtml","closable","child","appendChild","img","video","iframe","render","isString","isHTMLElement","HTMLElement","cloneNode","validateContent","onShow","onClose","validateOptions","_close","parentElement","removeChild","element","show","close","inOutMap","transformKeys","filterKeys","translate3dKeys","pxUnits","degUnits","easings","laxPresets","fadeInOut","fadeIn","fadeOut","blurInOut","blur","blurIn","blurOut","scaleInOut","scale","scaleIn","scaleOut","slideX","translateX","slideY","translateY","spin","rotate","modValue","flipX","rotateX","flipY","rotateY","jiggle","skewX","seesaw","skewY","zigzag","hueRotate","hue-rotate","laxInstance","easeInQuad","t","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeOutBounce","n1","easeInBounce","easeOutBack","c1","easeInBack","Lax","_this3","frameLengths","findAndAddElements","onAnimationFrame","windowWidth","clientWidth","windowHeight","onresize","onWindowResize","calculateTransforms","debug","debugData","frameStart","now","averageFrameTime","driverValues","drivers","driver","getValue","frame","console","log","getValueFn","LaxDriver","domElement","presets","includes","preset","transforms","LaxElement","getArrayValues","parseInt","retKey","parseValue","val","_ref","supportPageOffset","pageHeight","scrollHeight","pageWidth","scrollWidth","screenWidth","innerWidth","screenHeight","innerHeight","_getScrollPosition2","pageXOffset","isCSS1Compat","compatMode","documentElement","pageYOffset","scrollTop","left","right","top","bottom","Function","_this","lastValue","frameStep","inertiaEnabled","delta","m1","m2","inertia","transformsData","_this2","groupIndex","_options","driverName","styles","styleBindings","_driverValues$driverN","inertiaValue","_styleBindings$key","arr1","_styleBindings$key$","_options$frameStep","easing","inertiaMode","cssFn","_options$cssUnit","cssUnit","easingFn","interpolatedValue","arrA","arrB","k","j","interpolate","inertiaExtra","unit","toFixed","applyStyles","onUpdate","_loop","parsedStyleBindings","_styleBindings$preset","presetString","_presetString$split2","presetName","presetFn","lax","_styleBindings$key2","_styleBindings$key2$","_styleBindings$key2$2","_styleBindings$key2$3","bounds","parsedArr1","parsedArr2","_loop2","flattenedStyles","translate3dValues","mergedStyles","translateZ","setProperty","_options$style","app","ccConfig","ccContainer","cookiePopup","init","showConsoleLog","enableDataLayerEvents","position","theme","infoLinkHref","infoLinkTarget","onInitialise","state","status","onStatusChange","chosenBefore","dataLayer","pushEvent","consent","grantedCategories","onPopupOpen","onPopupClose","js","id","defer","src","dataset","after","loadPopupScript","open","gtmElements","newObject","gtmEvent","trackPageUrl","gtmPageUrl","trackDestinationUrl","gtmDestUrl","pathname","getAttribute","contentButtons","contentLinks","pageUrl","destinationUrl","link","eventName","faqBlock","items","item","question","innerText","general","openVideoLightbox","videoUrl","lightbox","updateAppHeight","initEmailLinks","links","atob","initVideoLinks","updateLightboxVideoConsent","lightboxContainer","closest","initLax","addDriver","scrollY","addElements","initAppHeight","initMatchHeights","hero1","titles","paragraphs","buttons","hero2","iconBlocks","sections","section","viewport","slider","scrollIntoView","linkBlocks","prevBtn","nextBtn","sliders","initPrevNextButtons","disablePrevNextButtons","navigation","subMenuTriggers","subMenus","activeSubMenuIndex","searchTrigger","searchContainer","closeSubMenuTimer","closeSubMenu","openText","closeSearchBox","initMenu","trigger","pageHeader","closeText","subMenuTrigger","initSearchBox","focus","newsOverview","embla","removeAttribute","initDots","dotsArray","dotNode","generateDots","dots","dotsFrag","createDocumentFragment","selectDot","previous","selected","isTouch","isTouchClass","isTouchTimer","addTouchClass","removeTouchClass"],"mappings":"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","file":"../bundle.min.js","sourcesContent":["/* ========================================================================\r\n Breakpoints\r\n ========================================================================== */\r\n\r\nvar breakpoint_tiny = '(min-width: 360px)';\r\nvar breakpoint_xs = '(min-width: 540px)';\r\nvar breakpoint_sm = '(min-width: 720px)';\r\nvar breakpoint_md = '(min-width: 960px)';\r\nvar breakpoint_lg = '(min-width: 1240px)';\r\nvar breakpoint_xl = '(min-width: 1600px)';\r\n\r\nvar breakpoint_tiny_max = '(max-width: 359px)';\r\nvar breakpoint_xs_max = '(max-width: 539px)';\r\nvar breakpoint_sm_max = '(max-width: 719px)';\r\nvar breakpoint_md_max = '(max-width: 959px)';\r\nvar breakpoint_lg_max = '(max-width: 1239px)';\r\nvar breakpoint_xl_max = '(max-width: 1599px)';\r\n\r\n/* ========================================================================\r\n Polyfills\r\n ========================================================================== */\r\n\r\nif (window.NodeList && !NodeList.prototype.forEach) {\r\n NodeList.prototype.forEach = Array.prototype.forEach;\r\n}\r\n\r\n/* ========================================================================\r\n Utilities\r\n ========================================================================== */\r\n\r\nconst util = {\r\n youTubeRegex:\r\n /https?:\\/\\/.*(?:(?:youtu\\.be\\/|v\\/|vi\\/|u\\/\\w\\/|embed\\/|shorts\\/|watch\\/|live\\/)|(?:(?:watch)?\\?v(?:i)?=|\\&v(?:i)?=))([^#\\&\\?\\/]*).*/i,\r\n vimeoRegex: /https?:\\/\\/(?:www.)?vimeo.com\\/(?:channels\\/(?:w+\\/)?|groups\\/(?:[^\\/]*)\\/videos\\/|)(\\d+)(?:|\\/?)/i,\r\n\r\n onDocumentReady: function (callback) {\r\n const isReady = document.readyState != null && document.readyState != 'loading';\r\n\r\n if (isReady) {\r\n callback();\r\n } else {\r\n document.addEventListener('DOMContentLoaded', callback);\r\n }\r\n },\r\n\r\n endsWith: function (str, lookup) {\r\n return str.indexOf(lookup, str.length - lookup.length) !== -1;\r\n },\r\n\r\n startsWith: function (str, lookup) {\r\n return str.indexOf(lookup) === 0;\r\n },\r\n\r\n // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\r\n escapeRegExp: function (str) {\r\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\r\n },\r\n\r\n // hasClass: function (element, selector) {\r\n // let s = ' ';\r\n // return (\r\n // element.nodeType === 1 &&\r\n // (s + element.className + s)\r\n // .replace(/[\\n\\t]/g, s)\r\n // .indexOf(s + selector + s) >= 0\r\n // );\r\n // },\r\n\r\n // addClass: function (element, className) {\r\n // if (this.hasClass(element, className) === false) {\r\n // element.className += ' ' + className;\r\n // }\r\n // },\r\n\r\n // removeClass: function (element, className) {\r\n // const regex = new RegExp(\r\n // '[\\\\b|\\\\s]*' + this.escapeRegExp(className) + '[\\\\b|\\\\s]*',\r\n // 'gi'\r\n // );\r\n // element.className = element.className.replace(regex, '');\r\n // },\r\n\r\n isValidEmail: function (email) {\r\n if (!email) return false;\r\n\r\n return /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]{2,})+$/.test(email);\r\n },\r\n\r\n getCookie: function (name) {\r\n let value = '; ' + document.cookie;\r\n let parts = value.split('; ' + name + '=');\r\n return parts.length !== 2 ? undefined : parts.pop().split(';').shift();\r\n },\r\n\r\n setCookie: function (name, value, expiryDays, domain, path) {\r\n let expirationDate = new Date();\r\n expirationDate.setDate(exdate.getDate() + (expiryDays || 365));\r\n\r\n let cookie = [\r\n name + '=' + value,\r\n 'Expires=' + expirationDate.toUTCString(),\r\n 'Path=' + (path || '/'),\r\n 'SameSite=Lax',\r\n ];\r\n\r\n if (domain) {\r\n cookie.push('Domain=' + domain);\r\n }\r\n\r\n document.cookie = cookie.join(';');\r\n },\r\n\r\n deleteCookie: function (name) {\r\n setCookie(name, '', -1);\r\n },\r\n\r\n deepExtend: function () {\r\n let extended =\r\n Object.assign ||\r\n function (target) {\r\n for (var i = 1; i < arguments.length; i++) {\r\n var source = arguments[i];\r\n\r\n for (var key in source) {\r\n if (Object.prototype.hasOwnProperty.call(source, key)) {\r\n target[key] = source[key];\r\n }\r\n }\r\n }\r\n\r\n return target;\r\n };\r\n\r\n return extended.apply(this, arguments);\r\n },\r\n\r\n isPlainObject: function (obj) {\r\n // The code \"typeof obj === 'object' && obj !== null\" allows Array objects\r\n return typeof obj === 'object' && obj !== null && obj.constructor === Object;\r\n },\r\n\r\n isMobile: function () {\r\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\r\n },\r\n\r\n isIE: function () {\r\n // MSIE used to detect old browsers and Trident used to newer ones\r\n return navigator.userAgent.indexOf('MSIE ') > -1 || navigator.userAgent.indexOf('Trident/') > -1;\r\n },\r\n\r\n isEdge: function () {\r\n return navigator.userAgent.indexOf('Edge/') > -1;\r\n },\r\n\r\n getQueryString: function (name) {\r\n name = name.replace(/[\\[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\r\n const regexS = '[\\\\?&]' + name + '=([^]*)';\r\n const regex = new RegExp(regexS);\r\n let results = regex.exec(window.location.href);\r\n if (results === null) {\r\n return '';\r\n } else {\r\n return results[1];\r\n }\r\n },\r\n\r\n sortSelect: function (el, sortVal) {\r\n sortVal = sortVal || 'text';\r\n\r\n // Checks for an object or string. Uses string as ID.\r\n switch (typeof el) {\r\n case 'string':\r\n el = document.getElementById(el);\r\n break;\r\n case 'object':\r\n if (el == null) return false;\r\n break;\r\n default:\r\n return false;\r\n }\r\n\r\n // Builds the options list.\r\n let arr = new Array();\r\n for (var i = 0; i < el.options.length; i++) {\r\n arr[i] = new Array();\r\n arr[i][0] = el.options[i].text;\r\n arr[i][1] = el.options[i].value;\r\n }\r\n\r\n // Allows sortVal to be optional, defaults to text.\r\n switch (sortVal) {\r\n case 'value': // sort by value\r\n sortVal = 1;\r\n break;\r\n default:\r\n // sort by text\r\n sortVal = 0;\r\n }\r\n\r\n arr.sort((a, b) => {\r\n return a[sortVal] == b[sortVal] ? 0 : a[sortVal] < b[sortVal] ? -1 : 1;\r\n });\r\n\r\n // Removes all options from the select.\r\n while (el.options.length > 0) {\r\n el.options[0] = null;\r\n }\r\n\r\n // Recreates all options with the new order.\r\n for (var i = 0; i < arr.length; i++) {\r\n var op = new Option(arr[i][0], arr[i][1]);\r\n el.options[i] = op;\r\n }\r\n\r\n return true;\r\n },\r\n\r\n // Requires `smoothscroll.js` polyfill for unsupported browsers: http://iamdustan.com/smoothscroll/\r\n // scrollTo: function (el, options) {\r\n // options = options || {};\r\n\r\n // if (el.length === 0) return;\r\n\r\n // let defaults = {\r\n // offset: 0,\r\n // pushHash: true,\r\n // };\r\n\r\n // options = util.deepExtend(defaults, options);\r\n\r\n // let hash = el.getAttribute('href');\r\n\r\n // if (hash !== '#') {\r\n // let target = document.querySelector(hash);\r\n\r\n // if (!target) {\r\n // target = document.querySelector(\r\n // 'a[name=\"' + hash.replace('#', '') + '\"]'\r\n // );\r\n // }\r\n\r\n // if (!target) return;\r\n\r\n // target.scrollIntoView({\r\n // behavior: 'smooth',\r\n // });\r\n\r\n // let elementPosition = target.offsetTop;\r\n // let offsetPosition = elementPosition - options.offset;\r\n\r\n // window.scrollTo({\r\n // top: offsetPosition,\r\n // behavior: 'smooth',\r\n // });\r\n\r\n // if (options.pushHash) {\r\n // window.location.hash = hash.replace('#', '');\r\n // }\r\n // }\r\n // },\r\n\r\n // Use `insertBefore` instead of `appendChild`: https://www.paulirish.com/2011/surefire-dom-element-insertion/\r\n injectFile: function (path, type, ref) {\r\n if (type == 'js') {\r\n let el = document.createElement('script');\r\n el.setAttribute('type', 'text/javascript');\r\n el.setAttribute('src', path);\r\n placeholder.parentNode.insertBefore(el, ref);\r\n } else if (type == 'css') {\r\n let el = document.createElement('link');\r\n el.setAttribute('rel', 'stylesheet');\r\n el.setAttribute('type', 'text/css');\r\n el.setAttribute('href', path);\r\n placeholder.parentNode.insertBefore(el, ref);\r\n }\r\n },\r\n\r\n // https://www.freecodecamp.org/news/javascript-debounce-example/\r\n debounce: function (func, timeout) {\r\n timeout = timeout || 250;\r\n\r\n let timer;\r\n return function () {\r\n const context = this;\r\n const args = arguments;\r\n\r\n clearTimeout(timer);\r\n timer = setTimeout(() => {\r\n func.apply(context, args);\r\n }, timeout);\r\n };\r\n },\r\n\r\n debounceLeading: function (func, timeout) {\r\n timeout = timeout || 250;\r\n\r\n let timer;\r\n return function () {\r\n const context = this;\r\n const args = arguments;\r\n\r\n if (!timer) {\r\n func.apply(context, args);\r\n }\r\n\r\n clearTimeout(timer);\r\n timer = setTimeout(() => {\r\n timer = undefined;\r\n }, timeout);\r\n };\r\n },\r\n\r\n addGlobalEventListener: function (type, selector, callback) {\r\n document.addEventListener(type, (event) => {\r\n if (event.target.matches(selector)) callback(event);\r\n });\r\n },\r\n\r\n getVideoEmbedHtmlFromUrl: function (url) {\r\n let youTubeMatch = util.youTubeRegex.exec(url);\r\n let vimeoMatch = util.vimeoRegex.exec(url);\r\n\r\n // YouTube\r\n if (youTubeMatch && youTubeMatch.length >= 2) {\r\n return (\r\n ''\r\n );\r\n }\r\n\r\n // Vimeo\r\n if (vimeoMatch && vimeoMatch.length >= 2) {\r\n const dnt = util.hasCookieConsent('analytics') ? 0 : 1;\r\n\r\n return (\r\n ''\r\n );\r\n }\r\n\r\n return '';\r\n },\r\n\r\n slideUp: function (target, duration, cb) {\r\n duration = duration || 500;\r\n\r\n target.style.transitionProperty = 'height, margin, padding, opacity';\r\n target.style.transitionDuration = duration + 'ms';\r\n target.style.boxSizing = 'border-box';\r\n target.style.height = target.offsetHeight + 'px';\r\n target.offsetHeight;\r\n target.style.overflow = 'hidden';\r\n target.style.opacity = 0;\r\n target.style.height = 0;\r\n target.style.paddingTop = 0;\r\n target.style.paddingBottom = 0;\r\n target.style.marginTop = 0;\r\n target.style.marginBottom = 0;\r\n\r\n window.setTimeout(() => {\r\n target.style.display = 'none';\r\n target.style.removeProperty('height');\r\n target.style.removeProperty('padding-top');\r\n target.style.removeProperty('padding-bottom');\r\n target.style.removeProperty('margin-top');\r\n target.style.removeProperty('margin-bottom');\r\n target.style.removeProperty('overflow');\r\n target.style.removeProperty('transition-duration');\r\n target.style.removeProperty('transition-property');\r\n target.style.removeProperty('box-sizing');\r\n target.style.removeProperty('opacity');\r\n }, duration);\r\n\r\n if (typeof cb === 'function') {\r\n window.setTimeout(cb, duration);\r\n }\r\n },\r\n\r\n slideDown: function (target, duration, cb) {\r\n duration = duration || 500;\r\n\r\n target.style.removeProperty('display');\r\n let display = window.getComputedStyle(target).display;\r\n if (display === 'none') display = 'block';\r\n target.style.display = display;\r\n let height = target.offsetHeight;\r\n target.style.overflow = 'hidden';\r\n target.style.opacity = 0;\r\n target.style.height = 0;\r\n target.style.paddingTop = 0;\r\n target.style.paddingBottom = 0;\r\n target.style.marginTop = 0;\r\n target.style.marginBottom = 0;\r\n target.offsetHeight;\r\n target.style.boxSizing = 'border-box';\r\n target.style.transitionProperty = 'height, margin, padding, opacity';\r\n target.style.transitionDuration = duration + 'ms';\r\n target.style.height = height + 'px';\r\n target.style.removeProperty('padding-top');\r\n target.style.removeProperty('padding-bottom');\r\n target.style.removeProperty('margin-top');\r\n target.style.removeProperty('margin-bottom');\r\n target.style.opacity = 1;\r\n\r\n window.setTimeout(() => {\r\n target.style.removeProperty('height');\r\n target.style.removeProperty('overflow');\r\n target.style.removeProperty('transition-duration');\r\n target.style.removeProperty('transition-property');\r\n }, duration);\r\n\r\n if (typeof cb === 'function') {\r\n window.setTimeout(cb, duration);\r\n }\r\n },\r\n\r\n slideToggle: function (target, duration, cb) {\r\n duration = duration || 500;\r\n\r\n if (window.getComputedStyle(target).display === 'none') {\r\n return slideDown(target, duration, cb);\r\n } else {\r\n return slideUp(target, duration, cb);\r\n }\r\n },\r\n\r\n hasCookieConsent: function (category) {\r\n return util.getCookie('cookieconsent_' + category) === 'accepted';\r\n },\r\n\r\n updateCookieConsent: function (category) {\r\n if (typeof ccPopup !== 'undefined') {\r\n ccPopup.acceptCategory(category);\r\n }\r\n },\r\n};\r\n","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n(function () {\n var inOutMap = function inOutMap() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 30;\n return [\"elInY+elHeight\", \"elCenterY-\".concat(y), \"elCenterY\", \"elCenterY+\".concat(y), \"elOutY-elHeight\"];\n };\n\n var laxPresets = {\n fadeInOut: function fadeInOut() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 30;\n var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return {\n \"opacity\": [inOutMap(y), [str, 1, 1, 1, str]]\n };\n },\n fadeIn: function fadeIn() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'elCenterY';\n var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return {\n \"opacity\": [[\"elInY+elHeight\", y], [str, 1]]\n };\n },\n fadeOut: function fadeOut() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'elCenterY';\n var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return {\n \"opacity\": [[y, \"elOutY-elHeight\"], [1, str]]\n };\n },\n blurInOut: function blurInOut() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100;\n var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 20;\n return {\n \"blur\": [inOutMap(y), [str, 0, 0, 0, str]]\n };\n },\n blurIn: function blurIn() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'elCenterY';\n var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 20;\n return {\n \"blur\": [[\"elInY+elHeight\", y], [str, 0]]\n };\n },\n blurOut: function blurOut() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'elCenterY';\n var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 20;\n return {\n \"opacity\": [[y, \"elOutY-elHeight\"], [0, str]]\n };\n },\n scaleInOut: function scaleInOut() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100;\n var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.6;\n return {\n \"scale\": [inOutMap(y), [str, 1, 1, 1, str]]\n };\n },\n scaleIn: function scaleIn() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'elCenterY';\n var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.6;\n return {\n \"scale\": [[\"elInY+elHeight\", y], [str, 1]]\n };\n },\n scaleOut: function scaleOut() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'elCenterY';\n var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.6;\n return {\n \"scale\": [[y, \"elOutY-elHeight\"], [1, str]]\n };\n },\n slideX: function slideX() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;\n return {\n \"translateX\": [['elInY', y], [0, str]]\n };\n },\n slideY: function slideY() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;\n return {\n \"translateY\": [['elInY', y], [0, str]]\n };\n },\n spin: function spin() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1000;\n var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 360;\n return {\n \"rotate\": [[0, y], [0, str], {\n modValue: y\n }]\n };\n },\n flipX: function flipX() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1000;\n var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 360;\n return {\n \"rotateX\": [[0, y], [0, str], {\n modValue: y\n }]\n };\n },\n flipY: function flipY() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1000;\n var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 360;\n return {\n \"rotateY\": [[0, y], [0, str], {\n modValue: y\n }]\n };\n },\n jiggle: function jiggle() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 50;\n var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 40;\n return {\n \"skewX\": [[0, y * 1, y * 2, y * 3, y * 4], [0, str, 0, -str, 0], {\n modValue: y * 4\n }]\n };\n },\n seesaw: function seesaw() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 50;\n var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 40;\n return {\n \"skewY\": [[0, y * 1, y * 2, y * 3, y * 4], [0, str, 0, -str, 0], {\n modValue: y * 4\n }]\n };\n },\n zigzag: function zigzag() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100;\n var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100;\n return {\n \"translateX\": [[0, y * 1, y * 2, y * 3, y * 4], [0, str, 0, -str, 0], {\n modValue: y * 4\n }]\n };\n },\n hueRotate: function hueRotate() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 600;\n var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 360;\n return {\n \"hue-rotate\": [[0, y], [0, str], {\n modValue: y\n }]\n };\n }\n };\n\n var laxInstance = function () {\n var transformKeys = [\"perspective\", \"scaleX\", \"scaleY\", \"scale\", \"skewX\", \"skewY\", \"skew\", \"rotateX\", \"rotateY\", \"rotate\"];\n var filterKeys = [\"blur\", \"hue-rotate\", \"brightness\"];\n var translate3dKeys = [\"translateX\", \"translateY\", \"translateZ\"];\n var pxUnits = [\"perspective\", \"border-radius\", \"blur\", \"translateX\", \"translateY\", \"translateZ\"];\n var degUnits = [\"hue-rotate\", \"rotate\", \"rotateX\", \"rotateY\", \"skew\", \"skewX\", \"skewY\"];\n\n function getArrayValues(arr, windowWidth) {\n if (Array.isArray(arr)) return arr;\n var keys = Object.keys(arr).map(function (x) {\n return parseInt(x);\n }).sort(function (a, b) {\n return a > b ? 1 : -1;\n });\n var retKey = keys[keys.length - 1];\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (windowWidth < key) {\n retKey = key;\n break;\n }\n }\n\n return arr[retKey];\n }\n\n function lerp(start, end, t) {\n return start * (1 - t) + end * t;\n }\n\n function invlerp(a, b, v) {\n return (v - a) / (b - a);\n }\n\n function interpolate(arrA, arrB, v, easingFn) {\n var k = 0;\n arrA.forEach(function (a) {\n if (a < v) k++;\n });\n\n if (k <= 0) {\n return arrB[0];\n }\n\n if (k >= arrA.length) {\n return arrB[arrA.length - 1];\n }\n\n var j = k - 1;\n var vector = invlerp(arrA[j], arrA[k], v);\n if (easingFn) vector = easingFn(vector);\n var lerpVal = lerp(arrB[j], arrB[k], vector);\n return lerpVal;\n }\n\n var easings = {\n easeInQuad: function easeInQuad(t) {\n return t * t;\n },\n easeOutQuad: function easeOutQuad(t) {\n return t * (2 - t);\n },\n easeInOutQuad: function easeInOutQuad(t) {\n return t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n },\n easeInCubic: function easeInCubic(t) {\n return t * t * t;\n },\n easeOutCubic: function easeOutCubic(t) {\n return --t * t * t + 1;\n },\n easeInOutCubic: function easeInOutCubic(t) {\n return t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n },\n easeInQuart: function easeInQuart(t) {\n return t * t * t * t;\n },\n easeOutQuart: function easeOutQuart(t) {\n return 1 - --t * t * t * t;\n },\n easeInOutQuart: function easeInOutQuart(t) {\n return t < .5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n },\n easeInQuint: function easeInQuint(t) {\n return t * t * t * t * t;\n },\n easeOutQuint: function easeOutQuint(t) {\n return 1 + --t * t * t * t * t;\n },\n easeInOutQuint: function easeInOutQuint(t) {\n return t < .5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\n },\n easeOutBounce: function easeOutBounce(t) {\n var n1 = 7.5625;\n var d1 = 2.75;\n\n if (t < 1 / d1) {\n return n1 * t * t;\n } else if (t < 2 / d1) {\n return n1 * (t -= 1.5 / d1) * t + 0.75;\n } else if (t < 2.5 / d1) {\n return n1 * (t -= 2.25 / d1) * t + 0.9375;\n } else {\n return n1 * (t -= 2.625 / d1) * t + 0.984375;\n }\n },\n easeInBounce: function easeInBounce(t) {\n return 1 - easings.easeOutBounce(1 - t);\n },\n easeOutBack: function easeOutBack(t) {\n var c1 = 1.70158;\n var c3 = c1 + 1;\n return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\n },\n easeInBack: function easeInBack(t) {\n var c1 = 1.70158;\n var c3 = c1 + 1;\n return c3 * t * t * t - c1 * t * t;\n }\n };\n\n function flattenStyles(styles) {\n var flattenedStyles = {\n transform: '',\n filter: ''\n };\n var translate3dValues = {\n translateX: 0.00001,\n translateY: 0.00001,\n translateZ: 0.00001\n };\n Object.keys(styles).forEach(function (key) {\n var val = styles[key];\n var unit = pxUnits.includes(key) ? 'px' : degUnits.includes(key) ? 'deg' : '';\n\n if (translate3dKeys.includes(key)) {\n translate3dValues[key] = val;\n } else if (transformKeys.includes(key)) {\n flattenedStyles.transform += \"\".concat(key, \"(\").concat(val).concat(unit, \") \");\n } else if (filterKeys.includes(key)) {\n flattenedStyles.filter += \"\".concat(key, \"(\").concat(val).concat(unit, \") \");\n } else {\n flattenedStyles[key] = \"\".concat(val).concat(unit, \" \");\n }\n });\n flattenedStyles.transform = \"translate3d(\".concat(translate3dValues.translateX, \"px, \").concat(translate3dValues.translateY, \"px, \").concat(translate3dValues.translateZ, \"px) \").concat(flattenedStyles.transform);\n return flattenedStyles;\n } // https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollY#Notes\n\n\n function getScrollPosition() {\n var supportPageOffset = window.pageXOffset !== undefined;\n var isCSS1Compat = (document.compatMode || '') === 'CSS1Compat';\n var x = supportPageOffset ? window.pageXOffset : isCSS1Compat ? document.documentElement.scrollLeft : document.body.scrollLeft;\n var y = supportPageOffset ? window.pageYOffset : isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop;\n return [y, x];\n }\n\n function parseValue(val, _ref, index) {\n var width = _ref.width,\n height = _ref.height,\n x = _ref.x,\n y = _ref.y;\n\n if (typeof val === 'number') {\n return val;\n }\n\n var pageHeight = document.body.scrollHeight;\n var pageWidth = document.body.scrollWidth;\n var screenWidth = window.innerWidth;\n var screenHeight = window.innerHeight;\n\n var _getScrollPosition = getScrollPosition(),\n _getScrollPosition2 = _slicedToArray(_getScrollPosition, 2),\n scrollTop = _getScrollPosition2[0],\n scrollLeft = _getScrollPosition2[1];\n\n var left = x + scrollLeft;\n var right = left + width;\n var top = y + scrollTop;\n var bottom = top + height;\n return Function(\"return \".concat(val.replace(/screenWidth/g, screenWidth).replace(/screenHeight/g, screenHeight).replace(/pageHeight/g, pageHeight).replace(/pageWidth/g, pageWidth).replace(/elWidth/g, width).replace(/elHeight/g, height).replace(/elInY/g, top - screenHeight).replace(/elOutY/g, bottom).replace(/elCenterY/g, top + height / 2 - screenHeight / 2).replace(/elInX/g, left - screenWidth).replace(/elOutX/g, right).replace(/elCenterX/g, left + width / 2 - screenWidth / 2).replace(/index/g, index)))();\n }\n\n var LaxDriver = function LaxDriver(name, getValueFn) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n _classCallCheck(this, LaxDriver);\n\n _defineProperty(this, \"getValueFn\", void 0);\n\n _defineProperty(this, \"name\", '');\n\n _defineProperty(this, \"lastValue\", 0);\n\n _defineProperty(this, \"frameStep\", 1);\n\n _defineProperty(this, \"m1\", 0);\n\n _defineProperty(this, \"m2\", 0);\n\n _defineProperty(this, \"inertia\", 0);\n\n _defineProperty(this, \"inertiaEnabled\", false);\n\n _defineProperty(this, \"getValue\", function (frame) {\n var value = _this.lastValue;\n\n if (frame % _this.frameStep === 0) {\n value = _this.getValueFn(frame);\n }\n\n if (_this.inertiaEnabled) {\n var delta = value - _this.lastValue;\n var damping = 0.8;\n _this.m1 = _this.m1 * damping + delta * (1 - damping);\n _this.m2 = _this.m2 * damping + _this.m1 * (1 - damping);\n _this.inertia = Math.round(_this.m2 * 5000) / 15000;\n }\n\n _this.lastValue = value;\n return [_this.lastValue, _this.inertia];\n });\n\n this.name = name;\n this.getValueFn = getValueFn;\n Object.keys(options).forEach(function (key) {\n _this[key] = options[key];\n });\n this.lastValue = this.getValueFn(0);\n };\n\n var LaxElement = function LaxElement(selector, laxInstance, domElement, transformsData) {\n var _this2 = this;\n\n var groupIndex = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n\n var _options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n\n _classCallCheck(this, LaxElement);\n\n _defineProperty(this, \"domElement\", void 0);\n\n _defineProperty(this, \"transformsData\", void 0);\n\n _defineProperty(this, \"styles\", {});\n\n _defineProperty(this, \"selector\", '');\n\n _defineProperty(this, \"groupIndex\", 0);\n\n _defineProperty(this, \"laxInstance\", void 0);\n\n _defineProperty(this, \"onUpdate\", void 0);\n\n _defineProperty(this, \"update\", function (driverValues, frame) {\n var transforms = _this2.transforms;\n var styles = {};\n\n for (var driverName in transforms) {\n var styleBindings = transforms[driverName];\n\n if (!driverValues[driverName]) {\n console.error(\"No lax driver with name: \", driverName);\n }\n\n var _driverValues$driverN = _slicedToArray(driverValues[driverName], 2),\n value = _driverValues$driverN[0],\n inertiaValue = _driverValues$driverN[1];\n\n for (var key in styleBindings) {\n var _styleBindings$key = _slicedToArray(styleBindings[key], 3),\n arr1 = _styleBindings$key[0],\n arr2 = _styleBindings$key[1],\n _styleBindings$key$ = _styleBindings$key[2],\n options = _styleBindings$key$ === void 0 ? {} : _styleBindings$key$;\n\n var modValue = options.modValue,\n _options$frameStep = options.frameStep,\n frameStep = _options$frameStep === void 0 ? 1 : _options$frameStep,\n easing = options.easing,\n inertia = options.inertia,\n inertiaMode = options.inertiaMode,\n cssFn = options.cssFn,\n _options$cssUnit = options.cssUnit,\n cssUnit = _options$cssUnit === void 0 ? '' : _options$cssUnit;\n var easingFn = easings[easing];\n\n if (frame % frameStep === 0) {\n var v = modValue ? value % modValue : value;\n var interpolatedValue = interpolate(arr1, arr2, v, easingFn);\n\n if (inertia) {\n var inertiaExtra = inertiaValue * inertia;\n if (inertiaMode === 'absolute') inertiaExtra = Math.abs(inertiaExtra);\n interpolatedValue += inertiaExtra;\n }\n\n var unit = cssUnit || pxUnits.includes(key) ? 'px' : degUnits.includes(key) ? 'deg' : '';\n var dp = unit === 'px' ? 0 : 3;\n var val = interpolatedValue.toFixed(dp);\n styles[key] = cssFn ? cssFn(val, _this2.domElement) : val + cssUnit;\n }\n }\n }\n\n _this2.applyStyles(styles);\n\n if (_this2.onUpdate) _this2.onUpdate(driverValues, _this2.domElement);\n });\n\n _defineProperty(this, \"calculateTransforms\", function () {\n _this2.transforms = {};\n var windowWidth = _this2.laxInstance.windowWidth;\n\n var _loop = function _loop(driverName) {\n var styleBindings = _this2.transformsData[driverName];\n var parsedStyleBindings = {};\n var _styleBindings$preset = styleBindings.presets,\n presets = _styleBindings$preset === void 0 ? [] : _styleBindings$preset;\n presets.forEach(function (presetString) {\n var _presetString$split = presetString.split(\":\"),\n _presetString$split2 = _slicedToArray(_presetString$split, 3),\n presetName = _presetString$split2[0],\n y = _presetString$split2[1],\n str = _presetString$split2[2];\n\n var presetFn = window.lax.presets[presetName];\n\n if (!presetFn) {\n console.error(\"Lax preset cannot be found with name: \", presetName);\n } else {\n var preset = presetFn(y, str);\n Object.keys(preset).forEach(function (key) {\n styleBindings[key] = preset[key];\n });\n }\n });\n delete styleBindings.presets;\n\n var _loop2 = function _loop2(key) {\n var _styleBindings$key2 = _slicedToArray(styleBindings[key], 3),\n _styleBindings$key2$ = _styleBindings$key2[0],\n arr1 = _styleBindings$key2$ === void 0 ? [-1e9, 1e9] : _styleBindings$key2$,\n _styleBindings$key2$2 = _styleBindings$key2[1],\n arr2 = _styleBindings$key2$2 === void 0 ? [-1e9, 1e9] : _styleBindings$key2$2,\n _styleBindings$key2$3 = _styleBindings$key2[2],\n options = _styleBindings$key2$3 === void 0 ? {} : _styleBindings$key2$3;\n\n var bounds = _this2.domElement.getBoundingClientRect();\n\n var parsedArr1 = getArrayValues(arr1, windowWidth).map(function (i) {\n return parseValue(i, bounds, _this2.groupIndex);\n });\n var parsedArr2 = getArrayValues(arr2, windowWidth).map(function (i) {\n return parseValue(i, bounds, _this2.groupIndex);\n });\n parsedStyleBindings[key] = [parsedArr1, parsedArr2, options];\n };\n\n for (var key in styleBindings) {\n _loop2(key);\n }\n\n _this2.transforms[driverName] = parsedStyleBindings;\n };\n\n for (var driverName in _this2.transformsData) {\n _loop(driverName);\n }\n });\n\n _defineProperty(this, \"applyStyles\", function (styles) {\n var mergedStyles = flattenStyles(styles);\n Object.keys(mergedStyles).forEach(function (key) {\n _this2.domElement.style.setProperty(key, mergedStyles[key]);\n });\n });\n\n this.selector = selector;\n this.laxInstance = laxInstance;\n this.domElement = domElement;\n this.transformsData = transformsData;\n this.groupIndex = groupIndex;\n var _options$style = _options.style,\n style = _options$style === void 0 ? {} : _options$style,\n onUpdate = _options.onUpdate;\n Object.keys(style).forEach(function (key) {\n domElement.style.setProperty(key, style[key]);\n });\n if (onUpdate) this.onUpdate = onUpdate;\n this.calculateTransforms();\n };\n\n var Lax = function Lax() {\n var _this3 = this;\n\n _classCallCheck(this, Lax);\n\n _defineProperty(this, \"drivers\", []);\n\n _defineProperty(this, \"elements\", []);\n\n _defineProperty(this, \"frame\", 0);\n\n _defineProperty(this, \"debug\", false);\n\n _defineProperty(this, \"windowWidth\", 0);\n\n _defineProperty(this, \"windowHeight\", 0);\n\n _defineProperty(this, \"presets\", laxPresets);\n\n _defineProperty(this, \"debugData\", {\n frameLengths: []\n });\n\n _defineProperty(this, \"init\", function () {\n _this3.findAndAddElements();\n\n window.requestAnimationFrame(_this3.onAnimationFrame);\n _this3.windowWidth = document.body.clientWidth;\n _this3.windowHeight = document.body.clientHeight;\n window.onresize = _this3.onWindowResize;\n });\n\n _defineProperty(this, \"onWindowResize\", function () {\n var changed = document.body.clientWidth !== _this3.windowWidth || document.body.clientHeight !== _this3.windowHeight;\n\n if (changed) {\n _this3.windowWidth = document.body.clientWidth;\n _this3.windowHeight = document.body.clientHeight;\n\n _this3.elements.forEach(function (el) {\n return el.calculateTransforms();\n });\n }\n });\n\n _defineProperty(this, \"onAnimationFrame\", function (e) {\n if (_this3.debug) {\n _this3.debugData.frameStart = Date.now();\n }\n\n var driverValues = {};\n\n _this3.drivers.forEach(function (driver) {\n driverValues[driver.name] = driver.getValue(_this3.frame);\n });\n\n _this3.elements.forEach(function (element) {\n element.update(driverValues, _this3.frame);\n });\n\n if (_this3.debug) {\n _this3.debugData.frameLengths.push(Date.now() - _this3.debugData.frameStart);\n }\n\n if (_this3.frame % 60 === 0 && _this3.debug) {\n var averageFrameTime = Math.ceil(_this3.debugData.frameLengths.reduce(function (a, b) {\n return a + b;\n }, 0) / 60);\n console.log(\"Average frame calculation time: \".concat(averageFrameTime, \"ms\"));\n _this3.debugData.frameLengths = [];\n }\n\n _this3.frame++;\n window.requestAnimationFrame(_this3.onAnimationFrame);\n });\n\n _defineProperty(this, \"addDriver\", function (name, getValueFn) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n _this3.drivers.push(new LaxDriver(name, getValueFn, options));\n });\n\n _defineProperty(this, \"removeDriver\", function (name) {\n _this3.drivers = _this3.drivers.filter(function (driver) {\n return driver.name !== name;\n });\n });\n\n _defineProperty(this, \"findAndAddElements\", function () {\n _this3.elements = [];\n var elements = document.querySelectorAll(\".lax\");\n elements.forEach(function (domElement) {\n var driverName = \"scrollY\";\n var presets = [];\n domElement.classList.forEach(function (className) {\n if (className.includes(\"lax_preset\")) {\n var preset = className.replace(\"lax_preset_\", \"\");\n presets.push(preset);\n }\n });\n\n var transforms = _defineProperty({}, driverName, {\n presets: presets\n });\n\n _this3.elements.push(new LaxElement('.lax', _this3, domElement, transforms, 0, {}));\n });\n });\n\n _defineProperty(this, \"addElements\", function (selector, transforms, options) {\n var domElements = document.querySelectorAll(selector);\n domElements.forEach(function (domElement, i) {\n _this3.elements.push(new LaxElement(selector, _this3, domElement, transforms, i, options));\n });\n });\n\n _defineProperty(this, \"removeElements\", function (selector) {\n _this3.elements = _this3.elements.filter(function (element) {\n return element.selector !== selector;\n });\n });\n\n _defineProperty(this, \"addElement\", function (domElement, transforms, options) {\n _this3.elements.push(new LaxElement('', _this3, domElement, transforms, 0, options));\n });\n\n _defineProperty(this, \"removeElement\", function (domElement) {\n _this3.elements = _this3.elements.filter(function (element) {\n return element.domElement !== domElement;\n });\n });\n };\n\n return new Lax();\n }();\n\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') module.exports = laxInstance;else window.lax = laxInstance;\n})();","(function () {\r\n 'use strict';\r\n\r\n function MatchHeight(targets, opts) {\r\n if (!targets) throw new Error('Missing selector 😢');\r\n\r\n opts = opts || {};\r\n\r\n let debounceTimer;\r\n let elements;\r\n let maxHeight = 0;\r\n let defaults = {\r\n timeout: 100,\r\n cssProperty: 'minHeight',\r\n mediaQuery: '(min-width: 0px)',\r\n };\r\n\r\n opts = util.deepExtend(defaults, opts);\r\n const mq = window.matchMedia(opts.mediaQuery);\r\n\r\n // debounce\r\n function debounceReset() {\r\n clearTimeout(debounceTimer);\r\n debounceTimer = setTimeout(() => {\r\n reset();\r\n }, opts.timeout);\r\n }\r\n\r\n // reset\r\n function reset() {\r\n maxHeight = 0;\r\n\r\n elements.forEach((el) => {\r\n el.style.height = 'auto';\r\n el.style.minHeight = '0';\r\n maxHeight = Math.max(maxHeight, el.clientHeight);\r\n });\r\n\r\n if (mq.matches) {\r\n if (isNaN(maxHeight) === false && maxHeight > 0) {\r\n elements.forEach((el) => {\r\n if (opts.cssProperty === 'height') {\r\n el.style.height = maxHeight + 'px';\r\n } else {\r\n el.style.minHeight = maxHeight + 'px';\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (typeof targets === 'string') {\r\n elements = Array.prototype.slice.call(document.querySelectorAll(targets));\r\n } else if (typeof targets === 'object') {\r\n elements = Array.prototype.slice.call(targets);\r\n }\r\n\r\n reset();\r\n\r\n window.addEventListener(\r\n 'resize',\r\n function () {\r\n debounceReset();\r\n },\r\n { passive: true }\r\n );\r\n\r\n return {\r\n reset: reset,\r\n };\r\n }\r\n\r\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = MatchHeight;\r\n } else {\r\n window.MatchHeight = MatchHeight;\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n function _extends() {\r\n _extends =\r\n Object.assign ||\r\n function (target) {\r\n for (var i = 1; i < arguments.length; i++) {\r\n var source = arguments[i];\r\n\r\n for (var key in source) {\r\n if (Object.prototype.hasOwnProperty.call(source, key)) {\r\n target[key] = source[key];\r\n }\r\n }\r\n }\r\n\r\n return target;\r\n };\r\n\r\n return _extends.apply(this, arguments);\r\n }\r\n\r\n function Alignment(align, viewSize) {\r\n var predefined = {\r\n start: start,\r\n center: center,\r\n end: end,\r\n };\r\n\r\n function start() {\r\n return 0;\r\n }\r\n\r\n function center(n) {\r\n return end(n) / 2;\r\n }\r\n\r\n function end(n) {\r\n return viewSize - n;\r\n }\r\n\r\n function percent() {\r\n return viewSize * Number(align);\r\n }\r\n\r\n function measure(n) {\r\n if (typeof align === 'number') return percent();\r\n return predefined[align](n);\r\n }\r\n\r\n var self = {\r\n measure: measure,\r\n };\r\n return self;\r\n }\r\n\r\n function Animation(callback) {\r\n var animationFrame = 0;\r\n\r\n function ifAnimating(active, cb) {\r\n return function () {\r\n if (active === !!animationFrame) cb();\r\n };\r\n }\r\n\r\n function start() {\r\n animationFrame = window.requestAnimationFrame(callback);\r\n }\r\n\r\n function stop() {\r\n window.cancelAnimationFrame(animationFrame);\r\n animationFrame = 0;\r\n }\r\n\r\n var self = {\r\n proceed: ifAnimating(true, start),\r\n start: ifAnimating(false, start),\r\n stop: ifAnimating(true, stop),\r\n };\r\n return self;\r\n }\r\n\r\n function Axis(axis, contentDirection) {\r\n var scroll = axis === 'y' ? 'y' : 'x';\r\n var cross = axis === 'y' ? 'x' : 'y';\r\n var startEdge = getStartEdge();\r\n var endEdge = getEndEdge();\r\n\r\n function measureSize(rect) {\r\n var width = rect.width,\r\n height = rect.height;\r\n return scroll === 'x' ? width : height;\r\n }\r\n\r\n function getStartEdge() {\r\n if (scroll === 'y') return 'top';\r\n return contentDirection === 'rtl' ? 'right' : 'left';\r\n }\r\n\r\n function getEndEdge() {\r\n if (scroll === 'y') return 'bottom';\r\n return contentDirection === 'rtl' ? 'left' : 'right';\r\n }\r\n\r\n var self = {\r\n scroll: scroll,\r\n cross: cross,\r\n startEdge: startEdge,\r\n endEdge: endEdge,\r\n measureSize: measureSize,\r\n };\r\n return self;\r\n }\r\n\r\n function Limit(min, max) {\r\n var length = Math.abs(min - max);\r\n\r\n function reachedMin(n) {\r\n return n < min;\r\n }\r\n\r\n function reachedMax(n) {\r\n return n > max;\r\n }\r\n\r\n function reachedAny(n) {\r\n return reachedMin(n) || reachedMax(n);\r\n }\r\n\r\n function constrain(n) {\r\n if (!reachedAny(n)) return n;\r\n return reachedMin(n) ? min : max;\r\n }\r\n\r\n function removeOffset(n) {\r\n if (!length) return n;\r\n return n - length * Math.ceil((n - max) / length);\r\n }\r\n\r\n var self = {\r\n constrain: constrain,\r\n length: length,\r\n max: max,\r\n min: min,\r\n reachedAny: reachedAny,\r\n reachedMax: reachedMax,\r\n reachedMin: reachedMin,\r\n removeOffset: removeOffset,\r\n };\r\n return self;\r\n }\r\n\r\n function Counter(max, start, loop) {\r\n var _a = Limit(0, max),\r\n min = _a.min,\r\n constrain = _a.constrain;\r\n\r\n var loopEnd = max + 1;\r\n var counter = withinLimit(start);\r\n\r\n function withinLimit(n) {\r\n return !loop ? constrain(n) : Math.abs((loopEnd + n) % loopEnd);\r\n }\r\n\r\n function get() {\r\n return counter;\r\n }\r\n\r\n function set(n) {\r\n counter = withinLimit(n);\r\n return self;\r\n }\r\n\r\n function add(n) {\r\n return set(get() + n);\r\n }\r\n\r\n function clone() {\r\n return Counter(max, get(), loop);\r\n }\r\n\r\n var self = {\r\n add: add,\r\n clone: clone,\r\n get: get,\r\n set: set,\r\n min: min,\r\n max: max,\r\n };\r\n return self;\r\n }\r\n\r\n function Direction(direction) {\r\n var sign = direction === 'rtl' ? -1 : 1;\r\n\r\n function applyTo(n) {\r\n return n * sign;\r\n }\r\n\r\n var self = {\r\n applyTo: applyTo,\r\n };\r\n return self;\r\n }\r\n\r\n function EventStore() {\r\n var listeners = [];\r\n\r\n function add(node, type, handler, options) {\r\n if (options === void 0) {\r\n //options = false;\r\n options = {\r\n passive: false,\r\n };\r\n }\r\n\r\n node.addEventListener(type, handler, options);\r\n listeners.push(function () {\r\n return node.removeEventListener(type, handler, options);\r\n });\r\n return self;\r\n }\r\n\r\n function removeAll() {\r\n listeners = listeners.filter(function (remove) {\r\n return remove();\r\n });\r\n return self;\r\n }\r\n\r\n var self = {\r\n add: add,\r\n removeAll: removeAll,\r\n };\r\n return self;\r\n }\r\n\r\n function Vector1D(value) {\r\n var vector = value;\r\n\r\n function get() {\r\n return vector;\r\n }\r\n\r\n function set(n) {\r\n vector = readNumber(n);\r\n return self;\r\n }\r\n\r\n function add(n) {\r\n vector += readNumber(n);\r\n return self;\r\n }\r\n\r\n function subtract(n) {\r\n vector -= readNumber(n);\r\n return self;\r\n }\r\n\r\n function multiply(n) {\r\n vector *= n;\r\n return self;\r\n }\r\n\r\n function divide(n) {\r\n vector /= n;\r\n return self;\r\n }\r\n\r\n function normalize() {\r\n if (vector !== 0) divide(vector);\r\n return self;\r\n }\r\n\r\n function readNumber(n) {\r\n return typeof n === 'number' ? n : n.get();\r\n }\r\n\r\n var self = {\r\n add: add,\r\n divide: divide,\r\n get: get,\r\n multiply: multiply,\r\n normalize: normalize,\r\n set: set,\r\n subtract: subtract,\r\n };\r\n return self;\r\n }\r\n\r\n function map(value, iStart, iStop, oStart, oStop) {\r\n return oStart + (oStop - oStart) * ((value - iStart) / (iStop - iStart));\r\n }\r\n function mathSign(n) {\r\n return !n ? 0 : n / Math.abs(n);\r\n }\r\n function deltaAbs(valueB, valueA) {\r\n return Math.abs(valueB - valueA);\r\n }\r\n function factorAbs(valueB, valueA) {\r\n if (valueB === 0 || valueA === 0) return 0;\r\n if (Math.abs(valueB) <= Math.abs(valueA)) return 0;\r\n var diff = deltaAbs(Math.abs(valueB), Math.abs(valueA));\r\n return Math.abs(diff / valueB);\r\n }\r\n function roundToDecimals(decimalPoints) {\r\n var pow = Math.pow(10, decimalPoints);\r\n return function (n) {\r\n return Math.round(n * pow) / pow;\r\n };\r\n }\r\n function debounce(callback, time) {\r\n var timeout = 0;\r\n return function () {\r\n window.clearTimeout(timeout);\r\n timeout = window.setTimeout(callback, time) || 0;\r\n };\r\n }\r\n function groupArray(array, size) {\r\n var groups = [];\r\n\r\n for (var i = 0; i < array.length; i += size) {\r\n groups.push(array.slice(i, i + size));\r\n }\r\n\r\n return groups;\r\n }\r\n function arrayKeys(array) {\r\n return Object.keys(array).map(Number);\r\n }\r\n function arrayLast(array) {\r\n return array[lastIndex(array)];\r\n }\r\n function lastIndex(array) {\r\n return Math.max(0, array.length - 1);\r\n }\r\n function removeClass(node, className) {\r\n var cl = node.classList;\r\n if (className && cl.contains(className)) cl.remove(className);\r\n }\r\n function addClass(node, className) {\r\n var cl = node.classList;\r\n if (className && !cl.contains(className)) cl.add(className);\r\n }\r\n\r\n function DragHandler(\r\n axis,\r\n direction,\r\n rootNode,\r\n target,\r\n dragFree,\r\n dragTracker,\r\n location,\r\n animation,\r\n scrollTo,\r\n scrollBody,\r\n scrollTarget,\r\n index,\r\n events,\r\n loop,\r\n skipSnaps\r\n ) {\r\n var scrollAxis = axis.scroll,\r\n crossAxis = axis.cross;\r\n var focusNodes = ['INPUT', 'SELECT', 'TEXTAREA'];\r\n var startScroll = Vector1D(0);\r\n var startCross = Vector1D(0);\r\n var dragStartPoint = Vector1D(0);\r\n var activationEvents = EventStore();\r\n var interactionEvents = EventStore();\r\n var snapForceBoost = {\r\n mouse: 2.5,\r\n touch: 3.5,\r\n };\r\n var freeForceBoost = {\r\n mouse: 5,\r\n touch: 7,\r\n };\r\n var baseSpeed = dragFree ? 5 : 16;\r\n var baseMass = 1;\r\n var dragThreshold = 20;\r\n var pointerIsDown = false;\r\n var preventScroll = false;\r\n var preventClick = false;\r\n var isMouse = false;\r\n\r\n function addActivationEvents() {\r\n var node = rootNode;\r\n activationEvents\r\n .add(node, 'touchmove', function () {\r\n return undefined;\r\n })\r\n .add(node, 'touchend', function () {\r\n return undefined;\r\n })\r\n .add(node, 'touchstart', down)\r\n .add(node, 'mousedown', down)\r\n .add(node, 'touchcancel', up)\r\n .add(node, 'contextmenu', up)\r\n .add(node, 'click', click);\r\n }\r\n\r\n function addInteractionEvents() {\r\n var node = !isMouse ? rootNode : document;\r\n interactionEvents\r\n .add(node, 'touchmove', move)\r\n .add(node, 'touchend', up)\r\n .add(node, 'mousemove', move)\r\n .add(node, 'mouseup', up);\r\n }\r\n\r\n function removeAllEvents() {\r\n activationEvents.removeAll();\r\n interactionEvents.removeAll();\r\n }\r\n\r\n function isFocusNode(node) {\r\n var name = node.nodeName || '';\r\n return focusNodes.indexOf(name) > -1;\r\n }\r\n\r\n function forceBoost() {\r\n var boost = dragFree ? freeForceBoost : snapForceBoost;\r\n var type = isMouse ? 'mouse' : 'touch';\r\n return boost[type];\r\n }\r\n\r\n function allowedForce(force, targetChanged) {\r\n var next = index.clone().add(mathSign(force) * -1);\r\n var isEdge = next.get() === index.min || next.get() === index.max;\r\n var baseForce = scrollTarget.byDistance(force, !dragFree).distance;\r\n if (dragFree || Math.abs(force) < dragThreshold) return baseForce;\r\n if (!loop && isEdge) return baseForce * 0.6;\r\n if (skipSnaps && targetChanged) return baseForce * 0.5;\r\n return scrollTarget.byIndex(next.get(), 0).distance;\r\n }\r\n\r\n function down(evt) {\r\n isMouse = evt.type === 'mousedown';\r\n if (isMouse && evt.button !== 0) return;\r\n var isMoving = deltaAbs(target.get(), location.get()) >= 2;\r\n var clearPreventClick = isMouse || !isMoving;\r\n var isNotFocusNode = !isFocusNode(evt.target);\r\n var preventDefault = isMoving || (isMouse && isNotFocusNode);\r\n pointerIsDown = true;\r\n dragTracker.pointerDown(evt);\r\n dragStartPoint.set(target);\r\n target.set(location);\r\n scrollBody.useBaseMass().useSpeed(80);\r\n addInteractionEvents();\r\n startScroll.set(dragTracker.readPoint(evt, scrollAxis));\r\n startCross.set(dragTracker.readPoint(evt, crossAxis));\r\n events.emit('pointerDown');\r\n if (clearPreventClick) preventClick = false;\r\n if (preventDefault) evt.preventDefault();\r\n }\r\n\r\n function move(evt) {\r\n if (!preventScroll && !isMouse) {\r\n if (!evt.cancelable) return up();\r\n var moveScroll = dragTracker.readPoint(evt, scrollAxis).get();\r\n var moveCross = dragTracker.readPoint(evt, crossAxis).get();\r\n var diffScroll = deltaAbs(moveScroll, startScroll.get());\r\n var diffCross = deltaAbs(moveCross, startCross.get());\r\n preventScroll = diffScroll > diffCross;\r\n if (!preventScroll && !preventClick) return up();\r\n }\r\n\r\n var diff = dragTracker.pointerMove(evt);\r\n if (!preventClick && diff) preventClick = true;\r\n animation.start();\r\n target.add(direction.applyTo(diff));\r\n evt.preventDefault();\r\n }\r\n\r\n function up() {\r\n var currentLocation = scrollTarget.byDistance(0, false);\r\n var targetChanged = currentLocation.index !== index.get();\r\n var rawForce = dragTracker.pointerUp() * forceBoost();\r\n var force = allowedForce(direction.applyTo(rawForce), targetChanged);\r\n var forceFactor = factorAbs(rawForce, force);\r\n var isMoving = deltaAbs(target.get(), dragStartPoint.get()) >= 0.5;\r\n var isVigorous = targetChanged && forceFactor > 0.75;\r\n var isBelowThreshold = Math.abs(rawForce) < dragThreshold;\r\n var speed = isVigorous ? 10 : baseSpeed;\r\n var mass = isVigorous ? baseMass + 2.5 * forceFactor : baseMass;\r\n if (isMoving && !isMouse) preventClick = true;\r\n preventScroll = false;\r\n pointerIsDown = false;\r\n interactionEvents.removeAll();\r\n scrollBody.useSpeed(isBelowThreshold ? 9 : speed).useMass(mass);\r\n scrollTo.distance(force, !dragFree);\r\n isMouse = false;\r\n events.emit('pointerUp');\r\n }\r\n\r\n function click(evt) {\r\n if (preventClick) evt.preventDefault();\r\n }\r\n\r\n function clickAllowed() {\r\n return !preventClick;\r\n }\r\n\r\n function pointerDown() {\r\n return pointerIsDown;\r\n }\r\n\r\n var self = {\r\n addActivationEvents: addActivationEvents,\r\n clickAllowed: clickAllowed,\r\n pointerDown: pointerDown,\r\n removeAllEvents: removeAllEvents,\r\n };\r\n return self;\r\n }\r\n\r\n function DragTracker(axis, pxToPercent) {\r\n var scrollAxis = axis.scroll;\r\n var coords = {\r\n x: 'clientX',\r\n y: 'clientY',\r\n };\r\n var startDrag = Vector1D(0);\r\n var diffDrag = Vector1D(0);\r\n var lastDrag = Vector1D(0);\r\n var pointValue = Vector1D(0);\r\n var trackInterval = 10;\r\n var trackLength = 5;\r\n var trackTime = 100;\r\n var trackPoints = [];\r\n var lastMoveTime = new Date().getTime();\r\n var isMouse = false;\r\n\r\n function readPoint(evt, type) {\r\n isMouse = !evt.touches;\r\n var c = coords[type];\r\n var value = isMouse ? evt[c] : evt.touches[0][c];\r\n return pointValue.set(value);\r\n }\r\n\r\n function pointerDown(evt) {\r\n var point = readPoint(evt, scrollAxis);\r\n startDrag.set(point);\r\n lastDrag.set(point);\r\n return pxToPercent.measure(startDrag.get());\r\n }\r\n\r\n function pointerMove(evt) {\r\n var point = readPoint(evt, scrollAxis);\r\n var nowTime = new Date().getTime();\r\n var diffTime = nowTime - lastMoveTime;\r\n\r\n if (diffTime >= trackInterval) {\r\n if (diffTime >= trackTime) trackPoints = [];\r\n trackPoints.push(point.get());\r\n lastMoveTime = nowTime;\r\n }\r\n\r\n diffDrag.set(point).subtract(lastDrag);\r\n lastDrag.set(point);\r\n return pxToPercent.measure(diffDrag.get());\r\n }\r\n\r\n function pointerUp() {\r\n var nowTime = new Date().getTime();\r\n var diffTime = nowTime - lastMoveTime;\r\n var currentPoint = lastDrag.get();\r\n var force = trackPoints\r\n .slice(-trackLength)\r\n .map(function (trackPoint) {\r\n return currentPoint - trackPoint;\r\n })\r\n .sort(function (p1, p2) {\r\n return Math.abs(p1) < Math.abs(p2) ? 1 : -1;\r\n })[0];\r\n lastDrag.set(diffTime > trackTime || !force ? 0 : force);\r\n trackPoints = [];\r\n return pxToPercent.measure(lastDrag.get());\r\n }\r\n\r\n var self = {\r\n pointerDown: pointerDown,\r\n pointerMove: pointerMove,\r\n pointerUp: pointerUp,\r\n readPoint: readPoint,\r\n };\r\n return self;\r\n }\r\n\r\n function PxToPercent(viewInPx) {\r\n var totalPercent = 100;\r\n\r\n function measure(n) {\r\n if (viewInPx === 0) return 0;\r\n return (n / viewInPx) * totalPercent;\r\n }\r\n\r\n var self = {\r\n measure: measure,\r\n totalPercent: totalPercent,\r\n };\r\n return self;\r\n }\r\n\r\n function ScrollBody(location, baseSpeed, baseMass) {\r\n var roundToTwoDecimals = roundToDecimals(2);\r\n var velocity = Vector1D(0);\r\n var acceleration = Vector1D(0);\r\n var attraction = Vector1D(0);\r\n var attractionDirection = 0;\r\n var speed = baseSpeed;\r\n var mass = baseMass;\r\n\r\n function update() {\r\n velocity.add(acceleration);\r\n location.add(velocity);\r\n acceleration.multiply(0);\r\n }\r\n\r\n function applyForce(v) {\r\n v.divide(mass);\r\n acceleration.add(v);\r\n }\r\n\r\n function seek(v) {\r\n attraction.set(v).subtract(location);\r\n var magnitude = map(attraction.get(), 0, 100, 0, speed);\r\n attractionDirection = mathSign(attraction.get());\r\n attraction.normalize().multiply(magnitude).subtract(velocity);\r\n applyForce(attraction);\r\n return self;\r\n }\r\n\r\n function settle(v) {\r\n var diff = v.get() - location.get();\r\n var hasSettled = !roundToTwoDecimals(diff);\r\n if (hasSettled) location.set(v);\r\n return hasSettled;\r\n }\r\n\r\n function direction() {\r\n return attractionDirection;\r\n }\r\n\r\n function useBaseSpeed() {\r\n return useSpeed(baseSpeed);\r\n }\r\n\r\n function useBaseMass() {\r\n return useMass(baseMass);\r\n }\r\n\r\n function useSpeed(n) {\r\n speed = n;\r\n return self;\r\n }\r\n\r\n function useMass(n) {\r\n mass = n;\r\n return self;\r\n }\r\n\r\n var self = {\r\n direction: direction,\r\n seek: seek,\r\n settle: settle,\r\n update: update,\r\n useBaseMass: useBaseMass,\r\n useBaseSpeed: useBaseSpeed,\r\n useMass: useMass,\r\n useSpeed: useSpeed,\r\n };\r\n return self;\r\n }\r\n\r\n function ScrollBounds(limit, location, target, scrollBody) {\r\n var pullBackThreshold = 10;\r\n var disabled = false;\r\n\r\n function shouldConstrain() {\r\n if (disabled) return false;\r\n if (!limit.reachedAny(target.get())) return false;\r\n if (!limit.reachedAny(location.get())) return false;\r\n return true;\r\n }\r\n\r\n function constrain(pointerDown) {\r\n if (!shouldConstrain()) return;\r\n var friction = pointerDown ? 0.7 : 0.45;\r\n var diffToTarget = target.get() - location.get();\r\n target.subtract(diffToTarget * friction);\r\n\r\n if (!pointerDown && Math.abs(diffToTarget) < pullBackThreshold) {\r\n target.set(limit.constrain(target.get()));\r\n scrollBody.useSpeed(10).useMass(3);\r\n }\r\n }\r\n\r\n function toggleActive(active) {\r\n disabled = !active;\r\n }\r\n\r\n var self = {\r\n constrain: constrain,\r\n toggleActive: toggleActive,\r\n };\r\n return self;\r\n }\r\n\r\n function ScrollContain(\r\n viewSize,\r\n contentSize,\r\n snaps,\r\n snapsAligned,\r\n containScroll\r\n ) {\r\n var scrollBounds = Limit(-contentSize + viewSize, snaps[0]);\r\n var snapsBounded = snapsAligned.map(scrollBounds.constrain);\r\n var snapsContained = measureContained();\r\n\r\n function findDuplicates() {\r\n var startSnap = snapsBounded[0];\r\n var endSnap = arrayLast(snapsBounded);\r\n var min = snapsBounded.lastIndexOf(startSnap);\r\n var max = snapsBounded.indexOf(endSnap) + 1;\r\n return Limit(min, max);\r\n }\r\n\r\n function measureContained() {\r\n if (contentSize <= viewSize) return [scrollBounds.max];\r\n if (containScroll === 'keepSnaps') return snapsBounded;\r\n\r\n var _a = findDuplicates(),\r\n min = _a.min,\r\n max = _a.max;\r\n\r\n return snapsBounded.slice(min, max);\r\n }\r\n\r\n var self = {\r\n snapsContained: snapsContained,\r\n };\r\n return self;\r\n }\r\n\r\n function ScrollLimit(contentSize, scrollSnaps, loop) {\r\n var limit = measureLimit();\r\n\r\n function measureLimit() {\r\n var startSnap = scrollSnaps[0];\r\n var endSnap = arrayLast(scrollSnaps);\r\n var min = loop ? startSnap - contentSize : endSnap;\r\n var max = startSnap;\r\n return Limit(min, max);\r\n }\r\n\r\n var self = {\r\n limit: limit,\r\n };\r\n return self;\r\n }\r\n\r\n function ScrollLooper(contentSize, pxToPercent, limit, location, vectors) {\r\n var min = limit.min + pxToPercent.measure(0.1);\r\n var max = limit.max + pxToPercent.measure(0.1);\r\n\r\n var _a = Limit(min, max),\r\n reachedMin = _a.reachedMin,\r\n reachedMax = _a.reachedMax;\r\n\r\n function shouldLoop(direction) {\r\n if (direction === 1) return reachedMax(location.get());\r\n if (direction === -1) return reachedMin(location.get());\r\n return false;\r\n }\r\n\r\n function loop(direction) {\r\n if (!shouldLoop(direction)) return;\r\n var loopDistance = contentSize * (direction * -1);\r\n vectors.forEach(function (v) {\r\n return v.add(loopDistance);\r\n });\r\n }\r\n\r\n var self = {\r\n loop: loop,\r\n };\r\n return self;\r\n }\r\n\r\n function ScrollProgress(limit) {\r\n var max = limit.max,\r\n scrollLength = limit.length;\r\n\r\n function get(n) {\r\n var currentLocation = n - max;\r\n return currentLocation / -scrollLength;\r\n }\r\n\r\n var self = {\r\n get: get,\r\n };\r\n return self;\r\n }\r\n\r\n function ScrollSnap(\r\n axis,\r\n alignment,\r\n pxToPercent,\r\n containerRect,\r\n slideRects,\r\n slidesToScroll\r\n ) {\r\n var startEdge = axis.startEdge,\r\n endEdge = axis.endEdge;\r\n var snaps = measureUnaligned();\r\n var snapsAligned = measureAligned();\r\n\r\n function measureSizes() {\r\n return groupArray(slideRects, slidesToScroll)\r\n .map(function (rects) {\r\n return arrayLast(rects)[endEdge] - rects[0][startEdge];\r\n })\r\n .map(pxToPercent.measure)\r\n .map(Math.abs);\r\n }\r\n\r\n function measureUnaligned() {\r\n return slideRects\r\n .map(function (rect) {\r\n return containerRect[startEdge] - rect[startEdge];\r\n })\r\n .map(pxToPercent.measure)\r\n .map(function (snap) {\r\n return -Math.abs(snap);\r\n });\r\n }\r\n\r\n function measureAligned() {\r\n var groupedSnaps = groupArray(snaps, slidesToScroll).map(function (g) {\r\n return g[0];\r\n });\r\n var alignments = measureSizes().map(alignment.measure);\r\n return groupedSnaps.map(function (snap, index) {\r\n return snap + alignments[index];\r\n });\r\n }\r\n\r\n var self = {\r\n snaps: snaps,\r\n snapsAligned: snapsAligned,\r\n };\r\n return self;\r\n }\r\n\r\n function ScrollTarget(loop, scrollSnaps, contentSize, limit, targetVector) {\r\n var reachedAny = limit.reachedAny,\r\n removeOffset = limit.removeOffset,\r\n constrain = limit.constrain;\r\n\r\n function minDistance(d1, d2) {\r\n return Math.abs(d1) < Math.abs(d2) ? d1 : d2;\r\n }\r\n\r\n function findTargetSnap(target) {\r\n var distance = loop ? removeOffset(target) : constrain(target);\r\n var ascDiffsToSnaps = scrollSnaps\r\n .map(function (scrollSnap) {\r\n return scrollSnap - distance;\r\n })\r\n .map(function (diffToSnap) {\r\n return shortcut(diffToSnap, 0);\r\n })\r\n .map(function (diff, i) {\r\n return {\r\n diff: diff,\r\n index: i,\r\n };\r\n })\r\n .sort(function (d1, d2) {\r\n return Math.abs(d1.diff) - Math.abs(d2.diff);\r\n });\r\n var index = ascDiffsToSnaps[0].index;\r\n return {\r\n index: index,\r\n distance: distance,\r\n };\r\n }\r\n\r\n function shortcut(target, direction) {\r\n var t1 = target;\r\n var t2 = target + contentSize;\r\n var t3 = target - contentSize;\r\n if (!loop) return t1;\r\n if (!direction) return minDistance(minDistance(t1, t2), t3);\r\n var shortest = minDistance(t1, direction === 1 ? t2 : t3);\r\n return Math.abs(shortest) * direction;\r\n }\r\n\r\n function byIndex(index, direction) {\r\n var diffToSnap = scrollSnaps[index] - targetVector.get();\r\n var distance = shortcut(diffToSnap, direction);\r\n return {\r\n index: index,\r\n distance: distance,\r\n };\r\n }\r\n\r\n function byDistance(distance, snap) {\r\n var target = targetVector.get() + distance;\r\n\r\n var _a = findTargetSnap(target),\r\n index = _a.index,\r\n targetSnapDistance = _a.distance;\r\n\r\n var reachedBound = !loop && reachedAny(target);\r\n if (!snap || reachedBound)\r\n return {\r\n index: index,\r\n distance: distance,\r\n };\r\n var diffToSnap = scrollSnaps[index] - targetSnapDistance;\r\n var snapDistance = distance + shortcut(diffToSnap, 0);\r\n return {\r\n index: index,\r\n distance: snapDistance,\r\n };\r\n }\r\n\r\n var self = {\r\n byDistance: byDistance,\r\n byIndex: byIndex,\r\n shortcut: shortcut,\r\n };\r\n return self;\r\n }\r\n\r\n function ScrollTo(\r\n animation,\r\n indexCurrent,\r\n indexPrevious,\r\n scrollTarget,\r\n targetVector,\r\n events\r\n ) {\r\n function scrollTo(target) {\r\n var distanceDiff = target.distance;\r\n var indexDiff = target.index !== indexCurrent.get();\r\n\r\n if (distanceDiff) {\r\n animation.start();\r\n targetVector.add(distanceDiff);\r\n }\r\n\r\n if (indexDiff) {\r\n indexPrevious.set(indexCurrent.get());\r\n indexCurrent.set(target.index);\r\n events.emit('select');\r\n }\r\n }\r\n\r\n function distance(n, snap) {\r\n var target = scrollTarget.byDistance(n, snap);\r\n scrollTo(target);\r\n }\r\n\r\n function index(n, direction) {\r\n var targetIndex = indexCurrent.clone().set(n);\r\n var target = scrollTarget.byIndex(targetIndex.get(), direction);\r\n scrollTo(target);\r\n }\r\n\r\n var self = {\r\n distance: distance,\r\n index: index,\r\n };\r\n return self;\r\n }\r\n\r\n function SlideLooper(\r\n axis,\r\n viewSize,\r\n contentSize,\r\n slideSizesWithGaps,\r\n scrollSnaps,\r\n slidesInView,\r\n scrollLocation,\r\n slides\r\n ) {\r\n var ascItems = arrayKeys(slideSizesWithGaps);\r\n var descItems = arrayKeys(slideSizesWithGaps).reverse();\r\n var loopPoints = startPoints().concat(endPoints());\r\n\r\n function removeSlideSizes(indexes, from) {\r\n return indexes.reduce(function (a, i) {\r\n return a - slideSizesWithGaps[i];\r\n }, from);\r\n }\r\n\r\n function slidesInGap(indexes, gap) {\r\n return indexes.reduce(function (a, i) {\r\n var remainingGap = removeSlideSizes(a, gap);\r\n return remainingGap > 0 ? a.concat([i]) : a;\r\n }, []);\r\n }\r\n\r\n function findLoopPoints(indexes, edge) {\r\n var isStartEdge = edge === 'start';\r\n var offset = isStartEdge ? -contentSize : contentSize;\r\n var slideBounds = slidesInView.findSlideBounds(offset);\r\n return indexes.map(function (index) {\r\n var initial = isStartEdge ? 0 : -contentSize;\r\n var altered = isStartEdge ? contentSize : 0;\r\n var bounds = slideBounds.filter(function (b) {\r\n return b.index === index;\r\n })[0];\r\n var point = bounds[isStartEdge ? 'end' : 'start'];\r\n\r\n var getTarget = function getTarget() {\r\n return scrollLocation.get() > point ? initial : altered;\r\n };\r\n\r\n return {\r\n point: point,\r\n getTarget: getTarget,\r\n index: index,\r\n location: -1,\r\n };\r\n });\r\n }\r\n\r\n function startPoints() {\r\n var gap = scrollSnaps[0] - 1;\r\n var indexes = slidesInGap(descItems, gap);\r\n return findLoopPoints(indexes, 'end');\r\n }\r\n\r\n function endPoints() {\r\n var gap = viewSize - scrollSnaps[0] - 1;\r\n var indexes = slidesInGap(ascItems, gap);\r\n return findLoopPoints(indexes, 'start');\r\n }\r\n\r\n function canLoop() {\r\n return loopPoints.every(function (_a) {\r\n var index = _a.index;\r\n var otherIndexes = ascItems.filter(function (i) {\r\n return i !== index;\r\n });\r\n return removeSlideSizes(otherIndexes, viewSize) <= 0;\r\n });\r\n }\r\n\r\n function loop() {\r\n loopPoints.forEach(function (loopPoint) {\r\n var getTarget = loopPoint.getTarget,\r\n location = loopPoint.location,\r\n index = loopPoint.index;\r\n var target = getTarget();\r\n\r\n if (target !== location) {\r\n slides[index].style[axis.startEdge] = target + '%';\r\n loopPoint.location = target;\r\n }\r\n });\r\n }\r\n\r\n function clear() {\r\n loopPoints.forEach(function (_a) {\r\n var index = _a.index;\r\n slides[index].style[axis.startEdge] = '';\r\n });\r\n }\r\n\r\n var self = {\r\n canLoop: canLoop,\r\n clear: clear,\r\n loop: loop,\r\n loopPoints: loopPoints,\r\n };\r\n return self;\r\n }\r\n\r\n function SlideFocus(rootNode, scrollTo, slidesToScroll) {\r\n var eventStore = EventStore();\r\n var removeAllEvents = eventStore.removeAll;\r\n var lastTabPressTime = 0;\r\n\r\n function registerTabPress(event) {\r\n if (event.keyCode !== 9) return;\r\n lastTabPressTime = new Date().getTime();\r\n }\r\n\r\n function addFocusEvent(slide, index) {\r\n var focus = function focus() {\r\n var nowTime = new Date().getTime();\r\n var diffTime = nowTime - lastTabPressTime;\r\n if (diffTime > 10) return;\r\n rootNode.scrollLeft = 0;\r\n var selectedIndex = Math.floor(index / slidesToScroll);\r\n scrollTo.index(selectedIndex, 0);\r\n };\r\n\r\n eventStore.add(slide, 'focus', focus, true);\r\n }\r\n\r\n function addActivationEvents(slides) {\r\n eventStore.add(document, 'keydown', registerTabPress, false);\r\n slides.forEach(addFocusEvent);\r\n }\r\n\r\n var self = {\r\n addActivationEvents: addActivationEvents,\r\n removeAllEvents: removeAllEvents,\r\n };\r\n return self;\r\n }\r\n\r\n function SlidesInView(\r\n viewSize,\r\n contentSize,\r\n slideSizes,\r\n snaps,\r\n loop,\r\n inViewThreshold\r\n ) {\r\n var threshold = Math.min(Math.max(inViewThreshold, 0.01), 0.99);\r\n var offsets = loop ? [0, contentSize, -contentSize] : [0];\r\n var slideBounds = offsets.reduce(function (a, offset) {\r\n return a.concat(findSlideBounds(offset, threshold));\r\n }, []);\r\n\r\n function findSlideBounds(offset, threshold) {\r\n var thresholds = slideSizes.map(function (s) {\r\n return s * (threshold || 0);\r\n });\r\n return snaps.map(function (snap, index) {\r\n return {\r\n start: snap - slideSizes[index] + thresholds[index] + offset,\r\n end: snap + viewSize - thresholds[index] + offset,\r\n index: index,\r\n };\r\n });\r\n }\r\n\r\n function check(location) {\r\n return slideBounds.reduce(function (list, slideBound) {\r\n var index = slideBound.index,\r\n start = slideBound.start,\r\n end = slideBound.end;\r\n var inList = list.indexOf(index) !== -1;\r\n var inView = start < location && end > location;\r\n return !inList && inView ? list.concat([index]) : list;\r\n }, []);\r\n }\r\n\r\n var self = {\r\n check: check,\r\n findSlideBounds: findSlideBounds,\r\n };\r\n return self;\r\n }\r\n\r\n function SlideSizes(axis, pxToPercent, slides, slideRects, loop) {\r\n var measureSize = axis.measureSize,\r\n startEdge = axis.startEdge,\r\n endEdge = axis.endEdge;\r\n var sizesInPx = slideRects.map(measureSize);\r\n var slideSizes = sizesInPx.map(pxToPercent.measure);\r\n var slideSizesWithGaps = measureWithGaps();\r\n\r\n function measureWithGaps() {\r\n return slideRects\r\n .map(function (rect, index, rects) {\r\n var isLast = index === lastIndex(rects);\r\n var style = window.getComputedStyle(arrayLast(slides));\r\n var endGap = parseFloat(style.getPropertyValue('margin-' + endEdge));\r\n if (isLast) return sizesInPx[index] + (loop ? endGap : 0);\r\n return rects[index + 1][startEdge] - rect[startEdge];\r\n })\r\n .map(pxToPercent.measure)\r\n .map(Math.abs);\r\n }\r\n\r\n var self = {\r\n slideSizes: slideSizes,\r\n slideSizesWithGaps: slideSizesWithGaps,\r\n };\r\n return self;\r\n }\r\n\r\n function Translate(axis, direction, container) {\r\n var containerStyle = container.style;\r\n var translate = axis.scroll === 'x' ? x : y;\r\n var disabled = false;\r\n\r\n function x(n) {\r\n return 'translate3d(' + n + '%,0px,0px)';\r\n }\r\n\r\n function y(n) {\r\n return 'translate3d(0px,' + n + '%,0px)';\r\n }\r\n\r\n function to(target) {\r\n if (disabled) return;\r\n containerStyle.transform = translate(direction.applyTo(target.get()));\r\n }\r\n\r\n function toggleActive(active) {\r\n disabled = !active;\r\n }\r\n\r\n function clear() {\r\n containerStyle.transform = '';\r\n }\r\n\r\n var self = {\r\n clear: clear,\r\n to: to,\r\n toggleActive: toggleActive,\r\n };\r\n return self;\r\n }\r\n\r\n function Engine(root, container, slides, options, events) {\r\n // Options\r\n var align = options.align,\r\n scrollAxis = options.axis,\r\n contentDirection = options.direction,\r\n startIndex = options.startIndex,\r\n inViewThreshold = options.inViewThreshold,\r\n loop = options.loop,\r\n speed = options.speed,\r\n dragFree = options.dragFree,\r\n slidesToScroll = options.slidesToScroll,\r\n skipSnaps = options.skipSnaps,\r\n containScroll = options.containScroll; // Measurements\r\n\r\n var containerRect = container.getBoundingClientRect();\r\n var slideRects = slides.map(function (slide) {\r\n return slide.getBoundingClientRect();\r\n });\r\n var direction = Direction(contentDirection);\r\n var axis = Axis(scrollAxis, contentDirection);\r\n var pxToPercent = PxToPercent(axis.measureSize(containerRect));\r\n var viewSize = pxToPercent.totalPercent;\r\n var alignment = Alignment(align, viewSize);\r\n\r\n var _a = SlideSizes(axis, pxToPercent, slides, slideRects, loop),\r\n slideSizes = _a.slideSizes,\r\n slideSizesWithGaps = _a.slideSizesWithGaps;\r\n\r\n var _b = ScrollSnap(\r\n axis,\r\n alignment,\r\n pxToPercent,\r\n containerRect,\r\n slideRects,\r\n slidesToScroll\r\n ),\r\n snaps = _b.snaps,\r\n snapsAligned = _b.snapsAligned;\r\n\r\n var contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps);\r\n var snapsContained = ScrollContain(\r\n viewSize,\r\n contentSize,\r\n snaps,\r\n snapsAligned,\r\n containScroll\r\n ).snapsContained;\r\n var contain = !loop && containScroll !== '';\r\n var scrollSnaps = contain ? snapsContained : snapsAligned;\r\n var limit = ScrollLimit(contentSize, scrollSnaps, loop).limit; // Indexes\r\n\r\n var index = Counter(lastIndex(scrollSnaps), startIndex, loop);\r\n var indexPrevious = index.clone();\r\n var slideIndexes = arrayKeys(slides); // Draw\r\n\r\n var update = function update() {\r\n if (!loop)\r\n engine.scrollBounds.constrain(engine.dragHandler.pointerDown());\r\n engine.scrollBody.seek(target).update();\r\n var settled = engine.scrollBody.settle(target);\r\n\r\n if (settled && !engine.dragHandler.pointerDown()) {\r\n engine.animation.stop();\r\n events.emit('settle');\r\n }\r\n\r\n if (!settled) {\r\n events.emit('scroll');\r\n }\r\n\r\n if (loop) {\r\n engine.scrollLooper.loop(engine.scrollBody.direction());\r\n engine.slideLooper.loop();\r\n }\r\n\r\n engine.translate.to(location);\r\n engine.animation.proceed();\r\n }; // Shared\r\n\r\n var animation = Animation(update);\r\n var startLocation = scrollSnaps[index.get()];\r\n var location = Vector1D(startLocation);\r\n var target = Vector1D(startLocation);\r\n var scrollBody = ScrollBody(location, speed, 1);\r\n var scrollTarget = ScrollTarget(\r\n loop,\r\n scrollSnaps,\r\n contentSize,\r\n limit,\r\n target\r\n );\r\n var scrollTo = ScrollTo(\r\n animation,\r\n index,\r\n indexPrevious,\r\n scrollTarget,\r\n target,\r\n events\r\n );\r\n var slidesInView = SlidesInView(\r\n viewSize,\r\n contentSize,\r\n slideSizes,\r\n snaps,\r\n loop,\r\n inViewThreshold\r\n ); // DragHandler\r\n\r\n var dragHandler = DragHandler(\r\n axis,\r\n direction,\r\n root,\r\n target,\r\n dragFree,\r\n DragTracker(axis, pxToPercent),\r\n location,\r\n animation,\r\n scrollTo,\r\n scrollBody,\r\n scrollTarget,\r\n index,\r\n events,\r\n loop,\r\n skipSnaps\r\n ); // Slider\r\n\r\n var engine = {\r\n animation: animation,\r\n axis: axis,\r\n direction: direction,\r\n dragHandler: dragHandler,\r\n pxToPercent: pxToPercent,\r\n index: index,\r\n indexPrevious: indexPrevious,\r\n limit: limit,\r\n location: location,\r\n options: options,\r\n scrollBody: scrollBody,\r\n scrollBounds: ScrollBounds(limit, location, target, scrollBody),\r\n scrollLooper: ScrollLooper(contentSize, pxToPercent, limit, location, [\r\n location,\r\n target,\r\n ]),\r\n scrollProgress: ScrollProgress(limit),\r\n scrollSnaps: scrollSnaps,\r\n scrollTarget: scrollTarget,\r\n scrollTo: scrollTo,\r\n slideFocus: SlideFocus(root, scrollTo, slidesToScroll),\r\n slideLooper: SlideLooper(\r\n axis,\r\n viewSize,\r\n contentSize,\r\n slideSizesWithGaps,\r\n scrollSnaps,\r\n slidesInView,\r\n location,\r\n slides\r\n ),\r\n slidesInView: slidesInView,\r\n slideIndexes: slideIndexes,\r\n target: target,\r\n translate: Translate(axis, direction, container),\r\n };\r\n return engine;\r\n }\r\n\r\n function EventEmitter() {\r\n var listeners = {};\r\n\r\n function getListeners(evt) {\r\n var eventListeners = listeners[evt];\r\n return eventListeners || [];\r\n }\r\n\r\n function emit(evt) {\r\n getListeners(evt).forEach(function (e) {\r\n return e(evt);\r\n });\r\n return self;\r\n }\r\n\r\n function on(evt, cb) {\r\n listeners[evt] = getListeners(evt).concat([cb]);\r\n return self;\r\n }\r\n\r\n function off(evt, cb) {\r\n listeners[evt] = getListeners(evt).filter(function (e) {\r\n return e !== cb;\r\n });\r\n return self;\r\n }\r\n\r\n var self = {\r\n emit: emit,\r\n off: off,\r\n on: on,\r\n };\r\n return self;\r\n }\r\n\r\n var defaultOptions = {\r\n align: 'center',\r\n axis: 'x',\r\n containScroll: '',\r\n direction: 'ltr',\r\n dragFree: false,\r\n draggable: true,\r\n draggableClass: 'is-draggable',\r\n draggingClass: 'is-dragging',\r\n inViewThreshold: 0,\r\n loop: false,\r\n skipSnaps: true,\r\n selectedClass: 'is-selected',\r\n slidesToScroll: 1,\r\n speed: 10,\r\n startIndex: 0,\r\n };\r\n\r\n function OptionsPseudo(node) {\r\n var pseudoString = getComputedStyle(node, ':before').content;\r\n\r\n function get() {\r\n try {\r\n return JSON.parse(pseudoString.slice(1, -1).replace(/\\\\/g, ''));\r\n } catch (error) {} // eslint-disable-line no-empty\r\n\r\n return {};\r\n }\r\n\r\n var self = {\r\n get: get,\r\n };\r\n return self;\r\n }\r\n\r\n function EmblaCarousel(sliderRoot, userOptions) {\r\n var events = EventEmitter();\r\n var eventStore = EventStore();\r\n var debouncedResize = debounce(resize, 500);\r\n var reInit = reActivate;\r\n var on = events.on,\r\n off = events.off;\r\n var engine;\r\n var activated = false;\r\n\r\n var optionsBase = _extends({}, defaultOptions);\r\n\r\n var options = _extends({}, optionsBase);\r\n\r\n var optionsPseudo;\r\n var rootNodeSize = 0;\r\n var container;\r\n var slides;\r\n activate(userOptions);\r\n\r\n function setupElements() {\r\n if (!sliderRoot) throw new Error('Missing root node 😢');\r\n var sliderContainer = sliderRoot.querySelector('*');\r\n if (!sliderContainer) throw new Error('Missing container node 😢');\r\n container = sliderContainer;\r\n slides = Array.prototype.slice.call(container.children);\r\n optionsPseudo = OptionsPseudo(sliderRoot);\r\n }\r\n\r\n function activate(partialOptions) {\r\n setupElements();\r\n optionsBase = _extends({}, optionsBase, partialOptions);\r\n options = _extends({}, optionsBase, optionsPseudo.get());\r\n engine = Engine(sliderRoot, container, slides, options, events);\r\n eventStore.add(window, 'resize', debouncedResize);\r\n engine.translate.to(engine.location);\r\n rootNodeSize = engine.axis.measureSize(\r\n sliderRoot.getBoundingClientRect()\r\n );\r\n\r\n if (options.loop) {\r\n if (!engine.slideLooper.canLoop()) {\r\n deActivate();\r\n return activate({\r\n loop: false,\r\n });\r\n }\r\n\r\n engine.slideLooper.loop();\r\n }\r\n\r\n if (options.draggable && container.offsetParent && slides.length) {\r\n engine.dragHandler.addActivationEvents();\r\n\r\n if (options.draggableClass) {\r\n addClass(sliderRoot, options.draggableClass);\r\n }\r\n\r\n if (options.draggingClass) {\r\n events\r\n .on('pointerDown', toggleDraggingClass)\r\n .on('pointerUp', toggleDraggingClass);\r\n }\r\n }\r\n\r\n if (slides.length) {\r\n engine.slideFocus.addActivationEvents(slides);\r\n }\r\n\r\n if (options.selectedClass) {\r\n toggleSelectedClass();\r\n events\r\n .on('select', toggleSelectedClass)\r\n .on('pointerUp', toggleSelectedClass);\r\n }\r\n\r\n if (!activated) {\r\n setTimeout(function () {\r\n return events.emit('init');\r\n }, 0);\r\n activated = true;\r\n }\r\n }\r\n\r\n function toggleDraggingClass(evt) {\r\n var draggingClass = options.draggingClass;\r\n if (evt === 'pointerDown') addClass(sliderRoot, draggingClass);\r\n else removeClass(sliderRoot, draggingClass);\r\n }\r\n\r\n function toggleSelectedClass() {\r\n var selectedClass = options.selectedClass;\r\n var inView = slidesInView(true);\r\n var notInView = slidesNotInView(true);\r\n notInView.forEach(function (index) {\r\n return removeClass(slides[index], selectedClass);\r\n });\r\n inView.forEach(function (index) {\r\n return addClass(slides[index], selectedClass);\r\n });\r\n }\r\n\r\n function deActivate() {\r\n engine.dragHandler.removeAllEvents();\r\n engine.slideFocus.removeAllEvents();\r\n engine.animation.stop();\r\n eventStore.removeAll();\r\n engine.translate.clear();\r\n engine.slideLooper.clear();\r\n removeClass(sliderRoot, options.draggableClass);\r\n slides.forEach(function (slide) {\r\n return removeClass(slide, options.selectedClass);\r\n });\r\n events\r\n .off('select', toggleSelectedClass)\r\n .off('pointerUp', toggleSelectedClass)\r\n .off('pointerDown', toggleDraggingClass)\r\n .off('pointerUp', toggleDraggingClass);\r\n }\r\n\r\n function reActivate(partialOptions) {\r\n if (!activated) return;\r\n var startIndex = selectedScrollSnap();\r\n\r\n var newOptions = _extends(\r\n {\r\n startIndex: startIndex,\r\n },\r\n partialOptions\r\n );\r\n\r\n deActivate();\r\n activate(newOptions);\r\n events.emit('reInit');\r\n }\r\n\r\n function destroy() {\r\n if (!activated) return;\r\n deActivate();\r\n activated = false;\r\n events.emit('destroy');\r\n }\r\n\r\n function resize() {\r\n if (!activated) return;\r\n var size = engine.axis.measureSize(sliderRoot.getBoundingClientRect());\r\n if (rootNodeSize !== size) reActivate();\r\n events.emit('resize');\r\n }\r\n\r\n function slidesInView(target) {\r\n var location = engine[target ? 'target' : 'location'].get();\r\n var type = options.loop ? 'removeOffset' : 'constrain';\r\n return engine.slidesInView.check(engine.limit[type](location));\r\n }\r\n\r\n function slidesNotInView(target) {\r\n var inView = slidesInView(target);\r\n return engine.slideIndexes.filter(function (index) {\r\n return inView.indexOf(index) === -1;\r\n });\r\n }\r\n\r\n function scrollTo(index, jump, direction) {\r\n engine.scrollBody.useBaseMass().useSpeed(jump ? 100 : options.speed);\r\n if (activated) engine.scrollTo.index(index, direction || 0);\r\n }\r\n\r\n function scrollNext(jump) {\r\n var next = engine.index.clone().add(1);\r\n scrollTo(next.get(), jump === true, -1);\r\n }\r\n\r\n function scrollPrev(jump) {\r\n var prev = engine.index.clone().add(-1);\r\n scrollTo(prev.get(), jump === true, 1);\r\n }\r\n\r\n function canScrollNext() {\r\n var next = engine.index.clone().add(1);\r\n return next.get() !== selectedScrollSnap();\r\n }\r\n\r\n function canScrollPrev() {\r\n var prev = engine.index.clone().add(-1);\r\n return prev.get() !== selectedScrollSnap();\r\n }\r\n\r\n function scrollSnapList() {\r\n return engine.scrollSnaps.map(engine.scrollProgress.get);\r\n }\r\n\r\n function scrollProgress() {\r\n return engine.scrollProgress.get(engine.location.get());\r\n }\r\n\r\n function selectedScrollSnap() {\r\n return engine.index.get();\r\n }\r\n\r\n function previousScrollSnap() {\r\n return engine.indexPrevious.get();\r\n }\r\n\r\n function clickAllowed() {\r\n return engine.dragHandler.clickAllowed();\r\n }\r\n\r\n function dangerouslyGetEngine() {\r\n return engine;\r\n }\r\n\r\n function rootNode() {\r\n return sliderRoot;\r\n }\r\n\r\n function containerNode() {\r\n return container;\r\n }\r\n\r\n function slideNodes() {\r\n return slides;\r\n }\r\n\r\n var self = {\r\n canScrollNext: canScrollNext,\r\n canScrollPrev: canScrollPrev,\r\n clickAllowed: clickAllowed,\r\n containerNode: containerNode,\r\n dangerouslyGetEngine: dangerouslyGetEngine,\r\n destroy: destroy,\r\n off: off,\r\n on: on,\r\n previousScrollSnap: previousScrollSnap,\r\n reInit: reInit,\r\n rootNode: rootNode,\r\n scrollNext: scrollNext,\r\n scrollPrev: scrollPrev,\r\n scrollProgress: scrollProgress,\r\n scrollSnapList: scrollSnapList,\r\n scrollTo: scrollTo,\r\n selectedScrollSnap: selectedScrollSnap,\r\n slideNodes: slideNodes,\r\n slidesInView: slidesInView,\r\n slidesNotInView: slidesNotInView,\r\n };\r\n return self;\r\n }\r\n\r\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = EmblaCarousel;\r\n } else {\r\n window.EmblaCarousel = EmblaCarousel;\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n /**\r\n * Creates an element from a HTML string.\r\n * @param {String} html\r\n * @param {?Boolean} children - Return all children instead of the first one.\r\n * @returns {Node}\r\n */\r\n function toElement(html, children) {\r\n children = children || false;\r\n const elem = document.createElement('div');\r\n\r\n elem.innerHTML = html.trim();\r\n\r\n return children === true ? elem.children : elem.firstChild;\r\n }\r\n\r\n /**\r\n * Validates and converts content.\r\n * @param {Node|String} content\r\n * @returns {Array} content - Validated content.\r\n */\r\n function validateContent(content) {\r\n const isString = typeof content === 'string';\r\n const isHTMLElement = content instanceof HTMLElement === true;\r\n\r\n if (isString === false && isHTMLElement === false) {\r\n throw new Error('Content must be a DOM element/node or string');\r\n }\r\n\r\n if (isString === true) {\r\n // String\r\n return Array.from(toElement(content, true));\r\n } else if (content.tagName === 'TEMPLATE') {\r\n // Template\r\n return [content.content.cloneNode(true)];\r\n } else {\r\n // HTMLElement\r\n return Array.from(content.children);\r\n }\r\n }\r\n\r\n /**\r\n * Validates options and sets defaults for undefined properties.\r\n * @param {?Object} opts\r\n * @returns {Object} opts - Validated options.\r\n */\r\n function validateOptions(opts) {\r\n opts = opts || {};\r\n opts = util.deepExtend({}, opts);\r\n\r\n if (opts.closable == null) opts.closable = true;\r\n if (opts.className == null) opts.className = '';\r\n if (opts.onShow == null) opts.onShow = function () {};\r\n if (opts.onClose == null) opts.onClose = function () {};\r\n\r\n if (opts.closable) {\r\n opts.className += ' basicLightbox--closable';\r\n }\r\n\r\n if (typeof opts.closable !== 'boolean')\r\n throw new Error('Property `closable` must be a boolean');\r\n if (typeof opts.className !== 'string')\r\n throw new Error('Property `className` must be a string');\r\n if (typeof opts.onShow !== 'function')\r\n throw new Error('Property `onShow` must be a function');\r\n if (typeof opts.onClose !== 'function')\r\n throw new Error('Property `onClose` must be a function');\r\n\r\n return opts;\r\n }\r\n\r\n /**\r\n * Checks if an element's first child has a specific tag.\r\n * @param {Node} elem\r\n * @param {String} tag\r\n * @returns {Boolean} containsTag\r\n */\r\n function containsTag(elem, tag) {\r\n const children = elem.children;\r\n\r\n return children.length === 1 && children[0].tagName === tag;\r\n }\r\n\r\n /**\r\n * Checks if a given or any lightbox is visible.\r\n * @param {?Node} elem\r\n * @returns {Boolean} visible\r\n */\r\n function visible(elem) {\r\n elem = elem || document.querySelector('.basicLightbox');\r\n\r\n return elem != null && elem.ownerDocument.body.contains(elem) === true;\r\n }\r\n\r\n /**\r\n * Creates a lightbox element.\r\n * @param {Array} content\r\n * @param {Object} opts\r\n * @returns {Node} elem\r\n */\r\n function render(content, opts) {\r\n let elemHtml = '
';\r\n\r\n const elem = toElement(elemHtml);\r\n const placeholder = elem.querySelector('.basicLightbox__placeholder');\r\n\r\n // Move content into lightbox placeholder\r\n content.forEach(function (child) {\r\n placeholder.appendChild(child);\r\n });\r\n\r\n // Check if placeholder contains a tag that requires a special treatment\r\n const img = opts.type === 'image' || containsTag(placeholder, 'IMG');\r\n const video = opts.type === 'video' || containsTag(placeholder, 'VIDEO');\r\n const iframe = opts.type === 'iframe' || containsTag(placeholder, 'IFRAME');\r\n\r\n // Add special treatment class when it only contains an image, a video or iframe.\r\n // This class is necessary to center the image, video or iframe.\r\n if (img === true) elem.classList.add('basicLightbox--img');\r\n if (video === true) elem.classList.add('basicLightbox--video');\r\n if (iframe === true) elem.classList.add('basicLightbox--iframe');\r\n\r\n return elem;\r\n }\r\n\r\n /**\r\n * Shows a lightbox by appending an element to the DOM.\r\n * @param {Node} elem\r\n * @param {Function} next - The callback that gets executed when the lightbox starts to show up.\r\n * @returns {Boolean} success\r\n */\r\n function show(elem, next) {\r\n document.body.appendChild(elem);\r\n\r\n // Wait a while to ensure that the class change triggers the animation\r\n setTimeout(function () {\r\n requestAnimationFrame(function () {\r\n elem.classList.add('basicLightbox--visible');\r\n\r\n return next();\r\n });\r\n }, 10);\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Closes a lightbox by fading the element out and by removing the element from the DOM.\r\n * @param {Node} elem\r\n * @param {Function} next - The callback that gets executed when the lightbox is fully closed.\r\n * @returns {Boolean} success\r\n */\r\n function close(elem, next) {\r\n elem.classList.remove('basicLightbox--visible');\r\n\r\n setTimeout(function () {\r\n // Don't continue to remove lightbox when element missing\r\n if (visible(elem) === false) return next();\r\n\r\n elem.parentElement.removeChild(elem);\r\n\r\n return next();\r\n }, 410);\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Creats a new instance.\r\n * @param {Node|String} content\r\n * @param {?Object} opts\r\n * @returns {Object} instance\r\n */\r\n function BasicLightbox(content, opts) {\r\n content = validateContent(content);\r\n opts = validateOptions(opts);\r\n\r\n // Render the lightbox element\r\n const elem = render(content, opts);\r\n\r\n // Returns the lightbox element\r\n function _element() {\r\n return elem;\r\n }\r\n\r\n // Check if the lightbox is attached to the DOM\r\n function _visible() {\r\n return visible(elem);\r\n }\r\n\r\n // Show the lightbox\r\n function _show(next) {\r\n // Run onShow callback and stop execution when function returns false\r\n if (opts.onShow(instance) === false) return false;\r\n\r\n // Show the lightbox\r\n return show(elem, function () {\r\n // Continue with the callback when available\r\n if (typeof next === 'function') return next(instance);\r\n });\r\n }\r\n\r\n // Hide the lightbox\r\n function _close(next) {\r\n // Run onClose callback and stop execution when function returns false\r\n if (opts.onClose(instance) === false) return false;\r\n\r\n return close(elem, function () {\r\n // Continue with the callback when available\r\n if (typeof next === 'function') return next(instance);\r\n });\r\n }\r\n\r\n // Close lightbox when clicking the background\r\n if (opts.closable === true) {\r\n elem.addEventListener('click', function (event) {\r\n // If e.target is not the same element as elem,\r\n // then the user clicked a descendant of the element.\r\n if (event.target !== elem) return;\r\n\r\n // Close lightbox with the instance function\r\n _close();\r\n });\r\n\r\n elem\r\n .querySelector('.basicLightbox__close')\r\n .addEventListener('click', function (event) {\r\n _close();\r\n });\r\n\r\n document.body.addEventListener('keydown', function (event) {\r\n if (event.key === 'Escape') {\r\n _close();\r\n }\r\n });\r\n }\r\n\r\n // Assign instance to a variable so the instance can be used\r\n // elsewhere in the current function.\r\n const instance = {\r\n element: _element,\r\n visible: _visible,\r\n show: _show,\r\n close: _close,\r\n };\r\n\r\n return instance;\r\n }\r\n\r\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = BasicLightbox;\r\n } else {\r\n window.BasicLightbox = BasicLightbox;\r\n }\r\n})();\r\n","/* ========================================================================\r\n Use module pattern to encapsulate JavaScript: http://bit.ly/2jM4ptd\r\n Define custom namespace\r\n ========================================================================== */\r\n\r\nvar app = app || {};\r\n","/* ========================================================================\r\n Cookie popup\r\n ========================================================================== */\r\n\r\nlet ccConfig = null;\r\nlet ccContainer = null;\r\n\r\napp.cookiePopup = (function () {\r\n 'use strict';\r\n\r\n function initConfig() {\r\n ccConfig = {\r\n showConsoleLog: true,\r\n enableDataLayerEvents: true,\r\n position: 'bottom-left',\r\n theme: 'custom',\r\n cookie: {\r\n name: 'cookieconsent_status_v3',\r\n },\r\n content: {\r\n infoLinkHref: '/cookiebeleid/',\r\n infoLinkTarget: '_blank',\r\n },\r\n // blacklistPage: ['/cookiebeleid/'],\r\n\r\n onInitialise: function (state, status) {},\r\n onStatusChange: function (state, status, chosenBefore) {\r\n // DATALAYER\r\n app.dataLayer.pushEvent('cookieConsent', {\r\n consent: state.grantedCategories.join(),\r\n });\r\n },\r\n onPopupOpen: function (state, status) {},\r\n onPopupClose: function (state) {},\r\n };\r\n }\r\n\r\n function loadPopupScript() {\r\n let js = document.createElement('script');\r\n js.id = 'ccPopupScript';\r\n js.defer = 'true';\r\n js.src = ccContainer.dataset.src;\r\n\r\n ccContainer.after(js);\r\n ccContainer.remove();\r\n }\r\n\r\n function open() {\r\n if (typeof ccPopup !== 'undefined') {\r\n ccPopup.open();\r\n }\r\n }\r\n\r\n function init() {\r\n ccContainer = document.getElementById('ccPopup');\r\n\r\n if (!ccContainer) {\r\n console.log('Cookie popup: container is missing!');\r\n return;\r\n }\r\n\r\n initConfig();\r\n loadPopupScript();\r\n }\r\n\r\n // Expose public functions and variables\r\n return {\r\n init: init,\r\n open: open,\r\n };\r\n})();\r\n","/* ========================================================================\n Data Layer (GTM)\n ========================================================================== */\n\napp.dataLayer = (function () {\n 'use strict';\n\n window.dataLayer = window.dataLayer || [];\n\n var init = function () {\n const gtmElements = document.querySelectorAll('a[data-gtm-event]');\n\n gtmElements.forEach((element) => {\n element.addEventListener('click', (e) => {\n let newObject = {};\n let event = element.dataset.gtmEvent ? element.dataset.gtmEvent : '';\n let trackPageUrl = element.dataset.gtmPageUrl ? element.dataset.gtmPageUrl : false;\n let trackDestinationUrl = element.dataset.gtmDestUrl ? element.dataset.gtmDestUrl : false;\n\n if (event !== '') {\n newObject['event'] = event;\n } else {\n return;\n }\n\n if (trackPageUrl) {\n newObject['pageUrl'] = window.location.pathname;\n }\n\n if (trackDestinationUrl) {\n newObject['destinationUrl'] = element.getAttribute('href');\n }\n\n // DATALAYER\n window.dataLayer.push(newObject);\n });\n });\n\n const contentButtons = document.querySelectorAll('.js-content-button');\n const contentLinks = document.querySelectorAll('.js-content-link');\n\n contentButtons.forEach((button) => {\n button.addEventListener('click', (e) => {\n // DATALAYER\n window.dataLayer.push({\n event: 'contentClick',\n pageUrl: window.location.pathname,\n destinationUrl: button.getAttribute('href'),\n });\n });\n });\n\n contentLinks.forEach((link) => {\n link.addEventListener('click', (e) => {\n // DATALAYER\n window.dataLayer.push({\n event: 'contentClick',\n pageUrl: window.location.pathname,\n destinationUrl: link.getAttribute('href'),\n });\n });\n });\n };\n\n var pushEvent = function (eventName, args) {\n if (eventName === '') return;\n\n args = args || {};\n\n let gtmEvent = { event: eventName };\n\n for (const key in args) {\n if (args.hasOwnProperty(key)) {\n gtmEvent[key] = args[key];\n }\n }\n\n // DATALAYER\n window.dataLayer.push(gtmEvent);\n console.log(gtmEvent);\n };\n\n // Expose public functions and variables\n return {\n init: init,\n pushEvent: pushEvent,\n };\n})();\n","/* ========================================================================\r\n FAQ Block\r\n ========================================================================== */\r\n\r\napp.faqBlock = (function () {\r\n 'use strict';\r\n\r\n function init() {\r\n const items = document.querySelectorAll('.js-faqItem');\r\n if (items.length === 0) return;\r\n\r\n items.forEach((item) => {\r\n const link = item.querySelector('.faqBlock__question');\r\n const content = item.querySelector('.faqBlock__answer');\r\n\r\n link.addEventListener('click', (event) => {\r\n event.preventDefault();\r\n\r\n if (item.classList.contains('is-active') === false) {\r\n item.classList.add('is-active');\r\n util.slideDown(content, 250);\r\n\r\n console.log(link);\r\n\r\n // DATALAYER\r\n window.dataLayer.push({\r\n event: 'faqClick',\r\n pageUrl: window.location.pathname,\r\n question: link.innerText,\r\n });\r\n } else {\r\n util.slideUp(content, 250, () => {\r\n item.classList.remove('is-active');\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n // Expose public functions and variables\r\n return {\r\n init: init,\r\n };\r\n})();\r\n","/* ========================================================================\r\n General\r\n ========================================================================== */\r\n\r\napp.general = (function () {\r\n 'use strict';\r\n\r\n function initEmailLinks() {\r\n // Handle base-64 encoded mailto-links\r\n const links = document.querySelectorAll('a[data-email]');\r\n\r\n links.forEach((el) => {\r\n el.addEventListener('click', (event) => {\r\n let email = atob(el.getAttribute('data-email'));\r\n window.location.href = 'mailto:' + email;\r\n });\r\n });\r\n }\r\n\r\n function initLax() {\r\n lax.init();\r\n\r\n // Add a driver that we use to control our animations\r\n lax.addDriver('scrollY', function () {\r\n return window.scrollY;\r\n });\r\n\r\n lax.addElements('.wideImage__image.has-lax', {\r\n scrollY: {\r\n translateY: [\r\n ['elInY', 'elOutY'],\r\n [0, -250],\r\n ],\r\n },\r\n });\r\n }\r\n\r\n function initVideoLinks() {\r\n const links = document.querySelectorAll('.js-showVideo');\r\n\r\n links.forEach((el) => {\r\n el.addEventListener('click', (event) => {\r\n event.preventDefault();\r\n\r\n openVideoLightbox(el.href);\r\n });\r\n });\r\n }\r\n\r\n function openVideoLightbox(videoUrl) {\r\n if (!videoUrl) return;\r\n\r\n if (util.vimeoRegex.test(videoUrl) || util.hasCookieConsent('marketing')) {\r\n var lightbox = new BasicLightbox(\r\n '