{"version":3,"sources":["webpack://qala-theme/./src/javascript/components/accordion.js","webpack://qala-theme/./src/javascript/components/anchor-links.js","webpack://qala-theme/./src/javascript/components/archive-hero.js","webpack://qala-theme/./src/javascript/components/back-button.js","webpack://qala-theme/./src/javascript/components/checkout.js","webpack://qala-theme/./src/javascript/components/information-bar.js","webpack://qala-theme/./src/javascript/components/my-account.js","webpack://qala-theme/./src/javascript/components/quantity.js","webpack://qala-theme/./src/javascript/components/search.js","webpack://qala-theme/./src/javascript/components/mobile-menu.js","webpack://qala-theme/./node_modules/flickity/css/flickity.css?ef70","webpack://qala-theme/./src/javascript/components/sliders.js","webpack://qala-theme/./node_modules/stickybits/dist/stickybits.es.js","webpack://qala-theme/./src/javascript/components/single-product.js","webpack://qala-theme/./src/javascript/components/sticky-menu.js","webpack://qala-theme/./src/javascript/components/mini-cart.js","webpack://qala-theme/./src/javascript/main.js","webpack://qala-theme/./src/javascript/modules/faq.js","webpack://qala-theme/./src/javascript/modules/maps.js","webpack://qala-theme/./src/javascript/modules/newsletter.js","webpack://qala-theme/./node_modules/flickity/css/flickity.css","webpack://qala-theme/./node_modules/css-loader/dist/runtime/api.js","webpack://qala-theme/./node_modules/css-loader/dist/runtime/cssWithMappingToString.js","webpack://qala-theme/./node_modules/desandro-matches-selector/matches-selector.js","webpack://qala-theme/./node_modules/ev-emitter/ev-emitter.js","webpack://qala-theme/./node_modules/fizzy-ui-utils/utils.js","webpack://qala-theme/./node_modules/flickity-as-nav-for/as-nav-for.js","webpack://qala-theme/./node_modules/flickity/js/add-remove-cell.js","webpack://qala-theme/./node_modules/flickity/js/animate.js","webpack://qala-theme/./node_modules/flickity/js/cell.js","webpack://qala-theme/./node_modules/flickity/js/drag.js","webpack://qala-theme/./node_modules/flickity/js/flickity.js","webpack://qala-theme/./node_modules/flickity/js/index.js","webpack://qala-theme/./node_modules/flickity/js/lazyload.js","webpack://qala-theme/./node_modules/flickity/js/page-dots.js","webpack://qala-theme/./node_modules/flickity/js/player.js","webpack://qala-theme/./node_modules/flickity/js/prev-next-button.js","webpack://qala-theme/./node_modules/flickity/js/slide.js","webpack://qala-theme/./node_modules/get-size/get-size.js","webpack://qala-theme/./node_modules/imagesloaded/imagesloaded.js","webpack://qala-theme/./node_modules/jquery-hoverintent/jquery.hoverIntent.js","webpack://qala-theme/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://qala-theme/./node_modules/unidragger/unidragger.js","webpack://qala-theme/./node_modules/unipointer/unipointer.js","webpack://qala-theme/external \"jQuery\"","webpack://qala-theme/webpack/bootstrap","webpack://qala-theme/webpack/runtime/chunk loaded","webpack://qala-theme/webpack/runtime/compat get default export","webpack://qala-theme/webpack/runtime/define property getters","webpack://qala-theme/webpack/runtime/hasOwnProperty shorthand","webpack://qala-theme/webpack/runtime/jsonp chunk loading","webpack://qala-theme/webpack/startup"],"names":["jQuery","$","click","blockEl","forceOpen","trigger","find","content","removeClass","attr","toggleClass","i","toggleProductBlock","this","closest","handleScrollOffset","target","animate","offTop","offset","top","menu","is","css","outerHeight","scrollTop","window","e","preventDefault","el","length","history","replaceState","href","location","hash","setTimeout","handleOnloadScroll","addOrRemoveClass","elem","hasClass","addClass","each","siblings","maxHeight","parseInt","elHeight","children","hide","text","parents","back","toggleCheckedPaymentMethod","parent","on","change","showMoreButton","document","querySelector","showLessButton","toggleExpandInformationBar","classList","toggle","addEventListener","toggleMaxQuantity","quantityValue","plusButton","val","changeProductQuantity","quantityInput","operand","modification","quantity","max","focus","eval","prop","triggerCartUpdate","updateEl","ajaxComplete","triggerEl","data","slideToggle","$mobileButton","$acMenu","stopPropagation","hoverIntent","over","out","timeout","options","imagesLoaded","background","contain","wrapAround","pageDots","groupCells","freeScroll","draggable","cellAlign","key","value","Flickity","gridCarousel","prevNextButtons","watchCSS","dragThreshold","customControls","dataset","newsCarousel","width","_extends","Object","assign","arguments","source","prototype","hasOwnProperty","call","apply","Stickybits","obj","_this","o","version","userAgent","navigator","props","customStickyChangeNumber","noStyles","stickyBitStickyOffset","parentClass","scrollEl","stickyClass","stuckClass","stickyChangeClass","useStickyClasses","useFixed","useGetBoundingClientRect","verticalPosition","applyStyle","item","style","positionVal","definePosition","instances","_this$props","verticalPositionStyle","positionStyle","els","querySelectorAll","_styles","instance","addInstance","styles","position","classes","manageState","push","_proto","stickyProp","prefix","test","head","_this2","parentNode","isWin","se","getClosestParent","computeScrollOffsets","toggleClasses","state","stateChange","stateContainer","match","p","parentElement","getTopPosition","getBoundingClientRect","pageYOffset","documentElement","topPosition","offsetTop","offsetParent","it","isCustom","isTop","scrollElOffset","stickyStart","stickyChangeOffset","offsetHeight","parentBottom","stickyChange","stickyStop","innerHeight","r","a","cArray","className","split","indexOf","rItem","splice","join","_this3","start","stop","pv","sticky","stuck","vp","aS","ns","rAFStub","f","rAF","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","scroll","scrollY","isSticky","isStuck","isStickyChange","_styles2","_classes","_styles3","_extends2","_classes2","_style$classes","stateStyles","bottom","default","_ref","stl","cls","idx","update","updatedProps","_this4","forEach","updatedProp","removeInstance","_styles4","_classes3","cleanup","removeEventListener","require","$body","generateList","collection","collectionList","Array","image","element","attributes","JSON","parse","imageList","thumbList","initFlickity","slider","ready","sliderInstance","event","variation","filterSlider","resetSlider","resize","productThumbnailsOptions","asNavFor","percentPosition","list","remove","getCellElements","appendImages","stringify","append","reloadCells","select","show","one","mainSlider","thumbSlider","stickybits","charAt","setVariationPricing","originalPrice","html","variationId","$priceEl","undefined","variationPrice","wc_variation_form","stickyArgs","stickyHeader","console","log","MiniCart","body","header","wrapper","overlay","defaultView","events","bind","miniCartTriggered","ownerDocument","outsideClickListener","miniCart","cartIsHidden","showCart","hideCart","triggerRect","headerRect","add","height","removeClickListener","Element","matches","msMatchesSelector","webkitMatchesSelector","s","ancestor","contains","acNewMap","$el","$markers","args","zoom","center","google","maps","LatLng","mapTypeId","MapTypeId","ROADMAP","zoomControl","scaleControl","streetViewControl","rotateControl","fullscreenControl","mapTypeControl","featureType","elementType","stylers","color","visibility","saturation","lightness","map","Map","markers","$marker","latlng","icon","url","origin","Point","anchor","scaledSize","Size","marker","Marker","addListener","getPosition","elemID","lat","lng","acAddMarker","bounds","LatLngBounds","extend","setCenter","getCenter","fitBounds","acCenterMap","toggleEl","___CSS_LOADER_EXPORT___","module","id","exports","cssWithMappingToString","toString","concat","modules","mediaQuery","dedupe","alreadyImportedModules","_i","_slicedToArray","arr","isArray","_arrayWithHoles","Symbol","iterator","_s","_e","_arr","_n","_d","next","done","err","_iterableToArrayLimit","minLen","_arrayLikeToArray","n","slice","constructor","name","from","_unsupportedIterableToArray","TypeError","_nonIterableRest","len","arr2","_item","cssMapping","btoa","base64","unescape","encodeURIComponent","sourceMapping","sourceURLs","sources","sourceRoot","factory","matchesMethod","ElemProto","matchesSelector","prefixes","method","selector","EvEmitter","proto","eventName","listener","_events","listeners","once","onceEvents","_onceEvents","off","index","emitEvent","onceListeners","allOff","utils","b","num","div","arraySlice","makeArray","removeFrom","ary","getParent","getQueryElement","handleEvent","type","filterFindElements","elems","ffElems","HTMLElement","childElems","debounceMethod","_class","methodName","threshold","timeoutName","clearTimeout","docReady","callback","readyState","toDashed","str","replace","$1","$2","toLowerCase","htmlInit","WidgetClass","namespace","dashedNamespace","dataAttr","dataAttrElems","jsDashElems","dataOptionsAttr","getAttribute","error","createMethods","lerp","t","_createAsNavFor","activateAsNavFor","deactivateAsNavFor","destroyAsNavFor","asNavForOption","setNavCompanion","companion","navCompanion","onNavCompanionSelect","navCompanionSelect","onNavStaticClick","isInstant","selectedCell","selectedCells","firstIndex","cells","lastIndex","selectIndex","Math","floor","selectCell","removeNavSelectedElements","navSelectedElements","cell","changeNavSelectedClass","navElem","pointer","cellElement","cellIndex","getCellsFragment","fragment","createDocumentFragment","appendChild","insert","_makeCells","isAppend","insertCellElement","insertBefore","endCells","_sizeCells","cellChange","prepend","getCells","minCellIndex","min","cellSizeChange","getCell","getSize","changedCellIndex","isPositioningSlider","prevSelectedElem","selectedElement","_positionCells","_getWrapShiftCells","setGallerySize","selectedIndex","getCellSlideIndex","slides","positionSliderAtSelected","isAnimating","restingFrames","applyDragForce","applySelectedAttraction","previousX","x","integratePhysics","positionSlider","settle","modulo","slideableWidth","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","cursorPosition","rightToLeft","translateX","getPositionValue","transform","firstSlide","positionX","progress","slidesWidth","dispatchEvent","selectedSlide","velocity","round","size","innerWidth","isPointerDown","isFreeScrolling","beforeGap","_shiftCells","beforeShiftCells","afterGap","afterShiftCells","gap","shift","cellShift","wrapShift","outerWidth","getFrictionFactor","force","isDraggable","dragForce","dragX","applyForce","selectedAttraction","Cell","create","setAttribute","destroy","unselect","side","originSide","removeAttribute","setPosition","updateTarget","renderPosition","setDefaultTarget","marginProperty","removeChild","Unidragger","defaults","_touchActionValue","isTouch","isTouchmoveScrollCanceled","_createDrag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","handles","viewport","bindHandles","unbindHandles","bindDrag","unbindDrag","pointerDown","okayPointerDown","_pointerDownPreventDefault","pointerDownFocus","activeElement","pointerDownBlur","pointerDownScroll","getScrollPosition","_pointerDownDefault","pointerDownPointer","pageX","pageY","_bindPostStartEvents","focusNodes","INPUT","TEXTAREA","SELECT","pageXOffset","y","nodeName","isTouchStart","isTouchPointer","pointerType","isFocusNode","hasDragStarted","moveVector","abs","pointerUp","isTouchScrolling","_dragPointerUp","pointerDone","dragStart","dragStartPosition","startAnimation","pointerMove","_dragPointerMove","_dragMove","dragMove","previousDragX","direction","originBound","endBound","getLastSlide","dragMoveTime","Date","dragEnd","dragEndRestingSelect","restingX","getRestingPosition","dragEndBoostSelect","isDragSelect","distance","getSlideDistance","positiveResting","_getClosestResting","negativeResting","increment","minDistance","Infinity","condition","dist","minDist","isWrapAround","slideIndex","slide","wrap","delta","staticClick","clickedCell","getParentCell","cellElem","onscroll","scrollMoveX","scrollMoveY","_pointerDone","Slide","animatePrototype","getComputedStyle","moveElements","toElem","GUID","queryElement","flickityGUID","option","$element","_create","accessibility","freeScrollFriction","friction","namespaceJQueryEvents","guid","createElement","_createSlider","activate","opts","isActive","_filterFindCellElements","tabIndex","selectInitialIndex","isInitActivated","cellSelector","positionCells","getLastCell","maxCellHeight","cellX","startCell","updateSlides","_containSlides","nextMargin","canCellFit","_getCanCellFit","slideWidth","firstMargin","addCell","updateSelectedSlide","number","percentMatch","percent","_init","reposition","setCellAlign","cellAlignShorthands","left","right","shorthand","adaptiveHeight","_unshiftCells","gapX","_getGapCells","isRightToLeft","beginMargin","endMargin","contentWidth","isContentSmaller","beginBound","emitArgs","$event","jQEvent","Event","isWrap","_wrapSelect","prevIndex","wrapIndex","backWrapDelta","forewardWrapDelta","previous","unselectSelectedSlide","selectedElements","initialIndex","queryCell","getAdjacentCellElements","adjCount","cellElems","uiChange","childUIPointerDown","onresize","deactivate","onkeydown","isNotFocused","handler","keyboardHandlers","keyCode","37","leftMethod","39","rightMethod","prevScrollY","preventScroll","scrollTo","removeData","bridget","setJQuery","jq","getCellLazyImages","lazyloadAttr","srcAttr","srcsetAttr","lazySelector","imgs","LazyLoader","img","flickity","load","_createLazyload","lazyLoad","lazyImages","lazyCellImages","src","srcset","onload","complete","onerror","Unipointer","PageDots","holder","dots","handleClick","onClick","setDots","bindStartEvent","unbindStartEvent","addDots","removeDots","count","newDots","dot","updateSelected","selectedDot","onTap","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","Player","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","play","hidden","tick","time","autoPlay","clear","pause","unpause","pauseAutoPlayOnHover","_createPlayer","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","svgURI","PrevNextButton","getArrowMovements","shape","x0","x1","y1","x2","y2","x3","isEnabled","isPrevious","leftDirection","isLeft","disable","svg","createSVG","createElementNS","path","pathMovements","arrowShape","onclick","enable","disabled","boundIndex","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons","isOriginLeft","lastCell","lastMargin","getStyleSize","parseFloat","isNaN","noop","logError","message","measurements","measurementsLength","getZeroSize","getStyle","isBoxSizeOuter","isSetup","setup","padding","borderStyle","borderWidth","boxSizing","nodeType","display","offsetWidth","isBorderBox","measurement","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","ImagesLoaded","onAlways","queryElem","elements","getImages","jqDeferred","Deferred","check","images","addElementImages","addImage","addElementBackgroundImages","elementNodeTypes","childImgs","child","1","9","11","LoadingImage","Background","Image","reURL","exec","backgroundImage","addBackground","loadingImage","onProgress","progressedCount","hasAnyBroken","isLoaded","notify","debug","isComplete","jqMethod","getIsImageComplete","confirm","naturalWidth","proxyImage","unbindEvents","makeJQueryPlugin","fn","promise","cX","cY","_cfg","interval","sensitivity","INSTANCE_COUNT","track","ev","compare","cfg","sqrt","pX","pY","timeoutId","delay","handlerIn","handlerOut","instanceId","isPlainObject","isFunction","handleHover","hoverIntentData","mousemove","memo","isOldIE","Boolean","all","atob","getTarget","styleTarget","HTMLIFrameElement","contentDocument","stylesInDom","getIndexByIdentifier","identifier","result","modulesToDom","idCountMap","identifiers","base","media","sourceMap","references","updater","addStyle","insertStyleElement","nonce","keys","Error","textStore","replaceText","replacement","filter","applyToSingletonTag","styleSheet","cssText","cssNode","createTextNode","childNodes","applyToTag","firstChild","singleton","singletonCounter","styleIndex","removeStyleElement","newObj","lastIdentifiers","newList","newLastIdentifiers","_index","_bindHandles","isAdd","bindMethod","touchAction","handle","_bindStartEvent","PointerEvent","cursorNodes","OPTION","clickTypes","radio","checkbox","button","submit","file","isCursorNode","isClickType","isOkay","_pointerReset","focused","blur","isDragging","_dragStart","_dragEnd","_staticClick","isPreventingClicks","isIgnoringMouseUp","getPointerPoint","startEvent","getTouch","touches","touch","pointerIdentifier","onmousedown","_pointerDown","ontouchstart","changedTouches","onpointerdown","pointerId","postStartEvents","mousedown","touchstart","pointerdown","_boundPointerEvents","_unbindPostStartEvents","onmousemove","_pointerMove","onpointermove","ontouchmove","onmouseup","_pointerUp","onpointerup","ontouchend","onpointercancel","_pointerCancel","ontouchcancel","pointerCancel","__webpack_module_cache__","deferred","__webpack_require__","moduleId","cachedModule","__webpack_modules__","m","O","chunkIds","priority","notFulfilled","fulfilled","j","every","getter","__esModule","d","definition","defineProperty","enumerable","get","installedChunks","721","870","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","__webpack_exports__"],"mappings":"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","file":"/javascript/main.js","sourcesContent":["jQuery( $ => {\n\t/**\n\t * Trigger accordion.\n\t */\n\t$( '.accordion-content .accordion-title' ).click( function() {\n\t\tconst parentEl = $( this ).closest( '.accordion-item' );\n\t\ttoggleProductBlock( parentEl );\n\t} );\n\n\t/**\n\t * Toggles an accordion item.\n\t *\n\t * @param {Object} blockEl the outer block element.\n\t * @param {boolean} forceOpen wether it should be forced to open.\n\t */\n\tfunction toggleProductBlock( blockEl, forceOpen = false ) {\n\t\tconst trigger = blockEl.find( '.accordion-title' );\n\t\tconst content = blockEl.find( '.accordion-inner-content' );\n\n\t\tif ( forceOpen ) {\n\t\t\tblockEl.removeClass( 'accordion-hidden' );\n\t\t\ttrigger.attr( 'aria-expanded', 'true' );\n\t\t\tcontent.attr( 'aria-hidden', 'false' );\n\t\t\treturn;\n\t\t}\n\t\t// Toggle class for the block which sets visibility.\n\t\tblockEl.toggleClass( 'accordion-hidden' );\n\t\t// Aria for the h2 trigger element.\n\t\ttrigger.attr( 'aria-expanded', ( i, attr ) => {\n\t\t\treturn 'true' === attr ? 'false' : 'true';\n\t\t} );\n\t\t// Aria for the hidden content.\n\t\tcontent.attr( 'aria-hidden', ( i, attr ) => {\n\t\t\treturn 'true' === attr ? 'false' : 'true';\n\t\t} );\n\t}\n} );\n","jQuery( $ => {\n\t/**\n\t * Make sure anchor tags with just a # as href attribute value is disabled.\n\t */\n\t$( 'a[href=\"#\"]' ).click( e => {\n\t\te.preventDefault();\n\t} );\n\n\t/**\n\t * Trigger the scrollOffset function on inpage anchor links.\n\t */\n\t$( 'a[href^=\"#\"]' ).click( function( e ) {\n\t\tconst el = $( this );\n\t\tconst target = $( el.attr( 'href' ) );\n\n\t\t// Bail if we can't find the target on this page.\n\t\tif ( ! target || 0 === target.length ) {\n\t\t\treturn;\n\t\t}\n\t\t// Prevent default behaviour\n\t\te.preventDefault();\n\t\t// Add the anchor link to the URL without triggering any scrolls.\n\t\thistory.replaceState( {}, '', this.href ); // eslint-disable-line no-undef\n\t\t// Call the function and request animation!\n\t\thandleScrollOffset( target, true );\n\t} );\n\n\t/**\n\t * Trigger custom location scroll on page load.\n\t */\n\tif ( location.hash ) { // eslint-disable-line no-undef\n\t\thandleOnloadScroll( location.hash ); // eslint-disable-line no-undef\n\t}\n\n\t/**\n\t * Handle scroll position on page load with an hash.\n\t *\n\t * @param {string} hash the url hash which should correspond to the ID of an element.\n\t */\n\tfunction handleOnloadScroll( hash ) {\n\t\tconst target = $( hash );\n\n\t\t// Bail if we can't find the target on this page.\n\t\tif ( ! target || 0 === target.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Delay this by just a millisecond and we hit our actual target.\n\t\t// This is a hack to get the position right after the browsers own scroll.\n\t\tsetTimeout( function() {\n\t\t\thandleScrollOffset( target );\n\t\t}, 1 );\n\t}\n\n\t/**\n\t * Make sure we offset the scroll position by the headers height.\n\t *\n\t * @param {string} target the target elements ID attribute.\n\t * @param {boolean} animate wether to animate the scroll or not.\n\t */\n\tfunction handleScrollOffset( target, animate = false ) {\n\t\t// Get standard offset.\n\t\tlet offTop = target.offset().top;\n\n\t\t// Check if menu is sticky\n\t\tconst menu = $( '.site-header' );\n\t\tif ( menu.is( '.is-sticky' ) || 'sticky' === menu.css( 'position' ) || 'fixed' === menu.css( 'position' ) ) {\n\t\t\t// Calculate offset with menu height.\n\t\t\toffTop -= ( menu.outerHeight() );\n\t\t}\n\n\t\t// Animate to the scroll position if requested.\n\t\tif ( animate ) {\n\t\t\t$( 'html, body' ).animate(\n\t\t\t\t{ scrollTop: offTop },\n\t\t\t\t200\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\t// Move the scroll position in place without animation!\n\t\t$( window ).scrollTop( offTop );\n\t}\n} );\n","\njQuery( $ => {\n\t// Check if text needs to be expandable or not.\n\t$( '.expandable-text' ).each(\n\t\tfunction() {\n\t\t\t$( this ).siblings( '.expandable-text__link' ).css( 'visibility', 'visible' );\n\t\t\tconst maxHeight = parseInt( $( this ).css( 'maxHeight' ), 10 );\n\t\t\tlet elHeight = 0;\n\n\t\t\t$( this ).children().each( function() {\n\t\t\t\telHeight += $( this ).outerHeight( true );\n\t\t\t} );\n\n\t\t\tif ( elHeight > maxHeight ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$( this ).addClass( 'expanded' );\n\t\t\t$( this ).siblings( '.expandable-text__link' ).hide();\n\t\t}\n\t);\n\n\t$( '.expandable-text__link' ).click(\n\t\tfunction() {\n\t\t\tconst text = $( this ).siblings( '.expandable-text' );\n\n\t\t\taddOrRemoveClass( $( this ) );\n\t\t\taddOrRemoveClass( text );\n\t\t}\n\t);\n\n\t// toggle hidden hero content for mobile.\n\t$( '.archive-mobile-toggled-btn' ).click(\n\t\tfunction( ) {\n\t\t\t$( this ).parents( '.expandable-hero' ).find( '.archive-mobile-toggled-content' ).toggleClass( 'expanded' );\n\t\t\t$( this ).toggleClass( 'expanded' );\n\t\t}\n\t);\n\n\tfunction addOrRemoveClass( elem ) {\n\t\tif ( elem.hasClass( 'expanded' ) ) {\n\t\t\telem.removeClass( 'expanded' );\n\t\t\treturn;\n\t\t}\n\t\telem.addClass( 'expanded' );\n\t}\n}\n);\n","jQuery( $ => {\n\t/**\n\t * Generic back button functionality.\n\t */\n\t$( '.js-back-button' ).click( e => {\n\t\te.preventDefault();\n\t\t// Equal to clicking the back button in the browser.\n\t\twindow.history.back();\n\t} );\n} );\n","/**\n * Checkout functionality.\n */\n\njQuery( $ => {\n\t/**\n\t * Toggles currently selected payment method.\n\t */\n\tfunction toggleCheckedPaymentMethod() {\n\t\t// Remove class on all methods.\n\t\t$( '.wc_payment_method' ).removeClass( 'active-payment-method' );\n\t\t// Add where radio button is checked.\n\t\t$( '.wc_payment_method .input-radio:checked' ).parent().addClass( 'active-payment-method' );\n\t}\n\n\t/**\n\t * Set class on parent element of selected checkout payment methods.\n\t */\n\t$( 'body' ).on( 'updated_checkout', function() {\n\t\ttoggleCheckedPaymentMethod();\n\t\t$( '.wc_payment_method input[name=\"payment_method\"]' ).change( toggleCheckedPaymentMethod );\n\t} );\n} );\n","/* Functions for the top-info-bar */\nconst showMoreButton = document.querySelector( '.info-bar-content--show-more' );\nconst showLessButton = document.querySelector( '.info-bar-content--show-less' );\n\nif ( showMoreButton ) {\n\tshowMoreButton.addEventListener( 'click', function( e ) {\n\t\te.preventDefault();\n\t\ttoggleExpandInformationBar();\n\t} );\n}\n\nif ( showLessButton ) {\n\tshowLessButton.addEventListener( 'click', function( e ) {\n\t\te.preventDefault();\n\t\ttoggleExpandInformationBar();\n\t} );\n}\n\n/**\n * Toggles the 'expanded' class on the .info-bar\n */\nfunction toggleExpandInformationBar() {\n\tdocument.querySelector( '.info-bar' ).classList.toggle( 'expanded' );\n}\n","jQuery( $ => {\n\t$( '.woocommerce-MyAccount-navigation-link.is-active' ).on( 'click', function() {\n\t\t$( this ).parent().toggleClass( 'open' );\n\t} );\n} );\n","jQuery( $ => {\n\t/**\n\t * Whenever an ajax is complete.\n\t * TODO: this should probably be more specific.\n\t */\n\t$( document ).ajaxComplete( function() {\n\t\ttoggleMaxQuantity();\n\t} );\n\n\t/**\n\t * Toggles wether the plus button should be disabled due to the maximum value reached.\n\t */\n\tfunction toggleMaxQuantity() {\n\t\t$( '.qty input[type=number]' ).each( function() {\n\t\t\tconst quantityValue = $( this );\n\t\t\tconst plusButton = quantityValue.closest( '.quantity-wrapper' ).find( '.plus' );\n\t\t\tif ( quantityValue.attr( 'max' ) ) {\n\t\t\t\tif ( parseInt( quantityValue.val() ) >= parseInt( quantityValue.attr( 'max' ) ) ) {\n\t\t\t\t\tplusButton.attr( 'disabled', true );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\n\t/**\n\t * Increment/decrement product quantity when clicking the buttons on a single product.\n\t */\n\t$( 'body' ).on( 'click', '.quantity-modifier', function() {\n\t\tconst triggerEl = $( this );\n\t\tconst quantityInput = triggerEl.closest( '.quantity-wrapper' ).find( '.qty' );\n\t\tchangeProductQuantity( quantityInput, triggerEl.data( 'operand' ), 1 );\n\t} );\n\n\t/**\n\t * Modify a products quantity input.\n\t *\n\t * @param {Object} quantityInput the quantity input element.\n\t * @param {string} operand the operand which is used to change the quantity\n\t * @param {number} modification the modifying value.\n\t */\n\tfunction changeProductQuantity( quantityInput, operand, modification = 1 ) {\n\t\tlet quantity = quantityInput.val();\n\n\t\t// If quantity is already 1 and they click to subtract we just return without doing anything.\n\t\tif ( '-' === operand && 1 >= parseInt( quantity ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst max = quantityInput.attr( 'max' );\n\n\t\t// Or if they've already reached the maximum allowed quantity.\n\t\t// We set the quantity the the max value just as a safety precaution and then bail.\n\t\tif ( '' !== max && 0 < parseInt( max ) && quantity >= parseInt( max ) ) {\n\t\t\tquantityInput.val( parseInt( max ) );\n\t\t\treturn;\n\t\t}\n\n\t\t// Add focus to the input.\n\t\tquantityInput.focus();\n\n\t\t// Recalculate quantity and change the input value.\n\t\tquantity = eval( quantity + operand + modification ); // eslint-disable-line no-eval\n\t\tquantityInput.val( quantity );\n\n\t\t// Make update cart button enabled if on checkout\n\t\t$( 'button[name=\"update_cart\"]' ).prop( 'disabled', false );\n\t}\n\n\t/**\n\t * Maybe trigger a cart update when leaving a quantity input.\n\t */\n\t$( 'body' ).on( 'blur', '.qty', () => {\n\t\ttriggerCartUpdate();\n\t} );\n\n\t/**\n\t * Maybe trigger a cart update after an interval of time\n\t * We do not do this instantly because we want to allow the user the time to change the quantity as much as they like before triggering an update.\n\t */\n\tfunction triggerCartUpdate() {\n\t\tconst updateEl = $( 'button[name=\"update_cart\"]' );\n\t\tif ( 0 < updateEl.length ) {\n\t\t\tsetTimeout( () => {\n\t\t\t\t// Bail if currently focused element is a quantity box.\n\t\t\t\tif ( $( '.qty' ).is( ':focus' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Otherwise we should trigger an update!\n\t\t\t\tupdateEl.trigger( 'click' );\n\t\t\t}, 1000 );\n\t\t}\n\t}\n} );\n","jQuery( $ => {\n\t$( '[data-search-toggle]' ).on( 'click', function() {\n\t\t$( this ).toggleClass( 'search-open' );\n\n\t\t$( this ).attr( 'aria-expanded', ( i, attr ) => {\n\t\t\treturn 'true' === attr ? 'false' : 'true';\n\t\t} );\n\n\t\t$( '#search-container' ).slideToggle( 150, function() {\n\t\t\t$( this ).find( '.form-control' ).focus();\n\t\t} );\n\t} );\n} );\n","import 'jquery-hoverintent';\njQuery( $ => {\n\tconst $mobileButton = $( 'button.mobile-nav-toggle, .close-mobile-nav' ),\n\t\t$acMenu = $( '.ac-nav-collapse' );\n\n\t$mobileButton.on( 'click', e => {\n\t\t$mobileButton.toggleClass( 'menu-icon-toggle ' );\n\t\te.stopPropagation();\n\t\t$acMenu.toggleClass( 'mobile-open' );\n\t\t$( 'body' ).toggleClass( 'mobile-nav-open' );\n\t} );\n\n\t// Toggles submenus\n\t$( '.toggle-sub-menu' ).on( 'click', function() {\n\t\t$( this ).siblings( '.sub-menu-container, .sub-menu' ).toggleClass( 'show-sub-menu' );\n\t\t$( this ).toggleClass( 'sub-menu-open' );\n\t\t$( this ).parent().toggleClass( 'menu-opened' );\n\t} );\n\n\t// Show or hide site overlay on megamenu hover\n\tconst intentIn = function() {\n\t\t$( '.site-overlay' ).addClass( 'visible' );\n\t\t$( this ).addClass( 'open' );\n\t};\n\n\tconst intentOut = function() {\n\t\t$( '.site-overlay' ).removeClass( 'visible' );\n\t\t$( this ).removeClass( 'open' );\n\t};\n\n\t$( '.megamenu' ).hoverIntent(\n\t\t{\n\t\t\tover: intentIn,\n\t\t\tout: intentOut,\n\t\t\ttimeout: 300,\n\t\t}\n\t);\n\n\t// Close menu when clicking the AC Language Picker toggle\n\t$( '.top-header-mobile .aclp-toggle' ).on( 'click', () => {\n\t\t$( '.mobile-nav-toggle' ).trigger( 'click' );\n\t} );\n} );\n","import api from \"!../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../css-loader/dist/cjs.js??ruleSet[1].rules[6].oneOf[1].use[1]!../../postcss-loader/dist/cjs.js??ruleSet[1].rules[6].oneOf[1].use[2]!./flickity.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","/**\n * Flickity file to put all the site sliders in.\n */\n\nimport imagesLoaded from 'imagesloaded';\nimport 'flickity/css/flickity.css';\nimport Flickity from 'flickity';\n\njQuery( $ => {\n\t/**\n\t * Flickity that is shown on all archive/shop/tax-pages\n\t * Slider content can be found in archive-popular-products.php\n\t */\n\tconst archiveCarousel = $( '.popular-products-slider > ul.products' );\n\tif ( 0 < archiveCarousel.length ) {\n\t\tnew imagesLoaded( $( '.popular-products-slider' ), { background: true }, function() {\n\t\t\tconst options = {\n\t\t\t\tcontain: true,\n\t\t\t\twrapAround: true,\n\t\t\t\tpageDots: false,\n\t\t\t\tgroupCells: '100%',\n\t\t\t\tfreeScroll: false,\n\t\t\t\tdraggable: true,\n\t\t\t\tcellAlign: 'center',\n\t\t\t};\n\n\t\t\t$.each( $( '.popular-products-slider > ul.products' ), ( key, value ) => {\n\t\t\t\tnew Flickity( value, options );\n\t\t\t} );\n\t\t} );\n\t}\n\n\t/**\n\t * Generic products slider.\n\t * Used on for example cross sells on single product.\n\t */\n\tconst productsCarousel = $( '.products-slider > ul.products' );\n\tif ( 0 < productsCarousel.length ) {\n\t\tnew imagesLoaded( $( '.products-slider' ), { background: true }, function() {\n\t\t\tconst options = {\n\t\t\t\tcontain: true,\n\t\t\t\twrapAround: false,\n\t\t\t\tpageDots: false,\n\t\t\t\tgroupCells: '100%',\n\t\t\t\tfreeScroll: false,\n\t\t\t\tdraggable: true,\n\t\t\t\tcellAlign: 'center',\n\t\t\t};\n\n\t\t\t$.each( $( '.products-slider > ul.products' ), ( key, value ) => {\n\t\t\t\tnew Flickity( value, options );\n\t\t\t} );\n\t\t} );\n\t}\n\n\t/**\n\t * Grid slider\n\t * Will turn a regular grid into a slider at specified breakpoint.\n\t */\n\tconst gridCarousel = $( '[class*=grid-slider]' );\n\tif ( 0 < gridCarousel.length ) {\n\t\tnew imagesLoaded( $( '[class*=grid-slider]' ), { background: true }, () => {\n\t\t\tlet options = {\n\t\t\t\tcontain: true,\n\t\t\t\twrapAround: false,\n\t\t\t\tpageDots: false,\n\t\t\t\tprevNextButtons: false,\n\t\t\t\tgroupCells: '100%',\n\t\t\t\tfreeScroll: false,\n\t\t\t\tdraggable: true,\n\t\t\t\tcellAlign: 'left',\n\t\t\t\twatchCSS: true,\n\t\t\t\tdragThreshold: 10,\n\t\t\t};\n\n\t\t\t$.each( gridCarousel, ( key, value ) => {\n\t\t\t\tconst customControls = value.dataset;\n\t\t\t\tif ( customControls ) {\n\t\t\t\t\toptions = { ...options, ...customControls };\n\t\t\t\t}\n\t\t\t\tnew Flickity( value, options );\n\t\t\t} );\n\t\t} );\n\t}\n\n\t/**\n\t * Slider for news module\n\t */\n\tconst newsCarousel = $( '.post-cards' );\n\tif ( 0 < newsCarousel.length ) {\n\t\tnew imagesLoaded( $( '.post-cards' ), { background: true }, () => {\n\t\t\tconst options = {\n\t\t\t\tcontain: true,\n\t\t\t\twrapAround: true,\n\t\t\t\tpageDots: true,\n\t\t\t\tgroupCells: '100%',\n\t\t\t\tfreeScroll: false,\n\t\t\t\tdraggable: true,\n\t\t\t\tcellAlign: 'left',\n\t\t\t};\n\n\t\t\tif ( 768 < $( window ).width() ) {\n\t\t\t\toptions.cellAlign = 'center';\n\t\t\t}\n\n\t\t\t$.each( newsCarousel, ( key, value ) => {\n\t\t\t\tnew Flickity( value, options );\n\t\t\t} );\n\t\t} );\n\t}\n} );\n","/**\n stickybits - Stickybits is a lightweight alternative to `position: sticky` polyfills\n @version v3.7.9\n @link https://github.com/yowainwright/stickybits#readme\n @author Jeff Wainwright (https://jeffry.in)\n @license MIT\n**/\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\n/*\n STICKYBITS 💉\n --------\n > a lightweight alternative to `position: sticky` polyfills 🍬\n --------\n - each method is documented above it our view the readme\n - Stickybits does not manage polymorphic functionality (position like properties)\n * polymorphic functionality: (in the context of describing Stickybits)\n means making things like `position: sticky` be loosely supported with position fixed.\n It also means that features like `useStickyClasses` takes on styles like `position: fixed`.\n --------\n defaults 🔌\n --------\n - version = `package.json` version\n - userAgent = viewer browser agent\n - target = DOM element selector\n - noStyles = boolean\n - offset = number\n - parentClass = 'string'\n - scrollEl = window || DOM element selector || DOM element\n - stickyClass = 'string'\n - stuckClass = 'string'\n - useStickyClasses = boolean\n - useFixed = boolean\n - useGetBoundingClientRect = boolean\n - verticalPosition = 'string'\n - applyStyle = function\n --------\n props🔌\n --------\n - p = props {object}\n --------\n instance note\n --------\n - stickybits parent methods return this\n - stickybits instance methods return an instance item\n --------\n nomenclature\n --------\n - target => el => e\n - props => o || p\n - instance => item => it\n --------\n methods\n --------\n - .definePosition = defines sticky or fixed\n - .addInstance = an array of objects for each Stickybits Target\n - .getClosestParent = gets the parent for non-window scroll\n - .getTopPosition = gets the element top pixel position from the viewport\n - .computeScrollOffsets = computes scroll position\n - .toggleClasses = older browser toggler\n - .manageState = manages sticky state\n - .removeInstance = removes an instance\n - .cleanup = removes all Stickybits instances and cleans up dom from stickybits\n*/\nvar Stickybits = /*#__PURE__*/function () {\n function Stickybits(target, obj) {\n var _this = this;\n\n var o = typeof obj !== 'undefined' ? obj : {};\n this.version = '3.7.9';\n this.userAgent = window.navigator.userAgent || 'no `userAgent` provided by the browser';\n this.props = {\n customStickyChangeNumber: o.customStickyChangeNumber || null,\n noStyles: o.noStyles || false,\n stickyBitStickyOffset: o.stickyBitStickyOffset || 0,\n parentClass: o.parentClass || 'js-stickybit-parent',\n scrollEl: typeof o.scrollEl === 'string' ? document.querySelector(o.scrollEl) : o.scrollEl || window,\n stickyClass: o.stickyClass || 'js-is-sticky',\n stuckClass: o.stuckClass || 'js-is-stuck',\n stickyChangeClass: o.stickyChangeClass || 'js-is-sticky--change',\n useStickyClasses: o.useStickyClasses || false,\n useFixed: o.useFixed || false,\n useGetBoundingClientRect: o.useGetBoundingClientRect || false,\n verticalPosition: o.verticalPosition || 'top',\n applyStyle: o.applyStyle || function (item, style) {\n return _this.applyStyle(item, style);\n }\n };\n /*\n define positionVal after the setting of props, because definePosition looks at the props.useFixed\n ----\n - uses a computed (`.definePosition()`)\n - defined the position\n */\n\n this.props.positionVal = this.definePosition() || 'fixed';\n this.instances = [];\n var _this$props = this.props,\n positionVal = _this$props.positionVal,\n verticalPosition = _this$props.verticalPosition,\n noStyles = _this$props.noStyles,\n stickyBitStickyOffset = _this$props.stickyBitStickyOffset;\n var verticalPositionStyle = verticalPosition === 'top' && !noStyles ? stickyBitStickyOffset + \"px\" : '';\n var positionStyle = positionVal !== 'fixed' ? positionVal : '';\n this.els = typeof target === 'string' ? document.querySelectorAll(target) : target;\n if (!('length' in this.els)) this.els = [this.els];\n\n for (var i = 0; i < this.els.length; i++) {\n var _styles;\n\n var el = this.els[i];\n var instance = this.addInstance(el, this.props); // set vertical position\n\n this.props.applyStyle({\n styles: (_styles = {}, _styles[verticalPosition] = verticalPositionStyle, _styles.position = positionStyle, _styles),\n classes: {}\n }, instance);\n this.manageState(instance); // instances are an array of objects\n\n this.instances.push(instance);\n }\n }\n /*\n setStickyPosition ✔️\n --------\n — most basic thing stickybits does\n => checks to see if position sticky is supported\n => defined the position to be used\n => stickybits works accordingly\n */\n\n\n var _proto = Stickybits.prototype;\n\n _proto.definePosition = function definePosition() {\n var stickyProp;\n\n if (this.props.useFixed) {\n stickyProp = 'fixed';\n } else {\n var prefix = ['', '-o-', '-webkit-', '-moz-', '-ms-'];\n var test = document.head.style;\n\n for (var i = 0; i < prefix.length; i += 1) {\n test.position = prefix[i] + \"sticky\";\n }\n\n stickyProp = test.position ? test.position : 'fixed';\n test.position = '';\n }\n\n return stickyProp;\n }\n /*\n addInstance ✔️\n --------\n — manages instances of items\n - takes in an el and props\n - returns an item object\n ---\n - target = el\n - o = {object} = props\n - scrollEl = 'string' | object\n - verticalPosition = number\n - off = boolean\n - parentClass = 'string'\n - stickyClass = 'string'\n - stuckClass = 'string'\n ---\n - defined later\n - parent = dom element\n - state = 'string'\n - offset = number\n - stickyStart = number\n - stickyStop = number\n - returns an instance object\n */\n ;\n\n _proto.addInstance = function addInstance(el, props) {\n var _this2 = this;\n\n var item = {\n el: el,\n parent: el.parentNode,\n props: props\n };\n\n if (props.positionVal === 'fixed' || props.useStickyClasses) {\n this.isWin = this.props.scrollEl === window;\n var se = this.isWin ? window : this.getClosestParent(item.el, item.props.scrollEl);\n this.computeScrollOffsets(item);\n this.toggleClasses(item.parent, '', props.parentClass);\n item.state = 'default';\n item.stateChange = 'default';\n\n item.stateContainer = function () {\n return _this2.manageState(item);\n };\n\n se.addEventListener('scroll', item.stateContainer);\n }\n\n return item;\n }\n /*\n --------\n getParent 👨‍\n --------\n - a helper function that gets the target element's parent selected el\n - only used for non `window` scroll elements\n - supports older browsers\n */\n ;\n\n _proto.getClosestParent = function getClosestParent(el, match) {\n // p = parent element\n var p = match;\n var e = el;\n if (e.parentElement === p) return p; // traverse up the dom tree until we get to the parent\n\n while (e.parentElement !== p) {\n e = e.parentElement;\n } // return parent element\n\n\n return p;\n }\n /*\n --------\n getTopPosition\n --------\n - a helper function that gets the topPosition of a Stickybit element\n - from the top level of the DOM\n */\n ;\n\n _proto.getTopPosition = function getTopPosition(el) {\n if (this.props.useGetBoundingClientRect) {\n return el.getBoundingClientRect().top + (this.props.scrollEl.pageYOffset || document.documentElement.scrollTop);\n }\n\n var topPosition = 0;\n\n do {\n topPosition = el.offsetTop + topPosition;\n } while (el = el.offsetParent);\n\n return topPosition;\n }\n /*\n computeScrollOffsets 📊\n ---\n computeScrollOffsets for Stickybits\n - defines\n - offset\n - start\n - stop\n */\n ;\n\n _proto.computeScrollOffsets = function computeScrollOffsets(item) {\n var it = item;\n var p = it.props;\n var el = it.el;\n var parent = it.parent;\n var isCustom = !this.isWin && p.positionVal === 'fixed';\n var isTop = p.verticalPosition !== 'bottom';\n var scrollElOffset = isCustom ? this.getTopPosition(p.scrollEl) : 0;\n var stickyStart = isCustom ? this.getTopPosition(parent) - scrollElOffset : this.getTopPosition(parent);\n var stickyChangeOffset = p.customStickyChangeNumber !== null ? p.customStickyChangeNumber : el.offsetHeight;\n var parentBottom = stickyStart + parent.offsetHeight;\n it.offset = !isCustom ? scrollElOffset + p.stickyBitStickyOffset : 0;\n it.stickyStart = isTop ? stickyStart - it.offset : 0;\n it.stickyChange = it.stickyStart + stickyChangeOffset;\n it.stickyStop = isTop ? parentBottom - (el.offsetHeight + it.offset) : parentBottom - window.innerHeight;\n }\n /*\n toggleClasses ⚖️\n ---\n toggles classes (for older browser support)\n r = removed class\n a = added class\n */\n ;\n\n _proto.toggleClasses = function toggleClasses(el, r, a) {\n var e = el;\n var cArray = e.className.split(' ');\n if (a && cArray.indexOf(a) === -1) cArray.push(a);\n var rItem = cArray.indexOf(r);\n if (rItem !== -1) cArray.splice(rItem, 1);\n e.className = cArray.join(' ');\n }\n /*\n manageState 📝\n ---\n - defines the state\n - normal\n - sticky\n - stuck\n */\n ;\n\n _proto.manageState = function manageState(item) {\n var _this3 = this;\n\n // cache object\n var it = item;\n var p = it.props;\n var state = it.state;\n var stateChange = it.stateChange;\n var start = it.stickyStart;\n var change = it.stickyChange;\n var stop = it.stickyStop; // cache props\n\n var pv = p.positionVal;\n var se = p.scrollEl;\n var sticky = p.stickyClass;\n var stickyChange = p.stickyChangeClass;\n var stuck = p.stuckClass;\n var vp = p.verticalPosition;\n var isTop = vp !== 'bottom';\n var aS = p.applyStyle;\n var ns = p.noStyles;\n /*\n requestAnimationFrame\n ---\n - use rAF\n - or stub rAF\n */\n\n var rAFStub = function rAFDummy(f) {\n f();\n };\n\n var rAF = !this.isWin ? rAFStub : window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || rAFStub;\n /*\n define scroll vars\n ---\n - scroll\n - notSticky\n - isSticky\n - isStuck\n */\n\n var scroll = this.isWin ? window.scrollY || window.pageYOffset : se.scrollTop;\n var notSticky = scroll > start && scroll < stop && (state === 'default' || state === 'stuck');\n var isSticky = isTop && scroll <= start && (state === 'sticky' || state === 'stuck');\n var isStuck = scroll >= stop && state === 'sticky';\n /*\n Unnamed arrow functions within this block\n ---\n - help wanted or discussion\n - view test.stickybits.js\n - `stickybits .manageState `position: fixed` interface` for more awareness 👀\n */\n\n if (notSticky) {\n it.state = 'sticky';\n } else if (isSticky) {\n it.state = 'default';\n } else if (isStuck) {\n it.state = 'stuck';\n }\n\n var isStickyChange = scroll >= change && scroll <= stop;\n var isNotStickyChange = scroll < change / 2 || scroll > stop;\n\n if (isNotStickyChange) {\n it.stateChange = 'default';\n } else if (isStickyChange) {\n it.stateChange = 'sticky';\n } // Only apply new styles if the state has changed\n\n\n if (state === it.state && stateChange === it.stateChange) return;\n rAF(function () {\n var _styles2, _classes, _styles3, _extends2, _classes2, _style$classes;\n\n var stateStyles = {\n sticky: {\n styles: (_styles2 = {\n position: pv,\n top: '',\n bottom: ''\n }, _styles2[vp] = p.stickyBitStickyOffset + \"px\", _styles2),\n classes: (_classes = {}, _classes[sticky] = true, _classes)\n },\n default: {\n styles: (_styles3 = {}, _styles3[vp] = '', _styles3),\n classes: {}\n },\n stuck: {\n styles: _extends((_extends2 = {}, _extends2[vp] = '', _extends2), pv === 'fixed' && !ns || !_this3.isWin ? {\n position: 'absolute',\n top: '',\n bottom: '0'\n } : {}),\n classes: (_classes2 = {}, _classes2[stuck] = true, _classes2)\n }\n };\n\n if (pv === 'fixed') {\n stateStyles.default.styles.position = '';\n }\n\n var style = stateStyles[it.state];\n style.classes = (_style$classes = {}, _style$classes[stuck] = !!style.classes[stuck], _style$classes[sticky] = !!style.classes[sticky], _style$classes[stickyChange] = isStickyChange, _style$classes);\n aS(style, item);\n });\n }\n /*\n applyStyle\n ---\n - apply the given styles and classes to the element\n */\n ;\n\n _proto.applyStyle = function applyStyle(_ref, item) {\n var styles = _ref.styles,\n classes = _ref.classes;\n // cache object\n var it = item;\n var e = it.el;\n var p = it.props;\n var stl = e.style; // cache props\n\n var ns = p.noStyles;\n var cArray = e.className.split(' '); // Disable due to bug with old versions of eslint-scope and for ... in\n // https://github.com/eslint/eslint/issues/12117\n // eslint-disable-next-line no-unused-vars\n\n for (var cls in classes) {\n var addClass = classes[cls];\n\n if (addClass) {\n if (cArray.indexOf(cls) === -1) cArray.push(cls);\n } else {\n var idx = cArray.indexOf(cls);\n if (idx !== -1) cArray.splice(idx, 1);\n }\n }\n\n e.className = cArray.join(' ');\n\n if (styles['position']) {\n stl['position'] = styles['position'];\n }\n\n if (ns) return; // eslint-disable-next-line no-unused-vars\n\n for (var key in styles) {\n stl[key] = styles[key];\n }\n };\n\n _proto.update = function update(updatedProps) {\n var _this4 = this;\n\n if (updatedProps === void 0) {\n updatedProps = null;\n }\n\n this.instances.forEach(function (instance) {\n _this4.computeScrollOffsets(instance);\n\n if (updatedProps) {\n // eslint-disable-next-line no-unused-vars\n for (var updatedProp in updatedProps) {\n instance.props[updatedProp] = updatedProps[updatedProp];\n }\n }\n });\n return this;\n }\n /*\n removes an instance 👋\n --------\n - cleanup instance\n */\n ;\n\n _proto.removeInstance = function removeInstance(instance) {\n var _styles4, _classes3;\n\n var e = instance.el;\n var p = instance.props;\n this.applyStyle({\n styles: (_styles4 = {\n position: ''\n }, _styles4[p.verticalPosition] = '', _styles4),\n classes: (_classes3 = {}, _classes3[p.stickyClass] = '', _classes3[p.stuckClass] = '', _classes3)\n }, instance);\n this.toggleClasses(e.parentNode, p.parentClass);\n }\n /*\n cleanup 🛁\n --------\n - cleans up each instance\n - clears instance\n */\n ;\n\n _proto.cleanup = function cleanup() {\n for (var i = 0; i < this.instances.length; i += 1) {\n var instance = this.instances[i];\n\n if (instance.stateContainer) {\n instance.props.scrollEl.removeEventListener('scroll', instance.stateContainer);\n }\n\n this.removeInstance(instance);\n }\n\n this.manageState = false;\n this.instances = [];\n };\n\n return Stickybits;\n}();\n/*\n export\n --------\n exports StickBits to be used 🏁\n*/\n\n\nfunction stickybits(target, o) {\n return new Stickybits(target, o);\n}\n\nexport default stickybits;\n","/**\n * Single product functionality.\n */\nimport imagesLoaded from 'imagesloaded';\nimport 'flickity/css/flickity.css';\nimport Flickity from 'flickity';\nimport stickybits from 'stickybits';\n\n// flickity-as-nav-for is added as a require because for some dumb reason the build process on synotio wont work otherwise.\nrequire( 'flickity-as-nav-for' );\n\njQuery( $ => {\n\tconst $body = $( 'body' );\n\n\t/**\n\t * Generates an array of objects containing image element and variation attributes\n\t *\n\t * @param {Array} collection An array of image elements.\n\t * @return {Array} An array of objects,\n\t */\n\tfunction generateList( collection ) {\n\t\tconst collectionList = new Array();\n\t\tcollection.forEach( image => {\n\t\t\tcollectionList.push( {\n\t\t\t\telement: image,\n\t\t\t\tattributes: JSON.parse( image.dataset.attributes ),\n\t\t\t} );\n\t\t} );\n\t\treturn collectionList;\n\t}\n\n\t// Setup a list of images.\n\tconst images = document.querySelectorAll( '.product-image-slider-item' );\n\tconst imageList = generateList( images );\n\n\t// Setup a list of thumbs.\n\tconst thumbs = document.querySelectorAll( '.product-images-slider-item-thumb' );\n\tconst thumbList = generateList( thumbs );\n\n\t/**\n\t * Initializes the flickity sliders.\n\t */\n\tfunction initFlickity() {\n\t\t$( '.product-images-slider-container' ).each( function() {\n\t\t\tnew imagesLoaded( this, { background: true }, () => {\n\t\t\t\tconst slider = $( '.product-image-slider', this )[ 0 ];\n\n\t\t\t\tnew Flickity( slider, {\n\t\t\t\t\tprevNextButtons: false,\n\t\t\t\t\tdragThreshold: 10,\n\t\t\t\t\ton: {\n\t\t\t\t\t\tready() {\n\t\t\t\t\t\t\tconst sliderInstance = this;\n\t\t\t\t\t\t\t// When a variation is found change the images in the slider\n\t\t\t\t\t\t\t$( '.variations_form' ).on( 'found_variation', function( event, variation ) {\n\t\t\t\t\t\t\t\tfilterSlider( variation, sliderInstance, imageList );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t// If a variation is reset change the images back to default in the slider.\n\t\t\t\t\t\t\t$( '.variations_form' ).on( 'reset_data', function() {\n\t\t\t\t\t\t\t\tresetSlider( sliderInstance, imageList );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} ).resize();\n\n\t\t\t\t// Setup the thumbnails navigation.\n\t\t\t\tconst productThumbnailsOptions = {\n\t\t\t\t\tasNavFor: slider,\n\t\t\t\t\tpageDots: false,\n\t\t\t\t\tdraggable: false,\n\t\t\t\t\tpercentPosition: false,\n\t\t\t\t\tgroupCells: true,\n\t\t\t\t\tcellAlign: 'left',\n\t\t\t\t\tprevNextButtons: false,\n\t\t\t\t\ton: {\n\t\t\t\t\t\tready() {\n\t\t\t\t\t\t\tconst sliderInstance = this;\n\t\t\t\t\t\t\t// When a variation is found change the images in the slider\n\t\t\t\t\t\t\t$( '.variations_form' ).on( 'found_variation', function( event, variation ) {\n\t\t\t\t\t\t\t\tfilterSlider( variation, sliderInstance, thumbList );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t// If a variation is reset change the images back to default in the slider.\n\t\t\t\t\t\t\t$( '.variations_form' ).on( 'reset_data', function() {\n\t\t\t\t\t\t\t\tresetSlider( sliderInstance, thumbList );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\t// If there's more than 6 thumbnails we need navigation!\n\t\t\t\tif ( 6 < $( '.product-images-slider-thumbnails-slide .product-images-slider-item-thumb', this ).length ) {\n\t\t\t\t\tproductThumbnailsOptions.prevNextButtons = true;\n\t\t\t\t}\n\n\t\t\t\tnew Flickity( $( '.product-images-slider-thumbnails-slide', this )[ 0 ], productThumbnailsOptions );\n\t\t\t} );\n\t\t} );\n\t}\n\n\t/**\n\t * Filters out images in the product image slider and thumbnail slider based on the selected variation.\n\t *\n\t * @param {Object} variation the variation chosen\n\t * @param {Object} slider a flickity slider object\n\t * @param {Array} list a list of objects containing image element and attributes connected to it.\n\t */\n\tfunction filterSlider( variation, slider, list ) {\n\t\t// Remove all from slider.\n\t\tslider.remove( slider.getCellElements() );\n\n\t\t// Find which images has same attributes as the selected variation.\n\t\t// We use a little JS trick here where we convert both objects to strings and compare those.\n\t\tconst appendImages = [];\n\t\tlist.forEach( image => {\n\t\t\tif ( JSON.stringify( image.attributes ) === JSON.stringify( variation.attributes ) ) {\n\t\t\t\tappendImages.push( image.element );\n\t\t\t}\n\t\t} );\n\t\t// Add to slider, reload the cells and select the first one.\n\t\tslider.append( appendImages );\n\t\tslider.reloadCells();\n\t\tslider.select( 0, true, true );\n\t\tslider.resize();\n\t\t// If there's more than 6 thumbnails we need navigation!\n\t\tif ( $( '.product-images-slider-thumbnails-slide .product-images-slider-item-thumb' ).length < 6 ) {\n\t\t\t$( 'button.flickity-prev-next-button.previous, button.flickity-prev-next-button.next' ).hide();\n\t\t} else {\n\t\t\t$( 'button.flickity-prev-next-button.previous, button.flickity-prev-next-button.next' ).show();\n\t\t}\n\t}\n\n\t/**\n\t * Resets the slider content back to all images when variations are deselected.\n\t *\n\t * @param {Object} slider a flickity slider object\n\t * @param {Array} list the list of image objects\n\t */\n\tfunction resetSlider( slider, list ) {\n\t\tconst appendImages = [];\n\t\tlist.forEach( image => {\n\t\t\tappendImages.push( image.element );\n\t\t} );\n\t\t// Add to slider, reload the cells and select the first one.\n\t\tslider.append( appendImages );\n\t\tslider.reloadCells();\n\t\tslider.select( 0, true, true );\n\t\t// If these element exists that means they were relevant when all images are showing.. ie lets show them.\n\t\t$( 'button.flickity-prev-next-button.previous, button.flickity-prev-next-button.next' ).show();\n\t}\n\n\t/**\n\t * Single product images as a slider.\n\t */\n\tinitFlickity();\n\n\t/**\n\t * Set up an initial trigger for any products that have default variations set.\n\t * Since we have a bit of a race between the variations forms found_variation and flickitys ready state we can't trust that the initial images is set correctly\n\t * when there's a default variation set for the product.\n\t */\n\t$( '.variations_form' ).one( 'found_variation', function( event, variation ) { // eslint-disable-line\n\t\t// Needs a short timeout so the flickity elements are created first, it's hard to get around this I'm afraid.\n\t\tsetTimeout(\n\t\t\t() => {\n\t\t\t\tconst mainSlider = Flickity.data( '.product-image-slider' );\n\t\t\t\tconst thumbSlider = Flickity.data( '.product-images-slider-thumbnails-slide' );\n\t\t\t\tif ( mainSlider ) {\n\t\t\t\t\tfilterSlider( variation, mainSlider, imageList );\n\t\t\t\t}\n\t\t\t\tif ( thumbSlider ) {\n\t\t\t\t\tfilterSlider( variation, thumbSlider, thumbList );\n\t\t\t\t}\n\t\t\t},\n\t\t\t400\n\t\t);\n\t} );\n\n\t/**\n\t * Summary as a sticky container on scroll.\n\t * Source: https://github.com/dollarshaveclub/stickybits\n\t */\n\tstickybits( '.product .entry-summary', {\n\t\tuseStickyClasses: true,\n\t} );\n\n\t/**\n\t * Trigger accordion.\n\t */\n\t$( '.product-block-content > h2' ).on( 'click', function() {\n\t\tconst $parentEl = $( this ).closest( '.product-block' );\n\t\ttoggleProductBlock( $parentEl );\n\t} );\n\n\t/**\n\t * Toggle the description block\n\t */\n\t$body.on( 'click', '.product-meta-link-info a', function() {\n\t\tconst target = $( this ).attr( 'href' );\n\t\tif ( '#' !== target.charAt( 0 ) ) {\n\t\t\treturn;\n\t\t}\n\t\ttoggleProductBlock( $( target ), true );\n\t} );\n\n\t/**\n\t * Make changes to the page whenever a change in the variations occurs.\n\t * Show variation selection along with the label.\n\t * Show the variations price instead of the price range.\n\t *\n\t */\n\t$body.on( 'change', '.variations select', function() {\n\t\tsetTimeout( setVariationPricing, 200 );\n\t} ).trigger( 'change' );\n\n\t/**\n\t * Toggles a product blocks accordion.\n\t *\n\t * @param {Object} blockEl the outer block element.\n\t * @param {boolean} forceOpen wether it should be forced to open.\n\t */\n\tfunction toggleProductBlock( blockEl, forceOpen = false ) {\n\t\tconst trigger = blockEl.find( 'h2' );\n\t\tconst content = blockEl.find( '.product-block-inner-content' );\n\n\t\tif ( forceOpen ) {\n\t\t\tblockEl.removeClass( 'accordion-hidden' );\n\t\t\ttrigger.attr( 'aria-expanded', 'true' );\n\t\t\tcontent.attr( 'aria-hidden', 'false' );\n\t\t\treturn;\n\t\t}\n\t\t// Toggle class for the block which sets visibility.\n\t\tblockEl.toggleClass( 'accordion-hidden' );\n\t\t// Aria for the h2 trigger element.\n\t\ttrigger.attr( 'aria-expanded', ( i, attr ) => {\n\t\t\treturn 'true' === attr ? 'false' : 'true';\n\t\t} );\n\t\t// Aria for the hidden content.\n\t\tcontent.attr( 'aria-hidden', ( i, attr ) => {\n\t\t\treturn 'true' === attr ? 'false' : 'true';\n\t\t} );\n\t}\n\n\t// Save the original product price html so it can be reset.\n\tconst originalPrice = $( '.summary-inner-wrapper > .price' ).html();\n\n\t/**\n\t * Changes the price displayed to that of the chosen variation.\n\t */\n\tfunction setVariationPricing() {\n\t\tconst variationId = $( 'input[name=\"variation_id\"]' ).val();\n\t\tlet $priceEl = $( '.summary-inner-wrapper > .price' );\n\n\t\tif ( ! $priceEl.length ) {\n\t\t\t$priceEl = $( '.qala-quickview-product-container__right .price' );\n\t\t}\n\n\t\t// No variation selected means we want to reset the product price html and bail.\n\t\tif ( undefined === variationId || 0 === parseInt( variationId ) || '' === variationId ) {\n\t\t\t$priceEl.html( originalPrice );\n\t\t\treturn;\n\t\t}\n\n\t\t// Get the variation price and overwrite the range pricing html.\n\t\tconst variationPrice = $( '.woocommerce-variation-price .price' ).html();\n\t\t$priceEl.html( variationPrice );\n\t}\n\n\t// Quickview Support for Flickity galleries and variable products.\n\tjQuery( 'body' ).on( 'quickview-loaded', () => {\n\t\t// Initialize filickity\n\t\tinitFlickity();\n\n\t\t// Initialize the variations checkout script\n\t\tjQuery( '#qala-quickview-content .variations_form' ).wc_variation_form();\n\t} );\n} );\n","/**\n * Makes menu sticky.\n */\n\nimport stickybits from 'stickybits';\n\njQuery( $ => {\n\tconst stickyArgs = {\n\t\tuseStickyClasses: true,\n\t};\n\n\t// Setting sticky menu offset to the same height as wpadminbar.\n\tif ( 0 < $( 'body.admin-bar' ).length ) {\n\t\tstickyArgs.stickyBitStickyOffset = 32;\n\t}\n\n\tconst stickyHeader = stickybits( '.site-header', stickyArgs );\n\tconsole.log( 'stickyheader is up and running yall!' ); // eslint-disable-line no-console\n\n\t$( window ).on( 'svensktfiske-articles-loaded', () => {\n\t\tconsole.log( 'Uodating stickyheader!' ); //eslint-disable-line no-console\n\t\tstickyHeader.update();\n\t} );\n} );\n","/*\n * Mini cart\n */\n\nclass MiniCart {\n\tconstructor() {\n\t\tthis.body = document.querySelector( 'body' );\n\t\tthis.header = document.querySelector( 'header.site-header' );\n\t\tthis.wrapper = document.querySelector( '[data-mini-cart-wrapper]' );\n\t\tthis.overlay = document.querySelector( '[data-site-overlay]' );\n\n\t\t// Document ready.\n\t\tdocument.defaultView.addEventListener( 'load', this.events.bind( this ) );\n\t}\n\n\tevents() {\n\t\t// Since button is replaced by AJAX we add the event listener to the header\n\t\t// and then check if the target is the button.\n\t\tthis.header.addEventListener( 'click', e => {\n\t\t\tif ( e.target.closest( '[data-mini-cart-wrapper]' ) ) {\n\t\t\t\tthis.miniCartTriggered( e );\n\t\t\t}\n\t\t} );\n\n\t\tthis.body.ownerDocument.addEventListener( 'click', this.outsideClickListener.bind( this ) );\n\t}\n\n\tminiCartTriggered( e ) {\n\t\te.stopPropagation();\n\n\t\tconst miniCart = document.querySelector( '.widget_shopping_cart' );\n\n\t\tif ( ! e.target.closest( '.widget_shopping_cart' ) ) {\n\t\t\tif ( this.cartIsHidden( miniCart ) ) {\n\t\t\t\tthis.hideCart( miniCart );\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tthis.showCart( miniCart );\n\t}\n\n\toutsideClickListener( e ) {\n\t\tconst miniCart = document.querySelector( '.widget_shopping_cart' );\n\n\t\tif ( ! e.target.closest( '.widget_shopping_cart' ) ) {\n\t\t\tif ( this.cartIsHidden( miniCart ) ) {\n\t\t\t\tthis.hideCart( miniCart );\n\t\t\t}\n\t\t}\n\t}\n\n\tremoveClickListener() {\n\t\tthis.body.ownerDocument.removeEventListener( 'click', this.outsideClickListener );\n\t}\n\n\tshowCart( miniCart ) {\n\t\tconst trigger = document.querySelector( '[data-mini-cart-button]' );\n\t\tconst triggerRect = trigger.getBoundingClientRect();\n\t\tconst headerRect = this.header.getBoundingClientRect();\n\n\t\tthis.wrapper.classList.add( 'mini-cart-enter' );\n\t\tminiCart.style.top = `${ 20 + headerRect.top + headerRect.height - triggerRect.top }px`;\n\t\tthis.body.classList.add( 'no-scroll', 'show-overlay' );\n\t\tsetTimeout( () => {\n\t\t\tthis.wrapper.classList.add( 'mini-cart-enter-active' );\n\t\t}, 50 );\n\t}\n\n\thideCart( miniCart ) {\n\t\tminiCart.style.top = '';\n\t\tthis.wrapper.classList.remove( 'mini-cart-enter', 'mini-cart-enter-active' );\n\t\tthis.body.classList.remove( 'no-scroll', 'show-overlay' );\n\t\tthis.removeClickListener();\n\t}\n\n\t// Test if cart is hidden, won't work if mini cart is set to fixed position\n\t// https://stackoverflow.com/a/21696585\n\tcartIsHidden( miniCart ) {\n\t\treturn ( null !== miniCart.offsetParent );\n\t}\n}\n\n/*eslint-disable */\n/**\n * Element.closest() polyfill\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\n *\n */\nif ( ! Element.prototype.closest ) {\n\tif ( ! Element.prototype.matches ) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\tElement.prototype.closest = function( s ) {\n\t\tlet el = this;\n\t\tlet ancestor = this;\n\t\tif ( ! document.documentElement.contains( el ) ) {return null;}\n\t\tdo {\n\t\t\tif ( ancestor.matches( s ) ) {return ancestor;}\n\t\t\tancestor = ancestor.parentElement;\n\t\t} while ( null !== ancestor );\n\t\treturn null;\n\t};\n}\n/*eslint-enable */\n\nexport default MiniCart;\n","// Import styles - this will be separated in webpack by default\nimport './components/mobile-menu';\nimport './components/accordion';\nimport './components/archive-hero';\nimport './components/sliders';\nimport './components/information-bar';\nimport './components/single-product';\nimport './components/quantity';\nimport './components/checkout';\nimport './components/sticky-menu';\nimport './components/anchor-links';\nimport './components/my-account';\nimport './components/back-button';\nimport './components/search';\nimport './modules/newsletter';\nimport './modules/faq';\nimport './modules/maps';\nimport MiniCart from './components/mini-cart';\n\n// Instantiate the minicart react app.\n// This only occurs if the default WC cart widget is used.\nconst miniCart = document.querySelector( '.widget_shopping_cart' );\nif ( miniCart ) {\n\tnew MiniCart();\n}\n","jQuery( $ => {\n\t$( '.faq-category-anchor' ).click( function( e ) {\n\t\te.preventDefault();\n\t\tconst target = $( $( this ).attr( 'href' ) );\n\n\t\t// Bail if for some reason we cant find the target.\n\t\tif ( 0 >= target.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Animate scrollposition to the target.\n\t\t$( 'html, body' ).animate( {\n\t\t\tscrollTop: target.offset().top - $( '.site-header' ).height(),\n\t\t}, 400 );\n\t} );\n} );\n","/* eslint-disable */\njQuery( ( $ ) => {\n\t/**\n\t* new_map\n\t*\n\t* This function will render a Google Map onto the selected jQuery element\n\t*\n\t* @type\tfunction\n\t* @date\t8/11/2013\n\t* @since\t4.3.0\n\t*\n\t* @param\t$el (jQuery element)\n\t* @return\tn/a\n\t*/\n\tfunction acNewMap( $el ) {\n\t\t// var\n\t\tconst $markers = $el.find( '.marker' );\n\n\t\t// vars\n\t\tconst args = {\n\t\t\tzoom: 6,\n\t\t\tcenter: new google.maps.LatLng( 0, 0 ),\n\t\t\tmapTypeId: google.maps.MapTypeId.ROADMAP,\n\t\t\tzoomControl: true,\n\t\t\tscaleControl: true,\n\t\t\tstreetViewControl: false,\n\t\t\trotateControl: false,\n\t\t\tfullscreenControl: false,\n\t\t\tmapTypeControl: false,\n\t\t\tstyles: [\n\t\t\t\t{\n\t\t\t\t\tfeatureType: 'administrative',\n\t\t\t\t\telementType: 'labels.text.fill',\n\t\t\t\t\tstylers: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcolor: '#9bb3b7',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfeatureType: 'administrative',\n\t\t\t\t\telementType: 'labels.text.stroke',\n\t\t\t\t\tstylers: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcolor: '#ffffff',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfeatureType: 'landscape',\n\t\t\t\t\tstylers: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcolor: '#f7f7f7',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfeatureType: 'poi',\n\t\t\t\t\tstylers: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvisibility: 'off',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfeatureType: 'road',\n\t\t\t\t\tstylers: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsaturation: -100,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlightness: 45,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfeatureType: 'road.arterial',\n\t\t\t\t\telementType: 'labels.icon',\n\t\t\t\t\tstylers: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvisibility: 'off',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfeatureType: 'road.highway',\n\t\t\t\t\tstylers: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvisibility: 'simplified',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfeatureType: 'transit',\n\t\t\t\t\tstylers: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvisibility: 'off',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfeatureType: 'water',\n\t\t\t\t\tstylers: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcolor: '#ededed',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvisibility: 'on',\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\t// create map\n\t\tconst map = new google.maps.Map( $el[ 0 ], args );\n\n\t\t// add a markers reference\n\t\tmap.markers = [];\n\n\t\t// add markers\n\t\t$markers.each( function() {\n\t\t\tmap.markers.push( acAddMarker( $( this ), map ) );\n\t\t} );\n\n\t\t// center map\n\t\tacCenterMap( map );\n\t}\n\n\t/**\n\t* add_marker\n\t*\n\t* This function will add a marker to the selected Google Map\n\t*\n\t* @type\tfunction\n\t* @date\t8/11/2013\n\t* @since\t4.3.0\n\t*\n\t* @param\t$marker (jQuery element)\n\t* @param\tmap (Google Map object)\n\t* @return\tn/a\n\t*/\n\n\tfunction acAddMarker( $marker, map ) {\n\t\tconst latlng = new google.maps.LatLng( $marker.data( 'lat' ), $marker.data( 'lng' ) );\n\t\tconst baseUrl = document.location.origin;\n\t\tconst icon = {\n\t\t\turl: baseUrl + '/wp-content/themes/qala-theme/assets/images/icons/location.svg',\n\t\t\torigin: new google.maps.Point( 0, 0 ),\n\t\t\tanchor: new google.maps.Point( 29 / 2, 40 ),\n\t\t\tscaledSize: new google.maps.Size( 29, 40 ),\n\t\t};\n\n\t\t// create marker\n\t\tconst marker = new google.maps.Marker( {\n\t\t\tposition: latlng,\n\t\t\tmap: map,\n\t\t\ticon: icon,\n\t\t} );\n\n\t\t// if marker contains HTML, add it to an infoWindow\n\t\tif ( $marker.html() ) {\n\t\t\t// Show/hide correct infowindow.\n\t\t\tgoogle.maps.event.addListener( marker, 'click', function() {\n\t\t\t\tconst position = this.getPosition();\n\t\t\t\tconst latandlng = '#info' + position.lat() + '' + position.lng();\n\t\t\t\tconst elemID = latandlng.split( '.' ).join( '' );\n\t\t\t\t$( '.acf-map__wrap .map-info-window' ).addClass( 'hidden' );\n\t\t\t\t$( elemID ).removeClass( 'hidden' );\n\t\t\t} );\n\t\t}\n\n\t\treturn marker;\n\t}\n\n\t/**\n\t* center_map\n\t*\n\t* This function will center the map, showing all markers attached to this map\n\t*\n\t* @type\tfunction\n\t* @date\t8/11/2013\n\t* @since\t4.3.0\n\t*\n\t* @param\tmap (Google Map object)\n\t* @return\tn/a\n\t*/\n\tfunction acCenterMap( map ) {\n\t\tvar bounds = new google.maps.LatLngBounds();\n map.markers.forEach( ( marker ) => {\n\t\t\tbounds.extend({\n\t\t\t\tlat: marker.position.lat(),\n\t\t\t\tlng: marker.position.lng()\n\t\t\t});\n });\n\n\t\tif ( map.markers.length == 1 ) {\n\t\t\tmap.setCenter( bounds.getCenter() );\n\t\t} else {\n\t\t\tmap.fitBounds( bounds );\n\t\t}\n\t}\n\n\t/**\n\t* document ready\n\t*\n\t* This function will render each map when the document is ready (page has loaded)\n\t*\n\t* @type\tfunction\n\t* @date\t8/11/2013\n\t* @since\t5.0.0\n\t*\n\t* @param\tn/a\n\t* @return\tn/a\n\t*/\n\t$( document ).ready( () => {\n\t\t$( '.acf-map' ).each( function() {\n\t\t\t// create map\n\t\t\tacNewMap( $( this ) );\n\t\t} );\n\n\t\t$( '.map-info-window .close' ).on( 'click', function() {\n\t\t\t$( this ).closest( '.map-info-window' ).addClass( 'hidden' );\n\t\t} );\n\t} );\n} );\n","/**\n * Module: Newsletter\n */\n\njQuery( $ => {\n\t/**\n\t * Toggles the Accept box information.\n\t *\n\t * @param {Object} el the element that should be activated.\n\t */\n\tfunction toggleAcceptBox( el ) {\n\t\t// Add active class.\n\t\tel.addClass( 'active' );\n\t}\n\n\t/**\n\t * Show terms and conditions on input in email input field in mailchimp form.\n\t */\n\t$( '.mc4wp-form-fields input[type=\"email\"]' ).on( 'input', function() {\n\t\tconst toggleEl = $( this ).siblings( 'p' );\n\t\ttoggleAcceptBox( toggleEl );\n\t} );\n} );\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*! Flickity v2.2.2\\nhttps://flickity.metafizzy.co\\n---------------------------------------------- */.flickity-enabled{position:relative}.flickity-enabled:focus{outline:none}.flickity-viewport{height:100%;overflow:hidden;position:relative}.flickity-slider{height:100%;position:absolute;width:100%}.flickity-enabled.is-draggable{-webkit-tap-highlight-color:transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.flickity-enabled.is-draggable .flickity-viewport{cursor:move;cursor:-webkit-grab;cursor:grab}.flickity-enabled.is-draggable .flickity-viewport.is-pointer-down{cursor:-webkit-grabbing;cursor:grabbing}.flickity-button{background:hsla(0,0%,100%,.75);border:none;color:#333;position:absolute}.flickity-button:hover{background:#fff;cursor:pointer}.flickity-button:focus{box-shadow:0 0 0 5px #19f;outline:none}.flickity-button:active{opacity:.6}.flickity-button:disabled{cursor:auto;opacity:.3;pointer-events:none}.flickity-button-icon{fill:currentColor}.flickity-prev-next-button{border-radius:50%;height:44px;top:50%;transform:translateY(-50%);width:44px}.flickity-prev-next-button.previous{left:10px}.flickity-prev-next-button.next{right:10px}.flickity-rtl .flickity-prev-next-button.previous{left:auto;right:10px}.flickity-rtl .flickity-prev-next-button.next{left:10px;right:auto}.flickity-prev-next-button .flickity-button-icon{height:60%;left:20%;position:absolute;top:20%;width:60%}.flickity-page-dots{bottom:-25px;line-height:1;list-style:none;margin:0;padding:0;position:absolute;text-align:center;width:100%}.flickity-rtl .flickity-page-dots{direction:rtl}.flickity-page-dots .dot{background:#333;border-radius:50%;cursor:pointer;display:inline-block;height:10px;margin:0 8px;opacity:.25;width:10px}.flickity-page-dots .dot.is-selected{opacity:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/flickity/css/flickity.css\"],\"names\":[],\"mappings\":\"AAAA;;gDAEgD,CAEhD,kBACE,iBACF,CAEA,wBAA0B,YAAe,CAEzC,mBAGE,WAAY,CAFZ,eAAgB,CAChB,iBAEF,CAEA,iBAGE,WAAY,CAFZ,iBAAkB,CAClB,UAEF,CAIA,+BACE,uCAAwC,CACxC,wBAAyB,CACtB,qBAAsB,CACrB,oBAAqB,CACjB,gBACV,CAEA,kDACE,WAAY,CACZ,mBAAoB,CACpB,WACF,CAEA,kEACE,uBAAwB,CACxB,eACF,CAIA,iBAEE,8BAAmC,CACnC,WAAY,CACZ,UAAW,CAHX,iBAIF,CAEA,uBACE,eAAiB,CACjB,cACF,CAEA,uBAEE,yBAA0B,CAD1B,YAEF,CAEA,wBACE,UACF,CAEA,0BAEE,WAAY,CADZ,UAAY,CAGZ,mBACF,CAEA,sBACE,iBACF,CAIA,2BAIE,iBAAkB,CADlB,WAAY,CAFZ,OAAQ,CAKR,0BAA2B,CAJ3B,UAKF,CAEA,oCAAsC,SAAY,CAClD,gCAAkC,UAAa,CAE/C,kDACE,SAAU,CACV,UACF,CACA,8CAEE,SAAU,CADV,UAEF,CAEA,iDAKE,UAAW,CAHX,QAAS,CADT,iBAAkB,CAElB,OAAQ,CACR,SAEF,CAIA,oBAGE,YAAa,CAKb,aAAc,CAFd,eAAgB,CADhB,QAAS,CADT,SAAU,CAHV,iBAAkB,CAMlB,iBAAkB,CALlB,UAOF,CAEA,kCAAoC,aAAgB,CAEpD,yBAKE,eAAgB,CAChB,iBAAkB,CAElB,cAAe,CAPf,oBAAqB,CAErB,WAAY,CACZ,YAAa,CAGb,WAAa,CALb,UAOF,CAEA,qCACE,SACF\",\"sourcesContent\":[\"/*! Flickity v2.2.2\\nhttps://flickity.metafizzy.co\\n---------------------------------------------- */\\n\\n.flickity-enabled {\\n position: relative;\\n}\\n\\n.flickity-enabled:focus { outline: none; }\\n\\n.flickity-viewport {\\n overflow: hidden;\\n position: relative;\\n height: 100%;\\n}\\n\\n.flickity-slider {\\n position: absolute;\\n width: 100%;\\n height: 100%;\\n}\\n\\n/* draggable */\\n\\n.flickity-enabled.is-draggable {\\n -webkit-tap-highlight-color: transparent;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.flickity-enabled.is-draggable .flickity-viewport {\\n cursor: move;\\n cursor: -webkit-grab;\\n cursor: grab;\\n}\\n\\n.flickity-enabled.is-draggable .flickity-viewport.is-pointer-down {\\n cursor: -webkit-grabbing;\\n cursor: grabbing;\\n}\\n\\n/* ---- flickity-button ---- */\\n\\n.flickity-button {\\n position: absolute;\\n background: hsla(0, 0%, 100%, 0.75);\\n border: none;\\n color: #333;\\n}\\n\\n.flickity-button:hover {\\n background: white;\\n cursor: pointer;\\n}\\n\\n.flickity-button:focus {\\n outline: none;\\n box-shadow: 0 0 0 5px #19F;\\n}\\n\\n.flickity-button:active {\\n opacity: 0.6;\\n}\\n\\n.flickity-button:disabled {\\n opacity: 0.3;\\n cursor: auto;\\n /* prevent disabled button from capturing pointer up event. #716 */\\n pointer-events: none;\\n}\\n\\n.flickity-button-icon {\\n fill: currentColor;\\n}\\n\\n/* ---- previous/next buttons ---- */\\n\\n.flickity-prev-next-button {\\n top: 50%;\\n width: 44px;\\n height: 44px;\\n border-radius: 50%;\\n /* vertically center */\\n transform: translateY(-50%);\\n}\\n\\n.flickity-prev-next-button.previous { left: 10px; }\\n.flickity-prev-next-button.next { right: 10px; }\\n/* right to left */\\n.flickity-rtl .flickity-prev-next-button.previous {\\n left: auto;\\n right: 10px;\\n}\\n.flickity-rtl .flickity-prev-next-button.next {\\n right: auto;\\n left: 10px;\\n}\\n\\n.flickity-prev-next-button .flickity-button-icon {\\n position: absolute;\\n left: 20%;\\n top: 20%;\\n width: 60%;\\n height: 60%;\\n}\\n\\n/* ---- page dots ---- */\\n\\n.flickity-page-dots {\\n position: absolute;\\n width: 100%;\\n bottom: -25px;\\n padding: 0;\\n margin: 0;\\n list-style: none;\\n text-align: center;\\n line-height: 1;\\n}\\n\\n.flickity-rtl .flickity-page-dots { direction: rtl; }\\n\\n.flickity-page-dots .dot {\\n display: inline-block;\\n width: 10px;\\n height: 10px;\\n margin: 0 8px;\\n background: #333;\\n border-radius: 50%;\\n opacity: 0.25;\\n cursor: pointer;\\n}\\n\\n.flickity-page-dots .dot.is-selected {\\n opacity: 1;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join(\"\");\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === \"string\") {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, \"\"]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};","\"use strict\";\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) { var _i = arr && (typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]); if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_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\nmodule.exports = function cssWithMappingToString(item) {\n var _item = _slicedToArray(item, 4),\n content = _item[1],\n cssMapping = _item[3];\n\n if (typeof btoa === \"function\") {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || \"\").concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join(\"\\n\");\n }\n\n return [content].join(\"\\n\");\n};","/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n /*global define: false, module: false */\n 'use strict';\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.matchesSelector = factory();\n }\n\n}( window, function factory() {\n 'use strict';\n\n var matchesMethod = ( function() {\n var ElemProto = window.Element.prototype;\n // check for the standard method name first\n if ( ElemProto.matches ) {\n return 'matches';\n }\n // check un-prefixed\n if ( ElemProto.matchesSelector ) {\n return 'matchesSelector';\n }\n // check vendor prefixes\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n for ( var i=0; i < prefixes.length; i++ ) {\n var prefix = prefixes[i];\n var method = prefix + 'MatchesSelector';\n if ( ElemProto[ method ] ) {\n return method;\n }\n }\n })();\n\n return function matchesSelector( elem, selector ) {\n return elem[ matchesMethod ]( selector );\n };\n\n}));\n","/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( listeners.indexOf( listener ) == -1 ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n var index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( var i=0; i < listeners.length; i++ ) {\n var listener = listeners[i]\n var isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n","/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'desandro-matches-selector/matches-selector'\n ], function( matchesSelector ) {\n return factory( window, matchesSelector );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('desandro-matches-selector')\n );\n } else {\n // browser global\n window.fizzyUIUtils = factory(\n window,\n window.matchesSelector\n );\n }\n\n}( window, function factory( window, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) {\n return [];\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n var index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( matchesSelector( elem, selector ) ) {\n return elem;\n }\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n var ffElems = [];\n\n elems.forEach( function( elem ) {\n // check that elem is an actual element\n if ( !( elem instanceof HTMLElement ) ) {\n return;\n }\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return;\n }\n // filter & find items if we have a selector\n // filter\n if ( matchesSelector( elem, selector ) ) {\n ffElems.push( elem );\n }\n // find children\n var childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n for ( var i=0; i < childElems.length; i++ ) {\n ffElems.push( childElems[i] );\n }\n });\n\n return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[ methodName ];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n var timeout = this[ timeoutName ];\n clearTimeout( timeout );\n\n var args = arguments;\n var _this = this;\n this[ timeoutName ] = setTimeout( function() {\n method.apply( _this, args );\n delete _this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n var readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( callback );\n } else {\n document.addEventListener( 'DOMContentLoaded', callback );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n var dashedNamespace = utils.toDashed( namespace );\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n var elems = utils.makeArray( dataAttrElems )\n .concat( utils.makeArray( jsDashElems ) );\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach( function( elem ) {\n var attr = elem.getAttribute( dataAttr ) ||\n elem.getAttribute( dataOptionsAttr );\n var options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n ': ' + error );\n }\n return;\n }\n // initialize\n var instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n });\n\n });\n};\n\n// ----- ----- //\n\nreturn utils;\n\n}));\n","/*!\n * Flickity asNavFor v2.0.1\n * enable asNavFor for Flickity\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true*/\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'flickity/js/index',\n 'fizzy-ui-utils/utils'\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( Flickity, utils ) {\n\n'use strict';\n\n// -------------------------- asNavFor prototype -------------------------- //\n\n// Flickity.defaults.asNavFor = null;\n\nFlickity.createMethods.push('_createAsNavFor');\n\nvar proto = Flickity.prototype;\n\nproto._createAsNavFor = function() {\n this.on( 'activate', this.activateAsNavFor );\n this.on( 'deactivate', this.deactivateAsNavFor );\n this.on( 'destroy', this.destroyAsNavFor );\n\n var asNavForOption = this.options.asNavFor;\n if ( !asNavForOption ) {\n return;\n }\n // HACK do async, give time for other flickity to be initalized\n var _this = this;\n setTimeout( function initNavCompanion() {\n _this.setNavCompanion( asNavForOption );\n });\n};\n\nproto.setNavCompanion = function( elem ) {\n elem = utils.getQueryElement( elem );\n var companion = Flickity.data( elem );\n // stop if no companion or companion is self\n if ( !companion || companion == this ) {\n return;\n }\n\n this.navCompanion = companion;\n // companion select\n var _this = this;\n this.onNavCompanionSelect = function() {\n _this.navCompanionSelect();\n };\n companion.on( 'select', this.onNavCompanionSelect );\n // click\n this.on( 'staticClick', this.onNavStaticClick );\n\n this.navCompanionSelect( true );\n};\n\nproto.navCompanionSelect = function( isInstant ) {\n if ( !this.navCompanion ) {\n return;\n }\n // select slide that matches first cell of slide\n var selectedCell = this.navCompanion.selectedCells[0];\n var firstIndex = this.navCompanion.cells.indexOf( selectedCell );\n var lastIndex = firstIndex + this.navCompanion.selectedCells.length - 1;\n var selectIndex = Math.floor( lerp( firstIndex, lastIndex,\n this.navCompanion.cellAlign ) );\n this.selectCell( selectIndex, false, isInstant );\n // set nav selected class\n this.removeNavSelectedElements();\n // stop if companion has more cells than this one\n if ( selectIndex >= this.cells.length ) {\n return;\n }\n\n var selectedCells = this.cells.slice( firstIndex, lastIndex + 1 );\n this.navSelectedElements = selectedCells.map( function( cell ) {\n return cell.element;\n });\n this.changeNavSelectedClass('add');\n};\n\nfunction lerp( a, b, t ) {\n return ( b - a ) * t + a;\n}\n\nproto.changeNavSelectedClass = function( method ) {\n this.navSelectedElements.forEach( function( navElem ) {\n navElem.classList[ method ]('is-nav-selected');\n });\n};\n\nproto.activateAsNavFor = function() {\n this.navCompanionSelect( true );\n};\n\nproto.removeNavSelectedElements = function() {\n if ( !this.navSelectedElements ) {\n return;\n }\n this.changeNavSelectedClass('remove');\n delete this.navSelectedElements;\n};\n\nproto.onNavStaticClick = function( event, pointer, cellElement, cellIndex ) {\n if ( typeof cellIndex == 'number' ) {\n this.navCompanion.selectCell( cellIndex );\n }\n};\n\nproto.deactivateAsNavFor = function() {\n this.removeNavSelectedElements();\n};\n\nproto.destroyAsNavFor = function() {\n if ( !this.navCompanion ) {\n return;\n }\n this.navCompanion.off( 'select', this.onNavCompanionSelect );\n this.off( 'staticClick', this.onNavStaticClick );\n delete this.navCompanion;\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n}));\n","// add, remove cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n\n'use strict';\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n var fragment = document.createDocumentFragment();\n cells.forEach( function( cell ) {\n fragment.appendChild( cell.element );\n } );\n return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nvar proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {[Element, Array, NodeList]} elems - Elements to insert\n * @param {Integer} index - Zero-based number to insert\n */\nproto.insert = function( elems, index ) {\n var cells = this._makeCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n var len = this.cells.length;\n // default to append\n index = index === undefined ? len : index;\n // add cells with document fragment\n var fragment = getCellsFragment( cells );\n // append to slider\n var isAppend = index == len;\n if ( isAppend ) {\n this.slider.appendChild( fragment );\n } else {\n var insertCellElement = this.cells[ index ].element;\n this.slider.insertBefore( fragment, insertCellElement );\n }\n // add to this.cells\n if ( index === 0 ) {\n // prepend, add to start\n this.cells = cells.concat( this.cells );\n } else if ( isAppend ) {\n // append, add to end\n this.cells = this.cells.concat( cells );\n } else {\n // insert in this.cells\n var endCells = this.cells.splice( index, len - index );\n this.cells = this.cells.concat( cells ).concat( endCells );\n }\n\n this._sizeCells( cells );\n this.cellChange( index, true );\n};\n\nproto.append = function( elems ) {\n this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {[Element, Array, NodeList]} elems - ELements to remove\n */\nproto.remove = function( elems ) {\n var cells = this.getCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n\n var minCellIndex = this.cells.length - 1;\n // remove cells from collection & DOM\n cells.forEach( function( cell ) {\n cell.remove();\n var index = this.cells.indexOf( cell );\n minCellIndex = Math.min( index, minCellIndex );\n utils.removeFrom( this.cells, cell );\n }, this );\n\n this.cellChange( minCellIndex, true );\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n var cell = this.getCell( elem );\n if ( !cell ) {\n return;\n }\n cell.getSize();\n\n var index = this.cells.indexOf( cell );\n this.cellChange( index );\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n * @param {Boolean} isPositioningSlider - Positions slider after selection\n */\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\n var prevSelectedElem = this.selectedElement;\n this._positionCells( changedCellIndex );\n this._getWrapShiftCells();\n this.setGallerySize();\n // update selectedIndex\n // try to maintain position & select previous selected element\n var cell = this.getCell( prevSelectedElem );\n if ( cell ) {\n this.selectedIndex = this.getCellSlideIndex( cell );\n }\n this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n this.emitEvent( 'cellChange', [ changedCellIndex ] );\n // position slider\n this.select( this.selectedIndex );\n // do not position slider after lazy load\n if ( isPositioningSlider ) {\n this.positionSliderAtSelected();\n }\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","// animate\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'fizzy-ui-utils/utils',\n ], function( utils ) {\n return factory( window, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.animatePrototype = factory(\n window,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, utils ) {\n\n'use strict';\n\n// -------------------------- animate -------------------------- //\n\nvar proto = {};\n\nproto.startAnimation = function() {\n if ( this.isAnimating ) {\n return;\n }\n\n this.isAnimating = true;\n this.restingFrames = 0;\n this.animate();\n};\n\nproto.animate = function() {\n this.applyDragForce();\n this.applySelectedAttraction();\n\n var previousX = this.x;\n\n this.integratePhysics();\n this.positionSlider();\n this.settle( previousX );\n // animate next frame\n if ( this.isAnimating ) {\n var _this = this;\n requestAnimationFrame( function animateFrame() {\n _this.animate();\n } );\n }\n};\n\nproto.positionSlider = function() {\n var x = this.x;\n // wrap position around\n if ( this.options.wrapAround && this.cells.length > 1 ) {\n x = utils.modulo( x, this.slideableWidth );\n x -= this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n this.setTranslateX( x, this.isAnimating );\n this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n x = this.options.rightToLeft ? -x : x;\n var translateX = this.getPositionValue( x );\n // use 3D transforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = is3d ?\n 'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\n};\n\nproto.dispatchScrollEvent = function() {\n var firstSlide = this.slides[0];\n if ( !firstSlide ) {\n return;\n }\n var positionX = -this.x - firstSlide.target;\n var progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n if ( !this.cells.length ) {\n return;\n }\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n if ( this.options.percentPosition ) {\n // percent position, round to 2 digits, like 12.34%\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 ) + '%';\n } else {\n // pixel positioning\n return Math.round( position ) + 'px';\n }\n};\n\nproto.settle = function( previousX ) {\n // keep track of frames where x hasn't moved\n var isResting = !this.isPointerDown &&\n Math.round( this.x * 100 ) == Math.round( previousX * 100 );\n if ( isResting ) {\n this.restingFrames++;\n }\n // stop animating if resting for 3 or more frames\n if ( this.restingFrames > 2 ) {\n this.isAnimating = false;\n delete this.isFreeScrolling;\n // render position with translateX when settled\n this.positionSlider();\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n }\n};\n\nproto.shiftWrapCells = function( x ) {\n // shift before cells\n var beforeGap = this.cursorPosition + x;\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n // shift after cells\n var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n for ( var i = 0; i < cells.length; i++ ) {\n var cell = cells[i];\n var cellShift = gap > 0 ? shift : 0;\n cell.wrapShift( cellShift );\n gap -= cell.size.outerWidth;\n }\n};\n\nproto._unshiftCells = function( cells ) {\n if ( !cells || !cells.length ) {\n return;\n }\n for ( var i = 0; i < cells.length; i++ ) {\n cells[i].wrapShift( 0 );\n }\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n if ( !this.isDraggable || !this.isPointerDown ) {\n return;\n }\n // change the position to drag position by applying force\n var dragVelocity = this.dragX - this.x;\n var dragForce = dragVelocity - this.velocity;\n this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n // do not attract if pointer down or no slides\n var dragDown = this.isDraggable && this.isPointerDown;\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\n return;\n }\n var distance = this.selectedSlide.target * -1 - this.x;\n var force = distance * this.options.selectedAttraction;\n this.applyForce( force );\n};\n\nreturn proto;\n\n} ) );\n","// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'get-size/get-size',\n ], function( getSize ) {\n return factory( window, getSize );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('get-size')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory(\n window,\n window.getSize\n );\n }\n\n}( window, function factory( window, getSize ) {\n\n'use strict';\n\nfunction Cell( elem, parent ) {\n this.element = elem;\n this.parent = parent;\n\n this.create();\n}\n\nvar proto = Cell.prototype;\n\nproto.create = function() {\n this.element.style.position = 'absolute';\n this.element.setAttribute( 'aria-hidden', 'true' );\n this.x = 0;\n this.shift = 0;\n};\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.style.position = '';\n var side = this.parent.originSide;\n this.element.style[ side ] = '';\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.setPosition = function( x ) {\n this.x = x;\n this.updateTarget();\n this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n this.target = this.x + this.size[ marginProperty ] +\n this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n // render position of cell with in slider\n var side = this.parent.originSide;\n this.element.style[ side ] = this.parent.getPositionValue( x );\n};\n\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\n/**\n * @param {Integer} shift - 0, 1, or -1\n */\nproto.wrapShift = function( shift ) {\n this.shift = shift;\n this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n} ) );\n","// drag\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unidragger/unidragger',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unidragger, utils ) {\n return factory( window, Flickity, Unidragger, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unidragger'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.Unidragger,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unidragger, utils ) {\n\n'use strict';\n\n// ----- defaults ----- //\n\nutils.extend( Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3,\n} );\n\n// ----- create ----- //\n\nFlickity.createMethods.push('_createDrag');\n\n// -------------------------- drag prototype -------------------------- //\n\nvar proto = Flickity.prototype;\nutils.extend( proto, Unidragger.prototype );\nproto._touchActionValue = 'pan-y';\n\n// -------------------------- -------------------------- //\n\nvar isTouch = 'createTouch' in document;\nvar isTouchmoveScrollCanceled = false;\n\nproto._createDrag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n // TODO updateDraggable on resize? if groupCells & slides change\n // HACK - add seemingly innocuous handler to fix iOS 10 scroll behavior\n // #457, RubaXa/Sortable#973\n if ( isTouch && !isTouchmoveScrollCanceled ) {\n window.addEventListener( 'touchmove', function() {} );\n isTouchmoveScrollCanceled = true;\n }\n};\n\nproto.onActivateDrag = function() {\n this.handles = [ this.viewport ];\n this.bindHandles();\n this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n // disable dragging if less than 2 slides. #278\n if ( this.options.draggable == '>1' ) {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n if ( this.isDraggable ) {\n this.element.classList.add('is-draggable');\n } else {\n this.element.classList.remove('is-draggable');\n }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n this.options.draggable = true;\n this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n this.options.draggable = false;\n this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n if ( !this.isDraggable ) {\n this._pointerDownDefault( event, pointer );\n return;\n }\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n\n this._pointerDownPreventDefault( event );\n this.pointerDownFocus( event );\n // blur\n if ( document.activeElement != this.element ) {\n // do not blur if already focused\n this.pointerDownBlur();\n }\n\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener( 'scroll', this );\n\n this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n // bind move and end events\n this._bindPostStartEvents( event );\n this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n INPUT: true,\n TEXTAREA: true,\n SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isFocusNode ) {\n this.focus();\n }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n var isTouchStart = event.type == 'touchstart';\n var isTouchPointer = event.pointerType == 'touch';\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n event.preventDefault();\n }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) {\n return;\n }\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n var direction = this.options.rightToLeft ? -1 : 1;\n if ( this.options.wrapAround ) {\n // wrap around move. #589\n moveVector.x %= this.slideableWidth;\n }\n var dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.options.wrapAround && this.slides.length ) {\n // slow drag\n var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n\n this.dragMoveTime = new Date();\n this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n if ( this.options.freeScroll ) {\n this.isFreeScrolling = true;\n }\n // set selectedIndex based on where flick will end up\n var index = this.dragEndRestingSelect();\n\n if ( this.options.freeScroll && !this.options.wrapAround ) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n var restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // TODO refactor this, selecting here feels weird\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.options.wrapAround;\n this.select( index );\n delete this.isDragSelect;\n this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n var restingX = this.getRestingPosition();\n // how far away from selected slide\n var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n var positiveResting = this._getClosestResting( restingX, distance, 1 );\n var negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n var index = positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n return index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n var index = this.selectedIndex;\n var minDistance = Infinity;\n var condition = this.options.contain && !this.options.wrapAround ?\n // if contain, keep going if distance is equal to minDistance\n function( dist, minDist ) {\n return dist <= minDist;\n } : function( dist, minDist ) {\n return dist < minDist;\n };\n while ( condition( distance, minDistance ) ) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance( -restingX, index );\n if ( distance === null ) {\n break;\n }\n distance = Math.abs( distance );\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment,\n };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x - horizontal position\n * @param {Integer} index - slide index\n * @returns {Number} - slide distance\n */\nproto.getSlideDistance = function( x, index ) {\n var len = this.slides.length;\n // wrap around if at least 2 slides\n var isWrapAround = this.options.wrapAround && len > 1;\n var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n var slide = this.slides[ slideIndex ];\n if ( !slide ) {\n return null;\n }\n // add distance for wrap-around slides\n var wrap = isWrapAround ? this.slideableWidth * Math.floor( index/len ) : 0;\n return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n // do not boost if no previousDragX or dragMoveTime\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100 ) {\n return 0;\n }\n\n var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n var delta = this.previousDragX - this.dragX;\n if ( distance > 0 && delta > 0 ) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if ( distance < 0 && delta < 0 ) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n};\n\n// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n // get clickedCell, if cell was clicked\n var clickedCell = this.getParentCell( event.target );\n var cellElem = clickedCell && clickedCell.element;\n var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n var scroll = getScrollPosition();\n var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n this._pointerDone();\n }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset,\n };\n}\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","// Flickity main\n/* eslint-disable max-params */\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './cell',\n './slide',\n './animate',\n ], function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./cell'),\n require('./slide'),\n require('./animate')\n );\n } else {\n // browser global\n var _Flickity = window.Flickity;\n\n window.Flickity = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n _Flickity.Cell,\n _Flickity.Slide,\n _Flickity.animatePrototype\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize,\n utils, Cell, Slide, animatePrototype ) {\n\n/* eslint-enable max-params */\n'use strict';\n\n// vars\nvar jQuery = window.jQuery;\nvar getComputedStyle = window.getComputedStyle;\nvar console = window.console;\n\nfunction moveElements( elems, toElem ) {\n elems = utils.makeArray( elems );\n while ( elems.length ) {\n toElem.appendChild( elems.shift() );\n }\n}\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Flickity intances\nvar instances = {};\n\nfunction Flickity( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if ( this.element.flickityGUID ) {\n var instance = instances[ this.element.flickityGUID ];\n if ( instance ) instance.option( options );\n return instance;\n }\n\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // kick things off\n this._create();\n}\n\nFlickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075, // friction when free-scrolling\n friction: 0.28, // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true,\n // watchCSS: false,\n // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.createMethods = [];\n\nvar proto = Flickity.prototype;\n// inherit EventEmitter\nutils.extend( proto, EvEmitter.prototype );\n\nproto._create = function() {\n // add id for Flickity.data\n var id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n instances[ id ] = this; // associate via id\n // initial properties\n this.selectedIndex = 0;\n // how many frames slider has been in same position\n this.restingFrames = 0;\n // initial physics properties\n this.x = 0;\n this.velocity = 0;\n this.originSide = this.options.rightToLeft ? 'right' : 'left';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n\n if ( this.options.resize || this.options.watchCSS ) {\n window.addEventListener( 'resize', this );\n }\n\n // add listeners from on option\n for ( var eventName in this.options.on ) {\n var listener = this.options.on[ eventName ];\n this.on( eventName, listener );\n }\n\n Flickity.createMethods.forEach( function( method ) {\n this[ method ]();\n }, this );\n\n if ( this.options.watchCSS ) {\n this.watchCSS();\n } else {\n this.activate();\n }\n\n};\n\n/**\n * set options\n * @param {Object} opts - options to extend\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\nproto.activate = function() {\n if ( this.isActive ) {\n return;\n }\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n if ( this.options.rightToLeft ) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize();\n // move initial cell elements so they can be loaded as cells\n var cellElems = this._filterFindCellElements( this.element.children );\n moveElements( cellElems, this.slider );\n this.viewport.appendChild( this.slider );\n this.element.appendChild( this.viewport );\n // get cells from children\n this.reloadCells();\n\n if ( this.options.accessibility ) {\n // allow element to focusable\n this.element.tabIndex = 0;\n // listen for key presses\n this.element.addEventListener( 'keydown', this );\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex();\n // flag for initial activation, for using initialIndex\n this.isInitActivated = true;\n // ready event. #493\n this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n // slider element does all the positioning\n var slider = document.createElement('div');\n slider.className = 'flickity-slider';\n slider.style[ this.originSide ] = 0;\n this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n // collection of item elements\n this.cells = this._makeCells( this.slider.children );\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {[Array, NodeList, HTMLElement]} elems - elements to make into cells\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n var cellElems = this._filterFindCellElements( elems );\n\n // create new Flickity for collection\n var cells = cellElems.map( function( cellElem ) {\n return new Cell( cellElem, this );\n }, this );\n\n return cells;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n // size all cells\n this._sizeCells( this.cells );\n // position all cells\n this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n index = index || 0;\n // also measure maxCellHeight\n // start 0 if positioning all cells\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n var cellX = 0;\n // get cellX\n if ( index > 0 ) {\n var startCell = this.cells[ index - 1 ];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n var len = this.cells.length;\n for ( var i = index; i < len; i++ ) {\n var cell = this.cells[i];\n cell.setPosition( cellX );\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n }\n // keep track of cellX for wrap-around\n this.slideableWidth = cellX;\n // slides\n this.updateSlides();\n // contain slides target\n this._containSlides();\n // update slidesWidth\n this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells - cells to size\n */\nproto._sizeCells = function( cells ) {\n cells.forEach( function( cell ) {\n cell.getSize();\n } );\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) {\n return;\n }\n\n var slide = new Slide( this );\n this.slides.push( slide );\n var isOriginLeft = this.originSide == 'left';\n var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n var canCellFit = this._getCanCellFit();\n\n this.cells.forEach( function( cell, i ) {\n // just add cell if first cell in slide\n if ( !slide.cells.length ) {\n slide.addCell( cell );\n return;\n }\n\n var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ nextMargin ] );\n\n if ( canCellFit.call( this, i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( this );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n }, this );\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n var groupCells = this.options.groupCells;\n if ( !groupCells ) {\n return function() {\n return false;\n };\n } else if ( typeof groupCells == 'number' ) {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n var number = parseInt( groupCells, 10 );\n return function( i ) {\n return ( i % number ) !== 0;\n };\n }\n // default, group by width of slide\n // parse '75%\n var percentMatch = typeof groupCells == 'string' &&\n groupCells.match( /^(\\d+)%$/ );\n var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\n return function( i, slideWidth ) {\n /* eslint-disable-next-line no-invalid-this */\n return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\n };\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n this.positionCells();\n this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nvar cellAlignShorthands = {\n // cell align, then based on origin side\n center: {\n left: 0.5,\n right: 0.5,\n },\n left: {\n left: 0,\n right: 1,\n },\n right: {\n right: 0,\n left: 1,\n },\n};\n\nproto.setCellAlign = function() {\n var shorthand = cellAlignShorthands[ this.options.cellAlign ];\n this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\n};\n\nproto.setGallerySize = function() {\n if ( this.options.setGallerySize ) {\n var height = this.options.adaptiveHeight && this.selectedSlide ?\n this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = height + 'px';\n }\n};\n\nproto._getWrapShiftCells = function() {\n // only for wrap-around\n if ( !this.options.wrapAround ) {\n return;\n }\n // unshift previous cells\n this._unshiftCells( this.beforeShiftCells );\n this._unshiftCells( this.afterShiftCells );\n // get before cells\n // initial gap\n var gapX = this.cursorPosition;\n var cellIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\n // get after cells\n // ending gap between last cell and end of gallery viewport\n gapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n // keep adding cells until the cover the initial gap\n var cells = [];\n while ( gapX > 0 ) {\n var cell = this.cells[ cellIndex ];\n if ( !cell ) {\n break;\n }\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n};\n\n// ----- contain ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\n return;\n }\n var isRightToLeft = this.options.rightToLeft;\n var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\n // content is less than gallery size\n var isContentSmaller = contentWidth < this.size.innerWidth;\n // bounds\n var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\n var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n // contain each cell target\n this.slides.forEach( function( slide ) {\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n slide.target = contentWidth * this.cellAlign;\n } else {\n // contain to bounds\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.target, endBound );\n }\n }, this );\n};\n\n// ----- ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery && this.$element ) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n var $event = type;\n if ( event ) {\n // create jQuery event\n var jQEvent = new jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n }\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n if ( !this.isActive ) {\n return;\n }\n index = parseInt( index, 10 );\n this._wrapSelect( index );\n\n if ( this.options.wrapAround || isWrap ) {\n index = utils.modulo( index, this.slides.length );\n }\n // bail if invalid index\n if ( !this.slides[ index ] ) {\n return;\n }\n var prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n if ( isInstant ) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n if ( this.options.adaptiveHeight ) {\n this.setGallerySize();\n }\n // events\n this.dispatchEvent( 'select', null, [ index ] );\n // change event if new index\n if ( index != prevIndex ) {\n this.dispatchEvent( 'change', null, [ index ] );\n }\n // old v1 event name, remove in v3\n this.dispatchEvent('cellSelect');\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n var len = this.slides.length;\n var isWrapping = this.options.wrapAround && len > 1;\n if ( !isWrapping ) {\n return index;\n }\n var wrapIndex = utils.modulo( index, len );\n // go to shortest\n var delta = Math.abs( wrapIndex - this.selectedIndex );\n var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\n var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\n if ( !this.isDragSelect && backWrapDelta < delta ) {\n index += len;\n } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\n index -= len;\n }\n // wrap position so slider is within normal area\n if ( index < 0 ) {\n this.x -= this.slideableWidth;\n } else if ( index >= len ) {\n this.x += this.slideableWidth;\n }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n var slide = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) {\n return;\n }\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n // Remove in v3?\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) {\n this.selectedSlide.unselect();\n }\n};\n\nproto.selectInitialIndex = function() {\n var initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if ( this.isInitActivated ) {\n this.select( this.selectedIndex, false, true );\n return;\n }\n // select with selector string\n if ( initialIndex && typeof initialIndex == 'string' ) {\n var cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n var index = 0;\n // select with number\n if ( initialIndex && this.slides[ initialIndex ] ) {\n index = initialIndex;\n }\n // select instantly\n this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, Number]} value - zero-based index or element to select\n * @param {Boolean} isWrap - enables wrapping around for extra index\n * @param {Boolean} isInstant - disables slide animation\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n // get cell\n var cell = this.queryCell( value );\n if ( !cell ) {\n return;\n }\n\n var index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slides that has cell\n for ( var i = 0; i < this.slides.length; i++ ) {\n var slide = this.slides[i];\n var index = slide.cells.indexOf( cell );\n if ( index != -1 ) {\n return i;\n }\n }\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem - matching cell element\n * @returns {Flickity.Cell} cell - matching cell\n */\nproto.getCell = function( elem ) {\n // loop through cells to get the one that matches\n for ( var i = 0; i < this.cells.length; i++ ) {\n var cell = this.cells[i];\n if ( cell.element == elem ) {\n return cell;\n }\n }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {[Element, Array, NodeList]} elems - multiple elements\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n elems = utils.makeArray( elems );\n var cells = [];\n elems.forEach( function( elem ) {\n var cell = this.getCell( elem );\n if ( cell ) {\n cells.push( cell );\n }\n }, this );\n return cells;\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n } );\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem - child element\n * @returns {Flickit.Cell} cell - parent cell\n */\nproto.getParentCell = function( elem ) {\n // first check if elem is cell\n var cell = this.getCell( elem );\n if ( cell ) {\n return cell;\n }\n // try to get parent cell elem\n elem = utils.getParent( elem, '.flickity-slider > *' );\n return this.getCell( elem );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n if ( !adjCount ) {\n return this.selectedSlide.getCellElements();\n }\n index = index === undefined ? this.selectedIndex : index;\n\n var len = this.slides.length;\n if ( 1 + ( adjCount * 2 ) >= len ) {\n return this.getCellElements();\n }\n\n var cellElems = [];\n for ( var i = index - adjCount; i <= index + adjCount; i++ ) {\n var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\n var slide = this.slides[ slideIndex ];\n if ( slide ) {\n cellElems = cellElems.concat( slide.getCellElements() );\n }\n }\n return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, String, Number]} selector - element, selector string, or index\n * @returns {Flickity.Cell} - matching cell\n */\nproto.queryCell = function( selector ) {\n if ( typeof selector == 'number' ) {\n // use number as index\n return this.cells[ selector ];\n }\n if ( typeof selector == 'string' ) {\n // do not select invalid selectors from hash: #123, #/. #791\n if ( selector.match( /^[#.]?[\\d/]/ ) ) {\n return;\n }\n // use string as selector, get element\n selector = this.element.querySelector( selector );\n }\n // get cell from element\n return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n this.emitEvent('uiChange');\n};\n\n// keep focus on element when child UI elements are clicked\nproto.childUIPointerDown = function( event ) {\n // HACK iOS does not allow touch events to bubble up?!\n if ( event.type != 'touchstart' ) {\n event.preventDefault();\n }\n this.focus();\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n this.watchCSS();\n this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n if ( !this.isActive ) {\n return;\n }\n this.getSize();\n // wrap values\n if ( this.options.wrapAround ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n var selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n var watchOption = this.options.watchCSS;\n if ( !watchOption ) {\n return;\n }\n\n var afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.indexOf('flickity') != -1 ) {\n this.activate();\n } else {\n this.deactivate();\n }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n // only work if element is in focus\n var isNotFocused = document.activeElement && document.activeElement != this.element;\n if ( !this.options.accessibility || isNotFocused ) {\n return;\n }\n\n var handler = Flickity.keyboardHandlers[ event.keyCode ];\n if ( handler ) {\n handler.call( this );\n }\n};\n\nFlickity.keyboardHandlers = {\n // left arrow\n 37: function() {\n var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this.uiChange();\n this[ leftMethod ]();\n },\n // right arrow\n 39: function() {\n var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this.uiChange();\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n // TODO remove scrollTo once focus options gets more support\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus ...\n // #Browser_compatibility\n var prevScrollY = window.pageYOffset;\n this.element.focus({ preventScroll: true });\n // hack to fix scroll jump after focus, #76\n if ( window.pageYOffset != prevScrollY ) {\n window.scrollTo( window.pageXOffset, prevScrollY );\n }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) {\n return;\n }\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach( function( cell ) {\n cell.destroy();\n } );\n this.element.removeChild( this.viewport );\n // move child elements back into element\n moveElements( this.slider.children, this.element );\n if ( this.options.accessibility ) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener( 'keydown', this );\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n this.deactivate();\n window.removeEventListener( 'resize', this );\n this.allOff();\n this.emitEvent('destroy');\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'flickity' );\n }\n delete this.element.flickityGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nutils.extend( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {[Element, String]} elem - element or selector string\n * @returns {Flickity} - Flickity instance\n */\nFlickity.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.flickityGUID;\n return id && instances[ id ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n jQuery.bridget( 'flickity', Flickity );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n} ) );\n","/*!\n * Flickity v2.2.2\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2021 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n './drag',\n './prev-next-button',\n './page-dots',\n './player',\n './add-remove-cell',\n './lazyload',\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./flickity'),\n require('./drag'),\n require('./prev-next-button'),\n require('./page-dots'),\n require('./player'),\n require('./add-remove-cell'),\n require('./lazyload')\n );\n }\n\n} )( window, function factory( Flickity ) {\n return Flickity;\n} );\n","// lazyload\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n'use strict';\n\nFlickity.createMethods.push('_createLazyload');\nvar proto = Flickity.prototype;\n\nproto._createLazyload = function() {\n this.on( 'select', this.lazyLoad );\n};\n\nproto.lazyLoad = function() {\n var lazyLoad = this.options.lazyLoad;\n if ( !lazyLoad ) {\n return;\n }\n // get adjacent cells, use lazyLoad option for adjacent count\n var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n var cellElems = this.getAdjacentCellElements( adjCount );\n // get lazy images in those cells\n var lazyImages = [];\n cellElems.forEach( function( cellElem ) {\n var lazyCellImages = getCellLazyImages( cellElem );\n lazyImages = lazyImages.concat( lazyCellImages );\n } );\n // load lazy images\n lazyImages.forEach( function( img ) {\n new LazyLoader( img, this );\n }, this );\n};\n\nfunction getCellLazyImages( cellElem ) {\n // check if cell element is lazy image\n if ( cellElem.nodeName == 'IMG' ) {\n var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n if ( lazyloadAttr || srcAttr || srcsetAttr ) {\n return [ cellElem ];\n }\n }\n // select lazy images in cell\n var lazySelector = 'img[data-flickity-lazyload], ' +\n 'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n var imgs = cellElem.querySelectorAll( lazySelector );\n return utils.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n * @param {Image} img - Image element\n * @param {Flickity} flickity - Flickity instance\n */\nfunction LazyLoader( img, flickity ) {\n this.img = img;\n this.flickity = flickity;\n this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n // get src & srcset\n var src = this.img.getAttribute('data-flickity-lazyload') ||\n this.img.getAttribute('data-flickity-lazyload-src');\n var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n // set src & serset\n this.img.src = src;\n if ( srcset ) {\n this.img.setAttribute( 'srcset', srcset );\n }\n // remove attr\n this.img.removeAttribute('data-flickity-lazyload');\n this.img.removeAttribute('data-flickity-lazyload-src');\n this.img.removeAttribute('data-flickity-lazyload-srcset');\n};\n\nLazyLoader.prototype.onload = function( event ) {\n this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n // unbind events\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n\n var cell = this.flickity.getParentCell( this.img );\n var cellElem = cell && cell.element;\n this.flickity.cellSizeChange( cellElem );\n\n this.img.classList.add( className );\n this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// ----- ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n} ) );\n","// page dots\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n'use strict';\n\nfunction PageDots( parent ) {\n this.parent = parent;\n this._create();\n}\n\nPageDots.prototype = Object.create( Unipointer.prototype );\n\nPageDots.prototype._create = function() {\n // create holder element\n this.holder = document.createElement('ol');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n // events\n this.handleClick = this.onClick.bind( this );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n this.setDots();\n this.holder.addEventListener( 'click', this.handleClick );\n this.bindStartEvent( this.holder );\n // add to DOM\n this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n this.holder.removeEventListener( 'click', this.handleClick );\n this.unbindStartEvent( this.holder );\n // remove from DOM\n this.parent.element.removeChild( this.holder );\n};\n\nPageDots.prototype.setDots = function() {\n // get difference between number of slides and number of dots\n var delta = this.parent.slides.length - this.dots.length;\n if ( delta > 0 ) {\n this.addDots( delta );\n } else if ( delta < 0 ) {\n this.removeDots( -delta );\n }\n};\n\nPageDots.prototype.addDots = function( count ) {\n var fragment = document.createDocumentFragment();\n var newDots = [];\n var length = this.dots.length;\n var max = length + count;\n\n for ( var i = length; i < max; i++ ) {\n var dot = document.createElement('li');\n dot.className = 'dot';\n dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\n fragment.appendChild( dot );\n newDots.push( dot );\n }\n\n this.holder.appendChild( fragment );\n this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n // remove from this.dots collection\n var removeDots = this.dots.splice( this.dots.length - count, count );\n // remove from DOM\n removeDots.forEach( function( dot ) {\n this.holder.removeChild( dot );\n }, this );\n};\n\nPageDots.prototype.updateSelected = function() {\n // remove selected class on previous\n if ( this.selectedDot ) {\n this.selectedDot.className = 'dot';\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if ( !this.dots.length ) {\n return;\n }\n this.selectedDot = this.dots[ this.parent.selectedIndex ];\n this.selectedDot.className = 'dot is-selected';\n this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nPageDots.prototype.onTap = // old method name, backwards-compatible\nPageDots.prototype.onClick = function( event ) {\n var target = event.target;\n // only care about dot clicks\n if ( target.nodeName != 'LI' ) {\n return;\n }\n\n this.parent.uiChange();\n var index = this.dots.indexOf( target );\n this.parent.select( index );\n};\n\nPageDots.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pageDots: true,\n} );\n\nFlickity.createMethods.push('_createPageDots');\n\nvar proto = Flickity.prototype;\n\nproto._createPageDots = function() {\n if ( !this.options.pageDots ) {\n return;\n }\n this.pageDots = new PageDots( this );\n // events\n this.on( 'activate', this.activatePageDots );\n this.on( 'select', this.updateSelectedPageDots );\n this.on( 'cellChange', this.updatePageDots );\n this.on( 'resize', this.updatePageDots );\n this.on( 'deactivate', this.deactivatePageDots );\n};\n\nproto.activatePageDots = function() {\n this.pageDots.activate();\n};\n\nproto.updateSelectedPageDots = function() {\n this.pageDots.updateSelected();\n};\n\nproto.updatePageDots = function() {\n this.pageDots.setDots();\n};\n\nproto.deactivatePageDots = function() {\n this.pageDots.deactivate();\n};\n\n// ----- ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n} ) );\n","// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'fizzy-ui-utils/utils',\n './flickity',\n ], function( EvEmitter, utils, Flickity ) {\n return factory( EvEmitter, utils, Flickity );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('ev-emitter'),\n require('fizzy-ui-utils'),\n require('./flickity')\n );\n } else {\n // browser global\n factory(\n window.EvEmitter,\n window.fizzyUIUtils,\n window.Flickity\n );\n }\n\n}( window, function factory( EvEmitter, utils, Flickity ) {\n\n'use strict';\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( parent ) {\n this.parent = parent;\n this.state = 'stopped';\n // visibility change event handler\n this.onVisibilityChange = this.visibilityChange.bind( this );\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\nPlayer.prototype = Object.create( EvEmitter.prototype );\n\n// start play\nPlayer.prototype.play = function() {\n if ( this.state == 'playing' ) {\n return;\n }\n // do not play if page is hidden, start playing when page is visible\n var isPageHidden = document.hidden;\n if ( isPageHidden ) {\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n return;\n }\n\n this.state = 'playing';\n // listen to visibility change\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n // start ticking\n this.tick();\n};\n\nPlayer.prototype.tick = function() {\n // do not tick if not playing\n if ( this.state != 'playing' ) {\n return;\n }\n\n var time = this.parent.options.autoPlay;\n // default to 3 seconds\n time = typeof time == 'number' ? time : 3000;\n var _this = this;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout( function() {\n _this.parent.next( true );\n _this.tick();\n }, time );\n};\n\nPlayer.prototype.stop = function() {\n this.state = 'stopped';\n this.clear();\n // remove visibility change event\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n if ( this.state == 'playing' ) {\n this.state = 'paused';\n this.clear();\n }\n};\n\nPlayer.prototype.unpause = function() {\n // re-start play if paused\n if ( this.state == 'paused' ) {\n this.play();\n }\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n var isPageHidden = document.hidden;\n this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n this.play();\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pauseAutoPlayOnHover: true,\n} );\n\nFlickity.createMethods.push('_createPlayer');\nvar proto = Flickity.prototype;\n\nproto._createPlayer = function() {\n this.player = new Player( this );\n\n this.on( 'activate', this.activatePlayer );\n this.on( 'uiChange', this.stopPlayer );\n this.on( 'pointerDown', this.stopPlayer );\n this.on( 'deactivate', this.deactivatePlayer );\n};\n\nproto.activatePlayer = function() {\n if ( !this.options.autoPlay ) {\n return;\n }\n this.player.play();\n this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n this.player.play();\n};\n\nproto.stopPlayer = function() {\n this.player.stop();\n};\n\nproto.pausePlayer = function() {\n this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n this.player.stop();\n this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n if ( !this.options.pauseAutoPlayOnHover ) {\n return;\n }\n this.player.pause();\n this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n this.player.unpause();\n this.element.removeEventListener( 'mouseleave', this );\n};\n\n// ----- ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n} ) );\n","// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n'use strict';\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( direction, parent ) {\n this.direction = direction;\n this.parent = parent;\n this._create();\n}\n\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\n\nPrevNextButton.prototype._create = function() {\n // properties\n this.isEnabled = true;\n this.isPrevious = this.direction == -1;\n var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n this.isLeft = this.direction == leftDirection;\n\n var element = this.element = document.createElement('button');\n element.className = 'flickity-button flickity-prev-next-button';\n element.className += this.isPrevious ? ' previous' : ' next';\n // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n element.setAttribute( 'type', 'button' );\n // init as disabled\n this.disable();\n\n element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\n\n // create arrow\n var svg = this.createSVG();\n element.appendChild( svg );\n // events\n this.parent.on( 'select', this.update.bind( this ) );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPrevNextButton.prototype.activate = function() {\n this.bindStartEvent( this.element );\n this.element.addEventListener( 'click', this );\n // add to DOM\n this.parent.element.appendChild( this.element );\n};\n\nPrevNextButton.prototype.deactivate = function() {\n // remove from DOM\n this.parent.element.removeChild( this.element );\n // click events\n this.unbindStartEvent( this.element );\n this.element.removeEventListener( 'click', this );\n};\n\nPrevNextButton.prototype.createSVG = function() {\n var svg = document.createElementNS( svgURI, 'svg' );\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 100 100' );\n var path = document.createElementNS( svgURI, 'path' );\n var pathMovements = getArrowMovements( this.parent.options.arrowShape );\n path.setAttribute( 'd', pathMovements );\n path.setAttribute( 'class', 'arrow' );\n // rotate arrow\n if ( !this.isLeft ) {\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\n }\n svg.appendChild( path );\n return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n // use shape as movement if string\n if ( typeof shape == 'string' ) {\n return shape;\n }\n // create movement string\n return 'M ' + shape.x0 + ',50' +\n ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\n ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\n ' L ' + shape.x3 + ',50 ' +\n ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\n ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\n ' Z';\n}\n\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.parent.uiChange();\n var method = this.isPrevious ? 'previous' : 'next';\n this.parent[ method ]();\n};\n\n// ----- ----- //\n\nPrevNextButton.prototype.enable = function() {\n if ( this.isEnabled ) {\n return;\n }\n this.element.disabled = false;\n this.isEnabled = true;\n};\n\nPrevNextButton.prototype.disable = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.element.disabled = true;\n this.isEnabled = false;\n};\n\nPrevNextButton.prototype.update = function() {\n // index of first or last slide, if previous or next\n var slides = this.parent.slides;\n // enable is wrapAround and at least 2 slides\n if ( this.parent.options.wrapAround && slides.length > 1 ) {\n this.enable();\n return;\n }\n var lastIndex = slides.length ? slides.length - 1 : 0;\n var boundIndex = this.isPrevious ? 0 : lastIndex;\n var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n this[ method ]();\n};\n\nPrevNextButton.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils.extend( Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30,\n },\n} );\n\nFlickity.createMethods.push('_createPrevNextButtons');\nvar proto = Flickity.prototype;\n\nproto._createPrevNextButtons = function() {\n if ( !this.options.prevNextButtons ) {\n return;\n }\n\n this.prevButton = new PrevNextButton( -1, this );\n this.nextButton = new PrevNextButton( 1, this );\n\n this.on( 'activate', this.activatePrevNextButtons );\n};\n\nproto.activatePrevNextButtons = function() {\n this.prevButton.activate();\n this.nextButton.activate();\n this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n this.prevButton.deactivate();\n this.nextButton.deactivate();\n this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// -------------------------- -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n} ) );\n","// slide\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Slide = factory();\n }\n\n}( window, function factory() {\n'use strict';\n\nfunction Slide( parent ) {\n this.parent = parent;\n this.isOriginLeft = parent.originSide == 'left';\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n}\n\nvar proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n this.cells.push( cell );\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max( cell.size.outerHeight, this.height );\n // first cell stuff\n if ( this.cells.length == 1 ) {\n this.x = cell.x; // x comes from first cell\n var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n this.firstMargin = cell.size[ beginMargin ];\n }\n};\n\nproto.updateTarget = function() {\n var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n var lastCell = this.getLastCell();\n var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\n var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n this.cells.forEach( function( cell ) {\n cell.select();\n } );\n};\n\nproto.unselect = function() {\n this.cells.forEach( function( cell ) {\n cell.unselect();\n } );\n};\n\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n } );\n};\n\nreturn Slide;\n\n} ) );\n","/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n});\n","/*!\n * imagesLoaded v4.1.4\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n( function( window, factory ) { 'use strict';\n // universal module definition\n\n /*global define: false, module: false, require: false */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\n );\n } else {\n // browser global\n window.imagesLoaded = factory(\n window,\n window.EvEmitter\n );\n }\n\n})( typeof window !== 'undefined' ? window : this,\n\n// -------------------------- factory -------------------------- //\n\nfunction factory( window, EvEmitter ) {\n\n'use strict';\n\nvar $ = window.jQuery;\nvar console = window.console;\n\n// -------------------------- helpers -------------------------- //\n\n// extend objects\nfunction extend( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n}\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nfunction makeArray( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n}\n\n// -------------------------- imagesLoaded -------------------------- //\n\n/**\n * @param {Array, Element, NodeList, String} elem\n * @param {Object or Function} options - if function, use as callback\n * @param {Function} onAlways - callback function\n */\nfunction ImagesLoaded( elem, options, onAlways ) {\n // coerce ImagesLoaded() without new, to be new ImagesLoaded()\n if ( !( this instanceof ImagesLoaded ) ) {\n return new ImagesLoaded( elem, options, onAlways );\n }\n // use elem as selector string\n var queryElem = elem;\n if ( typeof elem == 'string' ) {\n queryElem = document.querySelectorAll( elem );\n }\n // bail if bad element\n if ( !queryElem ) {\n console.error( 'Bad element for imagesLoaded ' + ( queryElem || elem ) );\n return;\n }\n\n this.elements = makeArray( queryElem );\n this.options = extend( {}, this.options );\n // shift arguments if no options set\n if ( typeof options == 'function' ) {\n onAlways = options;\n } else {\n extend( this.options, options );\n }\n\n if ( onAlways ) {\n this.on( 'always', onAlways );\n }\n\n this.getImages();\n\n if ( $ ) {\n // add jQuery Deferred object\n this.jqDeferred = new $.Deferred();\n }\n\n // HACK check async to allow time to bind listeners\n setTimeout( this.check.bind( this ) );\n}\n\nImagesLoaded.prototype = Object.create( EvEmitter.prototype );\n\nImagesLoaded.prototype.options = {};\n\nImagesLoaded.prototype.getImages = function() {\n this.images = [];\n\n // filter & find items if we have an item selector\n this.elements.forEach( this.addElementImages, this );\n};\n\n/**\n * @param {Node} element\n */\nImagesLoaded.prototype.addElementImages = function( elem ) {\n // filter siblings\n if ( elem.nodeName == 'IMG' ) {\n this.addImage( elem );\n }\n // get background image on element\n if ( this.options.background === true ) {\n this.addElementBackgroundImages( elem );\n }\n\n // find children\n // no non-element nodes, #143\n var nodeType = elem.nodeType;\n if ( !nodeType || !elementNodeTypes[ nodeType ] ) {\n return;\n }\n var childImgs = elem.querySelectorAll('img');\n // concat childElems to filterFound array\n for ( var i=0; i < childImgs.length; i++ ) {\n var img = childImgs[i];\n this.addImage( img );\n }\n\n // get child background images\n if ( typeof this.options.background == 'string' ) {\n var children = elem.querySelectorAll( this.options.background );\n for ( i=0; i < children.length; i++ ) {\n var child = children[i];\n this.addElementBackgroundImages( child );\n }\n }\n};\n\nvar elementNodeTypes = {\n 1: true,\n 9: true,\n 11: true\n};\n\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n return;\n }\n // get url inside url(\"...\")\n var reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n var matches = reURL.exec( style.backgroundImage );\n while ( matches !== null ) {\n var url = matches && matches[2];\n if ( url ) {\n this.addBackground( url, elem );\n }\n matches = reURL.exec( style.backgroundImage );\n }\n};\n\n/**\n * @param {Image} img\n */\nImagesLoaded.prototype.addImage = function( img ) {\n var loadingImage = new LoadingImage( img );\n this.images.push( loadingImage );\n};\n\nImagesLoaded.prototype.addBackground = function( url, elem ) {\n var background = new Background( url, elem );\n this.images.push( background );\n};\n\nImagesLoaded.prototype.check = function() {\n var _this = this;\n this.progressedCount = 0;\n this.hasAnyBroken = false;\n // complete if no images\n if ( !this.images.length ) {\n this.complete();\n return;\n }\n\n function onProgress( image, elem, message ) {\n // HACK - Chrome triggers event before object properties have changed. #83\n setTimeout( function() {\n _this.progress( image, elem, message );\n });\n }\n\n this.images.forEach( function( loadingImage ) {\n loadingImage.once( 'progress', onProgress );\n loadingImage.check();\n });\n};\n\nImagesLoaded.prototype.progress = function( image, elem, message ) {\n this.progressedCount++;\n this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\n // progress event\n this.emitEvent( 'progress', [ this, image, elem ] );\n if ( this.jqDeferred && this.jqDeferred.notify ) {\n this.jqDeferred.notify( this, image );\n }\n // check if completed\n if ( this.progressedCount == this.images.length ) {\n this.complete();\n }\n\n if ( this.options.debug && console ) {\n console.log( 'progress: ' + message, image, elem );\n }\n};\n\nImagesLoaded.prototype.complete = function() {\n var eventName = this.hasAnyBroken ? 'fail' : 'done';\n this.isComplete = true;\n this.emitEvent( eventName, [ this ] );\n this.emitEvent( 'always', [ this ] );\n if ( this.jqDeferred ) {\n var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\n this.jqDeferred[ jqMethod ]( this );\n }\n};\n\n// -------------------------- -------------------------- //\n\nfunction LoadingImage( img ) {\n this.img = img;\n}\n\nLoadingImage.prototype = Object.create( EvEmitter.prototype );\n\nLoadingImage.prototype.check = function() {\n // If complete is true and browser supports natural sizes,\n // try to check for image status manually.\n var isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n // report based on naturalWidth\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n return;\n }\n\n // If none of the checks above matched, simulate loading on detached element.\n this.proxyImage = new Image();\n this.proxyImage.addEventListener( 'load', this );\n this.proxyImage.addEventListener( 'error', this );\n // bind to image as well for Firefox. #191\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.proxyImage.src = this.img.src;\n};\n\nLoadingImage.prototype.getIsImageComplete = function() {\n // check for non-zero, non-undefined naturalWidth\n // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671\n return this.img.complete && this.img.naturalWidth;\n};\n\nLoadingImage.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n this.emitEvent( 'progress', [ this, this.img, message ] );\n};\n\n// ----- events ----- //\n\n// trigger specified handler for event type\nLoadingImage.prototype.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nLoadingImage.prototype.onload = function() {\n this.confirm( true, 'onload' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.onerror = function() {\n this.confirm( false, 'onerror' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.unbindEvents = function() {\n this.proxyImage.removeEventListener( 'load', this );\n this.proxyImage.removeEventListener( 'error', this );\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\n// -------------------------- Background -------------------------- //\n\nfunction Background( url, element ) {\n this.url = url;\n this.element = element;\n this.img = new Image();\n}\n\n// inherit LoadingImage prototype\nBackground.prototype = Object.create( LoadingImage.prototype );\n\nBackground.prototype.check = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.img.src = this.url;\n // check if image is already complete\n var isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n this.unbindEvents();\n }\n};\n\nBackground.prototype.unbindEvents = function() {\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\nBackground.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n this.emitEvent( 'progress', [ this, this.element, message ] );\n};\n\n// -------------------------- jQuery -------------------------- //\n\nImagesLoaded.makeJQueryPlugin = function( jQuery ) {\n jQuery = jQuery || window.jQuery;\n if ( !jQuery ) {\n return;\n }\n // set local variable\n $ = jQuery;\n // $().imagesLoaded()\n $.fn.imagesLoaded = function( options, callback ) {\n var instance = new ImagesLoaded( this, options, callback );\n return instance.jqDeferred.promise( $(this) );\n };\n};\n// try making plugin\nImagesLoaded.makeJQueryPlugin();\n\n// -------------------------- -------------------------- //\n\nreturn ImagesLoaded;\n\n});\n","/*!\n * hoverIntent v1.10.1 // 2019.10.05 // jQuery v1.7.0+\n * http://briancherne.github.io/jquery-hoverIntent/\n *\n * You may use hoverIntent under the terms of the MIT license. Basically that\n * means you are free to use hoverIntent as long as this header is left intact.\n * Copyright 2007-2019 Brian Cherne\n */\n\n/**\n * hoverIntent is similar to jQuery's built-in \"hover\" method except that\n * instead of firing the handlerIn function immediately, hoverIntent checks\n * to see if the user's mouse has slowed down (beneath the sensitivity\n * threshold) before firing the event. The handlerOut function is only\n * called after a matching handlerIn.\n *\n * // basic usage ... just like .hover()\n * .hoverIntent( handlerIn, handlerOut )\n * .hoverIntent( handlerInOut )\n *\n * // basic usage ... with event delegation!\n * .hoverIntent( handlerIn, handlerOut, selector )\n * .hoverIntent( handlerInOut, selector )\n *\n * // using a basic configuration object\n * .hoverIntent( config )\n *\n * @param handlerIn function OR configuration object\n * @param handlerOut function OR selector for delegation OR undefined\n * @param selector selector OR undefined\n * @author Brian Cherne \n */\n\n;(function(factory) {\n 'use strict';\n if (typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = factory(require('jquery'));\n } else if (jQuery && !jQuery.fn.hoverIntent) {\n factory(jQuery);\n }\n})(function($) {\n 'use strict';\n\n // default configuration values\n var _cfg = {\n interval: 100,\n sensitivity: 6,\n timeout: 0\n };\n\n // counter used to generate an ID for each instance\n var INSTANCE_COUNT = 0;\n\n // current X and Y position of mouse, updated during mousemove tracking (shared across instances)\n var cX, cY;\n\n // saves the current pointer position coordinates based on the given mousemove event\n var track = function(ev) {\n cX = ev.pageX;\n cY = ev.pageY;\n };\n\n // compares current and previous mouse positions\n var compare = function(ev,$el,s,cfg) {\n // compare mouse positions to see if pointer has slowed enough to trigger `over` function\n if ( Math.sqrt( (s.pX-cX)*(s.pX-cX) + (s.pY-cY)*(s.pY-cY) ) < cfg.sensitivity ) {\n $el.off(s.event,track);\n delete s.timeoutId;\n // set hoverIntent state as active for this element (permits `out` handler to trigger)\n s.isActive = true;\n // overwrite old mouseenter event coordinates with most recent pointer position\n ev.pageX = cX; ev.pageY = cY;\n // clear coordinate data from state object\n delete s.pX; delete s.pY;\n return cfg.over.apply($el[0],[ev]);\n } else {\n // set previous coordinates for next comparison\n s.pX = cX; s.pY = cY;\n // use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs)\n s.timeoutId = setTimeout( function(){compare(ev, $el, s, cfg);} , cfg.interval );\n }\n };\n\n // triggers given `out` function at configured `timeout` after a mouseleave and clears state\n var delay = function(ev,$el,s,out) {\n var data = $el.data('hoverIntent');\n if (data) {\n delete data[s.id];\n }\n return out.apply($el[0],[ev]);\n };\n\n $.fn.hoverIntent = function(handlerIn,handlerOut,selector) {\n // instance ID, used as a key to store and retrieve state information on an element\n var instanceId = INSTANCE_COUNT++;\n\n // extend the default configuration and parse parameters\n var cfg = $.extend({}, _cfg);\n if ( $.isPlainObject(handlerIn) ) {\n cfg = $.extend(cfg, handlerIn);\n if ( !$.isFunction(cfg.out) ) {\n cfg.out = cfg.over;\n }\n } else if ( $.isFunction(handlerOut) ) {\n cfg = $.extend(cfg, { over: handlerIn, out: handlerOut, selector: selector } );\n } else {\n cfg = $.extend(cfg, { over: handlerIn, out: handlerIn, selector: handlerOut } );\n }\n\n // A private function for handling mouse 'hovering'\n var handleHover = function(e) {\n // cloned event to pass to handlers (copy required for event object to be passed in IE)\n var ev = $.extend({},e);\n\n // the current target of the mouse event, wrapped in a jQuery object\n var $el = $(this);\n\n // read hoverIntent data from element (or initialize if not present)\n var hoverIntentData = $el.data('hoverIntent');\n if (!hoverIntentData) { $el.data('hoverIntent', (hoverIntentData = {})); }\n\n // read per-instance state from element (or initialize if not present)\n var state = hoverIntentData[instanceId];\n if (!state) { hoverIntentData[instanceId] = state = { id: instanceId }; }\n\n // state properties:\n // id = instance ID, used to clean up data\n // timeoutId = timeout ID, reused for tracking mouse position and delaying \"out\" handler\n // isActive = plugin state, true after `over` is called just until `out` is called\n // pX, pY = previously-measured pointer coordinates, updated at each polling interval\n // event = string representing the namespaced event used for mouse tracking\n\n // clear any existing timeout\n if (state.timeoutId) { state.timeoutId = clearTimeout(state.timeoutId); }\n\n // namespaced event used to register and unregister mousemove tracking\n var mousemove = state.event = 'mousemove.hoverIntent.hoverIntent'+instanceId;\n\n // handle the event, based on its type\n if (e.type === 'mouseenter') {\n // do nothing if already active\n if (state.isActive) { return; }\n // set \"previous\" X and Y position based on initial entry point\n state.pX = ev.pageX; state.pY = ev.pageY;\n // update \"current\" X and Y position based on mousemove\n $el.off(mousemove,track).on(mousemove,track);\n // start polling interval (self-calling timeout) to compare mouse coordinates over time\n state.timeoutId = setTimeout( function(){compare(ev,$el,state,cfg);} , cfg.interval );\n } else { // \"mouseleave\"\n // do nothing if not already active\n if (!state.isActive) { return; }\n // unbind expensive mousemove event\n $el.off(mousemove,track);\n // if hoverIntent state is true, then call the mouseOut function after the specified delay\n state.timeoutId = setTimeout( function(){delay(ev,$el,state,cfg.out);} , cfg.timeout );\n }\n };\n\n // listen for mouseenter and mouseleave\n return this.on({'mouseenter.hoverIntent':handleHover,'mouseleave.hoverIntent':handleHover}, cfg.selector);\n };\n});\n","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && typeof btoa !== 'undefined') {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of