{"version":3,"file":"bundle.js","sources":["../../node_modules/compute-scroll-into-view/dist/index.module.js","../../node_modules/scroll-into-view-if-needed/es/index.js","../../node_modules/smooth-scroll-into-view-if-needed/es/index.js","../../src/js/index.js"],"sourcesContent":["function t(t){return\"object\"==typeof t&&null!=t&&1===t.nodeType}function e(t,e){return(!e||\"hidden\"!==t)&&\"visible\"!==t&&\"clip\"!==t}function n(t,n){if(t.clientHeighte||o>t&&l=e&&d>=n?o-t-r:l>e&&dn?l-e+i:0}export default function(e,i){var o=window,l=i.scrollMode,d=i.block,u=i.inline,h=i.boundary,a=i.skipOverflowHiddenElements,c=\"function\"==typeof h?h:function(t){return t!==h};if(!t(e))throw new TypeError(\"Invalid target\");for(var f=document.scrollingElement||document.documentElement,s=[],p=e;t(p)&&c(p);){if((p=p.parentElement)===f){s.push(p);break}null!=p&&p===document.body&&n(p)&&!n(document.documentElement)||null!=p&&n(p,a)&&s.push(p)}for(var m=o.visualViewport?o.visualViewport.width:innerWidth,g=o.visualViewport?o.visualViewport.height:innerHeight,w=window.scrollX||pageXOffset,v=window.scrollY||pageYOffset,W=e.getBoundingClientRect(),b=W.height,H=W.width,y=W.top,E=W.right,M=W.bottom,V=W.left,x=\"start\"===d||\"nearest\"===d?y:\"end\"===d?M:y+b/2,I=\"center\"===u?V+H/2:\"end\"===u?E:V,C=[],T=0;T=0&&V>=0&&M<=g&&E<=m&&y>=R&&M<=Y&&V>=L&&E<=X)return C;var S=getComputedStyle(k),j=parseInt(S.borderLeftWidth,10),q=parseInt(S.borderTopWidth,10),z=parseInt(S.borderRightWidth,10),A=parseInt(S.borderBottomWidth,10),F=0,G=0,J=\"offsetWidth\"in k?k.offsetWidth-k.clientWidth-j-z:0,K=\"offsetHeight\"in k?k.offsetHeight-k.clientHeight-q-A:0;if(f===k)F=\"start\"===d?x:\"end\"===d?x-g:\"nearest\"===d?r(v,v+g,g,q,A,v+x,v+x+b,b):x-g/2,G=\"start\"===u?I:\"center\"===u?I-m/2:\"end\"===u?I-m:r(w,w+m,m,j,z,w+I,w+I+H,H),F=Math.max(0,F+v),G=Math.max(0,G+w);else{F=\"start\"===d?x-R-q:\"end\"===d?x-Y+A+K:\"nearest\"===d?r(R,Y,D,q,A+K,x,x+b,b):x-(R+D/2)+K/2,G=\"start\"===u?I-L-j:\"center\"===u?I-(L+O/2)+J/2:\"end\"===u?I-X+z+J:r(L,X,O,j,z+J,I,I+H,H);var N=k.scrollLeft,P=k.scrollTop;x+=P-(F=Math.max(0,Math.min(P+F,k.scrollHeight-D+K))),I+=N-(G=Math.max(0,Math.min(N+G,k.scrollWidth-O+J)))}C.push({el:k,top:F,left:G})}return C}\n//# sourceMappingURL=index.module.js.map\n","import compute from 'compute-scroll-into-view';\n\nfunction isOptionsObject(options) {\n return options === Object(options) && Object.keys(options).length !== 0;\n}\n\nfunction defaultBehavior(actions, behavior) {\n if (behavior === void 0) {\n behavior = 'auto';\n }\n\n var canSmoothScroll = ('scrollBehavior' in document.body.style);\n actions.forEach(function (_ref) {\n var el = _ref.el,\n top = _ref.top,\n left = _ref.left;\n\n if (el.scroll && canSmoothScroll) {\n el.scroll({\n top: top,\n left: left,\n behavior: behavior\n });\n } else {\n el.scrollTop = top;\n el.scrollLeft = left;\n }\n });\n}\n\nfunction getOptions(options) {\n if (options === false) {\n return {\n block: 'end',\n inline: 'nearest'\n };\n }\n\n if (isOptionsObject(options)) {\n return options;\n }\n\n return {\n block: 'start',\n inline: 'nearest'\n };\n}\n\nfunction scrollIntoView(target, options) {\n var isTargetAttached = target.isConnected || target.ownerDocument.documentElement.contains(target);\n\n if (isOptionsObject(options) && typeof options.behavior === 'function') {\n return options.behavior(isTargetAttached ? compute(target, options) : []);\n }\n\n if (!isTargetAttached) {\n return;\n }\n\n var computeOptions = getOptions(options);\n return defaultBehavior(compute(target, computeOptions), computeOptions.behavior);\n}\n\nexport default scrollIntoView;","import scrollIntoView from 'scroll-into-view-if-needed';\nvar memoizedNow;\n\nvar now = function now() {\n if (!memoizedNow) {\n memoizedNow = 'performance' in window ? performance.now.bind(performance) : Date.now;\n }\n\n return memoizedNow();\n};\n\nfunction step(context) {\n var time = now();\n var elapsed = Math.min((time - context.startTime) / context.duration, 1);\n var value = context.ease(elapsed);\n var currentX = context.startX + (context.x - context.startX) * value;\n var currentY = context.startY + (context.y - context.startY) * value;\n context.method(currentX, currentY);\n\n if (currentX !== context.x || currentY !== context.y) {\n requestAnimationFrame(function () {\n return step(context);\n });\n } else {\n context.cb();\n }\n}\n\nfunction smoothScroll(el, x, y, duration, ease, cb) {\n if (duration === void 0) {\n duration = 600;\n }\n\n if (ease === void 0) {\n ease = function ease(t) {\n return 1 + --t * t * t * t * t;\n };\n }\n\n var scrollable;\n var startX;\n var startY;\n var method;\n scrollable = el;\n startX = el.scrollLeft;\n startY = el.scrollTop;\n\n method = function method(x, y) {\n el.scrollLeft = Math.ceil(x);\n el.scrollTop = Math.ceil(y);\n };\n\n step({\n scrollable: scrollable,\n method: method,\n startTime: now(),\n startX: startX,\n startY: startY,\n x: x,\n y: y,\n duration: duration,\n ease: ease,\n cb: cb\n });\n}\n\nvar shouldSmoothScroll = function shouldSmoothScroll(options) {\n return options && !options.behavior || options.behavior === 'smooth';\n};\n\nfunction scroll(target, options) {\n var overrides = options || {};\n\n if (shouldSmoothScroll(overrides)) {\n return scrollIntoView(target, {\n block: overrides.block,\n inline: overrides.inline,\n scrollMode: overrides.scrollMode,\n boundary: overrides.boundary,\n behavior: function behavior(actions) {\n return Promise.all(actions.reduce(function (results, _ref) {\n var el = _ref.el,\n left = _ref.left,\n top = _ref.top;\n var startLeft = el.scrollLeft;\n var startTop = el.scrollTop;\n\n if (startLeft === left && startTop === top) {\n return results;\n }\n\n return [].concat(results, [new Promise(function (resolve) {\n return smoothScroll(el, left, top, overrides.duration, overrides.ease, function () {\n return resolve({\n el: el,\n left: [startLeft, left],\n top: [startTop, top]\n });\n });\n })]);\n }, []));\n }\n });\n }\n\n return Promise.resolve(scrollIntoView(target, options));\n}\n\nvar smoothScrollIntoView = scroll;\nexport default smoothScrollIntoView;","import Util from './lib/util.js'\nimport scrollIntoView from 'smooth-scroll-into-view-if-needed'\nimport '../style/main.css'\n\nconst Edmonds_Theme = (function () {\n\t'use strict'\n\n\tconst publicAPIs = {}\n\n\tpublicAPIs.init = function (options) {\n\t\t// functions that need to wait for the DOM to load\n\t\tif (document.readyState === 'interactive' || document.readyState === 'complete') {\n\t\t\tconstructorEarly(options)\n\t\t} else {\n\t\t\tdocument.addEventListener('DOMContentLoaded', constructorEarly, options)\n\t\t}\n\n\t\t// functions that need to wait for the DOM and images/stylesheets to load\n\t\tif (document.readyState === 'complete') {\n\t\t\tconstructorLate(options)\n\t\t} else {\n\t\t\twindow.addEventListener('load', constructorLate, options)\n\t\t}\n\t}\n\n\tconst constructorEarly = function () {\n\t\tinitCollapse()\n\t\tinitCarousel()\n\t\tinitRepeater()\n\t\tinitBackToTop()\n\t\tinitDesktopOnlyAnimations()\n\t\tinitScrollIntoViewButtons()\n\t}\n\n\tconst constructorLate = function () {\n\t\tinitMasonry()\n\t\tinitStickyMobileHeader()\n\t}\n\n\tconst initCollapse = function () {\n\t\t// File#: _1_collapse\n\t\t// Usage: codyhouse.co/license\n\t\t(function () {\n\t\t\tvar Collapse = function (element) {\n\t\t\t\tthis.element = element\n\t\t\t\tthis.triggers = document.querySelectorAll('[aria-controls=\"' + this.element.getAttribute('id') + '\"]')\n\t\t\t\tthis.animating = false\n\t\t\t\tinitCollapse(this)\n\t\t\t}\n\n\t\t\tfunction initCollapse (element) {\n\t\t\t\tif (element.triggers) {\n\t\t\t\t\t// set initial 'aria-expanded' attribute for trigger elements\n\t\t\t\t\tupdateTriggers(element, !Util.hasClass(element.element, 'hidden'))\n\n\t\t\t\t\t// detect click on trigger elements\n\t\t\t\t\tfor (var i = 0; i < element.triggers.length; i++) {\n\t\t\t\t\t\telement.triggers[i].addEventListener('click', function (event) {\n\t\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\t\ttoggleVisibility(element)\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// custom event\n\t\t\t\telement.element.addEventListener('collapseToggle', function (event) {\n\t\t\t\t\ttoggleVisibility(element)\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tfunction toggleVisibility (element) {\n\t\t\t\tvar bool = Util.hasClass(element.element, 'hidden')\n\t\t\t\tif (element.animating) return\n\t\t\t\telement.animating = true\n\t\t\t\tanimateElement(element, bool)\n\t\t\t\tupdateTriggers(element, bool)\n\t\t\t}\n\n\t\t\tfunction animateElement (element, bool) {\n\t\t\t\t// bool === true -> show content\n\t\t\t\tif (element.element.getAttribute('data-collapse-animate') !== 'on' || !window.requestAnimationFrame) {\n\t\t\t\t\tUtil.toggleClass(element.element, 'hidden', !bool)\n\t\t\t\t\telement.animating = false\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\t// animate content height\n\t\t\t\tUtil.removeClass(element.element, 'hidden')\n\t\t\t\tvar initHeight = !bool ? element.element.offsetHeight : 0,\n\t\t\t\t\tfinalHeight = !bool ? 0 : element.element.offsetHeight\n\n\t\t\t\tUtil.addClass(element.element, 'overflow-hidden')\n\n\t\t\t\tUtil.setHeight(initHeight, finalHeight, element.element, 200, function () {\n\t\t\t\t\tif (!bool) Util.addClass(element.element, 'hidden')\n\t\t\t\t\telement.element.removeAttribute('style')\n\t\t\t\t\tUtil.removeClass(element.element, 'overflow-hidden')\n\t\t\t\t\telement.animating = false\n\t\t\t\t}, 'easeInOutQuad')\n\t\t\t}\n\n\t\t\tfunction updateTriggers (element, bool) {\n\t\t\t\tfor (var i = 0; i < element.triggers.length; i++) {\n\t\t\t\t\tbool ? element.triggers[i].setAttribute('aria-expanded', 'true') : element.triggers[i].removeAttribute('aria-expanded')\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\twindow.Collapse = Collapse\n\n\t\t\t//initialize the Collapse objects\n\t\t\tvar collapses = document.getElementsByClassName('js-collapse')\n\t\t\tif (collapses.length > 0) {\n\t\t\t\tfor (var i = 0; i < collapses.length; i++) {\n\t\t\t\t\tnew Collapse(collapses[i])\n\t\t\t\t}\n\t\t\t}\n\t\t}())\n\t}\n\n\tconst initCarousel = function () {\n\t\t// File#: _1_swipe-content\n\t\t(function () {\n\t\t\tvar SwipeContent = function (element) {\n\t\t\t\tthis.element = element\n\t\t\t\tthis.delta = [false, false]\n\t\t\t\tthis.dragging = false\n\t\t\t\tthis.intervalId = false\n\t\t\t\tinitSwipeContent(this)\n\t\t\t}\n\n\t\t\tfunction initSwipeContent (content) {\n\t\t\t\tcontent.element.addEventListener('mousedown', handleEvent.bind(content))\n\t\t\t\tcontent.element.addEventListener('touchstart', handleEvent.bind(content), { passive: true })\n\t\t\t}\n\n\t\t\tfunction initDragging (content) {\n\t\t\t\t//add event listeners\n\t\t\t\tcontent.element.addEventListener('mousemove', handleEvent.bind(content))\n\t\t\t\tcontent.element.addEventListener('touchmove', handleEvent.bind(content), { passive: true })\n\t\t\t\tcontent.element.addEventListener('mouseup', handleEvent.bind(content))\n\t\t\t\tcontent.element.addEventListener('mouseleave', handleEvent.bind(content))\n\t\t\t\tcontent.element.addEventListener('touchend', handleEvent.bind(content))\n\t\t\t}\n\n\t\t\tfunction cancelDragging (content) {\n\t\t\t\t//remove event listeners\n\t\t\t\tif (content.intervalId) {\n\t\t\t\t\t(!window.requestAnimationFrame) ? clearInterval(content.intervalId) : window.cancelAnimationFrame(content.intervalId)\n\t\t\t\t\tcontent.intervalId = false\n\t\t\t\t}\n\t\t\t\tcontent.element.removeEventListener('mousemove', handleEvent.bind(content))\n\t\t\t\tcontent.element.removeEventListener('touchmove', handleEvent.bind(content))\n\t\t\t\tcontent.element.removeEventListener('mouseup', handleEvent.bind(content))\n\t\t\t\tcontent.element.removeEventListener('mouseleave', handleEvent.bind(content))\n\t\t\t\tcontent.element.removeEventListener('touchend', handleEvent.bind(content))\n\t\t\t}\n\n\t\t\tfunction handleEvent (event) {\n\t\t\t\tswitch (event.type) {\n\t\t\t\t\tcase 'mousedown':\n\t\t\t\t\tcase 'touchstart':\n\t\t\t\t\t\tstartDrag(this, event)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'mousemove':\n\t\t\t\t\tcase 'touchmove':\n\t\t\t\t\t\tdrag(this, event)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'mouseup':\n\t\t\t\t\tcase 'mouseleave':\n\t\t\t\t\tcase 'touchend':\n\t\t\t\t\t\tendDrag(this, event)\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction startDrag (content, event) {\n\t\t\t\tcontent.dragging = true\n\t\t\t\t// listen to drag movements\n\t\t\t\tinitDragging(content)\n\t\t\t\tcontent.delta = [parseInt(unify(event).clientX), parseInt(unify(event).clientY)]\n\t\t\t\t// emit drag start event\n\t\t\t\temitSwipeEvents(content, 'dragStart', content.delta, event.target)\n\t\t\t}\n\n\t\t\tfunction endDrag (content, event) {\n\t\t\t\tcancelDragging(content)\n\t\t\t\t// credits: https://css-tricks.com/simple-swipe-with-vanilla-javascript/\n\t\t\t\tvar dx = parseInt(unify(event).clientX),\n\t\t\t\t\tdy = parseInt(unify(event).clientY)\n\n\t\t\t\t// check if there was a left/right swipe\n\t\t\t\tif (content.delta && (content.delta[0] || content.delta[0] === 0)) {\n\t\t\t\t\tvar s = getSign(dx - content.delta[0])\n\n\t\t\t\t\tif (Math.abs(dx - content.delta[0]) > 30) {\n\t\t\t\t\t\t(s < 0) ? emitSwipeEvents(content, 'swipeLeft', [dx, dy]) : emitSwipeEvents(content, 'swipeRight', [dx, dy])\n\t\t\t\t\t}\n\n\t\t\t\t\tcontent.delta[0] = false\n\t\t\t\t}\n\t\t\t\t// check if there was a top/bottom swipe\n\t\t\t\tif (content.delta && (content.delta[1] || content.delta[1] === 0)) {\n\t\t\t\t\tvar y = getSign(dy - content.delta[1])\n\n\t\t\t\t\tif (Math.abs(dy - content.delta[1]) > 30) {\n\t\t\t\t\t\t(y < 0) ? emitSwipeEvents(content, 'swipeUp', [dx, dy]) : emitSwipeEvents(content, 'swipeDown', [dx, dy])\n\t\t\t\t\t}\n\n\t\t\t\t\tcontent.delta[1] = false\n\t\t\t\t}\n\t\t\t\t// emit drag end event\n\t\t\t\temitSwipeEvents(content, 'dragEnd', [dx, dy])\n\t\t\t\tcontent.dragging = false\n\t\t\t}\n\n\t\t\tfunction drag (content, event) {\n\t\t\t\tif (!content.dragging) return;\n\t\t\t\t// emit dragging event with coordinates\n\t\t\t\t(!window.requestAnimationFrame)\n\t\t\t\t\t? content.intervalId = setTimeout(function () {emitDrag.bind(content, event)}, 250)\n\t\t\t\t\t: content.intervalId = window.requestAnimationFrame(emitDrag.bind(content, event))\n\t\t\t}\n\n\t\t\tfunction emitDrag (event) {\n\t\t\t\temitSwipeEvents(this, 'dragging', [parseInt(unify(event).clientX), parseInt(unify(event).clientY)])\n\t\t\t}\n\n\t\t\tfunction unify (event) {\n\t\t\t\t// unify mouse and touch events\n\t\t\t\treturn event.changedTouches ? event.changedTouches[0] : event\n\t\t\t}\n\n\t\t\tfunction emitSwipeEvents (content, eventName, detail, el) {\n\t\t\t\tvar trigger = false\n\t\t\t\tif (el) trigger = el\n\t\t\t\t// emit event with coordinates\n\t\t\t\tvar event = new CustomEvent(eventName, { detail: { x: detail[0], y: detail[1], origin: trigger } })\n\t\t\t\tcontent.element.dispatchEvent(event)\n\t\t\t}\n\n\t\t\tfunction getSign (x) {\n\t\t\t\tif (!Math.sign) {\n\t\t\t\t\treturn ((x > 0) - (x < 0)) || +x\n\t\t\t\t} else {\n\t\t\t\t\treturn Math.sign(x)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twindow.SwipeContent = SwipeContent\n\n\t\t\t//initialize the SwipeContent objects\n\t\t\tvar swipe = document.getElementsByClassName('js-swipe-content')\n\t\t\tif (swipe.length > 0) {\n\t\t\t\tfor (var i = 0; i < swipe.length; i++) {\n\t\t\t\t\t(function (i) {new SwipeContent(swipe[i])})(i)\n\t\t\t\t}\n\t\t\t}\n\t\t}());\n\n\t\t// File#: _2_carousel\n\t\t// Usage: codyhouse.co/license\n\t\t(function () {\n\t\t\tvar Carousel = function (opts) {\n\t\t\t\tthis.options = Util.extend(Carousel.defaults, opts)\n\t\t\t\tthis.element = this.options.element\n\t\t\t\tthis.listWrapper = this.element.getElementsByClassName('carousel__wrapper')[0]\n\t\t\t\tthis.list = this.element.getElementsByClassName('carousel__list')[0]\n\t\t\t\tthis.items = this.element.getElementsByClassName('carousel__item')\n\t\t\t\tthis.initItems = [] // store only the original elements - will need this for cloning\n\t\t\t\tthis.itemsNb = this.items.length //original number of items\n\t\t\t\tthis.visibItemsNb = 1 // tot number of visible items\n\t\t\t\tthis.itemsWidth = 1 // this will be updated with the right width of items\n\t\t\t\tthis.itemOriginalWidth = false // store the initial width to use it on resize\n\t\t\t\tthis.selectedItem = 0 // index of first visible item\n\t\t\t\tthis.translateContainer = 0 // this will be the amount the container has to be translated each time a new group has to be shown (negative)\n\t\t\t\tthis.containerWidth = 0 // this will be used to store the total width of the carousel (including the overflowing part)\n\t\t\t\tthis.ariaLive = false\n\t\t\t\t// navigation\n\t\t\t\tthis.controls = this.element.getElementsByClassName('js-carousel__control')\n\t\t\t\tthis.animating = false\n\t\t\t\t// autoplay\n\t\t\t\tthis.autoplayId = false\n\t\t\t\tthis.autoplayPaused = false\n\t\t\t\t//drag\n\t\t\t\tthis.dragStart = false\n\t\t\t\t// resize\n\t\t\t\tthis.resizeId = false\n\t\t\t\t// used to re-initialize js\n\t\t\t\tthis.cloneList = []\n\t\t\t\t// store items min-width\n\t\t\t\tthis.itemAutoSize = false\n\t\t\t\t// store translate value (loop = off)\n\t\t\t\tthis.totTranslate = 0\n\t\t\t\t// modify loop option if navigation is on\n\t\t\t\tif (this.options.nav) this.options.loop = false\n\t\t\t\t// store counter elements (if present)\n\t\t\t\tthis.counter = this.element.getElementsByClassName('js-carousel__counter')\n\t\t\t\tthis.counterTor = this.element.getElementsByClassName('js-carousel__counter-tot')\n\t\t\t\tinitCarouselLayout(this) // get number visible items + width items\n\t\t\t\tsetItemsWidth(this, true)\n\t\t\t\tinsertBefore(this, this.visibItemsNb) // insert clones before visible elements\n\t\t\t\tupdateCarouselClones(this) // insert clones after visible elements\n\t\t\t\tresetItemsTabIndex(this) // make sure not visible items are not focusable\n\t\t\t\tinitAriaLive(this) // set aria-live region for SR\n\t\t\t\tinitCarouselEvents(this) // listen to events\n\t\t\t\tinitCarouselCounter(this)\n\t\t\t\tUtil.addClass(this.element, 'carousel--loaded')\n\t\t\t}\n\n\t\t\t//public carousel functions\n\t\t\tCarousel.prototype.showNext = function () {\n\t\t\t\tshowNextItems(this)\n\t\t\t}\n\n\t\t\tCarousel.prototype.showPrev = function () {\n\t\t\t\tshowPrevItems(this)\n\t\t\t}\n\n\t\t\tCarousel.prototype.startAutoplay = function () {\n\t\t\t\tstartAutoplay(this)\n\t\t\t}\n\n\t\t\tCarousel.prototype.pauseAutoplay = function () {\n\t\t\t\tpauseAutoplay(this)\n\t\t\t}\n\n\t\t\t//private carousel functions\n\t\t\tfunction initCarouselLayout (carousel) {\n\t\t\t\t// evaluate size of single elements + number of visible elements\n\t\t\t\tvar itemStyle = window.getComputedStyle(carousel.items[0]),\n\t\t\t\t\tcontainerStyle = window.getComputedStyle(carousel.listWrapper),\n\t\t\t\t\titemWidth = parseFloat(itemStyle.getPropertyValue('width')),\n\t\t\t\t\titemMargin = parseFloat(itemStyle.getPropertyValue('margin-right')),\n\t\t\t\t\tcontainerPadding = parseFloat(containerStyle.getPropertyValue('padding-left')),\n\t\t\t\t\tcontainerWidth = parseFloat(containerStyle.getPropertyValue('width'))\n\n\t\t\t\tif (!carousel.itemAutoSize) {\n\t\t\t\t\tcarousel.itemAutoSize = itemWidth\n\t\t\t\t}\n\n\t\t\t\t// if carousel.listWrapper is hidden -> make sure to retrieve the proper width\n\t\t\t\tcontainerWidth = getCarouselWidth(carousel, containerWidth)\n\n\t\t\t\tif (!carousel.itemOriginalWidth) { // on resize -> use initial width of items to recalculate\n\t\t\t\t\tcarousel.itemOriginalWidth = itemWidth\n\t\t\t\t} else {\n\t\t\t\t\titemWidth = carousel.itemOriginalWidth\n\t\t\t\t}\n\n\t\t\t\tif (carousel.itemAutoSize) {\n\t\t\t\t\tcarousel.itemOriginalWidth = parseInt(carousel.itemAutoSize)\n\t\t\t\t\titemWidth = carousel.itemOriginalWidth\n\t\t\t\t}\n\t\t\t\t// make sure itemWidth is smaller than container width\n\t\t\t\tif (containerWidth < itemWidth) {\n\t\t\t\t\tcarousel.itemOriginalWidth = containerWidth\n\t\t\t\t\titemWidth = carousel.itemOriginalWidth\n\t\t\t\t}\n\t\t\t\t// get proper width of elements\n\t\t\t\tcarousel.visibItemsNb = parseInt((containerWidth - 2 * containerPadding + itemMargin) / (itemWidth + itemMargin))\n\t\t\t\tcarousel.itemsWidth = parseFloat((((containerWidth - 2 * containerPadding + itemMargin) / carousel.visibItemsNb) - itemMargin).toFixed(1))\n\t\t\t\tcarousel.containerWidth = (carousel.itemsWidth + itemMargin) * carousel.items.length\n\t\t\t\tcarousel.translateContainer = 0 - ((carousel.itemsWidth + itemMargin) * carousel.visibItemsNb)\n\t\t\t\t// flexbox fallback\n\t\t\t\tif (!flexSupported) carousel.list.style.width = (carousel.itemsWidth + itemMargin) * carousel.visibItemsNb * 3 + 'px'\n\n\t\t\t\t// this is used when loop == off\n\t\t\t\tcarousel.totTranslate = 0 - carousel.selectedItem * (carousel.itemsWidth + itemMargin)\n\t\t\t\tif (carousel.items.length <= carousel.visibItemsNb) carousel.totTranslate = 0\n\n\t\t\t\tcenterItems(carousel) // center items if carousel.items.length < visibItemsNb\n\t\t\t\talignControls(carousel) // check if controls need to be aligned to a different element\n\t\t\t}\n\n\t\t\tfunction setItemsWidth (carousel, bool) {\n\t\t\t\tfor (var i = 0; i < carousel.items.length; i++) {\n\t\t\t\t\tcarousel.items[i].style.width = carousel.itemsWidth + 'px'\n\t\t\t\t\tif (bool) carousel.initItems.push(carousel.items[i])\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction updateCarouselClones (carousel) {\n\t\t\t\tif (!carousel.options.loop) return\n\t\t\t\t// take care of clones after visible items (needs to run after the update of clones before visible items)\n\t\t\t\tif (carousel.items.length < carousel.visibItemsNb * 3) {\n\t\t\t\t\tinsertAfter(carousel, carousel.visibItemsNb * 3 - carousel.items.length, carousel.items.length - carousel.visibItemsNb * 2)\n\t\t\t\t} else\n\t\t\t\t\tif (carousel.items.length > carousel.visibItemsNb * 3) {\n\t\t\t\t\t\tremoveClones(carousel, carousel.visibItemsNb * 3, carousel.items.length - carousel.visibItemsNb * 3)\n\t\t\t\t\t}\n\t\t\t\t// set proper translate value for the container\n\t\t\t\tsetTranslate(carousel, 'translateX(' + carousel.translateContainer + 'px)')\n\t\t\t}\n\n\t\t\tfunction initCarouselEvents (carousel) {\n\t\t\t\t// listen for click on previous/next arrow\n\t\t\t\t// dots navigation\n\t\t\t\tif (carousel.options.nav) {\n\t\t\t\t\tcarouselCreateNavigation(carousel)\n\t\t\t\t\tcarouselInitNavigationEvents(carousel)\n\t\t\t\t}\n\n\t\t\t\tif (carousel.controls.length > 0) {\n\t\t\t\t\tcarousel.controls[0].addEventListener('click', function (event) {\n\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\tshowPrevItems(carousel)\n\t\t\t\t\t\tupdateAriaLive(carousel)\n\t\t\t\t\t})\n\t\t\t\t\tcarousel.controls[1].addEventListener('click', function (event) {\n\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\tshowNextItems(carousel)\n\t\t\t\t\t\tupdateAriaLive(carousel)\n\t\t\t\t\t})\n\n\t\t\t\t\t// update arrow visility -> loop == off only\n\t\t\t\t\tresetCarouselControls(carousel)\n\t\t\t\t\t// emit custom event - items visible\n\t\t\t\t\temitCarouselActiveItemsEvent(carousel)\n\t\t\t\t}\n\t\t\t\t// autoplay\n\t\t\t\tif (carousel.options.autoplay) {\n\t\t\t\t\tstartAutoplay(carousel)\n\t\t\t\t\t// pause autoplay if user is interacting with the carousel\n\t\t\t\t\tif (!carousel.options.autoplayOnHover) {\n\t\t\t\t\t\tcarousel.element.addEventListener('mouseenter', function (event) {\n\t\t\t\t\t\t\tpauseAutoplay(carousel)\n\t\t\t\t\t\t\tcarousel.autoplayPaused = true\n\t\t\t\t\t\t})\n\t\t\t\t\t\tcarousel.element.addEventListener('mouseleave', function (event) {\n\t\t\t\t\t\t\tcarousel.autoplayPaused = false\n\t\t\t\t\t\t\tstartAutoplay(carousel)\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tif (!carousel.options.autoplayOnFocus) {\n\t\t\t\t\t\tcarousel.element.addEventListener('focusin', function (event) {\n\t\t\t\t\t\t\tpauseAutoplay(carousel)\n\t\t\t\t\t\t\tcarousel.autoplayPaused = true\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tcarousel.element.addEventListener('focusout', function (event) {\n\t\t\t\t\t\t\tcarousel.autoplayPaused = false\n\t\t\t\t\t\t\tstartAutoplay(carousel)\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// drag events\n\t\t\t\tif (carousel.options.drag && window.requestAnimationFrame) {\n\t\t\t\t\t//init dragging\n\t\t\t\t\tnew SwipeContent(carousel.element)\n\t\t\t\t\tcarousel.element.addEventListener('dragStart', function (event) {\n\t\t\t\t\t\tif (event.detail.origin && event.detail.origin.closest('.js-carousel__control')) return\n\t\t\t\t\t\tif (event.detail.origin && event.detail.origin.closest('.js-carousel__navigation')) return\n\t\t\t\t\t\tif (event.detail.origin && !event.detail.origin.closest('.carousel__wrapper')) return\n\t\t\t\t\t\tUtil.addClass(carousel.element, 'carousel--is-dragging')\n\t\t\t\t\t\tpauseAutoplay(carousel)\n\t\t\t\t\t\tcarousel.dragStart = event.detail.x\n\t\t\t\t\t\tanimateDragEnd(carousel)\n\t\t\t\t\t})\n\t\t\t\t\tcarousel.element.addEventListener('dragging', function (event) {\n\t\t\t\t\t\tif (!carousel.dragStart) return\n\t\t\t\t\t\tif (carousel.animating || Math.abs(event.detail.x - carousel.dragStart) < 10) return\n\t\t\t\t\t\tvar translate = event.detail.x - carousel.dragStart + carousel.translateContainer\n\t\t\t\t\t\tif (!carousel.options.loop) {\n\t\t\t\t\t\t\ttranslate = event.detail.x - carousel.dragStart + carousel.totTranslate\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetTranslate(carousel, 'translateX(' + translate + 'px)')\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\t// reset on resize\n\t\t\t\twindow.addEventListener('resize', function (event) {\n\t\t\t\t\tpauseAutoplay(carousel)\n\t\t\t\t\tclearTimeout(carousel.resizeId)\n\t\t\t\t\tcarousel.resizeId = setTimeout(function () {\n\t\t\t\t\t\tresetCarouselResize(carousel)\n\t\t\t\t\t\t// reset dots navigation\n\t\t\t\t\t\tresetDotsNavigation(carousel)\n\t\t\t\t\t\tresetCarouselControls(carousel)\n\t\t\t\t\t\tsetCounterItem(carousel)\n\t\t\t\t\t\tstartAutoplay(carousel)\n\t\t\t\t\t\tcenterItems(carousel) // center items if carousel.items.length < visibItemsNb\n\t\t\t\t\t\talignControls(carousel)\n\t\t\t\t\t\t// emit custom event - items visible\n\t\t\t\t\t\temitCarouselActiveItemsEvent(carousel)\n\t\t\t\t\t}, 250)\n\t\t\t\t})\n\t\t\t\t// keyboard navigation\n\t\t\t\tcarousel.element.addEventListener('keydown', function (event) {\n\t\t\t\t\tif (event.keyCode && event.keyCode == 39 || event.key && event.key.toLowerCase() == 'arrowright') {\n\t\t\t\t\t\tcarousel.showNext()\n\t\t\t\t\t} else\n\t\t\t\t\t\tif (event.keyCode && event.keyCode == 37 || event.key && event.key.toLowerCase() == 'arrowleft') {\n\t\t\t\t\t\t\tcarousel.showPrev()\n\t\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tfunction showPrevItems (carousel) {\n\t\t\t\tif (carousel.animating) return\n\t\t\t\tcarousel.animating = true\n\t\t\t\tcarousel.selectedItem = getIndex(carousel, carousel.selectedItem - carousel.visibItemsNb)\n\t\t\t\tanimateList(carousel, '0', 'prev')\n\t\t\t}\n\n\t\t\tfunction showNextItems (carousel) {\n\t\t\t\tif (carousel.animating) return\n\t\t\t\tcarousel.animating = true\n\t\t\t\tcarousel.selectedItem = getIndex(carousel, carousel.selectedItem + carousel.visibItemsNb)\n\t\t\t\tanimateList(carousel, carousel.translateContainer * 2 + 'px', 'next')\n\t\t\t}\n\n\t\t\tfunction animateDragEnd (carousel) { // end-of-dragging animation\n\t\t\t\tcarousel.element.addEventListener('dragEnd', function cb (event) {\n\t\t\t\t\tcarousel.element.removeEventListener('dragEnd', cb)\n\t\t\t\t\tUtil.removeClass(carousel.element, 'carousel--is-dragging')\n\t\t\t\t\tif (event.detail.x - carousel.dragStart < -40) {\n\t\t\t\t\t\tcarousel.animating = false\n\t\t\t\t\t\tshowNextItems(carousel)\n\t\t\t\t\t} else\n\t\t\t\t\t\tif (event.detail.x - carousel.dragStart > 40) {\n\t\t\t\t\t\t\tcarousel.animating = false\n\t\t\t\t\t\t\tshowPrevItems(carousel)\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tif (event.detail.x - carousel.dragStart == 0) { // this is just a click -> no dragging\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t} else { // not dragged enought -> do not update carousel, just reset\n\t\t\t\t\t\t\t\tcarousel.animating = true\n\t\t\t\t\t\t\t\tanimateList(carousel, carousel.translateContainer + 'px', false)\n\t\t\t\t\t\t\t}\n\t\t\t\t\tcarousel.dragStart = false\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tfunction animateList (carousel, translate, direction) { // takes care of changing visible items\n\t\t\t\tpauseAutoplay(carousel)\n\t\t\t\tUtil.addClass(carousel.list, 'carousel__list--animating')\n\t\t\t\tvar initTranslate = carousel.totTranslate\n\t\t\t\tif (!carousel.options.loop) {\n\t\t\t\t\ttranslate = noLoopTranslateValue(carousel, direction)\n\t\t\t\t}\n\t\t\t\tsetTimeout(function () {setTranslate(carousel, 'translateX(' + translate + ')')})\n\t\t\t\tif (transitionSupported) {\n\t\t\t\t\tcarousel.list.addEventListener('transitionend', function cb (event) {\n\t\t\t\t\t\tif (event.propertyName && event.propertyName != 'transform') return\n\t\t\t\t\t\tUtil.removeClass(carousel.list, 'carousel__list--animating')\n\t\t\t\t\t\tcarousel.list.removeEventListener('transitionend', cb)\n\t\t\t\t\t\tanimateListCb(carousel, direction)\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tanimateListCb(carousel, direction)\n\t\t\t\t}\n\t\t\t\tif (!carousel.options.loop && (initTranslate == carousel.totTranslate)) {\n\t\t\t\t\t// translate value was not updated -> trigger transitionend event to restart carousel\n\t\t\t\t\tcarousel.list.dispatchEvent(new CustomEvent('transitionend'))\n\t\t\t\t}\n\t\t\t\tresetCarouselControls(carousel)\n\t\t\t\tsetCounterItem(carousel)\n\t\t\t\t// emit custom event - items visible\n\t\t\t\temitCarouselActiveItemsEvent(carousel)\n\t\t\t}\n\n\t\t\tfunction noLoopTranslateValue (carousel, direction) {\n\t\t\t\tvar translate = carousel.totTranslate\n\t\t\t\tif (direction == 'next') {\n\t\t\t\t\ttranslate = carousel.totTranslate + carousel.translateContainer\n\t\t\t\t} else\n\t\t\t\t\tif (direction == 'prev') {\n\t\t\t\t\t\ttranslate = carousel.totTranslate - carousel.translateContainer\n\t\t\t\t\t} else\n\t\t\t\t\t\tif (direction == 'click') {\n\t\t\t\t\t\t\ttranslate = carousel.selectedDotIndex * carousel.translateContainer\n\t\t\t\t\t\t}\n\t\t\t\tif (translate > 0) {\n\t\t\t\t\ttranslate = 0\n\t\t\t\t\tcarousel.selectedItem = 0\n\t\t\t\t}\n\t\t\t\tif (translate < -carousel.translateContainer - carousel.containerWidth) {\n\t\t\t\t\ttranslate = -carousel.translateContainer - carousel.containerWidth\n\t\t\t\t\tcarousel.selectedItem = carousel.items.length - carousel.visibItemsNb\n\t\t\t\t}\n\t\t\t\tif (carousel.visibItemsNb > carousel.items.length) translate = 0\n\t\t\t\tcarousel.totTranslate = translate\n\t\t\t\treturn translate + 'px'\n\t\t\t}\n\n\t\t\tfunction animateListCb (carousel, direction) { // reset actions after carousel has been updated\n\t\t\t\tif (direction) updateClones(carousel, direction)\n\t\t\t\tcarousel.animating = false\n\t\t\t\t// reset autoplay\n\t\t\t\tstartAutoplay(carousel)\n\t\t\t\t// reset tab index\n\t\t\t\tresetItemsTabIndex(carousel)\n\t\t\t}\n\n\t\t\tfunction updateClones (carousel, direction) {\n\t\t\t\tif (!carousel.options.loop) return\n\t\t\t\t// at the end of each animation, we need to update the clones before and after the visible items\n\t\t\t\tvar index = (direction == 'next') ? 0 : carousel.items.length - carousel.visibItemsNb\n\t\t\t\t// remove clones you do not need anymore\n\t\t\t\tremoveClones(carousel, index, false);\n\t\t\t\t// add new clones\n\t\t\t\t(direction == 'next') ? insertAfter(carousel, carousel.visibItemsNb, 0) : insertBefore(carousel, carousel.visibItemsNb)\n\t\t\t\t//reset transform\n\t\t\t\tsetTranslate(carousel, 'translateX(' + carousel.translateContainer + 'px)')\n\t\t\t}\n\n\t\t\tfunction insertBefore (carousel, nb, delta) {\n\t\t\t\tif (!carousel.options.loop) return\n\t\t\t\tvar clones = document.createDocumentFragment()\n\t\t\t\tvar start = 0\n\t\t\t\tif (delta) start = delta\n\t\t\t\tfor (var i = start; i < nb; i++) {\n\t\t\t\t\tvar index = getIndex(carousel, carousel.selectedItem - i - 1),\n\t\t\t\t\t\tclone = carousel.initItems[index].cloneNode(true)\n\t\t\t\t\tUtil.addClass(clone, 'js-clone')\n\t\t\t\t\tclones.insertBefore(clone, clones.firstChild)\n\t\t\t\t}\n\t\t\t\tcarousel.list.insertBefore(clones, carousel.list.firstChild)\n\t\t\t\temitCarouselUpdateEvent(carousel)\n\t\t\t}\n\n\t\t\tfunction insertAfter (carousel, nb, init) {\n\t\t\t\tif (!carousel.options.loop) return\n\t\t\t\tvar clones = document.createDocumentFragment()\n\t\t\t\tfor (var i = init; i < nb + init; i++) {\n\t\t\t\t\tvar index = getIndex(carousel, carousel.selectedItem + carousel.visibItemsNb + i),\n\t\t\t\t\t\tclone = carousel.initItems[index].cloneNode(true)\n\t\t\t\t\tUtil.addClass(clone, 'js-clone')\n\t\t\t\t\tclones.appendChild(clone)\n\t\t\t\t}\n\t\t\t\tcarousel.list.appendChild(clones)\n\t\t\t\temitCarouselUpdateEvent(carousel)\n\t\t\t}\n\n\t\t\tfunction removeClones (carousel, index, bool) {\n\t\t\t\tif (!carousel.options.loop) return\n\t\t\t\tif (!bool) {\n\t\t\t\t\tbool = carousel.visibItemsNb\n\t\t\t\t}\n\t\t\t\tfor (var i = 0; i < bool; i++) {\n\t\t\t\t\tif (carousel.items[index]) carousel.list.removeChild(carousel.items[index])\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction resetCarouselResize (carousel) { // reset carousel on resize\n\t\t\t\tvar visibleItems = carousel.visibItemsNb\n\t\t\t\t// get new items min-width value\n\t\t\t\tresetItemAutoSize(carousel)\n\t\t\t\tinitCarouselLayout(carousel)\n\t\t\t\tsetItemsWidth(carousel, false)\n\t\t\t\tresetItemsWidth(carousel) // update the array of original items -> array used to create clones\n\t\t\t\tif (carousel.options.loop) {\n\t\t\t\t\tif (visibleItems > carousel.visibItemsNb) {\n\t\t\t\t\t\tremoveClones(carousel, 0, visibleItems - carousel.visibItemsNb)\n\t\t\t\t\t} else\n\t\t\t\t\t\tif (visibleItems < carousel.visibItemsNb) {\n\t\t\t\t\t\t\tinsertBefore(carousel, carousel.visibItemsNb, visibleItems)\n\t\t\t\t\t\t}\n\t\t\t\t\tupdateCarouselClones(carousel) // this will take care of translate + after elements\n\t\t\t\t} else {\n\t\t\t\t\t// reset default translate to a multiple value of (itemWidth + margin)\n\t\t\t\t\tvar translate = noLoopTranslateValue(carousel)\n\t\t\t\t\tsetTranslate(carousel, 'translateX(' + translate + ')')\n\t\t\t\t}\n\t\t\t\tresetItemsTabIndex(carousel) // reset focusable elements\n\t\t\t}\n\n\t\t\tfunction resetItemAutoSize (carousel) {\n\t\t\t\tif (!cssPropertiesSupported) return\n\t\t\t\t// remove inline style\n\t\t\t\tcarousel.items[0].removeAttribute('style')\n\t\t\t\t// get original item width\n\t\t\t\tcarousel.itemAutoSize = getComputedStyle(carousel.items[0]).getPropertyValue('width')\n\t\t\t}\n\n\t\t\tfunction resetItemsWidth (carousel) {\n\t\t\t\tfor (var i = 0; i < carousel.initItems.length; i++) {\n\t\t\t\t\tcarousel.initItems[i].style.width = carousel.itemsWidth + 'px'\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction resetItemsTabIndex (carousel) {\n\t\t\t\tvar carouselActive = carousel.items.length > carousel.visibItemsNb\n\t\t\t\tvar j = carousel.items.length\n\t\t\t\tfor (var i = 0; i < carousel.items.length; i++) {\n\t\t\t\t\tif (carousel.options.loop) {\n\t\t\t\t\t\tif (i < carousel.visibItemsNb || i >= 2 * carousel.visibItemsNb) {\n\t\t\t\t\t\t\tcarousel.items[i].setAttribute('tabindex', '-1')\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (i < j) j = i\n\t\t\t\t\t\t\tcarousel.items[i].removeAttribute('tabindex')\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ((i < carousel.selectedItem || i >= carousel.selectedItem + carousel.visibItemsNb) && carouselActive) {\n\t\t\t\t\t\t\tcarousel.items[i].setAttribute('tabindex', '-1')\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (i < j) j = i\n\t\t\t\t\t\t\tcarousel.items[i].removeAttribute('tabindex')\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresetVisibilityOverflowItems(carousel, j)\n\t\t\t}\n\n\t\t\tfunction startAutoplay (carousel) {\n\t\t\t\tif (carousel.options.autoplay && !carousel.autoplayId && !carousel.autoplayPaused) {\n\t\t\t\t\tcarousel.autoplayId = setInterval(function () {\n\t\t\t\t\t\tshowNextItems(carousel)\n\t\t\t\t\t}, carousel.options.autoplayInterval)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction pauseAutoplay (carousel) {\n\t\t\t\tif (carousel.options.autoplay) {\n\t\t\t\t\tclearInterval(carousel.autoplayId)\n\t\t\t\t\tcarousel.autoplayId = false\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction initAriaLive (carousel) { // create an aria-live region for SR\n\t\t\t\tif (!carousel.options.ariaLive) return\n\t\t\t\t// create an element that will be used to announce the new visible slide to SR\n\t\t\t\tvar srLiveArea = document.createElement('div')\n\t\t\t\tUtil.setAttributes(srLiveArea, { 'class': 'sr-only js-carousel__aria-live', 'aria-live': 'polite', 'aria-atomic': 'true' })\n\t\t\t\tcarousel.element.appendChild(srLiveArea)\n\t\t\t\tcarousel.ariaLive = srLiveArea\n\t\t\t}\n\n\t\t\tfunction updateAriaLive (carousel) { // announce to SR which items are now visible\n\t\t\t\tif (!carousel.options.ariaLive) return\n\t\t\t\tcarousel.ariaLive.innerHTML = 'Item ' + (carousel.selectedItem + 1) + ' selected. ' + carousel.visibItemsNb + ' items of ' + carousel.initItems.length + ' visible'\n\t\t\t}\n\n\t\t\tfunction getIndex (carousel, index) {\n\t\t\t\tif (index < 0) index = getPositiveValue(index, carousel.itemsNb)\n\t\t\t\tif (index >= carousel.itemsNb) index = index % carousel.itemsNb\n\t\t\t\treturn index\n\t\t\t}\n\n\t\t\tfunction getPositiveValue (value, add) {\n\t\t\t\tvalue = value + add\n\t\t\t\tif (value > 0) return value\n\t\t\t\telse return getPositiveValue(value, add)\n\t\t\t}\n\n\t\t\tfunction setTranslate (carousel, translate) {\n\t\t\t\tcarousel.list.style.transform = translate\n\t\t\t\tcarousel.list.style.msTransform = translate\n\t\t\t}\n\n\t\t\tfunction getCarouselWidth (carousel, computedWidth) { // retrieve carousel width if carousel is initially hidden\n\t\t\t\tvar closestHidden = carousel.listWrapper.closest('.sr-only')\n\t\t\t\tif (closestHidden) { // carousel is inside an .sr-only (visually hidden) element\n\t\t\t\t\tUtil.removeClass(closestHidden, 'sr-only')\n\t\t\t\t\tcomputedWidth = carousel.listWrapper.offsetWidth\n\t\t\t\t\tUtil.addClass(closestHidden, 'sr-only')\n\t\t\t\t} else\n\t\t\t\t\tif (isNaN(computedWidth)) {\n\t\t\t\t\t\tcomputedWidth = getHiddenParentWidth(carousel.element, carousel)\n\t\t\t\t\t}\n\t\t\t\treturn computedWidth\n\t\t\t}\n\n\t\t\tfunction getHiddenParentWidth (element, carousel) {\n\t\t\t\tvar parent = element.parentElement\n\t\t\t\tif (parent.tagName.toLowerCase() == 'html') return 0\n\t\t\t\tvar style = window.getComputedStyle(parent)\n\t\t\t\tif (style.display == 'none' || style.visibility == 'hidden') {\n\t\t\t\t\tparent.setAttribute('style', 'display: block!important; visibility: visible!important;')\n\t\t\t\t\tvar computedWidth = carousel.listWrapper.offsetWidth\n\t\t\t\t\tparent.style.display = ''\n\t\t\t\t\tparent.style.visibility = ''\n\t\t\t\t\treturn computedWidth\n\t\t\t\t} else {\n\t\t\t\t\treturn getHiddenParentWidth(parent, carousel)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction resetCarouselControls (carousel) {\n\t\t\t\tif (carousel.options.loop) return\n\t\t\t\t// update arrows status\n\t\t\t\tif (carousel.controls.length > 0) {\n\t\t\t\t\t(carousel.totTranslate == 0)\n\t\t\t\t\t\t? carousel.controls[0].setAttribute('disabled', true)\n\t\t\t\t\t\t: carousel.controls[0].removeAttribute('disabled');\n\t\t\t\t\t(carousel.totTranslate == (-carousel.translateContainer - carousel.containerWidth) || carousel.items.length <= carousel.visibItemsNb)\n\t\t\t\t\t\t? carousel.controls[1].setAttribute('disabled', true)\n\t\t\t\t\t\t: carousel.controls[1].removeAttribute('disabled')\n\t\t\t\t}\n\t\t\t\t// update carousel dots\n\t\t\t\tif (carousel.options.nav) {\n\t\t\t\t\tvar selectedDot = carousel.navigation.getElementsByClassName(carousel.options.navigationItemClass + '--selected')\n\t\t\t\t\tif (selectedDot.length > 0) Util.removeClass(selectedDot[0], carousel.options.navigationItemClass + '--selected')\n\n\t\t\t\t\tvar newSelectedIndex = getSelectedDot(carousel)\n\t\t\t\t\tif (carousel.totTranslate == (-carousel.translateContainer - carousel.containerWidth)) {\n\t\t\t\t\t\tnewSelectedIndex = carousel.navDots.length - 1\n\t\t\t\t\t}\n\t\t\t\t\tUtil.addClass(carousel.navDots[newSelectedIndex], carousel.options.navigationItemClass + '--selected')\n\t\t\t\t}\n\n\t\t\t\t(carousel.totTranslate == 0 && (carousel.totTranslate == (-carousel.translateContainer - carousel.containerWidth) || carousel.items.length <= carousel.visibItemsNb))\n\t\t\t\t\t? Util.addClass(carousel.element, 'carousel--hide-controls')\n\t\t\t\t\t: Util.removeClass(carousel.element, 'carousel--hide-controls')\n\t\t\t}\n\n\t\t\tfunction emitCarouselUpdateEvent (carousel) {\n\t\t\t\tcarousel.cloneList = []\n\t\t\t\tvar clones = carousel.element.querySelectorAll('.js-clone')\n\t\t\t\tfor (var i = 0; i < clones.length; i++) {\n\t\t\t\t\tUtil.removeClass(clones[i], 'js-clone')\n\t\t\t\t\tcarousel.cloneList.push(clones[i])\n\t\t\t\t}\n\t\t\t\temitCarouselEvents(carousel, 'carousel-updated', carousel.cloneList)\n\t\t\t}\n\n\t\t\tfunction carouselCreateNavigation (carousel) {\n\t\t\t\tif (carousel.element.getElementsByClassName('js-carousel__navigation').length > 0) return\n\n\t\t\t\tvar navigation = document.createElement('ol'),\n\t\t\t\t\tnavChildren = ''\n\n\t\t\t\tvar navClasses = carousel.options.navigationClass + ' js-carousel__navigation'\n\t\t\t\tif (carousel.items.length <= carousel.visibItemsNb) {\n\t\t\t\t\tnavClasses = navClasses + ' hidden'\n\t\t\t\t}\n\t\t\t\tnavigation.setAttribute('class', navClasses)\n\n\t\t\t\tvar dotsNr = Math.ceil(carousel.items.length / carousel.visibItemsNb),\n\t\t\t\t\tselectedDot = getSelectedDot(carousel),\n\t\t\t\t\tindexClass = carousel.options.navigationPagination ? '' : 'sr-only'\n\t\t\t\tfor (var i = 0; i < dotsNr; i++) {\n\t\t\t\t\tvar className = (i == selectedDot) ? 'class=\"' + carousel.options.navigationItemClass + ' ' + carousel.options.navigationItemClass + '--selected js-carousel__nav-item\"' : 'class=\"' + carousel.options.navigationItemClass + ' js-carousel__nav-item\"'\n\t\t\t\t\tnavChildren = navChildren + '
  • '\n\t\t\t\t}\n\t\t\t\tnavigation.innerHTML = navChildren\n\t\t\t\tcarousel.element.appendChild(navigation)\n\t\t\t}\n\n\t\t\tfunction carouselInitNavigationEvents (carousel) {\n\t\t\t\tcarousel.navigation = carousel.element.getElementsByClassName('js-carousel__navigation')[0]\n\t\t\t\tcarousel.navDots = carousel.element.getElementsByClassName('js-carousel__nav-item')\n\t\t\t\tcarousel.navIdEvent = carouselNavigationClick.bind(carousel)\n\t\t\t\tcarousel.navigation.addEventListener('click', carousel.navIdEvent)\n\t\t\t}\n\n\t\t\tfunction carouselRemoveNavigation (carousel) {\n\t\t\t\tif (carousel.navigation) carousel.element.removeChild(carousel.navigation)\n\t\t\t\tif (carousel.navIdEvent) carousel.navigation.removeEventListener('click', carousel.navIdEvent)\n\t\t\t}\n\n\t\t\tfunction resetDotsNavigation (carousel) {\n\t\t\t\tif (!carousel.options.nav) return\n\t\t\t\tcarouselRemoveNavigation(carousel)\n\t\t\t\tcarouselCreateNavigation(carousel)\n\t\t\t\tcarouselInitNavigationEvents(carousel)\n\t\t\t}\n\n\t\t\tfunction carouselNavigationClick (event) {\n\t\t\t\tvar dot = event.target.closest('.js-carousel__nav-item')\n\t\t\t\tif (!dot) return\n\t\t\t\tif (this.animating) return\n\t\t\t\tthis.animating = true\n\t\t\t\tvar index = Util.getIndexInArray(this.navDots, dot)\n\t\t\t\tthis.selectedDotIndex = index\n\t\t\t\tthis.selectedItem = index * this.visibItemsNb\n\t\t\t\tanimateList(this, false, 'click')\n\t\t\t}\n\n\t\t\tfunction getSelectedDot (carousel) {\n\t\t\t\treturn Math.ceil(carousel.selectedItem / carousel.visibItemsNb)\n\t\t\t}\n\n\t\t\tfunction initCarouselCounter (carousel) {\n\t\t\t\tif (carousel.counterTor.length > 0) carousel.counterTor[0].textContent = carousel.itemsNb\n\t\t\t\tsetCounterItem(carousel)\n\t\t\t}\n\n\t\t\tfunction setCounterItem (carousel) {\n\t\t\t\tif (carousel.counter.length == 0) return\n\t\t\t\tvar totalItems = carousel.selectedItem + carousel.visibItemsNb\n\t\t\t\tif (totalItems > carousel.items.length) totalItems = carousel.items.length\n\t\t\t\tcarousel.counter[0].textContent = totalItems\n\t\t\t}\n\n\t\t\tfunction centerItems (carousel) {\n\t\t\t\tif (!carousel.options.justifyContent) return\n\t\t\t\tUtil.toggleClass(carousel.list, 'justify-center', carousel.items.length < carousel.visibItemsNb)\n\t\t\t}\n\n\t\t\tfunction alignControls (carousel) {\n\t\t\t\tif (carousel.controls.length < 1 || !carousel.options.alignControls) return\n\t\t\t\tif (!carousel.controlsAlignEl) {\n\t\t\t\t\tcarousel.controlsAlignEl = carousel.element.querySelector(carousel.options.alignControls)\n\t\t\t\t}\n\t\t\t\tif (!carousel.controlsAlignEl) return\n\t\t\t\tvar translate = (carousel.element.offsetHeight - carousel.controlsAlignEl.offsetHeight)\n\t\t\t\tfor (var i = 0; i < carousel.controls.length; i++) {\n\t\t\t\t\tcarousel.controls[i].style.marginBottom = translate + 'px'\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction emitCarouselActiveItemsEvent (carousel) {\n\t\t\t\temitCarouselEvents(carousel, 'carousel-active-items', { firstSelectedItem: carousel.selectedItem, visibleItemsNb: carousel.visibItemsNb })\n\t\t\t}\n\n\t\t\tfunction emitCarouselEvents (carousel, eventName, eventDetail) {\n\t\t\t\tvar event = new CustomEvent(eventName, { detail: eventDetail })\n\t\t\t\tcarousel.element.dispatchEvent(event)\n\t\t\t}\n\n\t\t\tfunction resetVisibilityOverflowItems (carousel, j) {\n\t\t\t\tif (!carousel.options.overflowItems) return\n\t\t\t\tvar itemWidth = carousel.containerWidth / carousel.items.length,\n\t\t\t\t\tdelta = (window.innerWidth - itemWidth * carousel.visibItemsNb) / 2,\n\t\t\t\t\toverflowItems = Math.ceil(delta / itemWidth)\n\n\t\t\t\tfor (var i = 0; i < overflowItems; i++) {\n\t\t\t\t\tvar indexPrev = j - 1 - i // prev element\n\t\t\t\t\tif (indexPrev >= 0) carousel.items[indexPrev].removeAttribute('tabindex')\n\t\t\t\t\tvar indexNext = j + carousel.visibItemsNb + i // next element\n\t\t\t\t\tif (indexNext < carousel.items.length) carousel.items[indexNext].removeAttribute('tabindex')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tCarousel.defaults = {\n\t\t\t\telement: '',\n\t\t\t\tautoplay: false,\n\t\t\t\tautoplayOnHover: false,\n\t\t\t\tautoplayOnFocus: false,\n\t\t\t\tautoplayInterval: 5000,\n\t\t\t\tloop: true,\n\t\t\t\tnav: false,\n\t\t\t\tnavigationItemClass: 'carousel__nav-item',\n\t\t\t\tnavigationClass: 'carousel__navigation',\n\t\t\t\tnavigationPagination: false,\n\t\t\t\tdrag: false,\n\t\t\t\tjustifyContent: false,\n\t\t\t\talignControls: false,\n\t\t\t\toverflowItems: false\n\t\t\t}\n\n\t\t\twindow.Carousel = Carousel\n\n\t\t\t//initialize the Carousel objects\n\t\t\tvar carousels = document.getElementsByClassName('js-carousel'),\n\t\t\t\tflexSupported = Util.cssSupports('align-items', 'stretch'),\n\t\t\t\ttransitionSupported = Util.cssSupports('transition'),\n\t\t\t\tcssPropertiesSupported = ('CSS' in window && CSS.supports('color', 'var(--color-var)'))\n\n\t\t\tif (carousels.length > 0) {\n\t\t\t\tfor (var i = 0; i < carousels.length; i++) {\n\t\t\t\t\t(function (i) {\n\t\t\t\t\t\tvar autoplay = (carousels[i].getAttribute('data-autoplay') && carousels[i].getAttribute('data-autoplay') == 'on') ? true : false,\n\t\t\t\t\t\t\tautoplayInterval = (carousels[i].getAttribute('data-autoplay-interval')) ? carousels[i].getAttribute('data-autoplay-interval') : 5000,\n\t\t\t\t\t\t\tautoplayOnHover = (carousels[i].getAttribute('data-autoplay-hover') && carousels[i].getAttribute('data-autoplay-hover') == 'on') ? true : false,\n\t\t\t\t\t\t\tautoplayOnFocus = (carousels[i].getAttribute('data-autoplay-focus') && carousels[i].getAttribute('data-autoplay-focus') == 'on') ? true : false,\n\t\t\t\t\t\t\tdrag = (carousels[i].getAttribute('data-drag') && carousels[i].getAttribute('data-drag') == 'on') ? true : false,\n\t\t\t\t\t\t\tloop = (carousels[i].getAttribute('data-loop') && carousels[i].getAttribute('data-loop') == 'off') ? false : true,\n\t\t\t\t\t\t\tnav = (carousels[i].getAttribute('data-navigation') && carousels[i].getAttribute('data-navigation') == 'on') ? true : false,\n\t\t\t\t\t\t\tnavigationItemClass = carousels[i].getAttribute('data-navigation-item-class') ? carousels[i].getAttribute('data-navigation-item-class') : 'carousel__nav-item',\n\t\t\t\t\t\t\tnavigationClass = carousels[i].getAttribute('data-navigation-class') ? carousels[i].getAttribute('data-navigation-class') : 'carousel__navigation',\n\t\t\t\t\t\t\tnavigationPagination = (carousels[i].getAttribute('data-navigation-pagination') && carousels[i].getAttribute('data-navigation-pagination') == 'on') ? true : false,\n\t\t\t\t\t\t\toverflowItems = (carousels[i].getAttribute('data-overflow-items') && carousels[i].getAttribute('data-overflow-items') == 'on') ? true : false,\n\t\t\t\t\t\t\talignControls = carousels[i].getAttribute('data-align-controls') ? carousels[i].getAttribute('data-align-controls') : false,\n\t\t\t\t\t\t\tjustifyContent = (carousels[i].getAttribute('data-justify-content') && carousels[i].getAttribute('data-justify-content') == 'on') ? true : false\n\t\t\t\t\t\tnew Carousel({ element: carousels[i], autoplay: autoplay, autoplayOnHover: autoplayOnHover, autoplayOnFocus: autoplayOnFocus, autoplayInterval: autoplayInterval, drag: drag, ariaLive: true, loop: loop, nav: nav, navigationItemClass: navigationItemClass, navigationPagination: navigationPagination, navigationClass: navigationClass, overflowItems: overflowItems, justifyContent: justifyContent, alignControls: alignControls })\n\t\t\t\t\t})(i)\n\t\t\t\t}\n\t\t\t}\n\n\t\t}())\n\t}\n\n\tconst initRepeater = function () {\n\t\t// File#: _1_repeater\n\t\t// Usage: codyhouse.co/license\n\t\t(function () {\n\t\t\tvar Repeater = function (element) {\n\t\t\t\tthis.element = element\n\t\t\t\tthis.blockWrapper = this.element.getElementsByClassName('js-repeater__list')\n\t\t\t\tif (this.blockWrapper.length < 1) return\n\t\t\t\tthis.blocks = false\n\t\t\t\tgetBlocksList(this)\n\t\t\t\tthis.firstBlock = false\n\t\t\t\tthis.addNew = this.element.getElementsByClassName('js-repeater__add')\n\t\t\t\tthis.cloneClass = this.element.getAttribute('data-repeater-class')\n\t\t\t\tthis.inputName = this.element.getAttribute('data-repeater-input-name')\n\t\t\t\tinitRepeater(this)\n\t\t\t}\n\n\t\t\tfunction initRepeater (element) {\n\t\t\t\tif (element.addNew.length < 1 || element.blocks.length < 1 || element.blockWrapper.length < 1) return\n\t\t\t\telement.firstBlock = element.blocks[0].cloneNode(true)\n\n\t\t\t\t// detect click on a Remove button\n\t\t\t\telement.element.addEventListener('click', function (event) {\n\t\t\t\t\tvar deleteBtn = event.target.closest('.js-repeater__remove')\n\t\t\t\t\tif (deleteBtn) {\n\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\tremoveBlock(element, deleteBtn)\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t// detect click on Add button\n\t\t\t\telement.addNew[0].addEventListener('click', function (event) {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\taddBlock(element)\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tfunction addBlock (element) {\n\t\t\t\tif (element.blocks.length > 0) {\n\t\t\t\t\tvar clone = element.blocks[element.blocks.length - 1].cloneNode(true),\n\t\t\t\t\t\tnameToReplace = element.inputName.replace('[n]', '[' + (element.blocks.length - 1) + ']'),\n\t\t\t\t\t\tnewName = element.inputName.replace('[n]', '[' + element.blocks.length + ']')\n\t\t\t\t} else {\n\t\t\t\t\tvar clone = element.firstBlock.cloneNode(true),\n\t\t\t\t\t\tnameToReplace = element.inputName.replace('[n]', '[0]'),\n\t\t\t\t\t\tnewName = element.inputName.replace('[n]', '[0]')\n\t\t\t\t}\n\n\t\t\t\tif (element.cloneClass) Util.addClass(clone, element.cloneClass)\n\t\t\t\t// modify name/for/id attributes\n\t\t\t\tupdateBlockAttrs(clone, nameToReplace, newName, true)\n\n\t\t\t\telement.blockWrapper[0].appendChild(clone)\n\t\t\t\t// update blocks list\n\t\t\t\tgetBlocksList(element)\n\t\t\t}\n\n\t\t\tfunction removeBlock (element, trigger) {\n\t\t\t\tvar block = trigger.closest('.js-repeater__item')\n\t\t\t\tif (block) {\n\t\t\t\t\tvar index = Util.getIndexInArray(element.blocks, block)\n\t\t\t\t\tblock.remove()\n\t\t\t\t\t// update blocks list\n\t\t\t\t\tgetBlocksList(element)\n\t\t\t\t\t// need to reset all blocks after that -> name/for/id values\n\t\t\t\t\tfor (var i = index; i < element.blocks.length; i++) {\n\t\t\t\t\t\tupdateBlockAttrs(element.blocks[i], element.inputName.replace('[n]', '[' + (i + 1) + ']'), element.inputName.replace('[n]', '[' + i + ']'))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction updateBlockAttrs (block, nameToReplace, newName, reset) {\n\t\t\t\tvar nameElements = block.querySelectorAll('[name^=\"' + nameToReplace + '\"]'),\n\t\t\t\t\tforElements = block.querySelectorAll('[for^=\"' + nameToReplace + '\"]'),\n\t\t\t\t\tidElements = block.querySelectorAll('[id^=\"' + nameToReplace + '\"]')\n\n\t\t\t\tfor (var i = 0; i < nameElements.length; i++) {\n\t\t\t\t\tvar nameAttr = nameElements[i].getAttribute('name')\n\t\t\t\t\tnameElements[i].setAttribute('name', nameAttr.replace(nameToReplace, newName))\n\t\t\t\t\tif (reset && nameElements[i].value) nameElements[i].value = ''\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0; i < forElements.length; i++) {\n\t\t\t\t\tvar forAttr = forElements[i].getAttribute('for')\n\t\t\t\t\tforElements[i].setAttribute('for', forAttr.replace(nameToReplace, newName))\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0; i < idElements.length; i++) {\n\t\t\t\t\tvar idAttr = idElements[i].getAttribute('id')\n\t\t\t\t\tidElements[i].setAttribute('id', idAttr.replace(nameToReplace, newName))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction getBlocksList (element) {\n\t\t\t\telement.blocks = Util.getChildrenByClassName(element.blockWrapper[0], 'js-repeater__item')\n\t\t\t}\n\n\t\t\t//initialize the Repeater objects\n\t\t\tvar repeater = document.getElementsByClassName('js-repeater')\n\t\t\tif (repeater.length > 0) {\n\t\t\t\tfor (var i = 0; i < repeater.length; i++) {\n\t\t\t\t\t(function (i) {new Repeater(repeater[i])})(i)\n\t\t\t\t}\n\t\t\t}\n\n\t\t}())\n\t}\n\n\tconst initBackToTop = function () {\n\t\t// File#: _1_back-to-top\n\t\t// Usage: codyhouse.co/license\n\t\t(function () {\n\t\t\tvar backTop = document.getElementsByClassName('js-back-to-top')[0]\n\t\t\tif (backTop) {\n\t\t\t\tvar dataElement = backTop.getAttribute('data-element')\n\t\t\t\tvar scrollElement = dataElement ? document.querySelector(dataElement) : window\n\t\t\t\tvar scrollDuration = parseInt(backTop.getAttribute('data-duration')) || 300, //scroll to top duration\n\t\t\t\t\tscrollOffsetInit = parseInt(backTop.getAttribute('data-offset-in')) || parseInt(backTop.getAttribute('data-offset')) || 0, //show back-to-top if scrolling > scrollOffset\n\t\t\t\t\tscrollOffsetOutInit = parseInt(backTop.getAttribute('data-offset-out')) || 0,\n\t\t\t\t\tscrollOffset = 0,\n\t\t\t\t\tscrollOffsetOut = 0,\n\t\t\t\t\tscrolling = false\n\n\t\t\t\t// check if target-in/target-out have been set\n\t\t\t\tvar targetIn = backTop.getAttribute('data-target-in') ? document.querySelector(backTop.getAttribute('data-target-in')) : false,\n\t\t\t\t\ttargetOut = backTop.getAttribute('data-target-out') ? document.querySelector(backTop.getAttribute('data-target-out')) : false\n\n\t\t\t\tupdateOffsets()\n\n\t\t\t\t//detect click on back-to-top link\n\t\t\t\tbackTop.addEventListener('click', function (event) {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tif (!window.requestAnimationFrame) {\n\t\t\t\t\t\tscrollElement.scrollTo(0, 0)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataElement ? Util.scrollTo(0, scrollDuration, false, scrollElement) : Util.scrollTo(0, scrollDuration)\n\t\t\t\t\t}\n\t\t\t\t\t//move the focus to the #top-element - don't break keyboard navigation\n\t\t\t\t\tUtil.moveFocus(document.getElementById(backTop.getAttribute('href').replace('#', '')))\n\t\t\t\t})\n\n\t\t\t\t//listen to the window scroll and update back-to-top visibility\n\t\t\t\tcheckBackToTop()\n\t\t\t\tif (scrollOffset > 0 || scrollOffsetOut > 0) {\n\t\t\t\t\tscrollElement.addEventListener('scroll', function (event) {\n\t\t\t\t\t\tif (!scrolling) {\n\t\t\t\t\t\t\tscrolling = true;\n\t\t\t\t\t\t\t(!window.requestAnimationFrame) ? setTimeout(function () {checkBackToTop()}, 250) : window.requestAnimationFrame(checkBackToTop)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tfunction checkBackToTop () {\n\t\t\t\t\tupdateOffsets()\n\t\t\t\t\tvar windowTop = scrollElement.scrollTop || document.documentElement.scrollTop\n\t\t\t\t\tif (!dataElement) windowTop = window.scrollY || document.documentElement.scrollTop\n\t\t\t\t\tvar condition = windowTop >= scrollOffset\n\t\t\t\t\tif (scrollOffsetOut > 0) {\n\t\t\t\t\t\tcondition = (windowTop >= scrollOffset) && (window.innerHeight + windowTop < scrollOffsetOut)\n\t\t\t\t\t}\n\t\t\t\t\tUtil.toggleClass(backTop, 'back-to-top--is-visible', condition)\n\t\t\t\t\tscrolling = false\n\t\t\t\t}\n\n\t\t\t\tfunction updateOffsets () {\n\t\t\t\t\tscrollOffset = getOffset(targetIn, scrollOffsetInit, true)\n\t\t\t\t\tscrollOffsetOut = getOffset(targetOut, scrollOffsetOutInit)\n\t\t\t\t}\n\n\t\t\t\tfunction getOffset (target, startOffset, bool) {\n\t\t\t\t\tvar offset = 0\n\t\t\t\t\tif (target) {\n\t\t\t\t\t\tvar windowTop = scrollElement.scrollTop || document.documentElement.scrollTop\n\t\t\t\t\t\tif (!dataElement) windowTop = window.scrollY || document.documentElement.scrollTop\n\t\t\t\t\t\tvar boundingClientRect = target.getBoundingClientRect()\n\t\t\t\t\t\toffset = bool ? boundingClientRect.bottom : boundingClientRect.top\n\t\t\t\t\t\toffset = offset + windowTop\n\t\t\t\t\t}\n\t\t\t\t\tif (startOffset && startOffset) {\n\t\t\t\t\t\toffset = offset + parseInt(startOffset)\n\t\t\t\t\t}\n\t\t\t\t\treturn offset\n\t\t\t\t}\n\t\t\t}\n\t\t}())\n\t}\n\n\tconst initMasonry = function () {\n\t\t/*\n\t\t Enables the masonry layout for button boxes\n\t\t */\n\n\t\tlet Masonry = function (element) {\n\t\t\tthis.element = element\n\t\t\tthis.boxes = this.element.getElementsByClassName('button-box')\n\t\t\tinitMasonry(this)\n\t\t}\n\n\t\tfunction initMasonry (element) {\n\t\t\tif (element.boxes.length < 1) return\n\n\t\t\taddColBreaks(element)\n\n\t\t\tcalculateHeight(element)\n\n\t\t\twindow.addEventListener('resize', throttle(calculateHeight(element), 100))\n\t\t}\n\n\t\tfunction addColBreaks (element) {\n\t\t\tconst spacer = ''\n\t\t\tfor (let i = 0; i < 4; i++) {\n\t\t\t\telement.element.insertAdjacentHTML('beforeend', spacer)\n\t\t\t}\n\t\t}\n\n\t\t// Returns the element height including margins\n\t\tfunction outerHeight (element) {\n\t\t\tconst height = element.offsetHeight,\n\t\t\t\tstyle = window.getComputedStyle(element)\n\n\t\t\treturn ['top', 'bottom']\n\t\t\t\t.map(side => parseInt(style[`margin-${side}`]))\n\t\t\t\t.reduce((total, side) => total + side, height)\n\t\t}\n\n\t\tfunction calculateHeight (element) {\n\t\t\telement.element.style.height = '99999px'\n\t\t\tlet maxHeight = 0\n\t\t\tArray.prototype.forEach.call(element.boxes, el => {\n\t\t\t\tmaxHeight = Math.max(maxHeight, el.offsetTop + outerHeight(el))\n\t\t\t})\n\t\t\telement.element.style.height = (maxHeight + 10) + 'px'\n\t\t\treturn true\n\t\t}\n\n\t\tlet masonry = document.getElementsByClassName('js-masonry')\n\t\tif (masonry.length > 0) {\n\t\t\tfor (let i = 0; i < masonry.length; i++) {\n\t\t\t\t(function (i) {new Masonry(masonry[i])})(i)\n\t\t\t}\n\t\t}\n\t}\n\n\tconst initStickyMobileHeader = function () {\n\t\t/*\n\t\t Toggles the [data-is-stuck] and [data-is-expanded] attributes on the header, so they can be used for styling\n\t\t Also stores the user's scroll position and restores it after the menu is opened and closed\n\t\t */\n\n\t\tfunction addBodyScrolledClass () {\n\t\t\tif (document.documentElement.scrollTop > headerOffsetTop) {\n\t\t\t\theader.setAttribute('data-is-stuck', '')\n\t\t\t} else {\n\t\t\t\theader.removeAttribute('data-is-stuck')\n\t\t\t}\n\t\t}\n\n\t\tfunction callback (mutationList, observer) {\n\t\t\tmutationList.forEach(function (mutation) {\n\t\t\t\tif (mutation.type === 'attributes' && mutation.attributeName === 'class') {\n\t\t\t\t\theader.toggleAttribute('data-is-expanded')\n\t\t\t\t\tif (headerMenu.classList.contains('hidden')) {\n\t\t\t\t\t\t// The menu has just closed, reset the scroll position\n\t\t\t\t\t\tif (windowWidth !== window.innerWidth) {\n\t\t\t\t\t\t\t// if the window has resized, scroll to top instead of the saved position\n\t\t\t\t\t\t\tuserScrollTop = 0\n\t\t\t\t\t\t}\n\t\t\t\t\t\twindow.scrollTo(0, userScrollTop)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// The menu has just opened and its position is switching from sticky to relative\n\t\t\t\t\t\t// Save the current scroll position and scroll back up the top of the header (if user had scrolled past it)\n\t\t\t\t\t\tuserScrollTop = window.scrollY\n\t\t\t\t\t\twindowWidth = window.innerWidth\n\n\t\t\t\t\t\tif (userScrollTop > headerOffsetTop) {\n\t\t\t\t\t\t\twindow.scrollTo(0, headerOffsetTop)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tfunction calcHeaderOffsetTop () {\n\t\t\theader.style.position = 'relative'\n\t\t\theaderOffsetTop = header.offsetTop\n\t\t\theader.style.position = ''\n\t\t}\n\n\t\tconst observer = new MutationObserver(callback)\n\t\tconst header = document.querySelector('.header')\n\t\tconst headerMenu = document.getElementById('header__menu')\n\t\tlet headerOffsetTop = 0, userScrollTop = 0, windowWidth = 0\n\n\t\tcalcHeaderOffsetTop()\n\t\taddBodyScrolledClass()\n\n\t\twindow.addEventListener('scroll', throttle(addBodyScrolledClass, 100))\n\t\twindow.addEventListener('resize', throttle(calcHeaderOffsetTop, 100))\n\t\tobserver.observe(headerMenu, { attributes: true })\n\t}\n\n\tconst initDesktopOnlyAnimations = function () {\n\t\t/*\n\t\t Setting [data-collapse-animate=\"desktop-only\"] will only enable animations for desktop size screens\n\t\t */\n\n\t\tfunction setCollapseAnimateAttr () {\n\t\t\tlet attr = window.matchMedia('(min-width: 1024px)').matches ? 'on' : 'off'\n\n\t\t\tfor (const elt of elts) {\n\t\t\t\telt.setAttribute('data-collapse-animate', attr)\n\t\t\t}\n\t\t}\n\n\t\tconst elts = document.querySelectorAll('[data-collapse-animate=\"desktop-only\"]')\n\t\tif (!elts) return\n\n\t\twindow.addEventListener('resize', throttle(setCollapseAnimateAttr, 200))\n\t\tsetCollapseAnimateAttr()\n\t}\n\n\tconst initScrollIntoViewButtons = function () {\n\t\t/*\n\t\t In mobile, expanding buttons with [data-mobile-scroll-into-view=\"true\"] scrolls them into view\n\t\t */\n\n\t\tfunction maybeScrollIntoView (e) {\n\t\t\tlet elt = e.target.closest('[data-mobile-scroll-into-view=\"true\"]')\n\t\t\tif (elt.getAttribute('aria-expanded') && !window.matchMedia('(min-width: 1024px)').matches) {\n\t\t\t\tlet id = elt.getAttribute('aria-controls')\n\t\t\t\tscrollIntoView(document.getElementById(id), {\n\t\t\t\t\tscrollMode: 'if-needed',\n\t\t\t\t\tblock: 'nearest'\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\n\t\tconst elts = document.querySelectorAll('[data-mobile-scroll-into-view=\"true\"]')\n\t\tif (!elts) return\n\n\t\tfor (const elt of elts) {\n\t\t\telt.addEventListener('click', maybeScrollIntoView)\n\t\t}\n\t}\n\n\tconst throttle = function (callback, limit) {\n\t\tlet wait = false\n\t\treturn function () {\n\t\t\tif (!wait) {\n\t\t\t\twait = true\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\twait = false\n\t\t\t\t\tcallback.call()\n\t\t\t\t}, limit)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn publicAPIs\n})()\n\nEdmonds_Theme.init()\n"],"names":["t","nodeType","e","n","clientHeight","scrollHeight","clientWidth","scrollWidth","r","getComputedStyle","overflowY","overflowX","ownerDocument","defaultView","frameElement","i","o","l","d","compute","window","scrollMode","block","u","inline","h","boundary","a","skipOverflowHiddenElements","c","TypeError","f","document","scrollingElement","documentElement","s","p","parentElement","push","body","m","visualViewport","width","innerWidth","g","height","innerHeight","w","scrollX","pageXOffset","v","scrollY","pageYOffset","W","getBoundingClientRect","b","H","y","top","E","right","M","bottom","V","left","x","I","C","T","length","k","B","D","O","R","X","Y","L","S","j","parseInt","borderLeftWidth","q","borderTopWidth","z","borderRightWidth","A","borderBottomWidth","F","G","J","offsetWidth","K","offsetHeight","Math","max","N","scrollLeft","P","scrollTop","min","el","isOptionsObject","options","Object","keys","scrollIntoView","target","isTargetAttached","isConnected","contains","behavior","computeOptions","getOptions","actions","canSmoothScroll","style","forEach","_ref","scroll","defaultBehavior","memoizedNow","now","performance","bind","Date","step","context","time","elapsed","startTime","duration","value","ease","currentX","startX","currentY","startY","method","requestAnimationFrame","cb","smoothScroll","scrollable","ceil","overrides","shouldSmoothScroll","Promise","all","reduce","results","startLeft","startTop","concat","resolve","Edmonds_Theme","publicAPIs","readyState","constructorEarly","addEventListener","constructorLate","initCollapse","initCarousel","initRepeater","initBackToTop","initDesktopOnlyAnimations","initScrollIntoViewButtons","initMasonry","initStickyMobileHeader","Collapse","element","this","triggers","querySelectorAll","getAttribute","animating","updateTriggers","Util","hasClass","event","preventDefault","toggleVisibility","bool","toggleClass","removeClass","initHeight","finalHeight","addClass","setHeight","removeAttribute","animateElement","setAttribute","collapses","getElementsByClassName","SwipeContent","content","delta","dragging","intervalId","handleEvent","passive","type","initDragging","unify","clientX","clientY","emitSwipeEvents","startDrag","emitDrag","setTimeout","drag","cancelAnimationFrame","clearInterval","removeEventListener","cancelDragging","dx","dy","getSign","abs","endDrag","changedTouches","eventName","detail","trigger","CustomEvent","origin","dispatchEvent","sign","swipe","Carousel","opts","extend","defaults","listWrapper","list","items","initItems","itemsNb","visibItemsNb","itemsWidth","itemOriginalWidth","selectedItem","translateContainer","containerWidth","ariaLive","controls","autoplayId","autoplayPaused","dragStart","resizeId","cloneList","itemAutoSize","totTranslate","nav","loop","counter","counterTor","initCarouselLayout","setItemsWidth","insertBefore","updateCarouselClones","resetItemsTabIndex","carousel","srLiveArea","createElement","setAttributes","class","appendChild","initAriaLive","carouselCreateNavigation","carouselInitNavigationEvents","showPrevItems","updateAriaLive","showNextItems","resetCarouselControls","emitCarouselActiveItemsEvent","autoplay","startAutoplay","autoplayOnHover","pauseAutoplay","autoplayOnFocus","closest","animateList","animateDragEnd","translate","setTranslate","clearTimeout","visibleItems","cssPropertiesSupported","getPropertyValue","resetItemAutoSize","resetItemsWidth","removeClones","noLoopTranslateValue","resetCarouselResize","navigation","removeChild","navIdEvent","carouselRemoveNavigation","resetDotsNavigation","setCounterItem","centerItems","alignControls","keyCode","key","toLowerCase","showNext","showPrev","initCarouselEvents","textContent","initCarouselCounter","itemStyle","containerStyle","itemWidth","parseFloat","itemMargin","containerPadding","computedWidth","closestHidden","isNaN","getHiddenParentWidth","getCarouselWidth","toFixed","flexSupported","insertAfter","getIndex","direction","initTranslate","transitionSupported","propertyName","animateListCb","selectedDotIndex","index","updateClones","nb","clones","createDocumentFragment","start","clone","cloneNode","firstChild","emitCarouselUpdateEvent","init","carouselActive","overflowItems","indexPrev","indexNext","resetVisibilityOverflowItems","setInterval","autoplayInterval","innerHTML","getPositiveValue","add","transform","msTransform","parent","tagName","display","visibility","selectedDot","navigationItemClass","newSelectedIndex","getSelectedDot","navDots","emitCarouselEvents","navChildren","navClasses","navigationClass","dotsNr","indexClass","navigationPagination","carouselNavigationClick","dot","getIndexInArray","totalItems","justifyContent","controlsAlignEl","querySelector","marginBottom","firstSelectedItem","visibleItemsNb","eventDetail","prototype","carousels","cssSupports","CSS","supports","Repeater","blockWrapper","blocks","getBlocksList","firstBlock","addNew","cloneClass","inputName","deleteBtn","remove","updateBlockAttrs","replace","removeBlock","nameToReplace","newName","addBlock","reset","nameElements","forElements","idElements","nameAttr","forAttr","idAttr","getChildrenByClassName","repeater","backTop","dataElement","scrollElement","scrollDuration","scrollOffsetInit","scrollOffsetOutInit","scrollOffset","scrollOffsetOut","scrolling","targetIn","targetOut","checkBackToTop","updateOffsets","windowTop","condition","getOffset","startOffset","offset","boundingClientRect","scrollTo","moveFocus","getElementById","Masonry","boxes","spacer","insertAdjacentHTML","addColBreaks","calculateHeight","throttle","maxHeight","Array","call","offsetTop","map","side","total","outerHeight","masonry","addBodyScrolledClass","headerOffsetTop","header","calcHeaderOffsetTop","position","observer","MutationObserver","mutationList","mutation","attributeName","toggleAttribute","headerMenu","classList","windowWidth","userScrollTop","observe","attributes","setCollapseAnimateAttr","attr","matchMedia","matches","elt","elts","maybeScrollIntoView","id","callback","limit","wait"],"mappings":"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"}