{"version":3,"sources":["webpack:///global-bundle.js","webpack:///webpack/bootstrap 552da664eb6c1f0ea980","webpack:///(webpack)/buildin/global.js","webpack:///./Static/javascript/modules/constants.ts","webpack:///./Static/javascript/modules/nodelist-to-array.ts","webpack:///./Static/javascript/modules/lock-body.ts","webpack:///./node_modules/get-size/get-size.js","webpack:///./node_modules/a11y-dialog/a11y-dialog.js","webpack:///./node_modules/ev-emitter/ev-emitter.js","webpack:///./node_modules/swiper/dist/js/swiper.esm.bundle.js","webpack:///./Static/javascript/common/global.ts","webpack:///./node_modules/string.prototype.endswith/endswith.js","webpack:///./Static/javascript/modules/svg-injection.ts","webpack:///./Static/javascript/modules/login-state.ts","webpack:///./Static/javascript/modules/hide-elements.ts","webpack:///./Static/javascript/modules/show-elements.ts","webpack:///./Static/javascript/modules/sticky-header.ts","webpack:///./Static/javascript/modules/curtain-menu.ts","webpack:///./Static/javascript/modules/aria-click-toggling.ts","webpack:///./Static/javascript/modules/ie-desaturate.ts","webpack:///./Static/javascript/modules/alert-message.ts","webpack:///./node_modules/isomorphic-fetch/fetch-npm-browserify.js","webpack:///./node_modules/whatwg-fetch/fetch.js","webpack:///./node_modules/es6-promise/dist/es6-promise.js","webpack:///./node_modules/process/browser.js","webpack:///./Lib/Lib-Javascript/accordion/accordions.ts","webpack:///./Static/javascript/modules/date-listing-block.ts","webpack:///./Static/javascript/modules/publicity-image-block.ts","webpack:///./node_modules/element-closest/element-closest.js","webpack:///./Static/javascript/modules/subs-toggle-hidden.ts","webpack:///./Static/javascript/modules/scrollspy-navbar.ts","webpack:///./Static/javascript/vendor/gumshoe.js","webpack:///./node_modules/smooth-scroll/dist/js/smooth-scroll.min.js","webpack:///./Static/javascript/modules/multimedia-layout.ts","webpack:///./node_modules/masonry-layout/masonry.js","webpack:///./node_modules/outlayer/outlayer.js","webpack:///./node_modules/fizzy-ui-utils/utils.js","webpack:///./node_modules/desandro-matches-selector/matches-selector.js","webpack:///./node_modules/outlayer/item.js","webpack:///./node_modules/dom7/dist/dom7.modular.js","webpack:///./node_modules/dom7/node_modules/ssr-window/dist/ssr-window.esm.js","webpack:///./node_modules/ssr-window/dist/ssr-window.esm.js","webpack:///./Static/javascript/modules/init-swiper.ts","webpack:///./Static/javascript/modules/epi-forms.ts"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","g","_typeof","Symbol","iterator","obj","constructor","this","Function","eval","e","window","value","GLOBAL_BODY","document","getElementsByTagName","GLOBAL_HTML","UTILITY_NAV","getElementById","HEADER","nodeListToArray","nodes","slice","currentScroll","pageYOffset","CONSTANTS","classList","add","style","top","remove","scrollTo","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_RESULT__","factory","define","getStyleSize","num","parseFloat","indexOf","isNaN","noop","getZeroSize","size","width","height","innerWidth","innerHeight","outerWidth","outerHeight","measurementsLength","measurements","getStyle","elem","getComputedStyle","logError","setup","isSetup","div","createElement","padding","borderStyle","borderWidth","boxSizing","body","documentElement","appendChild","isBoxSizeOuter","Math","round","getSize","removeChild","querySelector","nodeType","display","offsetWidth","offsetHeight","isBorderBox","measurement","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","console","message","error","length","global","__WEBPACK_AMD_DEFINE_ARRAY__","A11yDialog","node","targets","_show","show","bind","_hide","hide","_maintainFocus","_bindKeypress","_listeners","create","toArray","collection","Array","$$","selector","context","querySelectorAll","collect","target","NodeList","isPrototypeOf","Element","setFocusToFirstItem","focusableChildren","getFocusableChildren","focus","FOCUSABLE_ELEMENTS","join","filter","child","getClientRects","trapTabKey","event","focusedItemIndex","activeElement","shiftKey","preventDefault","getSiblings","parentNode","childNodes","siblings","splice","focusedBeforeDialog","_targets","setAttribute","shown","_openers","id","forEach","opener","addEventListener","_closers","concat","closer","_fire","removeAttribute","original","getAttribute","removeEventListener","destroy","on","type","handler","push","off","index","listener","which","contains","EvEmitter","proto","eventName","events","_events","listeners","once","onceEvents","_onceEvents","emitEvent","args","onceListeners","apply","allOff","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","TypeError","writable","setPrototypeOf","__proto__","_classCallCheck","instance","Constructor","updateSize","swiper","$el","params","clientWidth","clientHeight","isHorizontal","isVertical","parseInt","css","Utils","extend","updateSlides","$wrapperEl","swiperSize","rtl","rtlTranslate","wrongRTL","slides","children","slideClass","isVirtual","virtual","enabled","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSlidesLength","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","index$$1","replace","virtualSize","slidesNumberEvenToRows","slidesPerColumn","floor","ceil","slidesPerView","slidesPerColumnFill","max","slideSize","slidesPerRow","numFullColumns","slide","eq","newSlideOrderIndex","column","row","order","attr","slideStyles","getBoundingClientRect","getPropertyValue","roundLengths","swiperSlideSize","centeredSlides","abs","slidesPerGroup","newSlidesGrid","effect","Support","flexbox","setWrapperSize","emit","watchOverflow","checkOverflow","watchSlidesProgress","watchSlidesVisibility","updateSlidesOffset","updateAutoHeight","speed","activeSlides","newHeight","setTransition","activeIndex","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","translate","offsetCenter","removeClass","slideVisibleClass","slideProgress","minTranslate","slideBefore","slideAfter","addClass","progress","updateProgress","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","updateSlidesClasses","realIndex","slideActiveClass","slideNextClass","slidePrevClass","slideDuplicateActiveClass","slideDuplicateNextClass","slideDuplicatePrevClass","activeSlide","find","loop","hasClass","slideDuplicateClass","nextSlide","nextAll","prevSlide","prevAll","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","snapIndex","normalizeSlideIndex","updateClickedSlide","$","closest","slideFound","clickedSlide","undefined","clickedIndex","slideToClickedSlide","getTranslate","axis","virtualTranslate","currentTranslate","setTranslate","byController","x","y","transforms3d","transform","newProgress","duration","transition","transitionStart","runCallbacks","direction","autoHeight","dir","transitionEnd$1","animating","slideTo","internal","slideIndex","preventIntercationOnTransition","initialSlide","initialized","allowSlideNext","allowSlidePrev","transitionEnd","destroyed","slideToLoop","newIndex","loopedSlides","slideNext","loopFix","_clientLeft","clientLeft","slidePrev","prevSnap","prevIndex","slideReset","slideToClosest","currentSnap","slidesPerViewDynamic","slideToIndex","nextTick","loopCreate","loopFillGroupWithBlank","blankSlidesNum","blankNode","slideBlankClass","append","loopAdditionalSlides","prependSlides","appendSlides","each","el","cloneNode","prepend","snapTranslate","diff","slideChanged","loopDestroy","removeAttr","setGrabCursor","moving","touch","simulateTouch","cursor","unsetGrabCursor","appendSlide","observer","update","prependSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","onTouchStart","data$$1","touchEventsData","touches","originalEvent","isTouchEvent","isTouched","isMoved","noSwiping","noSwipingSelector","noSwipingClass","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","startX","startY","Device","ios","cordova","iOSEdgeSwipeDetection","iOSEdgeSwipeThreshold","screen","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","now","swipeDirection","threshold","allowThresholdMove","is","formElements","blur","allowTouchMove","onTouchMove","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","touchAngle","atan2","PI","touchMoveStopPropagation","nested","stopPropagation","startTranslate","trigger","allowMomentumBounce","grabCursor","touchRatio","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","velocities","position","time","onTouchEnd","touchEndTime","timeDiff","lastClickTime","clickTimeout","clearTimeout","currentPos","freeModeMomentum","lastMoveEvent","pop","velocityEvent","distance","velocity","freeModeMinimumVelocity","freeModeMomentumVelocityRatio","momentumDuration","freeModeMomentumRatio","momentumDistance","newPosition","doBounce","afterBouncePosition","bounceAmount","freeModeMomentumBounceRatio","needsLoopFix","freeModeMomentumBounce","freeModeSticky","j","longSwipesMs","stopIndex","groupSize","ratio","longSwipes","longSwipesRatio","shortSwipes","onResize","breakpoints","setBreakpoint","newTranslate","min","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","attachEvents","touchEvents","wrapperEl","touchEventsTarget","capture","pointerEvents","prefixedPointerEvents","passiveListener","start","passiveListeners","passive","move","end","android","detachEvents","keys","breakpoint","getBreakpoint","currentBreakpoint","breakPointsParams","originalParams","needsReLoop","points","point","sort","a","b","addClasses","classNames","suffixes","Browser","isIE","suffix","containerModifierClass","removeClasses","loadImage","imageEl","src","srcset","sizes","checkForComplete","callback","onReady","image","complete","Image","onload","onerror","preloadImages","imagesLoaded","imagesToLoad","updateOnImagesReady","currentSrc","wasLocked","isLocked","navigation","isEventSupported","isSupported","element","implementation","hasFeature","_createClass","defineProperties","props","descriptor","key","protoProps","staticProps","Methods","toggleClass","data","offset","html","text","next","prev","parent","parents","styles","methodName","fn","deleteProps","delay","setTimeout","Date","matrix","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","webkitTransform","split","map","MozTransform","OTransform","MsTransform","msTransform","toString","m41","m42","parseUrlQuery","url","query","urlToParse","location","href","param","paramsPart","decodeURIComponent","isObject","to","nextSource","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","testDiv","Modernizr","DocumentTouch","navigator","pointerEnabled","PointerEvent","msPointerEnabled","csstransforms3d","styles$$1","supportsPassive","opts","gestures","SwiperClass","eventsListeners","priority","method","onceHandler","eventHandler","isArray","handlers","instanceParams","moduleName","modulesParams","moduleParams","modulePropName","moduleProp","moduleEventName","Class","static","install","installModule","set","components","use","transition$1","manipulation","ua","userAgent","device","androidChrome","desktop","windows","iphone","ipod","ipad","phonegap","match","os","osVersion","toLowerCase","webView","osVersionArr","metaViewport","minimalUi","pixelRatio","devicePixelRatio","isSafari","isUiWebView","test","classes","images","checkOverflow$1","defaults","init","uniqueNavElements","wrapperClass","runCallbacksOnInit","prototypes","extendedDefaults","Swiper","prototypeGroup","protoMethod","moduleParamName","swiperParams","useModulesParams","passedParams","swipers","containerEl","newParams","touchEventsTouch","touchEventsDesktop","useModules","_SwiperClass","spv","breakLoop","translateValue","deleteInstance","cleanStyles","newDefaults","Device$1","Support$1","support","Browser$1","browser","Resize","resize","resizeHandler","orientationChangeHandler","Observer","func","MutationObserver","WebkitMutationObserver","attach","options","ObserverFunc","mutations","mutation","observe","attributes","childList","characterData","observers","observeParents","containerParents","disconnect","Observer$1","Virtual","force","onRendered","lazy","load","previousFrom","from","previousTo","previousSlidesGrid","renderSlide","previousOffset","offsetProp","slidesAfter","slidesBefore","offset$$1","renderExternal","slidesToRender","prependIndexes","appendIndexes","cache","$slideEl","unshift","newCache","cachedIndex","Virtual$1","beforeInit","overwriteParams","Keyboard","handle","kc","keyCode","charCode","altKey","ctrlKey","metaKey","nodeName","keyboard","onlyInViewport","inView","windowWidth","windowHeight","swiperOffset","left","scrollLeft","swiperCoord","returnValue","enable","disable","Keyboard$1","Mousewheel","lastScrollTime","normalize","sX","sY","pX","pY","detail","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","handleMouseEnter","mouseEntered","handleMouseLeave","mousewheel","releaseOnEdges","delta","rtlFactor","forceToAxis","invert","sensitivity","timeout","autoplay","autoplayDisableOnInteraction","stopAutoplay","getTime","eventsTarged","Mousewheel$1","Navigation","$nextEl","$prevEl","disabledClass","lockClass","nextEl","prevEl","Navigation$1","hideOnClick","hiddenClass","toEdge","fromEdge","click","Pagination","pagination","current","total","paginationType","bullets","firstIndex","lastIndex","midIndex","dynamicBullets","bulletSize","dynamicMainBullets","dynamicBulletIndex","bulletActiveClass","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","currentClass","totalClass","progressbarDirection","progressbarOpposite","scale","scaleX","scaleY","progressbarFillClass","renderCustom","render","paginationHTML","numberOfBullets","renderBullet","bulletClass","bulletElement","renderFraction","renderProgressbar","clickable","clickableClass","modifierClass","progressbarOppositeClass","Pagination$1","activeIndexChange","snapIndexChange","slidesLengthChange","snapGridLengthChange","Scrollbar","scrollbar","dragSize","trackSize","$dragEl","newSize","newPos","opacity","divider","moveDivider","scrollbarHide","setDragPosition","pointerPosition","clientX","clientY","positionRatio","onDragStart","dragTimeout","onDragMove","onDragEnd","snapOnRelease","enableDraggable","activeListener","disableDraggable","$swiperEl","dragClass","dragEl","draggable","Scrollbar$1","observerUpdate","Parallax","setTransform","currentOpacity","currentScale","parallax","slideEl","parallaxEl","$parallaxEl","parallaxDuration","Parallax$1","Zoom","getDistanceBetweenTouches","x1","y1","x2","y2","sqrt","onGestureStart","zoom","gesture","fakeGestureTouched","fakeGestureMoved","scaleStart","$imageEl","$imageWrapEl","containerClass","maxRatio","isScaling","onGestureChange","scaleMove","minRatio","onGestureEnd","changedTouches","touchesStart","slideWidth","slideHeight","scaledWidth","scaledHeight","minX","maxX","minY","maxY","touchesCurrent","prevPositionX","prevPositionY","prevTime","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","onTransitionEnd","toggle","out","in","zoomedSlideClass","touchX","touchY","offsetX","offsetY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","Zoom$1","touchStart","touchEnd","doubleTap","Lazy","loadInSlide","loadInDuplicate","$images","elementClass","loadedClass","loadingClass","imageIndex","background","preloaderClass","slideOriginalIndex","originalSlide","duplicatedSlide","slideExist","initialImageLoaded","elIndex","loadPrevNext","loadPrevNextAmount","amount","maxIndex","minIndex","Lazy$1","loadOnTransitionStart","scroll","scrollbarDragMove","Controller","LinearSpline","binarySearch","guess","array","val","i1","i3","interpolate","getInterpolateFunction","controller","spline","setControlledTranslate","by","controlledTranslate","multiplier","inverse","controlled","control","setControlledTransition","Controller$1","a11y","makeElFocusable","addElRole","role","addElLabel","label","disableEl","enableEl","onEnterKey","$targetEl","notify","lastSlideMessage","nextSlideMessage","firstSlideMessage","prevSlideMessage","notification","liveRegion","updateNavigation","updatePagination","bulletEl","$bulletEl","paginationBulletMessage","A11y","notificationClass","paginationUpdate","History","history","pushState","hashNavigation","paths","getPathValues","scrollToSlide","replaceState","setHistoryPopState","pathArray","pathname","part","setHistory","slugify","includes","currentState","state","text$$1","slideHistory","History$1","HashNavigation","onHashCange","newHash","hash","setHash","slideHash","watchState","HashNavigation$1","Autoplay","run","$activeSlideEl","reverseDirection","stopOnLastSlide","stop","running","pause","paused","waitForTransition","Autoplay$1","disableOnInteraction","beforeTransitionStart","sliderFirstMove","Fade","tx","ty","slideOpacity","fadeEffect","crossFade","eventTriggered","triggerEvents","EffectFade","Cube","swiperWidth","swiperHeight","cubeEffect","wrapperRotate","$cubeShadowEl","shadow","slideAngle","tz","transform$$1","slideShadows","shadowBefore","shadowAfter","shadowOffset","shadowScale","shadowAngle","sin","cos","scale1","scale2","zFactor","EffectCube","Flip","flipEffect","limitRotation","rotate","rotateY","rotateX","zIndex","EffectFlip","Coverflow","coverflowEffect","center","depth","slideOffset","offsetMultiplier","modifier","translateZ","stretch","slideTransform","$shadowBeforeEl","$shadowAfterEl","perspectiveOrigin","EffectCoverflow","default","loginState","spritePath","SVG_SPRITE_PATH","svgInject","stickyHeader","CurtainMenu","AriaToggling","IeDesaturate","alertMessage","Accordions","DateListingBlock","PublicityImageBlock","globalModals","modal","modalInstance","dialog","lockBody","unlockBody","ScrollspyNavbar","MultimediaLayout","benefitsContent","SmoothScroll","ignore","header","easing","before","anchor","after","benefitsContentTrigger","innerText","enhanceEpiForms","loginLink","currentURL","isTNEW","endsWith","currentLoginLink","newLoginLink","uri","substr","re","RegExp","separator","encodeURIComponent","String","$defineProperty","result","search","string","stringLength","searchString","searchLength","pos","arguments","Number","charCodeAt","svgURL","request","XMLHttpRequest","open","status","responseText","innerHTML","insertBefore","log","send","xhrRequest","requestType","successFunction","errorFunction","xhttp","withCredentials","onreadystatechange","readyState","responseURL","setRequestHeader","loginStateRequestSuccess","isLoggedIn","JSON","parse","loggedOutLinks","loggedInLinks","linksToHide","linksToShow","hideElements","showElements","TNEW_RESOURCES_DOMAIN","initMobileSticky","matchMedia","matches","headerDimensions","calendarFilters","calendarFiltersDimensions","calendarList","stickyDisplayHandler","scrollTop","lastScrollTop","requestAnimationFrame","bodyElement","closeAllSubs","allOpenSubs","showFirstAccordion","menuSubnavTriggers","handleSubMenu","isAlertOpen","sideHeaderHeight","scrollHeight","curtainMenuInner","isAlertOpenResize","handleCalloutsDisplay","calloutsData","calloutLength","callouts","calloutMarkup","callout","linkUrl","title","date","linkTitle","triggerId","subnavID","subnavToOpen","dataset","curtainTrigger","curtainTriggerText","curtainMenu","links","showClass","mNav","ownerdocument","queryselectorall","item","parentelement","link","linkParent","focusOn","blurOut","outSideClicks","checkClick","cancelBubble","toggleOff","toggleOn","viewableLinks","viewableLink","items","htmlElement","getInternetExplorerVersion","img","grayscaleIE10","rv","appName","exec","$1","imgObj","gray","imgObject","canvas","canvasContext","getContext","imgW","naturalWidth","imgH","naturalHeight","drawImage","imgPixels","getImageData","avg","putImageData","toDataURL","adjustSiteBody","calcSiteHeaderHeight","siteBody","hasAttribute","siteHeaderHeight","siteHeader","setAlertMessageVisibility","fetch","credentials","then","response","ok","json","shouldShowMessage","alertMessageElement","SHOW_CLASS","cancelAlert","alertCancelElement","require","Promise","isDataView","DataView","normalizeName","normalizeValue","iteratorFor","shift","done","iterable","Headers","headers","getOwnPropertyNames","consumed","_noBody","bodyUsed","reject","fileReaderReady","reader","resolve","readBlobAsArrayBuffer","blob","FileReader","promise","readAsArrayBuffer","readBlobAsText","encoding","readAsText","readArrayBufferAsText","buf","view","Uint8Array","chars","fromCharCode","bufferClone","byteLength","buffer","Body","_initBody","_bodyInit","_bodyText","Blob","_bodyBlob","formData","FormData","_bodyFormData","searchParams","URLSearchParams","arrayBuffer","_bodyArrayBuffer","ArrayBuffer","isArrayBufferView","rejected","Error","isConsumed","isView","byteOffset","decode","normalizeMethod","upcased","toUpperCase","methods","Request","input","mode","signal","AbortController","referrer","reParamSearch","reQueryString","form","trim","bytes","parseHeaders","rawHeaders","line","parts","warn","Response","bodyInit","RangeError","statusText","abortXhr","xhr","abort","aborted","DOMException","getAllResponseHeaders","ontimeout","onabort","responseType","names","globalThis","viewClasses","oldValue","has","thisArg","values","entries","clone","redirectStatuses","redirect","err","stack","polyfill","process","objectOrFunction","isFunction","setScheduler","scheduleFn","customSchedulerFn","setAsap","asapFn","asap","useVertxTimer","vertxNext","flush","useSetTimeout","globalSetTimeout","queue","onFulfillment","onRejection","_arguments","PROMISE_ID","makePromise","_state","invokeCallback","_result","subscribe","resolve$1","selfFulfillment","cannotReturnOwn","getThen","GET_THEN_ERROR","tryThen","then$$1","fulfillmentHandler","rejectionHandler","handleForeignThenable","thenable","sealed","fulfill","reason","_label","handleOwnThenable","FULFILLED","REJECTED","handleMaybeThenable","maybeThenable","publishRejection","_onerror","publish","PENDING","_subscribers","subscribers","settled","ErrorObject","tryCatch","TRY_CATCH_ERROR","hasCallback","succeeded","failed","initializePromise","resolver","nextId","Enumerator$1","_instanceConstructor","_remaining","_enumerate","validationError","all$1","race$1","_","reject$1","needsResolver","needsNew","Promise$2","polyfill$1","local","P","promiseToString","cast","_isArray","arg","scheduleFlush","browserWindow","browserGlobal","BrowserMutationObserver","WebKitMutationObserver","isNode","isWorker","Uint8ClampedArray","importScripts","MessageChannel","iterations","createTextNode","channel","port1","onmessage","port2","postMessage","vertx","r","runOnLoop","runOnContext","random","substring","_eachEntry","entry","resolve$$1","_then","_settledAt","_willSettleAt","enumerator","all","race","_setScheduler","_setAsap","_asap","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","Item","env","argv","version","versions","addListener","removeListener","removeAllListeners","prependListener","prependOnceListener","binding","cwd","chdir","umask","resizeTimer","convertToArray","nodeList","accordionLists","openClass","singleAccordion","optArg","AccordionsOptions","triggerSetAccordionHeights","accordionList","accordionClick","setAccordionHeights","openAccordions","openAccordion","accordionToReCalc","accordionRecalcedHeight","currentTarget","accordionToOpenId","parentElement","accordionToToggle","accordionContentHeight","closeOpenAccordions","closeAccordion","accordionToOpen","accordionToOpenHeight","parentContainer","accordionToClose","exception","loadMoreNodeList","loadMoreItem","loadLessNodeList","loadLessItem","viewMoreNodeList","viewMoreBtn","expandableSection","isExpanded","publicityCarouselNodeList","carousel","publicityCarouselSlidesNodeList","slideCounter","swiperCounter","ElementProto","msMatchesSelector","mozMatchesSelector","webkitMatchesSelector","elements","ownerDocument","Boolean","containerClassName","subsContainers","getElementsByClassName","field","gumshoe","jumpSections","section","sectionTitle","sectionTarget","selectorHeader","container","activeClass","scrollDelay","scrollY","root","settings","eventTimeout","docHeight","headerHeight","currentNav","scrollEventDelay","supports","navs","scope","prop","extended","deep","getHeight","getDocumentHeight","getOffsetTop","offsetParent","isInViewport","bottom","right","sortNavs","setDistances","nav","getNavs","navLinks","tagName","deactivateCurrentNav","activateNav","getCurrentNav","setInitCurrentNav","eventThrottler","scrollStop","t","customEasing","charAt","InvalidCharacterError","u","outline","f","h","v","S","cancelScroll","cancelAnimationFrame","animateScroll","E","I","O","A","C","w","Q","button","hostname","Masonry","multimediaSelector","viewMoreHandler","isShow","masonryItems","masonryInstance","gridCutoff","layout","initMasonryGrid","itemSelector","percentPosition","initCarousel","carouselInstance","slideItems","destroyMasonry","destroyCarousel","initModal","initModalCarousel","modalSlideItems","mediaModalContent","modalCarouselInstance","mediaModal","mediaModalInstance","modalTriggers","initHandler","multimediaContainer","viewMoreTrigger","Outlayer","compatOptions","fitWidth","_resetLayout","_getMeasurement","measureColumns","colYs","cols","horizontalColIndex","getContainerWidth","columnWidth","firstItem","firstItemElem","containerWidth","gutter","excess","mathMethod","isFitWidth","_getOption","_getItemLayoutPosition","remainder","colSpan","colPosMethod","horizontalOrder","colPosition","col","setHeight","setMax","_getTopColPosition","colGroup","_getTopColGroup","minimumY","groupCount","_getColGroupY","groupColYs","_getHorizontalColPosition","hasSize","_manageStamp","stamp","stampSize","_getElementOffset","isOriginLeft","firstX","lastX","firstCol","lastCol","isOriginTop","stampMaxY","_getContainerSize","_getContainerFitWidth","unusedCols","needsResizeLayout","previousWidth","utils","queryElement","getQueryElement","namespace","jQuery","$element","option","GUID","outlayerGUID","instances","_create","subclass","Parent","SubClass","getMilliseconds","unit","msUnits","containerStyle","initLayout","originLeft","originTop","resizeContainer","transitionDuration","hiddenStyle","visibleStyle","oldOption","horizontal","layoutInstant","reloadItems","stamps","bindResize","_itemize","elems","itemElems","_filterFindItemElements","filterFindElements","getItemElements","_manageStamps","isInstant","_isLayoutInited","layoutItems","_init","HTMLElement","_getItemsForLayout","_layoutItems","_postLayout","isIgnored","_emitCompleteOnItems","isLayoutInstant","_processLayoutQueue","updateStagger","_positionItem","stagger","goTo","moveTo","_setContainerMeasure","measure","isWidth","elemSize","onComplete","_this","dispatchEvent","tick","doneCount","count","emitArgs","$event","Event","getItem","unignore","_find","unstamp","removeFrom","makeArray","_getBoundingRect","boundingRect","_boundingRect","thisRect","handleEvent","isResizeBound","unbindResize","onresize","debounceMethod","addItems","appended","reveal","prepended","previousItems","revealItemElements","getItems","hideItemElements","removeItems","removeData","Layout","htmlInit","bridget","ms","matchesSelector","modulo","arraySlice","ary","getParent","ffElems","childElems","_class","timeoutName","docReady","toDashed","str","$2","WidgetClass","dashedNamespace","dataAttr","dataAttrElems","jsDashElems","dataOptionsAttr","className","matchesMethod","ElemProto","prefixes","prefix","isEmptyObj","docElemStyle","transitionProperty","transformProperty","transitionEndEvent","WebkitTransition","vendorProperties","transitionDelay","_transn","ingProperties","clean","onEnd","elemStyle","getPosition","xValue","yValue","layoutSize","layoutPosition","xPadding","xProperty","xResetProperty","getXValue","yPadding","yProperty","yResetProperty","getYValue","_transitionTo","curX","curY","didNotMove","setPosition","isTransitioning","transX","transY","transitionStyle","isCleaning","_nonTransition","_removeStyles","_transition","enableTransition","transitionProps","staggerDelay","onwebkitTransitionEnd","ontransitionend","onotransitionend","dashedVendorProperties","propertyName","disableTransition","removeTransitionStyles","cleanStyle","cleanTransitionStyle","removeElem","isHidden","getHideRevealTransitionEndProperty","onRevealTransitionEnd","styleProperty","optionStyle","onHideTransitionEnd","arr","Dom7","els","tempParent","toCreate","unique","uniqueArray","toCamelCase","group1","webkitRequestAnimationFrame","webkitCancelAnimationFrame","attrs","attrName","propName","dom7ElementDataStorage","dataKey","dom","multiple","selected","selectedOptions","elStyle","webkitTransitionDuration","handleLiveEvent","eventData","dom7EventData","targetSelector","k","eventType","dom7LiveListeners","proxyListener","dom7Listeners","dom7proxy","eventArgs","evt","CustomEvent","bubbles","cancelable","createEvent","initEvent","dataIndex","fireCallBack","animationEnd","includeMargins","box","clientTop","scrollX","matchedItems","modifiedItems","textContent","compareWith","previousSibling","returnIndex","newChild","tempDiv","firstChild","appendTo","prependTo","insertAfter","nextSibling","nextElementSibling","nextEls","previousElementSibling","prevEls","foundElements","found","detach","toAdd","empty","startTime","easeProgress","animateTop","currentTop","newTop","animateLeft","currentLeft","newLeft","maxTop","maxLeft","scrollWidth","animate","initialProps","initialParams","assign","que","easingProgress","frameId","dom7AnimateInstance","began","begin","initialValue","finalValue","currentValue","propsDone","elementsDone","initialFullValue","finalFullValue","animateInstance","eventShortcut","noTrigger","focusin","focusout","keyup","keydown","keypress","submit","change","mousedown","mousemove","mouseup","mouseenter","mouseleave","mouseout","mouseover","touchstart","touchend","touchmove","doc","ssrDocument","createElementNS","importNode","host","origin","protocol","win","go","back","initSwiper","swiperId","swiperItem","newWrapper","formChoiceLabels","formID","fieldLabel","fieldInput","fieldName","captchaRefreshBtn","formLabel","formInputField"],"mappings":"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gD,cAEM2mD,GACJ,WAAYD,GAAK,SAGf,KAAK,GAFC3vD,GAAOxL,KAEJ5B,EAAI,EAAGA,EAAI+8D,EAAIp1D,OAAQ3H,GAAK,EACnCoN,EAAKpN,GAAK+8D,EAAI/8D,EAIhB,OAFAoN,GAAKzF,OAASo1D,EAAIp1D,OAEX/F,KAuDXqU,GAAE8Q,GAAKi2C,GAAK97D,UACZ+U,EAAE+U,MAAQgyC,GACV/mD,EAAE+mD,KAAOA,EA+pCT,IAAMiG,IAAa,gBAAiBv7C,MAAM,IvC8ib1C5nB,GuC39aSmW,IvC49aTnW,EuC59aYiU,WvC69aZjU,EuC79asB2T,cvC89atB3T,EuC99amCqV,WvC+9anCrV,EuC/9a6CsmB,cvCg+a7CtmB,EuCh+a0D2R,OvCi+a1D3R,EuCj+agEya,avCk+ahEza,EuCl+a4EkqD,OvCm+a5ElqD,EuCn+akFumB,OvCo+alFvmB,EuCp+awF03D,avCq+axF13D,EuCr+aoGmyC,UvCs+apGnyC,EuCt+a6GiiC,MvCu+a7GjiC,EuCv+akHmX,YvCw+alHnX,EuCx+a6HsX,avCy+a7HtX,EuCz+ayI8L,KvC0+azI9L,EuC1+a6IkM,MvC2+a7IlM,EuC3+akJ6M,OvC4+alJ7M,EuC5+awJ0e,UvC6+axJ1e,EuC7+aiKsY,gBvC8+ajKtY,EuC9+agL0/D,evC++ahL1/D,EuC/+a8LmE,QvCg/a9LnE,EuCh/aqMuE,avCi/arMvE,EuCj/aiNoE,SvCk/ajNpE,EuCl/ayNwE,cvCm/azNxE,EuCn/asOwmB,SvCo/atOxmB,EuCp/a8OuI,OvCq/a9OvI,EuCr/aoPoI,OvCs/apPpI,EuCt/a0P+mB,SvCu/a1P/mB,EuCv/akQ2O,MvCw/alQ3O,EuCx/auQ4I,UvCy/avQ5I,EuCz/agRia,OvC0/ahRja,EuC1/asRkL,UvC2/atRlL,EuC3/a+R8J,SvC4/a/R9J,EuC5/auS6nB,MvC6/avS7nB,EuC7/a4SymB,OvC8/a5SzmB,EuC9/akT0mB,OvC+/alT1mB,EuC//awT0d,KvCggbxT1d,EuChgb4T8D,UvCigb5T9D,EuCjgbqUmM,QvCkgbrUnM,EuClgb4UsR,KvCmgb5UtR,EuCngbgV6Z,SvCogbhV7Z,EuCpgbwVwgE,WvCqgbxVxgE,EuCrgbkWoa,UvCsgblWpa,EuCtgb2WygE,YvCugb3WzgE,EuCvgbsXwuC,evCwgbtXxuC,EuCxgboY0gE,cvCygbpY1gE,EuCzgbiZ2mB,QvC0gbjZ3mB,EuC1gbuZwV,WvC2gbvZxV,EuC3gbga4mB,QvC4gbha5mB,EuC5gbsa0V,WvC6gbta1V,EuC7gb+a0K,YvC8gb/a1K,EuC9gbyb6mB,UvC+gbzb7mB,EuC/gbic8mB,WvCghbjc9mB,EuChhb0coW,WvCihb1cpW,EuCjhbmdmV,QvCkhbndnV,EuClhbydqP,YvCmhbzdrP,EuCnhbmeqD,UvCohbnerD,EuCphb2ekhE,UvCqhb3elhE,EuCrhbmfkD,OvCshbnflD,EuCthbwfohE,SvCuhbxfphE,EuCvhb+fsD,YvCwhb/ftD,EuCxhbygBwwC,avCyhbzgBxwC,EuCzhbohBszB,cvC0hbphBtzB,EuC1hbgiBgiE,WvC2hbhiBhiE,EuC3hbyiB2mC,QvC4hbziB3mC,EuC5hb+iB42B,SvC6hb/iB52B,EuC7hbsjB4d,QvC8hbtjB5d,EuC9hb4jB2J,SvC+hb5jB3J,EuC/hbmkBojE,WvCgibnkBpjE,EuChib4kBqjE,YvCiib5kBrjE,EuCjibslBsjE,SvCkibtlBtjE,EuClib6lBujE,WvCmib7lBvjE,EuCnibsmBwjE,YvCoibtmBxjE,EuCpibgnByjE,UvCqibhnBzjE,EuCribwnB0jE,UvCsibxnB1jE,EuCtibgoB2jE,avCuibhoB3jE,EuCvib2oB4jE,avCwib3oB5jE,EuCxibspB6jE,WvCyibtpB7jE,EuCzib+pB8jE,cvC0ib/pB9jE,EuC1ib2qB+jE,cvC2ib3qB/jE,EuC3iburBgkE,YvC4ibvrBhkE,EuC5ibisBikE,avC6ibjsBjkE,EuC7ib4sBkkE,cvC8ib5sBlkE,EuC9ibwtBmkE,YvC+ibxtBnkE,EuC/ibkuBokE,avCgjbluBpkE,EuChjb6uBsvB,UvCijb7uBtvB,EuCjjbqvB0hC,WvCqjb/uB,SAAUzhC,EAAQD,EAASH,GAEjC,YwC92dA,SAASipB,GAASlnB,GACd,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","file":"global-bundle.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 8);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar g;\n\n// This works in non-strict mode\ng = function () {\n\treturn this;\n}();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\t// This works if the window reference is available\n\tif ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n These are global constants that you can import on to partials\r\n*/\r\nexports.GLOBAL_BODY = document.getElementsByTagName('body')[0];\r\nexports.GLOBAL_HTML = document.getElementsByTagName('html')[0];\r\nexports.UTILITY_NAV = document.getElementById('utility');\r\nexports.HEADER = document.getElementById('header');\r\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction nodeListToArray(nodes) {\r\n return [].slice.call(nodes);\r\n}\r\nexports.nodeListToArray = nodeListToArray;\r\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar CONSTANTS = __webpack_require__(1);\r\nvar currentScroll;\r\nfunction lockBody() {\r\n currentScroll = window.pageYOffset;\r\n CONSTANTS.GLOBAL_BODY.classList.add('locked');\r\n CONSTANTS.GLOBAL_BODY.style.top = '-' + currentScroll + 'px';\r\n}\r\nexports.lockBody = lockBody;\r\nfunction unlockBody() {\r\n CONSTANTS.GLOBAL_BODY.classList.remove('locked');\r\n window.scrollTo(0, currentScroll);\r\n}\r\nexports.unlockBody = unlockBody;\r\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\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 (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n})(window, function factory() {\n 'use strict';\n\n // -------------------------- helpers -------------------------- //\n\n // get a number from a string, not a percentage\n\n function 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\n function noop() {}\n\n var logError = typeof console == 'undefined' ? noop : function (message) {\n console.error(message);\n };\n\n // -------------------------- measurements -------------------------- //\n\n var measurements = ['paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom', 'marginLeft', 'marginRight', 'marginTop', 'marginBottom', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth', 'borderBottomWidth'];\n\n var measurementsLength = measurements.length;\n\n function 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 */\n function getStyle(elem) {\n var style = getComputedStyle(elem);\n if (!style) {\n logError('Style returned ' + style + '. Are you running this code in a hidden iframe on Firefox? ' + 'See https://bit.ly/getsizebug1');\n }\n return style;\n }\n\n // -------------------------- setup -------------------------- //\n\n var isSetup = false;\n\n var isBoxSizeOuter;\n\n /**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\n function 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\n function 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 === 'undefined' ? 'undefined' : _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\n return getSize;\n});\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/* global NodeList, Element, define */\n\n(function (global) {\n 'use strict';\n\n var FOCUSABLE_ELEMENTS = ['a[href]', 'area[href]', 'input:not([disabled])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex^=\"-\"])'];\n var TAB_KEY = 9;\n var ESCAPE_KEY = 27;\n var focusedBeforeDialog;\n\n /**\n * Define the constructor to instantiate a dialog\n *\n * @constructor\n * @param {Element} node\n * @param {(NodeList | Element | string)} targets\n */\n function A11yDialog(node, targets) {\n // Prebind the functions that will be bound in addEventListener and\n // removeEventListener to avoid losing references\n this._show = this.show.bind(this);\n this._hide = this.hide.bind(this);\n this._maintainFocus = this._maintainFocus.bind(this);\n this._bindKeypress = this._bindKeypress.bind(this);\n\n // Keep a reference of the node on the instance\n this.node = node;\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n // Initialise everything needed for the dialog to work properly\n this.create(targets);\n }\n\n /**\n * Set up everything necessary for the dialog to be functioning\n *\n * @param {(NodeList | Element | string)} targets\n * @return {this}\n */\n A11yDialog.prototype.create = function (targets) {\n // Keep a collection of nodes to disable/enable when toggling the dialog\n this._targets = this._targets || collect(targets) || getSiblings(this.node);\n\n // Make sure the dialog element is disabled on load, and that the `shown`\n // property is synced with its value\n this.node.setAttribute('aria-hidden', true);\n this.shown = false;\n\n // Keep a collection of dialog openers, each of which will be bound a click\n // event listener to open the dialog\n this._openers = $$('[data-a11y-dialog-show=\"' + this.node.id + '\"]');\n this._openers.forEach(function (opener) {\n opener.addEventListener('click', this._show);\n }.bind(this));\n\n // Keep a collection of dialog closers, each of which will be bound a click\n // event listener to close the dialog\n this._closers = $$('[data-a11y-dialog-hide]', this.node).concat($$('[data-a11y-dialog-hide=\"' + this.node.id + '\"]'));\n this._closers.forEach(function (closer) {\n closer.addEventListener('click', this._hide);\n }.bind(this));\n\n // Execute all callbacks registered for the `create` event\n this._fire('create');\n\n return this;\n };\n\n /**\n * Show the dialog element, disable all the targets (siblings), trap the\n * current focus within it, listen for some specific key presses and fire all\n * registered callbacks for `show` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.show = function (event) {\n // If the dialog is already open, abort\n if (this.shown) {\n return this;\n }\n\n this.shown = true;\n this.node.removeAttribute('aria-hidden');\n\n // Iterate over the targets to disable them by setting their `aria-hidden`\n // attribute to `true`; in case they already have this attribute, keep a\n // reference of their original value to be able to restore it later\n this._targets.forEach(function (target) {\n var original = target.getAttribute('aria-hidden');\n\n if (original) {\n target.setAttribute('data-a11y-dialog-original', original);\n }\n\n target.setAttribute('aria-hidden', 'true');\n });\n\n // Keep a reference to the currently focused element to be able to restore\n // it later, then set the focus to the first focusable child of the dialog\n // element\n focusedBeforeDialog = document.activeElement;\n setFocusToFirstItem(this.node);\n\n // Bind a focus event listener to the body element to make sure the focus\n // stays trapped inside the dialog while open, and start listening for some\n // specific key presses (TAB and ESC)\n document.body.addEventListener('focus', this._maintainFocus, true);\n document.addEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `show` event\n this._fire('show', event);\n\n return this;\n };\n\n /**\n * Hide the dialog element, enable all the targets (siblings), restore the\n * focus to the previously active element, stop listening for some specific\n * key presses and fire all registered callbacks for `hide` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.hide = function (event) {\n // If the dialog is already closed, abort\n if (!this.shown) {\n return this;\n }\n\n this.shown = false;\n this.node.setAttribute('aria-hidden', 'true');\n\n // Iterate over the targets to enable them by remove their `aria-hidden`\n // attribute or resetting them to their initial value\n this._targets.forEach(function (target) {\n var original = target.getAttribute('data-a11y-dialog-original');\n\n if (original) {\n target.setAttribute('aria-hidden', original);\n target.removeAttribute('data-a11y-dialog-original');\n } else {\n target.removeAttribute('aria-hidden');\n }\n });\n\n // If their was a focused element before the dialog was opened, restore the\n // focus back to it\n if (focusedBeforeDialog) {\n focusedBeforeDialog.focus();\n }\n\n // Remove the focus event listener to the body element and stop listening\n // for specific key presses\n document.body.removeEventListener('focus', this._maintainFocus, true);\n document.removeEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `hide` event\n this._fire('hide', event);\n\n return this;\n };\n\n /**\n * Destroy the current instance (after making sure the dialog has been hidden)\n * and remove all associated listeners from dialog openers and closers\n *\n * @return {this}\n */\n A11yDialog.prototype.destroy = function () {\n // Hide the dialog to avoid destroying an open instance\n this.hide();\n\n // Remove the click event listener from all dialog openers\n this._openers.forEach(function (opener) {\n opener.removeEventListener('click', this._show);\n }.bind(this));\n\n // Remove the click event listener from all dialog closers\n this._closers.forEach(function (closer) {\n closer.removeEventListener('click', this._hide);\n }.bind(this));\n\n // Execute all callbacks registered for the `destroy` event\n this._fire('destroy');\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n return this;\n };\n\n /**\n * Register a new callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.on = function (type, handler) {\n if (typeof this._listeners[type] === 'undefined') {\n this._listeners[type] = [];\n }\n\n this._listeners[type].push(handler);\n\n return this;\n };\n\n /**\n * Unregister an existing callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.off = function (type, handler) {\n var index = this._listeners[type].indexOf(handler);\n\n if (index > -1) {\n this._listeners[type].splice(index, 1);\n }\n\n return this;\n };\n\n /**\n * Iterate over all registered handlers for given type and call them all with\n * the dialog element as first argument, event as second argument (if any).\n *\n * @access private\n * @param {string} type\n * @param {Event} event\n */\n A11yDialog.prototype._fire = function (type, event) {\n var listeners = this._listeners[type] || [];\n\n listeners.forEach(function (listener) {\n listener(this.node, event);\n }.bind(this));\n };\n\n /**\n * Private event handler used when listening to some specific key presses\n * (namely ESCAPE and TAB)\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._bindKeypress = function (event) {\n // If the dialog is shown and the ESCAPE key is being pressed, prevent any\n // further effects from the ESCAPE key and hide the dialog\n if (this.shown && event.which === ESCAPE_KEY) {\n event.preventDefault();\n this.hide();\n }\n\n // If the dialog is shown and the TAB key is being pressed, make sure the\n // focus stays trapped within the dialog element\n if (this.shown && event.which === TAB_KEY) {\n trapTabKey(this.node, event);\n }\n };\n\n /**\n * Private event handler used when making sure the focus stays within the\n * currently open dialog\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._maintainFocus = function (event) {\n // If the dialog is shown and the focus is not within the dialog element,\n // move it back to its first focusable child\n if (this.shown && !this.node.contains(event.target)) {\n setFocusToFirstItem(this.node);\n }\n };\n\n /**\n * Convert a NodeList into an array\n *\n * @param {NodeList} collection\n * @return {Array}\n */\n function toArray(collection) {\n return Array.prototype.slice.call(collection);\n }\n\n /**\n * Query the DOM for nodes matching the given selector, scoped to context (or\n * the whole document)\n *\n * @param {String} selector\n * @param {Element} [context = document]\n * @return {Array}\n */\n function $$(selector, context) {\n return toArray((context || document).querySelectorAll(selector));\n }\n\n /**\n * Return an array of Element based on given argument (NodeList, Element or\n * string representing a selector)\n *\n * @param {(NodeList | Element | string)} target\n * @return {Array}\n */\n function collect(target) {\n if (NodeList.prototype.isPrototypeOf(target)) {\n return toArray(target);\n }\n\n if (Element.prototype.isPrototypeOf(target)) {\n return [target];\n }\n\n if (typeof target === 'string') {\n return $$(target);\n }\n }\n\n /**\n * Set the focus to the first focusable child of the given element\n *\n * @param {Element} node\n */\n function setFocusToFirstItem(node) {\n var focusableChildren = getFocusableChildren(node);\n\n if (focusableChildren.length) {\n focusableChildren[0].focus();\n }\n }\n\n /**\n * Get the focusable children of the given element\n *\n * @param {Element} node\n * @return {Array}\n */\n function getFocusableChildren(node) {\n return $$(FOCUSABLE_ELEMENTS.join(','), node).filter(function (child) {\n return !!(child.offsetWidth || child.offsetHeight || child.getClientRects().length);\n });\n }\n\n /**\n * Trap the focus inside the given element\n *\n * @param {Element} node\n * @param {Event} event\n */\n function trapTabKey(node, event) {\n var focusableChildren = getFocusableChildren(node);\n var focusedItemIndex = focusableChildren.indexOf(document.activeElement);\n\n // If the SHIFT key is being pressed while tabbing (moving backwards) and\n // the currently focused item is the first one, move the focus to the last\n // focusable item from the dialog element\n if (event.shiftKey && focusedItemIndex === 0) {\n focusableChildren[focusableChildren.length - 1].focus();\n event.preventDefault();\n // If the SHIFT key is not being pressed (moving forwards) and the currently\n // focused item is the last one, move the focus to the first focusable item\n // from the dialog element\n } else if (!event.shiftKey && focusedItemIndex === focusableChildren.length - 1) {\n focusableChildren[0].focus();\n event.preventDefault();\n }\n }\n\n /**\n * Retrieve siblings from given element\n *\n * @param {Element} node\n * @return {Array}\n */\n function getSiblings(node) {\n var nodes = toArray(node.parentNode.childNodes);\n var siblings = nodes.filter(function (node) {\n return node.nodeType === 1;\n });\n\n siblings.splice(siblings.indexOf(node), 1);\n\n return siblings;\n }\n\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = A11yDialog;\n } else if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {\n return A11yDialog;\n }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof global === 'undefined' ? 'undefined' : _typeof(global)) === 'object') {\n global.A11yDialog = A11yDialog;\n }\n})(typeof global !== 'undefined' ? global : window);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\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 (true) {\n // AMD - RequireJS\n !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n})(typeof window != 'undefined' ? window : undefined, function () {\n\n \"use strict\";\n\n function EvEmitter() {}\n\n var proto = EvEmitter.prototype;\n\n proto.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\n proto.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\n proto.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\n proto.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\n proto.allOff = function () {\n delete this._events;\n delete this._onceEvents;\n };\n\n return EvEmitter;\n});\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; /**\n * Swiper 4.2.2\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * http://www.idangero.us/swiper/\n *\n * Copyright 2014-2018 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: April 1, 2018\n */\n\nvar _dom = __webpack_require__(38);\n\nvar _ssrWindow = __webpack_require__(40);\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Methods = {\n addClass: _dom.addClass,\n removeClass: _dom.removeClass,\n hasClass: _dom.hasClass,\n toggleClass: _dom.toggleClass,\n attr: _dom.attr,\n removeAttr: _dom.removeAttr,\n data: _dom.data,\n transform: _dom.transform,\n transition: _dom.transition,\n on: _dom.on,\n off: _dom.off,\n trigger: _dom.trigger,\n transitionEnd: _dom.transitionEnd,\n outerWidth: _dom.outerWidth,\n outerHeight: _dom.outerHeight,\n offset: _dom.offset,\n css: _dom.css,\n each: _dom.each,\n html: _dom.html,\n text: _dom.text,\n is: _dom.is,\n index: _dom.index,\n eq: _dom.eq,\n append: _dom.append,\n prepend: _dom.prepend,\n next: _dom.next,\n nextAll: _dom.nextAll,\n prev: _dom.prev,\n prevAll: _dom.prevAll,\n parent: _dom.parent,\n parents: _dom.parents,\n closest: _dom.closest,\n find: _dom.find,\n children: _dom.children,\n remove: _dom.remove,\n add: _dom.add,\n styles: _dom.styles\n};\n\nObject.keys(Methods).forEach(function (methodName) {\n _dom.$.fn[methodName] = Methods[methodName];\n});\n\nvar Utils = {\n deleteProps: function deleteProps(obj) {\n var object = obj;\n Object.keys(object).forEach(function (key) {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n },\n nextTick: function nextTick(callback) {\n var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n return setTimeout(callback, delay);\n },\n now: function now() {\n return Date.now();\n },\n getTranslate: function getTranslate(el) {\n var axis = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'x';\n\n var matrix = void 0;\n var curTransform = void 0;\n var transformMatrix = void 0;\n\n var curStyle = _ssrWindow.window.getComputedStyle(el, null);\n\n if (_ssrWindow.window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(function (a) {\n return a.replace(',', '.');\n }).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new _ssrWindow.window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (_ssrWindow.window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (_ssrWindow.window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n },\n parseUrlQuery: function parseUrlQuery(url) {\n var query = {};\n var urlToParse = url || _ssrWindow.window.location.href;\n var i = void 0;\n var params = void 0;\n var param = void 0;\n var length = void 0;\n if (typeof urlToParse === 'string' && urlToParse.length) {\n urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\\S*\\?/, '') : '';\n params = urlToParse.split('&').filter(function (paramsPart) {\n return paramsPart !== '';\n });\n length = params.length;\n\n for (i = 0; i < length; i += 1) {\n param = params[i].replace(/#\\S+/g, '').split('=');\n query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';\n }\n }\n return query;\n },\n isObject: function isObject(o) {\n return (typeof o === 'undefined' ? 'undefined' : _typeof(o)) === 'object' && o !== null && o.constructor && o.constructor === Object;\n },\n extend: function extend() {\n var to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n for (var i = 1; i < arguments.length; i += 1) {\n var nextSource = arguments.length <= i ? undefined : arguments[i];\n if (nextSource !== undefined && nextSource !== null) {\n var keysArray = Object.keys(Object(nextSource));\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n var nextKey = keysArray[nextIndex];\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n Utils.extend(to[nextKey], nextSource[nextKey]);\n } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n Utils.extend(to[nextKey], nextSource[nextKey]);\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n }\n};\n\nvar Support = function Support() {\n var testDiv = _ssrWindow.document.createElement('div');\n return {\n touch: _ssrWindow.window.Modernizr && _ssrWindow.window.Modernizr.touch === true || function checkTouch() {\n return !!('ontouchstart' in _ssrWindow.window || _ssrWindow.window.DocumentTouch && _ssrWindow.document instanceof _ssrWindow.window.DocumentTouch);\n }(),\n\n pointerEvents: !!(_ssrWindow.window.navigator.pointerEnabled || _ssrWindow.window.PointerEvent),\n prefixedPointerEvents: !!_ssrWindow.window.navigator.msPointerEnabled,\n\n transition: function checkTransition() {\n var style = testDiv.style;\n return 'transition' in style || 'webkitTransition' in style || 'MozTransition' in style;\n }(),\n transforms3d: _ssrWindow.window.Modernizr && _ssrWindow.window.Modernizr.csstransforms3d === true || function checkTransforms3d() {\n var style = testDiv.style;\n return 'webkitPerspective' in style || 'MozPerspective' in style || 'OPerspective' in style || 'MsPerspective' in style || 'perspective' in style;\n }(),\n\n flexbox: function checkFlexbox() {\n var style = testDiv.style;\n var styles$$1 = 'alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient'.split(' ');\n for (var i = 0; i < styles$$1.length; i += 1) {\n if (styles$$1[i] in style) return true;\n }\n return false;\n }(),\n\n observer: function checkObserver() {\n return 'MutationObserver' in _ssrWindow.window || 'WebkitMutationObserver' in _ssrWindow.window;\n }(),\n\n passiveListener: function checkPassiveListener() {\n var supportsPassive = false;\n try {\n var opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get: function get() {\n supportsPassive = true;\n }\n });\n _ssrWindow.window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {\n // No support\n }\n return supportsPassive;\n }(),\n\n gestures: function checkGestures() {\n return 'ongesturestart' in _ssrWindow.window;\n }()\n };\n}();\n\nvar SwiperClass = function () {\n function SwiperClass() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, SwiperClass);\n\n var self = this;\n self.params = params;\n\n // Events\n self.eventsListeners = {};\n\n if (self.params && self.params.on) {\n Object.keys(self.params.on).forEach(function (eventName) {\n self.on(eventName, self.params.on[eventName]);\n });\n }\n }\n\n _createClass(SwiperClass, [{\n key: 'on',\n value: function on(events, handler, priority) {\n var self = this;\n if (typeof handler !== 'function') return self;\n var method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(function (event) {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n }\n }, {\n key: 'once',\n value: function once(events, handler, priority) {\n var self = this;\n if (typeof handler !== 'function') return self;\n function onceHandler() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n handler.apply(self, args);\n self.off(events, onceHandler);\n }\n return self.on(events, onceHandler, priority);\n }\n }, {\n key: 'off',\n value: function off(events, handler) {\n var self = this;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(function (event) {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else {\n self.eventsListeners[event].forEach(function (eventHandler, index$$1) {\n if (eventHandler === handler) {\n self.eventsListeners[event].splice(index$$1, 1);\n }\n });\n }\n });\n return self;\n }\n }, {\n key: 'emit',\n value: function emit() {\n var self = this;\n if (!self.eventsListeners) return self;\n var events = void 0;\n var data$$1 = void 0;\n var context = void 0;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data$$1 = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data$$1 = args[0].data;\n context = args[0].context || self;\n }\n var eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(function (event) {\n if (self.eventsListeners && self.eventsListeners[event]) {\n var handlers = [];\n self.eventsListeners[event].forEach(function (eventHandler) {\n handlers.push(eventHandler);\n });\n handlers.forEach(function (eventHandler) {\n eventHandler.apply(context, data$$1);\n });\n }\n });\n return self;\n }\n }, {\n key: 'useModulesParams',\n value: function useModulesParams(instanceParams) {\n var instance = this;\n if (!instance.modules) return;\n Object.keys(instance.modules).forEach(function (moduleName) {\n var module = instance.modules[moduleName];\n // Extend params\n if (module.params) {\n Utils.extend(instanceParams, module.params);\n }\n });\n }\n }, {\n key: 'useModules',\n value: function useModules() {\n var modulesParams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var instance = this;\n if (!instance.modules) return;\n Object.keys(instance.modules).forEach(function (moduleName) {\n var module = instance.modules[moduleName];\n var moduleParams = modulesParams[moduleName] || {};\n // Extend instance methods and props\n if (module.instance) {\n Object.keys(module.instance).forEach(function (modulePropName) {\n var moduleProp = module.instance[modulePropName];\n if (typeof moduleProp === 'function') {\n instance[modulePropName] = moduleProp.bind(instance);\n } else {\n instance[modulePropName] = moduleProp;\n }\n });\n }\n // Add event listeners\n if (module.on && instance.on) {\n Object.keys(module.on).forEach(function (moduleEventName) {\n instance.on(moduleEventName, module.on[moduleEventName]);\n });\n }\n\n // Module create callback\n if (module.create) {\n module.create.bind(instance)(moduleParams);\n }\n });\n }\n }], [{\n key: 'installModule',\n value: function installModule(module) {\n var Class = this;\n if (!Class.prototype.modules) Class.prototype.modules = {};\n var name = module.name || Object.keys(Class.prototype.modules).length + '_' + Utils.now();\n Class.prototype.modules[name] = module;\n // Prototype\n if (module.proto) {\n Object.keys(module.proto).forEach(function (key) {\n Class.prototype[key] = module.proto[key];\n });\n }\n // Class\n if (module.static) {\n Object.keys(module.static).forEach(function (key) {\n Class[key] = module.static[key];\n });\n }\n // Callback\n if (module.install) {\n for (var _len3 = arguments.length, params = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n params[_key3 - 1] = arguments[_key3];\n }\n\n module.install.apply(Class, params);\n }\n return Class;\n }\n }, {\n key: 'use',\n value: function use(module) {\n var Class = this;\n if (Array.isArray(module)) {\n module.forEach(function (m) {\n return Class.installModule(m);\n });\n return Class;\n }\n\n for (var _len4 = arguments.length, params = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n params[_key4 - 1] = arguments[_key4];\n }\n\n return Class.installModule.apply(Class, [module].concat(params));\n }\n }, {\n key: 'components',\n set: function set(components) {\n var Class = this;\n if (!Class.use) return;\n Class.use(components);\n }\n }]);\n\n return SwiperClass;\n}();\n\nfunction updateSize() {\n var swiper = this;\n var width = void 0;\n var height = void 0;\n var $el = swiper.$el;\n if (typeof swiper.params.width !== 'undefined') {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined') {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);\n height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);\n\n Utils.extend(swiper, {\n width: width,\n height: height,\n size: swiper.isHorizontal() ? width : height\n });\n}\n\nfunction updateSlides() {\n var swiper = this;\n var params = swiper.params;\n\n var $wrapperEl = swiper.$wrapperEl,\n swiperSize = swiper.size,\n rtl = swiper.rtlTranslate,\n wrongRTL = swiper.wrongRTL;\n\n var slides = $wrapperEl.children('.' + swiper.params.slideClass);\n var isVirtual = swiper.virtual && params.virtual.enabled;\n var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n var snapGrid = [];\n var slidesGrid = [];\n var slidesSizesGrid = [];\n\n var offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n var offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n var previousSlidesLength = slidesLength;\n var previousSnapGridLength = swiper.snapGrid.length;\n var previousSlidesGridLength = swiper.snapGrid.length;\n\n var spaceBetween = params.spaceBetween;\n var slidePosition = -offsetBefore;\n var prevSlideSize = 0;\n var index$$1 = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n if (rtl) slides.css({ marginLeft: '', marginTop: '' });else slides.css({ marginRight: '', marginBottom: '' });\n\n var slidesNumberEvenToRows = void 0;\n if (params.slidesPerColumn > 1) {\n if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n }\n if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);\n }\n }\n\n // Calc slides\n var slideSize = void 0;\n var slidesPerColumn = params.slidesPerColumn;\n var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n var numFullColumns = slidesPerRow - (params.slidesPerColumn * slidesPerRow - slidesLength);\n for (var i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n var _slide = slides.eq(i);\n if (params.slidesPerColumn > 1) {\n // Set slides order\n var newSlideOrderIndex = void 0;\n var column = void 0;\n var row = void 0;\n if (params.slidesPerColumnFill === 'column') {\n column = Math.floor(i / slidesPerColumn);\n row = i - column * slidesPerColumn;\n if (column > numFullColumns || column === numFullColumns && row === slidesPerColumn - 1) {\n row += 1;\n if (row >= slidesPerColumn) {\n row = 0;\n column += 1;\n }\n }\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;\n _slide.css({\n '-webkit-box-ordinal-group': newSlideOrderIndex,\n '-moz-box-ordinal-group': newSlideOrderIndex,\n '-ms-flex-order': newSlideOrderIndex,\n '-webkit-order': newSlideOrderIndex,\n order: newSlideOrderIndex\n });\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n _slide.css('margin-' + (swiper.isHorizontal() ? 'top' : 'left'), row !== 0 && params.spaceBetween && params.spaceBetween + 'px').attr('data-swiper-column', column).attr('data-swiper-row', row);\n }\n if (_slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n var slideStyles = _ssrWindow.window.getComputedStyle(_slide[0], null);\n if (swiper.isHorizontal()) {\n slideSize = _slide[0].getBoundingClientRect().width + parseFloat(slideStyles.getPropertyValue('margin-left')) + parseFloat(slideStyles.getPropertyValue('margin-right'));\n } else {\n slideSize = _slide[0].getBoundingClientRect().height + parseFloat(slideStyles.getPropertyValue('margin-top')) + parseFloat(slideStyles.getPropertyValue('margin-bottom'));\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n if (swiper.isHorizontal()) {\n slides[i].style.width = slideSize + 'px';\n } else {\n slides[i].style.height = slideSize + 'px';\n }\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (index$$1 % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (index$$1 % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n\n prevSlideSize = slideSize;\n\n index$$1 += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n var newSlidesGrid = void 0;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({ width: swiper.virtualSize + params.spaceBetween + 'px' });\n }\n if (!Support.flexbox || params.setWrapperSize) {\n if (swiper.isHorizontal()) $wrapperEl.css({ width: swiper.virtualSize + params.spaceBetween + 'px' });else $wrapperEl.css({ height: swiper.virtualSize + params.spaceBetween + 'px' });\n }\n\n if (params.slidesPerColumn > 1) {\n swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n if (swiper.isHorizontal()) $wrapperEl.css({ width: swiper.virtualSize + params.spaceBetween + 'px' });else $wrapperEl.css({ height: swiper.virtualSize + params.spaceBetween + 'px' });\n if (params.centeredSlides) {\n newSlidesGrid = [];\n for (var _i = 0; _i < snapGrid.length; _i += 1) {\n if (snapGrid[_i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(snapGrid[_i]);\n }\n snapGrid = newSlidesGrid;\n }\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n newSlidesGrid = [];\n for (var _i2 = 0; _i2 < snapGrid.length; _i2 += 1) {\n if (snapGrid[_i2] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(snapGrid[_i2]);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n if (swiper.isHorizontal()) {\n if (rtl) slides.css({ marginLeft: spaceBetween + 'px' });else slides.css({ marginRight: spaceBetween + 'px' });\n } else slides.css({ marginBottom: spaceBetween + 'px' });\n }\n\n Utils.extend(swiper, {\n slides: slides,\n snapGrid: snapGrid,\n slidesGrid: slidesGrid,\n slidesSizesGrid: slidesSizesGrid\n });\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress || params.watchSlidesVisibility) {\n swiper.updateSlidesOffset();\n }\n}\n\nfunction updateAutoHeight(speed) {\n var swiper = this;\n var activeSlides = [];\n var newHeight = 0;\n var i = void 0;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n var index$$1 = swiper.activeIndex + i;\n if (index$$1 > swiper.slides.length) break;\n activeSlides.push(swiper.slides.eq(index$$1)[0]);\n }\n } else {\n activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n var height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight) swiper.$wrapperEl.css('height', newHeight + 'px');\n}\n\nfunction updateSlidesOffset() {\n var swiper = this;\n var slides = swiper.slides;\n for (var i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n}\n\nfunction updateSlidesProgress() {\n var translate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.translate || 0;\n\n var swiper = this;\n var params = swiper.params;\n\n var slides = swiper.slides,\n rtl = swiper.rtlTranslate;\n\n\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n\n var offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n\n // Visible Slides\n slides.removeClass(params.slideVisibleClass);\n\n for (var i = 0; i < slides.length; i += 1) {\n var _slide2 = slides[i];\n var slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - _slide2.swiperSlideOffset) / (_slide2.swiperSlideSize + params.spaceBetween);\n if (params.watchSlidesVisibility) {\n var slideBefore = -(offsetCenter - _slide2.swiperSlideOffset);\n var slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n var isVisible = slideBefore >= 0 && slideBefore < swiper.size || slideAfter > 0 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n if (isVisible) {\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n }\n _slide2.progress = rtl ? -slideProgress : slideProgress;\n }\n}\n\nfunction updateProgress() {\n var translate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.translate || 0;\n\n var swiper = this;\n var params = swiper.params;\n\n var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n var progress = swiper.progress,\n isBeginning = swiper.isBeginning,\n isEnd = swiper.isEnd;\n\n var wasBeginning = isBeginning;\n var wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n Utils.extend(swiper, {\n progress: progress,\n isBeginning: isBeginning,\n isEnd: isEnd\n });\n\n if (params.watchSlidesProgress || params.watchSlidesVisibility) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n}\n\nfunction updateSlidesClasses() {\n var swiper = this;\n\n var slides = swiper.slides,\n params = swiper.params,\n $wrapperEl = swiper.$wrapperEl,\n activeIndex = swiper.activeIndex,\n realIndex = swiper.realIndex;\n\n var isVirtual = swiper.virtual && params.virtual.enabled;\n\n slides.removeClass(params.slideActiveClass + ' ' + params.slideNextClass + ' ' + params.slidePrevClass + ' ' + params.slideDuplicateActiveClass + ' ' + params.slideDuplicateNextClass + ' ' + params.slideDuplicatePrevClass);\n\n var activeSlide = void 0;\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find('.' + params.slideClass + '[data-swiper-slide-index=\"' + activeIndex + '\"]');\n } else {\n activeSlide = slides.eq(activeIndex);\n }\n\n // Active classes\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children('.' + params.slideClass + ':not(.' + params.slideDuplicateClass + ')[data-swiper-slide-index=\"' + realIndex + '\"]').addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl.children('.' + params.slideClass + '.' + params.slideDuplicateClass + '[data-swiper-slide-index=\"' + realIndex + '\"]').addClass(params.slideDuplicateActiveClass);\n }\n }\n // Next Slide\n var nextSlide = activeSlide.nextAll('.' + params.slideClass).eq(0).addClass(params.slideNextClass);\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n }\n // Prev Slide\n var prevSlide = activeSlide.prevAll('.' + params.slideClass).eq(0).addClass(params.slidePrevClass);\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children('.' + params.slideClass + ':not(.' + params.slideDuplicateClass + ')[data-swiper-slide-index=\"' + nextSlide.attr('data-swiper-slide-index') + '\"]').addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl.children('.' + params.slideClass + '.' + params.slideDuplicateClass + '[data-swiper-slide-index=\"' + nextSlide.attr('data-swiper-slide-index') + '\"]').addClass(params.slideDuplicateNextClass);\n }\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children('.' + params.slideClass + ':not(.' + params.slideDuplicateClass + ')[data-swiper-slide-index=\"' + prevSlide.attr('data-swiper-slide-index') + '\"]').addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl.children('.' + params.slideClass + '.' + params.slideDuplicateClass + '[data-swiper-slide-index=\"' + prevSlide.attr('data-swiper-slide-index') + '\"]').addClass(params.slideDuplicatePrevClass);\n }\n }\n}\n\nfunction updateActiveIndex(newActiveIndex) {\n var swiper = this;\n var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n var slidesGrid = swiper.slidesGrid,\n snapGrid = swiper.snapGrid,\n params = swiper.params,\n previousIndex = swiper.activeIndex,\n previousRealIndex = swiper.realIndex,\n previousSnapIndex = swiper.snapIndex;\n\n var activeIndex = newActiveIndex;\n var snapIndex = void 0;\n if (typeof activeIndex === 'undefined') {\n for (var i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n snapIndex = Math.floor(activeIndex / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n\n // Get real index\n var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n\n Utils.extend(swiper, {\n snapIndex: snapIndex,\n realIndex: realIndex,\n previousIndex: previousIndex,\n activeIndex: activeIndex\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n swiper.emit('slideChange');\n}\n\nfunction updateClickedSlide(e) {\n var swiper = this;\n var params = swiper.params;\n var slide = (0, _dom.$)(e.target).closest('.' + params.slideClass)[0];\n var slideFound = false;\n if (slide) {\n for (var i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) slideFound = true;\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt((0, _dom.$)(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = (0, _dom.$)(slide).index();\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}\n\nvar update = {\n updateSize: updateSize,\n updateSlides: updateSlides,\n updateAutoHeight: updateAutoHeight,\n updateSlidesOffset: updateSlidesOffset,\n updateSlidesProgress: updateSlidesProgress,\n updateProgress: updateProgress,\n updateSlidesClasses: updateSlidesClasses,\n updateActiveIndex: updateActiveIndex,\n updateClickedSlide: updateClickedSlide\n};\n\nfunction getTranslate() {\n var axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.isHorizontal() ? 'x' : 'y';\n\n var swiper = this;\n\n var params = swiper.params,\n rtl = swiper.rtlTranslate,\n translate = swiper.translate,\n $wrapperEl = swiper.$wrapperEl;\n\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n var currentTranslate = Utils.getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n\n return currentTranslate || 0;\n}\n\nfunction setTranslate(translate, byController) {\n var swiper = this;\n var rtl = swiper.rtlTranslate,\n params = swiper.params,\n $wrapperEl = swiper.$wrapperEl,\n progress = swiper.progress;\n\n var x = 0;\n var y = 0;\n var z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (!params.virtualTranslate) {\n if (Support.transforms3d) $wrapperEl.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)');else $wrapperEl.transform('translate(' + x + 'px, ' + y + 'px)');\n }\n\n swiper.translate = swiper.isHorizontal() ? x : y;\n\n // Check if we need to update progress\n var newProgress = void 0;\n var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n}\n\nfunction minTranslate() {\n return -this.snapGrid[0];\n}\n\nfunction maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}\n\nvar translate = {\n getTranslate: getTranslate,\n setTranslate: setTranslate,\n minTranslate: minTranslate,\n maxTranslate: maxTranslate\n};\n\nfunction setTransition(duration, byController) {\n var swiper = this;\n\n swiper.$wrapperEl.transition(duration);\n\n swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionStart() {\n var runCallbacks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var direction = arguments[1];\n\n var swiper = this;\n var activeIndex = swiper.activeIndex,\n params = swiper.params,\n previousIndex = swiper.previousIndex;\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n var dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit('transitionStart');\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit('slideResetTransitionStart');\n return;\n }\n swiper.emit('slideChangeTransitionStart');\n if (dir === 'next') {\n swiper.emit('slideNextTransitionStart');\n } else {\n swiper.emit('slidePrevTransitionStart');\n }\n }\n}\n\nfunction transitionEnd$1() {\n var runCallbacks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var direction = arguments[1];\n\n var swiper = this;\n var activeIndex = swiper.activeIndex,\n previousIndex = swiper.previousIndex;\n\n swiper.animating = false;\n swiper.setTransition(0);\n\n var dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit('transitionEnd');\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit('slideResetTransitionEnd');\n return;\n }\n swiper.emit('slideChangeTransitionEnd');\n if (dir === 'next') {\n swiper.emit('slideNextTransitionEnd');\n } else {\n swiper.emit('slidePrevTransitionEnd');\n }\n }\n}\n\nvar transition$1 = {\n setTransition: setTransition,\n transitionStart: transitionStart,\n transitionEnd: transitionEnd$1\n};\n\nfunction slideTo() {\n var index$$1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var speed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.params.speed;\n var runCallbacks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var internal = arguments[3];\n\n var swiper = this;\n var slideIndex = index$$1;\n if (slideIndex < 0) slideIndex = 0;\n\n var params = swiper.params,\n snapGrid = swiper.snapGrid,\n slidesGrid = swiper.slidesGrid,\n previousIndex = swiper.previousIndex,\n activeIndex = swiper.activeIndex,\n rtl = swiper.rtlTranslate,\n $wrapperEl = swiper.$wrapperEl;\n\n if (swiper.animating && params.preventIntercationOnTransition) {\n return false;\n }\n\n var snapIndex = Math.floor(slideIndex / params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n var translate = -snapGrid[snapIndex];\n\n // Update progress\n swiper.updateProgress(translate);\n\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (var i = 0; i < slidesGrid.length; i += 1) {\n if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n var direction = void 0;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n // Update Index\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n\n if (speed === 0 || !Support.transition) {\n swiper.setTransition(0);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (!swiper.animating) {\n swiper.animating = true;\n $wrapperEl.transitionEnd(function () {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd(runCallbacks, direction);\n });\n }\n }\n\n return true;\n}\n\nfunction slideToLoop() {\n var index$$1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var speed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.params.speed;\n var runCallbacks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var internal = arguments[3];\n\n var swiper = this;\n var newIndex = index$$1;\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext() {\n var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.params.speed;\n var runCallbacks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var internal = arguments[2];\n\n var swiper = this;\n var params = swiper.params,\n animating = swiper.animating;\n\n if (params.loop) {\n if (animating) return false;\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev() {\n var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.params.speed;\n var runCallbacks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var internal = arguments[2];\n\n var swiper = this;\n var params = swiper.params,\n animating = swiper.animating,\n snapGrid = swiper.snapGrid,\n slidesGrid = swiper.slidesGrid,\n rtlTranslate = swiper.rtlTranslate;\n\n\n if (params.loop) {\n if (animating) return false;\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n var translate = rtlTranslate ? swiper.translate : -swiper.translate;\n var currentSnap = snapGrid[snapGrid.indexOf(translate)];\n var prevSnap = snapGrid[snapGrid.indexOf(translate) - 1];\n var prevIndex = void 0;\n\n if (prevSnap) {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset() {\n var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.params.speed;\n var runCallbacks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var internal = arguments[2];\n\n var swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest() {\n var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.params.speed;\n var runCallbacks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var internal = arguments[2];\n\n var swiper = this;\n var index$$1 = swiper.activeIndex;\n var snapIndex = Math.floor(index$$1 / swiper.params.slidesPerGroup);\n\n if (snapIndex < swiper.snapGrid.length - 1) {\n var _translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n var currentSnap = swiper.snapGrid[snapIndex];\n var nextSnap = swiper.snapGrid[snapIndex + 1];\n\n if (_translate - currentSnap > (nextSnap - currentSnap) / 2) {\n index$$1 = swiper.params.slidesPerGroup;\n }\n }\n\n return swiper.slideTo(index$$1, speed, runCallbacks, internal);\n}\n\nfunction slideToClickedSlide() {\n var swiper = this;\n var params = swiper.params,\n $wrapperEl = swiper.$wrapperEl;\n\n\n var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n var slideToIndex = swiper.clickedIndex;\n var realIndex = void 0;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt((0, _dom.$)(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children('.' + params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.' + params.slideDuplicateClass + ')').eq(0).index();\n\n Utils.nextTick(function () {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children('.' + params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.' + params.slideDuplicateClass + ')').eq(0).index();\n\n Utils.nextTick(function () {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}\n\nvar slide = {\n slideTo: slideTo,\n slideToLoop: slideToLoop,\n slideNext: slideNext,\n slidePrev: slidePrev,\n slideReset: slideReset,\n slideToClosest: slideToClosest,\n slideToClickedSlide: slideToClickedSlide\n};\n\nfunction loopCreate() {\n var swiper = this;\n var params = swiper.params,\n $wrapperEl = swiper.$wrapperEl;\n // Remove duplicated slides\n\n $wrapperEl.children('.' + params.slideClass + '.' + params.slideDuplicateClass).remove();\n\n var slides = $wrapperEl.children('.' + params.slideClass);\n\n if (params.loopFillGroupWithBlank) {\n var blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (var i = 0; i < blankSlidesNum; i += 1) {\n var blankNode = (0, _dom.$)(_ssrWindow.document.createElement('div')).addClass(params.slideClass + ' ' + params.slideBlankClass);\n $wrapperEl.append(blankNode);\n }\n slides = $wrapperEl.children('.' + params.slideClass);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n\n swiper.loopedSlides = parseInt(params.loopedSlides || params.slidesPerView, 10);\n swiper.loopedSlides += params.loopAdditionalSlides;\n if (swiper.loopedSlides > slides.length) {\n swiper.loopedSlides = slides.length;\n }\n\n var prependSlides = [];\n var appendSlides = [];\n slides.each(function (index$$1, el) {\n var slide = (0, _dom.$)(el);\n if (index$$1 < swiper.loopedSlides) appendSlides.push(el);\n if (index$$1 < slides.length && index$$1 >= slides.length - swiper.loopedSlides) prependSlides.push(el);\n slide.attr('data-swiper-slide-index', index$$1);\n });\n for (var _i3 = 0; _i3 < appendSlides.length; _i3 += 1) {\n $wrapperEl.append((0, _dom.$)(appendSlides[_i3].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n for (var _i4 = prependSlides.length - 1; _i4 >= 0; _i4 -= 1) {\n $wrapperEl.prepend((0, _dom.$)(prependSlides[_i4].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n}\n\nfunction loopFix() {\n var swiper = this;\n var params = swiper.params,\n activeIndex = swiper.activeIndex,\n slides = swiper.slides,\n loopedSlides = swiper.loopedSlides,\n allowSlidePrev = swiper.allowSlidePrev,\n allowSlideNext = swiper.allowSlideNext,\n snapGrid = swiper.snapGrid,\n rtl = swiper.rtlTranslate;\n\n var newIndex = void 0;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n\n var snapTranslate = -snapGrid[activeIndex];\n var diff = snapTranslate - swiper.getTranslate();\n\n // Fix For Negative Oversliding\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n var slideChanged = swiper.slideTo(newIndex, 0, false, true);\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (params.slidesPerView === 'auto' && activeIndex >= loopedSlides * 2 || activeIndex > slides.length - params.slidesPerView * 2) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n var _slideChanged = swiper.slideTo(newIndex, 0, false, true);\n if (_slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n}\n\nfunction loopDestroy() {\n var swiper = this;\n var $wrapperEl = swiper.$wrapperEl,\n params = swiper.params,\n slides = swiper.slides;\n\n $wrapperEl.children('.' + params.slideClass + '.' + params.slideDuplicateClass).remove();\n slides.removeAttr('data-swiper-slide-index');\n}\n\nvar loop = {\n loopCreate: loopCreate,\n loopFix: loopFix,\n loopDestroy: loopDestroy\n};\n\nfunction setGrabCursor(moving) {\n var swiper = this;\n if (Support.touch || !swiper.params.simulateTouch) return;\n var el = swiper.el;\n el.style.cursor = 'move';\n el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}\n\nfunction unsetGrabCursor() {\n var swiper = this;\n if (Support.touch) return;\n swiper.el.style.cursor = '';\n}\n\nvar grabCursor = {\n setGrabCursor: setGrabCursor,\n unsetGrabCursor: unsetGrabCursor\n};\n\nfunction appendSlide(slides) {\n var swiper = this;\n var $wrapperEl = swiper.$wrapperEl,\n params = swiper.params;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n if ((typeof slides === 'undefined' ? 'undefined' : _typeof(slides)) === 'object' && 'length' in slides) {\n for (var i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n } else {\n $wrapperEl.append(slides);\n }\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n}\n\nfunction prependSlide(slides) {\n var swiper = this;\n var params = swiper.params,\n $wrapperEl = swiper.$wrapperEl,\n activeIndex = swiper.activeIndex;\n\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n var newActiveIndex = activeIndex + 1;\n if ((typeof slides === 'undefined' ? 'undefined' : _typeof(slides)) === 'object' && 'length' in slides) {\n for (var i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.prepend(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n } else {\n $wrapperEl.prepend(slides);\n }\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n swiper.slideTo(newActiveIndex, 0, false);\n}\n\nfunction removeSlide(slidesIndexes) {\n var swiper = this;\n var params = swiper.params,\n $wrapperEl = swiper.$wrapperEl,\n activeIndex = swiper.activeIndex;\n\n\n if (params.loop) {\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children('.' + params.slideClass);\n }\n var newActiveIndex = activeIndex;\n var indexToRemove = void 0;\n\n if ((typeof slidesIndexes === 'undefined' ? 'undefined' : _typeof(slidesIndexes)) === 'object' && 'length' in slidesIndexes) {\n for (var i = 0; i < slidesIndexes.length; i += 1) {\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}\n\nfunction removeAllSlides() {\n var swiper = this;\n\n var slidesIndexes = [];\n for (var i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n swiper.removeSlide(slidesIndexes);\n}\n\nvar manipulation = {\n appendSlide: appendSlide,\n prependSlide: prependSlide,\n removeSlide: removeSlide,\n removeAllSlides: removeAllSlides\n};\n\nvar Device = function Device() {\n var ua = _ssrWindow.window.navigator.userAgent;\n\n var device = {\n ios: false,\n android: false,\n androidChrome: false,\n desktop: false,\n windows: false,\n iphone: false,\n ipod: false,\n ipad: false,\n cordova: _ssrWindow.window.cordova || _ssrWindow.window.phonegap,\n phonegap: _ssrWindow.window.cordova || _ssrWindow.window.phonegap\n };\n\n var windows = ua.match(/(Windows Phone);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n var iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n\n // Windows\n if (windows) {\n device.os = 'windows';\n device.osVersion = windows[2];\n device.windows = true;\n }\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.osVersion = android[2];\n device.android = true;\n device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n // iOS\n if (iphone && !ipod) {\n device.osVersion = iphone[2].replace(/_/g, '.');\n device.iphone = true;\n }\n if (ipad) {\n device.osVersion = ipad[2].replace(/_/g, '.');\n device.ipad = true;\n }\n if (ipod) {\n device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n device.iphone = true;\n }\n // iOS 8+ changed UA\n if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\n if (device.osVersion.split('.')[0] === '10') {\n device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\n }\n }\n\n // Desktop\n device.desktop = !(device.os || device.android || device.webView);\n\n // Webview\n device.webView = (iphone || ipad || ipod) && ua.match(/.*AppleWebKit(?!.*Safari)/i);\n\n // Minimal UI\n if (device.os && device.os === 'ios') {\n var osVersionArr = device.osVersion.split('.');\n var metaViewport = _ssrWindow.document.querySelector('meta[name=\"viewport\"]');\n device.minimalUi = !device.webView && (ipod || iphone) && (osVersionArr[0] * 1 === 7 ? osVersionArr[1] * 1 >= 1 : osVersionArr[0] * 1 > 7) && metaViewport && metaViewport.getAttribute('content').indexOf('minimal-ui') >= 0;\n }\n\n // Pixel Ratio\n device.pixelRatio = _ssrWindow.window.devicePixelRatio || 1;\n\n // Export object\n return device;\n}();\n\nfunction onTouchStart(event) {\n var swiper = this;\n var data$$1 = swiper.touchEventsData;\n var params = swiper.params,\n touches = swiper.touches;\n\n if (swiper.animating && params.preventIntercationOnTransition) {\n return;\n }\n var e = event;\n if (e.originalEvent) e = e.originalEvent;\n data$$1.isTouchEvent = e.type === 'touchstart';\n if (!data$$1.isTouchEvent && 'which' in e && e.which === 3) return;\n if (data$$1.isTouched && data$$1.isMoved) return;\n if (params.noSwiping && (0, _dom.$)(e.target).closest(params.noSwipingSelector ? params.noSwipingSelector : '.' + params.noSwipingClass)[0]) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!(0, _dom.$)(e).closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n var startX = touches.currentX;\n var startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n\n if (Device.ios && !Device.cordova && params.iOSEdgeSwipeDetection && startX <= params.iOSEdgeSwipeThreshold && startX >= _ssrWindow.window.screen.width - params.iOSEdgeSwipeThreshold) {\n return;\n }\n\n Utils.extend(data$$1, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n\n touches.startX = startX;\n touches.startY = startY;\n data$$1.touchStartTime = Utils.now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data$$1.allowThresholdMove = false;\n if (e.type !== 'touchstart') {\n var preventDefault = true;\n if ((0, _dom.$)(e.target).is(data$$1.formElements)) preventDefault = false;\n if (_ssrWindow.document.activeElement && (0, _dom.$)(_ssrWindow.document.activeElement).is(data$$1.formElements) && _ssrWindow.document.activeElement !== e.target) {\n _ssrWindow.document.activeElement.blur();\n }\n if (preventDefault && swiper.allowTouchMove) {\n e.preventDefault();\n }\n }\n swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove(event) {\n var swiper = this;\n var data$$1 = swiper.touchEventsData;\n var params = swiper.params,\n touches = swiper.touches,\n rtl = swiper.rtlTranslate;\n\n var e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (!data$$1.isTouched) {\n if (data$$1.startMoving && data$$1.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n if (data$$1.isTouchEvent && e.type === 'mousemove') return;\n var pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n var pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n // isMoved = true;\n swiper.allowClick = false;\n if (data$$1.isTouched) {\n Utils.extend(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data$$1.touchStartTime = Utils.now();\n }\n return;\n }\n if (data$$1.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data$$1.isTouched = false;\n data$$1.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n if (data$$1.isTouchEvent && _ssrWindow.document.activeElement) {\n if (e.target === _ssrWindow.document.activeElement && (0, _dom.$)(e.target).is(data$$1.formElements)) {\n data$$1.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data$$1.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n\n touches.currentX = pageX;\n touches.currentY = pageY;\n\n var diffX = touches.currentX - touches.startX;\n var diffY = touches.currentY - touches.startY;\n\n if (typeof data$$1.isScrolling === 'undefined') {\n var touchAngle = void 0;\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data$$1.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data$$1.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data$$1.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data$$1.startMoving = true;\n }\n }\n if (data$$1.isScrolling) {\n data$$1.isTouched = false;\n return;\n }\n if (!data$$1.startMoving) {\n return;\n }\n swiper.allowClick = false;\n e.preventDefault();\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data$$1.isMoved) {\n if (params.loop) {\n swiper.loopFix();\n }\n data$$1.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n data$$1.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n swiper.emit('sliderMove', e);\n data$$1.isMoved = true;\n\n var diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data$$1.currentTranslate = diff + data$$1.startTranslate;\n\n var disableParentSwiper = true;\n var resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0 && data$$1.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data$$1.currentTranslate = swiper.minTranslate() - 1 + Math.pow(-swiper.minTranslate() + data$$1.startTranslate + diff, resistanceRatio);\n } else if (diff < 0 && data$$1.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data$$1.currentTranslate = swiper.maxTranslate() + 1 - Math.pow(swiper.maxTranslate() - data$$1.startTranslate - diff, resistanceRatio);\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data$$1.currentTranslate < data$$1.startTranslate) {\n data$$1.currentTranslate = data$$1.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data$$1.currentTranslate > data$$1.startTranslate) {\n data$$1.currentTranslate = data$$1.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data$$1.allowThresholdMove) {\n if (!data$$1.allowThresholdMove) {\n data$$1.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data$$1.currentTranslate = data$$1.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data$$1.currentTranslate = data$$1.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger) return;\n\n // Update active index in free mode\n if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode) {\n // Velocity\n if (data$$1.velocities.length === 0) {\n data$$1.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data$$1.touchStartTime\n });\n }\n data$$1.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: Utils.now()\n });\n }\n // Update progress\n swiper.updateProgress(data$$1.currentTranslate);\n // Update translate\n swiper.setTranslate(data$$1.currentTranslate);\n}\n\nfunction onTouchEnd(event) {\n var swiper = this;\n var data$$1 = swiper.touchEventsData;\n\n var params = swiper.params,\n touches = swiper.touches,\n rtl = swiper.rtlTranslate,\n $wrapperEl = swiper.$wrapperEl,\n slidesGrid = swiper.slidesGrid,\n snapGrid = swiper.snapGrid;\n\n var e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (data$$1.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data$$1.allowTouchCallbacks = false;\n if (!data$$1.isTouched) {\n if (data$$1.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data$$1.isMoved = false;\n data$$1.startMoving = false;\n return;\n }\n // Return Grab Cursor\n if (params.grabCursor && data$$1.isMoved && data$$1.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n var touchEndTime = Utils.now();\n var timeDiff = touchEndTime - data$$1.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n swiper.updateClickedSlide(e);\n swiper.emit('tap', e);\n if (timeDiff < 300 && touchEndTime - data$$1.lastClickTime > 300) {\n if (data$$1.clickTimeout) clearTimeout(data$$1.clickTimeout);\n data$$1.clickTimeout = Utils.nextTick(function () {\n if (!swiper || swiper.destroyed) return;\n swiper.emit('click', e);\n }, 300);\n }\n if (timeDiff < 300 && touchEndTime - data$$1.lastClickTime < 300) {\n if (data$$1.clickTimeout) clearTimeout(data$$1.clickTimeout);\n swiper.emit('doubleTap', e);\n }\n }\n\n data$$1.lastClickTime = Utils.now();\n Utils.nextTick(function () {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (!data$$1.isTouched || !data$$1.isMoved || !swiper.swipeDirection || touches.diff === 0 || data$$1.currentTranslate === data$$1.startTranslate) {\n data$$1.isTouched = false;\n data$$1.isMoved = false;\n data$$1.startMoving = false;\n return;\n }\n data$$1.isTouched = false;\n data$$1.isMoved = false;\n data$$1.startMoving = false;\n\n var currentPos = void 0;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data$$1.currentTranslate;\n }\n\n if (params.freeMode) {\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n } else if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n return;\n }\n\n if (params.freeModeMomentum) {\n if (data$$1.velocities.length > 1) {\n var lastMoveEvent = data$$1.velocities.pop();\n var velocityEvent = data$$1.velocities.pop();\n\n var distance = lastMoveEvent.position - velocityEvent.position;\n var time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {\n swiper.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || Utils.now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n swiper.velocity *= params.freeModeMomentumVelocityRatio;\n\n data$$1.velocities.length = 0;\n var momentumDuration = 1000 * params.freeModeMomentumRatio;\n var momentumDistance = swiper.velocity * momentumDuration;\n\n var newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n\n var doBounce = false;\n var afterBouncePosition = void 0;\n var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n var needsLoopFix = void 0;\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeModeMomentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data$$1.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeModeMomentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data$$1.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeModeSticky) {\n var nextSlide = void 0;\n for (var j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n newPosition = -newPosition;\n }\n if (needsLoopFix) {\n swiper.once('transitionEnd', function () {\n swiper.loopFix();\n });\n }\n // Fix duration\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n } else if (params.freeModeSticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (params.freeModeMomentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n $wrapperEl.transitionEnd(function () {\n if (!swiper || swiper.destroyed || !data$$1.allowMomentumBounce) return;\n swiper.emit('momentumBounce');\n\n swiper.setTransition(params.speed);\n swiper.setTranslate(afterBouncePosition);\n $wrapperEl.transitionEnd(function () {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n });\n } else if (swiper.velocity) {\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n if (!swiper.animating) {\n swiper.animating = true;\n $wrapperEl.transitionEnd(function () {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeModeSticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n return;\n }\n\n // Find current slide\n var stopIndex = 0;\n var groupSize = swiper.slidesSizesGrid[0];\n for (var i = 0; i < slidesGrid.length; i += params.slidesPerGroup) {\n if (typeof slidesGrid[i + params.slidesPerGroup] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + params.slidesPerGroup]) {\n stopIndex = i;\n groupSize = slidesGrid[i + params.slidesPerGroup] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n\n // Find current slide size\n var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + params.slidesPerGroup);else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + params.slidesPerGroup);else swiper.slideTo(stopIndex);\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(stopIndex + params.slidesPerGroup);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(stopIndex);\n }\n }\n}\n\nfunction onResize() {\n var swiper = this;\n\n var params = swiper.params,\n el = swiper.el;\n\n\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n var allowSlideNext = swiper.allowSlideNext,\n allowSlidePrev = swiper.allowSlidePrev,\n snapGrid = swiper.snapGrid;\n\n // Disable locks on resize\n\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n\n swiper.updateSize();\n swiper.updateSlides();\n\n if (params.freeMode) {\n var newTranslate = Math.min(Math.max(swiper.translate, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n swiper.updateSlidesClasses();\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}\n\nfunction onClick(e) {\n var swiper = this;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}\n\nfunction attachEvents() {\n var swiper = this;\n var params = swiper.params,\n touchEvents = swiper.touchEvents,\n el = swiper.el,\n wrapperEl = swiper.wrapperEl;\n\n\n {\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n var target = params.touchEventsTarget === 'container' ? el : wrapperEl;\n var capture = !!params.nested;\n\n // Touch Events\n {\n if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n target.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n _ssrWindow.document.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n _ssrWindow.document.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n } else {\n if (Support.touch) {\n var passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n target.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n target.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture: capture } : capture);\n target.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n }\n if (params.simulateTouch && !Device.ios && !Device.android || params.simulateTouch && !Support.touch && Device.ios) {\n target.addEventListener('mousedown', swiper.onTouchStart, false);\n _ssrWindow.document.addEventListener('mousemove', swiper.onTouchMove, capture);\n _ssrWindow.document.addEventListener('mouseup', swiper.onTouchEnd, false);\n }\n }\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n target.addEventListener('click', swiper.onClick, true);\n }\n }\n\n // Resize handler\n swiper.on('resize observerUpdate', onResize, true);\n}\n\nfunction detachEvents() {\n var swiper = this;\n\n var params = swiper.params,\n touchEvents = swiper.touchEvents,\n el = swiper.el,\n wrapperEl = swiper.wrapperEl;\n\n\n var target = params.touchEventsTarget === 'container' ? el : wrapperEl;\n var capture = !!params.nested;\n\n // Touch Events\n {\n if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n target.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n _ssrWindow.document.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n _ssrWindow.document.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n } else {\n if (Support.touch) {\n var passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n target.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n target.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n target.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n }\n if (params.simulateTouch && !Device.ios && !Device.android || params.simulateTouch && !Support.touch && Device.ios) {\n target.removeEventListener('mousedown', swiper.onTouchStart, false);\n _ssrWindow.document.removeEventListener('mousemove', swiper.onTouchMove, capture);\n _ssrWindow.document.removeEventListener('mouseup', swiper.onTouchEnd, false);\n }\n }\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n target.removeEventListener('click', swiper.onClick, true);\n }\n }\n\n // Resize handler\n swiper.off('resize observerUpdate', onResize);\n}\n\nvar events = {\n attachEvents: attachEvents,\n detachEvents: detachEvents\n};\n\nfunction setBreakpoint() {\n var swiper = this;\n var activeIndex = swiper.activeIndex,\n _swiper$loopedSlides = swiper.loopedSlides,\n loopedSlides = _swiper$loopedSlides === undefined ? 0 : _swiper$loopedSlides,\n params = swiper.params;\n\n var breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n // Set breakpoint for window width and update parameters\n var breakpoint = swiper.getBreakpoint(breakpoints);\n if (breakpoint && swiper.currentBreakpoint !== breakpoint) {\n var breakPointsParams = breakpoint in breakpoints ? breakpoints[breakpoint] : swiper.originalParams;\n var needsReLoop = params.loop && breakPointsParams.slidesPerView !== params.slidesPerView;\n\n Utils.extend(swiper.params, breakPointsParams);\n\n Utils.extend(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n\n swiper.currentBreakpoint = breakpoint;\n\n if (needsReLoop) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n swiper.emit('breakpoint', breakPointsParams);\n }\n}\n\nfunction getBreakpoint(breakpoints) {\n // Get breakpoint for window width\n if (!breakpoints) return undefined;\n var breakpoint = false;\n var points = [];\n Object.keys(breakpoints).forEach(function (point) {\n points.push(point);\n });\n points.sort(function (a, b) {\n return parseInt(a, 10) - parseInt(b, 10);\n });\n for (var i = 0; i < points.length; i += 1) {\n var point = points[i];\n if (point >= _ssrWindow.window.innerWidth && !breakpoint) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\n\nvar breakpoints = { setBreakpoint: setBreakpoint, getBreakpoint: getBreakpoint };\n\nvar Browser = function Browser() {\n function isSafari() {\n var ua = _ssrWindow.window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n return {\n isIE: !!_ssrWindow.window.navigator.userAgent.match(/Trident/g) || !!_ssrWindow.window.navigator.userAgent.match(/MSIE/g),\n isSafari: isSafari(),\n isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(_ssrWindow.window.navigator.userAgent)\n };\n}();\n\nfunction addClasses() {\n var swiper = this;\n var classNames = swiper.classNames,\n params = swiper.params,\n rtl = swiper.rtl,\n $el = swiper.$el;\n\n var suffixes = [];\n\n suffixes.push(params.direction);\n\n if (params.freeMode) {\n suffixes.push('free-mode');\n }\n if (!Support.flexbox) {\n suffixes.push('no-flexbox');\n }\n if (params.autoHeight) {\n suffixes.push('autoheight');\n }\n if (rtl) {\n suffixes.push('rtl');\n }\n if (params.slidesPerColumn > 1) {\n suffixes.push('multirow');\n }\n if (Device.android) {\n suffixes.push('android');\n }\n if (Device.ios) {\n suffixes.push('ios');\n }\n // WP8 Touch Events Fix\n if (Browser.isIE && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n suffixes.push('wp8-' + params.direction);\n }\n\n suffixes.forEach(function (suffix) {\n classNames.push(params.containerModifierClass + suffix);\n });\n\n $el.addClass(classNames.join(' '));\n}\n\nfunction removeClasses() {\n var swiper = this;\n var $el = swiper.$el,\n classNames = swiper.classNames;\n\n\n $el.removeClass(classNames.join(' '));\n}\n\nvar classes = { addClasses: addClasses, removeClasses: removeClasses };\n\nfunction loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n var image = void 0;\n function onReady() {\n if (callback) callback();\n }\n if (!imageEl.complete || !checkForComplete) {\n if (src) {\n image = new _ssrWindow.window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n if (sizes) {\n image.sizes = sizes;\n }\n if (srcset) {\n image.srcset = srcset;\n }\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n}\n\nfunction preloadImages() {\n var swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n for (var i = 0; i < swiper.imagesToLoad.length; i += 1) {\n var imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n }\n}\n\nvar images = {\n loadImage: loadImage,\n preloadImages: preloadImages\n};\n\nfunction checkOverflow() {\n var swiper = this;\n var wasLocked = swiper.isLocked;\n\n swiper.isLocked = swiper.snapGrid.length === 1;\n swiper.allowSlideNext = !swiper.isLocked;\n swiper.allowSlidePrev = !swiper.isLocked;\n\n // events\n if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n swiper.navigation.update();\n }\n}\n\nvar checkOverflow$1 = { checkOverflow: checkOverflow };\n\nvar defaults = {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'container',\n initialSlide: 0,\n speed: 300,\n //\n preventIntercationOnTransition: false,\n\n // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n iOSEdgeSwipeDetection: false,\n iOSEdgeSwipeThreshold: 20,\n\n // Free mode\n freeMode: false,\n freeModeMomentum: true,\n freeModeMomentumRatio: 1,\n freeModeMomentumBounce: true,\n freeModeMomentumBounceRatio: 1,\n freeModeMomentumVelocityRatio: 1,\n freeModeSticky: false,\n freeModeMinimumVelocity: 0.02,\n\n // Autoheight\n autoHeight: false,\n\n // Set wrapper width\n setWrapperSize: false,\n\n // Virtual Translate\n virtualTranslate: false,\n\n // Effects\n effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerColumnFill: 'column',\n slidesPerGroup: 1,\n centeredSlides: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\n normalizeSlideIndex: true,\n\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: false,\n\n // Round length\n roundLengths: false,\n\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: true,\n touchReleaseOnEdges: false,\n\n // Unique Navigation Elements\n uniqueNavElements: true,\n\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n\n // Progress\n watchSlidesProgress: false,\n watchSlidesVisibility: false,\n\n // Cursor\n grabCursor: false,\n\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopFillGroupWithBlank: false,\n\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null, // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n\n // Passive Listeners\n passiveListeners: true,\n\n // NS\n containerModifierClass: 'swiper-container-', // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n\n // Callbacks\n runCallbacksOnInit: true\n};\n\nvar prototypes = {\n update: update,\n translate: translate,\n transition: transition$1,\n slide: slide,\n loop: loop,\n grabCursor: grabCursor,\n manipulation: manipulation,\n events: events,\n breakpoints: breakpoints,\n checkOverflow: checkOverflow$1,\n classes: classes,\n images: images\n};\n\nvar extendedDefaults = {};\n\nvar Swiper = function (_SwiperClass) {\n _inherits(Swiper, _SwiperClass);\n\n function Swiper() {\n var _ret3;\n\n _classCallCheck(this, Swiper);\n\n var el = void 0;\n var params = void 0;\n\n for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {\n params = args[0];\n } else {\n el = args[0];\n params = args[1];\n }\n if (!params) params = {};\n\n params = Utils.extend({}, params);\n if (el && !params.el) params.el = el;\n\n var _this = _possibleConstructorReturn(this, (Swiper.__proto__ || Object.getPrototypeOf(Swiper)).call(this, params));\n\n Object.keys(prototypes).forEach(function (prototypeGroup) {\n Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {\n if (!Swiper.prototype[protoMethod]) {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n }\n });\n });\n\n // Swiper Instance\n var swiper = _this;\n if (typeof swiper.modules === 'undefined') {\n swiper.modules = {};\n }\n Object.keys(swiper.modules).forEach(function (moduleName) {\n var module = swiper.modules[moduleName];\n if (module.params) {\n var moduleParamName = Object.keys(module.params)[0];\n var moduleParams = module.params[moduleParamName];\n if ((typeof moduleParams === 'undefined' ? 'undefined' : _typeof(moduleParams)) !== 'object') return;\n if (!(moduleParamName in params && 'enabled' in moduleParams)) return;\n if (params[moduleParamName] === true) {\n params[moduleParamName] = { enabled: true };\n }\n if (_typeof(params[moduleParamName]) === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = { enabled: false };\n }\n });\n\n // Extend defaults with modules params\n var swiperParams = Utils.extend({}, defaults);\n swiper.useModulesParams(swiperParams);\n\n // Extend defaults with passed params\n swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = Utils.extend({}, swiper.params);\n swiper.passedParams = Utils.extend({}, params);\n\n // Save Dom lib\n swiper.$ = _dom.$;\n\n // Find el\n var $el = (0, _dom.$)(swiper.params.el);\n el = $el[0];\n\n if (!el) {\n var _ret;\n\n return _ret = undefined, _possibleConstructorReturn(_this, _ret);\n }\n\n if ($el.length > 1) {\n var _ret2;\n\n var swipers = [];\n $el.each(function (index$$1, containerEl) {\n var newParams = Utils.extend({}, params, { el: containerEl });\n swipers.push(new Swiper(newParams));\n });\n return _ret2 = swipers, _possibleConstructorReturn(_this, _ret2);\n }\n\n el.swiper = swiper;\n $el.data('swiper', swiper);\n\n // Find Wrapper\n var $wrapperEl = $el.children('.' + swiper.params.wrapperClass);\n\n // Extend Swiper\n Utils.extend(swiper, {\n $el: $el,\n el: el,\n $wrapperEl: $wrapperEl,\n wrapperEl: $wrapperEl[0],\n\n // Classes\n classNames: [],\n\n // Slides\n slides: (0, _dom.$)(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal: function isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical: function isVertical() {\n return swiper.params.direction === 'vertical';\n },\n\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n\n //\n isBeginning: true,\n isEnd: false,\n\n // Props\n translate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n\n // Touch Events\n touchEvents: function touchEvents() {\n var touch = ['touchstart', 'touchmove', 'touchend'];\n var desktop = ['mousedown', 'mousemove', 'mouseup'];\n if (Support.pointerEvents) {\n desktop = ['pointerdown', 'pointermove', 'pointerup'];\n } else if (Support.prefixedPointerEvents) {\n desktop = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp'];\n }\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2]\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2]\n };\n return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }(),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n formElements: 'input, select, option, textarea, button, video',\n // Last click time\n lastClickTime: Utils.now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined\n },\n\n // Clicks\n allowClick: true,\n\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n\n });\n\n // Install Modules\n swiper.useModules();\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n return _ret3 = swiper, _possibleConstructorReturn(_this, _ret3);\n }\n\n _createClass(Swiper, [{\n key: 'slidesPerViewDynamic',\n value: function slidesPerViewDynamic() {\n var swiper = this;\n var params = swiper.params,\n slides = swiper.slides,\n slidesGrid = swiper.slidesGrid,\n swiperSize = swiper.size,\n activeIndex = swiper.activeIndex;\n\n var spv = 1;\n if (params.centeredSlides) {\n var slideSize = slides[activeIndex].swiperSlideSize;\n var breakLoop = void 0;\n for (var i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (var _i5 = activeIndex - 1; _i5 >= 0; _i5 -= 1) {\n if (slides[_i5] && !breakLoop) {\n slideSize += slides[_i5].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n for (var _i6 = activeIndex + 1; _i6 < slides.length; _i6 += 1) {\n if (slidesGrid[_i6] - slidesGrid[activeIndex] < swiperSize) {\n spv += 1;\n }\n }\n }\n return spv;\n }\n }, {\n key: 'update',\n value: function update() {\n var swiper = this;\n if (!swiper || swiper.destroyed) return;\n var snapGrid = swiper.snapGrid,\n params = swiper.params;\n // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n var translated = void 0;\n if (swiper.params.freeMode) {\n setTranslate();\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n }, {\n key: 'init',\n value: function init() {\n var swiper = this;\n if (swiper.initialized) return;\n\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);\n }\n\n // Attach events\n swiper.attachEvents();\n\n // Init Flag\n swiper.initialized = true;\n\n // Emit\n swiper.emit('init');\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n var deleteInstance = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var cleanStyles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n var swiper = this;\n var params = swiper.params,\n $el = swiper.$el,\n $wrapperEl = swiper.$wrapperEl,\n slides = swiper.slides;\n\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n if (slides && slides.length) {\n slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index').removeAttr('data-swiper-column').removeAttr('data-swiper-row');\n }\n }\n\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(function (eventName) {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n swiper.$el.data('swiper', null);\n Utils.deleteProps(swiper);\n }\n swiper.destroyed = true;\n }\n }], [{\n key: 'extendDefaults',\n value: function extendDefaults(newDefaults) {\n Utils.extend(extendedDefaults, newDefaults);\n }\n }, {\n key: 'extendedDefaults',\n get: function get() {\n return extendedDefaults;\n }\n }, {\n key: 'defaults',\n get: function get() {\n return defaults;\n }\n }, {\n key: 'Class',\n get: function get() {\n return SwiperClass;\n }\n }, {\n key: '$',\n get: function get() {\n return _dom.$;\n }\n }]);\n\n return Swiper;\n}(SwiperClass);\n\nvar Device$1 = {\n name: 'device',\n proto: {\n device: Device\n },\n static: {\n device: Device\n }\n};\n\nvar Support$1 = {\n name: 'support',\n proto: {\n support: Support\n },\n static: {\n support: Support\n }\n};\n\nvar Browser$1 = {\n name: 'browser',\n proto: {\n browser: Browser\n },\n static: {\n browser: Browser\n }\n};\n\nvar Resize = {\n name: 'resize',\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n resize: {\n resizeHandler: function resizeHandler() {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n swiper.emit('beforeResize');\n swiper.emit('resize');\n },\n orientationChangeHandler: function orientationChangeHandler() {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n swiper.emit('orientationchange');\n }\n }\n });\n },\n\n on: {\n init: function init() {\n var swiper = this;\n // Emit resize\n _ssrWindow.window.addEventListener('resize', swiper.resize.resizeHandler);\n\n // Emit orientationchange\n _ssrWindow.window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n },\n destroy: function destroy() {\n var swiper = this;\n _ssrWindow.window.removeEventListener('resize', swiper.resize.resizeHandler);\n _ssrWindow.window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n }\n }\n};\n\nvar Observer = {\n func: _ssrWindow.window.MutationObserver || _ssrWindow.window.WebkitMutationObserver,\n attach: function attach(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var swiper = this;\n\n var ObserverFunc = Observer.func;\n var observer = new ObserverFunc(function (mutations) {\n mutations.forEach(function (mutation) {\n swiper.emit('observerUpdate', mutation);\n });\n });\n\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n\n swiper.observer.observers.push(observer);\n },\n init: function init() {\n var swiper = this;\n if (!Support.observer || !swiper.params.observer) return;\n if (swiper.params.observeParents) {\n var containerParents = swiper.$el.parents();\n for (var i = 0; i < containerParents.length; i += 1) {\n swiper.observer.attach(containerParents[i]);\n }\n }\n // Observe container\n swiper.observer.attach(swiper.$el[0], { childList: false });\n\n // Observe wrapper\n swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.observer.observers.forEach(function (observer) {\n observer.disconnect();\n });\n swiper.observer.observers = [];\n }\n};\n\nvar Observer$1 = {\n name: 'observer',\n params: {\n observer: false,\n observeParents: false\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n observer: {\n init: Observer.init.bind(swiper),\n attach: Observer.attach.bind(swiper),\n destroy: Observer.destroy.bind(swiper),\n observers: []\n }\n });\n },\n\n on: {\n init: function init() {\n var swiper = this;\n swiper.observer.init();\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.observer.destroy();\n }\n }\n};\n\nvar Virtual = {\n update: function update(force) {\n var swiper = this;\n var _swiper$params = swiper.params,\n slidesPerView = _swiper$params.slidesPerView,\n slidesPerGroup = _swiper$params.slidesPerGroup,\n centeredSlides = _swiper$params.centeredSlides;\n var _swiper$virtual = swiper.virtual,\n previousFrom = _swiper$virtual.from,\n previousTo = _swiper$virtual.to,\n slides = _swiper$virtual.slides,\n previousSlidesGrid = _swiper$virtual.slidesGrid,\n renderSlide = _swiper$virtual.renderSlide,\n previousOffset = _swiper$virtual.offset;\n\n swiper.updateActiveIndex();\n var activeIndex = swiper.activeIndex || 0;\n\n var offsetProp = void 0;\n if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n\n var slidesAfter = void 0;\n var slidesBefore = void 0;\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup;\n slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup;\n } else {\n slidesAfter = slidesPerView + (slidesPerGroup - 1);\n slidesBefore = slidesPerGroup;\n }\n var from = Math.max((activeIndex || 0) - slidesBefore, 0);\n var to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n var offset$$1 = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n\n Utils.extend(swiper.virtual, {\n from: from,\n to: to,\n offset: offset$$1,\n slidesGrid: swiper.slidesGrid\n });\n\n function onRendered() {\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n if (swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n }\n\n if (previousFrom === from && previousTo === to && !force) {\n if (swiper.slidesGrid !== previousSlidesGrid && offset$$1 !== previousOffset) {\n swiper.slides.css(offsetProp, offset$$1 + 'px');\n }\n swiper.updateProgress();\n return;\n }\n if (swiper.params.virtual.renderExternal) {\n swiper.params.virtual.renderExternal.call(swiper, {\n offset: offset$$1,\n from: from,\n to: to,\n slides: function getSlides() {\n var slidesToRender = [];\n for (var i = from; i <= to; i += 1) {\n slidesToRender.push(slides[i]);\n }\n return slidesToRender;\n }()\n });\n onRendered();\n return;\n }\n var prependIndexes = [];\n var appendIndexes = [];\n if (force) {\n swiper.$wrapperEl.find('.' + swiper.params.slideClass).remove();\n } else {\n for (var i = previousFrom; i <= previousTo; i += 1) {\n if (i < from || i > to) {\n swiper.$wrapperEl.find('.' + swiper.params.slideClass + '[data-swiper-slide-index=\"' + i + '\"]').remove();\n }\n }\n }\n for (var _i7 = 0; _i7 < slides.length; _i7 += 1) {\n if (_i7 >= from && _i7 <= to) {\n if (typeof previousTo === 'undefined' || force) {\n appendIndexes.push(_i7);\n } else {\n if (_i7 > previousTo) appendIndexes.push(_i7);\n if (_i7 < previousFrom) prependIndexes.push(_i7);\n }\n }\n }\n appendIndexes.forEach(function (index$$1) {\n swiper.$wrapperEl.append(renderSlide(slides[index$$1], index$$1));\n });\n prependIndexes.sort(function (a, b) {\n return a < b;\n }).forEach(function (index$$1) {\n swiper.$wrapperEl.prepend(renderSlide(slides[index$$1], index$$1));\n });\n swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, offset$$1 + 'px');\n onRendered();\n },\n renderSlide: function renderSlide(slide, index$$1) {\n var swiper = this;\n var params = swiper.params.virtual;\n if (params.cache && swiper.virtual.cache[index$$1]) {\n return swiper.virtual.cache[index$$1];\n }\n var $slideEl = params.renderSlide ? (0, _dom.$)(params.renderSlide.call(swiper, slide, index$$1)) : (0, _dom.$)('
' + slide + '
');\n if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index$$1);\n if (params.cache) swiper.virtual.cache[index$$1] = $slideEl;\n return $slideEl;\n },\n appendSlide: function appendSlide(slide) {\n var swiper = this;\n swiper.virtual.slides.push(slide);\n swiper.virtual.update(true);\n },\n prependSlide: function prependSlide(slide) {\n var swiper = this;\n swiper.virtual.slides.unshift(slide);\n if (swiper.params.virtual.cache) {\n var cache = swiper.virtual.cache;\n var newCache = {};\n Object.keys(cache).forEach(function (cachedIndex) {\n newCache[cachedIndex + 1] = cache[cachedIndex];\n });\n swiper.virtual.cache = newCache;\n }\n swiper.virtual.update(true);\n swiper.slideNext(0);\n }\n};\n\nvar Virtual$1 = {\n name: 'virtual',\n params: {\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderSlide: null,\n renderExternal: null\n }\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n virtual: {\n update: Virtual.update.bind(swiper),\n appendSlide: Virtual.appendSlide.bind(swiper),\n prependSlide: Virtual.prependSlide.bind(swiper),\n renderSlide: Virtual.renderSlide.bind(swiper),\n slides: swiper.params.virtual.slides,\n cache: {}\n }\n });\n },\n\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (!swiper.params.virtual.enabled) return;\n swiper.classNames.push(swiper.params.containerModifierClass + 'virtual');\n var overwriteParams = {\n watchSlidesProgress: true\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n\n swiper.virtual.update();\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n if (!swiper.params.virtual.enabled) return;\n swiper.virtual.update();\n }\n }\n};\n\nvar Keyboard = {\n handle: function handle(event) {\n var swiper = this;\n var rtl = swiper.rtlTranslate;\n\n var e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n var kc = e.keyCode || e.charCode;\n // Directions locks\n if (!swiper.allowSlideNext && (swiper.isHorizontal() && kc === 39 || swiper.isVertical() && kc === 40)) {\n return false;\n }\n if (!swiper.allowSlidePrev && (swiper.isHorizontal() && kc === 37 || swiper.isVertical() && kc === 38)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n if (_ssrWindow.document.activeElement && _ssrWindow.document.activeElement.nodeName && (_ssrWindow.document.activeElement.nodeName.toLowerCase() === 'input' || _ssrWindow.document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n if (swiper.params.keyboard.onlyInViewport && (kc === 37 || kc === 39 || kc === 38 || kc === 40)) {\n var inView = false;\n // Check that swiper should be inside of visible area of window\n if (swiper.$el.parents('.' + swiper.params.slideClass).length > 0 && swiper.$el.parents('.' + swiper.params.slideActiveClass).length === 0) {\n return undefined;\n }\n var windowWidth = _ssrWindow.window.innerWidth;\n var windowHeight = _ssrWindow.window.innerHeight;\n var swiperOffset = swiper.$el.offset();\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n var swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]];\n for (var i = 0; i < swiperCoord.length; i += 1) {\n var point = swiperCoord[i];\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n inView = true;\n }\n }\n if (!inView) return undefined;\n }\n if (swiper.isHorizontal()) {\n if (kc === 37 || kc === 39) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n if (kc === 39 && !rtl || kc === 37 && rtl) swiper.slideNext();\n if (kc === 37 && !rtl || kc === 39 && rtl) swiper.slidePrev();\n } else {\n if (kc === 38 || kc === 40) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n if (kc === 40) swiper.slideNext();\n if (kc === 38) swiper.slidePrev();\n }\n swiper.emit('keyPress', kc);\n return undefined;\n },\n enable: function enable() {\n var swiper = this;\n if (swiper.keyboard.enabled) return;\n (0, _dom.$)(_ssrWindow.document).on('keydown', swiper.keyboard.handle);\n swiper.keyboard.enabled = true;\n },\n disable: function disable() {\n var swiper = this;\n if (!swiper.keyboard.enabled) return;\n (0, _dom.$)(_ssrWindow.document).off('keydown', swiper.keyboard.handle);\n swiper.keyboard.enabled = false;\n }\n};\n\nvar Keyboard$1 = {\n name: 'keyboard',\n params: {\n keyboard: {\n enabled: false,\n onlyInViewport: true\n }\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n keyboard: {\n enabled: false,\n enable: Keyboard.enable.bind(swiper),\n disable: Keyboard.disable.bind(swiper),\n handle: Keyboard.handle.bind(swiper)\n }\n });\n },\n\n on: {\n init: function init() {\n var swiper = this;\n if (swiper.params.keyboard.enabled) {\n swiper.keyboard.enable();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.keyboard.enabled) {\n swiper.keyboard.disable();\n }\n }\n }\n};\n\nfunction isEventSupported() {\n var eventName = 'onwheel';\n var isSupported = eventName in _ssrWindow.document;\n\n if (!isSupported) {\n var element = _ssrWindow.document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported && _ssrWindow.document.implementation && _ssrWindow.document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n _ssrWindow.document.implementation.hasFeature('', '') !== true) {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = _ssrWindow.document.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n}\nvar Mousewheel = {\n lastScrollTime: Utils.now(),\n event: function getEvent() {\n if (_ssrWindow.window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';\n return isEventSupported() ? 'wheel' : 'mousewheel';\n }(),\n normalize: function normalize(e) {\n // Reasonable defaults\n var PIXEL_STEP = 10;\n var LINE_HEIGHT = 40;\n var PAGE_HEIGHT = 800;\n\n var sX = 0;\n var sY = 0; // spinX, spinY\n var pX = 0;\n var pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in e) {\n sY = e.detail;\n }\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY\n };\n },\n handleMouseEnter: function handleMouseEnter() {\n var swiper = this;\n swiper.mouseEntered = true;\n },\n handleMouseLeave: function handleMouseLeave() {\n var swiper = this;\n swiper.mouseEntered = false;\n },\n handle: function handle(event) {\n var e = event;\n var swiper = this;\n var params = swiper.params.mousewheel;\n\n if (!swiper.mouseEntered && !params.releaseOnEdges) return true;\n\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n var delta = 0;\n var rtlFactor = swiper.rtlTranslate ? -1 : 1;\n\n var data$$1 = Mousewheel.normalize(e);\n\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data$$1.pixelX) > Math.abs(data$$1.pixelY)) delta = data$$1.pixelX * rtlFactor;else return true;\n } else if (Math.abs(data$$1.pixelY) > Math.abs(data$$1.pixelX)) delta = data$$1.pixelY;else return true;\n } else {\n delta = Math.abs(data$$1.pixelX) > Math.abs(data$$1.pixelY) ? -data$$1.pixelX * rtlFactor : -data$$1.pixelY;\n }\n\n if (delta === 0) return true;\n\n if (params.invert) delta = -delta;\n\n if (!swiper.params.freeMode) {\n if (Utils.now() - swiper.mousewheel.lastScrollTime > 60) {\n if (delta < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n swiper.emit('scroll', e);\n } else if (params.releaseOnEdges) return true;\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n swiper.emit('scroll', e);\n } else if (params.releaseOnEdges) return true;\n }\n swiper.mousewheel.lastScrollTime = new _ssrWindow.window.Date().getTime();\n } else {\n // Freemode or scrollContainer:\n if (swiper.params.loop) {\n swiper.loopFix();\n }\n var position = swiper.getTranslate() + delta * params.sensitivity;\n var wasBeginning = swiper.isBeginning;\n var wasEnd = swiper.isEnd;\n\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeModeSticky) {\n clearTimeout(swiper.mousewheel.timeout);\n swiper.mousewheel.timeout = Utils.nextTick(function () {\n swiper.slideToClosest();\n }, 300);\n }\n // Emit event\n swiper.emit('scroll', e);\n\n // Stop autoplay\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.stopAutoplay();\n // Return page scroll on edge positions\n if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n }\n\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n return false;\n },\n enable: function enable() {\n var swiper = this;\n if (!Mousewheel.event) return false;\n if (swiper.mousewheel.enabled) return false;\n var target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarged !== 'container') {\n target = (0, _dom.$)(swiper.params.mousewheel.eventsTarged);\n }\n target.on('mouseenter', swiper.mousewheel.handleMouseEnter);\n target.on('mouseleave', swiper.mousewheel.handleMouseLeave);\n target.on(Mousewheel.event, swiper.mousewheel.handle);\n swiper.mousewheel.enabled = true;\n return true;\n },\n disable: function disable() {\n var swiper = this;\n if (!Mousewheel.event) return false;\n if (!swiper.mousewheel.enabled) return false;\n var target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarged !== 'container') {\n target = (0, _dom.$)(swiper.params.mousewheel.eventsTarged);\n }\n target.off(Mousewheel.event, swiper.mousewheel.handle);\n swiper.mousewheel.enabled = false;\n return true;\n }\n};\n\nvar Mousewheel$1 = {\n name: 'mousewheel',\n params: {\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarged: 'container'\n }\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n mousewheel: {\n enabled: false,\n enable: Mousewheel.enable.bind(swiper),\n disable: Mousewheel.disable.bind(swiper),\n handle: Mousewheel.handle.bind(swiper),\n handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),\n handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),\n lastScrollTime: Utils.now()\n }\n });\n },\n\n on: {\n init: function init() {\n var swiper = this;\n if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.mousewheel.enabled) swiper.mousewheel.disable();\n }\n }\n};\n\nvar Navigation = {\n update: function update() {\n // Update Navigation Buttons\n var swiper = this;\n var params = swiper.params.navigation;\n\n if (swiper.params.loop) return;\n var _swiper$navigation = swiper.navigation,\n $nextEl = _swiper$navigation.$nextEl,\n $prevEl = _swiper$navigation.$prevEl;\n\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n $prevEl.addClass(params.disabledClass);\n } else {\n $prevEl.removeClass(params.disabledClass);\n }\n $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n $nextEl.addClass(params.disabledClass);\n } else {\n $nextEl.removeClass(params.disabledClass);\n }\n $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n },\n init: function init() {\n var swiper = this;\n var params = swiper.params.navigation;\n if (!(params.nextEl || params.prevEl)) return;\n\n var $nextEl = void 0;\n var $prevEl = void 0;\n if (params.nextEl) {\n $nextEl = (0, _dom.$)(params.nextEl);\n if (swiper.params.uniqueNavElements && typeof params.nextEl === 'string' && $nextEl.length > 1 && swiper.$el.find(params.nextEl).length === 1) {\n $nextEl = swiper.$el.find(params.nextEl);\n }\n }\n if (params.prevEl) {\n $prevEl = (0, _dom.$)(params.prevEl);\n if (swiper.params.uniqueNavElements && typeof params.prevEl === 'string' && $prevEl.length > 1 && swiper.$el.find(params.prevEl).length === 1) {\n $prevEl = swiper.$el.find(params.prevEl);\n }\n }\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', function (e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop) return;\n swiper.slideNext();\n });\n }\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', function (e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop) return;\n swiper.slidePrev();\n });\n }\n\n Utils.extend(swiper.navigation, {\n $nextEl: $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl: $prevEl,\n prevEl: $prevEl && $prevEl[0]\n });\n },\n destroy: function destroy() {\n var swiper = this;\n var _swiper$navigation2 = swiper.navigation,\n $nextEl = _swiper$navigation2.$nextEl,\n $prevEl = _swiper$navigation2.$prevEl;\n\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click');\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click');\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n }\n};\n\nvar Navigation$1 = {\n name: 'navigation',\n params: {\n navigation: {\n nextEl: null,\n prevEl: null,\n\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock'\n }\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n navigation: {\n init: Navigation.init.bind(swiper),\n update: Navigation.update.bind(swiper),\n destroy: Navigation.destroy.bind(swiper)\n }\n });\n },\n\n on: {\n init: function init() {\n var swiper = this;\n swiper.navigation.init();\n swiper.navigation.update();\n },\n toEdge: function toEdge() {\n var swiper = this;\n swiper.navigation.update();\n },\n fromEdge: function fromEdge() {\n var swiper = this;\n swiper.navigation.update();\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.navigation.destroy();\n },\n click: function click(e) {\n var swiper = this;\n var _swiper$navigation3 = swiper.navigation,\n $nextEl = _swiper$navigation3.$nextEl,\n $prevEl = _swiper$navigation3.$prevEl;\n\n if (swiper.params.navigation.hideOnClick && !(0, _dom.$)(e.target).is($prevEl) && !(0, _dom.$)(e.target).is($nextEl)) {\n if ($nextEl) $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n if ($prevEl) $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n }\n};\n\nvar Pagination = {\n update: function update() {\n // Render || Update Pagination bullets/items\n var swiper = this;\n var rtl = swiper.rtl;\n var params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n var $el = swiper.pagination.$el;\n // Current/Total\n var current = void 0;\n var total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n current -= slidesLength - swiper.loopedSlides * 2;\n }\n if (current > total - 1) current -= total;\n if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n var bullets = swiper.pagination.bullets;\n var firstIndex = void 0;\n var lastIndex = void 0;\n var midIndex = void 0;\n if (params.dynamicBullets) {\n swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(swiper.isHorizontal() ? 'width' : 'height', swiper.pagination.bulletSize * (params.dynamicMainBullets + 4) + 'px');\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n swiper.pagination.dynamicBulletIndex += current - swiper.previousIndex;\n if (swiper.pagination.dynamicBulletIndex > params.dynamicMainBullets - 1) {\n swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (swiper.pagination.dynamicBulletIndex < 0) {\n swiper.pagination.dynamicBulletIndex = 0;\n }\n }\n firstIndex = current - swiper.pagination.dynamicBulletIndex;\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.removeClass(params.bulletActiveClass + ' ' + params.bulletActiveClass + '-next ' + params.bulletActiveClass + '-next-next ' + params.bulletActiveClass + '-prev ' + params.bulletActiveClass + '-prev-prev ' + params.bulletActiveClass + '-main');\n if ($el.length > 1) {\n bullets.each(function (index$$1, bullet) {\n var $bullet = (0, _dom.$)(bullet);\n var bulletIndex = $bullet.index();\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(params.bulletActiveClass + '-main');\n }\n if (bulletIndex === firstIndex) {\n $bullet.prev().addClass(params.bulletActiveClass + '-prev').prev().addClass(params.bulletActiveClass + '-prev-prev');\n }\n if (bulletIndex === lastIndex) {\n $bullet.next().addClass(params.bulletActiveClass + '-next').next().addClass(params.bulletActiveClass + '-next-next');\n }\n }\n });\n } else {\n var $bullet = bullets.eq(current);\n $bullet.addClass(params.bulletActiveClass);\n if (params.dynamicBullets) {\n var $firstDisplayedBullet = bullets.eq(firstIndex);\n var $lastDisplayedBullet = bullets.eq(lastIndex);\n for (var i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(params.bulletActiveClass + '-main');\n }\n $firstDisplayedBullet.prev().addClass(params.bulletActiveClass + '-prev').prev().addClass(params.bulletActiveClass + '-prev-prev');\n $lastDisplayedBullet.next().addClass(params.bulletActiveClass + '-next').next().addClass(params.bulletActiveClass + '-next-next');\n }\n }\n if (params.dynamicBullets) {\n var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n var bulletsOffset = (swiper.pagination.bulletSize * dynamicBulletsLength - swiper.pagination.bulletSize) / 2 - midIndex * swiper.pagination.bulletSize;\n var offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', bulletsOffset + 'px');\n }\n }\n if (params.type === 'fraction') {\n $el.find('.' + params.currentClass).text(current + 1);\n $el.find('.' + params.totalClass).text(total);\n }\n if (params.type === 'progressbar') {\n var progressbarDirection = void 0;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n var scale = (current + 1) / total;\n var scaleX = 1;\n var scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n $el.find('.' + params.progressbarFillClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(swiper.params.speed);\n }\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n swiper.emit('paginationRender', swiper, $el[0]);\n } else {\n swiper.emit('paginationUpdate', swiper, $el[0]);\n }\n $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n },\n render: function render() {\n // Render Container\n var swiper = this;\n var params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n\n var $el = swiper.pagination.$el;\n var paginationHTML = '';\n if (params.type === 'bullets') {\n var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n for (var i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += '<' + params.bulletElement + ' class=\"' + params.bulletClass + '\">';\n }\n }\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find('.' + params.bulletClass);\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = '' + ' / ' + ('');\n }\n $el.html(paginationHTML);\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = '';\n }\n $el.html(paginationHTML);\n }\n if (params.type !== 'custom') {\n swiper.emit('paginationRender', swiper.pagination.$el[0]);\n }\n },\n init: function init() {\n var swiper = this;\n var params = swiper.params.pagination;\n if (!params.el) return;\n\n var $el = (0, _dom.$)(params.el);\n if ($el.length === 0) return;\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && swiper.$el.find(params.el).length === 1) {\n $el = swiper.$el.find(params.el);\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass('' + params.modifierClass + params.type + '-dynamic');\n swiper.pagination.dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', '.' + params.bulletClass, function onClick(e) {\n e.preventDefault();\n var index$$1 = (0, _dom.$)(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index$$1 += swiper.loopedSlides;\n swiper.slideTo(index$$1);\n });\n }\n\n Utils.extend(swiper.pagination, {\n $el: $el,\n el: $el[0]\n });\n },\n destroy: function destroy() {\n var swiper = this;\n var params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n var $el = swiper.pagination.$el;\n\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n if (params.clickable) {\n $el.off('click', '.' + params.bulletClass);\n }\n }\n};\n\nvar Pagination$1 = {\n name: 'pagination',\n params: {\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n bulletClass: 'swiper-pagination-bullet',\n bulletActiveClass: 'swiper-pagination-bullet-active',\n modifierClass: 'swiper-pagination-', // NEW\n currentClass: 'swiper-pagination-current',\n totalClass: 'swiper-pagination-total',\n hiddenClass: 'swiper-pagination-hidden',\n progressbarFillClass: 'swiper-pagination-progressbar-fill',\n progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',\n clickableClass: 'swiper-pagination-clickable', // NEW\n lockClass: 'swiper-pagination-lock'\n }\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n pagination: {\n init: Pagination.init.bind(swiper),\n render: Pagination.render.bind(swiper),\n update: Pagination.update.bind(swiper),\n destroy: Pagination.destroy.bind(swiper),\n dynamicBulletIndex: 0\n }\n });\n },\n\n on: {\n init: function init() {\n var swiper = this;\n swiper.pagination.init();\n swiper.pagination.render();\n swiper.pagination.update();\n },\n activeIndexChange: function activeIndexChange() {\n var swiper = this;\n if (swiper.params.loop) {\n swiper.pagination.update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n swiper.pagination.update();\n }\n },\n snapIndexChange: function snapIndexChange() {\n var swiper = this;\n if (!swiper.params.loop) {\n swiper.pagination.update();\n }\n },\n slidesLengthChange: function slidesLengthChange() {\n var swiper = this;\n if (swiper.params.loop) {\n swiper.pagination.render();\n swiper.pagination.update();\n }\n },\n snapGridLengthChange: function snapGridLengthChange() {\n var swiper = this;\n if (!swiper.params.loop) {\n swiper.pagination.render();\n swiper.pagination.update();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.pagination.destroy();\n },\n click: function click(e) {\n var swiper = this;\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && swiper.pagination.$el.length > 0 && !(0, _dom.$)(e.target).hasClass(swiper.params.pagination.bulletClass)) {\n swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n }\n }\n};\n\nvar Scrollbar = {\n setTranslate: function setTranslate() {\n var swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n var scrollbar = swiper.scrollbar,\n rtl = swiper.rtlTranslate,\n progress = swiper.progress;\n var dragSize = scrollbar.dragSize,\n trackSize = scrollbar.trackSize,\n $dragEl = scrollbar.$dragEl,\n $el = scrollbar.$el;\n\n var params = swiper.params.scrollbar;\n\n var newSize = dragSize;\n var newPos = (trackSize - dragSize) * progress;\n if (rtl) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n if (swiper.isHorizontal()) {\n if (Support.transforms3d) {\n $dragEl.transform('translate3d(' + newPos + 'px, 0, 0)');\n } else {\n $dragEl.transform('translateX(' + newPos + 'px)');\n }\n $dragEl[0].style.width = newSize + 'px';\n } else {\n if (Support.transforms3d) {\n $dragEl.transform('translate3d(0px, ' + newPos + 'px, 0)');\n } else {\n $dragEl.transform('translateY(' + newPos + 'px)');\n }\n $dragEl[0].style.height = newSize + 'px';\n }\n if (params.hide) {\n clearTimeout(swiper.scrollbar.timeout);\n $el[0].style.opacity = 1;\n swiper.scrollbar.timeout = setTimeout(function () {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.$dragEl.transition(duration);\n },\n updateSize: function updateSize() {\n var swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n\n var scrollbar = swiper.scrollbar;\n var $dragEl = scrollbar.$dragEl,\n $el = scrollbar.$el;\n\n\n $dragEl[0].style.width = '';\n $dragEl[0].style.height = '';\n var trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n\n var divider = swiper.size / swiper.virtualSize;\n var moveDivider = divider * (trackSize / swiper.size);\n var dragSize = void 0;\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n\n if (swiper.isHorizontal()) {\n $dragEl[0].style.width = dragSize + 'px';\n } else {\n $dragEl[0].style.height = dragSize + 'px';\n }\n\n if (divider >= 1) {\n $el[0].style.display = 'none';\n } else {\n $el[0].style.display = '';\n }\n if (swiper.params.scrollbarHide) {\n $el[0].style.opacity = 0;\n }\n Utils.extend(scrollbar, {\n trackSize: trackSize,\n divider: divider,\n moveDivider: moveDivider,\n dragSize: dragSize\n });\n scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n },\n setDragPosition: function setDragPosition(e) {\n var swiper = this;\n var scrollbar = swiper.scrollbar,\n rtl = swiper.rtlTranslate;\n var $el = scrollbar.$el,\n dragSize = scrollbar.dragSize,\n trackSize = scrollbar.trackSize;\n\n\n var pointerPosition = void 0;\n if (swiper.isHorizontal()) {\n pointerPosition = e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX || e.clientX;\n } else {\n pointerPosition = e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY || e.clientY;\n }\n var positionRatio = void 0;\n positionRatio = (pointerPosition - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - dragSize / 2) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n\n var position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n },\n onDragStart: function onDragStart(e) {\n var swiper = this;\n var params = swiper.params.scrollbar;\n var scrollbar = swiper.scrollbar,\n $wrapperEl = swiper.$wrapperEl;\n var $el = scrollbar.$el,\n $dragEl = scrollbar.$dragEl;\n\n swiper.scrollbar.isTouched = true;\n e.preventDefault();\n e.stopPropagation();\n\n $wrapperEl.transition(100);\n $dragEl.transition(100);\n scrollbar.setDragPosition(e);\n\n clearTimeout(swiper.scrollbar.dragTimeout);\n\n $el.transition(0);\n if (params.hide) {\n $el.css('opacity', 1);\n }\n swiper.emit('scrollbarDragStart', e);\n },\n onDragMove: function onDragMove(e) {\n var swiper = this;\n var scrollbar = swiper.scrollbar,\n $wrapperEl = swiper.$wrapperEl;\n var $el = scrollbar.$el,\n $dragEl = scrollbar.$dragEl;\n\n\n if (!swiper.scrollbar.isTouched) return;\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n scrollbar.setDragPosition(e);\n $wrapperEl.transition(0);\n $el.transition(0);\n $dragEl.transition(0);\n swiper.emit('scrollbarDragMove', e);\n },\n onDragEnd: function onDragEnd(e) {\n var swiper = this;\n\n var params = swiper.params.scrollbar;\n var scrollbar = swiper.scrollbar;\n var $el = scrollbar.$el;\n\n\n if (!swiper.scrollbar.isTouched) return;\n swiper.scrollbar.isTouched = false;\n if (params.hide) {\n clearTimeout(swiper.scrollbar.dragTimeout);\n swiper.scrollbar.dragTimeout = Utils.nextTick(function () {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n swiper.emit('scrollbarDragEnd', e);\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n },\n enableDraggable: function enableDraggable() {\n var swiper = this;\n if (!swiper.params.scrollbar.el) return;\n var scrollbar = swiper.scrollbar,\n touchEvents = swiper.touchEvents,\n touchEventsDesktop = swiper.touchEventsDesktop,\n params = swiper.params;\n\n var $el = scrollbar.$el;\n var target = $el[0];\n var activeListener = Support.passiveListener && params.passiveListener ? { passive: false, capture: false } : false;\n var passiveListener = Support.passiveListener && params.passiveListener ? { passive: true, capture: false } : false;\n if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n _ssrWindow.document.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n _ssrWindow.document.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n } else {\n if (Support.touch) {\n target.addEventListener(touchEvents.start, swiper.scrollbar.onDragStart, activeListener);\n target.addEventListener(touchEvents.move, swiper.scrollbar.onDragMove, activeListener);\n target.addEventListener(touchEvents.end, swiper.scrollbar.onDragEnd, passiveListener);\n }\n if (params.simulateTouch && !Device.ios && !Device.android || params.simulateTouch && !Support.touch && Device.ios) {\n target.addEventListener('mousedown', swiper.scrollbar.onDragStart, activeListener);\n _ssrWindow.document.addEventListener('mousemove', swiper.scrollbar.onDragMove, activeListener);\n _ssrWindow.document.addEventListener('mouseup', swiper.scrollbar.onDragEnd, passiveListener);\n }\n }\n },\n disableDraggable: function disableDraggable() {\n var swiper = this;\n if (!swiper.params.scrollbar.el) return;\n var scrollbar = swiper.scrollbar,\n touchEvents = swiper.touchEvents,\n touchEventsDesktop = swiper.touchEventsDesktop,\n params = swiper.params;\n\n var $el = scrollbar.$el;\n var target = $el[0];\n var activeListener = Support.passiveListener && params.passiveListener ? { passive: false, capture: false } : false;\n var passiveListener = Support.passiveListener && params.passiveListener ? { passive: true, capture: false } : false;\n if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n _ssrWindow.document.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n _ssrWindow.document.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n } else {\n if (Support.touch) {\n target.removeEventListener(touchEvents.start, swiper.scrollbar.onDragStart, activeListener);\n target.removeEventListener(touchEvents.move, swiper.scrollbar.onDragMove, activeListener);\n target.removeEventListener(touchEvents.end, swiper.scrollbar.onDragEnd, passiveListener);\n }\n if (params.simulateTouch && !Device.ios && !Device.android || params.simulateTouch && !Support.touch && Device.ios) {\n target.removeEventListener('mousedown', swiper.scrollbar.onDragStart, activeListener);\n _ssrWindow.document.removeEventListener('mousemove', swiper.scrollbar.onDragMove, activeListener);\n _ssrWindow.document.removeEventListener('mouseup', swiper.scrollbar.onDragEnd, passiveListener);\n }\n }\n },\n init: function init() {\n var swiper = this;\n if (!swiper.params.scrollbar.el) return;\n var scrollbar = swiper.scrollbar,\n $swiperEl = swiper.$el;\n\n var params = swiper.params.scrollbar;\n\n var $el = (0, _dom.$)(params.el);\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n $el = $swiperEl.find(params.el);\n }\n\n var $dragEl = $el.find('.' + swiper.params.scrollbar.dragClass);\n if ($dragEl.length === 0) {\n $dragEl = (0, _dom.$)('
');\n $el.append($dragEl);\n }\n\n Utils.extend(scrollbar, {\n $el: $el,\n el: $el[0],\n $dragEl: $dragEl,\n dragEl: $dragEl[0]\n });\n\n if (params.draggable) {\n scrollbar.enableDraggable();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.scrollbar.disableDraggable();\n }\n};\n\nvar Scrollbar$1 = {\n name: 'scrollbar',\n params: {\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag'\n }\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n scrollbar: {\n init: Scrollbar.init.bind(swiper),\n destroy: Scrollbar.destroy.bind(swiper),\n updateSize: Scrollbar.updateSize.bind(swiper),\n setTranslate: Scrollbar.setTranslate.bind(swiper),\n setTransition: Scrollbar.setTransition.bind(swiper),\n enableDraggable: Scrollbar.enableDraggable.bind(swiper),\n disableDraggable: Scrollbar.disableDraggable.bind(swiper),\n setDragPosition: Scrollbar.setDragPosition.bind(swiper),\n onDragStart: Scrollbar.onDragStart.bind(swiper),\n onDragMove: Scrollbar.onDragMove.bind(swiper),\n onDragEnd: Scrollbar.onDragEnd.bind(swiper),\n isTouched: false,\n timeout: null,\n dragTimeout: null\n }\n });\n },\n\n on: {\n init: function init() {\n var swiper = this;\n swiper.scrollbar.init();\n swiper.scrollbar.updateSize();\n swiper.scrollbar.setTranslate();\n },\n update: function update() {\n var swiper = this;\n swiper.scrollbar.updateSize();\n },\n resize: function resize() {\n var swiper = this;\n swiper.scrollbar.updateSize();\n },\n observerUpdate: function observerUpdate() {\n var swiper = this;\n swiper.scrollbar.updateSize();\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n swiper.scrollbar.setTranslate();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n swiper.scrollbar.setTransition(duration);\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.scrollbar.destroy();\n }\n }\n};\n\nvar Parallax = {\n setTransform: function setTransform(el, progress) {\n var swiper = this;\n var rtl = swiper.rtl;\n\n\n var $el = (0, _dom.$)(el);\n var rtlFactor = rtl ? -1 : 1;\n\n var p = $el.attr('data-swiper-parallax') || '0';\n var x = $el.attr('data-swiper-parallax-x');\n var y = $el.attr('data-swiper-parallax-y');\n var scale = $el.attr('data-swiper-parallax-scale');\n var opacity = $el.attr('data-swiper-parallax-opacity');\n\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.isHorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n\n if (x.indexOf('%') >= 0) {\n x = parseInt(x, 10) * progress * rtlFactor + '%';\n } else {\n x = x * progress * rtlFactor + 'px';\n }\n if (y.indexOf('%') >= 0) {\n y = parseInt(y, 10) * progress + '%';\n } else {\n y = y * progress + 'px';\n }\n\n if (typeof opacity !== 'undefined' && opacity !== null) {\n var currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n $el[0].style.opacity = currentOpacity;\n }\n if (typeof scale === 'undefined' || scale === null) {\n $el.transform('translate3d(' + x + ', ' + y + ', 0px)');\n } else {\n var currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n $el.transform('translate3d(' + x + ', ' + y + ', 0px) scale(' + currentScale + ')');\n }\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n var $el = swiper.$el,\n slides = swiper.slides,\n progress = swiper.progress,\n snapGrid = swiper.snapGrid;\n\n $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function (index$$1, el) {\n swiper.parallax.setTransform(el, progress);\n });\n slides.each(function (slideIndex, slideEl) {\n var slideProgress = slideEl.progress;\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n }\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n (0, _dom.$)(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function (index$$1, el) {\n swiper.parallax.setTransform(el, slideProgress);\n });\n });\n },\n setTransition: function setTransition() {\n var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.params.speed;\n\n var swiper = this;\n var $el = swiper.$el;\n\n $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function (index$$1, parallaxEl) {\n var $parallaxEl = (0, _dom.$)(parallaxEl);\n var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n $parallaxEl.transition(parallaxDuration);\n });\n }\n};\n\nvar Parallax$1 = {\n name: 'parallax',\n params: {\n parallax: {\n enabled: false\n }\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n parallax: {\n setTransform: Parallax.setTransform.bind(swiper),\n setTranslate: Parallax.setTranslate.bind(swiper),\n setTransition: Parallax.setTransition.bind(swiper)\n }\n });\n },\n\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchSlidesProgress = true;\n },\n init: function init() {\n var swiper = this;\n if (!swiper.params.parallax) return;\n swiper.parallax.setTranslate();\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n if (!swiper.params.parallax) return;\n swiper.parallax.setTranslate();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n if (!swiper.params.parallax) return;\n swiper.parallax.setTransition(duration);\n }\n }\n};\n\nvar Zoom = {\n // Calc Scale From Multi-touches\n getDistanceBetweenTouches: function getDistanceBetweenTouches(e) {\n if (e.targetTouches.length < 2) return 1;\n var x1 = e.targetTouches[0].pageX;\n var y1 = e.targetTouches[0].pageY;\n var x2 = e.targetTouches[1].pageX;\n var y2 = e.targetTouches[1].pageY;\n var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n return distance;\n },\n\n // Events\n onGestureStart: function onGestureStart(e) {\n var swiper = this;\n var params = swiper.params.zoom;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n\n zoom.fakeGestureTouched = false;\n zoom.fakeGestureMoved = false;\n if (!Support.gestures) {\n if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {\n return;\n }\n zoom.fakeGestureTouched = true;\n gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);\n }\n if (!gesture.$slideEl || !gesture.$slideEl.length) {\n gesture.$slideEl = (0, _dom.$)(e.target).closest('.swiper-slide');\n if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');\n gesture.$imageWrapEl = gesture.$imageEl.parent('.' + params.containerClass);\n gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n if (gesture.$imageWrapEl.length === 0) {\n gesture.$imageEl = undefined;\n return;\n }\n }\n gesture.$imageEl.transition(0);\n swiper.zoom.isScaling = true;\n },\n onGestureChange: function onGestureChange(e) {\n var swiper = this;\n var params = swiper.params.zoom;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n\n if (!Support.gestures) {\n if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {\n return;\n }\n zoom.fakeGestureMoved = true;\n gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (Support.gestures) {\n swiper.zoom.scale = e.scale * zoom.currentScale;\n } else {\n zoom.scale = gesture.scaleMove / gesture.scaleStart * zoom.currentScale;\n }\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + Math.pow(zoom.scale - gesture.maxRatio + 1, 0.5);\n }\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - Math.pow(params.minRatio - zoom.scale + 1, 0.5);\n }\n gesture.$imageEl.transform('translate3d(0,0,0) scale(' + zoom.scale + ')');\n },\n onGestureEnd: function onGestureEnd(e) {\n var swiper = this;\n var params = swiper.params.zoom;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n\n if (!Support.gestures) {\n if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {\n return;\n }\n if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android) {\n return;\n }\n zoom.fakeGestureTouched = false;\n zoom.fakeGestureMoved = false;\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.$imageEl.transition(swiper.params.speed).transform('translate3d(0,0,0) scale(' + zoom.scale + ')');\n zoom.currentScale = zoom.scale;\n zoom.isScaling = false;\n if (zoom.scale === 1) gesture.$slideEl = undefined;\n },\n onTouchStart: function onTouchStart(e) {\n var swiper = this;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture,\n image = zoom.image;\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (image.isTouched) return;\n if (Device.android) e.preventDefault();\n image.isTouched = true;\n image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n },\n onTouchMove: function onTouchMove(e) {\n var swiper = this;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture,\n image = zoom.image,\n velocity = zoom.velocity;\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n swiper.allowClick = false;\n if (!image.isTouched || !gesture.$slideEl) return;\n\n if (!image.isMoved) {\n image.width = gesture.$imageEl[0].offsetWidth;\n image.height = gesture.$imageEl[0].offsetHeight;\n image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n gesture.$imageWrapEl.transition(0);\n if (swiper.rtl) {\n image.startX = -image.startX;\n image.startY = -image.startY;\n }\n }\n // Define if we need image drag\n var scaledWidth = image.width * zoom.scale;\n var scaledHeight = image.height * zoom.scale;\n\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n\n image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n if (!image.isMoved && !zoom.isScaling) {\n if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\n image.isTouched = false;\n return;\n } else if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\n image.isTouched = false;\n return;\n }\n }\n e.preventDefault();\n e.stopPropagation();\n\n image.isMoved = true;\n image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;\n image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;\n\n if (image.currentX < image.minX) {\n image.currentX = image.minX + 1 - Math.pow(image.minX - image.currentX + 1, 0.8);\n }\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + Math.pow(image.currentX - image.maxX + 1, 0.8);\n }\n\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - Math.pow(image.minY - image.currentY + 1, 0.8);\n }\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + Math.pow(image.currentY - image.maxY + 1, 0.8);\n }\n\n // Velocity\n if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n if (!velocity.prevTime) velocity.prevTime = Date.now();\n velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n\n gesture.$imageWrapEl.transform('translate3d(' + image.currentX + 'px, ' + image.currentY + 'px,0)');\n },\n onTouchEnd: function onTouchEnd() {\n var swiper = this;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture,\n image = zoom.image,\n velocity = zoom.velocity;\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n image.isTouched = false;\n image.isMoved = false;\n var momentumDurationX = 300;\n var momentumDurationY = 300;\n var momentumDistanceX = velocity.x * momentumDurationX;\n var newPositionX = image.currentX + momentumDistanceX;\n var momentumDistanceY = velocity.y * momentumDurationY;\n var newPositionY = image.currentY + momentumDistanceY;\n\n // Fix duration\n if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n var momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n\n image.currentX = newPositionX;\n image.currentY = newPositionY;\n\n // Define if we need image drag\n var scaledWidth = image.width * zoom.scale;\n var scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n\n gesture.$imageWrapEl.transition(momentumDuration).transform('translate3d(' + image.currentX + 'px, ' + image.currentY + 'px,0)');\n },\n onTransitionEnd: function onTransitionEnd() {\n var swiper = this;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n\n if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n gesture.$slideEl = undefined;\n gesture.$imageEl = undefined;\n gesture.$imageWrapEl = undefined;\n\n zoom.scale = 1;\n zoom.currentScale = 1;\n }\n },\n\n // Toggle Zoom\n toggle: function toggle(e) {\n var swiper = this;\n var zoom = swiper.zoom;\n\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoom.out();\n } else {\n // Zoom In\n zoom.in(e);\n }\n },\n in: function _in(e) {\n var swiper = this;\n\n var zoom = swiper.zoom;\n var params = swiper.params.zoom;\n var gesture = zoom.gesture,\n image = zoom.image;\n\n\n if (!gesture.$slideEl) {\n gesture.$slideEl = swiper.clickedSlide ? (0, _dom.$)(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');\n gesture.$imageWrapEl = gesture.$imageEl.parent('.' + params.containerClass);\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n gesture.$slideEl.addClass('' + params.zoomedSlideClass);\n\n var touchX = void 0;\n var touchY = void 0;\n var offsetX = void 0;\n var offsetY = void 0;\n var diffX = void 0;\n var diffY = void 0;\n var translateX = void 0;\n var translateY = void 0;\n var imageWidth = void 0;\n var imageHeight = void 0;\n var scaledWidth = void 0;\n var scaledHeight = void 0;\n var translateMinX = void 0;\n var translateMinY = void 0;\n var translateMaxX = void 0;\n var translateMaxY = void 0;\n var slideWidth = void 0;\n var slideHeight = void 0;\n\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n\n zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n if (e) {\n slideWidth = gesture.$slideEl[0].offsetWidth;\n slideHeight = gesture.$slideEl[0].offsetHeight;\n offsetX = gesture.$slideEl.offset().left;\n offsetY = gesture.$slideEl.offset().top;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n\n imageWidth = gesture.$imageEl[0].offsetWidth;\n imageHeight = gesture.$imageEl[0].offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n\n translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n gesture.$imageWrapEl.transition(300).transform('translate3d(' + translateX + 'px, ' + translateY + 'px,0)');\n gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(' + zoom.scale + ')');\n },\n out: function out() {\n var swiper = this;\n\n var zoom = swiper.zoom;\n var params = swiper.params.zoom;\n var gesture = zoom.gesture;\n\n\n if (!gesture.$slideEl) {\n gesture.$slideEl = swiper.clickedSlide ? (0, _dom.$)(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');\n gesture.$imageWrapEl = gesture.$imageEl.parent('.' + params.containerClass);\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n zoom.scale = 1;\n zoom.currentScale = 1;\n gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n gesture.$slideEl.removeClass('' + params.zoomedSlideClass);\n gesture.$slideEl = undefined;\n },\n\n // Attach/Detach Events\n enable: function enable() {\n var swiper = this;\n var zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n\n var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n\n // Scale image\n if (Support.gestures) {\n swiper.$wrapperEl.on('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener);\n swiper.$wrapperEl.on('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener);\n swiper.$wrapperEl.on('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.on(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener);\n }\n\n // Move image\n swiper.$wrapperEl.on(swiper.touchEvents.move, '.' + swiper.params.zoom.containerClass, zoom.onTouchMove);\n },\n disable: function disable() {\n var swiper = this;\n var zoom = swiper.zoom;\n if (!zoom.enabled) return;\n\n swiper.zoom.enabled = false;\n\n var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n\n // Scale image\n if (Support.gestures) {\n swiper.$wrapperEl.off('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener);\n swiper.$wrapperEl.off('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener);\n swiper.$wrapperEl.off('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.off(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener);\n }\n\n // Move image\n swiper.$wrapperEl.off(swiper.touchEvents.move, '.' + swiper.params.zoom.containerClass, zoom.onTouchMove);\n }\n};\n\nvar Zoom$1 = {\n name: 'zoom',\n params: {\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed'\n }\n },\n create: function create() {\n var swiper = this;\n var zoom = {\n enabled: false,\n scale: 1,\n currentScale: 1,\n isScaling: false,\n gesture: {\n $slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n $imageEl: undefined,\n $imageWrapEl: undefined,\n maxRatio: 3\n },\n image: {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {}\n },\n velocity: {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined\n }\n };\n 'onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out'.split(' ').forEach(function (methodName) {\n zoom[methodName] = Zoom[methodName].bind(swiper);\n });\n Utils.extend(swiper, {\n zoom: zoom\n });\n },\n\n on: {\n init: function init() {\n var swiper = this;\n if (swiper.params.zoom.enabled) {\n swiper.zoom.enable();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.zoom.disable();\n },\n touchStart: function touchStart(e) {\n var swiper = this;\n if (!swiper.zoom.enabled) return;\n swiper.zoom.onTouchStart(e);\n },\n touchEnd: function touchEnd(e) {\n var swiper = this;\n if (!swiper.zoom.enabled) return;\n swiper.zoom.onTouchEnd(e);\n },\n doubleTap: function doubleTap(e) {\n var swiper = this;\n if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n swiper.zoom.toggle(e);\n }\n },\n transitionEnd: function transitionEnd() {\n var swiper = this;\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n swiper.zoom.onTransitionEnd();\n }\n }\n }\n};\n\nvar Lazy = {\n loadInSlide: function loadInSlide(index$$1) {\n var loadInDuplicate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n var swiper = this;\n var params = swiper.params.lazy;\n if (typeof index$$1 === 'undefined') return;\n if (swiper.slides.length === 0) return;\n var isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n var $slideEl = isVirtual ? swiper.$wrapperEl.children('.' + swiper.params.slideClass + '[data-swiper-slide-index=\"' + index$$1 + '\"]') : swiper.slides.eq(index$$1);\n\n var $images = $slideEl.find('.' + params.elementClass + ':not(.' + params.loadedClass + '):not(.' + params.loadingClass + ')');\n if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n $images = $images.add($slideEl[0]);\n }\n if ($images.length === 0) return;\n\n $images.each(function (imageIndex, imageEl) {\n var $imageEl = (0, _dom.$)(imageEl);\n $imageEl.addClass(params.loadingClass);\n\n var background = $imageEl.attr('data-background');\n var src = $imageEl.attr('data-src');\n var srcset = $imageEl.attr('data-srcset');\n var sizes = $imageEl.attr('data-sizes');\n\n swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, function () {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return;\n if (background) {\n $imageEl.css('background-image', 'url(\"' + background + '\")');\n $imageEl.removeAttr('data-background');\n } else {\n if (srcset) {\n $imageEl.attr('srcset', srcset);\n $imageEl.removeAttr('data-srcset');\n }\n if (sizes) {\n $imageEl.attr('sizes', sizes);\n $imageEl.removeAttr('data-sizes');\n }\n if (src) {\n $imageEl.attr('src', src);\n $imageEl.removeAttr('data-src');\n }\n }\n\n $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n $slideEl.find('.' + params.preloaderClass).remove();\n if (swiper.params.loop && loadInDuplicate) {\n var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n var originalSlide = swiper.$wrapperEl.children('[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]:not(.' + swiper.params.slideDuplicateClass + ')');\n swiper.lazy.loadInSlide(originalSlide.index(), false);\n } else {\n var duplicatedSlide = swiper.$wrapperEl.children('.' + swiper.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]');\n swiper.lazy.loadInSlide(duplicatedSlide.index(), false);\n }\n }\n swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n });\n\n swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n });\n },\n load: function load() {\n var swiper = this;\n var $wrapperEl = swiper.$wrapperEl,\n swiperParams = swiper.params,\n slides = swiper.slides,\n activeIndex = swiper.activeIndex;\n\n var isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n var params = swiperParams.lazy;\n\n var slidesPerView = swiperParams.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = 0;\n }\n\n function slideExist(index$$1) {\n if (isVirtual) {\n if ($wrapperEl.children('.' + swiperParams.slideClass + '[data-swiper-slide-index=\"' + index$$1 + '\"]').length) {\n return true;\n }\n } else if (slides[index$$1]) return true;\n return false;\n }\n function slideIndex(slideEl) {\n if (isVirtual) {\n return (0, _dom.$)(slideEl).attr('data-swiper-slide-index');\n }\n return (0, _dom.$)(slideEl).index();\n }\n\n if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;\n if (swiper.params.watchSlidesVisibility) {\n $wrapperEl.children('.' + swiperParams.slideVisibleClass).each(function (elIndex, slideEl) {\n var index$$1 = isVirtual ? (0, _dom.$)(slideEl).attr('data-swiper-slide-index') : (0, _dom.$)(slideEl).index();\n swiper.lazy.loadInSlide(index$$1);\n });\n } else if (slidesPerView > 1) {\n for (var i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n if (slideExist(i)) swiper.lazy.loadInSlide(i);\n }\n } else {\n swiper.lazy.loadInSlide(activeIndex);\n }\n if (params.loadPrevNext) {\n if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) {\n var amount = params.loadPrevNextAmount;\n var spv = slidesPerView;\n var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);\n // Next Slides\n for (var _i8 = activeIndex + slidesPerView; _i8 < maxIndex; _i8 += 1) {\n if (slideExist(_i8)) swiper.lazy.loadInSlide(_i8);\n }\n // Prev Slides\n for (var _i9 = minIndex; _i9 < activeIndex; _i9 += 1) {\n if (slideExist(_i9)) swiper.lazy.loadInSlide(_i9);\n }\n } else {\n var nextSlide = $wrapperEl.children('.' + swiperParams.slideNextClass);\n if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));\n\n var prevSlide = $wrapperEl.children('.' + swiperParams.slidePrevClass);\n if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));\n }\n }\n }\n};\n\nvar Lazy$1 = {\n name: 'lazy',\n params: {\n lazy: {\n enabled: false,\n loadPrevNext: false,\n loadPrevNextAmount: 1,\n loadOnTransitionStart: false,\n\n elementClass: 'swiper-lazy',\n loadingClass: 'swiper-lazy-loading',\n loadedClass: 'swiper-lazy-loaded',\n preloaderClass: 'swiper-lazy-preloader'\n }\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n lazy: {\n initialImageLoaded: false,\n load: Lazy.load.bind(swiper),\n loadInSlide: Lazy.loadInSlide.bind(swiper)\n }\n });\n },\n\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n swiper.params.preloadImages = false;\n }\n },\n init: function init() {\n var swiper = this;\n if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {\n swiper.lazy.load();\n }\n },\n scroll: function scroll() {\n var swiper = this;\n if (swiper.params.freeMode && !swiper.params.freeModeSticky) {\n swiper.lazy.load();\n }\n },\n resize: function resize() {\n var swiper = this;\n if (swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n },\n scrollbarDragMove: function scrollbarDragMove() {\n var swiper = this;\n if (swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n },\n transitionStart: function transitionStart() {\n var swiper = this;\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded) {\n swiper.lazy.load();\n }\n }\n },\n transitionEnd: function transitionEnd() {\n var swiper = this;\n if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n swiper.lazy.load();\n }\n }\n }\n};\n\n/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\n\nvar Controller = {\n LinearSpline: function LinearSpline(x, y) {\n var binarySearch = function search() {\n var maxIndex = void 0;\n var minIndex = void 0;\n var guess = void 0;\n return function (array, val) {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1) {\n guess = maxIndex + minIndex >> 1;\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n return maxIndex;\n };\n }();\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n var i1 = void 0;\n var i3 = void 0;\n\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0;\n\n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n\n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n return this;\n },\n // xxx: for now i will just save one spline function to to\n getInterpolateFunction: function getInterpolateFunction(c) {\n var swiper = this;\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid) : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n },\n setTranslate: function setTranslate(_setTranslate, byController) {\n var swiper = this;\n var controlled = swiper.controller.control;\n var multiplier = void 0;\n var controlledTranslate = void 0;\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n if (swiper.params.controller.by === 'slide') {\n swiper.controller.getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n }\n\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n if (Array.isArray(controlled)) {\n for (var i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n },\n setTransition: function setTransition(duration, byController) {\n var swiper = this;\n var controlled = swiper.controller.control;\n var i = void 0;\n function setControlledTransition(c) {\n c.setTransition(duration, swiper);\n if (duration !== 0) {\n c.transitionStart();\n c.$wrapperEl.transitionEnd(function () {\n if (!controlled) return;\n if (c.params.loop && swiper.params.controller.by === 'slide') {\n c.loopFix();\n }\n c.transitionEnd();\n });\n }\n }\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n};\nvar Controller$1 = {\n name: 'controller',\n params: {\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide' // or 'container'\n }\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n controller: {\n control: swiper.params.controller.control,\n getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),\n setTranslate: Controller.setTranslate.bind(swiper),\n setTransition: Controller.setTransition.bind(swiper)\n }\n });\n },\n\n on: {\n update: function update() {\n var swiper = this;\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n resize: function resize() {\n var swiper = this;\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n observerUpdate: function observerUpdate() {\n var swiper = this;\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n setTranslate: function setTranslate(translate, byController) {\n var swiper = this;\n if (!swiper.controller.control) return;\n swiper.controller.setTranslate(translate, byController);\n },\n setTransition: function setTransition(duration, byController) {\n var swiper = this;\n if (!swiper.controller.control) return;\n swiper.controller.setTransition(duration, byController);\n }\n }\n};\n\nvar a11y = {\n makeElFocusable: function makeElFocusable($el) {\n $el.attr('tabIndex', '0');\n return $el;\n },\n addElRole: function addElRole($el, role) {\n $el.attr('role', role);\n return $el;\n },\n addElLabel: function addElLabel($el, label) {\n $el.attr('aria-label', label);\n return $el;\n },\n disableEl: function disableEl($el) {\n $el.attr('aria-disabled', true);\n return $el;\n },\n enableEl: function enableEl($el) {\n $el.attr('aria-disabled', false);\n return $el;\n },\n onEnterKey: function onEnterKey(e) {\n var swiper = this;\n var params = swiper.params.a11y;\n if (e.keyCode !== 13) return;\n var $targetEl = (0, _dom.$)(e.target);\n if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n if (swiper.isEnd) {\n swiper.a11y.notify(params.lastSlideMessage);\n } else {\n swiper.a11y.notify(params.nextSlideMessage);\n }\n }\n if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n if (swiper.isBeginning) {\n swiper.a11y.notify(params.firstSlideMessage);\n } else {\n swiper.a11y.notify(params.prevSlideMessage);\n }\n }\n if (swiper.pagination && $targetEl.is('.' + swiper.params.pagination.bulletClass)) {\n $targetEl[0].click();\n }\n },\n notify: function notify(message) {\n var swiper = this;\n var notification = swiper.a11y.liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n },\n updateNavigation: function updateNavigation() {\n var swiper = this;\n\n if (swiper.params.loop) return;\n var _swiper$navigation4 = swiper.navigation,\n $nextEl = _swiper$navigation4.$nextEl,\n $prevEl = _swiper$navigation4.$prevEl;\n\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n swiper.a11y.disableEl($prevEl);\n } else {\n swiper.a11y.enableEl($prevEl);\n }\n }\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n swiper.a11y.disableEl($nextEl);\n } else {\n swiper.a11y.enableEl($nextEl);\n }\n }\n },\n updatePagination: function updatePagination() {\n var swiper = this;\n var params = swiper.params.a11y;\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.bullets.each(function (bulletIndex, bulletEl) {\n var $bulletEl = (0, _dom.$)(bulletEl);\n swiper.a11y.makeElFocusable($bulletEl);\n swiper.a11y.addElRole($bulletEl, 'button');\n swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/{{index}}/, $bulletEl.index() + 1));\n });\n }\n },\n init: function init() {\n var swiper = this;\n\n swiper.$el.append(swiper.a11y.liveRegion);\n\n // Navigation\n var params = swiper.params.a11y;\n var $nextEl = void 0;\n var $prevEl = void 0;\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n if ($nextEl) {\n swiper.a11y.makeElFocusable($nextEl);\n swiper.a11y.addElRole($nextEl, 'button');\n swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);\n $nextEl.on('keydown', swiper.a11y.onEnterKey);\n }\n if ($prevEl) {\n swiper.a11y.makeElFocusable($prevEl);\n swiper.a11y.addElRole($prevEl, 'button');\n swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);\n $prevEl.on('keydown', swiper.a11y.onEnterKey);\n }\n\n // Pagination\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.$el.on('keydown', '.' + swiper.params.pagination.bulletClass, swiper.a11y.onEnterKey);\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove();\n\n var $nextEl = void 0;\n var $prevEl = void 0;\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n if ($nextEl) {\n $nextEl.off('keydown', swiper.a11y.onEnterKey);\n }\n if ($prevEl) {\n $prevEl.off('keydown', swiper.a11y.onEnterKey);\n }\n\n // Pagination\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.$el.off('keydown', '.' + swiper.params.pagination.bulletClass, swiper.a11y.onEnterKey);\n }\n }\n};\nvar A11y = {\n name: 'a11y',\n params: {\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}'\n }\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n a11y: {\n liveRegion: (0, _dom.$)('')\n }\n });\n Object.keys(a11y).forEach(function (methodName) {\n swiper.a11y[methodName] = a11y[methodName].bind(swiper);\n });\n },\n\n on: {\n init: function init() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.init();\n swiper.a11y.updateNavigation();\n },\n toEdge: function toEdge() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.updateNavigation();\n },\n fromEdge: function fromEdge() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.updateNavigation();\n },\n paginationUpdate: function paginationUpdate() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.updatePagination();\n },\n destroy: function destroy() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.destroy();\n }\n }\n};\n\nvar History = {\n init: function init() {\n var swiper = this;\n if (!swiper.params.history) return;\n if (!_ssrWindow.window.history || !_ssrWindow.window.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n var history = swiper.history;\n history.initialized = true;\n history.paths = History.getPathValues();\n if (!history.paths.key && !history.paths.value) return;\n history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);\n if (!swiper.params.history.replaceState) {\n _ssrWindow.window.addEventListener('popstate', swiper.history.setHistoryPopState);\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (!swiper.params.history.replaceState) {\n _ssrWindow.window.removeEventListener('popstate', swiper.history.setHistoryPopState);\n }\n },\n setHistoryPopState: function setHistoryPopState() {\n var swiper = this;\n swiper.history.paths = History.getPathValues();\n swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);\n },\n getPathValues: function getPathValues() {\n var pathArray = _ssrWindow.window.location.pathname.slice(1).split('/').filter(function (part) {\n return part !== '';\n });\n var total = pathArray.length;\n var key = pathArray[total - 2];\n var value = pathArray[total - 1];\n return { key: key, value: value };\n },\n setHistory: function setHistory(key, index$$1) {\n var swiper = this;\n if (!swiper.history.initialized || !swiper.params.history.enabled) return;\n var slide = swiper.slides.eq(index$$1);\n var value = History.slugify(slide.attr('data-history'));\n if (!_ssrWindow.window.location.pathname.includes(key)) {\n value = key + '/' + value;\n }\n var currentState = _ssrWindow.window.history.state;\n if (currentState && currentState.value === value) {\n return;\n }\n if (swiper.params.history.replaceState) {\n _ssrWindow.window.history.replaceState({ value: value }, null, value);\n } else {\n _ssrWindow.window.history.pushState({ value: value }, null, value);\n }\n },\n slugify: function slugify(text$$1) {\n return text$$1.toString().toLowerCase().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n },\n scrollToSlide: function scrollToSlide(speed, value, runCallbacks) {\n var swiper = this;\n if (value) {\n for (var i = 0, length = swiper.slides.length; i < length; i += 1) {\n var _slide3 = swiper.slides.eq(i);\n var slideHistory = History.slugify(_slide3.attr('data-history'));\n if (slideHistory === value && !_slide3.hasClass(swiper.params.slideDuplicateClass)) {\n var index$$1 = _slide3.index();\n swiper.slideTo(index$$1, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n }\n};\n\nvar History$1 = {\n name: 'history',\n params: {\n history: {\n enabled: false,\n replaceState: false,\n key: 'slides'\n }\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n history: {\n init: History.init.bind(swiper),\n setHistory: History.setHistory.bind(swiper),\n setHistoryPopState: History.setHistoryPopState.bind(swiper),\n scrollToSlide: History.scrollToSlide.bind(swiper),\n destroy: History.destroy.bind(swiper)\n }\n });\n },\n\n on: {\n init: function init() {\n var swiper = this;\n if (swiper.params.history.enabled) {\n swiper.history.init();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.params.history.enabled) {\n swiper.history.destroy();\n }\n },\n transitionEnd: function transitionEnd() {\n var swiper = this;\n if (swiper.history.initialized) {\n swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n }\n }\n};\n\nvar HashNavigation = {\n onHashCange: function onHashCange() {\n var swiper = this;\n var newHash = _ssrWindow.document.location.hash.replace('#', '');\n var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n if (newHash !== activeSlideHash) {\n swiper.slideTo(swiper.$wrapperEl.children('.' + swiper.params.slideClass + '[data-hash=\"' + newHash + '\"]').index());\n }\n },\n setHash: function setHash() {\n var swiper = this;\n if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return;\n if (swiper.params.hashNavigation.replaceState && _ssrWindow.window.history && _ssrWindow.window.history.replaceState) {\n _ssrWindow.window.history.replaceState(null, null, '#' + swiper.slides.eq(swiper.activeIndex).attr('data-hash') || '');\n } else {\n var _slide4 = swiper.slides.eq(swiper.activeIndex);\n var hash = _slide4.attr('data-hash') || _slide4.attr('data-history');\n _ssrWindow.document.location.hash = hash || '';\n }\n },\n init: function init() {\n var swiper = this;\n if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;\n swiper.hashNavigation.initialized = true;\n var hash = _ssrWindow.document.location.hash.replace('#', '');\n if (hash) {\n var speed = 0;\n for (var i = 0, length = swiper.slides.length; i < length; i += 1) {\n var _slide5 = swiper.slides.eq(i);\n var slideHash = _slide5.attr('data-hash') || _slide5.attr('data-history');\n if (slideHash === hash && !_slide5.hasClass(swiper.params.slideDuplicateClass)) {\n var index$$1 = _slide5.index();\n swiper.slideTo(index$$1, speed, swiper.params.runCallbacksOnInit, true);\n }\n }\n }\n if (swiper.params.hashNavigation.watchState) {\n (0, _dom.$)(_ssrWindow.window).on('hashchange', swiper.hashNavigation.onHashCange);\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.params.hashNavigation.watchState) {\n (0, _dom.$)(_ssrWindow.window).off('hashchange', swiper.hashNavigation.onHashCange);\n }\n }\n};\nvar HashNavigation$1 = {\n name: 'hash-navigation',\n params: {\n hashNavigation: {\n enabled: false,\n replaceState: false,\n watchState: false\n }\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n hashNavigation: {\n initialized: false,\n init: HashNavigation.init.bind(swiper),\n destroy: HashNavigation.destroy.bind(swiper),\n setHash: HashNavigation.setHash.bind(swiper),\n onHashCange: HashNavigation.onHashCange.bind(swiper)\n }\n });\n },\n\n on: {\n init: function init() {\n var swiper = this;\n if (swiper.params.hashNavigation.enabled) {\n swiper.hashNavigation.init();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.params.hashNavigation.enabled) {\n swiper.hashNavigation.destroy();\n }\n },\n transitionEnd: function transitionEnd() {\n var swiper = this;\n if (swiper.hashNavigation.initialized) {\n swiper.hashNavigation.setHash();\n }\n }\n }\n};\n\nvar Autoplay = {\n run: function run() {\n var swiper = this;\n var $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n var delay = swiper.params.autoplay.delay;\n if ($activeSlideEl.attr('data-swiper-autoplay')) {\n delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n }\n swiper.autoplay.timeout = Utils.nextTick(function () {\n if (swiper.params.autoplay.reverseDirection) {\n if (swiper.params.loop) {\n swiper.loopFix();\n swiper.slidePrev(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.isBeginning) {\n swiper.slidePrev(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else {\n swiper.autoplay.stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopFix();\n swiper.slideNext(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.isEnd) {\n swiper.slideNext(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(0, swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else {\n swiper.autoplay.stop();\n }\n }, delay);\n },\n start: function start() {\n var swiper = this;\n if (typeof swiper.autoplay.timeout !== 'undefined') return false;\n if (swiper.autoplay.running) return false;\n swiper.autoplay.running = true;\n swiper.emit('autoplayStart');\n swiper.autoplay.run();\n return true;\n },\n stop: function stop() {\n var swiper = this;\n if (!swiper.autoplay.running) return false;\n if (typeof swiper.autoplay.timeout === 'undefined') return false;\n\n if (swiper.autoplay.timeout) {\n clearTimeout(swiper.autoplay.timeout);\n swiper.autoplay.timeout = undefined;\n }\n swiper.autoplay.running = false;\n swiper.emit('autoplayStop');\n return true;\n },\n pause: function pause(speed) {\n var swiper = this;\n if (!swiper.autoplay.running) return;\n if (swiper.autoplay.paused) return;\n if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);\n swiper.autoplay.paused = true;\n if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n swiper.autoplay.paused = false;\n swiper.autoplay.run();\n } else {\n swiper.$wrapperEl.transitionEnd(function () {\n if (!swiper || swiper.destroyed) return;\n swiper.autoplay.paused = false;\n if (!swiper.autoplay.running) {\n swiper.autoplay.stop();\n } else {\n swiper.autoplay.run();\n }\n });\n }\n }\n};\n\nvar Autoplay$1 = {\n name: 'autoplay',\n params: {\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false\n }\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n autoplay: {\n running: false,\n paused: false,\n run: Autoplay.run.bind(swiper),\n start: Autoplay.start.bind(swiper),\n stop: Autoplay.stop.bind(swiper),\n pause: Autoplay.pause.bind(swiper)\n }\n });\n },\n\n on: {\n init: function init() {\n var swiper = this;\n if (swiper.params.autoplay.enabled) {\n swiper.autoplay.start();\n }\n },\n beforeTransitionStart: function beforeTransitionStart(speed, internal) {\n var swiper = this;\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.pause(speed);\n } else {\n swiper.autoplay.stop();\n }\n }\n },\n sliderFirstMove: function sliderFirstMove() {\n var swiper = this;\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.stop();\n } else {\n swiper.autoplay.pause();\n }\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.autoplay.running) {\n swiper.autoplay.stop();\n }\n }\n }\n};\n\nvar Fade = {\n setTranslate: function setTranslate() {\n var swiper = this;\n var slides = swiper.slides;\n\n for (var i = 0; i < slides.length; i += 1) {\n var $slideEl = swiper.slides.eq(i);\n var offset$$1 = $slideEl[0].swiperSlideOffset;\n var tx = -offset$$1;\n if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n var ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n var slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n $slideEl.css({\n opacity: slideOpacity\n }).transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)');\n }\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n var slides = swiper.slides,\n $wrapperEl = swiper.$wrapperEl;\n\n slides.transition(duration);\n if (swiper.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n slides.transitionEnd(function () {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n eventTriggered = true;\n swiper.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n for (var i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\n });\n }\n }\n};\n\nvar EffectFade = {\n name: 'effect-fade',\n params: {\n fadeEffect: {\n crossFade: false\n }\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n fadeEffect: {\n setTranslate: Fade.setTranslate.bind(swiper),\n setTransition: Fade.setTransition.bind(swiper)\n }\n });\n },\n\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (swiper.params.effect !== 'fade') return;\n swiper.classNames.push(swiper.params.containerModifierClass + 'fade');\n var overwriteParams = {\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: true\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n if (swiper.params.effect !== 'fade') return;\n swiper.fadeEffect.setTranslate();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n if (swiper.params.effect !== 'fade') return;\n swiper.fadeEffect.setTransition(duration);\n }\n }\n};\n\nvar Cube = {\n setTranslate: function setTranslate() {\n var swiper = this;\n var $el = swiper.$el,\n $wrapperEl = swiper.$wrapperEl,\n slides = swiper.slides,\n swiperWidth = swiper.width,\n swiperHeight = swiper.height,\n rtl = swiper.rtlTranslate,\n swiperSize = swiper.size;\n\n var params = swiper.params.cubeEffect;\n var isHorizontal = swiper.isHorizontal();\n var isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n var wrapperRotate = 0;\n var $cubeShadowEl = void 0;\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = (0, _dom.$)('
');\n $wrapperEl.append($cubeShadowEl);\n }\n $cubeShadowEl.css({ height: swiperWidth + 'px' });\n } else {\n $cubeShadowEl = $el.find('.swiper-cube-shadow');\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = (0, _dom.$)('
');\n $el.append($cubeShadowEl);\n }\n }\n }\n for (var i = 0; i < slides.length; i += 1) {\n var $slideEl = slides.eq(i);\n var slideIndex = i;\n if (isVirtual) {\n slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n }\n var slideAngle = slideIndex * 90;\n var round = Math.floor(slideAngle / 360);\n if (rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n var progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n var tx = 0;\n var ty = 0;\n var tz = 0;\n if (slideIndex % 4 === 0) {\n tx = -round * 4 * swiperSize;\n tz = 0;\n } else if ((slideIndex - 1) % 4 === 0) {\n tx = 0;\n tz = -round * 4 * swiperSize;\n } else if ((slideIndex - 2) % 4 === 0) {\n tx = swiperSize + round * 4 * swiperSize;\n tz = swiperSize;\n } else if ((slideIndex - 3) % 4 === 0) {\n tx = -swiperSize;\n tz = 3 * swiperSize + swiperSize * 4 * round;\n }\n if (rtl) {\n tx = -tx;\n }\n\n if (!isHorizontal) {\n ty = tx;\n tx = 0;\n }\n\n var transform$$1 = 'rotateX(' + (isHorizontal ? 0 : -slideAngle) + 'deg) rotateY(' + (isHorizontal ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)';\n if (progress <= 1 && progress > -1) {\n wrapperRotate = slideIndex * 90 + progress * 90;\n if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n }\n $slideEl.transform(transform$$1);\n if (params.slideShadows) {\n // Set shadows\n var shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n var shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = (0, _dom.$)('
');\n $slideEl.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = (0, _dom.$)('
');\n $slideEl.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n }\n $wrapperEl.css({\n '-webkit-transform-origin': '50% 50% -' + swiperSize / 2 + 'px',\n '-moz-transform-origin': '50% 50% -' + swiperSize / 2 + 'px',\n '-ms-transform-origin': '50% 50% -' + swiperSize / 2 + 'px',\n 'transform-origin': '50% 50% -' + swiperSize / 2 + 'px'\n });\n\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl.transform('translate3d(0px, ' + (swiperWidth / 2 + params.shadowOffset) + 'px, ' + -swiperWidth / 2 + 'px) rotateX(90deg) rotateZ(0deg) scale(' + params.shadowScale + ')');\n } else {\n var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n var scale1 = params.shadowScale;\n var scale2 = params.shadowScale / multiplier;\n var offset$$1 = params.shadowOffset;\n $cubeShadowEl.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (swiperHeight / 2 + offset$$1) + 'px, ' + -swiperHeight / 2 / scale2 + 'px) rotateX(-90deg)');\n }\n }\n var zFactor = Browser.isSafari || Browser.isUiWebView ? -swiperSize / 2 : 0;\n $wrapperEl.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (swiper.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (swiper.isHorizontal() ? -wrapperRotate : 0) + 'deg)');\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n var $el = swiper.$el,\n slides = swiper.slides;\n\n slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n $el.find('.swiper-cube-shadow').transition(duration);\n }\n }\n};\n\nvar EffectCube = {\n name: 'effect-cube',\n params: {\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n }\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n cubeEffect: {\n setTranslate: Cube.setTranslate.bind(swiper),\n setTransition: Cube.setTransition.bind(swiper)\n }\n });\n },\n\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (swiper.params.effect !== 'cube') return;\n swiper.classNames.push(swiper.params.containerModifierClass + 'cube');\n swiper.classNames.push(swiper.params.containerModifierClass + '3d');\n var overwriteParams = {\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n resistanceRatio: 0,\n spaceBetween: 0,\n centeredSlides: false,\n virtualTranslate: true\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n if (swiper.params.effect !== 'cube') return;\n swiper.cubeEffect.setTranslate();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n if (swiper.params.effect !== 'cube') return;\n swiper.cubeEffect.setTransition(duration);\n }\n }\n};\n\nvar Flip = {\n setTranslate: function setTranslate() {\n var swiper = this;\n var slides = swiper.slides,\n rtl = swiper.rtlTranslate;\n\n for (var i = 0; i < slides.length; i += 1) {\n var $slideEl = slides.eq(i);\n var progress = $slideEl[0].progress;\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n }\n var offset$$1 = $slideEl[0].swiperSlideOffset;\n var rotate = -180 * progress;\n var rotateY = rotate;\n var rotateX = 0;\n var tx = -offset$$1;\n var ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n } else if (rtl) {\n rotateY = -rotateY;\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n if (swiper.params.flipEffect.slideShadows) {\n // Set shadows\n var shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n var shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = (0, _dom.$)('
');\n $slideEl.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = (0, _dom.$)('
');\n $slideEl.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n $slideEl.transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)');\n }\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n var slides = swiper.slides,\n activeIndex = swiper.activeIndex,\n $wrapperEl = swiper.$wrapperEl;\n\n slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (swiper.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n // eslint-disable-next-line\n slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;\n eventTriggered = true;\n swiper.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n for (var i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\n });\n }\n }\n};\n\nvar EffectFlip = {\n name: 'effect-flip',\n params: {\n flipEffect: {\n slideShadows: true,\n limitRotation: true\n }\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n flipEffect: {\n setTranslate: Flip.setTranslate.bind(swiper),\n setTransition: Flip.setTransition.bind(swiper)\n }\n });\n },\n\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (swiper.params.effect !== 'flip') return;\n swiper.classNames.push(swiper.params.containerModifierClass + 'flip');\n swiper.classNames.push(swiper.params.containerModifierClass + '3d');\n var overwriteParams = {\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: true\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n if (swiper.params.effect !== 'flip') return;\n swiper.flipEffect.setTranslate();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n if (swiper.params.effect !== 'flip') return;\n swiper.flipEffect.setTransition(duration);\n }\n }\n};\n\nvar Coverflow = {\n setTranslate: function setTranslate() {\n var swiper = this;\n var swiperWidth = swiper.width,\n swiperHeight = swiper.height,\n slides = swiper.slides,\n $wrapperEl = swiper.$wrapperEl,\n slidesSizesGrid = swiper.slidesSizesGrid;\n\n var params = swiper.params.coverflowEffect;\n var isHorizontal = swiper.isHorizontal();\n var transform$$1 = swiper.translate;\n var center = isHorizontal ? -transform$$1 + swiperWidth / 2 : -transform$$1 + swiperHeight / 2;\n var rotate = isHorizontal ? params.rotate : -params.rotate;\n var translate = params.depth;\n // Each slide offset from center\n for (var i = 0, length = slides.length; i < length; i += 1) {\n var $slideEl = slides.eq(i);\n var slideSize = slidesSizesGrid[i];\n var slideOffset = $slideEl[0].swiperSlideOffset;\n var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * params.modifier;\n\n var rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n var rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n var translateZ = -translate * Math.abs(offsetMultiplier);\n\n var translateY = isHorizontal ? 0 : params.stretch * offsetMultiplier;\n var translateX = isHorizontal ? params.stretch * offsetMultiplier : 0;\n\n // Fix for ultra small values\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n\n var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)';\n\n $slideEl.transform(slideTransform);\n $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (params.slideShadows) {\n // Set shadows\n var $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n var $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n if ($shadowBeforeEl.length === 0) {\n $shadowBeforeEl = (0, _dom.$)('
');\n $slideEl.append($shadowBeforeEl);\n }\n if ($shadowAfterEl.length === 0) {\n $shadowAfterEl = (0, _dom.$)('
');\n $slideEl.append($shadowAfterEl);\n }\n if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n }\n }\n\n // Set correct perspective for IE10\n if (Support.pointerEvents || Support.prefixedPointerEvents) {\n var ws = $wrapperEl[0].style;\n ws.perspectiveOrigin = center + 'px 50%';\n }\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n swiper.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n }\n};\n\nvar EffectCoverflow = {\n name: 'effect-coverflow',\n params: {\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n modifier: 1,\n slideShadows: true\n }\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n coverflowEffect: {\n setTranslate: Coverflow.setTranslate.bind(swiper),\n setTransition: Coverflow.setTransition.bind(swiper)\n }\n });\n },\n\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (swiper.params.effect !== 'coverflow') return;\n\n swiper.classNames.push(swiper.params.containerModifierClass + 'coverflow');\n swiper.classNames.push(swiper.params.containerModifierClass + '3d');\n\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n if (swiper.params.effect !== 'coverflow') return;\n swiper.coverflowEffect.setTranslate();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n if (swiper.params.effect !== 'coverflow') return;\n swiper.coverflowEffect.setTransition(duration);\n }\n }\n};\n\n// Swiper Class\n\nvar components = [Device$1, Support$1, Browser$1, Resize, Observer$1, Virtual$1, Keyboard$1, Mousewheel$1, Navigation$1, Pagination$1, Scrollbar$1, Parallax$1, Zoom$1, Lazy$1, Controller$1, A11y, History$1, HashNavigation$1, Autoplay$1, EffectFade, EffectCube, EffectFlip, EffectCoverflow];\n\nif (typeof Swiper.use === 'undefined') {\n Swiper.use = Swiper.Class.use;\n Swiper.installModule = Swiper.Class.installModule;\n}\n\nSwiper.use(components);\n\nexports.default = Swiper;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar CONSTANTS = __webpack_require__(1);\r\n__webpack_require__(9);\r\nvar svg_injection_1 = __webpack_require__(10);\r\nvar login_state_1 = __webpack_require__(11);\r\nvar sticky_header_1 = __webpack_require__(14);\r\nvar nodelist_to_array_1 = __webpack_require__(2);\r\nvar curtain_menu_1 = __webpack_require__(15);\r\nvar aria_click_toggling_1 = __webpack_require__(16);\r\nvar ie_desaturate_1 = __webpack_require__(17);\r\nvar alert_message_1 = __webpack_require__(18);\r\nvar accordions_1 = __webpack_require__(24);\r\nvar date_listing_block_1 = __webpack_require__(25);\r\nvar publicity_image_block_1 = __webpack_require__(26);\r\nvar subs_toggle_hidden_1 = __webpack_require__(28);\r\nvar A11yDialog = __webpack_require__(5);\r\nvar lock_body_1 = __webpack_require__(3);\r\nvar scrollspy_navbar_1 = __webpack_require__(29);\r\nvar SmoothScroll = __webpack_require__(31);\r\nvar multimedia_layout_1 = __webpack_require__(32);\r\n__webpack_require__(41);\r\nvar epi_forms_1 = __webpack_require__(42);\r\n// Self-contained, self-invoking function.\r\n(function () {\r\n login_state_1.loginState();\r\n // Request SVG sprite\r\n var spritePath = window.SVG_SPRITE_PATH || '/Static/imgs/svg-sprite.svg';\r\n svg_injection_1.svgInject(spritePath);\r\n CONSTANTS.GLOBAL_HTML.classList.remove('no-js');\r\n sticky_header_1.stickyHeader();\r\n // Full Screen Curtain Menu\r\n new curtain_menu_1.CurtainMenu(CONSTANTS.GLOBAL_BODY);\r\n new aria_click_toggling_1.AriaToggling(nodelist_to_array_1.nodeListToArray(document.querySelectorAll('#mainNav .nav-main-list-item > .nav-sub-trigger')));\r\n // Greyscale Images for IE 10 and IE 11\r\n new ie_desaturate_1.IeDesaturate(CONSTANTS.GLOBAL_HTML);\r\n alert_message_1.alertMessage();\r\n subs_toggle_hidden_1.default('subs-container-js');\r\n // Accordion\r\n new accordions_1.Accordions();\r\n // Date Listing Block\r\n new date_listing_block_1.DateListingBlock();\r\n // Publicity Image Block\r\n new publicity_image_block_1.PublicityImageBlock();\r\n // Subs seating chart modal\r\n var globalModals = Array.prototype.slice.call(document.querySelectorAll('.modal-js'));\r\n if (globalModals.length > 0) {\r\n var modalList_1 = [];\r\n globalModals.forEach(function (modal) {\r\n var modalInstance = new A11yDialog(modal);\r\n modalList_1.push(modalInstance);\r\n modalInstance.on('show', function (dialog, e) {\r\n lock_body_1.lockBody();\r\n });\r\n modalInstance.on('hide', function (dialog, e) {\r\n lock_body_1.unlockBody();\r\n });\r\n if (modal.getAttribute('data-modal-show')) {\r\n modalList_1[modalList_1.length - 1].show();\r\n }\r\n });\r\n }\r\n new scrollspy_navbar_1.ScrollspyNavbar();\r\n new multimedia_layout_1.MultimediaLayout('.multimedia-block .block-body');\r\n var scroll = new SmoothScroll('a[href*=\"#\"]', {\r\n // Selectors\r\n ignore: '[data-scroll-ignore], .crt-popup-wrapper',\r\n header: '#siteHeader',\r\n // Speed & Easing\r\n speed: 500,\r\n offset: 0,\r\n easing: 'easeInOutCubic',\r\n // Callback API\r\n before: function (anchor, toggle) { },\r\n after: function (anchor, toggle) { } // Callback to run after scroll\r\n });\r\n // My Membership Benefits toggle\r\n var benefitsContent = document.getElementById('my-benefits');\r\n var benefitsContentTrigger = document.getElementById('my-benefits-trigger');\r\n if (benefitsContentTrigger) {\r\n benefitsContentTrigger.addEventListener('click', function (e) {\r\n if (benefitsContent.classList.contains('visually-hidden')) {\r\n benefitsContent.classList.remove('visually-hidden');\r\n benefitsContentTrigger.innerText = 'Hide Details';\r\n }\r\n else {\r\n benefitsContent.classList.add('visually-hidden');\r\n benefitsContentTrigger.innerText = 'Show Details';\r\n }\r\n });\r\n }\r\n //EPI Forms\r\n if (document.querySelector('.EPiServerForms')) {\r\n epi_forms_1.enhanceEpiForms();\r\n }\r\n // Add / Update a key-value pair in the URL query parameters\r\n function updateUrlParameter(uri, key, value) {\r\n // remove the hash part before operating on the uri\r\n var i = uri.indexOf('#');\r\n var hash = i === -1 ? '' : uri.substr(i);\r\n uri = i === -1 ? uri : uri.substr(0, i);\r\n var re = new RegExp('([?&])' + key + '=.*?(&|$)', 'i');\r\n var separator = uri.indexOf('?') !== -1 ? '&' : '?';\r\n if (uri.match(re)) {\r\n uri = uri.replace(re, '$1' + key + '=' + value + '$2');\r\n }\r\n else {\r\n uri = uri + separator + key + '=' + value;\r\n }\r\n // finally append the hash as well\r\n return uri + hash;\r\n }\r\n // Login Link Return URL\r\n var loginLink = document.querySelector('.nav-utility-loggedout-js > a');\r\n var currentURL = document.location.href;\r\n var isTNEW = document.querySelector('.tnew-container') !== null;\r\n if (currentURL.endsWith('/cart/') || isTNEW) {\r\n if (!currentURL.endsWith('logout.aspx') && !currentURL.endsWith('/my-account') && !currentURL.endsWith('/my-account/')) {\r\n var currentLoginLink = loginLink.getAttribute('href');\r\n var newLoginLink = updateUrlParameter(currentLoginLink, 'ReturnURL', encodeURIComponent(currentURL));\r\n loginLink.setAttribute('href', newLoginLink);\r\n }\r\n }\r\n})();\r\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/*! http://mths.be/endswith v0.2.0 by @mathias */\nif (!String.prototype.endsWith) {\n\t(function () {\n\t\t'use strict'; // needed to support `apply`/`call` with `undefined`/`null`\n\n\t\tvar defineProperty = function () {\n\t\t\t// IE 8 only supports `Object.defineProperty` on DOM elements\n\t\t\ttry {\n\t\t\t\tvar object = {};\n\t\t\t\tvar $defineProperty = Object.defineProperty;\n\t\t\t\tvar result = $defineProperty(object, object, object) && $defineProperty;\n\t\t\t} catch (error) {}\n\t\t\treturn result;\n\t\t}();\n\t\tvar toString = {}.toString;\n\t\tvar endsWith = function endsWith(search) {\n\t\t\tif (this == null) {\n\t\t\t\tthrow TypeError();\n\t\t\t}\n\t\t\tvar string = String(this);\n\t\t\tif (search && toString.call(search) == '[object RegExp]') {\n\t\t\t\tthrow TypeError();\n\t\t\t}\n\t\t\tvar stringLength = string.length;\n\t\t\tvar searchString = String(search);\n\t\t\tvar searchLength = searchString.length;\n\t\t\tvar pos = stringLength;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\tvar position = arguments[1];\n\t\t\t\tif (position !== undefined) {\n\t\t\t\t\t// `ToInteger`\n\t\t\t\t\tpos = position ? Number(position) : 0;\n\t\t\t\t\tif (pos != pos) {\n\t\t\t\t\t\t// better `isNaN`\n\t\t\t\t\t\tpos = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar end = Math.min(Math.max(pos, 0), stringLength);\n\t\t\tvar start = end - searchLength;\n\t\t\tif (start < 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar index = -1;\n\t\t\twhile (++index < searchLength) {\n\t\t\t\tif (string.charCodeAt(start + index) != searchString.charCodeAt(index)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t\tif (defineProperty) {\n\t\t\tdefineProperty(String.prototype, 'endsWith', {\n\t\t\t\t'value': endsWith,\n\t\t\t\t'configurable': true,\n\t\t\t\t'writable': true\n\t\t\t});\n\t\t} else {\n\t\t\tString.prototype.endsWith = endsWith;\n\t\t}\n\t})();\n}\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction svgInject(svgURL) {\r\n var request = new XMLHttpRequest();\r\n request.open('GET', svgURL, true);\r\n request.onload = function () {\r\n if (request.status >= 200 && request.status < 400) {\r\n var data = request.responseText;\r\n // Create node with response data and insert into DOM\r\n var div = document.createElement('div');\r\n div.innerHTML = data;\r\n document.body.insertBefore(div, document.body.childNodes[0]);\r\n }\r\n else {\r\n console.log('Could not load SVG sprite');\r\n }\r\n };\r\n request.onerror = function () {\r\n console.log('Issue loading SVG sprite - connection error');\r\n };\r\n request.send();\r\n}\r\nexports.svgInject = svgInject;\r\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar nodelist_to_array_1 = __webpack_require__(2);\r\nvar hide_elements_1 = __webpack_require__(12);\r\nvar show_elements_1 = __webpack_require__(13);\r\nfunction xhrRequest(url, requestType, successFunction, errorFunction) {\r\n var xhttp = new XMLHttpRequest();\r\n xhttp.withCredentials = true;\r\n xhttp.onreadystatechange = function () {\r\n if (xhttp.readyState == 4 && xhttp.status == 200) {\r\n //success!\r\n if (successFunction) {\r\n if (requestType === \"POST\")\r\n successFunction(xhttp.responseURL);\r\n else\r\n successFunction(xhttp.responseText);\r\n }\r\n }\r\n else {\r\n if (errorFunction) {\r\n errorFunction();\r\n }\r\n }\r\n };\r\n xhttp.open(requestType, url, true);\r\n if (requestType === \"POST\")\r\n xhttp.setRequestHeader('Content-Type', 'text/html');\r\n else\r\n xhttp.setRequestHeader('accept', 'application/json');\r\n xhttp.send();\r\n}\r\nfunction loginState() {\r\n var loginStateRequestSuccess = function (responseText) {\r\n var isLoggedIn = JSON.parse(responseText);\r\n var loggedOutLinks = nodelist_to_array_1.nodeListToArray(document.querySelectorAll('.nav-utility-loggedout-js'));\r\n var loggedInLinks = nodelist_to_array_1.nodeListToArray(document.querySelectorAll('.nav-utility-loggedin-js'));\r\n var linksToHide = loggedInLinks;\r\n var linksToShow = loggedOutLinks;\r\n var tnewPage = document.querySelector(\".tnew\");\r\n if (isLoggedIn) {\r\n linksToHide = loggedOutLinks;\r\n linksToShow = loggedInLinks;\r\n }\r\n hide_elements_1.hideElements(linksToHide);\r\n show_elements_1.showElements(linksToShow);\r\n };\r\n xhrRequest(TNEW_RESOURCES_DOMAIN + '/api/login/IsLoggedIn', \"GET\", loginStateRequestSuccess);\r\n}\r\nexports.loginState = loginState;\r\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction hideElements(array) {\r\n array.forEach(function (el) {\r\n el.classList.add('hidden');\r\n });\r\n}\r\nexports.hideElements = hideElements;\r\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction showElements(array) {\r\n array.forEach(function (el) {\r\n el.classList.remove('hidden');\r\n });\r\n}\r\nexports.showElements = showElements;\r\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar CONSTANTS = __webpack_require__(1);\r\nfunction stickyHeader() {\r\n window.addEventListener('load', function () {\r\n var header = document.getElementById('siteHeader');\r\n var calendarList = document.querySelector('.calendar-container');\r\n var calendarFilters = document.getElementById('calendar-filters');\r\n var siteBody = document.body;\r\n var headerDimensions = header.offsetHeight;\r\n var calendarFiltersDimensions;\r\n var lastScrollTop = 0;\r\n if (calendarFilters != null) {\r\n calendarFiltersDimensions = calendarFilters.offsetHeight;\r\n }\r\n function initMobileSticky() {\r\n // Handle header compensation on smaller screens\r\n if (window.matchMedia('(max-width: 768px)').matches) {\r\n headerDimensions = header.offsetHeight;\r\n // compensate for fixed header on small screens\r\n //siteBody.style.paddingTop = headerDimensions + \"px\";\r\n if (calendarFilters != null) {\r\n calendarFiltersDimensions = calendarFilters.offsetHeight;\r\n // set calendar filters to be sticky by default on small screens\r\n calendarFilters.classList.add('sticky-top');\r\n calendarFilters.style.transform = 'translateY(' + headerDimensions + 'px)';\r\n calendarList.style.paddingTop = calendarFiltersDimensions + 'px';\r\n }\r\n }\r\n }\r\n initMobileSticky();\r\n function resetOffsets() {\r\n headerDimensions = header.offsetHeight;\r\n if (calendarFilters != null) {\r\n calendarFiltersDimensions = calendarFilters.offsetHeight;\r\n }\r\n }\r\n function stickyDisplayHandler() {\r\n // only run on larger screens\r\n if (window.matchMedia('(min-width: 769px)').matches) {\r\n var currentPos = window.pageYOffset || document.documentElement.scrollTop; // Credits: \"https://github.com/qeremy/so/blob/master/so.dom.js#L426\"\r\n headerDimensions = header.offsetHeight;\r\n if (calendarFilters != null) {\r\n calendarFiltersDimensions = calendarFilters.offsetHeight;\r\n }\r\n // handle calendar sticky\r\n if (calendarFilters != null && currentPos > headerDimensions) {\r\n calendarFilters.classList.add('sticky-top');\r\n calendarList.style.paddingTop = calendarFiltersDimensions + 'px';\r\n }\r\n // handle header sticky\r\n if (currentPos === 0) {\r\n if (!CONSTANTS.GLOBAL_BODY.classList.contains('locked')) {\r\n header.classList.add('sticky-show');\r\n header.style.top = '0px';\r\n header.classList.remove('sticky-top');\r\n //siteBody.classList.remove('sticky-header');\r\n //siteBody.style.paddingTop = \"0px\";\r\n if (calendarFilters != null) {\r\n calendarFilters.style.transform = 'translateY(0px)';\r\n calendarFilters.classList.remove('sticky-top');\r\n calendarList.style.paddingTop = '0px';\r\n }\r\n }\r\n }\r\n else if (currentPos > lastScrollTop && currentPos > headerDimensions) {\r\n if (!CONSTANTS.GLOBAL_BODY.classList.contains('locked')) {\r\n // downscroll code\r\n header.classList.add('sticky-top');\r\n header.classList.remove('sticky-show');\r\n header.style.top = '-' + headerDimensions + 'px';\r\n //siteBody.classList.add('sticky-header');\r\n //siteBody.style.paddingTop = headerDimensions + \"px\";\r\n if (calendarFilters != null) {\r\n calendarFilters.style.transform = 'translateY(0px)';\r\n }\r\n }\r\n }\r\n else if (currentPos < lastScrollTop && currentPos > headerDimensions) {\r\n if (!CONSTANTS.GLOBAL_BODY.classList.contains('locked')) {\r\n // upscroll code\r\n header.classList.add('sticky-show');\r\n header.style.top = '0px';\r\n if (calendarFilters != null) {\r\n calendarFilters.style.transform = 'translateY(' + headerDimensions + 'px)';\r\n }\r\n }\r\n }\r\n // set current position to lastScrollTop\r\n lastScrollTop = currentPos;\r\n }\r\n }\r\n window.addEventListener('resize', function () {\r\n return window.requestAnimationFrame(function () {\r\n initMobileSticky();\r\n stickyDisplayHandler();\r\n });\r\n });\r\n window.addEventListener('scroll', function () {\r\n return window.requestAnimationFrame(function () {\r\n stickyDisplayHandler();\r\n });\r\n });\r\n });\r\n}\r\nexports.stickyHeader = stickyHeader;\r\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar lock_body_1 = __webpack_require__(3);\r\nvar CurtainMenu = /** @class */ (function () {\r\n function CurtainMenu(bodyElement) {\r\n var _this = this;\r\n this.bodyElement = bodyElement;\r\n var curtainTrigger = document.getElementById('curtainMenutrigger');\r\n var curtainTriggerText = curtainTrigger.querySelector('.link-text');\r\n var curtainMenu = document.getElementById('curtainMenu');\r\n var curtainMenuInner = document.querySelector('.curtain-menu-inner');\r\n var sideHeaderHeight = document.querySelector('#siteHeader').scrollHeight;\r\n var menuSubnavTriggers = [].slice.call(document.querySelectorAll('.nav-sub-trigger'));\r\n if (curtainTrigger) {\r\n curtainTrigger.addEventListener('click', function (e) {\r\n e.preventDefault();\r\n if (curtainMenu.classList.contains('open')) {\r\n curtainMenu.classList.remove('open');\r\n curtainTrigger.classList.remove('open');\r\n _this.bodyElement.classList.remove('nav-open');\r\n window.removeEventListener('resize', isAlertOpenResize);\r\n lock_body_1.unlockBody();\r\n closeAllSubs();\r\n curtainTriggerText.innerHTML = 'Menu';\r\n }\r\n else {\r\n showFirstAccordion();\r\n curtainMenu.classList.add('open');\r\n curtainTrigger.classList.add('open');\r\n _this.bodyElement.classList.add('nav-open');\r\n isAlertOpen();\r\n window.addEventListener('resize', isAlertOpenResize);\r\n lock_body_1.lockBody();\r\n curtainTriggerText.innerHTML = 'Close';\r\n }\r\n });\r\n }\r\n function closeAllSubs() {\r\n var allOpenSubs = [].slice.call(document.querySelectorAll('.nav-main-list-sub.open'));\r\n for (var i = 0, l = allOpenSubs.length; i < l; i++) {\r\n allOpenSubs[i].setAttribute('aria-hidden', 'true');\r\n allOpenSubs[i].classList.remove('open');\r\n }\r\n }\r\n function showFirstAccordion() {\r\n if (menuSubnavTriggers && window.matchMedia('(min-width: 768px)').matches) {\r\n var firstMenu = menuSubnavTriggers[0].getAttribute('data-trigger-id');\r\n handleSubMenu(firstMenu);\r\n }\r\n }\r\n function isAlertOpen() {\r\n if (document.querySelector('.site-wide-alert-show')) {\r\n sideHeaderHeight = document.querySelector('#siteHeader').scrollHeight;\r\n curtainMenuInner.style.paddingTop = sideHeaderHeight + 'px';\r\n }\r\n }\r\n function isAlertOpenResize() {\r\n if (document.querySelector('#siteHeader').scrollHeight != sideHeaderHeight) {\r\n sideHeaderHeight = document.querySelector('#siteHeader').scrollHeight;\r\n curtainMenuInner.style.paddingTop = sideHeaderHeight + 'px';\r\n }\r\n }\r\n function handleCalloutsDisplay(calloutsData) {\r\n var calloutLength = calloutsData.callouts.length;\r\n if (calloutLength > 0) {\r\n var calloutMarkup = '';\r\n for (var i = 0; i < calloutLength; i++) {\r\n var callout = calloutsData.callouts[i];\r\n calloutMarkup += '
';\r\n calloutMarkup += ' ';\r\n calloutMarkup +=\r\n '
';\r\n calloutMarkup += '
';\r\n calloutMarkup += '
';\r\n calloutMarkup += '

' + callout.title + '

';\r\n calloutMarkup += '

' + callout.date + '

';\r\n calloutMarkup += ' ' + callout.linkTitle + '';\r\n calloutMarkup += '
';\r\n calloutMarkup += '
';\r\n }\r\n document.querySelector('.nav-callouts-body').innerHTML = calloutMarkup;\r\n }\r\n }\r\n function handleSubMenu(triggerId) {\r\n var subnavID = triggerId;\r\n var subnavToOpen = document.getElementById(subnavID);\r\n if (subnavToOpen.getAttribute('aria-hidden') === 'true') {\r\n closeAllSubs();\r\n subnavToOpen.setAttribute('aria-hidden', 'false');\r\n subnavToOpen.classList.add('open');\r\n var calloutsData = JSON.parse(subnavToOpen.dataset.callouts);\r\n handleCalloutsDisplay(calloutsData);\r\n }\r\n else {\r\n subnavToOpen.setAttribute('aria-hidden', 'true');\r\n subnavToOpen.classList.remove('open');\r\n }\r\n }\r\n if (menuSubnavTriggers) {\r\n for (var i = 0, l = menuSubnavTriggers.length; i < l; i++) {\r\n menuSubnavTriggers[i].addEventListener('click', function (e) {\r\n e.preventDefault();\r\n handleSubMenu(this.getAttribute('data-trigger-id'));\r\n });\r\n }\r\n }\r\n }\r\n return CurtainMenu;\r\n}());\r\nexports.CurtainMenu = CurtainMenu;\r\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar AriaToggling = /** @class */ (function () {\r\n function AriaToggling(links) {\r\n var _this = this;\r\n this.links = links;\r\n this.showClass = 'show-menu';\r\n this.mNav = '#mainNav';\r\n //Keyboard Navigation\r\n if (window.innerWidth > 1025 && !document.getElementsByTagName('html')[0].classList.contains('mod-touchevents')) {\r\n if (window[\"element\"] && !Element.prototype[\"closest\"]) {\r\n Element.prototype[\"closest\"] =\r\n function (s) {\r\n var matches = (this.document || this.ownerdocument).queryselectorall(s), i, el = this;\r\n do {\r\n i = matches.length;\r\n while (--i >= 0 && matches.item(i) !== el) { }\r\n ;\r\n } while ((i < 0) && (el = el.parentelement));\r\n return el;\r\n };\r\n }\r\n links.forEach(function (link) {\r\n var linkParent = link.parentNode;\r\n link.addEventListener('focus', function (e) {\r\n _this.focusOn(e, link, linkParent);\r\n });\r\n link.addEventListener('blur', function (e) {\r\n _this.blurOut(e, linkParent);\r\n });\r\n });\r\n }\r\n //Tablet landscape view to allow users to tap a parent link to see the children.\r\n if (window.innerWidth <= 1600 && window.innerWidth > 767 && document.getElementsByTagName('html')[0].classList.contains('mod-touchevents')) {\r\n //Click outside of the header\r\n this.outSideClicks();\r\n links.forEach(function (link) {\r\n var linkParent = link.parentNode;\r\n link.addEventListener('click', function (e) {\r\n if (!linkParent.classList.contains(_this.showClass)) {\r\n e.preventDefault();\r\n if (document.querySelector('.' + _this.showClass) !== null) {\r\n document.querySelector('.' + _this.showClass).classList.remove(_this.showClass);\r\n }\r\n linkParent.classList.add(_this.showClass);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n AriaToggling.prototype.outSideClicks = function () {\r\n var _this = this;\r\n var mNav = document.querySelector(this.mNav);\r\n if (mNav) {\r\n // For clicks inside the element\r\n document.querySelector(this.mNav).addEventListener('click', function (e) {\r\n _this.checkClick(e);\r\n });\r\n // For clicks elsewhere on the page\r\n document.addEventListener('click', function () {\r\n //close stuff\r\n if (document.querySelector('.' + _this.showClass) !== null) {\r\n document.querySelector('.' + _this.showClass).classList.remove(_this.showClass);\r\n }\r\n });\r\n // For clicks elsewhere on the page\r\n document.addEventListener('touchstart', function () {\r\n //close stuff\r\n if (document.querySelector('.' + _this.showClass) !== null) {\r\n document.querySelector('.' + _this.showClass).classList.remove(_this.showClass);\r\n }\r\n });\r\n }\r\n };\r\n AriaToggling.prototype.checkClick = function (e) {\r\n // Make sure the event doesn't bubble from your element\r\n if (e) {\r\n e.stopPropagation();\r\n }\r\n else {\r\n window.event.cancelBubble = true;\r\n }\r\n };\r\n AriaToggling.prototype.focusOn = function (e, link, linkParent) {\r\n var _this = this;\r\n setTimeout(function () {\r\n _this.toggleOff();\r\n if (link.classList.contains('has-meganav-js') && !linkParent.classList.contains(_this.showClass)) {\r\n _this.toggleOn(linkParent);\r\n }\r\n e.stopPropagation();\r\n var viewableLinks = Array.prototype.slice.call(linkParent.querySelectorAll('[aria-hidden=\"false\"] a'));\r\n if (viewableLinks.length > 0) {\r\n viewableLinks.forEach(function (viewableLink) {\r\n viewableLink.addEventListener('blur', function (e) {\r\n _this.blurOut(e, linkParent);\r\n });\r\n });\r\n }\r\n }, 10);\r\n };\r\n AriaToggling.prototype.toggleOn = function (linkParent) {\r\n linkParent.classList.add(this.showClass);\r\n linkParent.querySelector('[aria-hidden=\"true\"]').setAttribute('aria-hidden', 'false');\r\n };\r\n AriaToggling.prototype.blurOut = function (e, linkParent) {\r\n var _this = this;\r\n setTimeout(function () {\r\n if (document.activeElement[\"closest\"]('[aria-haspopup=\"true\"]') !== linkParent || document.activeElement[\"closest\"]('[aria-haspopup=\"true\"]') === null) {\r\n _this.toggleOff();\r\n }\r\n e.stopPropagation();\r\n }, 10);\r\n };\r\n AriaToggling.prototype.toggleOff = function () {\r\n var items = Array.prototype.slice.call(document.querySelectorAll('.nav-main-list-item.show-menu'));\r\n if (items.length > 0) {\r\n items.forEach(function (item) {\r\n item.classList.remove('show-menu');\r\n item.querySelector('[aria-hidden=\"false\"]').setAttribute('aria-hidden', 'true');\r\n });\r\n }\r\n };\r\n return AriaToggling;\r\n}());\r\nexports.AriaToggling = AriaToggling;\r\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar IeDesaturate = /** @class */ (function () {\r\n function IeDesaturate(htmlElement) {\r\n var _this = this;\r\n this.htmlElement = htmlElement;\r\n if (this.getInternetExplorerVersion() >= 10) {\r\n this.htmlElement.classList.add('ie' + this.getInternetExplorerVersion());\r\n var desaturateImages = [].slice.call(document.querySelectorAll('.desaturate img'));\r\n desaturateImages.forEach(function (img) {\r\n _this.grayscaleIE10(img);\r\n });\r\n }\r\n }\r\n IeDesaturate.prototype.getInternetExplorerVersion = function () {\r\n var rv = -1;\r\n if (navigator.appName == 'Microsoft Internet Explorer') {\r\n var ua = navigator.userAgent;\r\n var re = new RegExp(\"MSIE ([0-9]{1,}[\\.0-9]{0,})\");\r\n if (re.exec(ua) != null)\r\n rv = parseFloat(RegExp.$1);\r\n }\r\n else if (navigator.appName == 'Netscape') {\r\n var ua = navigator.userAgent;\r\n var re = new RegExp(\"Trident/.*rv:([0-9]{1,}[\\.0-9]{0,})\");\r\n if (re.exec(ua) != null)\r\n rv = parseFloat(RegExp.$1);\r\n }\r\n return rv;\r\n };\r\n IeDesaturate.prototype.grayscaleIE10 = function (img) {\r\n var imgObj = img;\r\n imgObj.src = this.gray(imgObj);\r\n };\r\n ;\r\n IeDesaturate.prototype.gray = function (imgObject) {\r\n var canvas = document.createElement('canvas');\r\n var canvasContext = canvas.getContext('2d');\r\n var imgW = imgObject.naturalWidth;\r\n var imgH = imgObject.naturalHeight;\r\n canvas.width = imgW;\r\n canvas.height = imgH;\r\n canvasContext.drawImage(imgObject, 0, 0);\r\n var imgPixels = canvasContext.getImageData(0, 0, imgW, imgH);\r\n for (var y = 0; y < imgPixels.height; y++) {\r\n for (var x = 0; x < imgPixels.width; x++) {\r\n var i = (y * 4) * imgPixels.width + x * 4;\r\n var avg = (imgPixels.data[i] + imgPixels.data[i + 1] + imgPixels.data[i + 2]) / 3;\r\n imgPixels.data[i] = avg;\r\n imgPixels.data[i + 1] = avg;\r\n imgPixels.data[i + 2] = avg;\r\n }\r\n }\r\n canvasContext.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height);\r\n return canvas.toDataURL();\r\n };\r\n return IeDesaturate;\r\n}());\r\nexports.IeDesaturate = IeDesaturate;\r\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n__webpack_require__(19);\r\nfunction alertMessage() {\r\n var ALERT_MESSAGE_ID = 'siteWideAlertMessage';\r\n var ALERT_CANCEL_ID = 'siteWideAlertCancel';\r\n var SHOW_CLASS = 'site-wide-alert-show';\r\n var alertMessageElement = document.getElementById(ALERT_MESSAGE_ID);\r\n var alertCancelElement = document.getElementById(ALERT_CANCEL_ID);\r\n var siteBody = document.querySelector('.site-body');\r\n var siteHeader = document.querySelector('#siteHeader');\r\n var siteHeaderHeight = '';\r\n var curtainMenu = document.querySelector('.curtain-menu-inner');\r\n if (alertMessageElement && alertCancelElement) {\r\n document.addEventListener('DOMContentLoaded', setAlertMessageVisibility);\r\n alertCancelElement.addEventListener('click', cancelAlert);\r\n }\r\n function adjustSiteBody() {\r\n if (document.querySelector('.page-hero-heading-no-image') || (!document.querySelector('.page-hero-tint-overlay') && !document.querySelector('.home-page-js') &&\r\n !document.querySelector('.cal-site-body'))) {\r\n calcSiteHeaderHeight();\r\n window.addEventListener('resize', function () {\r\n calcSiteHeaderHeight();\r\n });\r\n }\r\n else if (!document.querySelector('.cal-site-body') && !document.querySelector('.page-hero-large-parallax-alt')) {\r\n if (window.innerWidth < 768) {\r\n calcSiteHeaderHeight();\r\n }\r\n window.addEventListener('resize', function () {\r\n if (window.innerWidth < 768) {\r\n calcSiteHeaderHeight();\r\n }\r\n else if (siteBody.hasAttribute('style')) {\r\n siteBody.removeAttribute('style');\r\n }\r\n });\r\n }\r\n }\r\n function calcSiteHeaderHeight() {\r\n if (siteBody.hasAttribute('style')) {\r\n siteBody.removeAttribute('style');\r\n }\r\n // 35px buffer added to match design\r\n siteHeaderHeight = siteHeader.scrollHeight + 35 + 'px';\r\n siteBody.style.paddingTop = siteHeaderHeight;\r\n }\r\n function setAlertMessageVisibility() {\r\n fetch(TNEW_RESOURCES_DOMAIN + '/api/AlertMessage/ShouldShowMessage', {\r\n credentials: 'include',\r\n })\r\n .then(function (response) {\r\n if (response.ok) {\r\n return response.json();\r\n }\r\n else {\r\n // Failure case\r\n console.log(response);\r\n }\r\n }).then(function (shouldShowMessage) {\r\n if (shouldShowMessage) {\r\n alertMessageElement.classList.add(SHOW_CLASS);\r\n adjustSiteBody();\r\n }\r\n });\r\n }\r\n function cancelAlert() {\r\n if (curtainMenu.hasAttribute('style')) {\r\n curtainMenu.removeAttribute('style');\r\n }\r\n if (siteBody.hasAttribute('style')) {\r\n siteBody.removeAttribute('style');\r\n }\r\n fetch(TNEW_RESOURCES_DOMAIN + '/api/AlertMessage/CloseModal', {\r\n method: 'post',\r\n credentials: 'include',\r\n })\r\n .then(function (response) {\r\n if (response.ok) {\r\n alertMessageElement.classList.remove(SHOW_CLASS);\r\n return response;\r\n }\r\n else {\r\n // Failure case\r\n console.log(response);\r\n }\r\n });\r\n }\r\n}\r\nexports.alertMessage = alertMessage;\r\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// the whatwg-fetch polyfill installs the fetch() function\n// on the global object (window or self)\n//\n// Return that as the export for use in Webpack, Browserify etc.\n__webpack_require__(20);\nmodule.exports = self.fetch.bind(self);\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global, Promise) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.Headers = Headers;\nexports.Request = Request;\nexports.Response = Response;\nexports.fetch = fetch;\n/* eslint-disable no-prototype-builtins */\nvar g = typeof globalThis !== 'undefined' && globalThis || typeof self !== 'undefined' && self ||\n// eslint-disable-next-line no-undef\ntypeof global !== 'undefined' && global || {};\n\nvar support = {\n searchParams: 'URLSearchParams' in g,\n iterable: 'Symbol' in g && 'iterator' in Symbol,\n blob: 'FileReader' in g && 'Blob' in g && function () {\n try {\n new Blob();\n return true;\n } catch (e) {\n return false;\n }\n }(),\n formData: 'FormData' in g,\n arrayBuffer: 'ArrayBuffer' in g\n};\n\nfunction isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj);\n}\n\nif (support.arrayBuffer) {\n var viewClasses = ['[object Int8Array]', '[object Uint8Array]', '[object Uint8ClampedArray]', '[object Int16Array]', '[object Uint16Array]', '[object Int32Array]', '[object Uint32Array]', '[object Float32Array]', '[object Float64Array]'];\n\n var isArrayBufferView = ArrayBuffer.isView || function (obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1;\n };\n}\n\nfunction normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name);\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {\n throw new TypeError('Invalid character in header field name: \"' + name + '\"');\n }\n return name.toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value);\n }\n return value;\n}\n\n// Build a destructive iterator for the value list\nfunction iteratorFor(items) {\n var iterator = {\n next: function next() {\n var value = items.shift();\n return { done: value === undefined, value: value };\n }\n };\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function () {\n return iterator;\n };\n }\n\n return iterator;\n}\n\nfunction Headers(headers) {\n this.map = {};\n\n if (headers instanceof Headers) {\n headers.forEach(function (value, name) {\n this.append(name, value);\n }, this);\n } else if (Array.isArray(headers)) {\n headers.forEach(function (header) {\n if (header.length != 2) {\n throw new TypeError('Headers constructor: expected name/value pair to be length 2, found' + header.length);\n }\n this.append(header[0], header[1]);\n }, this);\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function (name) {\n this.append(name, headers[name]);\n }, this);\n }\n}\n\nHeaders.prototype.append = function (name, value) {\n name = normalizeName(name);\n value = normalizeValue(value);\n var oldValue = this.map[name];\n this.map[name] = oldValue ? oldValue + ', ' + value : value;\n};\n\nHeaders.prototype['delete'] = function (name) {\n delete this.map[normalizeName(name)];\n};\n\nHeaders.prototype.get = function (name) {\n name = normalizeName(name);\n return this.has(name) ? this.map[name] : null;\n};\n\nHeaders.prototype.has = function (name) {\n return this.map.hasOwnProperty(normalizeName(name));\n};\n\nHeaders.prototype.set = function (name, value) {\n this.map[normalizeName(name)] = normalizeValue(value);\n};\n\nHeaders.prototype.forEach = function (callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this);\n }\n }\n};\n\nHeaders.prototype.keys = function () {\n var items = [];\n this.forEach(function (value, name) {\n items.push(name);\n });\n return iteratorFor(items);\n};\n\nHeaders.prototype.values = function () {\n var items = [];\n this.forEach(function (value) {\n items.push(value);\n });\n return iteratorFor(items);\n};\n\nHeaders.prototype.entries = function () {\n var items = [];\n this.forEach(function (value, name) {\n items.push([name, value]);\n });\n return iteratorFor(items);\n};\n\nif (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n}\n\nfunction consumed(body) {\n if (body._noBody) return;\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'));\n }\n body.bodyUsed = true;\n}\n\nfunction fileReaderReady(reader) {\n return new Promise(function (resolve, reject) {\n reader.onload = function () {\n resolve(reader.result);\n };\n reader.onerror = function () {\n reject(reader.error);\n };\n });\n}\n\nfunction readBlobAsArrayBuffer(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsArrayBuffer(blob);\n return promise;\n}\n\nfunction readBlobAsText(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n var match = /charset=([A-Za-z0-9_-]+)/.exec(blob.type);\n var encoding = match ? match[1] : 'utf-8';\n reader.readAsText(blob, encoding);\n return promise;\n}\n\nfunction readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf);\n var chars = new Array(view.length);\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i]);\n }\n return chars.join('');\n}\n\nfunction bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0);\n } else {\n var view = new Uint8Array(buf.byteLength);\n view.set(new Uint8Array(buf));\n return view.buffer;\n }\n}\n\nfunction Body() {\n this.bodyUsed = false;\n\n this._initBody = function (body) {\n /*\n fetch-mock wraps the Response object in an ES6 Proxy to\n provide useful test harness features such as flush. However, on\n ES5 browsers without fetch or Proxy support pollyfills must be used;\n the proxy-pollyfill is unable to proxy an attribute unless it exists\n on the object before the Proxy is created. This change ensures\n Response.bodyUsed exists on the instance, while maintaining the\n semantic of setting Request.bodyUsed in the constructor before\n _initBody is called.\n */\n // eslint-disable-next-line no-self-assign\n this.bodyUsed = this.bodyUsed;\n this._bodyInit = body;\n if (!body) {\n this._noBody = true;\n this._bodyText = '';\n } else if (typeof body === 'string') {\n this._bodyText = body;\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body;\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body;\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString();\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer);\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body);\n } else {\n this._bodyText = body = Object.prototype.toString.call(body);\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type);\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n }\n };\n\n if (support.blob) {\n this.blob = function () {\n var rejected = consumed(this);\n if (rejected) {\n return rejected;\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob);\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]));\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob');\n } else {\n return Promise.resolve(new Blob([this._bodyText]));\n }\n };\n }\n\n this.arrayBuffer = function () {\n if (this._bodyArrayBuffer) {\n var isConsumed = consumed(this);\n if (isConsumed) {\n return isConsumed;\n } else if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n return Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset, this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength));\n } else {\n return Promise.resolve(this._bodyArrayBuffer);\n }\n } else if (support.blob) {\n return this.blob().then(readBlobAsArrayBuffer);\n } else {\n throw new Error('could not read as ArrayBuffer');\n }\n };\n\n this.text = function () {\n var rejected = consumed(this);\n if (rejected) {\n return rejected;\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob);\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer));\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text');\n } else {\n return Promise.resolve(this._bodyText);\n }\n };\n\n if (support.formData) {\n this.formData = function () {\n return this.text().then(decode);\n };\n }\n\n this.json = function () {\n return this.text().then(JSON.parse);\n };\n\n return this;\n}\n\n// HTTP methods whose capitalization should be normalized\nvar methods = ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'TRACE'];\n\nfunction normalizeMethod(method) {\n var upcased = method.toUpperCase();\n return methods.indexOf(upcased) > -1 ? upcased : method;\n}\n\nfunction Request(input, options) {\n if (!(this instanceof Request)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.');\n }\n\n options = options || {};\n var body = options.body;\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read');\n }\n this.url = input.url;\n this.credentials = input.credentials;\n if (!options.headers) {\n this.headers = new Headers(input.headers);\n }\n this.method = input.method;\n this.mode = input.mode;\n this.signal = input.signal;\n if (!body && input._bodyInit != null) {\n body = input._bodyInit;\n input.bodyUsed = true;\n }\n } else {\n this.url = String(input);\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin';\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers);\n }\n this.method = normalizeMethod(options.method || this.method || 'GET');\n this.mode = options.mode || this.mode || null;\n this.signal = options.signal || this.signal || function () {\n if ('AbortController' in g) {\n var ctrl = new AbortController();\n return ctrl.signal;\n }\n }();\n this.referrer = null;\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests');\n }\n this._initBody(body);\n\n if (this.method === 'GET' || this.method === 'HEAD') {\n if (options.cache === 'no-store' || options.cache === 'no-cache') {\n // Search for a '_' parameter in the query string\n var reParamSearch = /([?&])_=[^&]*/;\n if (reParamSearch.test(this.url)) {\n // If it already exists then set the value with the current time\n this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime());\n } else {\n // Otherwise add a new '_' parameter to the end with the current time\n var reQueryString = /\\?/;\n this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime();\n }\n }\n }\n}\n\nRequest.prototype.clone = function () {\n return new Request(this, { body: this._bodyInit });\n};\n\nfunction decode(body) {\n var form = new FormData();\n body.trim().split('&').forEach(function (bytes) {\n if (bytes) {\n var split = bytes.split('=');\n var name = split.shift().replace(/\\+/g, ' ');\n var value = split.join('=').replace(/\\+/g, ' ');\n form.append(decodeURIComponent(name), decodeURIComponent(value));\n }\n });\n return form;\n}\n\nfunction parseHeaders(rawHeaders) {\n var headers = new Headers();\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n // https://github.com/github/fetch/issues/748\n // https://github.com/zloirock/core-js/issues/751\n preProcessedHeaders.split('\\r').map(function (header) {\n return header.indexOf('\\n') === 0 ? header.substr(1, header.length) : header;\n }).forEach(function (line) {\n var parts = line.split(':');\n var key = parts.shift().trim();\n if (key) {\n var value = parts.join(':').trim();\n try {\n headers.append(key, value);\n } catch (error) {\n console.warn('Response ' + error.message);\n }\n }\n });\n return headers;\n}\n\nBody.call(Request.prototype);\n\nfunction Response(bodyInit, options) {\n if (!(this instanceof Response)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.');\n }\n if (!options) {\n options = {};\n }\n\n this.type = 'default';\n this.status = options.status === undefined ? 200 : options.status;\n if (this.status < 200 || this.status > 599) {\n throw new RangeError(\"Failed to construct 'Response': The status provided (0) is outside the range [200, 599].\");\n }\n this.ok = this.status >= 200 && this.status < 300;\n this.statusText = options.statusText === undefined ? '' : '' + options.statusText;\n this.headers = new Headers(options.headers);\n this.url = options.url || '';\n this._initBody(bodyInit);\n}\n\nBody.call(Response.prototype);\n\nResponse.prototype.clone = function () {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n });\n};\n\nResponse.error = function () {\n var response = new Response(null, { status: 200, statusText: '' });\n response.ok = false;\n response.status = 0;\n response.type = 'error';\n return response;\n};\n\nvar redirectStatuses = [301, 302, 303, 307, 308];\n\nResponse.redirect = function (url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code');\n }\n\n return new Response(null, { status: status, headers: { location: url } });\n};\n\nvar DOMException = exports.DOMException = g.DOMException;\ntry {\n new DOMException();\n} catch (err) {\n exports.DOMException = DOMException = function DOMException(message, name) {\n this.message = message;\n this.name = name;\n var error = Error(message);\n this.stack = error.stack;\n };\n DOMException.prototype = Object.create(Error.prototype);\n DOMException.prototype.constructor = DOMException;\n}\n\nfunction fetch(input, init) {\n return new Promise(function (resolve, reject) {\n var request = new Request(input, init);\n\n if (request.signal && request.signal.aborted) {\n return reject(new DOMException('Aborted', 'AbortError'));\n }\n\n var xhr = new XMLHttpRequest();\n\n function abortXhr() {\n xhr.abort();\n }\n\n xhr.onload = function () {\n var options = {\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n // This check if specifically for when a user fetches a file locally from the file system\n // Only if the status is out of a normal range\n };if (request.url.indexOf('file://') === 0 && (xhr.status < 200 || xhr.status > 599)) {\n options.status = 200;\n } else {\n options.status = xhr.status;\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n setTimeout(function () {\n resolve(new Response(body, options));\n }, 0);\n };\n\n xhr.onerror = function () {\n setTimeout(function () {\n reject(new TypeError('Network request failed'));\n }, 0);\n };\n\n xhr.ontimeout = function () {\n setTimeout(function () {\n reject(new TypeError('Network request timed out'));\n }, 0);\n };\n\n xhr.onabort = function () {\n setTimeout(function () {\n reject(new DOMException('Aborted', 'AbortError'));\n }, 0);\n };\n\n function fixUrl(url) {\n try {\n return url === '' && g.location.href ? g.location.href : url;\n } catch (e) {\n return url;\n }\n }\n\n xhr.open(request.method, fixUrl(request.url), true);\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true;\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false;\n }\n\n if ('responseType' in xhr) {\n if (support.blob) {\n xhr.responseType = 'blob';\n } else if (support.arrayBuffer) {\n xhr.responseType = 'arraybuffer';\n }\n }\n\n if (init && _typeof(init.headers) === 'object' && !(init.headers instanceof Headers || g.Headers && init.headers instanceof g.Headers)) {\n var names = [];\n Object.getOwnPropertyNames(init.headers).forEach(function (name) {\n names.push(normalizeName(name));\n xhr.setRequestHeader(name, normalizeValue(init.headers[name]));\n });\n request.headers.forEach(function (value, name) {\n if (names.indexOf(name) === -1) {\n xhr.setRequestHeader(name, value);\n }\n });\n } else {\n request.headers.forEach(function (value, name) {\n xhr.setRequestHeader(name, value);\n });\n }\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr);\n\n xhr.onreadystatechange = function () {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr);\n }\n };\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n });\n}\n\nfetch.polyfill = true;\n\nif (!g.fetch) {\n g.fetch = fetch;\n g.Headers = Headers;\n g.Request = Request;\n g.Response = Response;\n}\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(21)))\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(process, global) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;var require;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version 4.1.1\n */\n\n(function (global, factory) {\n ( false ? 'undefined' : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory() : true ? !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : global.ES6Promise = factory();\n})(undefined, function () {\n 'use strict';\n\n function objectOrFunction(x) {\n var type = typeof x === 'undefined' ? 'undefined' : _typeof(x);\n return x !== null && (type === 'object' || type === 'function');\n }\n\n function isFunction(x) {\n return typeof x === 'function';\n }\n\n var _isArray = undefined;\n if (Array.isArray) {\n _isArray = Array.isArray;\n } else {\n _isArray = function _isArray(x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n }\n\n var isArray = _isArray;\n\n var len = 0;\n var vertxNext = undefined;\n var customSchedulerFn = undefined;\n\n var asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n };\n\n function setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n }\n\n function setAsap(asapFn) {\n asap = asapFn;\n }\n\n var browserWindow = typeof window !== 'undefined' ? window : undefined;\n var browserGlobal = browserWindow || {};\n var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\n var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n // node\n function useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n }\n\n // vertx\n function useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n }\n\n function useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n }\n\n // web worker\n function useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n }\n\n function useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n }\n\n var queue = new Array(1000);\n function flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n }\n\n function attemptVertx() {\n try {\n var r = require;\n var vertx = __webpack_require__(23);\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n }\n\n var scheduleFlush = undefined;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (isNode) {\n scheduleFlush = useNextTick();\n } else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n } else if (isWorker) {\n scheduleFlush = useMessageChannel();\n } else if (browserWindow === undefined && \"function\" === 'function') {\n scheduleFlush = attemptVertx();\n } else {\n scheduleFlush = useSetTimeout();\n }\n\n function then(onFulfillment, onRejection) {\n var _arguments = arguments;\n\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n if (_state) {\n (function () {\n var callback = _arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n })();\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n\n /**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n \n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n \n promise.then(function(value){\n // value === 1\n });\n ```\n \n Instead of writing the above, your code now simply becomes the following:\n \n ```javascript\n let promise = Promise.resolve(1);\n \n promise.then(function(value){\n // value === 1\n });\n ```\n \n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n */\n function resolve$1(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && (typeof object === 'undefined' ? 'undefined' : _typeof(object)) === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n resolve(promise, object);\n return promise;\n }\n\n var PROMISE_ID = Math.random().toString(36).substring(16);\n\n function noop() {}\n\n var PENDING = void 0;\n var FULFILLED = 1;\n var REJECTED = 2;\n\n var GET_THEN_ERROR = new ErrorObject();\n\n function selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function getThen(promise) {\n try {\n return promise.then;\n } catch (error) {\n GET_THEN_ERROR.error = error;\n return GET_THEN_ERROR;\n }\n }\n\n function tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n try {\n then$$1.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n }\n\n function handleForeignThenable(promise, thenable, then$$1) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then$$1, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n }\n\n function handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n }\n\n function handleMaybeThenable(promise, maybeThenable, then$$1) {\n if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$1 === GET_THEN_ERROR) {\n reject(promise, GET_THEN_ERROR.error);\n GET_THEN_ERROR.error = null;\n } else if (then$$1 === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$1)) {\n handleForeignThenable(promise, maybeThenable, then$$1);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n }\n\n function resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n handleMaybeThenable(promise, value, getThen(value));\n } else {\n fulfill(promise, value);\n }\n }\n\n function publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n }\n\n function fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n }\n\n function reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n }\n\n function subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n }\n\n function publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = undefined,\n callback = undefined,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function ErrorObject() {\n this.error = null;\n }\n\n var TRY_CATCH_ERROR = new ErrorObject();\n\n function tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch (e) {\n TRY_CATCH_ERROR.error = e;\n return TRY_CATCH_ERROR;\n }\n }\n\n function invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = undefined,\n error = undefined,\n succeeded = undefined,\n failed = undefined;\n\n if (hasCallback) {\n value = tryCatch(callback, detail);\n\n if (value === TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value.error = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (failed) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n }\n\n function initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n }\n\n var id = 0;\n function nextId() {\n return id++;\n }\n\n function makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n }\n\n function Enumerator$1(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n }\n\n function validationError() {\n return new Error('Array Methods must be provided an Array');\n }\n\n Enumerator$1.prototype._enumerate = function (input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n Enumerator$1.prototype._eachEntry = function (entry, i) {\n var c = this._instanceConstructor;\n var resolve$$1 = c.resolve;\n\n if (resolve$$1 === resolve$1) {\n var _then = getThen(entry);\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise$2) {\n var promise = new c(noop);\n handleMaybeThenable(promise, entry, _then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$1) {\n return resolve$$1(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$1(entry), i);\n }\n };\n\n Enumerator$1.prototype._settledAt = function (state, i, value) {\n var promise = this.promise;\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n };\n\n Enumerator$1.prototype._willSettleAt = function (promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n };\n\n /**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n \n Example:\n \n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n \n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n \n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n \n Example:\n \n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n \n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n \n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n */\n function all$1(entries) {\n return new Enumerator$1(this, entries).promise;\n }\n\n /**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n \n Example:\n \n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n \n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n \n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n \n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n \n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n \n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n \n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n \n An example real-world use case is implementing timeouts:\n \n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n \n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n */\n function race$1(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n }\n\n /**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n \n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n \n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n \n Instead of writing the above, your code now simply becomes the following:\n \n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n \n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n \n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n */\n function reject$1(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n reject(promise, reason);\n return promise;\n }\n\n function needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n \n Terminology\n -----------\n \n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n \n A promise can be in one of three states: pending, fulfilled, or rejected.\n \n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n \n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n \n \n Basic Usage:\n ------------\n \n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n \n // on failure\n reject(reason);\n });\n \n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n \n Advanced Usage:\n ---------------\n \n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n \n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n \n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n \n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n \n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n \n Unlike callbacks, promises are great composable primitives.\n \n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n \n return values;\n });\n ```\n \n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function Promise$2(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise$2 ? initializePromise(this, resolver) : needsNew();\n }\n }\n\n Promise$2.all = all$1;\n Promise$2.race = race$1;\n Promise$2.resolve = resolve$1;\n Promise$2.reject = reject$1;\n Promise$2._setScheduler = setScheduler;\n Promise$2._setAsap = setAsap;\n Promise$2._asap = asap;\n\n Promise$2.prototype = {\n constructor: Promise$2,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n \n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n \n Chaining\n --------\n \n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n \n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n \n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n \n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n \n Assimilation\n ------------\n \n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n \n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n \n If the assimliated promise rejects, then the downstream promise will also reject.\n \n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n \n Simple Example\n --------------\n \n Synchronous Example\n \n ```javascript\n let result;\n \n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n \n Errback Example\n \n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n \n Promise Example;\n \n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n \n Advanced Example\n --------------\n \n Synchronous Example\n \n ```javascript\n let author, books;\n \n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n \n Errback Example\n \n ```js\n \n function foundBooks(books) {\n \n }\n \n function failure(reason) {\n \n }\n \n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n \n Promise Example;\n \n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n \n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: then,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n \n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n \n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n \n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n \n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function _catch(onRejection) {\n return this.then(null, onRejection);\n }\n };\n\n /*global self*/\n function polyfill$1() {\n var local = undefined;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise$2;\n }\n\n // Strange compat..\n Promise$2.polyfill = polyfill$1;\n Promise$2.Promise = Promise$2;\n\n return Promise$2;\n});\n\n//# sourceMappingURL=es6-promise.map\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(22), __webpack_require__(0)))\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n})();\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while (len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n return [];\n};\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n return '/';\n};\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function () {\n return 0;\n};\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports) {\n\n/* (ignored) */\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar convertToArray = function (nodeList) {\r\n return [].slice.call(nodeList);\r\n};\r\nvar accordionLists = convertToArray(document.querySelectorAll('[data-accordion-list]'));\r\nvar resizeTimer;\r\nvar openClass = 'libaccordion-open-js';\r\nvar openClassCss = 'libaccordion-open';\r\nvar AccordionsOptions = /** @class */ (function () {\r\n function AccordionsOptions() {\r\n this.singleAccordion = false;\r\n }\r\n return AccordionsOptions;\r\n}());\r\nvar Accordions = /** @class */ (function () {\r\n function Accordions(optArg) {\r\n var _this = this;\r\n this.optArg = optArg;\r\n this.options = new AccordionsOptions();\r\n window.addEventListener('resize', function () {\r\n requestAnimationFrame(_this.triggerSetAccordionHeights.bind(_this));\r\n });\r\n accordionLists.forEach(function (accordionList) {\r\n accordionList.addEventListener(\"click\", _this.accordionClick.bind(_this), false);\r\n });\r\n //Check for Options\r\n if (this.optArg === undefined)\r\n this.optArg = new AccordionsOptions();\r\n else {\r\n this.options.singleAccordion = (this.optArg.singleAccordion === undefined) ? this.options.singleAccordion : this.optArg.singleAccordion;\r\n }\r\n }\r\n Accordions.prototype.setAccordionHeights = function () {\r\n setTimeout(function () {\r\n accordionLists.forEach(function (accordionList) {\r\n var openAccordions = accordionList.querySelectorAll('.' + openClass);\r\n if (openAccordions.length > 0) {\r\n openAccordions.forEach(function (openAccordion) {\r\n var accordionToReCalc = openAccordion.querySelector('[data-accordion-content-id]');\r\n var accordionRecalcedHeight = accordionToReCalc.getBoundingClientRect().height;\r\n console.log(accordionRecalcedHeight);\r\n openAccordion.style.height = accordionRecalcedHeight + 'px';\r\n });\r\n }\r\n });\r\n }, 100);\r\n };\r\n Accordions.prototype.accordionClick = function (e) {\r\n if (e.target !== e.currentTarget) {\r\n var accordionToOpenId = e.target.getAttribute('data-accordion-trigger');\r\n if (accordionToOpenId === null) {\r\n accordionToOpenId = e.target.parentElement.getAttribute('data-accordion-trigger');\r\n }\r\n var accordionToToggle = document.querySelector('[data-accordion-id=\"' + accordionToOpenId + '\"]');\r\n var accordionContentHeight = document.querySelector('[data-accordion-content-id=\"' + accordionToOpenId + '\"]').getBoundingClientRect().height;\r\n if (this.options.singleAccordion) {\r\n this.closeOpenAccordions(accordionToToggle);\r\n }\r\n if (accordionToToggle.classList.contains(openClass)) {\r\n this.closeAccordion(accordionToToggle);\r\n }\r\n else {\r\n this.openAccordion(accordionToToggle, accordionContentHeight);\r\n }\r\n this.setAccordionHeights();\r\n }\r\n e.stopPropagation();\r\n };\r\n Accordions.prototype.openAccordion = function (accordionToOpen, accordionToOpenHeight) {\r\n if (accordionToOpen.parentElement.classList.contains(\"libaccordion-show-multiple-false\")) {\r\n var parentContainer = accordionToOpen.parentElement.parentElement;\r\n var collapsableItems = Array.prototype.slice.call(parentContainer.querySelectorAll(\".libaccordion-show-multiple-false\"));\r\n collapsableItems.forEach(function (item) {\r\n if (item.classList.contains(\"libaccordion-open\")) {\r\n item.classList.remove(\"libaccordion-open\");\r\n }\r\n if (item.querySelector(\".libaccordion-content\").classList.contains(\"libaccordion-open-js\")) {\r\n item.querySelector(\".libaccordion-content\").classList.remove(\"libaccordion-open-js\");\r\n item.querySelector(\".libaccordion-content\").setAttribute('style', 'height: 0px;');\r\n item.querySelector(\".libaccordion-content\").setAttribute('aria-hidden', 'true');\r\n }\r\n });\r\n }\r\n accordionToOpen.classList.add(openClass);\r\n accordionToOpen.setAttribute('style', 'height:' + accordionToOpenHeight + 'px');\r\n accordionToOpen.setAttribute('aria-hidden', 'false');\r\n accordionToOpen.parentElement.classList.add(openClassCss);\r\n };\r\n Accordions.prototype.closeAccordion = function (accordionToClose) {\r\n accordionToClose.classList.remove(openClass);\r\n accordionToClose.setAttribute('style', 'height: 0px');\r\n accordionToClose.setAttribute('aria-hidden', 'true');\r\n accordionToClose.parentElement.classList.remove(openClassCss);\r\n };\r\n Accordions.prototype.triggerSetAccordionHeights = function () {\r\n var _this = this;\r\n clearTimeout(resizeTimer);\r\n resizeTimer = setTimeout(function () {\r\n _this.setAccordionHeights();\r\n }, 100);\r\n };\r\n Accordions.prototype.closeOpenAccordions = function (exception) {\r\n var _this = this;\r\n var openAccordions = convertToArray(document.querySelectorAll('.libaccordion-open-js'));\r\n openAccordions.forEach(function (openAccordion) {\r\n if (openAccordion !== exception) {\r\n _this.closeAccordion(openAccordion);\r\n }\r\n });\r\n };\r\n return Accordions;\r\n}());\r\nexports.Accordions = Accordions;\r\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar DateListingBlock = /** @class */ (function () {\r\n function DateListingBlock() {\r\n if (document.querySelector('.date-listing-load-more')) {\r\n var loadMoreNodeList = document.querySelectorAll('.date-listing-load-more');\r\n var loadMoreArray = Array.prototype.slice.call(loadMoreNodeList);\r\n loadMoreArray.forEach(function (loadMoreItem) {\r\n loadMoreItem.addEventListener('click', function () {\r\n // Show all items\r\n loadMoreItem.parentElement.querySelector('.date-listing-container-hidden').classList.add('date-listing-container-hidden-open');\r\n // Hide view all button\r\n loadMoreItem.classList.add('visually-hidden');\r\n // Show view less button\r\n loadMoreItem.parentElement.querySelector('.date-listing-load-less').classList.remove('visually-hidden');\r\n });\r\n });\r\n var loadLessNodeList = document.querySelectorAll('.date-listing-load-less');\r\n var loadLessArray = Array.prototype.slice.call(loadLessNodeList);\r\n loadLessArray.forEach(function (loadLessItem) {\r\n loadLessItem.addEventListener('click', function () {\r\n // Show initial items\r\n loadLessItem.parentElement.querySelector('.date-listing-container-hidden').classList.remove('date-listing-container-hidden-open');\r\n // Hide view less button\r\n loadLessItem.classList.add('visually-hidden');\r\n // Show view more button\r\n loadLessItem.parentElement.querySelector('.date-listing-load-more').classList.remove('visually-hidden');\r\n });\r\n });\r\n }\r\n }\r\n return DateListingBlock;\r\n}());\r\nexports.DateListingBlock = DateListingBlock;\r\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n__webpack_require__(27);\r\nvar PublicityImageBlock = /** @class */ (function () {\r\n function PublicityImageBlock() {\r\n // ------------------------------------------------------------------------ //\r\n // ------- Publicity block's 'view more' & 'view less' button logic ------- //\r\n // ------------------------------------------------------------------------ //\r\n if (document.querySelector('.publicity-view-more-js')) {\r\n var viewMoreNodeList = document.querySelectorAll('.publicity-view-more-js');\r\n var viewMoreArray = Array.prototype.slice.call(viewMoreNodeList);\r\n viewMoreArray.forEach(function (viewMoreBtn) {\r\n viewMoreBtn.addEventListener('click', function () {\r\n var expandableSection = viewMoreBtn.closest('.block-body').querySelector('.publicity-items-remaining');\r\n if (viewMoreBtn.dataset.isExpanded == 'false') {\r\n // Show all items\r\n expandableSection.classList.remove('hidden');\r\n // Swap \"View More\" button text with \"View Less\"\r\n viewMoreBtn.innerHTML = 'View Less Images';\r\n viewMoreBtn.setAttribute('data-is-expanded', 'true');\r\n }\r\n else {\r\n // Hide extra items\r\n expandableSection.classList.add('hidden');\r\n // Swap \"View Less\" button text with \"View More\"\r\n viewMoreBtn.innerHTML = 'View More Images';\r\n viewMoreBtn.setAttribute('data-is-expanded', 'false');\r\n }\r\n });\r\n });\r\n }\r\n // ------------------------------------------------------------ //\r\n // ------- Publicity block's carousel counter placement ------- //\r\n // ------------------------------------------------------------ //\r\n if (document.querySelector('.publicity-mobile-view-js')) {\r\n var publicityCarouselNodeList = document.querySelectorAll(\".publicity-mobile-view-js\");\r\n var publicityCarouselArray = Array.prototype.slice.call(publicityCarouselNodeList);\r\n publicityCarouselArray.forEach(function (carousel) {\r\n var publicityCarouselSlidesNodeList = carousel.querySelectorAll('.swiper-slide');\r\n var publicityCarouselSlidesArray = Array.prototype.slice.call(publicityCarouselSlidesNodeList);\r\n publicityCarouselSlidesArray.forEach(function (slide) {\r\n var slideCounter = slide.dataset.swiperCounter;\r\n var slideCounterCaption = slide.querySelector('.publicity-item-counter-js');\r\n slideCounterCaption.innerHTML = slideCounter;\r\n });\r\n });\r\n }\r\n }\r\n return PublicityImageBlock;\r\n}());\r\nexports.PublicityImageBlock = PublicityImageBlock;\r\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// element-closest | CC0-1.0 | github.com/jonathantneal/closest\n\n(function (ElementProto) {\n\tif (typeof ElementProto.matches !== 'function') {\n\t\tElementProto.matches = ElementProto.msMatchesSelector || ElementProto.mozMatchesSelector || ElementProto.webkitMatchesSelector || function matches(selector) {\n\t\t\tvar element = this;\n\t\t\tvar elements = (element.document || element.ownerDocument).querySelectorAll(selector);\n\t\t\tvar index = 0;\n\n\t\t\twhile (elements[index] && elements[index] !== element) {\n\t\t\t\t++index;\n\t\t\t}\n\n\t\t\treturn Boolean(elements[index]);\n\t\t};\n\t}\n\n\tif (typeof ElementProto.closest !== 'function') {\n\t\tElementProto.closest = function closest(selector) {\n\t\t\tvar element = this;\n\n\t\t\twhile (element && element.nodeType === 1) {\n\t\t\t\tif (element.matches(selector)) {\n\t\t\t\t\treturn element;\n\t\t\t\t}\n\n\t\t\t\telement = element.parentNode;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t}\n})(window.Element.prototype);\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar nodelist_to_array_1 = __webpack_require__(2);\r\nfunction setUpSubsHiddenToggle(containerClassName) {\r\n var subsContainers = document.getElementsByClassName(containerClassName);\r\n if (subsContainers.length > 0) {\r\n var subsContainer_1 = subsContainers[0];\r\n var triggers = nodelist_to_array_1.nodeListToArray(subsContainer_1.getElementsByClassName(\"toggle-hidden-js\"));\r\n triggers.forEach(function (el) {\r\n el.addEventListener(\"click\", function () {\r\n var fields = nodelist_to_array_1.nodeListToArray(subsContainer_1.getElementsByClassName(\"toggle-hidden-element-js\"));\r\n fields.forEach(function (field) {\r\n if (field.classList.contains(\"hidden\")) {\r\n field.classList.remove(\"hidden\");\r\n }\r\n else {\r\n field.classList.add(\"hidden\");\r\n }\r\n });\r\n });\r\n });\r\n }\r\n}\r\nexports.default = setUpSubsHiddenToggle;\r\n\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar gumshoe = __webpack_require__(30);\r\nvar ScrollspyNavbar = /** @class */ (function () {\r\n function ScrollspyNavbar() {\r\n if (document.querySelector(\".scrollspy-navbar\")) {\r\n var navbarContainer_1 = document.querySelectorAll('.scrollspy-navbar')[0];\r\n var jumpToTop = navbarContainer_1.querySelectorAll('.top-trigger')[0];\r\n jumpToTop.addEventListener(\"click\", function (e) {\r\n e.preventDefault();\r\n if (history.pushState) {\r\n history.pushState(null, null, '#top');\r\n }\r\n else {\r\n location.hash = '#top';\r\n }\r\n window.scrollTo(0, 0);\r\n });\r\n // Find all sections to add to scrollspy nav list\r\n var jumpSections = Array.prototype.slice.call(document.querySelectorAll('[data-scrollspy=\"true\"]'));\r\n var jumpList_1 = '';\r\n // Create list item by looping through each section\r\n jumpSections.forEach(function (section) {\r\n var sectionTitle = section.getAttribute('data-scrollspy-title');\r\n var sectionTarget = section.id;\r\n jumpList_1 += \"
  • \" + sectionTitle + \"
  • \";\r\n });\r\n // Add string of list items to scrollspy nav\r\n var jumpListContainer = navbarContainer_1.querySelectorAll('nav ul')[0];\r\n jumpListContainer.innerHTML = jumpList_1;\r\n // Handler when the DOM is fully loaded\r\n document.addEventListener(\"DOMContentLoaded\", function () {\r\n gumshoe.init({\r\n selector: '[data-gumshoe] a',\r\n selectorHeader: '#siteHeader',\r\n container: window,\r\n offset: 250,\r\n activeClass: 'active',\r\n scrollDelay: false // Wait until scrolling has stopped before updating the navigation\r\n });\r\n });\r\n var footer_1 = document.querySelector(\".site-container > .footer\");\r\n var siteContainer = document.querySelector('.site-container');\r\n var viewHeight_1 = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\r\n var lastScrollTop_1 = 0;\r\n // Handle sticky offset when hitting footer\r\n window.addEventListener(\"scroll\", function () {\r\n return window.requestAnimationFrame(function () {\r\n var currentPos = window.pageYOffset || document.documentElement.scrollTop; // Credits: \"https://github.com/qeremy/so/blob/master/so.dom.js#L426\"\r\n // get offset of footer\r\n var footerOffset = footer_1.getBoundingClientRect().top + window.scrollY;\r\n // handle scrolspy navbar sticky\r\n if (currentPos > (footerOffset - viewHeight_1)) {\r\n // downscroll code\r\n navbarContainer_1.classList.add('sticky-bottom');\r\n }\r\n else {\r\n navbarContainer_1.classList.remove('sticky-bottom');\r\n }\r\n // set current position to lastScrollTop\r\n lastScrollTop_1 = currentPos;\r\n });\r\n });\r\n }\r\n ;\r\n }\r\n return ScrollspyNavbar;\r\n}());\r\nexports.ScrollspyNavbar = ScrollspyNavbar;\r\n\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*!\r\n * gumshoe v3.5.0: A simple, framework-agnostic scrollspy script.\r\n * (c) 2017 Chris Ferdinandi\r\n * MIT License\r\n * http://github.com/cferdinandi/gumshoe\r\n */\n\n(function (root, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory(root)),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object') {\n module.exports = factory(root);\n } else {\n root.gumshoe = factory(root);\n }\n})(typeof global !== 'undefined' ? global : undefined.window || undefined.global, function (root) {\n\n 'use strict';\n\n //\n // Variables\n //\n\n var gumshoe = {}; // Object for public APIs\n var supports = 'querySelector' in document && 'addEventListener' in root && 'classList' in document.createElement('_'); // Feature test\n var navs = []; // Array for nav elements\n var settings, eventTimeout, docHeight, header, headerHeight, currentNav, scrollEventDelay;\n\n // Default settings\n var defaults = {\n selector: '[data-gumshoe] a',\n selectorHeader: '[data-gumshoe-header]',\n container: root,\n offset: 0,\n activeClass: 'active',\n scrollDelay: false,\n callback: function callback() {}\n };\n\n //\n // Methods\n //\n\n /**\r\n * A simple forEach() implementation for Arrays, Objects and NodeLists.\r\n * @private\r\n * @author Todd Motto\r\n * @link https://github.com/toddmotto/foreach\r\n * @param {Array|Object|NodeList} collection Collection of items to iterate\r\n * @param {Function} callback Callback function for each iteration\r\n * @param {Array|Object|NodeList} scope Object/NodeList/Array that forEach is iterating over (aka `this`)\r\n */\n var forEach = function forEach(collection, callback, scope) {\n if (Object.prototype.toString.call(collection) === '[object Object]') {\n for (var prop in collection) {\n if (Object.prototype.hasOwnProperty.call(collection, prop)) {\n callback.call(scope, collection[prop], prop, collection);\n }\n }\n } else {\n for (var i = 0, len = collection.length; i < len; i++) {\n callback.call(scope, collection[i], i, collection);\n }\n }\n };\n\n /**\r\n * Merge two or more objects. Returns a new object.\r\n * @private\r\n * @param {Boolean} deep If true, do a deep (or recursive) merge [optional]\r\n * @param {Object} objects The objects to merge together\r\n * @returns {Object} Merged values of defaults and options\r\n */\n var extend = function extend() {\n\n // Variables\n var extended = {};\n var deep = false;\n var i = 0;\n var length = arguments.length;\n\n // Check if a deep merge\n if (Object.prototype.toString.call(arguments[0]) === '[object Boolean]') {\n deep = arguments[0];\n i++;\n }\n\n // Merge the object into the extended object\n var merge = function merge(obj) {\n for (var prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n // If deep merge and property is an object, merge properties\n if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') {\n extended[prop] = extend(true, extended[prop], obj[prop]);\n } else {\n extended[prop] = obj[prop];\n }\n }\n }\n };\n\n // Loop through each object and conduct a merge\n for (; i < length; i++) {\n var obj = arguments[i];\n merge(obj);\n }\n\n return extended;\n };\n\n /**\r\n * Get the height of an element.\r\n * @private\r\n * @param {Node} elem The element to get the height of\r\n * @return {Number} The element's height in pixels\r\n */\n var getHeight = function getHeight(elem) {\n return Math.max(elem.scrollHeight, elem.offsetHeight, elem.clientHeight);\n };\n\n /**\r\n * Get the document element's height\r\n * @private\r\n * @returns {Number}\r\n */\n var getDocumentHeight = function getDocumentHeight() {\n return Math.max(document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight, document.body.clientHeight, document.documentElement.clientHeight);\n };\n\n /**\r\n * Get an element's distance from the top of the Document.\r\n * @private\r\n * @param {Node} elem The element\r\n * @return {Number} Distance from the top in pixels\r\n */\n var getOffsetTop = function getOffsetTop(elem) {\n var location = 0;\n if (elem.offsetParent) {\n do {\n location += elem.offsetTop;\n elem = elem.offsetParent;\n } while (elem);\n } else {\n location = elem.offsetTop;\n }\n location = location - headerHeight - settings.offset;\n return location >= 0 ? location : 0;\n };\n\n /**\r\n * Determine if an element is in the viewport\r\n * @param {Node} elem The element\r\n * @return {Boolean} Returns true if element is in the viewport\r\n */\n var isInViewport = function isInViewport(elem) {\n var distance = elem.getBoundingClientRect();\n return distance.top >= 0 && distance.left >= 0 && distance.bottom <= (root.innerHeight || document.documentElement.clientHeight) && distance.right <= (root.innerWidth || document.documentElement.clientWidth);\n };\n\n /**\r\n * Arrange nagivation elements from furthest from the top to closest\r\n * @private\r\n */\n var sortNavs = function sortNavs() {\n navs.sort(function (a, b) {\n if (a.distance > b.distance) {\n return -1;\n }\n if (a.distance < b.distance) {\n return 1;\n }\n return 0;\n });\n };\n\n /**\r\n * Calculate the distance of elements from the top of the document\r\n * @public\r\n */\n gumshoe.setDistances = function () {\n\n // Calculate distances\n docHeight = getDocumentHeight(); // The document\n headerHeight = header ? getHeight(header) + getOffsetTop(header) : 0; // The fixed header\n forEach(navs, function (nav) {\n nav.distance = getOffsetTop(nav.target); // Each navigation target\n });\n\n // When done, organization navigation elements\n sortNavs();\n };\n\n /**\r\n * Get all navigation elements and store them in an array\r\n * @private\r\n */\n var getNavs = function getNavs() {\n\n // Get all navigation links\n var navLinks = document.querySelectorAll(settings.selector);\n\n // For each link, create an object of attributes and push to an array\n forEach(navLinks, function (nav) {\n if (!nav.hash) return;\n var target = document.querySelector(nav.hash);\n if (!target) return;\n navs.push({\n nav: nav,\n target: target,\n parent: nav.parentNode.tagName.toLowerCase() === 'li' ? nav.parentNode : null,\n distance: 0\n });\n });\n };\n\n /**\r\n * Remove the activation class from the currently active navigation element\r\n * @private\r\n */\n var deactivateCurrentNav = function deactivateCurrentNav() {\n if (currentNav) {\n currentNav.nav.classList.remove(settings.activeClass);\n if (currentNav.parent) {\n currentNav.parent.classList.remove(settings.activeClass);\n }\n }\n };\n\n /**\r\n * Add the activation class to the currently active navigation element\r\n * @private\r\n * @param {Node} nav The currently active nav\r\n */\n var activateNav = function activateNav(nav) {\n\n // If a current Nav is set, deactivate it\n deactivateCurrentNav();\n\n // Activate the current target's navigation element\n nav.nav.classList.add(settings.activeClass);\n if (nav.parent) {\n nav.parent.classList.add(settings.activeClass);\n }\n\n settings.callback(nav); // Callback after methods are run\n\n // Set new currentNav\n currentNav = {\n nav: nav.nav,\n parent: nav.parent\n };\n };\n\n /**\r\n * Determine which navigation element is currently active and run activation method\r\n * @public\r\n * @returns {Object} The current nav data.\r\n */\n gumshoe.getCurrentNav = function () {\n\n // Get current position from top of the document\n var position = root.pageYOffset;\n\n // If at the bottom of the page and last section is in the viewport, activate the last nav\n if (root.innerHeight + position >= docHeight && isInViewport(navs[0].target)) {\n activateNav(navs[0]);\n return navs[0];\n }\n\n // Otherwise, loop through each nav until you find the active one\n for (var i = 0, len = navs.length; i < len; i++) {\n var nav = navs[i];\n if (nav.distance <= position) {\n activateNav(nav);\n return nav;\n }\n }\n\n // If no active nav is found, deactivate the current nav\n deactivateCurrentNav();\n settings.callback();\n };\n\n /**\r\n * If nav element has active class on load, set it as currently active navigation\r\n * @private\r\n */\n var setInitCurrentNav = function setInitCurrentNav() {\n forEach(navs, function (nav) {\n if (nav.nav.classList.contains(settings.activeClass)) {\n currentNav = {\n nav: nav.nav,\n parent: nav.parent\n };\n }\n });\n };\n\n /**\r\n * Destroy the current initialization.\r\n * @public\r\n */\n gumshoe.destroy = function () {\n\n // If plugin isn't already initialized, stop\n if (!settings) return;\n\n // Remove event listeners\n settings.container.removeEventListener('resize', eventThrottler, false);\n settings.container.removeEventListener('scroll', eventThrottler, false);\n\n // Reset variables\n navs = [];\n settings = null;\n eventTimeout = null;\n docHeight = null;\n header = null;\n headerHeight = null;\n currentNav = null;\n scrollEventDelay = null;\n };\n\n /**\r\n * Run functions after scrolling stops\r\n * @param {[type]} event [description]\r\n * @return {[type]} [description]\r\n */\n var scrollStop = function scrollStop(event) {\n\n // Clear our timeout throughout the scroll\n window.clearTimeout(eventTimeout);\n\n // recalculate distances and then get currently active nav\n eventTimeout = setTimeout(function () {\n gumshoe.setDistances();\n gumshoe.getCurrentNav();\n }, 66);\n };\n\n /**\r\n * On window scroll and resize, only run events at a rate of 15fps for better performance\r\n * @private\r\n * @param {Function} eventTimeout Timeout function\r\n * @param {Object} settings\r\n */\n var eventThrottler = function eventThrottler(event) {\n if (!eventTimeout) {\n eventTimeout = setTimeout(function () {\n\n eventTimeout = null; // Reset timeout\n\n // If scroll event, get currently active nav\n if (event.type === 'scroll') {\n gumshoe.getCurrentNav();\n }\n\n // If resize event, recalculate distances and then get currently active nav\n if (event.type === 'resize') {\n gumshoe.setDistances();\n gumshoe.getCurrentNav();\n }\n }, 66);\n }\n };\n\n /**\r\n * Initialize Plugin\r\n * @public\r\n * @param {Object} options User settings\r\n */\n gumshoe.init = function (options) {\n\n // feature test\n if (!supports) return;\n\n // Destroy any existing initializations\n gumshoe.destroy();\n\n // Set variables\n settings = extend(defaults, options || {}); // Merge user options with defaults\n header = document.querySelector(settings.selectorHeader); // Get fixed header\n getNavs(); // Get navigation elements\n\n // If no navigation elements exist, stop running gumshoe\n if (navs.length === 0) return;\n\n // Run init methods\n setInitCurrentNav();\n gumshoe.setDistances();\n gumshoe.getCurrentNav();\n\n // Listen for events\n settings.container.addEventListener('resize', eventThrottler, false);\n if (settings.scrollDelay) {\n settings.container.addEventListener('scroll', scrollStop, false);\n } else {\n settings.container.addEventListener('scroll', eventThrottler, false);\n }\n };\n\n //\n // Public APIs\n //\n\n return gumshoe;\n});\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*! smooth-scroll v12.1.5 | (c) 2017 Chris Ferdinandi | MIT License | http://github.com/cferdinandi/smooth-scroll */\n!function (e, t) {\n true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {\n return t(e);\n }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : \"object\" == (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) ? module.exports = t(e) : e.SmoothScroll = t(e);\n}(\"undefined\" != typeof global ? global : \"undefined\" != typeof window ? window : undefined, function (e) {\n \"use strict\";\n var t = \"querySelector\" in document && \"addEventListener\" in e && \"requestAnimationFrame\" in e && \"closest\" in e.Element.prototype,\n n = { ignore: \"[data-scroll-ignore]\", header: null, speed: 500, offset: 0, easing: \"easeInOutCubic\", customEasing: null, before: function before() {}, after: function after() {} },\n o = function o() {\n for (var e = {}, t = 0, n = arguments.length; t < n; t++) {\n var o = arguments[t];!function (t) {\n for (var n in t) {\n t.hasOwnProperty(n) && (e[n] = t[n]);\n }\n }(o);\n }return e;\n },\n a = function a(t) {\n return parseInt(e.getComputedStyle(t).height, 10);\n },\n r = function r(e) {\n \"#\" === e.charAt(0) && (e = e.substr(1));for (var t, n = String(e), o = n.length, a = -1, r = \"\", i = n.charCodeAt(0); ++a < o;) {\n if (0 === (t = n.charCodeAt(a))) throw new InvalidCharacterError(\"Invalid character: the input contains U+0000.\");t >= 1 && t <= 31 || 127 == t || 0 === a && t >= 48 && t <= 57 || 1 === a && t >= 48 && t <= 57 && 45 === i ? r += \"\\\\\" + t.toString(16) + \" \" : r += t >= 128 || 45 === t || 95 === t || t >= 48 && t <= 57 || t >= 65 && t <= 90 || t >= 97 && t <= 122 ? n.charAt(a) : \"\\\\\" + n.charAt(a);\n }return \"#\" + r;\n },\n i = function i(e, t) {\n var n;return \"easeInQuad\" === e.easing && (n = t * t), \"easeOutQuad\" === e.easing && (n = t * (2 - t)), \"easeInOutQuad\" === e.easing && (n = t < .5 ? 2 * t * t : (4 - 2 * t) * t - 1), \"easeInCubic\" === e.easing && (n = t * t * t), \"easeOutCubic\" === e.easing && (n = --t * t * t + 1), \"easeInOutCubic\" === e.easing && (n = t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1), \"easeInQuart\" === e.easing && (n = t * t * t * t), \"easeOutQuart\" === e.easing && (n = 1 - --t * t * t * t), \"easeInOutQuart\" === e.easing && (n = t < .5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t), \"easeInQuint\" === e.easing && (n = t * t * t * t * t), \"easeOutQuint\" === e.easing && (n = 1 + --t * t * t * t * t), \"easeInOutQuint\" === e.easing && (n = t < .5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t), e.customEasing && (n = e.customEasing(t)), n || t;\n },\n u = function u() {\n return Math.max(document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight, document.body.clientHeight, document.documentElement.clientHeight);\n },\n c = function c(e, t, n) {\n var o = 0;if (e.offsetParent) do {\n o += e.offsetTop, e = e.offsetParent;\n } while (e);return o = Math.max(o - t - n, 0);\n },\n s = function s(e) {\n return e ? a(e) + e.offsetTop : 0;\n },\n l = function l(t, n, o) {\n o || (t.focus(), document.activeElement.id !== t.id && (t.setAttribute(\"tabindex\", \"-1\"), t.focus(), t.style.outline = \"none\"), e.scrollTo(0, n));\n },\n f = function f(t) {\n return !!(\"matchMedia\" in e && e.matchMedia(\"(prefers-reduced-motion)\").matches);\n };return function (a, d) {\n var m,\n h,\n g,\n p,\n v,\n b,\n y,\n S = {};S.cancelScroll = function () {\n cancelAnimationFrame(y);\n }, S.animateScroll = function (t, a, r) {\n var f = o(m || n, r || {}),\n d = \"[object Number]\" === Object.prototype.toString.call(t),\n h = d || !t.tagName ? null : t;if (d || h) {\n var g = e.pageYOffset;f.header && !p && (p = document.querySelector(f.header)), v || (v = s(p));var b,\n y,\n E,\n I = d ? t : c(h, v, parseInt(\"function\" == typeof f.offset ? f.offset() : f.offset, 10)),\n O = I - g,\n A = u(),\n C = 0,\n w = function w(n, o) {\n var r = e.pageYOffset;if (n == o || r == o || (g < o && e.innerHeight + r) >= A) return S.cancelScroll(), l(t, o, d), f.after(t, a), b = null, !0;\n },\n Q = function Q(t) {\n b || (b = t), C += t - b, y = C / parseInt(f.speed, 10), y = y > 1 ? 1 : y, E = g + O * i(f, y), e.scrollTo(0, Math.floor(E)), w(E, I) || (e.requestAnimationFrame(Q), b = t);\n };0 === e.pageYOffset && e.scrollTo(0, 0), f.before(t, a), S.cancelScroll(), e.requestAnimationFrame(Q);\n }\n };var E = function E(e) {\n h && (h.id = h.getAttribute(\"data-scroll-id\"), S.animateScroll(h, g), h = null, g = null);\n },\n I = function I(t) {\n if (!f() && 0 === t.button && !t.metaKey && !t.ctrlKey && (g = t.target.closest(a)) && \"a\" === g.tagName.toLowerCase() && !t.target.closest(m.ignore) && g.hostname === e.location.hostname && g.pathname === e.location.pathname && /#/.test(g.href)) {\n var n;try {\n n = r(decodeURIComponent(g.hash));\n } catch (e) {\n n = r(g.hash);\n }if (\"#\" === n) {\n t.preventDefault(), h = document.body;var o = h.id ? h.id : \"smooth-scroll-top\";return h.setAttribute(\"data-scroll-id\", o), h.id = \"\", void (e.location.hash.substring(1) === o ? E() : e.location.hash = o);\n }h = document.querySelector(n), h && (h.setAttribute(\"data-scroll-id\", h.id), h.id = \"\", g.hash === e.location.hash && (t.preventDefault(), E()));\n }\n },\n O = function O(e) {\n b || (b = setTimeout(function () {\n b = null, v = s(p);\n }, 66));\n };return S.destroy = function () {\n m && (document.removeEventListener(\"click\", I, !1), e.removeEventListener(\"resize\", O, !1), S.cancelScroll(), m = null, h = null, g = null, p = null, v = null, b = null, y = null);\n }, S.init = function (a) {\n t && (S.destroy(), m = o(n, a || {}), p = m.header ? document.querySelector(m.header) : null, v = s(p), document.addEventListener(\"click\", I, !1), e.addEventListener(\"hashchange\", E, !1), p && e.addEventListener(\"resize\", O, !1));\n }, S.init(d), S;\n };\n});\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * Multimedia Layout\r\n * @param {string} multimediaSelector - Selector for target elements\r\n */\r\nvar Masonry = __webpack_require__(33);\r\nvar Swiper = __webpack_require__(7).default;\r\nvar lock_body_1 = __webpack_require__(3);\r\nvar A11yDialog = __webpack_require__(5);\r\nvar MultimediaLayout = /** @class */ (function () {\r\n function MultimediaLayout(multimediaSelector) {\r\n this.multimediaSelector = multimediaSelector;\r\n var gridCutoff = 9;\r\n /**\r\n * Masonry View More Handler\r\n * @param {bool} isShow - Boolean for showing or hiding extra elements\r\n * @param {string} container - Container element for media items\r\n */\r\n function viewMoreHandler(isShow, container) {\r\n var masonryItems = container.querySelectorAll('.item-wrapper');\r\n var masonryInstance = Masonry.data(container);\r\n if (masonryItems.length > gridCutoff) {\r\n for (var i = 0; i < masonryItems.length; i++) {\r\n if (isShow) {\r\n masonryItems[i].classList.remove('visually-hidden');\r\n container.classList.add('show-all');\r\n }\r\n else if (!isShow && i > gridCutoff - 1) {\r\n masonryItems[i].classList.add('visually-hidden');\r\n container.classList.remove('show-all');\r\n }\r\n }\r\n // resets the layout for the masonry grid\r\n masonryInstance.layout();\r\n }\r\n }\r\n function initMasonryGrid(container) {\r\n if (!container.classList.contains('masonry-wrapper')) {\r\n container.classList.add('masonry-wrapper');\r\n var masonryInstance = new Masonry(container, {\r\n // options\r\n itemSelector: '.item-wrapper',\r\n percentPosition: true\r\n });\r\n // set up initial view more handler\r\n viewMoreHandler(false, container);\r\n }\r\n }\r\n function initCarousel(container) {\r\n if (!container.classList.contains('swiper-wrapper')) {\r\n container.classList.add('swiper-wrapper');\r\n var carouselInstance = new Swiper(container.parentElement, {\r\n // Swiper parameters\r\n init: false,\r\n slidesPerView: 1,\r\n spaceBetween: 150,\r\n slidesPerGroup: 1,\r\n speed: 750,\r\n watchOverflow: true,\r\n autoHeight: true,\r\n pagination: {\r\n el: '.swiper-pagination',\r\n clickable: false,\r\n type: 'custom',\r\n renderCustom: function (swiper, current, total) {\r\n return current + ' of ' + total;\r\n }\r\n },\r\n // Navigation arrows\r\n navigation: {\r\n nextEl: '.swiper-button-next',\r\n prevEl: '.swiper-button-prev'\r\n }\r\n });\r\n var slideItems = container.querySelectorAll('.item-wrapper');\r\n for (var i = 0; i < slideItems.length; i++) {\r\n slideItems[i].classList.add('swiper-slide');\r\n slideItems[i].classList.remove('visually-hidden');\r\n // After slide classes are applied init carousel display\r\n if (i === slideItems.length - 1) {\r\n carouselInstance.init();\r\n }\r\n }\r\n }\r\n }\r\n function destroyMasonry(container) {\r\n if (container.classList.contains('masonry-wrapper')) {\r\n var masonryInstance = Masonry.data(container);\r\n masonryInstance.destroy();\r\n container.classList.remove('masonry-wrapper');\r\n }\r\n }\r\n function destroyCarousel(container) {\r\n if (container.classList.contains('swiper-wrapper')) {\r\n var carouselInstance = container.parentElement.swiper;\r\n carouselInstance.destroy();\r\n container.classList.remove('swiper-wrapper');\r\n var slideItems = container.querySelectorAll('.item-wrapper');\r\n for (var i = 0; i < slideItems.length; i++) {\r\n slideItems[i].classList.remove('swiper-slide');\r\n }\r\n }\r\n }\r\n function initModal(container) {\r\n container = container.parentElement.parentElement;\r\n var mediaModal = container.querySelector('.modal-wrapper');\r\n var mediaModalInstance = new A11yDialog(mediaModal);\r\n var mediaModalContent = mediaModal.querySelector('.swiper-wrapper');\r\n var modalTriggers = container.querySelectorAll('.item-wrapper');\r\n var modalCarouselInstance;\r\n if (!mediaModalContent.classList.contains('modal-content-loaded')) {\r\n mediaModalContent.innerHTML = container.querySelector('.block-body').innerHTML;\r\n mediaModalContent.classList.add('modal-content-loaded');\r\n }\r\n function initModalCarousel() {\r\n var modalSlideItems = mediaModalContent.querySelectorAll('.item-wrapper');\r\n for (var i = 0; i < modalSlideItems.length; i++) {\r\n modalSlideItems[i].classList.remove('visually-hidden');\r\n modalSlideItems[i].classList.add('swiper-slide');\r\n }\r\n modalCarouselInstance = new Swiper(mediaModalContent.parentElement, {\r\n // Swiper parameters\r\n init: true,\r\n slidesPerView: 1,\r\n spaceBetween: 150,\r\n slidesPerGroup: 1,\r\n speed: 750,\r\n watchOverflow: true,\r\n autoHeight: true,\r\n pagination: {\r\n el: '.multimedia-block .swiper-pagination',\r\n clickable: false,\r\n type: 'custom',\r\n renderCustom: function (swiper, current, total) {\r\n return current + ' of ' + total;\r\n }\r\n },\r\n // Navigation arrows\r\n navigation: {\r\n nextEl: '.multimedia-block .swiper-button-next',\r\n prevEl: '.multimedia-block .swiper-button-prev'\r\n }\r\n });\r\n }\r\n mediaModalInstance.on('show', function (dialog, e) {\r\n lock_body_1.lockBody();\r\n });\r\n mediaModalInstance.on('hide', function (dialog, e) {\r\n lock_body_1.unlockBody();\r\n modalCarouselInstance.destroy();\r\n });\r\n var _loop_1 = function () {\r\n var index = i;\r\n modalTriggers[i].addEventListener('click', function (e) {\r\n if (window.matchMedia('(min-width: 48rem)').matches) {\r\n mediaModalInstance.show();\r\n initModalCarousel();\r\n modalCarouselInstance.slideTo(index, 0);\r\n }\r\n });\r\n };\r\n for (var i = 0; i < modalTriggers.length; i++) {\r\n _loop_1();\r\n }\r\n }\r\n // Handler for different display modes based on screen size\r\n function initHandler(container) {\r\n initModal(container);\r\n if (window.matchMedia('(max-width: 48rem)').matches) {\r\n destroyMasonry(container);\r\n initCarousel(container);\r\n }\r\n else {\r\n destroyCarousel(container);\r\n initMasonryGrid(container);\r\n }\r\n }\r\n // Initialize Multimedia Block\r\n if (document.querySelector(multimediaSelector)) {\r\n var multimediaContainers_1 = document.querySelectorAll(multimediaSelector);\r\n window.addEventListener('load', function () {\r\n var _loop_2 = function () {\r\n var multimediaContainer = multimediaContainers_1[i];\r\n initHandler(multimediaContainer);\r\n window.addEventListener('resize', function () {\r\n return window.requestAnimationFrame(function () {\r\n initHandler(multimediaContainer);\r\n });\r\n });\r\n var viewMoreTrigger = multimediaContainer.parentElement.querySelector('.multimedia-block-view-more');\r\n var masonryItems = multimediaContainer.querySelectorAll('.item-wrapper');\r\n if (masonryItems.length > gridCutoff) {\r\n viewMoreTrigger.addEventListener('click', function (e) {\r\n if (multimediaContainer.classList.contains('show-all')) {\r\n viewMoreHandler(false, multimediaContainer);\r\n e.target.innerText = 'View More';\r\n }\r\n else {\r\n viewMoreHandler(true, multimediaContainer);\r\n e.target.innerText = 'View Less';\r\n }\r\n });\r\n }\r\n else {\r\n viewMoreTrigger.parentElement.classList.add('hide-view-more');\r\n }\r\n };\r\n for (var i = 0; i < multimediaContainers_1.length; i++) {\r\n _loop_2();\r\n }\r\n });\r\n }\r\n }\r\n return MultimediaLayout;\r\n}());\r\nexports.MultimediaLayout = MultimediaLayout;\r\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*!\n * Masonry v4.2.2\n * Cascading grid layout library\n * https://masonry.desandro.com\n * MIT License\n * by David DeSandro\n */\n\n(function (window, factory) {\n // universal module definition\n /* jshint strict: false */ /*globals define, module, require */\n if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(34), __webpack_require__(4)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(require('outlayer'), require('get-size'));\n } else {\n // browser global\n window.Masonry = factory(window.Outlayer, window.getSize);\n }\n})(window, function factory(Outlayer, getSize) {\n\n 'use strict';\n\n // -------------------------- masonryDefinition -------------------------- //\n\n // create an Outlayer layout class\n\n var Masonry = Outlayer.create('masonry');\n // isFitWidth -> fitWidth\n Masonry.compatOptions.fitWidth = 'isFitWidth';\n\n var proto = Masonry.prototype;\n\n proto._resetLayout = function () {\n this.getSize();\n this._getMeasurement('columnWidth', 'outerWidth');\n this._getMeasurement('gutter', 'outerWidth');\n this.measureColumns();\n\n // reset column Y\n this.colYs = [];\n for (var i = 0; i < this.cols; i++) {\n this.colYs.push(0);\n }\n\n this.maxY = 0;\n this.horizontalColIndex = 0;\n };\n\n proto.measureColumns = function () {\n this.getContainerWidth();\n // if columnWidth is 0, default to outerWidth of first item\n if (!this.columnWidth) {\n var firstItem = this.items[0];\n var firstItemElem = firstItem && firstItem.element;\n // columnWidth fall back to item of first element\n this.columnWidth = firstItemElem && getSize(firstItemElem).outerWidth ||\n // if first elem has no width, default to size of container\n this.containerWidth;\n }\n\n var columnWidth = this.columnWidth += this.gutter;\n\n // calculate columns\n var containerWidth = this.containerWidth + this.gutter;\n var cols = containerWidth / columnWidth;\n // fix rounding errors, typically with gutters\n var excess = columnWidth - containerWidth % columnWidth;\n // if overshoot is less than a pixel, round up, otherwise floor it\n var mathMethod = excess && excess < 1 ? 'round' : 'floor';\n cols = Math[mathMethod](cols);\n this.cols = Math.max(cols, 1);\n };\n\n proto.getContainerWidth = function () {\n // container is parent if fit width\n var isFitWidth = this._getOption('fitWidth');\n var container = isFitWidth ? this.element.parentNode : this.element;\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var size = getSize(container);\n this.containerWidth = size && size.innerWidth;\n };\n\n proto._getItemLayoutPosition = function (item) {\n item.getSize();\n // how many columns does this brick span\n var remainder = item.size.outerWidth % this.columnWidth;\n var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil';\n // round if off by 1 pixel, otherwise use ceil\n var colSpan = Math[mathMethod](item.size.outerWidth / this.columnWidth);\n colSpan = Math.min(colSpan, this.cols);\n // use horizontal or top column position\n var colPosMethod = this.options.horizontalOrder ? '_getHorizontalColPosition' : '_getTopColPosition';\n var colPosition = this[colPosMethod](colSpan, item);\n // position the brick\n var position = {\n x: this.columnWidth * colPosition.col,\n y: colPosition.y\n };\n // apply setHeight to necessary columns\n var setHeight = colPosition.y + item.size.outerHeight;\n var setMax = colSpan + colPosition.col;\n for (var i = colPosition.col; i < setMax; i++) {\n this.colYs[i] = setHeight;\n }\n\n return position;\n };\n\n proto._getTopColPosition = function (colSpan) {\n var colGroup = this._getTopColGroup(colSpan);\n // get the minimum Y value from the columns\n var minimumY = Math.min.apply(Math, colGroup);\n\n return {\n col: colGroup.indexOf(minimumY),\n y: minimumY\n };\n };\n\n /**\n * @param {Number} colSpan - number of columns the element spans\n * @returns {Array} colGroup\n */\n proto._getTopColGroup = function (colSpan) {\n if (colSpan < 2) {\n // if brick spans only one column, use all the column Ys\n return this.colYs;\n }\n\n var colGroup = [];\n // how many different places could this brick fit horizontally\n var groupCount = this.cols + 1 - colSpan;\n // for each group potential horizontal position\n for (var i = 0; i < groupCount; i++) {\n colGroup[i] = this._getColGroupY(i, colSpan);\n }\n return colGroup;\n };\n\n proto._getColGroupY = function (col, colSpan) {\n if (colSpan < 2) {\n return this.colYs[col];\n }\n // make an array of colY values for that one group\n var groupColYs = this.colYs.slice(col, col + colSpan);\n // and get the max value of the array\n return Math.max.apply(Math, groupColYs);\n };\n\n // get column position based on horizontal index. #873\n proto._getHorizontalColPosition = function (colSpan, item) {\n var col = this.horizontalColIndex % this.cols;\n var isOver = colSpan > 1 && col + colSpan > this.cols;\n // shift to next row if item can't fit on current row\n col = isOver ? 0 : col;\n // don't let zero-size items take up space\n var hasSize = item.size.outerWidth && item.size.outerHeight;\n this.horizontalColIndex = hasSize ? col + colSpan : this.horizontalColIndex;\n\n return {\n col: col,\n y: this._getColGroupY(col, colSpan)\n };\n };\n\n proto._manageStamp = function (stamp) {\n var stampSize = getSize(stamp);\n var offset = this._getElementOffset(stamp);\n // get the columns that this stamp affects\n var isOriginLeft = this._getOption('originLeft');\n var firstX = isOriginLeft ? offset.left : offset.right;\n var lastX = firstX + stampSize.outerWidth;\n var firstCol = Math.floor(firstX / this.columnWidth);\n firstCol = Math.max(0, firstCol);\n var lastCol = Math.floor(lastX / this.columnWidth);\n // lastCol should not go over if multiple of columnWidth #425\n lastCol -= lastX % this.columnWidth ? 0 : 1;\n lastCol = Math.min(this.cols - 1, lastCol);\n // set colYs to bottom of the stamp\n\n var isOriginTop = this._getOption('originTop');\n var stampMaxY = (isOriginTop ? offset.top : offset.bottom) + stampSize.outerHeight;\n for (var i = firstCol; i <= lastCol; i++) {\n this.colYs[i] = Math.max(stampMaxY, this.colYs[i]);\n }\n };\n\n proto._getContainerSize = function () {\n this.maxY = Math.max.apply(Math, this.colYs);\n var size = {\n height: this.maxY\n };\n\n if (this._getOption('fitWidth')) {\n size.width = this._getContainerFitWidth();\n }\n\n return size;\n };\n\n proto._getContainerFitWidth = function () {\n var unusedCols = 0;\n // count unused columns\n var i = this.cols;\n while (--i) {\n if (this.colYs[i] !== 0) {\n break;\n }\n unusedCols++;\n }\n // fit container to columns that have been used\n return (this.cols - unusedCols) * this.columnWidth - this.gutter;\n };\n\n proto.needsResizeLayout = function () {\n var previousWidth = this.containerWidth;\n this.getContainerWidth();\n return previousWidth != this.containerWidth;\n };\n\n return Masonry;\n});\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*!\n * Outlayer v2.1.1\n * the brains and guts of a layout library\n * MIT license\n */\n\n(function (window, factory) {\n 'use strict';\n // universal module definition\n /* jshint strict: false */ /* globals define, module, require */\n\n if (true) {\n // AMD - RequireJS\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(6), __webpack_require__(4), __webpack_require__(35), __webpack_require__(37)], __WEBPACK_AMD_DEFINE_RESULT__ = function (EvEmitter, getSize, utils, Item) {\n return factory(window, EvEmitter, getSize, utils, Item);\n }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS - Browserify, Webpack\n module.exports = factory(window, require('ev-emitter'), require('get-size'), require('fizzy-ui-utils'), require('./item'));\n } else {\n // browser global\n window.Outlayer = factory(window, window.EvEmitter, window.getSize, window.fizzyUIUtils, window.Outlayer.Item);\n }\n})(window, function factory(window, EvEmitter, getSize, utils, Item) {\n 'use strict';\n\n // ----- vars ----- //\n\n var console = window.console;\n var jQuery = window.jQuery;\n var noop = function noop() {};\n\n // -------------------------- Outlayer -------------------------- //\n\n // globally unique identifiers\n var GUID = 0;\n // internal store of all Outlayer intances\n var instances = {};\n\n /**\n * @param {Element, String} element\n * @param {Object} options\n * @constructor\n */\n function Outlayer(element, options) {\n var queryElement = utils.getQueryElement(element);\n if (!queryElement) {\n if (console) {\n console.error('Bad element for ' + this.constructor.namespace + ': ' + (queryElement || element));\n }\n return;\n }\n this.element = queryElement;\n // add jQuery\n if (jQuery) {\n this.$element = jQuery(this.element);\n }\n\n // options\n this.options = utils.extend({}, this.constructor.defaults);\n this.option(options);\n\n // add id for Outlayer.getFromElement\n var id = ++GUID;\n this.element.outlayerGUID = id; // expando\n instances[id] = this; // associate via id\n\n // kick it off\n this._create();\n\n var isInitLayout = this._getOption('initLayout');\n if (isInitLayout) {\n this.layout();\n }\n }\n\n // settings are for internal use only\n Outlayer.namespace = 'outlayer';\n Outlayer.Item = Item;\n\n // default options\n Outlayer.defaults = {\n containerStyle: {\n position: 'relative'\n },\n initLayout: true,\n originLeft: true,\n originTop: true,\n resize: true,\n resizeContainer: true,\n // item options\n transitionDuration: '0.4s',\n hiddenStyle: {\n opacity: 0,\n transform: 'scale(0.001)'\n },\n visibleStyle: {\n opacity: 1,\n transform: 'scale(1)'\n }\n };\n\n var proto = Outlayer.prototype;\n // inherit EvEmitter\n utils.extend(proto, EvEmitter.prototype);\n\n /**\n * set options\n * @param {Object} opts\n */\n proto.option = function (opts) {\n utils.extend(this.options, opts);\n };\n\n /**\n * get backwards compatible option value, check old name\n */\n proto._getOption = function (option) {\n var oldOption = this.constructor.compatOptions[option];\n return oldOption && this.options[oldOption] !== undefined ? this.options[oldOption] : this.options[option];\n };\n\n Outlayer.compatOptions = {\n // currentName: oldName\n initLayout: 'isInitLayout',\n horizontal: 'isHorizontal',\n layoutInstant: 'isLayoutInstant',\n originLeft: 'isOriginLeft',\n originTop: 'isOriginTop',\n resize: 'isResizeBound',\n resizeContainer: 'isResizingContainer'\n };\n\n proto._create = function () {\n // get items from children\n this.reloadItems();\n // elements that affect layout, but are not laid out\n this.stamps = [];\n this.stamp(this.options.stamp);\n // set container style\n utils.extend(this.element.style, this.options.containerStyle);\n\n // bind resize method\n var canBindResize = this._getOption('resize');\n if (canBindResize) {\n this.bindResize();\n }\n };\n\n // goes through all children again and gets bricks in proper order\n proto.reloadItems = function () {\n // collection of item elements\n this.items = this._itemize(this.element.children);\n };\n\n /**\n * turn elements into Outlayer.Items to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Outlayer Items\n */\n proto._itemize = function (elems) {\n\n var itemElems = this._filterFindItemElements(elems);\n var Item = this.constructor.Item;\n\n // create new Outlayer Items for collection\n var items = [];\n for (var i = 0; i < itemElems.length; i++) {\n var elem = itemElems[i];\n var item = new Item(elem, this);\n items.push(item);\n }\n\n return items;\n };\n\n /**\n * get item elements to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - item elements\n */\n proto._filterFindItemElements = function (elems) {\n return utils.filterFindElements(elems, this.options.itemSelector);\n };\n\n /**\n * getter method for getting item elements\n * @returns {Array} elems - collection of item elements\n */\n proto.getItemElements = function () {\n return this.items.map(function (item) {\n return item.element;\n });\n };\n\n // ----- init & layout ----- //\n\n /**\n * lays out all items\n */\n proto.layout = function () {\n this._resetLayout();\n this._manageStamps();\n\n // don't animate first layout\n var layoutInstant = this._getOption('layoutInstant');\n var isInstant = layoutInstant !== undefined ? layoutInstant : !this._isLayoutInited;\n this.layoutItems(this.items, isInstant);\n\n // flag for initalized\n this._isLayoutInited = true;\n };\n\n // _init is alias for layout\n proto._init = proto.layout;\n\n /**\n * logic before any new layout\n */\n proto._resetLayout = function () {\n this.getSize();\n };\n\n proto.getSize = function () {\n this.size = getSize(this.element);\n };\n\n /**\n * get measurement from option, for columnWidth, rowHeight, gutter\n * if option is String -> get element from selector string, & get size of element\n * if option is Element -> get size of element\n * else use option as a number\n *\n * @param {String} measurement\n * @param {String} size - width or height\n * @private\n */\n proto._getMeasurement = function (measurement, size) {\n var option = this.options[measurement];\n var elem;\n if (!option) {\n // default to 0\n this[measurement] = 0;\n } else {\n // use option as an element\n if (typeof option == 'string') {\n elem = this.element.querySelector(option);\n } else if (option instanceof HTMLElement) {\n elem = option;\n }\n // use size of element, if element\n this[measurement] = elem ? getSize(elem)[size] : option;\n }\n };\n\n /**\n * layout a collection of item elements\n * @api public\n */\n proto.layoutItems = function (items, isInstant) {\n items = this._getItemsForLayout(items);\n\n this._layoutItems(items, isInstant);\n\n this._postLayout();\n };\n\n /**\n * get the items to be laid out\n * you may want to skip over some items\n * @param {Array} items\n * @returns {Array} items\n */\n proto._getItemsForLayout = function (items) {\n return items.filter(function (item) {\n return !item.isIgnored;\n });\n };\n\n /**\n * layout items\n * @param {Array} items\n * @param {Boolean} isInstant\n */\n proto._layoutItems = function (items, isInstant) {\n this._emitCompleteOnItems('layout', items);\n\n if (!items || !items.length) {\n // no items, emit event with empty array\n return;\n }\n\n var queue = [];\n\n items.forEach(function (item) {\n // get x/y object from method\n var position = this._getItemLayoutPosition(item);\n // enqueue\n position.item = item;\n position.isInstant = isInstant || item.isLayoutInstant;\n queue.push(position);\n }, this);\n\n this._processLayoutQueue(queue);\n };\n\n /**\n * get item layout position\n * @param {Outlayer.Item} item\n * @returns {Object} x and y position\n */\n proto._getItemLayoutPosition = function () /* item */{\n return {\n x: 0,\n y: 0\n };\n };\n\n /**\n * iterate over array and position each item\n * Reason being - separating this logic prevents 'layout invalidation'\n * thx @paul_irish\n * @param {Array} queue\n */\n proto._processLayoutQueue = function (queue) {\n this.updateStagger();\n queue.forEach(function (obj, i) {\n this._positionItem(obj.item, obj.x, obj.y, obj.isInstant, i);\n }, this);\n };\n\n // set stagger from option in milliseconds number\n proto.updateStagger = function () {\n var stagger = this.options.stagger;\n if (stagger === null || stagger === undefined) {\n this.stagger = 0;\n return;\n }\n this.stagger = getMilliseconds(stagger);\n return this.stagger;\n };\n\n /**\n * Sets position of item in DOM\n * @param {Outlayer.Item} item\n * @param {Number} x - horizontal position\n * @param {Number} y - vertical position\n * @param {Boolean} isInstant - disables transitions\n */\n proto._positionItem = function (item, x, y, isInstant, i) {\n if (isInstant) {\n // if not transition, just set CSS\n item.goTo(x, y);\n } else {\n item.stagger(i * this.stagger);\n item.moveTo(x, y);\n }\n };\n\n /**\n * Any logic you want to do after each layout,\n * i.e. size the container\n */\n proto._postLayout = function () {\n this.resizeContainer();\n };\n\n proto.resizeContainer = function () {\n var isResizingContainer = this._getOption('resizeContainer');\n if (!isResizingContainer) {\n return;\n }\n var size = this._getContainerSize();\n if (size) {\n this._setContainerMeasure(size.width, true);\n this._setContainerMeasure(size.height, false);\n }\n };\n\n /**\n * Sets width or height of container if returned\n * @returns {Object} size\n * @param {Number} width\n * @param {Number} height\n */\n proto._getContainerSize = noop;\n\n /**\n * @param {Number} measure - size of width or height\n * @param {Boolean} isWidth\n */\n proto._setContainerMeasure = function (measure, isWidth) {\n if (measure === undefined) {\n return;\n }\n\n var elemSize = this.size;\n // add padding and border width if border box\n if (elemSize.isBorderBox) {\n measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight + elemSize.borderLeftWidth + elemSize.borderRightWidth : elemSize.paddingBottom + elemSize.paddingTop + elemSize.borderTopWidth + elemSize.borderBottomWidth;\n }\n\n measure = Math.max(measure, 0);\n this.element.style[isWidth ? 'width' : 'height'] = measure + 'px';\n };\n\n /**\n * emit eventComplete on a collection of items events\n * @param {String} eventName\n * @param {Array} items - Outlayer.Items\n */\n proto._emitCompleteOnItems = function (eventName, items) {\n var _this = this;\n function onComplete() {\n _this.dispatchEvent(eventName + 'Complete', null, [items]);\n }\n\n var count = items.length;\n if (!items || !count) {\n onComplete();\n return;\n }\n\n var doneCount = 0;\n function tick() {\n doneCount++;\n if (doneCount == count) {\n onComplete();\n }\n }\n\n // bind callback\n items.forEach(function (item) {\n item.once(eventName, tick);\n });\n };\n\n /**\n * emits events via EvEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\n proto.dispatchEvent = function (type, event, args) {\n // add original event to arguments\n var emitArgs = event ? [event].concat(args) : args;\n this.emitEvent(type, emitArgs);\n\n if (jQuery) {\n // set this.$element\n this.$element = this.$element || jQuery(this.element);\n if (event) {\n // create jQuery event\n var $event = jQuery.Event(event);\n $event.type = type;\n this.$element.trigger($event, args);\n } else {\n // just trigger with type if no event available\n this.$element.trigger(type, args);\n }\n }\n };\n\n // -------------------------- ignore & stamps -------------------------- //\n\n\n /**\n * keep item in collection, but do not lay it out\n * ignored items do not get skipped in layout\n * @param {Element} elem\n */\n proto.ignore = function (elem) {\n var item = this.getItem(elem);\n if (item) {\n item.isIgnored = true;\n }\n };\n\n /**\n * return item to layout collection\n * @param {Element} elem\n */\n proto.unignore = function (elem) {\n var item = this.getItem(elem);\n if (item) {\n delete item.isIgnored;\n }\n };\n\n /**\n * adds elements to stamps\n * @param {NodeList, Array, Element, or String} elems\n */\n proto.stamp = function (elems) {\n elems = this._find(elems);\n if (!elems) {\n return;\n }\n\n this.stamps = this.stamps.concat(elems);\n // ignore\n elems.forEach(this.ignore, this);\n };\n\n /**\n * removes elements to stamps\n * @param {NodeList, Array, or Element} elems\n */\n proto.unstamp = function (elems) {\n elems = this._find(elems);\n if (!elems) {\n return;\n }\n\n elems.forEach(function (elem) {\n // filter out removed stamp elements\n utils.removeFrom(this.stamps, elem);\n this.unignore(elem);\n }, this);\n };\n\n /**\n * finds child elements\n * @param {NodeList, Array, Element, or String} elems\n * @returns {Array} elems\n */\n proto._find = function (elems) {\n if (!elems) {\n return;\n }\n // if string, use argument as selector string\n if (typeof elems == 'string') {\n elems = this.element.querySelectorAll(elems);\n }\n elems = utils.makeArray(elems);\n return elems;\n };\n\n proto._manageStamps = function () {\n if (!this.stamps || !this.stamps.length) {\n return;\n }\n\n this._getBoundingRect();\n\n this.stamps.forEach(this._manageStamp, this);\n };\n\n // update boundingLeft / Top\n proto._getBoundingRect = function () {\n // get bounding rect for container element\n var boundingRect = this.element.getBoundingClientRect();\n var size = this.size;\n this._boundingRect = {\n left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,\n top: boundingRect.top + size.paddingTop + size.borderTopWidth,\n right: boundingRect.right - (size.paddingRight + size.borderRightWidth),\n bottom: boundingRect.bottom - (size.paddingBottom + size.borderBottomWidth)\n };\n };\n\n /**\n * @param {Element} stamp\n **/\n proto._manageStamp = noop;\n\n /**\n * get x/y position of element relative to container element\n * @param {Element} elem\n * @returns {Object} offset - has left, top, right, bottom\n */\n proto._getElementOffset = function (elem) {\n var boundingRect = elem.getBoundingClientRect();\n var thisRect = this._boundingRect;\n var size = getSize(elem);\n var offset = {\n left: boundingRect.left - thisRect.left - size.marginLeft,\n top: boundingRect.top - thisRect.top - size.marginTop,\n right: thisRect.right - boundingRect.right - size.marginRight,\n bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom\n };\n return offset;\n };\n\n // -------------------------- resize -------------------------- //\n\n // enable event handlers for listeners\n // i.e. resize -> onresize\n proto.handleEvent = utils.handleEvent;\n\n /**\n * Bind layout to window resizing\n */\n proto.bindResize = function () {\n window.addEventListener('resize', this);\n this.isResizeBound = true;\n };\n\n /**\n * Unbind layout to window resizing\n */\n proto.unbindResize = function () {\n window.removeEventListener('resize', this);\n this.isResizeBound = false;\n };\n\n proto.onresize = function () {\n this.resize();\n };\n\n utils.debounceMethod(Outlayer, 'onresize', 100);\n\n proto.resize = function () {\n // don't trigger if size did not change\n // or if resize was unbound. See #9\n if (!this.isResizeBound || !this.needsResizeLayout()) {\n return;\n }\n\n this.layout();\n };\n\n /**\n * check if layout is needed post layout\n * @returns Boolean\n */\n proto.needsResizeLayout = function () {\n var size = getSize(this.element);\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var hasSizes = this.size && size;\n return hasSizes && size.innerWidth !== this.size.innerWidth;\n };\n\n // -------------------------- methods -------------------------- //\n\n /**\n * add items to Outlayer instance\n * @param {Array or NodeList or Element} elems\n * @returns {Array} items - Outlayer.Items\n **/\n proto.addItems = function (elems) {\n var items = this._itemize(elems);\n // add items to collection\n if (items.length) {\n this.items = this.items.concat(items);\n }\n return items;\n };\n\n /**\n * Layout newly-appended item elements\n * @param {Array or NodeList or Element} elems\n */\n proto.appended = function (elems) {\n var items = this.addItems(elems);\n if (!items.length) {\n return;\n }\n // layout and reveal just the new items\n this.layoutItems(items, true);\n this.reveal(items);\n };\n\n /**\n * Layout prepended elements\n * @param {Array or NodeList or Element} elems\n */\n proto.prepended = function (elems) {\n var items = this._itemize(elems);\n if (!items.length) {\n return;\n }\n // add items to beginning of collection\n var previousItems = this.items.slice(0);\n this.items = items.concat(previousItems);\n // start new layout\n this._resetLayout();\n this._manageStamps();\n // layout new stuff without transition\n this.layoutItems(items, true);\n this.reveal(items);\n // layout previous items\n this.layoutItems(previousItems);\n };\n\n /**\n * reveal a collection of items\n * @param {Array of Outlayer.Items} items\n */\n proto.reveal = function (items) {\n this._emitCompleteOnItems('reveal', items);\n if (!items || !items.length) {\n return;\n }\n var stagger = this.updateStagger();\n items.forEach(function (item, i) {\n item.stagger(i * stagger);\n item.reveal();\n });\n };\n\n /**\n * hide a collection of items\n * @param {Array of Outlayer.Items} items\n */\n proto.hide = function (items) {\n this._emitCompleteOnItems('hide', items);\n if (!items || !items.length) {\n return;\n }\n var stagger = this.updateStagger();\n items.forEach(function (item, i) {\n item.stagger(i * stagger);\n item.hide();\n });\n };\n\n /**\n * reveal item elements\n * @param {Array}, {Element}, {NodeList} items\n */\n proto.revealItemElements = function (elems) {\n var items = this.getItems(elems);\n this.reveal(items);\n };\n\n /**\n * hide item elements\n * @param {Array}, {Element}, {NodeList} items\n */\n proto.hideItemElements = function (elems) {\n var items = this.getItems(elems);\n this.hide(items);\n };\n\n /**\n * get Outlayer.Item, given an Element\n * @param {Element} elem\n * @param {Function} callback\n * @returns {Outlayer.Item} item\n */\n proto.getItem = function (elem) {\n // loop through items to get the one that matches\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n if (item.element == elem) {\n // return item\n return item;\n }\n }\n };\n\n /**\n * get collection of Outlayer.Items, given Elements\n * @param {Array} elems\n * @returns {Array} items - Outlayer.Items\n */\n proto.getItems = function (elems) {\n elems = utils.makeArray(elems);\n var items = [];\n elems.forEach(function (elem) {\n var item = this.getItem(elem);\n if (item) {\n items.push(item);\n }\n }, this);\n\n return items;\n };\n\n /**\n * remove element(s) from instance and DOM\n * @param {Array or NodeList or Element} elems\n */\n proto.remove = function (elems) {\n var removeItems = this.getItems(elems);\n\n this._emitCompleteOnItems('remove', removeItems);\n\n // bail if no items to remove\n if (!removeItems || !removeItems.length) {\n return;\n }\n\n removeItems.forEach(function (item) {\n item.remove();\n // remove item from collection\n utils.removeFrom(this.items, item);\n }, this);\n };\n\n // ----- destroy ----- //\n\n // remove and disable Outlayer instance\n proto.destroy = function () {\n // clean up dynamic styles\n var style = this.element.style;\n style.height = '';\n style.position = '';\n style.width = '';\n // destroy items\n this.items.forEach(function (item) {\n item.destroy();\n });\n\n this.unbindResize();\n\n var id = this.element.outlayerGUID;\n delete instances[id]; // remove reference to instance by id\n delete this.element.outlayerGUID;\n // remove data for jQuery\n if (jQuery) {\n jQuery.removeData(this.element, this.constructor.namespace);\n }\n };\n\n // -------------------------- data -------------------------- //\n\n /**\n * get Outlayer instance from element\n * @param {Element} elem\n * @returns {Outlayer}\n */\n Outlayer.data = function (elem) {\n elem = utils.getQueryElement(elem);\n var id = elem && elem.outlayerGUID;\n return id && instances[id];\n };\n\n // -------------------------- create Outlayer class -------------------------- //\n\n /**\n * create a layout class\n * @param {String} namespace\n */\n Outlayer.create = function (namespace, options) {\n // sub-class Outlayer\n var Layout = subclass(Outlayer);\n // apply new options and compatOptions\n Layout.defaults = utils.extend({}, Outlayer.defaults);\n utils.extend(Layout.defaults, options);\n Layout.compatOptions = utils.extend({}, Outlayer.compatOptions);\n\n Layout.namespace = namespace;\n\n Layout.data = Outlayer.data;\n\n // sub-class Item\n Layout.Item = subclass(Item);\n\n // -------------------------- declarative -------------------------- //\n\n utils.htmlInit(Layout, namespace);\n\n // -------------------------- jQuery bridge -------------------------- //\n\n // make into jQuery plugin\n if (jQuery && jQuery.bridget) {\n jQuery.bridget(namespace, Layout);\n }\n\n return Layout;\n };\n\n function subclass(Parent) {\n function SubClass() {\n Parent.apply(this, arguments);\n }\n\n SubClass.prototype = Object.create(Parent.prototype);\n SubClass.prototype.constructor = SubClass;\n\n return SubClass;\n }\n\n // ----- helpers ----- //\n\n // how many milliseconds are in each unit\n var msUnits = {\n ms: 1,\n s: 1000\n };\n\n // munge time-like parameter into millisecond number\n // '0.4s' -> 40\n function getMilliseconds(time) {\n if (typeof time == 'number') {\n return time;\n }\n var matches = time.match(/(^\\d*\\.?\\d*)(\\w*)/);\n var num = matches && matches[1];\n var unit = matches && matches[2];\n if (!num.length) {\n return 0;\n }\n num = parseFloat(num);\n var mult = msUnits[unit] || 1;\n return num * mult;\n }\n\n // ----- fin ----- //\n\n // back in global\n Outlayer.Item = Item;\n\n return Outlayer;\n});\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\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 (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(36)], __WEBPACK_AMD_DEFINE_RESULT__ = function (matchesSelector) {\n return factory(window, matchesSelector);\n }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(window, require('desandro-matches-selector'));\n } else {\n // browser global\n window.fizzyUIUtils = factory(window, window.matchesSelector);\n }\n})(window, function factory(window, matchesSelector) {\n\n 'use strict';\n\n var utils = {};\n\n // ----- extend ----- //\n\n // extends objects\n utils.extend = function (a, b) {\n for (var prop in b) {\n a[prop] = b[prop];\n }\n return a;\n };\n\n // ----- modulo ----- //\n\n utils.modulo = function (num, div) {\n return (num % div + div) % div;\n };\n\n // ----- makeArray ----- //\n\n var arraySlice = Array.prototype.slice;\n\n // turn element or nodeList into an array\n utils.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 === 'undefined' ? 'undefined' : _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\n utils.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\n utils.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\n utils.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' )\n utils.handleEvent = function (event) {\n var method = 'on' + event.type;\n if (this[method]) {\n this[method](event);\n }\n };\n\n // ----- filterFindElements ----- //\n\n utils.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\n utils.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\n utils.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/\n utils.toDashed = function (str) {\n return str.replace(/(.)([A-Z])/g, function (match, $1, $2) {\n return $1 + '-' + $2;\n }).toLowerCase();\n };\n\n var 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 */\n utils.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).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) || 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 + ': ' + 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 return utils;\n});\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\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\n if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.matchesSelector = factory();\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/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * Outlayer Item\n */\n\n(function (window, factory) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, require */\n if (true) {\n // AMD - RequireJS\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(6), __webpack_require__(4)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS - Browserify, Webpack\n module.exports = factory(require('ev-emitter'), require('get-size'));\n } else {\n // browser global\n window.Outlayer = {};\n window.Outlayer.Item = factory(window.EvEmitter, window.getSize);\n }\n})(window, function factory(EvEmitter, getSize) {\n 'use strict';\n\n // ----- helpers ----- //\n\n function isEmptyObj(obj) {\n for (var prop in obj) {\n return false;\n }\n prop = null;\n return true;\n }\n\n // -------------------------- CSS3 support -------------------------- //\n\n\n var docElemStyle = document.documentElement.style;\n\n var transitionProperty = typeof docElemStyle.transition == 'string' ? 'transition' : 'WebkitTransition';\n var transformProperty = typeof docElemStyle.transform == 'string' ? 'transform' : 'WebkitTransform';\n\n var transitionEndEvent = {\n WebkitTransition: 'webkitTransitionEnd',\n transition: 'transitionend'\n }[transitionProperty];\n\n // cache all vendor properties that could have vendor prefix\n var vendorProperties = {\n transform: transformProperty,\n transition: transitionProperty,\n transitionDuration: transitionProperty + 'Duration',\n transitionProperty: transitionProperty + 'Property',\n transitionDelay: transitionProperty + 'Delay'\n };\n\n // -------------------------- Item -------------------------- //\n\n function Item(element, layout) {\n if (!element) {\n return;\n }\n\n this.element = element;\n // parent layout class, i.e. Masonry, Isotope, or Packery\n this.layout = layout;\n this.position = {\n x: 0,\n y: 0\n };\n\n this._create();\n }\n\n // inherit EvEmitter\n var proto = Item.prototype = Object.create(EvEmitter.prototype);\n proto.constructor = Item;\n\n proto._create = function () {\n // transition objects\n this._transn = {\n ingProperties: {},\n clean: {},\n onEnd: {}\n };\n\n this.css({\n position: 'absolute'\n });\n };\n\n // trigger specified handler for event type\n proto.handleEvent = function (event) {\n var method = 'on' + event.type;\n if (this[method]) {\n this[method](event);\n }\n };\n\n proto.getSize = function () {\n this.size = getSize(this.element);\n };\n\n /**\n * apply CSS styles to element\n * @param {Object} style\n */\n proto.css = function (style) {\n var elemStyle = this.element.style;\n\n for (var prop in style) {\n // use vendor property if available\n var supportedProp = vendorProperties[prop] || prop;\n elemStyle[supportedProp] = style[prop];\n }\n };\n\n // measure position, and sets it\n proto.getPosition = function () {\n var style = getComputedStyle(this.element);\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n var xValue = style[isOriginLeft ? 'left' : 'right'];\n var yValue = style[isOriginTop ? 'top' : 'bottom'];\n var x = parseFloat(xValue);\n var y = parseFloat(yValue);\n // convert percent to pixels\n var layoutSize = this.layout.size;\n if (xValue.indexOf('%') != -1) {\n x = x / 100 * layoutSize.width;\n }\n if (yValue.indexOf('%') != -1) {\n y = y / 100 * layoutSize.height;\n }\n // clean up 'auto' or other non-integer values\n x = isNaN(x) ? 0 : x;\n y = isNaN(y) ? 0 : y;\n // remove padding from measurement\n x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;\n y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;\n\n this.position.x = x;\n this.position.y = y;\n };\n\n // set settled position, apply padding\n proto.layoutPosition = function () {\n var layoutSize = this.layout.size;\n var style = {};\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n\n // x\n var xPadding = isOriginLeft ? 'paddingLeft' : 'paddingRight';\n var xProperty = isOriginLeft ? 'left' : 'right';\n var xResetProperty = isOriginLeft ? 'right' : 'left';\n\n var x = this.position.x + layoutSize[xPadding];\n // set in percentage or pixels\n style[xProperty] = this.getXValue(x);\n // reset other property\n style[xResetProperty] = '';\n\n // y\n var yPadding = isOriginTop ? 'paddingTop' : 'paddingBottom';\n var yProperty = isOriginTop ? 'top' : 'bottom';\n var yResetProperty = isOriginTop ? 'bottom' : 'top';\n\n var y = this.position.y + layoutSize[yPadding];\n // set in percentage or pixels\n style[yProperty] = this.getYValue(y);\n // reset other property\n style[yResetProperty] = '';\n\n this.css(style);\n this.emitEvent('layout', [this]);\n };\n\n proto.getXValue = function (x) {\n var isHorizontal = this.layout._getOption('horizontal');\n return this.layout.options.percentPosition && !isHorizontal ? x / this.layout.size.width * 100 + '%' : x + 'px';\n };\n\n proto.getYValue = function (y) {\n var isHorizontal = this.layout._getOption('horizontal');\n return this.layout.options.percentPosition && isHorizontal ? y / this.layout.size.height * 100 + '%' : y + 'px';\n };\n\n proto._transitionTo = function (x, y) {\n this.getPosition();\n // get current x & y from top/left\n var curX = this.position.x;\n var curY = this.position.y;\n\n var didNotMove = x == this.position.x && y == this.position.y;\n\n // save end position\n this.setPosition(x, y);\n\n // if did not move and not transitioning, just go to layout\n if (didNotMove && !this.isTransitioning) {\n this.layoutPosition();\n return;\n }\n\n var transX = x - curX;\n var transY = y - curY;\n var transitionStyle = {};\n transitionStyle.transform = this.getTranslate(transX, transY);\n\n this.transition({\n to: transitionStyle,\n onTransitionEnd: {\n transform: this.layoutPosition\n },\n isCleaning: true\n });\n };\n\n proto.getTranslate = function (x, y) {\n // flip cooridinates if origin on right or bottom\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n x = isOriginLeft ? x : -x;\n y = isOriginTop ? y : -y;\n return 'translate3d(' + x + 'px, ' + y + 'px, 0)';\n };\n\n // non transition + transform support\n proto.goTo = function (x, y) {\n this.setPosition(x, y);\n this.layoutPosition();\n };\n\n proto.moveTo = proto._transitionTo;\n\n proto.setPosition = function (x, y) {\n this.position.x = parseFloat(x);\n this.position.y = parseFloat(y);\n };\n\n // ----- transition ----- //\n\n /**\n * @param {Object} style - CSS\n * @param {Function} onTransitionEnd\n */\n\n // non transition, just trigger callback\n proto._nonTransition = function (args) {\n this.css(args.to);\n if (args.isCleaning) {\n this._removeStyles(args.to);\n }\n for (var prop in args.onTransitionEnd) {\n args.onTransitionEnd[prop].call(this);\n }\n };\n\n /**\n * proper transition\n * @param {Object} args - arguments\n * @param {Object} to - style to transition to\n * @param {Object} from - style to start transition from\n * @param {Boolean} isCleaning - removes transition styles after transition\n * @param {Function} onTransitionEnd - callback\n */\n proto.transition = function (args) {\n // redirect to nonTransition if no transition duration\n if (!parseFloat(this.layout.options.transitionDuration)) {\n this._nonTransition(args);\n return;\n }\n\n var _transition = this._transn;\n // keep track of onTransitionEnd callback by css property\n for (var prop in args.onTransitionEnd) {\n _transition.onEnd[prop] = args.onTransitionEnd[prop];\n }\n // keep track of properties that are transitioning\n for (prop in args.to) {\n _transition.ingProperties[prop] = true;\n // keep track of properties to clean up when transition is done\n if (args.isCleaning) {\n _transition.clean[prop] = true;\n }\n }\n\n // set from styles\n if (args.from) {\n this.css(args.from);\n // force redraw. http://blog.alexmaccaw.com/css-transitions\n var h = this.element.offsetHeight;\n // hack for JSHint to hush about unused var\n h = null;\n }\n // enable transition\n this.enableTransition(args.to);\n // set styles that are transitioning\n this.css(args.to);\n\n this.isTransitioning = true;\n };\n\n // dash before all cap letters, including first for\n // WebkitTransform => -webkit-transform\n function toDashedAll(str) {\n return str.replace(/([A-Z])/g, function ($1) {\n return '-' + $1.toLowerCase();\n });\n }\n\n var transitionProps = 'opacity,' + toDashedAll(transformProperty);\n\n proto.enableTransition = function () /* style */{\n // HACK changing transitionProperty during a transition\n // will cause transition to jump\n if (this.isTransitioning) {\n return;\n }\n\n // make `transition: foo, bar, baz` from style object\n // HACK un-comment this when enableTransition can work\n // while a transition is happening\n // var transitionValues = [];\n // for ( var prop in style ) {\n // // dash-ify camelCased properties like WebkitTransition\n // prop = vendorProperties[ prop ] || prop;\n // transitionValues.push( toDashedAll( prop ) );\n // }\n // munge number to millisecond, to match stagger\n var duration = this.layout.options.transitionDuration;\n duration = typeof duration == 'number' ? duration + 'ms' : duration;\n // enable transition styles\n this.css({\n transitionProperty: transitionProps,\n transitionDuration: duration,\n transitionDelay: this.staggerDelay || 0\n });\n // listen for transition end event\n this.element.addEventListener(transitionEndEvent, this, false);\n };\n\n // ----- events ----- //\n\n proto.onwebkitTransitionEnd = function (event) {\n this.ontransitionend(event);\n };\n\n proto.onotransitionend = function (event) {\n this.ontransitionend(event);\n };\n\n // properties that I munge to make my life easier\n var dashedVendorProperties = {\n '-webkit-transform': 'transform'\n };\n\n proto.ontransitionend = function (event) {\n // disregard bubbled events from children\n if (event.target !== this.element) {\n return;\n }\n var _transition = this._transn;\n // get property name of transitioned property, convert to prefix-free\n var propertyName = dashedVendorProperties[event.propertyName] || event.propertyName;\n\n // remove property that has completed transitioning\n delete _transition.ingProperties[propertyName];\n // check if any properties are still transitioning\n if (isEmptyObj(_transition.ingProperties)) {\n // all properties have completed transitioning\n this.disableTransition();\n }\n // clean style\n if (propertyName in _transition.clean) {\n // clean up style\n this.element.style[event.propertyName] = '';\n delete _transition.clean[propertyName];\n }\n // trigger onTransitionEnd callback\n if (propertyName in _transition.onEnd) {\n var onTransitionEnd = _transition.onEnd[propertyName];\n onTransitionEnd.call(this);\n delete _transition.onEnd[propertyName];\n }\n\n this.emitEvent('transitionEnd', [this]);\n };\n\n proto.disableTransition = function () {\n this.removeTransitionStyles();\n this.element.removeEventListener(transitionEndEvent, this, false);\n this.isTransitioning = false;\n };\n\n /**\n * removes style property from element\n * @param {Object} style\n **/\n proto._removeStyles = function (style) {\n // clean up transition styles\n var cleanStyle = {};\n for (var prop in style) {\n cleanStyle[prop] = '';\n }\n this.css(cleanStyle);\n };\n\n var cleanTransitionStyle = {\n transitionProperty: '',\n transitionDuration: '',\n transitionDelay: ''\n };\n\n proto.removeTransitionStyles = function () {\n // remove transition\n this.css(cleanTransitionStyle);\n };\n\n // ----- stagger ----- //\n\n proto.stagger = function (delay) {\n delay = isNaN(delay) ? 0 : delay;\n this.staggerDelay = delay + 'ms';\n };\n\n // ----- show/hide/remove ----- //\n\n // remove element from DOM\n proto.removeElem = function () {\n this.element.parentNode.removeChild(this.element);\n // remove display: none\n this.css({ display: '' });\n this.emitEvent('remove', [this]);\n };\n\n proto.remove = function () {\n // just remove element if no transition support or no transition\n if (!transitionProperty || !parseFloat(this.layout.options.transitionDuration)) {\n this.removeElem();\n return;\n }\n\n // start transition\n this.once('transitionEnd', function () {\n this.removeElem();\n });\n this.hide();\n };\n\n proto.reveal = function () {\n delete this.isHidden;\n // remove display: none\n this.css({ display: '' });\n\n var options = this.layout.options;\n\n var onTransitionEnd = {};\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('visibleStyle');\n onTransitionEnd[transitionEndProperty] = this.onRevealTransitionEnd;\n\n this.transition({\n from: options.hiddenStyle,\n to: options.visibleStyle,\n isCleaning: true,\n onTransitionEnd: onTransitionEnd\n });\n };\n\n proto.onRevealTransitionEnd = function () {\n // check if still visible\n // during transition, item may have been hidden\n if (!this.isHidden) {\n this.emitEvent('reveal');\n }\n };\n\n /**\n * get style property use for hide/reveal transition end\n * @param {String} styleProperty - hiddenStyle/visibleStyle\n * @returns {String}\n */\n proto.getHideRevealTransitionEndProperty = function (styleProperty) {\n var optionStyle = this.layout.options[styleProperty];\n // use opacity\n if (optionStyle.opacity) {\n return 'opacity';\n }\n // get first property\n for (var prop in optionStyle) {\n return prop;\n }\n };\n\n proto.hide = function () {\n // set flag\n this.isHidden = true;\n // remove display: none\n this.css({ display: '' });\n\n var options = this.layout.options;\n\n var onTransitionEnd = {};\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('hiddenStyle');\n onTransitionEnd[transitionEndProperty] = this.onHideTransitionEnd;\n\n this.transition({\n from: options.visibleStyle,\n to: options.hiddenStyle,\n // keep hidden stuff hidden\n isCleaning: true,\n onTransitionEnd: onTransitionEnd\n });\n };\n\n proto.onHideTransitionEnd = function () {\n // check if still hidden\n // during transition, item may have been un-hidden\n if (this.isHidden) {\n this.css({ display: 'none' });\n this.emitEvent('hide');\n }\n };\n\n proto.destroy = function () {\n this.css({\n position: '',\n left: '',\n right: '',\n top: '',\n bottom: '',\n transition: '',\n transform: ''\n });\n };\n\n return Item;\n});\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.scroll = exports.resize = exports.touchmove = exports.touchend = exports.touchstart = exports.mouseover = exports.mouseout = exports.mouseleave = exports.mouseenter = exports.mouseup = exports.mousemove = exports.mousedown = exports.change = exports.submit = exports.keypress = exports.keydown = exports.keyup = exports.focusout = exports.focusin = exports.focus = exports.blur = exports.click = exports.stop = exports.animate = exports.scrollLeft = exports.scrollTop = exports.scrollTo = exports.empty = exports.add = exports.detach = exports.remove = exports.children = exports.find = exports.closest = exports.parents = exports.parent = exports.siblings = exports.prevAll = exports.prev = exports.nextAll = exports.next = exports.insertAfter = exports.insertBefore = exports.prependTo = exports.prepend = exports.appendTo = exports.append = exports.eq = exports.index = exports.indexOf = exports.is = exports.text = exports.html = exports.map = exports.filter = exports.forEach = exports.each = exports.toArray = exports.css = exports.styles = exports.show = exports.hide = exports.offset = exports.outerHeight = exports.height = exports.outerWidth = exports.width = exports.animationEnd = exports.transitionEnd = exports.trigger = exports.once = exports.off = exports.on = exports.transition = exports.transform = exports.val = exports.dataset = exports.removeData = exports.data = exports.prop = exports.removeAttr = exports.attr = exports.toggleClass = exports.hasClass = exports.removeClass = exports.addClass = exports.$ = undefined;\n\nvar _ssrWindow = __webpack_require__(39);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } } /**\n * Dom7 2.1.5\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * http://framework7.io/docs/dom.html\n *\n * Copyright 2020, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n *\n * Licensed under MIT\n *\n * Released on: May 15, 2020\n */\n\n\nvar Dom7 = function Dom7(arr) {\n _classCallCheck(this, Dom7);\n\n var self = this;\n // Create array-like object\n for (var i = 0; i < arr.length; i += 1) {\n self[i] = arr[i];\n }\n self.length = arr.length;\n // Return collection with methods\n return this;\n};\n\nfunction $(selector, context) {\n var arr = [];\n var i = 0;\n if (selector && !context) {\n if (selector instanceof Dom7) {\n return selector;\n }\n }\n if (selector) {\n // String\n if (typeof selector === 'string') {\n var els = void 0;\n var tempParent = void 0;\n var _html = selector.trim();\n if (_html.indexOf('<') >= 0 && _html.indexOf('>') >= 0) {\n var toCreate = 'div';\n if (_html.indexOf(':~]/)) {\n // Pure ID selector\n els = [_ssrWindow.document.getElementById(selector.trim().split('#')[1])];\n } else {\n // Other selectors\n els = (context || _ssrWindow.document).querySelectorAll(selector.trim());\n }\n for (i = 0; i < els.length; i += 1) {\n if (els[i]) arr.push(els[i]);\n }\n }\n } else if (selector.nodeType || selector === _ssrWindow.window || selector === _ssrWindow.document) {\n // Node/element\n arr.push(selector);\n } else if (selector.length > 0 && selector[0].nodeType) {\n // Array of elements or instance of Dom\n for (i = 0; i < selector.length; i += 1) {\n arr.push(selector[i]);\n }\n }\n }\n return new Dom7(arr);\n}\n\n$.fn = Dom7.prototype;\n$.Class = Dom7;\n$.Dom7 = Dom7;\n\nfunction unique(arr) {\n var uniqueArray = [];\n for (var i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, function (match, group1) {\n return group1.toUpperCase();\n });\n}\n\nfunction requestAnimationFrame(callback) {\n if (_ssrWindow.window.requestAnimationFrame) return _ssrWindow.window.requestAnimationFrame(callback);else if (_ssrWindow.window.webkitRequestAnimationFrame) return _ssrWindow.window.webkitRequestAnimationFrame(callback);\n return _ssrWindow.window.setTimeout(callback, 1000 / 60);\n}\nfunction cancelAnimationFrame(id) {\n if (_ssrWindow.window.cancelAnimationFrame) return _ssrWindow.window.cancelAnimationFrame(id);else if (_ssrWindow.window.webkitCancelAnimationFrame) return _ssrWindow.window.webkitCancelAnimationFrame(id);\n return _ssrWindow.window.clearTimeout(id);\n}\n\n// Classes and attributes\nfunction addClass(className) {\n if (typeof className === 'undefined') {\n return this;\n }\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i += 1) {\n for (var j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.add(classes[i]);\n }\n }\n return this;\n}\nfunction removeClass(className) {\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i += 1) {\n for (var j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.remove(classes[i]);\n }\n }\n return this;\n}\nfunction hasClass(className) {\n if (!this[0]) return false;\n return this[0].classList.contains(className);\n}\nfunction toggleClass(className) {\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i += 1) {\n for (var j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.toggle(classes[i]);\n }\n }\n return this;\n}\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n }\n\n // Set attrs\n for (var i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n // eslint-disable-next-line\n for (var attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n return this;\n}\n// eslint-disable-next-line\nfunction removeAttr(attr) {\n for (var i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n return this;\n}\n// eslint-disable-next-line\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (var i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n // eslint-disable-next-line\n for (var propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n return this;\n }\n}\nfunction data(key, value) {\n var el = void 0;\n if (typeof value === 'undefined') {\n el = this[0];\n // Get value\n if (el) {\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n var dataKey = el.getAttribute('data-' + key);\n if (dataKey) {\n return dataKey;\n }\n return undefined;\n }\n return undefined;\n }\n\n // Set value\n for (var i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n return this;\n}\nfunction removeData(key) {\n for (var i = 0; i < this.length; i += 1) {\n var el = this[i];\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\nfunction dataset() {\n var el = this[0];\n if (!el) return undefined;\n var dataset = {}; // eslint-disable-line\n if (el.dataset) {\n // eslint-disable-next-line\n for (var dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (var i = 0; i < el.attributes.length; i += 1) {\n // eslint-disable-next-line\n var _attr = el.attributes[i];\n if (_attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(_attr.name.split('data-')[1])] = _attr.value;\n }\n }\n }\n // eslint-disable-next-line\n for (var key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n return dataset;\n}\nfunction val(value) {\n var dom = this;\n if (typeof value === 'undefined') {\n if (dom[0]) {\n if (dom[0].multiple && dom[0].nodeName.toLowerCase() === 'select') {\n var values = [];\n for (var i = 0; i < dom[0].selectedOptions.length; i += 1) {\n values.push(dom[0].selectedOptions[i].value);\n }\n return values;\n }\n return dom[0].value;\n }\n return undefined;\n }\n\n for (var _i = 0; _i < dom.length; _i += 1) {\n var el = dom[_i];\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (var j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n return dom;\n}\n// Transforms\n// eslint-disable-next-line\nfunction transform(transform) {\n for (var i = 0; i < this.length; i += 1) {\n var elStyle = this[i].style;\n elStyle.webkitTransform = transform;\n elStyle.transform = transform;\n }\n return this;\n}\nfunction transition(duration) {\n if (typeof duration !== 'string') {\n duration = duration + 'ms'; // eslint-disable-line\n }\n for (var i = 0; i < this.length; i += 1) {\n var elStyle = this[i].style;\n elStyle.webkitTransitionDuration = duration;\n elStyle.transitionDuration = duration;\n }\n return this;\n}\n// Events\nfunction on() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var eventType = args[0],\n targetSelector = args[1],\n listener = args[2],\n capture = args[3];\n\n if (typeof args[1] === 'function') {\n eventType = args[0];\n listener = args[1];\n capture = args[2];\n\n targetSelector = undefined;\n }\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n var target = e.target;\n if (!target) return;\n var eventData = e.target.dom7EventData || [];\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n var _parents = $(target).parents(); // eslint-disable-line\n for (var k = 0; k < _parents.length; k += 1) {\n if ($(_parents[k]).is(targetSelector)) listener.apply(_parents[k], eventData);\n }\n }\n }\n function handleEvent(e) {\n var eventData = e && e.target ? e.target.dom7EventData || [] : [];\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n listener.apply(this, eventData);\n }\n var events = eventType.split(' ');\n var j = void 0;\n for (var i = 0; i < this.length; i += 1) {\n var el = this[i];\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n var event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener: listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n var _event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[_event]) el.dom7LiveListeners[_event] = [];\n el.dom7LiveListeners[_event].push({\n listener: listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(_event, handleLiveEvent, capture);\n }\n }\n }\n return this;\n}\nfunction off() {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var eventType = args[0],\n targetSelector = args[1],\n listener = args[2],\n capture = args[3];\n\n if (typeof args[1] === 'function') {\n eventType = args[0];\n listener = args[1];\n capture = args[2];\n\n targetSelector = undefined;\n }\n if (!capture) capture = false;\n\n var events = eventType.split(' ');\n for (var i = 0; i < events.length; i += 1) {\n var event = events[i];\n for (var j = 0; j < this.length; j += 1) {\n var el = this[j];\n var handlers = void 0;\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n if (handlers && handlers.length) {\n for (var k = handlers.length - 1; k >= 0; k -= 1) {\n var handler = handlers[k];\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n return this;\n}\nfunction once() {\n var dom = this;\n\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n var eventName = args[0],\n targetSelector = args[1],\n listener = args[2],\n capture = args[3];\n\n if (typeof args[1] === 'function') {\n eventName = args[0];\n listener = args[1];\n capture = args[2];\n\n targetSelector = undefined;\n }\n function onceHandler() {\n for (var _len4 = arguments.length, eventArgs = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n eventArgs[_key4] = arguments[_key4];\n }\n\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\nfunction trigger() {\n for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n var events = args[0].split(' ');\n var eventData = args[1];\n for (var i = 0; i < events.length; i += 1) {\n var event = events[i];\n for (var j = 0; j < this.length; j += 1) {\n var el = this[j];\n var evt = void 0;\n try {\n evt = new _ssrWindow.window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n } catch (e) {\n evt = _ssrWindow.document.createEvent('Event');\n evt.initEvent(event, true, true);\n evt.detail = eventData;\n }\n // eslint-disable-next-line\n el.dom7EventData = args.filter(function (data, dataIndex) {\n return dataIndex > 0;\n });\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n return this;\n}\nfunction transitionEnd(callback) {\n var events = ['webkitTransitionEnd', 'transitionend'];\n var dom = this;\n var i = void 0;\n function fireCallBack(e) {\n /* jshint validthis:true */\n if (e.target !== this) return;\n callback.call(this, e);\n for (i = 0; i < events.length; i += 1) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i += 1) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n}\nfunction animationEnd(callback) {\n var events = ['webkitAnimationEnd', 'animationend'];\n var dom = this;\n var i = void 0;\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n for (i = 0; i < events.length; i += 1) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i += 1) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n}\n// Sizing/Styles\nfunction width() {\n if (this[0] === _ssrWindow.window) {\n return _ssrWindow.window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n // eslint-disable-next-line\n var _styles = this.styles();\n return this[0].offsetWidth + parseFloat(_styles.getPropertyValue('margin-right')) + parseFloat(_styles.getPropertyValue('margin-left'));\n }\n return this[0].offsetWidth;\n }\n return null;\n}\nfunction height() {\n if (this[0] === _ssrWindow.window) {\n return _ssrWindow.window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n // eslint-disable-next-line\n var _styles2 = this.styles();\n return this[0].offsetHeight + parseFloat(_styles2.getPropertyValue('margin-top')) + parseFloat(_styles2.getPropertyValue('margin-bottom'));\n }\n return this[0].offsetHeight;\n }\n return null;\n}\nfunction offset() {\n if (this.length > 0) {\n var el = this[0];\n var box = el.getBoundingClientRect();\n var body = _ssrWindow.document.body;\n var clientTop = el.clientTop || body.clientTop || 0;\n var clientLeft = el.clientLeft || body.clientLeft || 0;\n var _scrollTop = el === _ssrWindow.window ? _ssrWindow.window.scrollY : el.scrollTop;\n var _scrollLeft = el === _ssrWindow.window ? _ssrWindow.window.scrollX : el.scrollLeft;\n return {\n top: box.top + _scrollTop - clientTop,\n left: box.left + _scrollLeft - clientLeft\n };\n }\n\n return null;\n}\nfunction hide() {\n for (var i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n return this;\n}\nfunction show() {\n for (var i = 0; i < this.length; i += 1) {\n var el = this[i];\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n if (_ssrWindow.window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n return this;\n}\nfunction styles() {\n if (this[0]) return _ssrWindow.window.getComputedStyle(this[0], null);\n return {};\n}\nfunction css(props, value) {\n var i = void 0;\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n if (this[0]) return _ssrWindow.window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n for (i = 0; i < this.length; i += 1) {\n // eslint-disable-next-line\n for (var _prop in props) {\n this[i].style[_prop] = props[_prop];\n }\n }\n return this;\n }\n }\n if (arguments.length === 2 && typeof props === 'string') {\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n return this;\n }\n return this;\n}\n\n// Dom manipulation\nfunction toArray() {\n var arr = [];\n for (var i = 0; i < this.length; i += 1) {\n arr.push(this[i]);\n }\n return arr;\n}\n// Iterate over the collection passing elements to `callback`\nfunction each(callback) {\n // Don't bother continuing without a callback\n if (!callback) return this;\n // Iterate over the current collection\n for (var i = 0; i < this.length; i += 1) {\n // If the callback returns false\n if (callback.call(this[i], i, this[i]) === false) {\n // End the loop early\n return this;\n }\n }\n // Return `this` to allow chained DOM operations\n return this;\n}\nfunction forEach(callback) {\n // Don't bother continuing without a callback\n if (!callback) return this;\n // Iterate over the current collection\n for (var i = 0; i < this.length; i += 1) {\n // If the callback returns false\n if (callback.call(this[i], this[i], i) === false) {\n // End the loop early\n return this;\n }\n }\n // Return `this` to allow chained DOM operations\n return this;\n}\nfunction filter(callback) {\n var matchedItems = [];\n var dom = this;\n for (var i = 0; i < dom.length; i += 1) {\n if (callback.call(dom[i], i, dom[i])) matchedItems.push(dom[i]);\n }\n return new Dom7(matchedItems);\n}\nfunction map(callback) {\n var modifiedItems = [];\n var dom = this;\n for (var i = 0; i < dom.length; i += 1) {\n modifiedItems.push(callback.call(dom[i], i, dom[i]));\n }\n return new Dom7(modifiedItems);\n}\n// eslint-disable-next-line\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : undefined;\n }\n\n for (var i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n return this;\n}\n// eslint-disable-next-line\nfunction text(text) {\n if (typeof text === 'undefined') {\n if (this[0]) {\n return this[0].textContent.trim();\n }\n return null;\n }\n\n for (var i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n return this;\n}\nfunction is(selector) {\n var el = this[0];\n var compareWith = void 0;\n var i = void 0;\n if (!el || typeof selector === 'undefined') return false;\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);else if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n\n compareWith = $(selector);\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n return false;\n } else if (selector === _ssrWindow.document) return el === _ssrWindow.document;else if (selector === _ssrWindow.window) return el === _ssrWindow.window;\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n return false;\n }\n return false;\n}\nfunction indexOf(el) {\n for (var i = 0; i < this.length; i += 1) {\n if (this[i] === el) return i;\n }\n return -1;\n}\nfunction index() {\n var child = this[0];\n var i = void 0;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\n// eslint-disable-next-line\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n var length = this.length;\n var returnIndex = void 0;\n if (index > length - 1) {\n return new Dom7([]);\n }\n if (index < 0) {\n returnIndex = length + index;\n if (returnIndex < 0) return new Dom7([]);\n return new Dom7([this[returnIndex]]);\n }\n return new Dom7([this[index]]);\n}\nfunction append() {\n var newChild = void 0;\n\n for (var k = 0; k < arguments.length; k += 1) {\n newChild = arguments.length <= k ? undefined : arguments[k];\n for (var i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n var tempDiv = _ssrWindow.document.createElement('div');\n tempDiv.innerHTML = newChild;\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (var j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n// eslint-disable-next-line\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\nfunction prepend(newChild) {\n var i = void 0;\n var j = void 0;\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n var tempDiv = _ssrWindow.document.createElement('div');\n tempDiv.innerHTML = newChild;\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n return this;\n}\n// eslint-disable-next-line\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\nfunction insertBefore(selector) {\n var before = $(selector);\n for (var i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (var j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\nfunction insertAfter(selector) {\n var after = $(selector);\n for (var i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (var j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return new Dom7([this[0].nextElementSibling]);\n }\n return new Dom7([]);\n }\n\n if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]);\n return new Dom7([]);\n }\n return new Dom7([]);\n}\nfunction nextAll(selector) {\n var nextEls = [];\n var el = this[0];\n if (!el) return new Dom7([]);\n while (el.nextElementSibling) {\n var _next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if ($(_next).is(selector)) nextEls.push(_next);\n } else nextEls.push(_next);\n el = _next;\n }\n return new Dom7(nextEls);\n}\nfunction prev(selector) {\n if (this.length > 0) {\n var el = this[0];\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return new Dom7([el.previousElementSibling]);\n }\n return new Dom7([]);\n }\n\n if (el.previousElementSibling) return new Dom7([el.previousElementSibling]);\n return new Dom7([]);\n }\n return new Dom7([]);\n}\nfunction prevAll(selector) {\n var prevEls = [];\n var el = this[0];\n if (!el) return new Dom7([]);\n while (el.previousElementSibling) {\n var _prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if ($(_prev).is(selector)) prevEls.push(_prev);\n } else prevEls.push(_prev);\n el = _prev;\n }\n return new Dom7(prevEls);\n}\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\nfunction parent(selector) {\n var parents = []; // eslint-disable-line\n for (var i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n return $(unique(parents));\n}\nfunction parents(selector) {\n var parents = []; // eslint-disable-line\n for (var i = 0; i < this.length; i += 1) {\n var _parent = this[i].parentNode; // eslint-disable-line\n while (_parent) {\n if (selector) {\n if ($(_parent).is(selector)) parents.push(_parent);\n } else {\n parents.push(_parent);\n }\n _parent = _parent.parentNode;\n }\n }\n return $(unique(parents));\n}\nfunction closest(selector) {\n var closest = this; // eslint-disable-line\n if (typeof selector === 'undefined') {\n return new Dom7([]);\n }\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n return closest;\n}\nfunction find(selector) {\n var foundElements = [];\n for (var i = 0; i < this.length; i += 1) {\n var found = this[i].querySelectorAll(selector);\n for (var j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n return new Dom7(foundElements);\n}\nfunction children(selector) {\n var children = []; // eslint-disable-line\n for (var i = 0; i < this.length; i += 1) {\n var childNodes = this[i].childNodes;\n\n for (var j = 0; j < childNodes.length; j += 1) {\n if (!selector) {\n if (childNodes[j].nodeType === 1) children.push(childNodes[j]);\n } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n return new Dom7(unique(children));\n}\nfunction remove() {\n for (var i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n return this;\n}\nfunction detach() {\n return this.remove();\n}\nfunction add() {\n var dom = this;\n var i = void 0;\n var j = void 0;\n\n for (var _len6 = arguments.length, args = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n for (i = 0; i < args.length; i += 1) {\n var toAdd = $(args[i]);\n for (j = 0; j < toAdd.length; j += 1) {\n dom[dom.length] = toAdd[j];\n dom.length += 1;\n }\n }\n return dom;\n}\nfunction empty() {\n for (var i = 0; i < this.length; i += 1) {\n var el = this[i];\n if (el.nodeType === 1) {\n for (var j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n el.textContent = '';\n }\n }\n return this;\n}\n\nfunction scrollTo() {\n for (var _len7 = arguments.length, args = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n\n var left = args[0],\n top = args[1],\n duration = args[2],\n easing = args[3],\n callback = args[4];\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n left = args[0];\n top = args[1];\n duration = args[2];\n callback = args[3];\n easing = args[4];\n }\n if (typeof easing === 'undefined') easing = 'swing';\n\n return this.each(function animate() {\n var el = this;\n var currentTop = void 0;\n var currentLeft = void 0;\n var maxTop = void 0;\n var maxLeft = void 0;\n var newTop = void 0;\n var newLeft = void 0;\n var scrollTop = void 0; // eslint-disable-line\n var scrollLeft = void 0; // eslint-disable-line\n var animateTop = top > 0 || top === 0;\n var animateLeft = left > 0 || left === 0;\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n if (animateTop) {\n currentTop = el.scrollTop;\n if (!duration) {\n el.scrollTop = top;\n }\n }\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n if (!duration) return;\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n var startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n function render() {\n var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date().getTime();\n\n if (startTime === null) {\n startTime = time;\n }\n var progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n var easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n var done = void 0;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n requestAnimationFrame(render);\n }\n requestAnimationFrame(render);\n });\n}\n// scrollTop(top, duration, easing, callback) {\nfunction scrollTop() {\n for (var _len8 = arguments.length, args = Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n args[_key8] = arguments[_key8];\n }\n\n var top = args[0],\n duration = args[1],\n easing = args[2],\n callback = args[3];\n\n if (args.length === 3 && typeof easing === 'function') {\n top = args[0];\n duration = args[1];\n callback = args[2];\n easing = args[3];\n }\n var dom = this;\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\nfunction scrollLeft() {\n for (var _len9 = arguments.length, args = Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n args[_key9] = arguments[_key9];\n }\n\n var left = args[0],\n duration = args[1],\n easing = args[2],\n callback = args[3];\n\n if (args.length === 3 && typeof easing === 'function') {\n left = args[0];\n duration = args[1];\n callback = args[2];\n easing = args[3];\n }\n var dom = this;\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\nfunction animate(initialProps, initialParams) {\n var els = this;\n var a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n }, initialParams),\n\n elements: els,\n animating: false,\n que: [],\n\n easingProgress: function easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n if (typeof easing === 'function') {\n return easing(progress);\n }\n return progress;\n },\n stop: function stop() {\n if (a.frameId) {\n cancelAnimationFrame(a.frameId);\n }\n a.animating = false;\n a.elements.each(function (index, el) {\n var element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n done: function done(complete) {\n a.animating = false;\n a.elements.each(function (index, el) {\n var element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n if (a.que.length > 0) {\n var que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n animate: function animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n var elements = [];\n\n // Define & Cache Initials & Units\n a.elements.each(function (index, el) {\n var initialFullValue = void 0;\n var initialValue = void 0;\n var unit = void 0;\n var finalValue = void 0;\n var finalFullValue = void 0;\n\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(function (prop) {\n initialFullValue = _ssrWindow.window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue: initialFullValue,\n initialValue: initialValue,\n unit: unit,\n finalValue: finalValue,\n finalFullValue: finalFullValue,\n currentValue: initialValue\n };\n });\n });\n\n var startTime = null;\n var time = void 0;\n var elementsDone = 0;\n var propsDone = 0;\n var done = void 0;\n var began = false;\n\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n var progress = void 0;\n var easeProgress = void 0;\n // let el;\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n if (startTime === null) {\n startTime = time;\n }\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(function (element) {\n var el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(function (prop) {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n var _el$prop = el[prop],\n initialValue = _el$prop.initialValue,\n finalValue = _el$prop.finalValue,\n unit = _el$prop.unit;\n\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n var currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n if (done) {\n a.done(params.complete);\n return;\n }\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return;\n // Then call\n a.frameId = requestAnimationFrame(render);\n }\n a.frameId = requestAnimationFrame(render);\n return a;\n }\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n var animateInstance = void 0;\n for (var i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n var els = this;\n for (var i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nvar noTrigger = 'resize scroll'.split(' ');\nfunction eventShortcut(name) {\n for (var _len10 = arguments.length, args = Array(_len10 > 1 ? _len10 - 1 : 0), _key10 = 1; _key10 < _len10; _key10++) {\n args[_key10 - 1] = arguments[_key10];\n }\n\n if (typeof args[0] === 'undefined') {\n for (var i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n return this;\n }\n return this.on.apply(this, [name].concat(args));\n}\n\nfunction click() {\n for (var _len11 = arguments.length, args = Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {\n args[_key11] = arguments[_key11];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['click'].concat(args));\n}\nfunction blur() {\n for (var _len12 = arguments.length, args = Array(_len12), _key12 = 0; _key12 < _len12; _key12++) {\n args[_key12] = arguments[_key12];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['blur'].concat(args));\n}\nfunction focus() {\n for (var _len13 = arguments.length, args = Array(_len13), _key13 = 0; _key13 < _len13; _key13++) {\n args[_key13] = arguments[_key13];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['focus'].concat(args));\n}\nfunction focusin() {\n for (var _len14 = arguments.length, args = Array(_len14), _key14 = 0; _key14 < _len14; _key14++) {\n args[_key14] = arguments[_key14];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['focusin'].concat(args));\n}\nfunction focusout() {\n for (var _len15 = arguments.length, args = Array(_len15), _key15 = 0; _key15 < _len15; _key15++) {\n args[_key15] = arguments[_key15];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['focusout'].concat(args));\n}\nfunction keyup() {\n for (var _len16 = arguments.length, args = Array(_len16), _key16 = 0; _key16 < _len16; _key16++) {\n args[_key16] = arguments[_key16];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['keyup'].concat(args));\n}\nfunction keydown() {\n for (var _len17 = arguments.length, args = Array(_len17), _key17 = 0; _key17 < _len17; _key17++) {\n args[_key17] = arguments[_key17];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['keydown'].concat(args));\n}\nfunction keypress() {\n for (var _len18 = arguments.length, args = Array(_len18), _key18 = 0; _key18 < _len18; _key18++) {\n args[_key18] = arguments[_key18];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['keypress'].concat(args));\n}\nfunction submit() {\n for (var _len19 = arguments.length, args = Array(_len19), _key19 = 0; _key19 < _len19; _key19++) {\n args[_key19] = arguments[_key19];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['submit'].concat(args));\n}\nfunction change() {\n for (var _len20 = arguments.length, args = Array(_len20), _key20 = 0; _key20 < _len20; _key20++) {\n args[_key20] = arguments[_key20];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['change'].concat(args));\n}\nfunction mousedown() {\n for (var _len21 = arguments.length, args = Array(_len21), _key21 = 0; _key21 < _len21; _key21++) {\n args[_key21] = arguments[_key21];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['mousedown'].concat(args));\n}\nfunction mousemove() {\n for (var _len22 = arguments.length, args = Array(_len22), _key22 = 0; _key22 < _len22; _key22++) {\n args[_key22] = arguments[_key22];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['mousemove'].concat(args));\n}\nfunction mouseup() {\n for (var _len23 = arguments.length, args = Array(_len23), _key23 = 0; _key23 < _len23; _key23++) {\n args[_key23] = arguments[_key23];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['mouseup'].concat(args));\n}\nfunction mouseenter() {\n for (var _len24 = arguments.length, args = Array(_len24), _key24 = 0; _key24 < _len24; _key24++) {\n args[_key24] = arguments[_key24];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['mouseenter'].concat(args));\n}\nfunction mouseleave() {\n for (var _len25 = arguments.length, args = Array(_len25), _key25 = 0; _key25 < _len25; _key25++) {\n args[_key25] = arguments[_key25];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['mouseleave'].concat(args));\n}\nfunction mouseout() {\n for (var _len26 = arguments.length, args = Array(_len26), _key26 = 0; _key26 < _len26; _key26++) {\n args[_key26] = arguments[_key26];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['mouseout'].concat(args));\n}\nfunction mouseover() {\n for (var _len27 = arguments.length, args = Array(_len27), _key27 = 0; _key27 < _len27; _key27++) {\n args[_key27] = arguments[_key27];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['mouseover'].concat(args));\n}\nfunction touchstart() {\n for (var _len28 = arguments.length, args = Array(_len28), _key28 = 0; _key28 < _len28; _key28++) {\n args[_key28] = arguments[_key28];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['touchstart'].concat(args));\n}\nfunction touchend() {\n for (var _len29 = arguments.length, args = Array(_len29), _key29 = 0; _key29 < _len29; _key29++) {\n args[_key29] = arguments[_key29];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['touchend'].concat(args));\n}\nfunction touchmove() {\n for (var _len30 = arguments.length, args = Array(_len30), _key30 = 0; _key30 < _len30; _key30++) {\n args[_key30] = arguments[_key30];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['touchmove'].concat(args));\n}\nfunction resize() {\n for (var _len31 = arguments.length, args = Array(_len31), _key31 = 0; _key31 < _len31; _key31++) {\n args[_key31] = arguments[_key31];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['resize'].concat(args));\n}\nfunction scroll() {\n for (var _len32 = arguments.length, args = Array(_len32), _key32 = 0; _key32 < _len32; _key32++) {\n args[_key32] = arguments[_key32];\n }\n\n return eventShortcut.bind(this).apply(undefined, ['scroll'].concat(args));\n}\n\nexports.$ = $;\nexports.addClass = addClass;\nexports.removeClass = removeClass;\nexports.hasClass = hasClass;\nexports.toggleClass = toggleClass;\nexports.attr = attr;\nexports.removeAttr = removeAttr;\nexports.prop = prop;\nexports.data = data;\nexports.removeData = removeData;\nexports.dataset = dataset;\nexports.val = val;\nexports.transform = transform;\nexports.transition = transition;\nexports.on = on;\nexports.off = off;\nexports.once = once;\nexports.trigger = trigger;\nexports.transitionEnd = transitionEnd;\nexports.animationEnd = animationEnd;\nexports.width = width;\nexports.outerWidth = outerWidth;\nexports.height = height;\nexports.outerHeight = outerHeight;\nexports.offset = offset;\nexports.hide = hide;\nexports.show = show;\nexports.styles = styles;\nexports.css = css;\nexports.toArray = toArray;\nexports.each = each;\nexports.forEach = forEach;\nexports.filter = filter;\nexports.map = map;\nexports.html = html;\nexports.text = text;\nexports.is = is;\nexports.indexOf = indexOf;\nexports.index = index;\nexports.eq = eq;\nexports.append = append;\nexports.appendTo = appendTo;\nexports.prepend = prepend;\nexports.prependTo = prependTo;\nexports.insertBefore = insertBefore;\nexports.insertAfter = insertAfter;\nexports.next = next;\nexports.nextAll = nextAll;\nexports.prev = prev;\nexports.prevAll = prevAll;\nexports.siblings = siblings;\nexports.parent = parent;\nexports.parents = parents;\nexports.closest = closest;\nexports.find = find;\nexports.children = children;\nexports.remove = remove;\nexports.detach = detach;\nexports.add = add;\nexports.empty = empty;\nexports.scrollTo = scrollTo;\nexports.scrollTop = scrollTop;\nexports.scrollLeft = scrollLeft;\nexports.animate = animate;\nexports.stop = stop;\nexports.click = click;\nexports.blur = blur;\nexports.focus = focus;\nexports.focusin = focusin;\nexports.focusout = focusout;\nexports.keyup = keyup;\nexports.keydown = keydown;\nexports.keypress = keypress;\nexports.submit = submit;\nexports.change = change;\nexports.mousedown = mousedown;\nexports.mousemove = mousemove;\nexports.mouseup = mouseup;\nexports.mouseenter = mouseenter;\nexports.mouseleave = mouseleave;\nexports.mouseout = mouseout;\nexports.mouseover = mouseover;\nexports.touchstart = touchstart;\nexports.touchend = touchend;\nexports.touchmove = touchmove;\nexports.resize = resize;\nexports.scroll = scroll;\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * SSR Window 2.0.0\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2020, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: May 12, 2020\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return obj !== null && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && 'constructor' in obj && obj.constructor === Object;\n}\nfunction extend(target, src) {\n if (target === void 0) {\n target = {};\n }\n if (src === void 0) {\n src = {};\n }\n Object.keys(src).forEach(function (key) {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nvar doc = typeof document !== 'undefined' ? document : {};\nvar ssrDocument = {\n body: {},\n addEventListener: function addEventListener() {},\n removeEventListener: function removeEventListener() {},\n activeElement: {\n blur: function blur() {},\n nodeName: ''\n },\n querySelector: function querySelector() {\n return null;\n },\n querySelectorAll: function querySelectorAll() {\n return [];\n },\n getElementById: function getElementById() {\n return null;\n },\n createEvent: function createEvent() {\n return {\n initEvent: function initEvent() {}\n };\n },\n createElement: function createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute: function setAttribute() {},\n getElementsByTagName: function getElementsByTagName() {\n return [];\n }\n };\n },\n createElementNS: function createElementNS() {\n return {};\n },\n importNode: function importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n }\n};\nextend(doc, ssrDocument);\n\nvar win = typeof window !== 'undefined' ? window : {};\nvar ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: ''\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n },\n history: {\n replaceState: function replaceState() {},\n pushState: function pushState() {},\n go: function go() {},\n back: function back() {}\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener: function addEventListener() {},\n removeEventListener: function removeEventListener() {},\n getComputedStyle: function getComputedStyle() {\n return {\n getPropertyValue: function getPropertyValue() {\n return '';\n }\n };\n },\n Image: function Image() {},\n Date: function Date() {},\n screen: {},\n setTimeout: function setTimeout() {},\n clearTimeout: function clearTimeout() {},\n matchMedia: function matchMedia() {\n return {};\n }\n};\nextend(win, ssrWindow);\n\nexports.document = doc;\nexports.extend = extend;\nexports.window = win;\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * SSR Window 1.0.1\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2018, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: July 18, 2018\n */\nvar doc = typeof document === 'undefined' ? {\n body: {},\n addEventListener: function addEventListener() {},\n removeEventListener: function removeEventListener() {},\n activeElement: {\n blur: function blur() {},\n nodeName: ''\n },\n querySelector: function querySelector() {\n return null;\n },\n querySelectorAll: function querySelectorAll() {\n return [];\n },\n getElementById: function getElementById() {\n return null;\n },\n createEvent: function createEvent() {\n return {\n initEvent: function initEvent() {}\n };\n },\n createElement: function createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute: function setAttribute() {},\n getElementsByTagName: function getElementsByTagName() {\n return [];\n }\n };\n },\n location: { hash: '' }\n} : document; // eslint-disable-line\n\nvar win = typeof window === 'undefined' ? {\n document: doc,\n navigator: {\n userAgent: ''\n },\n location: {},\n history: {},\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener: function addEventListener() {},\n removeEventListener: function removeEventListener() {},\n getComputedStyle: function getComputedStyle() {\n return {\n getPropertyValue: function getPropertyValue() {\n return '';\n }\n };\n },\n Image: function Image() {},\n Date: function Date() {},\n screen: {},\n setTimeout: function setTimeout() {},\n clearTimeout: function clearTimeout() {}\n} : window; // eslint-disable-line\n\nexports.window = win;\nexports.document = doc;\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar initSwiper = /** @class */ (function () {\r\n function initSwiper() {\r\n var Swiper = __webpack_require__(7).default;\r\n window.initSwiper = function (swiperId, swiperParams) {\r\n var swiperItem = document.getElementById(swiperId);\r\n var mySwiper = new Swiper(swiperItem, swiperParams);\r\n };\r\n }\r\n return initSwiper;\r\n}());\r\nexports.initSwiper = initSwiper;\r\nvar swiper = new initSwiper();\r\nexports.default = swiper;\r\n\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction enhanceEpiForms() {\r\n // grabs only nested text nodes\r\n function textNodesUnder(el) {\r\n var n, a = [], walk = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, null, false);\r\n while (n = walk.nextNode())\r\n a.push(n);\r\n return a;\r\n }\r\n var containers = Array.prototype.slice.call(document.querySelectorAll('.EPiServerForms'));\r\n containers.forEach(function (container) {\r\n var newWrapper = document.createElement('div');\r\n newWrapper.className = 'epi-form';\r\n container.parentNode.insertBefore(newWrapper, container);\r\n newWrapper.appendChild(container);\r\n var formChoiceLabels = Array.prototype.slice.call(container.querySelectorAll('.FormChoice:not(.FormChoice--Image) > label'));\r\n var formID = container.id || (Math.ceil(Math.random() * 1000));\r\n formChoiceLabels.forEach(function (fieldLabel, index) {\r\n var fieldInput = fieldLabel.querySelector('input');\r\n var fieldName = \"input-\" + formID + \"-\" + index;\r\n fieldLabel.parentNode.insertBefore(fieldInput, fieldLabel);\r\n fieldLabel.setAttribute('for', fieldName);\r\n fieldInput.id = fieldName;\r\n });\r\n });\r\n var formChoiceImageLabels = Array.prototype.slice.call(document.querySelectorAll('.EPiServerForms .FormChoice--Image > label'));\r\n formChoiceImageLabels.forEach(function (fieldLabel) {\r\n fieldLabel.classList.add('enhanced-fields');\r\n });\r\n var captchaRefreshBtn = document.querySelector('.FormCaptcha__Refresh');\r\n if (captchaRefreshBtn) {\r\n // Originally set to type=\"submit\" which caused user\r\n // experience issues \r\n captchaRefreshBtn.setAttribute('type', 'button');\r\n }\r\n var formTextboxLabels = Array.prototype.slice.call(document.querySelectorAll('.EPiServerForms .FormTextbox > label'));\r\n formTextboxLabels.forEach(function (formLabel) {\r\n if (formLabel.innerHTML.toLowerCase().indexOf('phone') > -1) {\r\n var formInputField = formLabel.parentElement.querySelector('input[type=\"text\"]');\r\n if (formInputField != null) {\r\n formInputField.addEventListener('input', function (e) {\r\n var input = e.target.value.replace(/\\D/g, '').match(/(\\d{0,3})(\\d{0,3})(\\d{0,4})/);\r\n e.target.value = !input[2] ? input[1] : '(' + input[1] + ') ' + input[2] + (input[3] ? '-' + input[3] : '');\r\n });\r\n }\r\n }\r\n });\r\n}\r\nexports.enhanceEpiForms = enhanceEpiForms;\r\n\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// global-bundle.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 8);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 552da664eb6c1f0ea980","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\n} catch(e) {\n\t// This works if the window reference is available\n\tif(typeof window === \"object\")\n\t\tg = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n\n// WEBPACK FOOTER //\n// (webpack)/buildin/global.js","/**\r\n These are global constants that you can import on to partials\r\n*/\r\nexport const GLOBAL_BODY = document.getElementsByTagName('body')[0];\r\nexport const GLOBAL_HTML = document.getElementsByTagName('html')[0];\r\nexport const UTILITY_NAV = document.getElementById('utility');\r\nexport const HEADER = document.getElementById('header');\r\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Static/javascript/modules/constants.ts","function nodeListToArray(nodes: NodeList): Array {\r\n return [].slice.call(nodes);\r\n}\r\n\r\nexport { nodeListToArray };\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Static/javascript/modules/nodelist-to-array.ts","import * as CONSTANTS from '../modules/constants';\r\n\r\nvar currentScroll;\r\n\r\nexport function lockBody() {\r\n currentScroll = window.pageYOffset;\r\n CONSTANTS.GLOBAL_BODY.classList.add('locked');\r\n CONSTANTS.GLOBAL_BODY.style.top = '-' + currentScroll + 'px';\r\n}\r\n\r\nexport function unlockBody() {\r\n CONSTANTS.GLOBAL_BODY.classList.remove('locked');\r\n window.scrollTo(0, currentScroll);\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Static/javascript/modules/lock-body.ts","/*!\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\n\n// WEBPACK FOOTER //\n// ./node_modules/get-size/get-size.js","/* global NodeList, Element, define */\n\n(function (global) {\n 'use strict';\n\n var FOCUSABLE_ELEMENTS = ['a[href]', 'area[href]', 'input:not([disabled])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex^=\"-\"])'];\n var TAB_KEY = 9;\n var ESCAPE_KEY = 27;\n var focusedBeforeDialog;\n\n /**\n * Define the constructor to instantiate a dialog\n *\n * @constructor\n * @param {Element} node\n * @param {(NodeList | Element | string)} targets\n */\n function A11yDialog (node, targets) {\n // Prebind the functions that will be bound in addEventListener and\n // removeEventListener to avoid losing references\n this._show = this.show.bind(this);\n this._hide = this.hide.bind(this);\n this._maintainFocus = this._maintainFocus.bind(this);\n this._bindKeypress = this._bindKeypress.bind(this);\n\n // Keep a reference of the node on the instance\n this.node = node;\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n // Initialise everything needed for the dialog to work properly\n this.create(targets);\n }\n\n /**\n * Set up everything necessary for the dialog to be functioning\n *\n * @param {(NodeList | Element | string)} targets\n * @return {this}\n */\n A11yDialog.prototype.create = function (targets) {\n // Keep a collection of nodes to disable/enable when toggling the dialog\n this._targets = this._targets || collect(targets) || getSiblings(this.node);\n\n // Make sure the dialog element is disabled on load, and that the `shown`\n // property is synced with its value\n this.node.setAttribute('aria-hidden', true);\n this.shown = false;\n\n // Keep a collection of dialog openers, each of which will be bound a click\n // event listener to open the dialog\n this._openers = $$('[data-a11y-dialog-show=\"' + this.node.id + '\"]');\n this._openers.forEach(function (opener) {\n opener.addEventListener('click', this._show);\n }.bind(this));\n\n // Keep a collection of dialog closers, each of which will be bound a click\n // event listener to close the dialog\n this._closers = $$('[data-a11y-dialog-hide]', this.node)\n .concat($$('[data-a11y-dialog-hide=\"' + this.node.id + '\"]'));\n this._closers.forEach(function (closer) {\n closer.addEventListener('click', this._hide);\n }.bind(this));\n\n // Execute all callbacks registered for the `create` event\n this._fire('create');\n\n return this;\n };\n\n /**\n * Show the dialog element, disable all the targets (siblings), trap the\n * current focus within it, listen for some specific key presses and fire all\n * registered callbacks for `show` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.show = function (event) {\n // If the dialog is already open, abort\n if (this.shown) {\n return this;\n }\n\n this.shown = true;\n this.node.removeAttribute('aria-hidden');\n\n // Iterate over the targets to disable them by setting their `aria-hidden`\n // attribute to `true`; in case they already have this attribute, keep a\n // reference of their original value to be able to restore it later\n this._targets.forEach(function (target) {\n var original = target.getAttribute('aria-hidden');\n\n if (original) {\n target.setAttribute('data-a11y-dialog-original', original);\n }\n\n target.setAttribute('aria-hidden', 'true');\n });\n\n // Keep a reference to the currently focused element to be able to restore\n // it later, then set the focus to the first focusable child of the dialog\n // element\n focusedBeforeDialog = document.activeElement;\n setFocusToFirstItem(this.node);\n\n // Bind a focus event listener to the body element to make sure the focus\n // stays trapped inside the dialog while open, and start listening for some\n // specific key presses (TAB and ESC)\n document.body.addEventListener('focus', this._maintainFocus, true);\n document.addEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `show` event\n this._fire('show', event);\n\n return this;\n };\n\n /**\n * Hide the dialog element, enable all the targets (siblings), restore the\n * focus to the previously active element, stop listening for some specific\n * key presses and fire all registered callbacks for `hide` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.hide = function (event) {\n // If the dialog is already closed, abort\n if (!this.shown) {\n return this;\n }\n\n this.shown = false;\n this.node.setAttribute('aria-hidden', 'true');\n\n // Iterate over the targets to enable them by remove their `aria-hidden`\n // attribute or resetting them to their initial value\n this._targets.forEach(function (target) {\n var original = target.getAttribute('data-a11y-dialog-original');\n\n if (original) {\n target.setAttribute('aria-hidden', original);\n target.removeAttribute('data-a11y-dialog-original');\n } else {\n target.removeAttribute('aria-hidden');\n }\n });\n\n // If their was a focused element before the dialog was opened, restore the\n // focus back to it\n if (focusedBeforeDialog) {\n focusedBeforeDialog.focus();\n }\n\n // Remove the focus event listener to the body element and stop listening\n // for specific key presses\n document.body.removeEventListener('focus', this._maintainFocus, true);\n document.removeEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `hide` event\n this._fire('hide', event);\n\n return this;\n };\n\n /**\n * Destroy the current instance (after making sure the dialog has been hidden)\n * and remove all associated listeners from dialog openers and closers\n *\n * @return {this}\n */\n A11yDialog.prototype.destroy = function () {\n // Hide the dialog to avoid destroying an open instance\n this.hide();\n\n // Remove the click event listener from all dialog openers\n this._openers.forEach(function (opener) {\n opener.removeEventListener('click', this._show);\n }.bind(this));\n\n // Remove the click event listener from all dialog closers\n this._closers.forEach(function (closer) {\n closer.removeEventListener('click', this._hide);\n }.bind(this));\n\n // Execute all callbacks registered for the `destroy` event\n this._fire('destroy');\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n return this;\n };\n\n /**\n * Register a new callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.on = function (type, handler) {\n if (typeof this._listeners[type] === 'undefined') {\n this._listeners[type] = [];\n }\n\n this._listeners[type].push(handler);\n\n return this;\n };\n\n /**\n * Unregister an existing callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.off = function (type, handler) {\n var index = this._listeners[type].indexOf(handler);\n\n if (index > -1) {\n this._listeners[type].splice(index, 1);\n }\n\n return this;\n };\n\n /**\n * Iterate over all registered handlers for given type and call them all with\n * the dialog element as first argument, event as second argument (if any).\n *\n * @access private\n * @param {string} type\n * @param {Event} event\n */\n A11yDialog.prototype._fire = function (type, event) {\n var listeners = this._listeners[type] || [];\n\n listeners.forEach(function (listener) {\n listener(this.node, event);\n }.bind(this));\n };\n\n /**\n * Private event handler used when listening to some specific key presses\n * (namely ESCAPE and TAB)\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._bindKeypress = function (event) {\n // If the dialog is shown and the ESCAPE key is being pressed, prevent any\n // further effects from the ESCAPE key and hide the dialog\n if (this.shown && event.which === ESCAPE_KEY) {\n event.preventDefault();\n this.hide();\n }\n\n // If the dialog is shown and the TAB key is being pressed, make sure the\n // focus stays trapped within the dialog element\n if (this.shown && event.which === TAB_KEY) {\n trapTabKey(this.node, event);\n }\n };\n\n /**\n * Private event handler used when making sure the focus stays within the\n * currently open dialog\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._maintainFocus = function (event) {\n // If the dialog is shown and the focus is not within the dialog element,\n // move it back to its first focusable child\n if (this.shown && !this.node.contains(event.target)) {\n setFocusToFirstItem(this.node);\n }\n };\n\n /**\n * Convert a NodeList into an array\n *\n * @param {NodeList} collection\n * @return {Array}\n */\n function toArray (collection) {\n return Array.prototype.slice.call(collection);\n }\n\n /**\n * Query the DOM for nodes matching the given selector, scoped to context (or\n * the whole document)\n *\n * @param {String} selector\n * @param {Element} [context = document]\n * @return {Array}\n */\n function $$ (selector, context) {\n return toArray((context || document).querySelectorAll(selector));\n }\n\n /**\n * Return an array of Element based on given argument (NodeList, Element or\n * string representing a selector)\n *\n * @param {(NodeList | Element | string)} target\n * @return {Array}\n */\n function collect (target) {\n if (NodeList.prototype.isPrototypeOf(target)) {\n return toArray(target);\n }\n\n if (Element.prototype.isPrototypeOf(target)) {\n return [target];\n }\n\n if (typeof target === 'string') {\n return $$(target);\n }\n }\n\n /**\n * Set the focus to the first focusable child of the given element\n *\n * @param {Element} node\n */\n function setFocusToFirstItem (node) {\n var focusableChildren = getFocusableChildren(node);\n\n if (focusableChildren.length) {\n focusableChildren[0].focus();\n }\n }\n\n /**\n * Get the focusable children of the given element\n *\n * @param {Element} node\n * @return {Array}\n */\n function getFocusableChildren (node) {\n return $$(FOCUSABLE_ELEMENTS.join(','), node).filter(function (child) {\n return !!(child.offsetWidth || child.offsetHeight || child.getClientRects().length);\n });\n }\n\n /**\n * Trap the focus inside the given element\n *\n * @param {Element} node\n * @param {Event} event\n */\n function trapTabKey (node, event) {\n var focusableChildren = getFocusableChildren(node);\n var focusedItemIndex = focusableChildren.indexOf(document.activeElement);\n\n // If the SHIFT key is being pressed while tabbing (moving backwards) and\n // the currently focused item is the first one, move the focus to the last\n // focusable item from the dialog element\n if (event.shiftKey && focusedItemIndex === 0) {\n focusableChildren[focusableChildren.length - 1].focus();\n event.preventDefault();\n // If the SHIFT key is not being pressed (moving forwards) and the currently\n // focused item is the last one, move the focus to the first focusable item\n // from the dialog element\n } else if (!event.shiftKey && focusedItemIndex === focusableChildren.length - 1) {\n focusableChildren[0].focus();\n event.preventDefault();\n }\n }\n\n /**\n * Retrieve siblings from given element\n *\n * @param {Element} node\n * @return {Array}\n */\n function getSiblings (node) {\n var nodes = toArray(node.parentNode.childNodes);\n var siblings = nodes.filter(function (node) {\n return node.nodeType === 1;\n });\n\n siblings.splice(siblings.indexOf(node), 1);\n\n return siblings;\n }\n\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = A11yDialog;\n } else if (typeof define === 'function' && define.amd) {\n define('A11yDialog', [], function () {\n return A11yDialog;\n });\n } else if (typeof global === 'object') {\n global.A11yDialog = A11yDialog;\n }\n}(typeof global !== 'undefined' ? global : window));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/a11y-dialog/a11y-dialog.js","/**\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\n\n// WEBPACK FOOTER //\n// ./node_modules/ev-emitter/ev-emitter.js","/**\n * Swiper 4.2.2\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * http://www.idangero.us/swiper/\n *\n * Copyright 2014-2018 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: April 1, 2018\n */\n\nimport { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, data, transform, transition, on, off, trigger, transitionEnd, outerWidth, outerHeight, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, remove, add, styles } from 'dom7/dist/dom7.modular';\nimport { window, document } from 'ssr-window';\n\nconst Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n data,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n remove,\n add,\n styles,\n};\n\nObject.keys(Methods).forEach((methodName) => {\n $.fn[methodName] = Methods[methodName];\n});\n\nconst Utils = {\n deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach((key) => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n },\n nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n },\n now() {\n return Date.now();\n },\n getTranslate(el, axis = 'x') {\n let matrix;\n let curTransform;\n let transformMatrix;\n\n const curStyle = window.getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n },\n parseUrlQuery(url) {\n const query = {};\n let urlToParse = url || window.location.href;\n let i;\n let params;\n let param;\n let length;\n if (typeof urlToParse === 'string' && urlToParse.length) {\n urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\\S*\\?/, '') : '';\n params = urlToParse.split('&').filter(paramsPart => paramsPart !== '');\n length = params.length;\n\n for (i = 0; i < length; i += 1) {\n param = params[i].replace(/#\\S+/g, '').split('=');\n query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';\n }\n }\n return query;\n },\n isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n },\n extend(...args) {\n const to = Object(args[0]);\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null) {\n const keysArray = Object.keys(Object(nextSource));\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n Utils.extend(to[nextKey], nextSource[nextKey]);\n } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n Utils.extend(to[nextKey], nextSource[nextKey]);\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n },\n};\n\nconst Support = (function Support() {\n const testDiv = document.createElement('div');\n return {\n touch: (window.Modernizr && window.Modernizr.touch === true) || (function checkTouch() {\n return !!(('ontouchstart' in window) || (window.DocumentTouch && document instanceof window.DocumentTouch));\n }()),\n\n pointerEvents: !!(window.navigator.pointerEnabled || window.PointerEvent),\n prefixedPointerEvents: !!window.navigator.msPointerEnabled,\n\n transition: (function checkTransition() {\n const style = testDiv.style;\n return ('transition' in style || 'webkitTransition' in style || 'MozTransition' in style);\n }()),\n transforms3d: (window.Modernizr && window.Modernizr.csstransforms3d === true) || (function checkTransforms3d() {\n const style = testDiv.style;\n return ('webkitPerspective' in style || 'MozPerspective' in style || 'OPerspective' in style || 'MsPerspective' in style || 'perspective' in style);\n }()),\n\n flexbox: (function checkFlexbox() {\n const style = testDiv.style;\n const styles$$1 = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' ');\n for (let i = 0; i < styles$$1.length; i += 1) {\n if (styles$$1[i] in style) return true;\n }\n return false;\n }()),\n\n observer: (function checkObserver() {\n return ('MutationObserver' in window || 'WebkitMutationObserver' in window);\n }()),\n\n passiveListener: (function checkPassiveListener() {\n let supportsPassive = false;\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n },\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {\n // No support\n }\n return supportsPassive;\n }()),\n\n gestures: (function checkGestures() {\n return 'ongesturestart' in window;\n }()),\n };\n}());\n\nclass SwiperClass {\n constructor(params = {}) {\n const self = this;\n self.params = params;\n\n // Events\n self.eventsListeners = {};\n\n if (self.params && self.params.on) {\n Object.keys(self.params.on).forEach((eventName) => {\n self.on(eventName, self.params.on[eventName]);\n });\n }\n }\n on(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach((event) => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n }\n once(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n function onceHandler(...args) {\n handler.apply(self, args);\n self.off(events, onceHandler);\n }\n return self.on(events, onceHandler, priority);\n }\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach((event) => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else {\n self.eventsListeners[event].forEach((eventHandler, index$$1) => {\n if (eventHandler === handler) {\n self.eventsListeners[event].splice(index$$1, 1);\n }\n });\n }\n });\n return self;\n }\n emit(...args) {\n const self = this;\n if (!self.eventsListeners) return self;\n let events;\n let data$$1;\n let context;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data$$1 = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data$$1 = args[0].data;\n context = args[0].context || self;\n }\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach((event) => {\n if (self.eventsListeners && self.eventsListeners[event]) {\n const handlers = [];\n self.eventsListeners[event].forEach((eventHandler) => {\n handlers.push(eventHandler);\n });\n handlers.forEach((eventHandler) => {\n eventHandler.apply(context, data$$1);\n });\n }\n });\n return self;\n }\n useModulesParams(instanceParams) {\n const instance = this;\n if (!instance.modules) return;\n Object.keys(instance.modules).forEach((moduleName) => {\n const module = instance.modules[moduleName];\n // Extend params\n if (module.params) {\n Utils.extend(instanceParams, module.params);\n }\n });\n }\n useModules(modulesParams = {}) {\n const instance = this;\n if (!instance.modules) return;\n Object.keys(instance.modules).forEach((moduleName) => {\n const module = instance.modules[moduleName];\n const moduleParams = modulesParams[moduleName] || {};\n // Extend instance methods and props\n if (module.instance) {\n Object.keys(module.instance).forEach((modulePropName) => {\n const moduleProp = module.instance[modulePropName];\n if (typeof moduleProp === 'function') {\n instance[modulePropName] = moduleProp.bind(instance);\n } else {\n instance[modulePropName] = moduleProp;\n }\n });\n }\n // Add event listeners\n if (module.on && instance.on) {\n Object.keys(module.on).forEach((moduleEventName) => {\n instance.on(moduleEventName, module.on[moduleEventName]);\n });\n }\n\n // Module create callback\n if (module.create) {\n module.create.bind(instance)(moduleParams);\n }\n });\n }\n static set components(components) {\n const Class = this;\n if (!Class.use) return;\n Class.use(components);\n }\n static installModule(module, ...params) {\n const Class = this;\n if (!Class.prototype.modules) Class.prototype.modules = {};\n const name = module.name || (`${Object.keys(Class.prototype.modules).length}_${Utils.now()}`);\n Class.prototype.modules[name] = module;\n // Prototype\n if (module.proto) {\n Object.keys(module.proto).forEach((key) => {\n Class.prototype[key] = module.proto[key];\n });\n }\n // Class\n if (module.static) {\n Object.keys(module.static).forEach((key) => {\n Class[key] = module.static[key];\n });\n }\n // Callback\n if (module.install) {\n module.install.apply(Class, params);\n }\n return Class;\n }\n static use(module, ...params) {\n const Class = this;\n if (Array.isArray(module)) {\n module.forEach(m => Class.installModule(m));\n return Class;\n }\n return Class.installModule(module, ...params);\n }\n}\n\nfunction updateSize () {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n if (typeof swiper.params.width !== 'undefined') {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined') {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);\n height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);\n\n Utils.extend(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height,\n });\n}\n\nfunction updateSlides () {\n const swiper = this;\n const params = swiper.params;\n\n const {\n $wrapperEl, size: swiperSize, rtlTranslate: rtl, wrongRTL,\n } = swiper;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n const previousSlidesLength = slidesLength;\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.snapGrid.length;\n\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index$$1 = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n if (rtl) slides.css({ marginLeft: '', marginTop: '' });\n else slides.css({ marginRight: '', marginBottom: '' });\n\n let slidesNumberEvenToRows;\n if (params.slidesPerColumn > 1) {\n if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n }\n if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);\n }\n }\n\n // Calc slides\n let slideSize;\n const slidesPerColumn = params.slidesPerColumn;\n const slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n const numFullColumns = slidesPerRow - ((params.slidesPerColumn * slidesPerRow) - slidesLength);\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n if (params.slidesPerColumn > 1) {\n // Set slides order\n let newSlideOrderIndex;\n let column;\n let row;\n if (params.slidesPerColumnFill === 'column') {\n column = Math.floor(i / slidesPerColumn);\n row = i - (column * slidesPerColumn);\n if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {\n row += 1;\n if (row >= slidesPerColumn) {\n row = 0;\n column += 1;\n }\n }\n newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);\n slide\n .css({\n '-webkit-box-ordinal-group': newSlideOrderIndex,\n '-moz-box-ordinal-group': newSlideOrderIndex,\n '-ms-flex-order': newSlideOrderIndex,\n '-webkit-order': newSlideOrderIndex,\n order: newSlideOrderIndex,\n });\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - (row * slidesPerRow);\n }\n slide\n .css(\n `margin-${swiper.isHorizontal() ? 'top' : 'left'}`,\n (row !== 0 && params.spaceBetween) && (`${params.spaceBetween}px`)\n )\n .attr('data-swiper-column', column)\n .attr('data-swiper-row', row);\n }\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n const slideStyles = window.getComputedStyle(slide[0], null);\n if (swiper.isHorizontal()) {\n slideSize = slide[0].getBoundingClientRect().width +\n parseFloat(slideStyles.getPropertyValue('margin-left')) +\n parseFloat(slideStyles.getPropertyValue('margin-right'));\n } else {\n slideSize = slide[0].getBoundingClientRect().height +\n parseFloat(slideStyles.getPropertyValue('margin-top')) +\n parseFloat(slideStyles.getPropertyValue('margin-bottom'));\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n if (swiper.isHorizontal()) {\n slides[i].style.width = `${slideSize}px`;\n } else {\n slides[i].style.height = `${slideSize}px`;\n }\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;\n if (i === 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if ((index$$1) % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if ((index$$1) % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n\n prevSlideSize = slideSize;\n\n index$$1 += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n let newSlidesGrid;\n\n if (\n rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n }\n if (!Support.flexbox || params.setWrapperSize) {\n if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });\n }\n\n if (params.slidesPerColumn > 1) {\n swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });\n if (params.centeredSlides) {\n newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(snapGrid[i]);\n }\n snapGrid = newSlidesGrid;\n }\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(snapGrid[i]);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n if (swiper.isHorizontal()) {\n if (rtl) slides.css({ marginLeft: `${spaceBetween}px` });\n else slides.css({ marginRight: `${spaceBetween}px` });\n } else slides.css({ marginBottom: `${spaceBetween}px` });\n }\n\n Utils.extend(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid,\n });\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress || params.watchSlidesVisibility) {\n swiper.updateSlidesOffset();\n }\n}\n\nfunction updateAutoHeight (speed) {\n const swiper = this;\n const activeSlides = [];\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index$$1 = swiper.activeIndex + i;\n if (index$$1 > swiper.slides.length) break;\n activeSlides.push(swiper.slides.eq(index$$1)[0]);\n }\n } else {\n activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}\n\nfunction updateSlidesOffset () {\n const swiper = this;\n const slides = swiper.slides;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n}\n\nfunction updateSlidesProgress (translate = this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n\n const { slides, rtlTranslate: rtl } = swiper;\n\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n\n // Visible Slides\n slides.removeClass(params.slideVisibleClass);\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n const slideProgress =\n (\n (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset\n ) / (slide.swiperSlideSize + params.spaceBetween);\n if (params.watchSlidesVisibility) {\n const slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible =\n (slideBefore >= 0 && slideBefore < swiper.size) ||\n (slideAfter > 0 && slideAfter <= swiper.size) ||\n (slideBefore <= 0 && slideAfter >= swiper.size);\n if (isVisible) {\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n }\n slide.progress = rtl ? -slideProgress : slideProgress;\n }\n}\n\nfunction updateProgress (translate = this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let { progress, isBeginning, isEnd } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / (translatesDiff);\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n Utils.extend(swiper, {\n progress,\n isBeginning,\n isEnd,\n });\n\n if (params.watchSlidesProgress || params.watchSlidesVisibility) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n}\n\nfunction updateSlidesClasses () {\n const swiper = this;\n\n const {\n slides, params, $wrapperEl, activeIndex, realIndex,\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n\n slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n\n let activeSlide;\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n } else {\n activeSlide = slides.eq(activeIndex);\n }\n\n // Active classes\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`)\n .addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl\n .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`)\n .addClass(params.slideDuplicateActiveClass);\n }\n }\n // Next Slide\n let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n }\n // Prev Slide\n let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`)\n .addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl\n .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`)\n .addClass(params.slideDuplicateNextClass);\n }\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`)\n .addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl\n .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`)\n .addClass(params.slideDuplicatePrevClass);\n }\n }\n}\n\nfunction updateActiveIndex (newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid, snapGrid, params, activeIndex: previousIndex, realIndex: previousRealIndex, snapIndex: previousSnapIndex,\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n if (typeof activeIndex === 'undefined') {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n snapIndex = Math.floor(activeIndex / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n\n // Get real index\n const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n\n Utils.extend(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex,\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n swiper.emit('slideChange');\n}\n\nfunction updateClickedSlide (e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e.target).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) slideFound = true;\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = $(slide).index();\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}\n\nvar update = {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide,\n};\n\nfunction getTranslate (axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n\n const {\n params, rtlTranslate: rtl, translate, $wrapperEl,\n } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n let currentTranslate = Utils.getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n\n return currentTranslate || 0;\n}\n\nfunction setTranslate (translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl, params, $wrapperEl, progress,\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (!params.virtualTranslate) {\n if (Support.transforms3d) $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n else $wrapperEl.transform(`translate(${x}px, ${y}px)`);\n }\n\n swiper.translate = swiper.isHorizontal() ? x : y;\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / (translatesDiff);\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n}\n\nfunction minTranslate () {\n return (-this.snapGrid[0]);\n}\n\nfunction maxTranslate () {\n return (-this.snapGrid[this.snapGrid.length - 1]);\n}\n\nvar translate = {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n};\n\nfunction setTransition (duration, byController) {\n const swiper = this;\n\n swiper.$wrapperEl.transition(duration);\n\n swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionStart (runCallbacks = true, direction) {\n const swiper = this;\n const { activeIndex, params, previousIndex } = swiper;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';\n else if (activeIndex < previousIndex) dir = 'prev';\n else dir = 'reset';\n }\n\n swiper.emit('transitionStart');\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit('slideResetTransitionStart');\n return;\n }\n swiper.emit('slideChangeTransitionStart');\n if (dir === 'next') {\n swiper.emit('slideNextTransitionStart');\n } else {\n swiper.emit('slidePrevTransitionStart');\n }\n }\n}\n\nfunction transitionEnd$1 (runCallbacks = true, direction) {\n const swiper = this;\n const { activeIndex, previousIndex } = swiper;\n swiper.animating = false;\n swiper.setTransition(0);\n\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';\n else if (activeIndex < previousIndex) dir = 'prev';\n else dir = 'reset';\n }\n\n swiper.emit('transitionEnd');\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit('slideResetTransitionEnd');\n return;\n }\n swiper.emit('slideChangeTransitionEnd');\n if (dir === 'next') {\n swiper.emit('slideNextTransitionEnd');\n } else {\n swiper.emit('slidePrevTransitionEnd');\n }\n }\n}\n\nvar transition$1 = {\n setTransition,\n transitionStart,\n transitionEnd: transitionEnd$1,\n};\n\nfunction slideTo (index$$1 = 0, speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n let slideIndex = index$$1;\n if (slideIndex < 0) slideIndex = 0;\n\n const {\n params, snapGrid, slidesGrid, previousIndex, activeIndex, rtlTranslate: rtl, $wrapperEl,\n } = swiper;\n if (swiper.animating && params.preventIntercationOnTransition) {\n return false;\n }\n\n let snapIndex = Math.floor(slideIndex / params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n const translate = -snapGrid[snapIndex];\n\n // Update progress\n swiper.updateProgress(translate);\n\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n let direction;\n if (slideIndex > activeIndex) direction = 'next';\n else if (slideIndex < activeIndex) direction = 'prev';\n else direction = 'reset';\n\n\n // Update Index\n if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n\n if (speed === 0 || !Support.transition) {\n swiper.setTransition(0);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (!swiper.animating) {\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd(runCallbacks, direction);\n });\n }\n }\n\n return true;\n}\n\nfunction slideToLoop (index$$1 = 0, speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n let newIndex = index$$1;\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext (speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const { params, animating } = swiper;\n if (params.loop) {\n if (animating) return false;\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev (speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params, animating, snapGrid, slidesGrid, rtlTranslate,\n } = swiper;\n\n if (params.loop) {\n if (animating) return false;\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n const currentSnap = snapGrid[snapGrid.indexOf(translate)];\n const prevSnap = snapGrid[snapGrid.indexOf(translate) - 1];\n let prevIndex;\n\n if (prevSnap) {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset (speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest (speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n let index$$1 = swiper.activeIndex;\n const snapIndex = Math.floor(index$$1 / swiper.params.slidesPerGroup);\n\n if (snapIndex < swiper.snapGrid.length - 1) {\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n\n if ((translate - currentSnap) > (nextSnap - currentSnap) / 2) {\n index$$1 = swiper.params.slidesPerGroup;\n }\n }\n\n return swiper.slideTo(index$$1, speed, runCallbacks, internal);\n}\n\nfunction slideToClickedSlide () {\n const swiper = this;\n const { params, $wrapperEl } = swiper;\n\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (\n (slideToIndex < swiper.loopedSlides - (slidesPerView / 2)) ||\n (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))\n ) {\n swiper.loopFix();\n slideToIndex = $wrapperEl\n .children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`)\n .eq(0)\n .index();\n\n Utils.nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl\n .children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`)\n .eq(0)\n .index();\n\n Utils.nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}\n\nvar slide = {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide,\n};\n\nfunction loopCreate () {\n const swiper = this;\n const { params, $wrapperEl } = swiper;\n // Remove duplicated slides\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n\n let slides = $wrapperEl.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n $wrapperEl.append(blankNode);\n }\n slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n\n swiper.loopedSlides = parseInt(params.loopedSlides || params.slidesPerView, 10);\n swiper.loopedSlides += params.loopAdditionalSlides;\n if (swiper.loopedSlides > slides.length) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((index$$1, el) => {\n const slide = $(el);\n if (index$$1 < swiper.loopedSlides) appendSlides.push(el);\n if (index$$1 < slides.length && index$$1 >= slides.length - swiper.loopedSlides) prependSlides.push(el);\n slide.attr('data-swiper-slide-index', index$$1);\n });\n for (let i = 0; i < appendSlides.length; i += 1) {\n $wrapperEl.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $wrapperEl.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n}\n\nfunction loopFix () {\n const swiper = this;\n const {\n params, activeIndex, slides, loopedSlides, allowSlidePrev, allowSlideNext, snapGrid, rtlTranslate: rtl,\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate();\n\n\n // Fix For Negative Oversliding\n if (activeIndex < loopedSlides) {\n newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if ((params.slidesPerView === 'auto' && activeIndex >= loopedSlides * 2) || (activeIndex > slides.length - (params.slidesPerView * 2))) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n}\n\nfunction loopDestroy () {\n const swiper = this;\n const { $wrapperEl, params, slides } = swiper;\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n slides.removeAttr('data-swiper-slide-index');\n}\n\nvar loop = {\n loopCreate,\n loopFix,\n loopDestroy,\n};\n\nfunction setGrabCursor (moving) {\n const swiper = this;\n if (Support.touch || !swiper.params.simulateTouch) return;\n const el = swiper.el;\n el.style.cursor = 'move';\n el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}\n\nfunction unsetGrabCursor () {\n const swiper = this;\n if (Support.touch) return;\n swiper.el.style.cursor = '';\n}\n\nvar grabCursor = {\n setGrabCursor,\n unsetGrabCursor,\n};\n\nfunction appendSlide (slides) {\n const swiper = this;\n const { $wrapperEl, params } = swiper;\n if (params.loop) {\n swiper.loopDestroy();\n }\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n } else {\n $wrapperEl.append(slides);\n }\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n}\n\nfunction prependSlide (slides) {\n const swiper = this;\n const { params, $wrapperEl, activeIndex } = swiper;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n let newActiveIndex = activeIndex + 1;\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.prepend(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n } else {\n $wrapperEl.prepend(slides);\n }\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n swiper.slideTo(newActiveIndex, 0, false);\n}\n\nfunction removeSlide (slidesIndexes) {\n const swiper = this;\n const { params, $wrapperEl, activeIndex } = swiper;\n\n if (params.loop) {\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n let newActiveIndex = activeIndex;\n let indexToRemove;\n\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for (let i = 0; i < slidesIndexes.length; i += 1) {\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}\n\nfunction removeAllSlides () {\n const swiper = this;\n\n const slidesIndexes = [];\n for (let i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n swiper.removeSlide(slidesIndexes);\n}\n\nvar manipulation = {\n appendSlide,\n prependSlide,\n removeSlide,\n removeAllSlides,\n};\n\nconst Device = (function Device() {\n const ua = window.navigator.userAgent;\n\n const device = {\n ios: false,\n android: false,\n androidChrome: false,\n desktop: false,\n windows: false,\n iphone: false,\n ipod: false,\n ipad: false,\n cordova: window.cordova || window.phonegap,\n phonegap: window.cordova || window.phonegap,\n };\n\n const windows = ua.match(/(Windows Phone);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n const ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n\n\n // Windows\n if (windows) {\n device.os = 'windows';\n device.osVersion = windows[2];\n device.windows = true;\n }\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.osVersion = android[2];\n device.android = true;\n device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n // iOS\n if (iphone && !ipod) {\n device.osVersion = iphone[2].replace(/_/g, '.');\n device.iphone = true;\n }\n if (ipad) {\n device.osVersion = ipad[2].replace(/_/g, '.');\n device.ipad = true;\n }\n if (ipod) {\n device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n device.iphone = true;\n }\n // iOS 8+ changed UA\n if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\n if (device.osVersion.split('.')[0] === '10') {\n device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\n }\n }\n\n // Desktop\n device.desktop = !(device.os || device.android || device.webView);\n\n // Webview\n device.webView = (iphone || ipad || ipod) && ua.match(/.*AppleWebKit(?!.*Safari)/i);\n\n // Minimal UI\n if (device.os && device.os === 'ios') {\n const osVersionArr = device.osVersion.split('.');\n const metaViewport = document.querySelector('meta[name=\"viewport\"]');\n device.minimalUi =\n !device.webView &&\n (ipod || iphone) &&\n (osVersionArr[0] * 1 === 7 ? osVersionArr[1] * 1 >= 1 : osVersionArr[0] * 1 > 7) &&\n metaViewport && metaViewport.getAttribute('content').indexOf('minimal-ui') >= 0;\n }\n\n // Pixel Ratio\n device.pixelRatio = window.devicePixelRatio || 1;\n\n // Export object\n return device;\n}());\n\nfunction onTouchStart (event) {\n const swiper = this;\n const data$$1 = swiper.touchEventsData;\n const { params, touches } = swiper;\n if (swiper.animating && params.preventIntercationOnTransition) {\n return;\n }\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n data$$1.isTouchEvent = e.type === 'touchstart';\n if (!data$$1.isTouchEvent && 'which' in e && e.which === 3) return;\n if (data$$1.isTouched && data$$1.isMoved) return;\n if (params.noSwiping && $(e.target).closest(params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`)[0]) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!$(e).closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n\n if (\n Device.ios &&\n !Device.cordova &&\n params.iOSEdgeSwipeDetection &&\n (startX <= params.iOSEdgeSwipeThreshold) &&\n (startX >= window.screen.width - params.iOSEdgeSwipeThreshold)\n ) {\n return;\n }\n\n Utils.extend(data$$1, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined,\n });\n\n touches.startX = startX;\n touches.startY = startY;\n data$$1.touchStartTime = Utils.now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data$$1.allowThresholdMove = false;\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n if ($(e.target).is(data$$1.formElements)) preventDefault = false;\n if (\n document.activeElement &&\n $(document.activeElement).is(data$$1.formElements) &&\n document.activeElement !== e.target\n ) {\n document.activeElement.blur();\n }\n if (preventDefault && swiper.allowTouchMove) {\n e.preventDefault();\n }\n }\n swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove (event) {\n const swiper = this;\n const data$$1 = swiper.touchEventsData;\n const { params, touches, rtlTranslate: rtl } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (!data$$1.isTouched) {\n if (data$$1.startMoving && data$$1.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n if (data$$1.isTouchEvent && e.type === 'mousemove') return;\n const pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n // isMoved = true;\n swiper.allowClick = false;\n if (data$$1.isTouched) {\n Utils.extend(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n });\n data$$1.touchStartTime = Utils.now();\n }\n return;\n }\n if (data$$1.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (\n (pageY < touches.startY && swiper.translate <= swiper.maxTranslate()) ||\n (pageY > touches.startY && swiper.translate >= swiper.minTranslate())\n ) {\n data$$1.isTouched = false;\n data$$1.isMoved = false;\n return;\n }\n } else if (\n (pageX < touches.startX && swiper.translate <= swiper.maxTranslate()) ||\n (pageX > touches.startX && swiper.translate >= swiper.minTranslate())\n ) {\n return;\n }\n }\n if (data$$1.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data$$1.formElements)) {\n data$$1.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data$$1.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n\n touches.currentX = pageX;\n touches.currentY = pageY;\n\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n\n if (typeof data$$1.isScrolling === 'undefined') {\n let touchAngle;\n if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) {\n data$$1.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if ((diffX * diffX) + (diffY * diffY) >= 25) {\n touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;\n data$$1.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle);\n }\n }\n }\n if (data$$1.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data$$1.startMoving = true;\n }\n }\n if (data$$1.isScrolling) {\n data$$1.isTouched = false;\n return;\n }\n if (!data$$1.startMoving) {\n return;\n }\n swiper.allowClick = false;\n e.preventDefault();\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data$$1.isMoved) {\n if (params.loop) {\n swiper.loopFix();\n }\n data$$1.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n data$$1.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n swiper.emit('sliderMove', e);\n data$$1.isMoved = true;\n\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data$$1.currentTranslate = diff + data$$1.startTranslate;\n\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if ((diff > 0 && data$$1.currentTranslate > swiper.minTranslate())) {\n disableParentSwiper = false;\n if (params.resistance) data$$1.currentTranslate = (swiper.minTranslate() - 1) + ((-swiper.minTranslate() + data$$1.startTranslate + diff) ** resistanceRatio);\n } else if (diff < 0 && data$$1.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data$$1.currentTranslate = (swiper.maxTranslate() + 1) - ((swiper.maxTranslate() - data$$1.startTranslate - diff) ** resistanceRatio);\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data$$1.currentTranslate < data$$1.startTranslate) {\n data$$1.currentTranslate = data$$1.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data$$1.currentTranslate > data$$1.startTranslate) {\n data$$1.currentTranslate = data$$1.startTranslate;\n }\n\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data$$1.allowThresholdMove) {\n if (!data$$1.allowThresholdMove) {\n data$$1.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data$$1.currentTranslate = data$$1.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data$$1.currentTranslate = data$$1.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger) return;\n\n // Update active index in free mode\n if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode) {\n // Velocity\n if (data$$1.velocities.length === 0) {\n data$$1.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data$$1.touchStartTime,\n });\n }\n data$$1.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: Utils.now(),\n });\n }\n // Update progress\n swiper.updateProgress(data$$1.currentTranslate);\n // Update translate\n swiper.setTranslate(data$$1.currentTranslate);\n}\n\nfunction onTouchEnd (event) {\n const swiper = this;\n const data$$1 = swiper.touchEventsData;\n\n const {\n params, touches, rtlTranslate: rtl, $wrapperEl, slidesGrid, snapGrid,\n } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (data$$1.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data$$1.allowTouchCallbacks = false;\n if (!data$$1.isTouched) {\n if (data$$1.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data$$1.isMoved = false;\n data$$1.startMoving = false;\n return;\n }\n // Return Grab Cursor\n if (params.grabCursor && data$$1.isMoved && data$$1.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = Utils.now();\n const timeDiff = touchEndTime - data$$1.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n swiper.updateClickedSlide(e);\n swiper.emit('tap', e);\n if (timeDiff < 300 && (touchEndTime - data$$1.lastClickTime) > 300) {\n if (data$$1.clickTimeout) clearTimeout(data$$1.clickTimeout);\n data$$1.clickTimeout = Utils.nextTick(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.emit('click', e);\n }, 300);\n }\n if (timeDiff < 300 && (touchEndTime - data$$1.lastClickTime) < 300) {\n if (data$$1.clickTimeout) clearTimeout(data$$1.clickTimeout);\n swiper.emit('doubleTap', e);\n }\n }\n\n data$$1.lastClickTime = Utils.now();\n Utils.nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (!data$$1.isTouched || !data$$1.isMoved || !swiper.swipeDirection || touches.diff === 0 || data$$1.currentTranslate === data$$1.startTranslate) {\n data$$1.isTouched = false;\n data$$1.isMoved = false;\n data$$1.startMoving = false;\n return;\n }\n data$$1.isTouched = false;\n data$$1.isMoved = false;\n data$$1.startMoving = false;\n\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data$$1.currentTranslate;\n }\n\n if (params.freeMode) {\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n } else if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n return;\n }\n\n if (params.freeModeMomentum) {\n if (data$$1.velocities.length > 1) {\n const lastMoveEvent = data$$1.velocities.pop();\n const velocityEvent = data$$1.velocities.pop();\n\n const distance = lastMoveEvent.position - velocityEvent.position;\n const time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {\n swiper.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n swiper.velocity *= params.freeModeMomentumVelocityRatio;\n\n data$$1.velocities.length = 0;\n let momentumDuration = 1000 * params.freeModeMomentumRatio;\n const momentumDistance = swiper.velocity * momentumDuration;\n\n let newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n\n let doBounce = false;\n let afterBouncePosition;\n const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n let needsLoopFix;\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeModeMomentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data$$1.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeModeMomentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data$$1.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeModeSticky) {\n let nextSlide;\n for (let j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n newPosition = -newPosition;\n }\n if (needsLoopFix) {\n swiper.once('transitionEnd', () => {\n swiper.loopFix();\n });\n }\n // Fix duration\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n } else if (params.freeModeSticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (params.freeModeMomentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed || !data$$1.allowMomentumBounce) return;\n swiper.emit('momentumBounce');\n\n swiper.setTransition(params.speed);\n swiper.setTranslate(afterBouncePosition);\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n });\n } else if (swiper.velocity) {\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n if (!swiper.animating) {\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeModeSticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n return;\n }\n\n // Find current slide\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += params.slidesPerGroup) {\n if (typeof slidesGrid[i + params.slidesPerGroup] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + params.slidesPerGroup]) {\n stopIndex = i;\n groupSize = slidesGrid[i + params.slidesPerGroup] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + params.slidesPerGroup);\n else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > (1 - params.longSwipesRatio)) swiper.slideTo(stopIndex + params.slidesPerGroup);\n else swiper.slideTo(stopIndex);\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(stopIndex + params.slidesPerGroup);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(stopIndex);\n }\n }\n}\n\nfunction onResize () {\n const swiper = this;\n\n const { params, el } = swiper;\n\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const { allowSlideNext, allowSlidePrev, snapGrid } = swiper;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n\n swiper.updateSize();\n swiper.updateSlides();\n\n if (params.freeMode) {\n const newTranslate = Math.min(Math.max(swiper.translate, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n swiper.updateSlidesClasses();\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}\n\nfunction onClick (e) {\n const swiper = this;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}\n\nfunction attachEvents() {\n const swiper = this;\n const {\n params, touchEvents, el, wrapperEl,\n } = swiper;\n\n {\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n const target = params.touchEventsTarget === 'container' ? el : wrapperEl;\n const capture = !!params.nested;\n\n // Touch Events\n {\n if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n target.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n document.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n document.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n } else {\n if (Support.touch) {\n const passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n target.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n target.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture } : capture);\n target.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n }\n if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n target.addEventListener('mousedown', swiper.onTouchStart, false);\n document.addEventListener('mousemove', swiper.onTouchMove, capture);\n document.addEventListener('mouseup', swiper.onTouchEnd, false);\n }\n }\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n target.addEventListener('click', swiper.onClick, true);\n }\n }\n\n // Resize handler\n swiper.on('resize observerUpdate', onResize, true);\n}\n\nfunction detachEvents() {\n const swiper = this;\n\n const {\n params, touchEvents, el, wrapperEl,\n } = swiper;\n\n const target = params.touchEventsTarget === 'container' ? el : wrapperEl;\n const capture = !!params.nested;\n\n // Touch Events\n {\n if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n target.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n document.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n document.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n } else {\n if (Support.touch) {\n const passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n target.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n target.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n target.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n }\n if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n target.removeEventListener('mousedown', swiper.onTouchStart, false);\n document.removeEventListener('mousemove', swiper.onTouchMove, capture);\n document.removeEventListener('mouseup', swiper.onTouchEnd, false);\n }\n }\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n target.removeEventListener('click', swiper.onClick, true);\n }\n }\n\n // Resize handler\n swiper.off('resize observerUpdate', onResize);\n}\n\nvar events = {\n attachEvents,\n detachEvents,\n};\n\nfunction setBreakpoint () {\n const swiper = this;\n const { activeIndex, loopedSlides = 0, params } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) return;\n // Set breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints);\n if (breakpoint && swiper.currentBreakpoint !== breakpoint) {\n const breakPointsParams = breakpoint in breakpoints ? breakpoints[breakpoint] : swiper.originalParams;\n const needsReLoop = params.loop && (breakPointsParams.slidesPerView !== params.slidesPerView);\n\n Utils.extend(swiper.params, breakPointsParams);\n\n Utils.extend(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n });\n\n swiper.currentBreakpoint = breakpoint;\n\n if (needsReLoop) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);\n }\n swiper.emit('breakpoint', breakPointsParams);\n }\n}\n\nfunction getBreakpoint (breakpoints) {\n // Get breakpoint for window width\n if (!breakpoints) return undefined;\n let breakpoint = false;\n const points = [];\n Object.keys(breakpoints).forEach((point) => {\n points.push(point);\n });\n points.sort((a, b) => parseInt(a, 10) - parseInt(b, 10));\n for (let i = 0; i < points.length; i += 1) {\n const point = points[i];\n if (point >= window.innerWidth && !breakpoint) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\n\nvar breakpoints = { setBreakpoint, getBreakpoint };\n\nconst Browser = (function Browser() {\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n }\n return {\n isIE: !!window.navigator.userAgent.match(/Trident/g) || !!window.navigator.userAgent.match(/MSIE/g),\n isSafari: isSafari(),\n isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),\n };\n}());\n\nfunction addClasses () {\n const swiper = this;\n const {\n classNames, params, rtl, $el,\n } = swiper;\n const suffixes = [];\n\n suffixes.push(params.direction);\n\n if (params.freeMode) {\n suffixes.push('free-mode');\n }\n if (!Support.flexbox) {\n suffixes.push('no-flexbox');\n }\n if (params.autoHeight) {\n suffixes.push('autoheight');\n }\n if (rtl) {\n suffixes.push('rtl');\n }\n if (params.slidesPerColumn > 1) {\n suffixes.push('multirow');\n }\n if (Device.android) {\n suffixes.push('android');\n }\n if (Device.ios) {\n suffixes.push('ios');\n }\n // WP8 Touch Events Fix\n if (Browser.isIE && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n suffixes.push(`wp8-${params.direction}`);\n }\n\n suffixes.forEach((suffix) => {\n classNames.push(params.containerModifierClass + suffix);\n });\n\n $el.addClass(classNames.join(' '));\n}\n\nfunction removeClasses () {\n const swiper = this;\n const { $el, classNames } = swiper;\n\n $el.removeClass(classNames.join(' '));\n}\n\nvar classes = { addClasses, removeClasses };\n\nfunction loadImage (imageEl, src, srcset, sizes, checkForComplete, callback) {\n let image;\n function onReady() {\n if (callback) callback();\n }\n if (!imageEl.complete || !checkForComplete) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n if (sizes) {\n image.sizes = sizes;\n }\n if (srcset) {\n image.srcset = srcset;\n }\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n}\n\nfunction preloadImages () {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(\n imageEl,\n imageEl.currentSrc || imageEl.getAttribute('src'),\n imageEl.srcset || imageEl.getAttribute('srcset'),\n imageEl.sizes || imageEl.getAttribute('sizes'),\n true,\n onReady\n );\n }\n}\n\nvar images = {\n loadImage,\n preloadImages,\n};\n\nfunction checkOverflow() {\n const swiper = this;\n const wasLocked = swiper.isLocked;\n\n swiper.isLocked = swiper.snapGrid.length === 1;\n swiper.allowSlideNext = !swiper.isLocked;\n swiper.allowSlidePrev = !swiper.isLocked;\n\n // events\n if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n swiper.navigation.update();\n }\n}\n\nvar checkOverflow$1 = { checkOverflow };\n\nvar defaults = {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'container',\n initialSlide: 0,\n speed: 300,\n //\n preventIntercationOnTransition: false,\n\n // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n iOSEdgeSwipeDetection: false,\n iOSEdgeSwipeThreshold: 20,\n\n // Free mode\n freeMode: false,\n freeModeMomentum: true,\n freeModeMomentumRatio: 1,\n freeModeMomentumBounce: true,\n freeModeMomentumBounceRatio: 1,\n freeModeMomentumVelocityRatio: 1,\n freeModeSticky: false,\n freeModeMinimumVelocity: 0.02,\n\n // Autoheight\n autoHeight: false,\n\n // Set wrapper width\n setWrapperSize: false,\n\n // Virtual Translate\n virtualTranslate: false,\n\n // Effects\n effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerColumnFill: 'column',\n slidesPerGroup: 1,\n centeredSlides: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\n normalizeSlideIndex: true,\n\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: false,\n\n // Round length\n roundLengths: false,\n\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: true,\n touchReleaseOnEdges: false,\n\n // Unique Navigation Elements\n uniqueNavElements: true,\n\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n\n // Progress\n watchSlidesProgress: false,\n watchSlidesVisibility: false,\n\n // Cursor\n grabCursor: false,\n\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopFillGroupWithBlank: false,\n\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null, // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n\n // Passive Listeners\n passiveListeners: true,\n\n // NS\n containerModifierClass: 'swiper-container-', // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n\n // Callbacks\n runCallbacksOnInit: true,\n};\n\nconst prototypes = {\n update,\n translate,\n transition: transition$1,\n slide,\n loop,\n grabCursor,\n manipulation,\n events,\n breakpoints,\n checkOverflow: checkOverflow$1,\n classes,\n images,\n};\n\nconst extendedDefaults = {};\n\nclass Swiper extends SwiperClass {\n constructor(...args) {\n let el;\n let params;\n if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n\n params = Utils.extend({}, params);\n if (el && !params.el) params.el = el;\n\n super(params);\n\n Object.keys(prototypes).forEach((prototypeGroup) => {\n Object.keys(prototypes[prototypeGroup]).forEach((protoMethod) => {\n if (!Swiper.prototype[protoMethod]) {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n }\n });\n });\n\n // Swiper Instance\n const swiper = this;\n if (typeof swiper.modules === 'undefined') {\n swiper.modules = {};\n }\n Object.keys(swiper.modules).forEach((moduleName) => {\n const module = swiper.modules[moduleName];\n if (module.params) {\n const moduleParamName = Object.keys(module.params)[0];\n const moduleParams = module.params[moduleParamName];\n if (typeof moduleParams !== 'object') return;\n if (!(moduleParamName in params && 'enabled' in moduleParams)) return;\n if (params[moduleParamName] === true) {\n params[moduleParamName] = { enabled: true };\n }\n if (\n typeof params[moduleParamName] === 'object' &&\n !('enabled' in params[moduleParamName])\n ) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = { enabled: false };\n }\n });\n\n // Extend defaults with modules params\n const swiperParams = Utils.extend({}, defaults);\n swiper.useModulesParams(swiperParams);\n\n // Extend defaults with passed params\n swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = Utils.extend({}, swiper.params);\n swiper.passedParams = Utils.extend({}, params);\n\n // Save Dom lib\n swiper.$ = $;\n\n // Find el\n const $el = $(swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return undefined;\n }\n\n if ($el.length > 1) {\n const swipers = [];\n $el.each((index$$1, containerEl) => {\n const newParams = Utils.extend({}, params, { el: containerEl });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n }\n\n el.swiper = swiper;\n $el.data('swiper', swiper);\n\n // Find Wrapper\n const $wrapperEl = $el.children(`.${swiper.params.wrapperClass}`);\n\n // Extend Swiper\n Utils.extend(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n\n // Classes\n classNames: [],\n\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // RTL\n rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n\n //\n isBeginning: true,\n isEnd: false,\n\n // Props\n translate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n\n // Touch Events\n touchEvents: (function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend'];\n let desktop = ['mousedown', 'mousemove', 'mouseup'];\n if (Support.pointerEvents) {\n desktop = ['pointerdown', 'pointermove', 'pointerup'];\n } else if (Support.prefixedPointerEvents) {\n desktop = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp'];\n }\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2],\n };\n return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }()),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n formElements: 'input, select, option, textarea, button, video',\n // Last click time\n lastClickTime: Utils.now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined,\n },\n\n // Clicks\n allowClick: true,\n\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0,\n },\n\n // Images\n imagesToLoad: [],\n imagesLoaded: 0,\n\n });\n\n // Install Modules\n swiper.useModules();\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n return swiper;\n }\n slidesPerViewDynamic() {\n const swiper = this;\n const {\n params, slides, slidesGrid, size: swiperSize, activeIndex,\n } = swiper;\n let spv = 1;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slidesGrid[i] - slidesGrid[activeIndex] < swiperSize) {\n spv += 1;\n }\n }\n }\n return spv;\n }\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const { snapGrid, params } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (swiper.params.freeMode) {\n setTranslate();\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n init() {\n const swiper = this;\n if (swiper.initialized) return;\n\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);\n }\n\n // Attach events\n swiper.attachEvents();\n\n // Init Flag\n swiper.initialized = true;\n\n // Emit\n swiper.emit('init');\n }\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params, $el, $wrapperEl, slides,\n } = swiper;\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n if (slides && slides.length) {\n slides\n .removeClass([\n params.slideVisibleClass,\n params.slideActiveClass,\n params.slideNextClass,\n params.slidePrevClass,\n ].join(' '))\n .removeAttr('style')\n .removeAttr('data-swiper-slide-index')\n .removeAttr('data-swiper-column')\n .removeAttr('data-swiper-row');\n }\n }\n\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach((eventName) => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n swiper.$el.data('swiper', null);\n Utils.deleteProps(swiper);\n }\n swiper.destroyed = true;\n }\n static extendDefaults(newDefaults) {\n Utils.extend(extendedDefaults, newDefaults);\n }\n static get extendedDefaults() {\n return extendedDefaults;\n }\n static get defaults() {\n return defaults;\n }\n static get Class() {\n return SwiperClass;\n }\n static get $() {\n return $;\n }\n}\n\nvar Device$1 = {\n name: 'device',\n proto: {\n device: Device,\n },\n static: {\n device: Device,\n },\n};\n\nvar Support$1 = {\n name: 'support',\n proto: {\n support: Support,\n },\n static: {\n support: Support,\n },\n};\n\nvar Browser$1 = {\n name: 'browser',\n proto: {\n browser: Browser,\n },\n static: {\n browser: Browser,\n },\n};\n\nvar Resize = {\n name: 'resize',\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n resize: {\n resizeHandler() {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n swiper.emit('beforeResize');\n swiper.emit('resize');\n },\n orientationChangeHandler() {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n swiper.emit('orientationchange');\n },\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n // Emit resize\n window.addEventListener('resize', swiper.resize.resizeHandler);\n\n // Emit orientationchange\n window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n },\n destroy() {\n const swiper = this;\n window.removeEventListener('resize', swiper.resize.resizeHandler);\n window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n },\n },\n};\n\nconst Observer = {\n func: window.MutationObserver || window.WebkitMutationObserver,\n attach(target, options = {}) {\n const swiper = this;\n\n const ObserverFunc = Observer.func;\n const observer = new ObserverFunc((mutations) => {\n mutations.forEach((mutation) => {\n swiper.emit('observerUpdate', mutation);\n });\n });\n\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData,\n });\n\n swiper.observer.observers.push(observer);\n },\n init() {\n const swiper = this;\n if (!Support.observer || !swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n for (let i = 0; i < containerParents.length; i += 1) {\n swiper.observer.attach(containerParents[i]);\n }\n }\n // Observe container\n swiper.observer.attach(swiper.$el[0], { childList: false });\n\n // Observe wrapper\n swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });\n },\n destroy() {\n const swiper = this;\n swiper.observer.observers.forEach((observer) => {\n observer.disconnect();\n });\n swiper.observer.observers = [];\n },\n};\n\nvar Observer$1 = {\n name: 'observer',\n params: {\n observer: false,\n observeParents: false,\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n observer: {\n init: Observer.init.bind(swiper),\n attach: Observer.attach.bind(swiper),\n destroy: Observer.destroy.bind(swiper),\n observers: [],\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n swiper.observer.init();\n },\n destroy() {\n const swiper = this;\n swiper.observer.destroy();\n },\n },\n};\n\nconst Virtual = {\n update(force) {\n const swiper = this;\n const { slidesPerView, slidesPerGroup, centeredSlides } = swiper.params;\n const {\n from: previousFrom,\n to: previousTo,\n slides,\n slidesGrid: previousSlidesGrid,\n renderSlide,\n offset: previousOffset,\n } = swiper.virtual;\n swiper.updateActiveIndex();\n const activeIndex = swiper.activeIndex || 0;\n\n let offsetProp;\n if (swiper.rtlTranslate) offsetProp = 'right';\n else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n\n let slidesAfter;\n let slidesBefore;\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup;\n slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup;\n } else {\n slidesAfter = slidesPerView + (slidesPerGroup - 1);\n slidesBefore = slidesPerGroup;\n }\n const from = Math.max((activeIndex || 0) - slidesBefore, 0);\n const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n const offset$$1 = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n\n Utils.extend(swiper.virtual, {\n from,\n to,\n offset: offset$$1,\n slidesGrid: swiper.slidesGrid,\n });\n\n function onRendered() {\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n if (swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n }\n\n if (previousFrom === from && previousTo === to && !force) {\n if (swiper.slidesGrid !== previousSlidesGrid && offset$$1 !== previousOffset) {\n swiper.slides.css(offsetProp, `${offset$$1}px`);\n }\n swiper.updateProgress();\n return;\n }\n if (swiper.params.virtual.renderExternal) {\n swiper.params.virtual.renderExternal.call(swiper, {\n offset: offset$$1,\n from,\n to,\n slides: (function getSlides() {\n const slidesToRender = [];\n for (let i = from; i <= to; i += 1) {\n slidesToRender.push(slides[i]);\n }\n return slidesToRender;\n }()),\n });\n onRendered();\n return;\n }\n const prependIndexes = [];\n const appendIndexes = [];\n if (force) {\n swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();\n } else {\n for (let i = previousFrom; i <= previousTo; i += 1) {\n if (i < from || i > to) {\n swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${i}\"]`).remove();\n }\n }\n }\n for (let i = 0; i < slides.length; i += 1) {\n if (i >= from && i <= to) {\n if (typeof previousTo === 'undefined' || force) {\n appendIndexes.push(i);\n } else {\n if (i > previousTo) appendIndexes.push(i);\n if (i < previousFrom) prependIndexes.push(i);\n }\n }\n }\n appendIndexes.forEach((index$$1) => {\n swiper.$wrapperEl.append(renderSlide(slides[index$$1], index$$1));\n });\n prependIndexes.sort((a, b) => a < b).forEach((index$$1) => {\n swiper.$wrapperEl.prepend(renderSlide(slides[index$$1], index$$1));\n });\n swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset$$1}px`);\n onRendered();\n },\n renderSlide(slide, index$$1) {\n const swiper = this;\n const params = swiper.params.virtual;\n if (params.cache && swiper.virtual.cache[index$$1]) {\n return swiper.virtual.cache[index$$1];\n }\n const $slideEl = params.renderSlide\n ? $(params.renderSlide.call(swiper, slide, index$$1))\n : $(`
    ${slide}
    `);\n if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index$$1);\n if (params.cache) swiper.virtual.cache[index$$1] = $slideEl;\n return $slideEl;\n },\n appendSlide(slide) {\n const swiper = this;\n swiper.virtual.slides.push(slide);\n swiper.virtual.update(true);\n },\n prependSlide(slide) {\n const swiper = this;\n swiper.virtual.slides.unshift(slide);\n if (swiper.params.virtual.cache) {\n const cache = swiper.virtual.cache;\n const newCache = {};\n Object.keys(cache).forEach((cachedIndex) => {\n newCache[cachedIndex + 1] = cache[cachedIndex];\n });\n swiper.virtual.cache = newCache;\n }\n swiper.virtual.update(true);\n swiper.slideNext(0);\n },\n};\n\nvar Virtual$1 = {\n name: 'virtual',\n params: {\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderSlide: null,\n renderExternal: null,\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n virtual: {\n update: Virtual.update.bind(swiper),\n appendSlide: Virtual.appendSlide.bind(swiper),\n prependSlide: Virtual.prependSlide.bind(swiper),\n renderSlide: Virtual.renderSlide.bind(swiper),\n slides: swiper.params.virtual.slides,\n cache: {},\n },\n });\n },\n on: {\n beforeInit() {\n const swiper = this;\n if (!swiper.params.virtual.enabled) return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n const overwriteParams = {\n watchSlidesProgress: true,\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n\n swiper.virtual.update();\n },\n setTranslate() {\n const swiper = this;\n if (!swiper.params.virtual.enabled) return;\n swiper.virtual.update();\n },\n },\n};\n\nconst Keyboard = {\n handle(event) {\n const swiper = this;\n const { rtlTranslate: rtl } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n const kc = e.keyCode || e.charCode;\n // Directions locks\n if (!swiper.allowSlideNext && ((swiper.isHorizontal() && kc === 39) || (swiper.isVertical() && kc === 40))) {\n return false;\n }\n if (!swiper.allowSlidePrev && ((swiper.isHorizontal() && kc === 37) || (swiper.isVertical() && kc === 38))) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n if (swiper.params.keyboard.onlyInViewport && (kc === 37 || kc === 39 || kc === 38 || kc === 40)) {\n let inView = false;\n // Check that swiper should be inside of visible area of window\n if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {\n return undefined;\n }\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = swiper.$el.offset();\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + swiper.width, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + swiper.height],\n [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height],\n ];\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n if (\n point[0] >= 0 && point[0] <= windowWidth &&\n point[1] >= 0 && point[1] <= windowHeight\n ) {\n inView = true;\n }\n }\n if (!inView) return undefined;\n }\n if (swiper.isHorizontal()) {\n if (kc === 37 || kc === 39) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if ((kc === 39 && !rtl) || (kc === 37 && rtl)) swiper.slideNext();\n if ((kc === 37 && !rtl) || (kc === 39 && rtl)) swiper.slidePrev();\n } else {\n if (kc === 38 || kc === 40) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (kc === 40) swiper.slideNext();\n if (kc === 38) swiper.slidePrev();\n }\n swiper.emit('keyPress', kc);\n return undefined;\n },\n enable() {\n const swiper = this;\n if (swiper.keyboard.enabled) return;\n $(document).on('keydown', swiper.keyboard.handle);\n swiper.keyboard.enabled = true;\n },\n disable() {\n const swiper = this;\n if (!swiper.keyboard.enabled) return;\n $(document).off('keydown', swiper.keyboard.handle);\n swiper.keyboard.enabled = false;\n },\n};\n\nvar Keyboard$1 = {\n name: 'keyboard',\n params: {\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n keyboard: {\n enabled: false,\n enable: Keyboard.enable.bind(swiper),\n disable: Keyboard.disable.bind(swiper),\n handle: Keyboard.handle.bind(swiper),\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n if (swiper.params.keyboard.enabled) {\n swiper.keyboard.enable();\n }\n },\n destroy() {\n const swiper = this;\n if (swiper.keyboard.enabled) {\n swiper.keyboard.disable();\n }\n },\n },\n};\n\nfunction isEventSupported() {\n const eventName = 'onwheel';\n let isSupported = eventName in document;\n\n if (!isSupported) {\n const element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported &&\n document.implementation &&\n document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true\n ) {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n}\nconst Mousewheel = {\n lastScrollTime: Utils.now(),\n event: (function getEvent() {\n if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';\n return isEventSupported() ? 'wheel' : 'mousewheel';\n }()),\n normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n\n let sX = 0;\n let sY = 0; // spinX, spinY\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in e) {\n sY = e.detail;\n }\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) { // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else { // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = (pX < 1) ? -1 : 1;\n }\n if (pY && !sY) {\n sY = (pY < 1) ? -1 : 1;\n }\n\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY,\n };\n },\n handleMouseEnter() {\n const swiper = this;\n swiper.mouseEntered = true;\n },\n handleMouseLeave() {\n const swiper = this;\n swiper.mouseEntered = false;\n },\n handle(event) {\n let e = event;\n const swiper = this;\n const params = swiper.params.mousewheel;\n\n if (!swiper.mouseEntered && !params.releaseOnEdges) return true;\n\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n\n const data$$1 = Mousewheel.normalize(e);\n\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data$$1.pixelX) > Math.abs(data$$1.pixelY)) delta = data$$1.pixelX * rtlFactor;\n else return true;\n } else if (Math.abs(data$$1.pixelY) > Math.abs(data$$1.pixelX)) delta = data$$1.pixelY;\n else return true;\n } else {\n delta = Math.abs(data$$1.pixelX) > Math.abs(data$$1.pixelY) ? -data$$1.pixelX * rtlFactor : -data$$1.pixelY;\n }\n\n if (delta === 0) return true;\n\n if (params.invert) delta = -delta;\n\n if (!swiper.params.freeMode) {\n if (Utils.now() - swiper.mousewheel.lastScrollTime > 60) {\n if (delta < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n swiper.emit('scroll', e);\n } else if (params.releaseOnEdges) return true;\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n swiper.emit('scroll', e);\n } else if (params.releaseOnEdges) return true;\n }\n swiper.mousewheel.lastScrollTime = (new window.Date()).getTime();\n } else {\n // Freemode or scrollContainer:\n if (swiper.params.loop) {\n swiper.loopFix();\n }\n let position = swiper.getTranslate() + (delta * params.sensitivity);\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeModeSticky) {\n clearTimeout(swiper.mousewheel.timeout);\n swiper.mousewheel.timeout = Utils.nextTick(() => {\n swiper.slideToClosest();\n }, 300);\n }\n // Emit event\n swiper.emit('scroll', e);\n\n // Stop autoplay\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.stopAutoplay();\n // Return page scroll on edge positions\n if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n }\n\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n return false;\n },\n enable() {\n const swiper = this;\n if (!Mousewheel.event) return false;\n if (swiper.mousewheel.enabled) return false;\n let target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarged !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarged);\n }\n target.on('mouseenter', swiper.mousewheel.handleMouseEnter);\n target.on('mouseleave', swiper.mousewheel.handleMouseLeave);\n target.on(Mousewheel.event, swiper.mousewheel.handle);\n swiper.mousewheel.enabled = true;\n return true;\n },\n disable() {\n const swiper = this;\n if (!Mousewheel.event) return false;\n if (!swiper.mousewheel.enabled) return false;\n let target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarged !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarged);\n }\n target.off(Mousewheel.event, swiper.mousewheel.handle);\n swiper.mousewheel.enabled = false;\n return true;\n },\n};\n\nvar Mousewheel$1 = {\n name: 'mousewheel',\n params: {\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarged: 'container',\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n mousewheel: {\n enabled: false,\n enable: Mousewheel.enable.bind(swiper),\n disable: Mousewheel.disable.bind(swiper),\n handle: Mousewheel.handle.bind(swiper),\n handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),\n handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),\n lastScrollTime: Utils.now(),\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();\n },\n destroy() {\n const swiper = this;\n if (swiper.mousewheel.enabled) swiper.mousewheel.disable();\n },\n },\n};\n\nconst Navigation = {\n update() {\n // Update Navigation Buttons\n const swiper = this;\n const params = swiper.params.navigation;\n\n if (swiper.params.loop) return;\n const { $nextEl, $prevEl } = swiper.navigation;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n $prevEl.addClass(params.disabledClass);\n } else {\n $prevEl.removeClass(params.disabledClass);\n }\n $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n $nextEl.addClass(params.disabledClass);\n } else {\n $nextEl.removeClass(params.disabledClass);\n }\n $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n },\n init() {\n const swiper = this;\n const params = swiper.params.navigation;\n if (!(params.nextEl || params.prevEl)) return;\n\n let $nextEl;\n let $prevEl;\n if (params.nextEl) {\n $nextEl = $(params.nextEl);\n if (\n swiper.params.uniqueNavElements &&\n typeof params.nextEl === 'string' &&\n $nextEl.length > 1 &&\n swiper.$el.find(params.nextEl).length === 1\n ) {\n $nextEl = swiper.$el.find(params.nextEl);\n }\n }\n if (params.prevEl) {\n $prevEl = $(params.prevEl);\n if (\n swiper.params.uniqueNavElements &&\n typeof params.prevEl === 'string' &&\n $prevEl.length > 1 &&\n swiper.$el.find(params.prevEl).length === 1\n ) {\n $prevEl = swiper.$el.find(params.prevEl);\n }\n }\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', (e) => {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop) return;\n swiper.slideNext();\n });\n }\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', (e) => {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop) return;\n swiper.slidePrev();\n });\n }\n\n Utils.extend(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0],\n });\n },\n destroy() {\n const swiper = this;\n const { $nextEl, $prevEl } = swiper.navigation;\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click');\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click');\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n },\n};\n\nvar Navigation$1 = {\n name: 'navigation',\n params: {\n navigation: {\n nextEl: null,\n prevEl: null,\n\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n navigation: {\n init: Navigation.init.bind(swiper),\n update: Navigation.update.bind(swiper),\n destroy: Navigation.destroy.bind(swiper),\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n swiper.navigation.init();\n swiper.navigation.update();\n },\n toEdge() {\n const swiper = this;\n swiper.navigation.update();\n },\n fromEdge() {\n const swiper = this;\n swiper.navigation.update();\n },\n destroy() {\n const swiper = this;\n swiper.navigation.destroy();\n },\n click(e) {\n const swiper = this;\n const { $nextEl, $prevEl } = swiper.navigation;\n if (\n swiper.params.navigation.hideOnClick &&\n !$(e.target).is($prevEl) &&\n !$(e.target).is($nextEl)\n ) {\n if ($nextEl) $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n if ($prevEl) $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n },\n },\n};\n\nconst Pagination = {\n update() {\n // Render || Update Pagination bullets/items\n const swiper = this;\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el;\n // Current/Total\n let current;\n const total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {\n current -= (slidesLength - (swiper.loopedSlides * 2));\n }\n if (current > total - 1) current -= total;\n if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(swiper.isHorizontal() ? 'width' : 'height', `${swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)}px`);\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);\n if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {\n swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (swiper.pagination.dynamicBulletIndex < 0) {\n swiper.pagination.dynamicBulletIndex = 0;\n }\n }\n firstIndex = current - swiper.pagination.dynamicBulletIndex;\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.removeClass(`${params.bulletActiveClass} ${params.bulletActiveClass}-next ${params.bulletActiveClass}-next-next ${params.bulletActiveClass}-prev ${params.bulletActiveClass}-prev-prev ${params.bulletActiveClass}-main`);\n if ($el.length > 1) {\n bullets.each((index$$1, bullet) => {\n const $bullet = $(bullet);\n const bulletIndex = $bullet.index();\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(`${params.bulletActiveClass}-main`);\n }\n if (bulletIndex === firstIndex) {\n $bullet\n .prev()\n .addClass(`${params.bulletActiveClass}-prev`)\n .prev()\n .addClass(`${params.bulletActiveClass}-prev-prev`);\n }\n if (bulletIndex === lastIndex) {\n $bullet\n .next()\n .addClass(`${params.bulletActiveClass}-next`)\n .next()\n .addClass(`${params.bulletActiveClass}-next-next`);\n }\n }\n });\n } else {\n const $bullet = bullets.eq(current);\n $bullet.addClass(params.bulletActiveClass);\n if (params.dynamicBullets) {\n const $firstDisplayedBullet = bullets.eq(firstIndex);\n const $lastDisplayedBullet = bullets.eq(lastIndex);\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n }\n $firstDisplayedBullet\n .prev()\n .addClass(`${params.bulletActiveClass}-prev`)\n .prev()\n .addClass(`${params.bulletActiveClass}-prev-prev`);\n $lastDisplayedBullet\n .next()\n .addClass(`${params.bulletActiveClass}-next`)\n .next()\n .addClass(`${params.bulletActiveClass}-next-next`);\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);\n const offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n }\n }\n if (params.type === 'fraction') {\n $el.find(`.${params.currentClass}`).text(current + 1);\n $el.find(`.${params.totalClass}`).text(total);\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n $el.find(`.${params.progressbarFillClass}`).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n }\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n swiper.emit('paginationRender', swiper, $el[0]);\n } else {\n swiper.emit('paginationUpdate', swiper, $el[0]);\n }\n $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n },\n render() {\n // Render Container\n const swiper = this;\n const params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n\n const $el = swiper.pagination.$el;\n let paginationHTML = '';\n if (params.type === 'bullets') {\n const numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\">`;\n }\n }\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find(`.${params.bulletClass}`);\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML =\n `` +\n ' / ' +\n ``;\n }\n $el.html(paginationHTML);\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n $el.html(paginationHTML);\n }\n if (params.type !== 'custom') {\n swiper.emit('paginationRender', swiper.pagination.$el[0]);\n }\n },\n init() {\n const swiper = this;\n const params = swiper.params.pagination;\n if (!params.el) return;\n\n let $el = $(params.el);\n if ($el.length === 0) return;\n\n if (\n swiper.params.uniqueNavElements &&\n typeof params.el === 'string' &&\n $el.length > 1 &&\n swiper.$el.find(params.el).length === 1\n ) {\n $el = swiper.$el.find(params.el);\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n swiper.pagination.dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', `.${params.bulletClass}`, function onClick(e) {\n e.preventDefault();\n let index$$1 = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index$$1 += swiper.loopedSlides;\n swiper.slideTo(index$$1);\n });\n }\n\n Utils.extend(swiper.pagination, {\n $el,\n el: $el[0],\n });\n },\n destroy() {\n const swiper = this;\n const params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n const $el = swiper.pagination.$el;\n\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n if (params.clickable) {\n $el.off('click', `.${params.bulletClass}`);\n }\n },\n};\n\nvar Pagination$1 = {\n name: 'pagination',\n params: {\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n bulletClass: 'swiper-pagination-bullet',\n bulletActiveClass: 'swiper-pagination-bullet-active',\n modifierClass: 'swiper-pagination-', // NEW\n currentClass: 'swiper-pagination-current',\n totalClass: 'swiper-pagination-total',\n hiddenClass: 'swiper-pagination-hidden',\n progressbarFillClass: 'swiper-pagination-progressbar-fill',\n progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',\n clickableClass: 'swiper-pagination-clickable', // NEW\n lockClass: 'swiper-pagination-lock',\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n pagination: {\n init: Pagination.init.bind(swiper),\n render: Pagination.render.bind(swiper),\n update: Pagination.update.bind(swiper),\n destroy: Pagination.destroy.bind(swiper),\n dynamicBulletIndex: 0,\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n swiper.pagination.init();\n swiper.pagination.render();\n swiper.pagination.update();\n },\n activeIndexChange() {\n const swiper = this;\n if (swiper.params.loop) {\n swiper.pagination.update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n swiper.pagination.update();\n }\n },\n snapIndexChange() {\n const swiper = this;\n if (!swiper.params.loop) {\n swiper.pagination.update();\n }\n },\n slidesLengthChange() {\n const swiper = this;\n if (swiper.params.loop) {\n swiper.pagination.render();\n swiper.pagination.update();\n }\n },\n snapGridLengthChange() {\n const swiper = this;\n if (!swiper.params.loop) {\n swiper.pagination.render();\n swiper.pagination.update();\n }\n },\n destroy() {\n const swiper = this;\n swiper.pagination.destroy();\n },\n click(e) {\n const swiper = this;\n if (\n swiper.params.pagination.el &&\n swiper.params.pagination.hideOnClick &&\n swiper.pagination.$el.length > 0 &&\n !$(e.target).hasClass(swiper.params.pagination.bulletClass)\n ) {\n swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n },\n },\n};\n\nconst Scrollbar = {\n setTranslate() {\n const swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const { scrollbar, rtlTranslate: rtl, progress } = swiper;\n const {\n dragSize, trackSize, $dragEl, $el,\n } = scrollbar;\n const params = swiper.params.scrollbar;\n\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n if (rtl) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n if (swiper.isHorizontal()) {\n if (Support.transforms3d) {\n $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n } else {\n $dragEl.transform(`translateX(${newPos}px)`);\n }\n $dragEl[0].style.width = `${newSize}px`;\n } else {\n if (Support.transforms3d) {\n $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n } else {\n $dragEl.transform(`translateY(${newPos}px)`);\n }\n $dragEl[0].style.height = `${newSize}px`;\n }\n if (params.hide) {\n clearTimeout(swiper.scrollbar.timeout);\n $el[0].style.opacity = 1;\n swiper.scrollbar.timeout = setTimeout(() => {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n },\n setTransition(duration) {\n const swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.$dragEl.transition(duration);\n },\n updateSize() {\n const swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n\n const { scrollbar } = swiper;\n const { $dragEl, $el } = scrollbar;\n\n $dragEl[0].style.width = '';\n $dragEl[0].style.height = '';\n const trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n\n const divider = swiper.size / swiper.virtualSize;\n const moveDivider = divider * (trackSize / swiper.size);\n let dragSize;\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n\n if (swiper.isHorizontal()) {\n $dragEl[0].style.width = `${dragSize}px`;\n } else {\n $dragEl[0].style.height = `${dragSize}px`;\n }\n\n if (divider >= 1) {\n $el[0].style.display = 'none';\n } else {\n $el[0].style.display = '';\n }\n if (swiper.params.scrollbarHide) {\n $el[0].style.opacity = 0;\n }\n Utils.extend(scrollbar, {\n trackSize,\n divider,\n moveDivider,\n dragSize,\n });\n scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n },\n setDragPosition(e) {\n const swiper = this;\n const { scrollbar, rtlTranslate: rtl } = swiper;\n const { $el, dragSize, trackSize } = scrollbar;\n\n let pointerPosition;\n if (swiper.isHorizontal()) {\n pointerPosition = ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX);\n } else {\n pointerPosition = ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY);\n }\n let positionRatio;\n positionRatio = ((pointerPosition) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n\n const position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio);\n\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n },\n onDragStart(e) {\n const swiper = this;\n const params = swiper.params.scrollbar;\n const { scrollbar, $wrapperEl } = swiper;\n const { $el, $dragEl } = scrollbar;\n swiper.scrollbar.isTouched = true;\n e.preventDefault();\n e.stopPropagation();\n\n $wrapperEl.transition(100);\n $dragEl.transition(100);\n scrollbar.setDragPosition(e);\n\n clearTimeout(swiper.scrollbar.dragTimeout);\n\n $el.transition(0);\n if (params.hide) {\n $el.css('opacity', 1);\n }\n swiper.emit('scrollbarDragStart', e);\n },\n onDragMove(e) {\n const swiper = this;\n const { scrollbar, $wrapperEl } = swiper;\n const { $el, $dragEl } = scrollbar;\n\n if (!swiper.scrollbar.isTouched) return;\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n scrollbar.setDragPosition(e);\n $wrapperEl.transition(0);\n $el.transition(0);\n $dragEl.transition(0);\n swiper.emit('scrollbarDragMove', e);\n },\n onDragEnd(e) {\n const swiper = this;\n\n const params = swiper.params.scrollbar;\n const { scrollbar } = swiper;\n const { $el } = scrollbar;\n\n if (!swiper.scrollbar.isTouched) return;\n swiper.scrollbar.isTouched = false;\n if (params.hide) {\n clearTimeout(swiper.scrollbar.dragTimeout);\n swiper.scrollbar.dragTimeout = Utils.nextTick(() => {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n swiper.emit('scrollbarDragEnd', e);\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n },\n enableDraggable() {\n const swiper = this;\n if (!swiper.params.scrollbar.el) return;\n const {\n scrollbar, touchEvents, touchEventsDesktop, params,\n } = swiper;\n const $el = scrollbar.$el;\n const target = $el[0];\n const activeListener = Support.passiveListener && params.passiveListener ? { passive: false, capture: false } : false;\n const passiveListener = Support.passiveListener && params.passiveListener ? { passive: true, capture: false } : false;\n if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n document.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n document.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n } else {\n if (Support.touch) {\n target.addEventListener(touchEvents.start, swiper.scrollbar.onDragStart, activeListener);\n target.addEventListener(touchEvents.move, swiper.scrollbar.onDragMove, activeListener);\n target.addEventListener(touchEvents.end, swiper.scrollbar.onDragEnd, passiveListener);\n }\n if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n target.addEventListener('mousedown', swiper.scrollbar.onDragStart, activeListener);\n document.addEventListener('mousemove', swiper.scrollbar.onDragMove, activeListener);\n document.addEventListener('mouseup', swiper.scrollbar.onDragEnd, passiveListener);\n }\n }\n },\n disableDraggable() {\n const swiper = this;\n if (!swiper.params.scrollbar.el) return;\n const {\n scrollbar, touchEvents, touchEventsDesktop, params,\n } = swiper;\n const $el = scrollbar.$el;\n const target = $el[0];\n const activeListener = Support.passiveListener && params.passiveListener ? { passive: false, capture: false } : false;\n const passiveListener = Support.passiveListener && params.passiveListener ? { passive: true, capture: false } : false;\n if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n document.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n document.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n } else {\n if (Support.touch) {\n target.removeEventListener(touchEvents.start, swiper.scrollbar.onDragStart, activeListener);\n target.removeEventListener(touchEvents.move, swiper.scrollbar.onDragMove, activeListener);\n target.removeEventListener(touchEvents.end, swiper.scrollbar.onDragEnd, passiveListener);\n }\n if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n target.removeEventListener('mousedown', swiper.scrollbar.onDragStart, activeListener);\n document.removeEventListener('mousemove', swiper.scrollbar.onDragMove, activeListener);\n document.removeEventListener('mouseup', swiper.scrollbar.onDragEnd, passiveListener);\n }\n }\n },\n init() {\n const swiper = this;\n if (!swiper.params.scrollbar.el) return;\n const { scrollbar, $el: $swiperEl } = swiper;\n const params = swiper.params.scrollbar;\n\n let $el = $(params.el);\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n $el = $swiperEl.find(params.el);\n }\n\n let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n if ($dragEl.length === 0) {\n $dragEl = $(`
    `);\n $el.append($dragEl);\n }\n\n Utils.extend(scrollbar, {\n $el,\n el: $el[0],\n $dragEl,\n dragEl: $dragEl[0],\n });\n\n if (params.draggable) {\n scrollbar.enableDraggable();\n }\n },\n destroy() {\n const swiper = this;\n swiper.scrollbar.disableDraggable();\n },\n};\n\nvar Scrollbar$1 = {\n name: 'scrollbar',\n params: {\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n scrollbar: {\n init: Scrollbar.init.bind(swiper),\n destroy: Scrollbar.destroy.bind(swiper),\n updateSize: Scrollbar.updateSize.bind(swiper),\n setTranslate: Scrollbar.setTranslate.bind(swiper),\n setTransition: Scrollbar.setTransition.bind(swiper),\n enableDraggable: Scrollbar.enableDraggable.bind(swiper),\n disableDraggable: Scrollbar.disableDraggable.bind(swiper),\n setDragPosition: Scrollbar.setDragPosition.bind(swiper),\n onDragStart: Scrollbar.onDragStart.bind(swiper),\n onDragMove: Scrollbar.onDragMove.bind(swiper),\n onDragEnd: Scrollbar.onDragEnd.bind(swiper),\n isTouched: false,\n timeout: null,\n dragTimeout: null,\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n swiper.scrollbar.init();\n swiper.scrollbar.updateSize();\n swiper.scrollbar.setTranslate();\n },\n update() {\n const swiper = this;\n swiper.scrollbar.updateSize();\n },\n resize() {\n const swiper = this;\n swiper.scrollbar.updateSize();\n },\n observerUpdate() {\n const swiper = this;\n swiper.scrollbar.updateSize();\n },\n setTranslate() {\n const swiper = this;\n swiper.scrollbar.setTranslate();\n },\n setTransition(duration) {\n const swiper = this;\n swiper.scrollbar.setTransition(duration);\n },\n destroy() {\n const swiper = this;\n swiper.scrollbar.destroy();\n },\n },\n};\n\nconst Parallax = {\n setTransform(el, progress) {\n const swiper = this;\n const { rtl } = swiper;\n\n const $el = $(el);\n const rtlFactor = rtl ? -1 : 1;\n\n const p = $el.attr('data-swiper-parallax') || '0';\n let x = $el.attr('data-swiper-parallax-x');\n let y = $el.attr('data-swiper-parallax-y');\n const scale = $el.attr('data-swiper-parallax-scale');\n const opacity = $el.attr('data-swiper-parallax-opacity');\n\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.isHorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n\n if ((x).indexOf('%') >= 0) {\n x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n } else {\n x = `${x * progress * rtlFactor}px`;\n }\n if ((y).indexOf('%') >= 0) {\n y = `${parseInt(y, 10) * progress}%`;\n } else {\n y = `${y * progress}px`;\n }\n\n if (typeof opacity !== 'undefined' && opacity !== null) {\n const currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress)));\n $el[0].style.opacity = currentOpacity;\n }\n if (typeof scale === 'undefined' || scale === null) {\n $el.transform(`translate3d(${x}, ${y}, 0px)`);\n } else {\n const currentScale = scale - ((scale - 1) * (1 - Math.abs(progress)));\n $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);\n }\n },\n setTranslate() {\n const swiper = this;\n const {\n $el, slides, progress, snapGrid,\n } = swiper;\n $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]')\n .each((index$$1, el) => {\n swiper.parallax.setTransform(el, progress);\n });\n slides.each((slideIndex, slideEl) => {\n let slideProgress = slideEl.progress;\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1));\n }\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]')\n .each((index$$1, el) => {\n swiper.parallax.setTransform(el, slideProgress);\n });\n });\n },\n setTransition(duration = this.params.speed) {\n const swiper = this;\n const { $el } = swiper;\n $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]')\n .each((index$$1, parallaxEl) => {\n const $parallaxEl = $(parallaxEl);\n let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n $parallaxEl.transition(parallaxDuration);\n });\n },\n};\n\nvar Parallax$1 = {\n name: 'parallax',\n params: {\n parallax: {\n enabled: false,\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n parallax: {\n setTransform: Parallax.setTransform.bind(swiper),\n setTranslate: Parallax.setTranslate.bind(swiper),\n setTransition: Parallax.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit() {\n const swiper = this;\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchSlidesProgress = true;\n },\n init() {\n const swiper = this;\n if (!swiper.params.parallax) return;\n swiper.parallax.setTranslate();\n },\n setTranslate() {\n const swiper = this;\n if (!swiper.params.parallax) return;\n swiper.parallax.setTranslate();\n },\n setTransition(duration) {\n const swiper = this;\n if (!swiper.params.parallax) return;\n swiper.parallax.setTransition(duration);\n },\n },\n};\n\nconst Zoom = {\n // Calc Scale From Multi-touches\n getDistanceBetweenTouches(e) {\n if (e.targetTouches.length < 2) return 1;\n const x1 = e.targetTouches[0].pageX;\n const y1 = e.targetTouches[0].pageY;\n const x2 = e.targetTouches[1].pageX;\n const y2 = e.targetTouches[1].pageY;\n const distance = Math.sqrt(((x2 - x1) ** 2) + ((y2 - y1) ** 2));\n return distance;\n },\n // Events\n onGestureStart(e) {\n const swiper = this;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const { gesture } = zoom;\n zoom.fakeGestureTouched = false;\n zoom.fakeGestureMoved = false;\n if (!Support.gestures) {\n if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {\n return;\n }\n zoom.fakeGestureTouched = true;\n gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);\n }\n if (!gesture.$slideEl || !gesture.$slideEl.length) {\n gesture.$slideEl = $(e.target).closest('.swiper-slide');\n if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n if (gesture.$imageWrapEl.length === 0) {\n gesture.$imageEl = undefined;\n return;\n }\n }\n gesture.$imageEl.transition(0);\n swiper.zoom.isScaling = true;\n },\n onGestureChange(e) {\n const swiper = this;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const { gesture } = zoom;\n if (!Support.gestures) {\n if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {\n return;\n }\n zoom.fakeGestureMoved = true;\n gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (Support.gestures) {\n swiper.zoom.scale = e.scale * zoom.currentScale;\n } else {\n zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale;\n }\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = (gesture.maxRatio - 1) + (((zoom.scale - gesture.maxRatio) + 1) ** 0.5);\n }\n if (zoom.scale < params.minRatio) {\n zoom.scale = (params.minRatio + 1) - (((params.minRatio - zoom.scale) + 1) ** 0.5);\n }\n gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n },\n onGestureEnd(e) {\n const swiper = this;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const { gesture } = zoom;\n if (!Support.gestures) {\n if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {\n return;\n }\n if (e.type !== 'touchend' || (e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android)) {\n return;\n }\n zoom.fakeGestureTouched = false;\n zoom.fakeGestureMoved = false;\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n zoom.currentScale = zoom.scale;\n zoom.isScaling = false;\n if (zoom.scale === 1) gesture.$slideEl = undefined;\n },\n onTouchStart(e) {\n const swiper = this;\n const zoom = swiper.zoom;\n const { gesture, image } = zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (image.isTouched) return;\n if (Device.android) e.preventDefault();\n image.isTouched = true;\n image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n },\n onTouchMove(e) {\n const swiper = this;\n const zoom = swiper.zoom;\n const { gesture, image, velocity } = zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n swiper.allowClick = false;\n if (!image.isTouched || !gesture.$slideEl) return;\n\n if (!image.isMoved) {\n image.width = gesture.$imageEl[0].offsetWidth;\n image.height = gesture.$imageEl[0].offsetHeight;\n image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n gesture.$imageWrapEl.transition(0);\n if (swiper.rtl) {\n image.startX = -image.startX;\n image.startY = -image.startY;\n }\n }\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n\n image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n image.maxX = -image.minX;\n image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n image.maxY = -image.minY;\n\n image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n if (!image.isMoved && !zoom.isScaling) {\n if (\n swiper.isHorizontal() &&\n (\n (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x) ||\n (Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)\n )\n ) {\n image.isTouched = false;\n return;\n } else if (\n !swiper.isHorizontal() &&\n (\n (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y) ||\n (Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)\n )\n ) {\n image.isTouched = false;\n return;\n }\n }\n e.preventDefault();\n e.stopPropagation();\n\n image.isMoved = true;\n image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX;\n image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY;\n\n if (image.currentX < image.minX) {\n image.currentX = (image.minX + 1) - (((image.minX - image.currentX) + 1) ** 0.8);\n }\n if (image.currentX > image.maxX) {\n image.currentX = (image.maxX - 1) + (((image.currentX - image.maxX) + 1) ** 0.8);\n }\n\n if (image.currentY < image.minY) {\n image.currentY = (image.minY + 1) - (((image.minY - image.currentY) + 1) ** 0.8);\n }\n if (image.currentY > image.maxY) {\n image.currentY = (image.maxY - 1) + (((image.currentY - image.maxY) + 1) ** 0.8);\n }\n\n // Velocity\n if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n if (!velocity.prevTime) velocity.prevTime = Date.now();\n velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n\n gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n },\n onTouchEnd() {\n const swiper = this;\n const zoom = swiper.zoom;\n const { gesture, image, velocity } = zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n image.isTouched = false;\n image.isMoved = false;\n let momentumDurationX = 300;\n let momentumDurationY = 300;\n const momentumDistanceX = velocity.x * momentumDurationX;\n const newPositionX = image.currentX + momentumDistanceX;\n const momentumDistanceY = velocity.y * momentumDurationY;\n const newPositionY = image.currentY + momentumDistanceY;\n\n // Fix duration\n if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n\n image.currentX = newPositionX;\n image.currentY = newPositionY;\n\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n image.maxX = -image.minX;\n image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n\n gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n },\n onTransitionEnd() {\n const swiper = this;\n const zoom = swiper.zoom;\n const { gesture } = zoom;\n if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n gesture.$slideEl = undefined;\n gesture.$imageEl = undefined;\n gesture.$imageWrapEl = undefined;\n\n zoom.scale = 1;\n zoom.currentScale = 1;\n }\n },\n // Toggle Zoom\n toggle(e) {\n const swiper = this;\n const zoom = swiper.zoom;\n\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoom.out();\n } else {\n // Zoom In\n zoom.in(e);\n }\n },\n in(e) {\n const swiper = this;\n\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n const { gesture, image } = zoom;\n\n if (!gesture.$slideEl) {\n gesture.$slideEl = swiper.clickedSlide ? $(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);\n\n let touchX;\n let touchY;\n let offsetX;\n let offsetY;\n let diffX;\n let diffY;\n let translateX;\n let translateY;\n let imageWidth;\n let imageHeight;\n let scaledWidth;\n let scaledHeight;\n let translateMinX;\n let translateMinY;\n let translateMaxX;\n let translateMaxY;\n let slideWidth;\n let slideHeight;\n\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n\n zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n if (e) {\n slideWidth = gesture.$slideEl[0].offsetWidth;\n slideHeight = gesture.$slideEl[0].offsetHeight;\n offsetX = gesture.$slideEl.offset().left;\n offsetY = gesture.$slideEl.offset().top;\n diffX = (offsetX + (slideWidth / 2)) - touchX;\n diffY = (offsetY + (slideHeight / 2)) - touchY;\n\n imageWidth = gesture.$imageEl[0].offsetWidth;\n imageHeight = gesture.$imageEl[0].offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n\n translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0);\n translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);\n gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n },\n out() {\n const swiper = this;\n\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n const { gesture } = zoom;\n\n if (!gesture.$slideEl) {\n gesture.$slideEl = swiper.clickedSlide ? $(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n zoom.scale = 1;\n zoom.currentScale = 1;\n gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);\n gesture.$slideEl = undefined;\n },\n // Attach/Detach Events\n enable() {\n const swiper = this;\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n\n const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n\n // Scale image\n if (Support.gestures) {\n swiper.$wrapperEl.on('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener);\n swiper.$wrapperEl.on('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener);\n swiper.$wrapperEl.on('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.on(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener);\n }\n\n // Move image\n swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove);\n },\n disable() {\n const swiper = this;\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n\n swiper.zoom.enabled = false;\n\n const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n\n // Scale image\n if (Support.gestures) {\n swiper.$wrapperEl.off('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener);\n swiper.$wrapperEl.off('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener);\n swiper.$wrapperEl.off('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.off(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener);\n }\n\n // Move image\n swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove);\n },\n};\n\nvar Zoom$1 = {\n name: 'zoom',\n params: {\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed',\n },\n },\n create() {\n const swiper = this;\n const zoom = {\n enabled: false,\n scale: 1,\n currentScale: 1,\n isScaling: false,\n gesture: {\n $slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n $imageEl: undefined,\n $imageWrapEl: undefined,\n maxRatio: 3,\n },\n image: {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {},\n },\n velocity: {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined,\n },\n };\n ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach((methodName) => {\n zoom[methodName] = Zoom[methodName].bind(swiper);\n });\n Utils.extend(swiper, {\n zoom,\n });\n },\n on: {\n init() {\n const swiper = this;\n if (swiper.params.zoom.enabled) {\n swiper.zoom.enable();\n }\n },\n destroy() {\n const swiper = this;\n swiper.zoom.disable();\n },\n touchStart(e) {\n const swiper = this;\n if (!swiper.zoom.enabled) return;\n swiper.zoom.onTouchStart(e);\n },\n touchEnd(e) {\n const swiper = this;\n if (!swiper.zoom.enabled) return;\n swiper.zoom.onTouchEnd(e);\n },\n doubleTap(e) {\n const swiper = this;\n if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n swiper.zoom.toggle(e);\n }\n },\n transitionEnd() {\n const swiper = this;\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n swiper.zoom.onTransitionEnd();\n }\n },\n },\n};\n\nconst Lazy = {\n loadInSlide(index$$1, loadInDuplicate = true) {\n const swiper = this;\n const params = swiper.params.lazy;\n if (typeof index$$1 === 'undefined') return;\n if (swiper.slides.length === 0) return;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n const $slideEl = isVirtual\n ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${index$$1}\"]`)\n : swiper.slides.eq(index$$1);\n\n let $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);\n if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n $images = $images.add($slideEl[0]);\n }\n if ($images.length === 0) return;\n\n $images.each((imageIndex, imageEl) => {\n const $imageEl = $(imageEl);\n $imageEl.addClass(params.loadingClass);\n\n const background = $imageEl.attr('data-background');\n const src = $imageEl.attr('data-src');\n const srcset = $imageEl.attr('data-srcset');\n const sizes = $imageEl.attr('data-sizes');\n\n swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, () => {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) return;\n if (background) {\n $imageEl.css('background-image', `url(\"${background}\")`);\n $imageEl.removeAttr('data-background');\n } else {\n if (srcset) {\n $imageEl.attr('srcset', srcset);\n $imageEl.removeAttr('data-srcset');\n }\n if (sizes) {\n $imageEl.attr('sizes', sizes);\n $imageEl.removeAttr('data-sizes');\n }\n if (src) {\n $imageEl.attr('src', src);\n $imageEl.removeAttr('data-src');\n }\n }\n\n $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n $slideEl.find(`.${params.preloaderClass}`).remove();\n if (swiper.params.loop && loadInDuplicate) {\n const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index=\"${slideOriginalIndex}\"]:not(.${swiper.params.slideDuplicateClass})`);\n swiper.lazy.loadInSlide(originalSlide.index(), false);\n } else {\n const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index=\"${slideOriginalIndex}\"]`);\n swiper.lazy.loadInSlide(duplicatedSlide.index(), false);\n }\n }\n swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n });\n\n swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n });\n },\n load() {\n const swiper = this;\n const {\n $wrapperEl, params: swiperParams, slides, activeIndex,\n } = swiper;\n const isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n const params = swiperParams.lazy;\n\n let slidesPerView = swiperParams.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = 0;\n }\n\n function slideExist(index$$1) {\n if (isVirtual) {\n if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index=\"${index$$1}\"]`).length) {\n return true;\n }\n } else if (slides[index$$1]) return true;\n return false;\n }\n function slideIndex(slideEl) {\n if (isVirtual) {\n return $(slideEl).attr('data-swiper-slide-index');\n }\n return $(slideEl).index();\n }\n\n if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;\n if (swiper.params.watchSlidesVisibility) {\n $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each((elIndex, slideEl) => {\n const index$$1 = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n swiper.lazy.loadInSlide(index$$1);\n });\n } else if (slidesPerView > 1) {\n for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n if (slideExist(i)) swiper.lazy.loadInSlide(i);\n }\n } else {\n swiper.lazy.loadInSlide(activeIndex);\n }\n if (params.loadPrevNext) {\n if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {\n const amount = params.loadPrevNextAmount;\n const spv = slidesPerView;\n const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);\n // Next Slides\n for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) {\n if (slideExist(i)) swiper.lazy.loadInSlide(i);\n }\n // Prev Slides\n for (let i = minIndex; i < activeIndex; i += 1) {\n if (slideExist(i)) swiper.lazy.loadInSlide(i);\n }\n } else {\n const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);\n if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));\n\n const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);\n if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));\n }\n }\n },\n};\n\nvar Lazy$1 = {\n name: 'lazy',\n params: {\n lazy: {\n enabled: false,\n loadPrevNext: false,\n loadPrevNextAmount: 1,\n loadOnTransitionStart: false,\n\n elementClass: 'swiper-lazy',\n loadingClass: 'swiper-lazy-loading',\n loadedClass: 'swiper-lazy-loaded',\n preloaderClass: 'swiper-lazy-preloader',\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n lazy: {\n initialImageLoaded: false,\n load: Lazy.load.bind(swiper),\n loadInSlide: Lazy.loadInSlide.bind(swiper),\n },\n });\n },\n on: {\n beforeInit() {\n const swiper = this;\n if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n swiper.params.preloadImages = false;\n }\n },\n init() {\n const swiper = this;\n if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {\n swiper.lazy.load();\n }\n },\n scroll() {\n const swiper = this;\n if (swiper.params.freeMode && !swiper.params.freeModeSticky) {\n swiper.lazy.load();\n }\n },\n resize() {\n const swiper = this;\n if (swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n },\n scrollbarDragMove() {\n const swiper = this;\n if (swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n },\n transitionStart() {\n const swiper = this;\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) {\n swiper.lazy.load();\n }\n }\n },\n transitionEnd() {\n const swiper = this;\n if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n swiper.lazy.load();\n }\n },\n },\n};\n\n/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\n\nconst Controller = {\n LinearSpline: function LinearSpline(x, y) {\n const binarySearch = (function search() {\n let maxIndex;\n let minIndex;\n let guess;\n return (array, val) => {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1) {\n guess = maxIndex + minIndex >> 1;\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n return maxIndex;\n };\n }());\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n let i1;\n let i3;\n\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0;\n\n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n\n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];\n };\n return this;\n },\n // xxx: for now i will just save one spline function to to\n getInterpolateFunction(c) {\n const swiper = this;\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop ?\n new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid) :\n new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n },\n setTranslate(setTranslate, byController) {\n const swiper = this;\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n if (swiper.params.controller.by === 'slide') {\n swiper.controller.getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();\n }\n\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n if (Array.isArray(controlled)) {\n for (let i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n },\n setTransition(duration, byController) {\n const swiper = this;\n const controlled = swiper.controller.control;\n let i;\n function setControlledTransition(c) {\n c.setTransition(duration, swiper);\n if (duration !== 0) {\n c.transitionStart();\n c.$wrapperEl.transitionEnd(() => {\n if (!controlled) return;\n if (c.params.loop && swiper.params.controller.by === 'slide') {\n c.loopFix();\n }\n c.transitionEnd();\n });\n }\n }\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n },\n};\nvar Controller$1 = {\n name: 'controller',\n params: {\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide', // or 'container'\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n controller: {\n control: swiper.params.controller.control,\n getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),\n setTranslate: Controller.setTranslate.bind(swiper),\n setTransition: Controller.setTransition.bind(swiper),\n },\n });\n },\n on: {\n update() {\n const swiper = this;\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n resize() {\n const swiper = this;\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n observerUpdate() {\n const swiper = this;\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n setTranslate(translate, byController) {\n const swiper = this;\n if (!swiper.controller.control) return;\n swiper.controller.setTranslate(translate, byController);\n },\n setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.controller.control) return;\n swiper.controller.setTransition(duration, byController);\n },\n },\n};\n\nconst a11y = {\n makeElFocusable($el) {\n $el.attr('tabIndex', '0');\n return $el;\n },\n addElRole($el, role) {\n $el.attr('role', role);\n return $el;\n },\n addElLabel($el, label) {\n $el.attr('aria-label', label);\n return $el;\n },\n disableEl($el) {\n $el.attr('aria-disabled', true);\n return $el;\n },\n enableEl($el) {\n $el.attr('aria-disabled', false);\n return $el;\n },\n onEnterKey(e) {\n const swiper = this;\n const params = swiper.params.a11y;\n if (e.keyCode !== 13) return;\n const $targetEl = $(e.target);\n if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n if (swiper.isEnd) {\n swiper.a11y.notify(params.lastSlideMessage);\n } else {\n swiper.a11y.notify(params.nextSlideMessage);\n }\n }\n if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n if (swiper.isBeginning) {\n swiper.a11y.notify(params.firstSlideMessage);\n } else {\n swiper.a11y.notify(params.prevSlideMessage);\n }\n }\n if (swiper.pagination && $targetEl.is(`.${swiper.params.pagination.bulletClass}`)) {\n $targetEl[0].click();\n }\n },\n notify(message) {\n const swiper = this;\n const notification = swiper.a11y.liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n },\n updateNavigation() {\n const swiper = this;\n\n if (swiper.params.loop) return;\n const { $nextEl, $prevEl } = swiper.navigation;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n swiper.a11y.disableEl($prevEl);\n } else {\n swiper.a11y.enableEl($prevEl);\n }\n }\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n swiper.a11y.disableEl($nextEl);\n } else {\n swiper.a11y.enableEl($nextEl);\n }\n }\n },\n updatePagination() {\n const swiper = this;\n const params = swiper.params.a11y;\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.bullets.each((bulletIndex, bulletEl) => {\n const $bulletEl = $(bulletEl);\n swiper.a11y.makeElFocusable($bulletEl);\n swiper.a11y.addElRole($bulletEl, 'button');\n swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/{{index}}/, $bulletEl.index() + 1));\n });\n }\n },\n init() {\n const swiper = this;\n\n swiper.$el.append(swiper.a11y.liveRegion);\n\n // Navigation\n const params = swiper.params.a11y;\n let $nextEl;\n let $prevEl;\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n if ($nextEl) {\n swiper.a11y.makeElFocusable($nextEl);\n swiper.a11y.addElRole($nextEl, 'button');\n swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);\n $nextEl.on('keydown', swiper.a11y.onEnterKey);\n }\n if ($prevEl) {\n swiper.a11y.makeElFocusable($prevEl);\n swiper.a11y.addElRole($prevEl, 'button');\n swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);\n $prevEl.on('keydown', swiper.a11y.onEnterKey);\n }\n\n // Pagination\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.$el.on('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);\n }\n },\n destroy() {\n const swiper = this;\n if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove();\n\n let $nextEl;\n let $prevEl;\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n if ($nextEl) {\n $nextEl.off('keydown', swiper.a11y.onEnterKey);\n }\n if ($prevEl) {\n $prevEl.off('keydown', swiper.a11y.onEnterKey);\n }\n\n // Pagination\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.$el.off('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);\n }\n },\n};\nvar A11y = {\n name: 'a11y',\n params: {\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n a11y: {\n liveRegion: $(``),\n },\n });\n Object.keys(a11y).forEach((methodName) => {\n swiper.a11y[methodName] = a11y[methodName].bind(swiper);\n });\n },\n on: {\n init() {\n const swiper = this;\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.init();\n swiper.a11y.updateNavigation();\n },\n toEdge() {\n const swiper = this;\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.updateNavigation();\n },\n fromEdge() {\n const swiper = this;\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.updateNavigation();\n },\n paginationUpdate() {\n const swiper = this;\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.updatePagination();\n },\n destroy() {\n const swiper = this;\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.destroy();\n },\n },\n};\n\nconst History = {\n init() {\n const swiper = this;\n if (!swiper.params.history) return;\n if (!window.history || !window.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n const history = swiper.history;\n history.initialized = true;\n history.paths = History.getPathValues();\n if (!history.paths.key && !history.paths.value) return;\n history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', swiper.history.setHistoryPopState);\n }\n },\n destroy() {\n const swiper = this;\n if (!swiper.params.history.replaceState) {\n window.removeEventListener('popstate', swiper.history.setHistoryPopState);\n }\n },\n setHistoryPopState() {\n const swiper = this;\n swiper.history.paths = History.getPathValues();\n swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);\n },\n getPathValues() {\n const pathArray = window.location.pathname.slice(1).split('/').filter(part => part !== '');\n const total = pathArray.length;\n const key = pathArray[total - 2];\n const value = pathArray[total - 1];\n return { key, value };\n },\n setHistory(key, index$$1) {\n const swiper = this;\n if (!swiper.history.initialized || !swiper.params.history.enabled) return;\n const slide = swiper.slides.eq(index$$1);\n let value = History.slugify(slide.attr('data-history'));\n if (!window.location.pathname.includes(key)) {\n value = `${key}/${value}`;\n }\n const currentState = window.history.state;\n if (currentState && currentState.value === value) {\n return;\n }\n if (swiper.params.history.replaceState) {\n window.history.replaceState({ value }, null, value);\n } else {\n window.history.pushState({ value }, null, value);\n }\n },\n slugify(text$$1) {\n return text$$1.toString().toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^\\w-]+/g, '')\n .replace(/--+/g, '-')\n .replace(/^-+/, '')\n .replace(/-+$/, '');\n },\n scrollToSlide(speed, value, runCallbacks) {\n const swiper = this;\n if (value) {\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHistory = History.slugify(slide.attr('data-history'));\n if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index$$1 = slide.index();\n swiper.slideTo(index$$1, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n },\n};\n\nvar History$1 = {\n name: 'history',\n params: {\n history: {\n enabled: false,\n replaceState: false,\n key: 'slides',\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n history: {\n init: History.init.bind(swiper),\n setHistory: History.setHistory.bind(swiper),\n setHistoryPopState: History.setHistoryPopState.bind(swiper),\n scrollToSlide: History.scrollToSlide.bind(swiper),\n destroy: History.destroy.bind(swiper),\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n if (swiper.params.history.enabled) {\n swiper.history.init();\n }\n },\n destroy() {\n const swiper = this;\n if (swiper.params.history.enabled) {\n swiper.history.destroy();\n }\n },\n transitionEnd() {\n const swiper = this;\n if (swiper.history.initialized) {\n swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n },\n },\n};\n\nconst HashNavigation = {\n onHashCange() {\n const swiper = this;\n const newHash = document.location.hash.replace('#', '');\n const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n if (newHash !== activeSlideHash) {\n swiper.slideTo(swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash=\"${newHash}\"]`).index());\n }\n },\n setHash() {\n const swiper = this;\n if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return;\n if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n window.history.replaceState(null, null, (`#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || ''));\n } else {\n const slide = swiper.slides.eq(swiper.activeIndex);\n const hash = slide.attr('data-hash') || slide.attr('data-history');\n document.location.hash = hash || '';\n }\n },\n init() {\n const swiper = this;\n if (!swiper.params.hashNavigation.enabled || (swiper.params.history && swiper.params.history.enabled)) return;\n swiper.hashNavigation.initialized = true;\n const hash = document.location.hash.replace('#', '');\n if (hash) {\n const speed = 0;\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHash = slide.attr('data-hash') || slide.attr('data-history');\n if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index$$1 = slide.index();\n swiper.slideTo(index$$1, speed, swiper.params.runCallbacksOnInit, true);\n }\n }\n }\n if (swiper.params.hashNavigation.watchState) {\n $(window).on('hashchange', swiper.hashNavigation.onHashCange);\n }\n },\n destroy() {\n const swiper = this;\n if (swiper.params.hashNavigation.watchState) {\n $(window).off('hashchange', swiper.hashNavigation.onHashCange);\n }\n },\n};\nvar HashNavigation$1 = {\n name: 'hash-navigation',\n params: {\n hashNavigation: {\n enabled: false,\n replaceState: false,\n watchState: false,\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n hashNavigation: {\n initialized: false,\n init: HashNavigation.init.bind(swiper),\n destroy: HashNavigation.destroy.bind(swiper),\n setHash: HashNavigation.setHash.bind(swiper),\n onHashCange: HashNavigation.onHashCange.bind(swiper),\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n if (swiper.params.hashNavigation.enabled) {\n swiper.hashNavigation.init();\n }\n },\n destroy() {\n const swiper = this;\n if (swiper.params.hashNavigation.enabled) {\n swiper.hashNavigation.destroy();\n }\n },\n transitionEnd() {\n const swiper = this;\n if (swiper.hashNavigation.initialized) {\n swiper.hashNavigation.setHash();\n }\n },\n },\n};\n\nconst Autoplay = {\n run() {\n const swiper = this;\n const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n let delay = swiper.params.autoplay.delay;\n if ($activeSlideEl.attr('data-swiper-autoplay')) {\n delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n }\n swiper.autoplay.timeout = Utils.nextTick(() => {\n if (swiper.params.autoplay.reverseDirection) {\n if (swiper.params.loop) {\n swiper.loopFix();\n swiper.slidePrev(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.isBeginning) {\n swiper.slidePrev(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else {\n swiper.autoplay.stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopFix();\n swiper.slideNext(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.isEnd) {\n swiper.slideNext(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(0, swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else {\n swiper.autoplay.stop();\n }\n }, delay);\n },\n start() {\n const swiper = this;\n if (typeof swiper.autoplay.timeout !== 'undefined') return false;\n if (swiper.autoplay.running) return false;\n swiper.autoplay.running = true;\n swiper.emit('autoplayStart');\n swiper.autoplay.run();\n return true;\n },\n stop() {\n const swiper = this;\n if (!swiper.autoplay.running) return false;\n if (typeof swiper.autoplay.timeout === 'undefined') return false;\n\n if (swiper.autoplay.timeout) {\n clearTimeout(swiper.autoplay.timeout);\n swiper.autoplay.timeout = undefined;\n }\n swiper.autoplay.running = false;\n swiper.emit('autoplayStop');\n return true;\n },\n pause(speed) {\n const swiper = this;\n if (!swiper.autoplay.running) return;\n if (swiper.autoplay.paused) return;\n if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);\n swiper.autoplay.paused = true;\n if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n swiper.autoplay.paused = false;\n swiper.autoplay.run();\n } else {\n swiper.$wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.autoplay.paused = false;\n if (!swiper.autoplay.running) {\n swiper.autoplay.stop();\n } else {\n swiper.autoplay.run();\n }\n });\n }\n },\n};\n\nvar Autoplay$1 = {\n name: 'autoplay',\n params: {\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n autoplay: {\n running: false,\n paused: false,\n run: Autoplay.run.bind(swiper),\n start: Autoplay.start.bind(swiper),\n stop: Autoplay.stop.bind(swiper),\n pause: Autoplay.pause.bind(swiper),\n },\n });\n },\n on: {\n init() {\n const swiper = this;\n if (swiper.params.autoplay.enabled) {\n swiper.autoplay.start();\n }\n },\n beforeTransitionStart(speed, internal) {\n const swiper = this;\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.pause(speed);\n } else {\n swiper.autoplay.stop();\n }\n }\n },\n sliderFirstMove() {\n const swiper = this;\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.stop();\n } else {\n swiper.autoplay.pause();\n }\n }\n },\n destroy() {\n const swiper = this;\n if (swiper.autoplay.running) {\n swiper.autoplay.stop();\n }\n },\n },\n};\n\nconst Fade = {\n setTranslate() {\n const swiper = this;\n const { slides } = swiper;\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = swiper.slides.eq(i);\n const offset$$1 = $slideEl[0].swiperSlideOffset;\n let tx = -offset$$1;\n if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n const slideOpacity = swiper.params.fadeEffect.crossFade ?\n Math.max(1 - Math.abs($slideEl[0].progress), 0) :\n 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n $slideEl\n .css({\n opacity: slideOpacity,\n })\n .transform(`translate3d(${tx}px, ${ty}px, 0px)`);\n }\n },\n setTransition(duration) {\n const swiper = this;\n const { slides, $wrapperEl } = swiper;\n slides.transition(duration);\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n slides.transitionEnd(() => {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n eventTriggered = true;\n swiper.animating = false;\n const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n for (let i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\n });\n }\n },\n};\n\nvar EffectFade = {\n name: 'effect-fade',\n params: {\n fadeEffect: {\n crossFade: false,\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n fadeEffect: {\n setTranslate: Fade.setTranslate.bind(swiper),\n setTransition: Fade.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit() {\n const swiper = this;\n if (swiper.params.effect !== 'fade') return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}fade`);\n const overwriteParams = {\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: true,\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n },\n setTranslate() {\n const swiper = this;\n if (swiper.params.effect !== 'fade') return;\n swiper.fadeEffect.setTranslate();\n },\n setTransition(duration) {\n const swiper = this;\n if (swiper.params.effect !== 'fade') return;\n swiper.fadeEffect.setTransition(duration);\n },\n },\n};\n\nconst Cube = {\n setTranslate() {\n const swiper = this;\n const {\n $el, $wrapperEl, slides, width: swiperWidth, height: swiperHeight, rtlTranslate: rtl, size: swiperSize,\n } = swiper;\n const params = swiper.params.cubeEffect;\n const isHorizontal = swiper.isHorizontal();\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let wrapperRotate = 0;\n let $cubeShadowEl;\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('
    ');\n $wrapperEl.append($cubeShadowEl);\n }\n $cubeShadowEl.css({ height: `${swiperWidth}px` });\n } else {\n $cubeShadowEl = $el.find('.swiper-cube-shadow');\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('
    ');\n $el.append($cubeShadowEl);\n }\n }\n }\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let slideIndex = i;\n if (isVirtual) {\n slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n }\n let slideAngle = slideIndex * 90;\n let round = Math.floor(slideAngle / 360);\n if (rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n let tx = 0;\n let ty = 0;\n let tz = 0;\n if (slideIndex % 4 === 0) {\n tx = -round * 4 * swiperSize;\n tz = 0;\n } else if ((slideIndex - 1) % 4 === 0) {\n tx = 0;\n tz = -round * 4 * swiperSize;\n } else if ((slideIndex - 2) % 4 === 0) {\n tx = swiperSize + (round * 4 * swiperSize);\n tz = swiperSize;\n } else if ((slideIndex - 3) % 4 === 0) {\n tx = -swiperSize;\n tz = (3 * swiperSize) + (swiperSize * 4 * round);\n }\n if (rtl) {\n tx = -tx;\n }\n\n if (!isHorizontal) {\n ty = tx;\n tx = 0;\n }\n\n const transform$$1 = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n if (progress <= 1 && progress > -1) {\n wrapperRotate = (slideIndex * 90) + (progress * 90);\n if (rtl) wrapperRotate = (-slideIndex * 90) - (progress * 90);\n }\n $slideEl.transform(transform$$1);\n if (params.slideShadows) {\n // Set shadows\n let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $(`
    `);\n $slideEl.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $(`
    `);\n $slideEl.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n }\n $wrapperEl.css({\n '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,\n '-moz-transform-origin': `50% 50% -${swiperSize / 2}px`,\n '-ms-transform-origin': `50% 50% -${swiperSize / 2}px`,\n 'transform-origin': `50% 50% -${swiperSize / 2}px`,\n });\n\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl.transform(`translate3d(0px, ${(swiperWidth / 2) + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`);\n } else {\n const shadowAngle = Math.abs(wrapperRotate) - (Math.floor(Math.abs(wrapperRotate) / 90) * 90);\n const multiplier = 1.5 - (\n (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2) +\n (Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2)\n );\n const scale1 = params.shadowScale;\n const scale2 = params.shadowScale / multiplier;\n const offset$$1 = params.shadowOffset;\n $cubeShadowEl.transform(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${(swiperHeight / 2) + offset$$1}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`);\n }\n }\n const zFactor = (Browser.isSafari || Browser.isUiWebView) ? (-swiperSize / 2) : 0;\n $wrapperEl\n .transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`);\n },\n setTransition(duration) {\n const swiper = this;\n const { $el, slides } = swiper;\n slides\n .transition(duration)\n .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n .transition(duration);\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n $el.find('.swiper-cube-shadow').transition(duration);\n }\n },\n};\n\nvar EffectCube = {\n name: 'effect-cube',\n params: {\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94,\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n cubeEffect: {\n setTranslate: Cube.setTranslate.bind(swiper),\n setTransition: Cube.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit() {\n const swiper = this;\n if (swiper.params.effect !== 'cube') return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}cube`);\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n const overwriteParams = {\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n resistanceRatio: 0,\n spaceBetween: 0,\n centeredSlides: false,\n virtualTranslate: true,\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n },\n setTranslate() {\n const swiper = this;\n if (swiper.params.effect !== 'cube') return;\n swiper.cubeEffect.setTranslate();\n },\n setTransition(duration) {\n const swiper = this;\n if (swiper.params.effect !== 'cube') return;\n swiper.cubeEffect.setTransition(duration);\n },\n },\n};\n\nconst Flip = {\n setTranslate() {\n const swiper = this;\n const { slides, rtlTranslate: rtl } = swiper;\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let progress = $slideEl[0].progress;\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n }\n const offset$$1 = $slideEl[0].swiperSlideOffset;\n const rotate = -180 * progress;\n let rotateY = rotate;\n let rotateX = 0;\n let tx = -offset$$1;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n } else if (rtl) {\n rotateY = -rotateY;\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n if (swiper.params.flipEffect.slideShadows) {\n // Set shadows\n let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $(`
    `);\n $slideEl.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $(`
    `);\n $slideEl.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n $slideEl\n .transform(`translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`);\n }\n },\n setTransition(duration) {\n const swiper = this;\n const { slides, activeIndex, $wrapperEl } = swiper;\n slides\n .transition(duration)\n .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n .transition(duration);\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n // eslint-disable-next-line\n slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;\n eventTriggered = true;\n swiper.animating = false;\n const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n for (let i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\n });\n }\n },\n};\n\nvar EffectFlip = {\n name: 'effect-flip',\n params: {\n flipEffect: {\n slideShadows: true,\n limitRotation: true,\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n flipEffect: {\n setTranslate: Flip.setTranslate.bind(swiper),\n setTransition: Flip.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit() {\n const swiper = this;\n if (swiper.params.effect !== 'flip') return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}flip`);\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n const overwriteParams = {\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: true,\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n },\n setTranslate() {\n const swiper = this;\n if (swiper.params.effect !== 'flip') return;\n swiper.flipEffect.setTranslate();\n },\n setTransition(duration) {\n const swiper = this;\n if (swiper.params.effect !== 'flip') return;\n swiper.flipEffect.setTransition(duration);\n },\n },\n};\n\nconst Coverflow = {\n setTranslate() {\n const swiper = this;\n const {\n width: swiperWidth, height: swiperHeight, slides, $wrapperEl, slidesSizesGrid,\n } = swiper;\n const params = swiper.params.coverflowEffect;\n const isHorizontal = swiper.isHorizontal();\n const transform$$1 = swiper.translate;\n const center = isHorizontal ? -transform$$1 + (swiperWidth / 2) : -transform$$1 + (swiperHeight / 2);\n const rotate = isHorizontal ? params.rotate : -params.rotate;\n const translate = params.depth;\n // Each slide offset from center\n for (let i = 0, length = slides.length; i < length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideSize = slidesSizesGrid[i];\n const slideOffset = $slideEl[0].swiperSlideOffset;\n const offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier;\n\n let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n let translateZ = -translate * Math.abs(offsetMultiplier);\n\n let translateY = isHorizontal ? 0 : params.stretch * (offsetMultiplier);\n let translateX = isHorizontal ? params.stretch * (offsetMultiplier) : 0;\n\n // Fix for ultra small values\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n\n const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\n\n $slideEl.transform(slideTransform);\n $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (params.slideShadows) {\n // Set shadows\n let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n if ($shadowBeforeEl.length === 0) {\n $shadowBeforeEl = $(`
    `);\n $slideEl.append($shadowBeforeEl);\n }\n if ($shadowAfterEl.length === 0) {\n $shadowAfterEl = $(`
    `);\n $slideEl.append($shadowAfterEl);\n }\n if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;\n }\n }\n\n // Set correct perspective for IE10\n if (Support.pointerEvents || Support.prefixedPointerEvents) {\n const ws = $wrapperEl[0].style;\n ws.perspectiveOrigin = `${center}px 50%`;\n }\n },\n setTransition(duration) {\n const swiper = this;\n swiper.slides\n .transition(duration)\n .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n .transition(duration);\n },\n};\n\nvar EffectCoverflow = {\n name: 'effect-coverflow',\n params: {\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n modifier: 1,\n slideShadows: true,\n },\n },\n create() {\n const swiper = this;\n Utils.extend(swiper, {\n coverflowEffect: {\n setTranslate: Coverflow.setTranslate.bind(swiper),\n setTransition: Coverflow.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit() {\n const swiper = this;\n if (swiper.params.effect !== 'coverflow') return;\n\n swiper.classNames.push(`${swiper.params.containerModifierClass}coverflow`);\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n },\n setTranslate() {\n const swiper = this;\n if (swiper.params.effect !== 'coverflow') return;\n swiper.coverflowEffect.setTranslate();\n },\n setTransition(duration) {\n const swiper = this;\n if (swiper.params.effect !== 'coverflow') return;\n swiper.coverflowEffect.setTransition(duration);\n },\n },\n};\n\n// Swiper Class\n\nconst components = [\n Device$1,\n Support$1,\n Browser$1,\n Resize,\n Observer$1,\n Virtual$1,\n Keyboard$1,\n Mousewheel$1,\n Navigation$1,\n Pagination$1,\n Scrollbar$1,\n Parallax$1,\n Zoom$1,\n Lazy$1,\n Controller$1,\n A11y,\n History$1,\n HashNavigation$1,\n Autoplay$1,\n EffectFade,\n EffectCube,\n EffectFlip,\n EffectCoverflow\n];\n\nif (typeof Swiper.use === 'undefined') {\n Swiper.use = Swiper.Class.use;\n Swiper.installModule = Swiper.Class.installModule;\n}\n\nSwiper.use(components);\n\nexport default Swiper;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/swiper/dist/js/swiper.esm.bundle.js","import * as CONSTANTS from '../modules/constants';\r\nimport 'string.prototype.endswith';\r\nimport { svgInject } from '../modules/svg-injection';\r\nimport { loginState } from '../modules/login-state';\r\nimport { stickyHeader } from '../modules/sticky-header';\r\nimport { nodeListToArray } from '../modules/nodelist-to-array';\r\nimport { CurtainMenu } from '../modules/curtain-menu';\r\nimport { AriaToggling } from '../modules/aria-click-toggling';\r\nimport { IeDesaturate } from '../modules/ie-desaturate';\r\nimport { alertMessage } from '../modules/alert-message';\r\nimport { Accordions } from '../../../Lib/Lib-Javascript/accordion/accordions';\r\nimport { DateListingBlock } from '../modules/date-listing-block';\r\nimport { PublicityImageBlock } from '../modules/publicity-image-block';\r\nimport setUpSubsToggling from '../modules/subs-toggle-hidden';\r\nimport * as A11yDialog from 'a11y-dialog';\r\nimport { lockBody, unlockBody } from '../modules/lock-body';\r\nimport { ScrollspyNavbar } from '../modules/scrollspy-navbar';\r\nimport * as SmoothScroll from 'smooth-scroll';\r\nimport { MultimediaLayout } from '../modules/multimedia-layout';\r\nimport '../modules/init-swiper';\r\nimport { enhanceEpiForms } from '../modules/epi-forms';\r\n\r\n// Self-contained, self-invoking function.\r\n(function() {\r\n loginState();\r\n\r\n // Request SVG sprite\r\n let spritePath = (window as any).SVG_SPRITE_PATH || '/Static/imgs/svg-sprite.svg';\r\n svgInject(spritePath);\r\n\r\n CONSTANTS.GLOBAL_HTML.classList.remove('no-js');\r\n\r\n stickyHeader();\r\n\r\n // Full Screen Curtain Menu\r\n new CurtainMenu(CONSTANTS.GLOBAL_BODY);\r\n new AriaToggling(nodeListToArray(document.querySelectorAll('#mainNav .nav-main-list-item > .nav-sub-trigger')));\r\n\r\n // Greyscale Images for IE 10 and IE 11\r\n new IeDesaturate(CONSTANTS.GLOBAL_HTML);\r\n\r\n alertMessage();\r\n setUpSubsToggling('subs-container-js');\r\n\r\n // Accordion\r\n new Accordions();\r\n\r\n // Date Listing Block\r\n new DateListingBlock();\r\n\r\n // Publicity Image Block\r\n new PublicityImageBlock();\r\n\r\n // Subs seating chart modal\r\n const globalModals = Array.prototype.slice.call(document.querySelectorAll('.modal-js')) as Array;\r\n if (globalModals.length > 0) {\r\n let modalList = [];\r\n globalModals.forEach(modal => {\r\n var modalInstance = new A11yDialog(modal);\r\n\r\n modalList.push(modalInstance);\r\n\r\n modalInstance.on('show', (dialog, e) => {\r\n lockBody();\r\n });\r\n\r\n modalInstance.on('hide', (dialog, e) => {\r\n unlockBody();\r\n });\r\n\r\n if (modal.getAttribute('data-modal-show')) {\r\n modalList[modalList.length - 1].show();\r\n }\r\n });\r\n }\r\n\r\n new ScrollspyNavbar();\r\n\r\n new MultimediaLayout('.multimedia-block .block-body');\r\n\r\n var scroll = new SmoothScroll('a[href*=\"#\"]', {\r\n // Selectors\r\n ignore: '[data-scroll-ignore], .crt-popup-wrapper', // Selector for links to ignore (must be a valid CSS selector)\r\n header: '#siteHeader', // Selector for fixed headers (must be a valid CSS selector)\r\n\r\n // Speed & Easing\r\n speed: 500, // Integer. How fast to complete the scroll in milliseconds\r\n offset: 0, // Integer or Function returning an integer. How far to offset the scrolling anchor location in pixels\r\n easing: 'easeInOutCubic', // Easing pattern to use\r\n\r\n // Callback API\r\n before: function(anchor, toggle) {}, // Callback to run before scroll\r\n after: function(anchor, toggle) {} // Callback to run after scroll\r\n });\r\n\r\n // My Membership Benefits toggle\r\n const benefitsContent = document.getElementById('my-benefits');\r\n const benefitsContentTrigger = document.getElementById('my-benefits-trigger');\r\n\r\n if (benefitsContentTrigger) {\r\n benefitsContentTrigger.addEventListener('click', e => {\r\n if (benefitsContent.classList.contains('visually-hidden')) {\r\n benefitsContent.classList.remove('visually-hidden');\r\n benefitsContentTrigger.innerText = 'Hide Details';\r\n } else {\r\n benefitsContent.classList.add('visually-hidden');\r\n benefitsContentTrigger.innerText = 'Show Details';\r\n }\r\n });\r\n }\r\n\r\n //EPI Forms\r\n if (document.querySelector('.EPiServerForms')) {\r\n enhanceEpiForms();\r\n }\r\n\r\n // Add / Update a key-value pair in the URL query parameters\r\n function updateUrlParameter(uri, key, value) {\r\n // remove the hash part before operating on the uri\r\n var i = uri.indexOf('#');\r\n var hash = i === -1 ? '' : uri.substr(i);\r\n\r\n uri = i === -1 ? uri : uri.substr(0, i);\r\n\r\n var re = new RegExp('([?&])' + key + '=.*?(&|$)', 'i');\r\n var separator = uri.indexOf('?') !== -1 ? '&' : '?';\r\n\r\n if (uri.match(re)) {\r\n uri = uri.replace(re, '$1' + key + '=' + value + '$2');\r\n } else {\r\n uri = uri + separator + key + '=' + value;\r\n }\r\n\r\n // finally append the hash as well\r\n return uri + hash;\r\n }\r\n\r\n // Login Link Return URL\r\n const loginLink: HTMLAnchorElement = document.querySelector('.nav-utility-loggedout-js > a');\r\n const currentURL: any = document.location.href;\r\n const isTNEW = document.querySelector('.tnew-container') !== null;\r\n\r\n if (currentURL.endsWith('/cart/') || isTNEW) {\r\n if (!currentURL.endsWith('logout.aspx') && !currentURL.endsWith('/my-account') && !currentURL.endsWith('/my-account/')) {\r\n const currentLoginLink = loginLink.getAttribute('href');\r\n const newLoginLink = updateUrlParameter(currentLoginLink, 'ReturnURL', encodeURIComponent(currentURL));\r\n\r\n loginLink.setAttribute('href', newLoginLink);\r\n }\r\n }\r\n})();\r\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Static/javascript/common/global.ts","/*! http://mths.be/endswith v0.2.0 by @mathias */\nif (!String.prototype.endsWith) {\n\t(function() {\n\t\t'use strict'; // needed to support `apply`/`call` with `undefined`/`null`\n\t\tvar defineProperty = (function() {\n\t\t\t// IE 8 only supports `Object.defineProperty` on DOM elements\n\t\t\ttry {\n\t\t\t\tvar object = {};\n\t\t\t\tvar $defineProperty = Object.defineProperty;\n\t\t\t\tvar result = $defineProperty(object, object, object) && $defineProperty;\n\t\t\t} catch(error) {}\n\t\t\treturn result;\n\t\t}());\n\t\tvar toString = {}.toString;\n\t\tvar endsWith = function(search) {\n\t\t\tif (this == null) {\n\t\t\t\tthrow TypeError();\n\t\t\t}\n\t\t\tvar string = String(this);\n\t\t\tif (search && toString.call(search) == '[object RegExp]') {\n\t\t\t\tthrow TypeError();\n\t\t\t}\n\t\t\tvar stringLength = string.length;\n\t\t\tvar searchString = String(search);\n\t\t\tvar searchLength = searchString.length;\n\t\t\tvar pos = stringLength;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\tvar position = arguments[1];\n\t\t\t\tif (position !== undefined) {\n\t\t\t\t\t// `ToInteger`\n\t\t\t\t\tpos = position ? Number(position) : 0;\n\t\t\t\t\tif (pos != pos) { // better `isNaN`\n\t\t\t\t\t\tpos = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar end = Math.min(Math.max(pos, 0), stringLength);\n\t\t\tvar start = end - searchLength;\n\t\t\tif (start < 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar index = -1;\n\t\t\twhile (++index < searchLength) {\n\t\t\t\tif (string.charCodeAt(start + index) != searchString.charCodeAt(index)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t\tif (defineProperty) {\n\t\t\tdefineProperty(String.prototype, 'endsWith', {\n\t\t\t\t'value': endsWith,\n\t\t\t\t'configurable': true,\n\t\t\t\t'writable': true\n\t\t\t});\n\t\t} else {\n\t\t\tString.prototype.endsWith = endsWith;\n\t\t}\n\t}());\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/string.prototype.endswith/endswith.js","export function svgInject(svgURL: string) {\r\n const request = new XMLHttpRequest();\r\n\r\n request.open('GET', svgURL, true);\r\n request.onload = function() {\r\n if (request.status >= 200 && request.status < 400) {\r\n let data = request.responseText;\r\n\r\n // Create node with response data and insert into DOM\r\n let div = document.createElement('div');\r\n div.innerHTML = data;\r\n document.body.insertBefore(div, document.body.childNodes[0]);\r\n } else {\r\n console.log('Could not load SVG sprite');\r\n }\r\n };\r\n request.onerror = function() {\r\n console.log('Issue loading SVG sprite - connection error');\r\n };\r\n request.send();\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Static/javascript/modules/svg-injection.ts","import { nodeListToArray } from './nodelist-to-array'\r\nimport { hideElements } from './hide-elements'\r\nimport { showElements } from './show-elements'\r\n\r\ndeclare const TNEW_RESOURCES_DOMAIN;\r\n\r\nfunction xhrRequest(url: string, requestType: string, successFunction?: Function, errorFunction?: Function) {\r\n let xhttp = new XMLHttpRequest();\r\n xhttp.withCredentials = true;\r\n xhttp.onreadystatechange = () => {\r\n if (xhttp.readyState == 4 && xhttp.status == 200) {\r\n //success!\r\n if (successFunction) {\r\n if (requestType === \"POST\")\r\n successFunction(xhttp.responseURL);\r\n else\r\n successFunction(xhttp.responseText);\r\n }\r\n }\r\n else {\r\n if (errorFunction) {\r\n errorFunction();\r\n }\r\n }\r\n };\r\n xhttp.open(requestType, url, true);\r\n if (requestType === \"POST\")\r\n xhttp.setRequestHeader('Content-Type', 'text/html');\r\n else\r\n xhttp.setRequestHeader('accept', 'application/json');\r\n xhttp.send();\r\n}\r\n\r\nexport function loginState() {\r\n let loginStateRequestSuccess = function (responseText) {\r\n let isLoggedIn = JSON.parse(responseText);\r\n let loggedOutLinks = nodeListToArray(document.querySelectorAll('.nav-utility-loggedout-js'));\r\n let loggedInLinks = nodeListToArray(document.querySelectorAll('.nav-utility-loggedin-js'));\r\n let linksToHide = loggedInLinks;\r\n let linksToShow = loggedOutLinks;\r\n let tnewPage = document.querySelector(\".tnew\");\r\n\r\n if (isLoggedIn) {\r\n linksToHide = loggedOutLinks;\r\n linksToShow = loggedInLinks;\r\n }\r\n\r\n hideElements(linksToHide);\r\n showElements(linksToShow);\r\n }\r\n xhrRequest(TNEW_RESOURCES_DOMAIN + '/api/login/IsLoggedIn', \"GET\", loginStateRequestSuccess);\r\n}\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Static/javascript/modules/login-state.ts","export function hideElements(array: Array) {\r\n array.forEach(el => {\r\n el.classList.add('hidden');\r\n });\r\n}\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Static/javascript/modules/hide-elements.ts","export function showElements(array: Array) {\r\n array.forEach(el => {\r\n el.classList.remove('hidden');\r\n });\r\n}\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Static/javascript/modules/show-elements.ts","import * as CONSTANTS from '../modules/constants';\r\n\r\nexport function stickyHeader() {\r\n window.addEventListener('load', function() {\r\n const header = document.getElementById('siteHeader');\r\n const calendarList = document.querySelector('.calendar-container');\r\n const calendarFilters = document.getElementById('calendar-filters');\r\n const siteBody = document.body;\r\n\r\n let headerDimensions = header.offsetHeight;\r\n let calendarFiltersDimensions;\r\n let lastScrollTop = 0;\r\n\r\n if (calendarFilters != null) {\r\n calendarFiltersDimensions = calendarFilters.offsetHeight;\r\n }\r\n\r\n function initMobileSticky() {\r\n // Handle header compensation on smaller screens\r\n if (window.matchMedia('(max-width: 768px)').matches) {\r\n headerDimensions = header.offsetHeight;\r\n\r\n // compensate for fixed header on small screens\r\n //siteBody.style.paddingTop = headerDimensions + \"px\";\r\n\r\n if (calendarFilters != null) {\r\n calendarFiltersDimensions = calendarFilters.offsetHeight;\r\n\r\n // set calendar filters to be sticky by default on small screens\r\n calendarFilters.classList.add('sticky-top');\r\n calendarFilters.style.transform = 'translateY(' + headerDimensions + 'px)';\r\n (calendarList as HTMLElement).style.paddingTop = calendarFiltersDimensions + 'px';\r\n }\r\n }\r\n }\r\n\r\n initMobileSticky();\r\n\r\n function resetOffsets() {\r\n headerDimensions = header.offsetHeight;\r\n\r\n if (calendarFilters != null) {\r\n calendarFiltersDimensions = calendarFilters.offsetHeight;\r\n }\r\n }\r\n\r\n function stickyDisplayHandler() {\r\n // only run on larger screens\r\n if (window.matchMedia('(min-width: 769px)').matches) {\r\n var currentPos = window.pageYOffset || document.documentElement.scrollTop; // Credits: \"https://github.com/qeremy/so/blob/master/so.dom.js#L426\"\r\n\r\n headerDimensions = header.offsetHeight;\r\n\r\n if (calendarFilters != null) {\r\n calendarFiltersDimensions = calendarFilters.offsetHeight;\r\n }\r\n\r\n // handle calendar sticky\r\n if (calendarFilters != null && currentPos > headerDimensions) {\r\n calendarFilters.classList.add('sticky-top');\r\n (calendarList as HTMLElement).style.paddingTop = calendarFiltersDimensions + 'px';\r\n }\r\n\r\n // handle header sticky\r\n if (currentPos === 0) {\r\n if (!CONSTANTS.GLOBAL_BODY.classList.contains('locked')) {\r\n header.classList.add('sticky-show');\r\n header.style.top = '0px';\r\n header.classList.remove('sticky-top');\r\n\r\n //siteBody.classList.remove('sticky-header');\r\n //siteBody.style.paddingTop = \"0px\";\r\n\r\n if (calendarFilters != null) {\r\n calendarFilters.style.transform = 'translateY(0px)';\r\n calendarFilters.classList.remove('sticky-top');\r\n (calendarList as HTMLElement).style.paddingTop = '0px';\r\n }\r\n }\r\n } else if (currentPos > lastScrollTop && currentPos > headerDimensions) {\r\n if (!CONSTANTS.GLOBAL_BODY.classList.contains('locked')) {\r\n // downscroll code\r\n header.classList.add('sticky-top');\r\n header.classList.remove('sticky-show');\r\n header.style.top = '-' + headerDimensions + 'px';\r\n\r\n //siteBody.classList.add('sticky-header');\r\n //siteBody.style.paddingTop = headerDimensions + \"px\";\r\n\r\n if (calendarFilters != null) {\r\n calendarFilters.style.transform = 'translateY(0px)';\r\n }\r\n }\r\n } else if (currentPos < lastScrollTop && currentPos > headerDimensions) {\r\n if (!CONSTANTS.GLOBAL_BODY.classList.contains('locked')) {\r\n // upscroll code\r\n header.classList.add('sticky-show');\r\n header.style.top = '0px';\r\n\r\n if (calendarFilters != null) {\r\n calendarFilters.style.transform = 'translateY(' + headerDimensions + 'px)';\r\n }\r\n }\r\n }\r\n\r\n // set current position to lastScrollTop\r\n lastScrollTop = currentPos;\r\n }\r\n }\r\n\r\n window.addEventListener('resize', () =>\r\n window.requestAnimationFrame(() => {\r\n initMobileSticky();\r\n stickyDisplayHandler();\r\n })\r\n );\r\n\r\n window.addEventListener('scroll', () =>\r\n window.requestAnimationFrame(() => {\r\n stickyDisplayHandler();\r\n })\r\n );\r\n });\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Static/javascript/modules/sticky-header.ts","import { lockBody, unlockBody } from '../modules/lock-body';\r\n\r\nexport class CurtainMenu {\r\n constructor(public bodyElement: any) {\r\n let curtainTrigger = document.getElementById('curtainMenutrigger');\r\n let curtainTriggerText = curtainTrigger.querySelector('.link-text');\r\n let curtainMenu = document.getElementById('curtainMenu');\r\n let curtainMenuInner = document.querySelector('.curtain-menu-inner');\r\n let sideHeaderHeight = document.querySelector('#siteHeader').scrollHeight;\r\n let menuSubnavTriggers = [].slice.call(document.querySelectorAll('.nav-sub-trigger'));\r\n\r\n if (curtainTrigger) {\r\n curtainTrigger.addEventListener('click', e => {\r\n e.preventDefault();\r\n\r\n if (curtainMenu.classList.contains('open')) {\r\n curtainMenu.classList.remove('open');\r\n curtainTrigger.classList.remove('open');\r\n this.bodyElement.classList.remove('nav-open');\r\n window.removeEventListener('resize', isAlertOpenResize);\r\n unlockBody();\r\n closeAllSubs();\r\n curtainTriggerText.innerHTML = 'Menu';\r\n } else {\r\n showFirstAccordion();\r\n curtainMenu.classList.add('open');\r\n curtainTrigger.classList.add('open');\r\n this.bodyElement.classList.add('nav-open');\r\n isAlertOpen();\r\n window.addEventListener('resize', isAlertOpenResize);\r\n lockBody();\r\n curtainTriggerText.innerHTML = 'Close';\r\n }\r\n });\r\n }\r\n\r\n function closeAllSubs() {\r\n let allOpenSubs = [].slice.call(document.querySelectorAll('.nav-main-list-sub.open'));\r\n\r\n for (var i = 0, l = allOpenSubs.length; i < l; i++) {\r\n allOpenSubs[i].setAttribute('aria-hidden', 'true');\r\n allOpenSubs[i].classList.remove('open');\r\n }\r\n }\r\n\r\n function showFirstAccordion() {\r\n if (menuSubnavTriggers && window.matchMedia('(min-width: 768px)').matches) {\r\n let firstMenu = menuSubnavTriggers[0].getAttribute('data-trigger-id');\r\n handleSubMenu(firstMenu);\r\n }\r\n }\r\n\r\n function isAlertOpen() {\r\n if (document.querySelector('.site-wide-alert-show')) {\r\n sideHeaderHeight = document.querySelector('#siteHeader').scrollHeight;\r\n\r\n curtainMenuInner.style.paddingTop = sideHeaderHeight + 'px';\r\n }\r\n }\r\n\r\n function isAlertOpenResize() { \r\n if (document.querySelector('#siteHeader').scrollHeight != sideHeaderHeight) {\r\n sideHeaderHeight = document.querySelector('#siteHeader').scrollHeight;\r\n\r\n curtainMenuInner.style.paddingTop = sideHeaderHeight + 'px';\r\n } \r\n }\r\n\r\n function handleCalloutsDisplay(calloutsData) {\r\n let calloutLength = calloutsData.callouts.length;\r\n\r\n if (calloutLength > 0) {\r\n let calloutMarkup = '';\r\n\r\n for (var i = 0; i < calloutLength; i++) {\r\n let callout = calloutsData.callouts[i];\r\n\r\n calloutMarkup += '
    ';\r\n calloutMarkup += ' ';\r\n calloutMarkup +=\r\n '
    ';\r\n calloutMarkup += '
    ';\r\n calloutMarkup += '
    ';\r\n calloutMarkup += '

    ' + callout.title + '

    ';\r\n calloutMarkup += '

    ' + callout.date + '

    ';\r\n calloutMarkup += ' ' + callout.linkTitle + '';\r\n calloutMarkup += '
    ';\r\n calloutMarkup += '
    ';\r\n }\r\n\r\n document.querySelector('.nav-callouts-body').innerHTML = calloutMarkup;\r\n }\r\n }\r\n\r\n function handleSubMenu(triggerId) {\r\n let subnavID = triggerId;\r\n let subnavToOpen = document.getElementById(subnavID);\r\n\r\n if (subnavToOpen.getAttribute('aria-hidden') === 'true') {\r\n closeAllSubs();\r\n subnavToOpen.setAttribute('aria-hidden', 'false');\r\n subnavToOpen.classList.add('open');\r\n\r\n let calloutsData = JSON.parse(subnavToOpen.dataset.callouts);\r\n handleCalloutsDisplay(calloutsData);\r\n } else {\r\n subnavToOpen.setAttribute('aria-hidden', 'true');\r\n subnavToOpen.classList.remove('open');\r\n }\r\n }\r\n\r\n if (menuSubnavTriggers) {\r\n for (var i = 0, l = menuSubnavTriggers.length; i < l; i++) {\r\n menuSubnavTriggers[i].addEventListener('click', function(e) {\r\n e.preventDefault();\r\n handleSubMenu(this.getAttribute('data-trigger-id'));\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Static/javascript/modules/curtain-menu.ts","export class AriaToggling {\r\n showClass: string = 'show-menu';\r\n mNav: string = '#mainNav';\r\n constructor(public links) {\r\n //Keyboard Navigation\r\n if (window.innerWidth > 1025 && !document.getElementsByTagName('html')[0].classList.contains('mod-touchevents')) {\r\n if (window[\"element\"] && !Element.prototype[\"closest\"]) {\r\n Element.prototype[\"closest\"] =\r\n function (s) {\r\n var matches = (this.document || this.ownerdocument).queryselectorall(s),\r\n i,\r\n el = this;\r\n do {\r\n i = matches.length;\r\n while (--i >= 0 && matches.item(i) !== el) { };\r\n } while ((i < 0) && (el = el.parentelement));\r\n return el;\r\n };\r\n }\r\n links.forEach((link) => {\r\n let linkParent = link.parentNode;\r\n link.addEventListener('focus', (e) => {\r\n this.focusOn(e,link,linkParent);\r\n });\r\n link.addEventListener('blur', (e) => {\r\n this.blurOut(e, linkParent);\r\n });\r\n });\r\n }\r\n //Tablet landscape view to allow users to tap a parent link to see the children.\r\n if (window.innerWidth <= 1600 && window.innerWidth > 767 && document.getElementsByTagName('html')[0].classList.contains('mod-touchevents')) {\r\n //Click outside of the header\r\n this.outSideClicks();\r\n links.forEach((link) => { \r\n let linkParent = link.parentNode;\r\n link.addEventListener('click', (e) => {\r\n if (!linkParent.classList.contains(this.showClass)) {\r\n e.preventDefault();\r\n if (document.querySelector('.'+this.showClass) !== null) {\r\n document.querySelector('.' + this.showClass).classList.remove(this.showClass);\r\n }\r\n linkParent.classList.add(this.showClass);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n outSideClicks() {\r\n let mNav = document.querySelector(this.mNav);\r\n if (mNav) {\r\n // For clicks inside the element\r\n document.querySelector(this.mNav).addEventListener('click', (e) => {\r\n this.checkClick(e);\r\n });\r\n // For clicks elsewhere on the page\r\n document.addEventListener('click', () => {\r\n //close stuff\r\n if (document.querySelector('.' + this.showClass) !== null) {\r\n document.querySelector('.' + this.showClass).classList.remove(this.showClass);\r\n }\r\n });\r\n // For clicks elsewhere on the page\r\n document.addEventListener('touchstart', () => {\r\n //close stuff\r\n if (document.querySelector('.' + this.showClass) !== null) {\r\n document.querySelector('.' + this.showClass).classList.remove(this.showClass);\r\n }\r\n });\r\n }\r\n }\r\n checkClick(e) {\r\n // Make sure the event doesn't bubble from your element\r\n if (e) { e.stopPropagation(); }\r\n else { window.event.cancelBubble = true; }\r\n }\r\n focusOn(e,link,linkParent) {\r\n setTimeout(() => {\r\n this.toggleOff();\r\n if (link.classList.contains('has-meganav-js') && !linkParent.classList.contains(this.showClass)) {\r\n this.toggleOn(linkParent);\r\n }\r\n e.stopPropagation();\r\n var viewableLinks = Array.prototype.slice.call(linkParent.querySelectorAll('[aria-hidden=\"false\"] a'));\r\n if (viewableLinks.length > 0) {\r\n viewableLinks.forEach((viewableLink) => {\r\n viewableLink.addEventListener('blur', (e) => {\r\n this.blurOut(e, linkParent);\r\n });\r\n });\r\n }\r\n }, 10);\r\n }\r\n toggleOn(linkParent) {\r\n linkParent.classList.add(this.showClass);\r\n linkParent.querySelector('[aria-hidden=\"true\"]').setAttribute('aria-hidden', 'false');\r\n }\r\n blurOut(e, linkParent) {\r\n setTimeout(() => {\r\n if (document.activeElement[\"closest\"]('[aria-haspopup=\"true\"]') !== linkParent || document.activeElement[\"closest\"]('[aria-haspopup=\"true\"]') === null) {\r\n this.toggleOff();\r\n }\r\n e.stopPropagation();\r\n }, 10);\r\n }\r\n toggleOff() {\r\n var items = Array.prototype.slice.call(document.querySelectorAll('.nav-main-list-item.show-menu'));\r\n if (items.length > 0) {\r\n items.forEach(function (item) {\r\n item.classList.remove('show-menu');\r\n item.querySelector('[aria-hidden=\"false\"]').setAttribute('aria-hidden', 'true');\r\n });\r\n }\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Static/javascript/modules/aria-click-toggling.ts","export class IeDesaturate {\r\n constructor(public htmlElement: any) {\r\n if (this.getInternetExplorerVersion() >= 10) {\r\n this.htmlElement.classList.add('ie' + this.getInternetExplorerVersion());\r\n var desaturateImages = [].slice.call(document.querySelectorAll('.desaturate img'));\r\n desaturateImages.forEach(img => {\r\n this.grayscaleIE10(img);\r\n });\r\n }\r\n }\r\n getInternetExplorerVersion() {\r\n var rv = -1;\r\n if (navigator.appName == 'Microsoft Internet Explorer') {\r\n var ua = navigator.userAgent;\r\n var re = new RegExp(\"MSIE ([0-9]{1,}[\\.0-9]{0,})\");\r\n if (re.exec(ua) != null)\r\n rv = parseFloat(RegExp.$1);\r\n }\r\n else if (navigator.appName == 'Netscape') {\r\n var ua = navigator.userAgent;\r\n var re = new RegExp(\"Trident/.*rv:([0-9]{1,}[\\.0-9]{0,})\");\r\n if (re.exec(ua) != null)\r\n rv = parseFloat(RegExp.$1);\r\n }\r\n return rv;\r\n }\r\n grayscaleIE10(img) {\r\n let imgObj = img;\r\n imgObj.src = this.gray(imgObj);\r\n };\r\n gray(imgObject) {\r\n var canvas = document.createElement('canvas');\r\n var canvasContext = canvas.getContext('2d');\r\n var imgW = imgObject.naturalWidth;\r\n var imgH = imgObject.naturalHeight;\r\n canvas.width = imgW;\r\n canvas.height = imgH;\r\n canvasContext.drawImage(imgObject, 0, 0);\r\n var imgPixels = canvasContext.getImageData(0, 0, imgW, imgH);\r\n for (var y = 0; y < imgPixels.height; y++) {\r\n for (var x = 0; x < imgPixels.width; x++) {\r\n var i = (y * 4) * imgPixels.width + x * 4;\r\n var avg = (imgPixels.data[i] + imgPixels.data[i + 1] + imgPixels.data[i + 2]) / 3;\r\n imgPixels.data[i] = avg;\r\n imgPixels.data[i + 1] = avg;\r\n imgPixels.data[i + 2] = avg;\r\n }\r\n }\r\n canvasContext.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height);\r\n return canvas.toDataURL();\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Static/javascript/modules/ie-desaturate.ts","import 'isomorphic-fetch';\r\n\r\ndeclare const TNEW_RESOURCES_DOMAIN;\r\n\r\nexport function alertMessage()\r\n{\r\n const ALERT_MESSAGE_ID = 'siteWideAlertMessage';\r\n const ALERT_CANCEL_ID = 'siteWideAlertCancel';\r\n const SHOW_CLASS = 'site-wide-alert-show';\r\n\r\n let alertMessageElement = document.getElementById(ALERT_MESSAGE_ID);\r\n let alertCancelElement = document.getElementById(ALERT_CANCEL_ID);\r\n let siteBody = document.querySelector('.site-body');\r\n let siteHeader = document.querySelector('#siteHeader');\r\n let siteHeaderHeight = '';\r\n let curtainMenu = document.querySelector('.curtain-menu-inner');\r\n\r\n if (alertMessageElement && alertCancelElement) {\r\n document.addEventListener('DOMContentLoaded', setAlertMessageVisibility);\r\n alertCancelElement.addEventListener('click', cancelAlert)\r\n }\r\n\r\n function adjustSiteBody() {\r\n if (document.querySelector('.page-hero-heading-no-image') || (!document.querySelector('.page-hero-tint-overlay') && !document.querySelector('.home-page-js') &&\r\n !document.querySelector('.cal-site-body'))) {\r\n calcSiteHeaderHeight()\r\n\r\n window.addEventListener('resize', function () {\r\n calcSiteHeaderHeight(); \r\n })\r\n }\r\n else if (!document.querySelector('.cal-site-body') && !document.querySelector('.page-hero-large-parallax-alt')) {\r\n if (window.innerWidth < 768) {\r\n calcSiteHeaderHeight()\r\n }\r\n\r\n window.addEventListener('resize', function () {\r\n if (window.innerWidth < 768) {\r\n calcSiteHeaderHeight()\r\n }\r\n else if (siteBody.hasAttribute('style')) {\r\n siteBody.removeAttribute('style'); \r\n }\r\n })\r\n }\r\n }\r\n\r\n function calcSiteHeaderHeight() {\r\n if (siteBody.hasAttribute('style')) {\r\n siteBody.removeAttribute('style');\r\n }\r\n\r\n // 35px buffer added to match design\r\n siteHeaderHeight = siteHeader.scrollHeight + 35 + 'px';\r\n siteBody.style.paddingTop = siteHeaderHeight;\r\n }\r\n\r\n function setAlertMessageVisibility() {\r\n fetch(TNEW_RESOURCES_DOMAIN + '/api/AlertMessage/ShouldShowMessage',\r\n {\r\n credentials: 'include',\r\n })\r\n .then(response => {\r\n if (response.ok) {\r\n return response.json() as Promise;\r\n }\r\n else {\r\n // Failure case\r\n console.log(response);\r\n }\r\n }).then(shouldShowMessage => {\r\n if (shouldShowMessage) {\r\n alertMessageElement.classList.add(SHOW_CLASS);\r\n adjustSiteBody();\r\n }\r\n });\r\n }\r\n\r\n function cancelAlert() {\r\n if (curtainMenu.hasAttribute('style')) {\r\n curtainMenu.removeAttribute('style'); \r\n }\r\n\r\n if (siteBody.hasAttribute('style')) {\r\n siteBody.removeAttribute('style');\r\n }\r\n\r\n fetch(TNEW_RESOURCES_DOMAIN + '/api/AlertMessage/CloseModal', {\r\n method: 'post',\r\n credentials: 'include', \r\n })\r\n .then(response => {\r\n if (response.ok) {\r\n alertMessageElement.classList.remove(SHOW_CLASS);\r\n return response;\r\n }\r\n else {\r\n // Failure case\r\n console.log(response);\r\n }\r\n });\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Static/javascript/modules/alert-message.ts","// the whatwg-fetch polyfill installs the fetch() function\n// on the global object (window or self)\n//\n// Return that as the export for use in Webpack, Browserify etc.\nrequire('whatwg-fetch');\nmodule.exports = self.fetch.bind(self);\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/isomorphic-fetch/fetch-npm-browserify.js","/* eslint-disable no-prototype-builtins */\nvar g =\n (typeof globalThis !== 'undefined' && globalThis) ||\n (typeof self !== 'undefined' && self) ||\n // eslint-disable-next-line no-undef\n (typeof global !== 'undefined' && global) ||\n {}\n\nvar support = {\n searchParams: 'URLSearchParams' in g,\n iterable: 'Symbol' in g && 'iterator' in Symbol,\n blob:\n 'FileReader' in g &&\n 'Blob' in g &&\n (function() {\n try {\n new Blob()\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in g,\n arrayBuffer: 'ArrayBuffer' in g\n}\n\nfunction isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n}\n\nif (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ]\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n}\n\nfunction normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {\n throw new TypeError('Invalid character in header field name: \"' + name + '\"')\n }\n return name.toLowerCase()\n}\n\nfunction normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n}\n\n// Build a destructive iterator for the value list\nfunction iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n}\n\nexport function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n if (header.length != 2) {\n throw new TypeError('Headers constructor: expected name/value pair to be length 2, found' + header.length)\n }\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n}\n\nHeaders.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue + ', ' + value : value\n}\n\nHeaders.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n}\n\nHeaders.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n}\n\nHeaders.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n}\n\nHeaders.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n}\n\nHeaders.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n}\n\nHeaders.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push(name)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.values = function() {\n var items = []\n this.forEach(function(value) {\n items.push(value)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push([name, value])\n })\n return iteratorFor(items)\n}\n\nif (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n}\n\nfunction consumed(body) {\n if (body._noBody) return\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n}\n\nfunction fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n}\n\nfunction readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n}\n\nfunction readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n var match = /charset=([A-Za-z0-9_-]+)/.exec(blob.type)\n var encoding = match ? match[1] : 'utf-8'\n reader.readAsText(blob, encoding)\n return promise\n}\n\nfunction readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join('')\n}\n\nfunction bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n}\n\nfunction Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n /*\n fetch-mock wraps the Response object in an ES6 Proxy to\n provide useful test harness features such as flush. However, on\n ES5 browsers without fetch or Proxy support pollyfills must be used;\n the proxy-pollyfill is unable to proxy an attribute unless it exists\n on the object before the Proxy is created. This change ensures\n Response.bodyUsed exists on the instance, while maintaining the\n semantic of setting Request.bodyUsed in the constructor before\n _initBody is called.\n */\n // eslint-disable-next-line no-self-assign\n this.bodyUsed = this.bodyUsed\n this._bodyInit = body\n if (!body) {\n this._noBody = true;\n this._bodyText = ''\n } else if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n this._bodyText = body = Object.prototype.toString.call(body)\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n var isConsumed = consumed(this)\n if (isConsumed) {\n return isConsumed\n } else if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n return Promise.resolve(\n this._bodyArrayBuffer.buffer.slice(\n this._bodyArrayBuffer.byteOffset,\n this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n )\n )\n } else {\n return Promise.resolve(this._bodyArrayBuffer)\n }\n } else if (support.blob) {\n return this.blob().then(readBlobAsArrayBuffer)\n } else {\n throw new Error('could not read as ArrayBuffer')\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n}\n\n// HTTP methods whose capitalization should be normalized\nvar methods = ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'TRACE']\n\nfunction normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return methods.indexOf(upcased) > -1 ? upcased : method\n}\n\nexport function Request(input, options) {\n if (!(this instanceof Request)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n this.signal = input.signal\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.signal = options.signal || this.signal || (function () {\n if ('AbortController' in g) {\n var ctrl = new AbortController();\n return ctrl.signal;\n }\n }());\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n\n if (this.method === 'GET' || this.method === 'HEAD') {\n if (options.cache === 'no-store' || options.cache === 'no-cache') {\n // Search for a '_' parameter in the query string\n var reParamSearch = /([?&])_=[^&]*/\n if (reParamSearch.test(this.url)) {\n // If it already exists then set the value with the current time\n this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime())\n } else {\n // Otherwise add a new '_' parameter to the end with the current time\n var reQueryString = /\\?/\n this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime()\n }\n }\n }\n}\n\nRequest.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n}\n\nfunction decode(body) {\n var form = new FormData()\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n}\n\nfunction parseHeaders(rawHeaders) {\n var headers = new Headers()\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n // https://github.com/github/fetch/issues/748\n // https://github.com/zloirock/core-js/issues/751\n preProcessedHeaders\n .split('\\r')\n .map(function(header) {\n return header.indexOf('\\n') === 0 ? header.substr(1, header.length) : header\n })\n .forEach(function(line) {\n var parts = line.split(':')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(':').trim()\n try {\n headers.append(key, value)\n } catch (error) {\n console.warn('Response ' + error.message)\n }\n }\n })\n return headers\n}\n\nBody.call(Request.prototype)\n\nexport function Response(bodyInit, options) {\n if (!(this instanceof Response)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = options.status === undefined ? 200 : options.status\n if (this.status < 200 || this.status > 599) {\n throw new RangeError(\"Failed to construct 'Response': The status provided (0) is outside the range [200, 599].\")\n }\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText === undefined ? '' : '' + options.statusText\n this.headers = new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n}\n\nBody.call(Response.prototype)\n\nResponse.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n}\n\nResponse.error = function() {\n var response = new Response(null, {status: 200, statusText: ''})\n response.ok = false\n response.status = 0\n response.type = 'error'\n return response\n}\n\nvar redirectStatuses = [301, 302, 303, 307, 308]\n\nResponse.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n}\n\nexport var DOMException = g.DOMException\ntry {\n new DOMException()\n} catch (err) {\n DOMException = function(message, name) {\n this.message = message\n this.name = name\n var error = Error(message)\n this.stack = error.stack\n }\n DOMException.prototype = Object.create(Error.prototype)\n DOMException.prototype.constructor = DOMException\n}\n\nexport function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n\n if (request.signal && request.signal.aborted) {\n return reject(new DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest()\n\n function abortXhr() {\n xhr.abort()\n }\n\n xhr.onload = function() {\n var options = {\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n }\n // This check if specifically for when a user fetches a file locally from the file system\n // Only if the status is out of a normal range\n if (request.url.indexOf('file://') === 0 && (xhr.status < 200 || xhr.status > 599)) {\n options.status = 200;\n } else {\n options.status = xhr.status;\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n setTimeout(function() {\n resolve(new Response(body, options))\n }, 0)\n }\n\n xhr.onerror = function() {\n setTimeout(function() {\n reject(new TypeError('Network request failed'))\n }, 0)\n }\n\n xhr.ontimeout = function() {\n setTimeout(function() {\n reject(new TypeError('Network request timed out'))\n }, 0)\n }\n\n xhr.onabort = function() {\n setTimeout(function() {\n reject(new DOMException('Aborted', 'AbortError'))\n }, 0)\n }\n\n function fixUrl(url) {\n try {\n return url === '' && g.location.href ? g.location.href : url\n } catch (e) {\n return url\n }\n }\n\n xhr.open(request.method, fixUrl(request.url), true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false\n }\n\n if ('responseType' in xhr) {\n if (support.blob) {\n xhr.responseType = 'blob'\n } else if (\n support.arrayBuffer\n ) {\n xhr.responseType = 'arraybuffer'\n }\n }\n\n if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers || (g.Headers && init.headers instanceof g.Headers))) {\n var names = [];\n Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n names.push(normalizeName(name))\n xhr.setRequestHeader(name, normalizeValue(init.headers[name]))\n })\n request.headers.forEach(function(value, name) {\n if (names.indexOf(name) === -1) {\n xhr.setRequestHeader(name, value)\n }\n })\n } else {\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n }\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr)\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr)\n }\n }\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n}\n\nfetch.polyfill = true\n\nif (!g.fetch) {\n g.fetch = fetch\n g.Headers = Headers\n g.Request = Request\n g.Response = Response\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/whatwg-fetch/fetch.js","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version 4.1.1\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n var type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n\nvar _isArray = undefined;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = undefined;\nvar customSchedulerFn = undefined;\n\nvar asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nfunction setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = undefined;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n var _arguments = arguments;\n\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n if (_state) {\n (function () {\n var callback = _arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n })();\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nfunction resolve$1(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n resolve(promise, object);\n return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(16);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nvar GET_THEN_ERROR = new ErrorObject();\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction getThen(promise) {\n try {\n return promise.then;\n } catch (error) {\n GET_THEN_ERROR.error = error;\n return GET_THEN_ERROR;\n }\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n try {\n then$$1.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then$$1, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$1 === GET_THEN_ERROR) {\n reject(promise, GET_THEN_ERROR.error);\n GET_THEN_ERROR.error = null;\n } else if (then$$1 === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$1)) {\n handleForeignThenable(promise, maybeThenable, then$$1);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n handleMaybeThenable(promise, value, getThen(value));\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = undefined,\n callback = undefined,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction ErrorObject() {\n this.error = null;\n}\n\nvar TRY_CATCH_ERROR = new ErrorObject();\n\nfunction tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch (e) {\n TRY_CATCH_ERROR.error = e;\n return TRY_CATCH_ERROR;\n }\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = undefined,\n error = undefined,\n succeeded = undefined,\n failed = undefined;\n\n if (hasCallback) {\n value = tryCatch(callback, detail);\n\n if (value === TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value.error = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (failed) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nfunction Enumerator$1(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n}\n\nEnumerator$1.prototype._enumerate = function (input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n};\n\nEnumerator$1.prototype._eachEntry = function (entry, i) {\n var c = this._instanceConstructor;\n var resolve$$1 = c.resolve;\n\n if (resolve$$1 === resolve$1) {\n var _then = getThen(entry);\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise$2) {\n var promise = new c(noop);\n handleMaybeThenable(promise, entry, _then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$1) {\n return resolve$$1(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$1(entry), i);\n }\n};\n\nEnumerator$1.prototype._settledAt = function (state, i, value) {\n var promise = this.promise;\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n};\n\nEnumerator$1.prototype._willSettleAt = function (promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n};\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nfunction all$1(entries) {\n return new Enumerator$1(this, entries).promise;\n}\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nfunction race$1(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n reject(promise, reason);\n return promise;\n}\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n*/\nfunction Promise$2(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise$2 ? initializePromise(this, resolver) : needsNew();\n }\n}\n\nPromise$2.all = all$1;\nPromise$2.race = race$1;\nPromise$2.resolve = resolve$1;\nPromise$2.reject = reject$1;\nPromise$2._setScheduler = setScheduler;\nPromise$2._setAsap = setAsap;\nPromise$2._asap = asap;\n\nPromise$2.prototype = {\n constructor: Promise$2,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n \n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n \n Chaining\n --------\n \n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n \n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n \n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n \n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n \n Assimilation\n ------------\n \n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n \n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n \n If the assimliated promise rejects, then the downstream promise will also reject.\n \n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n \n Simple Example\n --------------\n \n Synchronous Example\n \n ```javascript\n let result;\n \n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n \n Errback Example\n \n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n \n Promise Example;\n \n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n \n Advanced Example\n --------------\n \n Synchronous Example\n \n ```javascript\n let author, books;\n \n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n \n Errback Example\n \n ```js\n \n function foundBooks(books) {\n \n }\n \n function failure(reason) {\n \n }\n \n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n \n Promise Example;\n \n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n \n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: then,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n \n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n \n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n \n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n \n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function _catch(onRejection) {\n return this.then(null, onRejection);\n }\n};\n\n/*global self*/\nfunction polyfill$1() {\n var local = undefined;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise$2;\n}\n\n// Strange compat..\nPromise$2.polyfill = polyfill$1;\nPromise$2.Promise = Promise$2;\n\nreturn Promise$2;\n\n})));\n\n//# sourceMappingURL=es6-promise.map\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/es6-promise/dist/es6-promise.js","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/process/browser.js","let convertToArray = function (nodeList) {\r\n return [].slice.call(nodeList);\r\n}\r\nlet accordionLists: Array = convertToArray(document.querySelectorAll('[data-accordion-list]'));\r\nlet resizeTimer;\r\nconst openClass = 'libaccordion-open-js'; \r\nconst openClassCss = 'libaccordion-open';\r\nclass AccordionsOptions {\r\n singleAccordion: boolean = false;\r\n}\r\nexport class Accordions {\r\n options: AccordionsOptions = new AccordionsOptions();\r\n constructor(private optArg?: any) {\r\n window.addEventListener('resize', () => {\r\n requestAnimationFrame(this.triggerSetAccordionHeights.bind(this));\r\n });\r\n accordionLists.forEach((accordionList) => {\r\n accordionList.addEventListener(\"click\", this.accordionClick.bind(this), false);\r\n });\r\n //Check for Options\r\n if (this.optArg === undefined)\r\n this.optArg = new AccordionsOptions();\r\n else {\r\n this.options.singleAccordion = (this.optArg.singleAccordion === undefined) ? this.options.singleAccordion : this.optArg.singleAccordion;\r\n }\r\n }\r\n setAccordionHeights() {\r\n setTimeout(function () {\r\n accordionLists.forEach((accordionList) => {\r\n let openAccordions = accordionList.querySelectorAll('.' + openClass);\r\n if (openAccordions.length > 0) {\r\n openAccordions.forEach((openAccordion) => {\r\n let accordionToReCalc = openAccordion.querySelector('[data-accordion-content-id]');\r\n let accordionRecalcedHeight = accordionToReCalc.getBoundingClientRect().height;\r\n console.log(accordionRecalcedHeight);\r\n openAccordion.style.height = accordionRecalcedHeight + 'px';\r\n });\r\n }\r\n });\r\n }, 100);\r\n }\r\n accordionClick(e) {\r\n if (e.target !== e.currentTarget) {\r\n let accordionToOpenId = e.target.getAttribute('data-accordion-trigger');\r\n if (accordionToOpenId === null) {\r\n accordionToOpenId = e.target.parentElement.getAttribute('data-accordion-trigger');\r\n }\r\n let accordionToToggle = document.querySelector('[data-accordion-id=\"' + accordionToOpenId + '\"]');\r\n let accordionContentHeight = document.querySelector('[data-accordion-content-id=\"' + accordionToOpenId + '\"]').getBoundingClientRect().height;\r\n if (this.options.singleAccordion) {\r\n this.closeOpenAccordions(accordionToToggle);\r\n }\r\n if (accordionToToggle.classList.contains(openClass)) {\r\n this.closeAccordion(accordionToToggle);\r\n }\r\n else {\r\n this.openAccordion(accordionToToggle, accordionContentHeight);\r\n }\r\n this.setAccordionHeights();\r\n }\r\n e.stopPropagation();\r\n }\r\n openAccordion(accordionToOpen, accordionToOpenHeight) {\r\n if (accordionToOpen.parentElement.classList.contains(\"libaccordion-show-multiple-false\")) {\r\n let parentContainer = accordionToOpen.parentElement.parentElement;\r\n let collapsableItems = Array.prototype.slice.call(parentContainer.querySelectorAll(\".libaccordion-show-multiple-false\"));\r\n collapsableItems.forEach(function (item) {\r\n if (item.classList.contains(\"libaccordion-open\")) {\r\n item.classList.remove(\"libaccordion-open\");\r\n }\r\n if (item.querySelector(\".libaccordion-content\").classList.contains(\"libaccordion-open-js\")) {\r\n item.querySelector(\".libaccordion-content\").classList.remove(\"libaccordion-open-js\");\r\n item.querySelector(\".libaccordion-content\").setAttribute('style', 'height: 0px;');\r\n item.querySelector(\".libaccordion-content\").setAttribute('aria-hidden', 'true');\r\n } \r\n }) \r\n }\r\n\r\n accordionToOpen.classList.add(openClass);\r\n accordionToOpen.setAttribute('style', 'height:' + accordionToOpenHeight + 'px');\r\n accordionToOpen.setAttribute('aria-hidden', 'false');\r\n accordionToOpen.parentElement.classList.add(openClassCss);\r\n }\r\n closeAccordion(accordionToClose) { \r\n accordionToClose.classList.remove(openClass);\r\n accordionToClose.setAttribute('style', 'height: 0px');\r\n accordionToClose.setAttribute('aria-hidden', 'true');\r\n accordionToClose.parentElement.classList.remove(openClassCss);\r\n }\r\n triggerSetAccordionHeights() {\r\n clearTimeout(resizeTimer);\r\n resizeTimer = setTimeout(() => {\r\n this.setAccordionHeights();\r\n }, 100);\r\n }\r\n closeOpenAccordions(exception) {\r\n let openAccordions = convertToArray(document.querySelectorAll('.libaccordion-open-js'));\r\n openAccordions.forEach((openAccordion) => {\r\n if (openAccordion !== exception) {\r\n this.closeAccordion(openAccordion);\r\n }\r\n });\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Lib/Lib-Javascript/accordion/accordions.ts","export class DateListingBlock {\r\n constructor() {\r\n if (document.querySelector('.date-listing-load-more')) {\r\n let loadMoreNodeList = document.querySelectorAll('.date-listing-load-more');\r\n let loadMoreArray = Array.prototype.slice.call(loadMoreNodeList);\r\n\r\n loadMoreArray.forEach(function (loadMoreItem) {\r\n loadMoreItem.addEventListener('click', function () {\r\n // Show all items\r\n loadMoreItem.parentElement.querySelector('.date-listing-container-hidden').classList.add('date-listing-container-hidden-open');\r\n\r\n // Hide view all button\r\n loadMoreItem.classList.add('visually-hidden');\r\n\r\n // Show view less button\r\n loadMoreItem.parentElement.querySelector('.date-listing-load-less').classList.remove('visually-hidden');\r\n })\r\n })\r\n\r\n let loadLessNodeList = document.querySelectorAll('.date-listing-load-less');\r\n let loadLessArray = Array.prototype.slice.call(loadLessNodeList);\r\n\r\n loadLessArray.forEach(function (loadLessItem) {\r\n loadLessItem.addEventListener('click', function () {\r\n // Show initial items\r\n loadLessItem.parentElement.querySelector('.date-listing-container-hidden').classList.remove('date-listing-container-hidden-open');\r\n\r\n // Hide view less button\r\n loadLessItem.classList.add('visually-hidden');\r\n\r\n // Show view more button\r\n loadLessItem.parentElement.querySelector('.date-listing-load-more').classList.remove('visually-hidden');\r\n })\r\n })\r\n }\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Static/javascript/modules/date-listing-block.ts","import 'element-closest';\r\n\r\nexport class PublicityImageBlock {\r\n constructor() {\r\n // ------------------------------------------------------------------------ //\r\n // ------- Publicity block's 'view more' & 'view less' button logic ------- //\r\n // ------------------------------------------------------------------------ //\r\n if (document.querySelector('.publicity-view-more-js')) {\r\n let viewMoreNodeList = document.querySelectorAll('.publicity-view-more-js');\r\n let viewMoreArray = Array.prototype.slice.call(viewMoreNodeList);\r\n\r\n viewMoreArray.forEach(function (viewMoreBtn) {\r\n viewMoreBtn.addEventListener('click', function () {\r\n let expandableSection = viewMoreBtn.closest('.block-body').querySelector('.publicity-items-remaining');\r\n\r\n if (viewMoreBtn.dataset.isExpanded == 'false') {\r\n // Show all items\r\n expandableSection.classList.remove('hidden');\r\n\r\n // Swap \"View More\" button text with \"View Less\"\r\n viewMoreBtn.innerHTML = 'View Less Images';\r\n viewMoreBtn.setAttribute('data-is-expanded', 'true'); \r\n }\r\n else {\r\n // Hide extra items\r\n expandableSection.classList.add('hidden');\r\n\r\n // Swap \"View Less\" button text with \"View More\"\r\n viewMoreBtn.innerHTML = 'View More Images';\r\n viewMoreBtn.setAttribute('data-is-expanded', 'false');\r\n }\r\n })\r\n })\r\n }\r\n\r\n // ------------------------------------------------------------ //\r\n // ------- Publicity block's carousel counter placement ------- //\r\n // ------------------------------------------------------------ //\r\n if (document.querySelector('.publicity-mobile-view-js')) {\r\n let publicityCarouselNodeList = document.querySelectorAll(\".publicity-mobile-view-js\");\r\n let publicityCarouselArray = Array.prototype.slice.call(publicityCarouselNodeList);\r\n\r\n publicityCarouselArray.forEach(function (carousel) {\r\n let publicityCarouselSlidesNodeList = carousel.querySelectorAll('.swiper-slide');\r\n let publicityCarouselSlidesArray = Array.prototype.slice.call(publicityCarouselSlidesNodeList);\r\n\r\n publicityCarouselSlidesArray.forEach(function (slide) {\r\n let slideCounter = slide.dataset.swiperCounter;\r\n let slideCounterCaption = slide.querySelector('.publicity-item-counter-js');\r\n\r\n slideCounterCaption.innerHTML = slideCounter;\r\n })\r\n })\r\n } \r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Static/javascript/modules/publicity-image-block.ts","// element-closest | CC0-1.0 | github.com/jonathantneal/closest\n\n(function (ElementProto) {\n\tif (typeof ElementProto.matches !== 'function') {\n\t\tElementProto.matches = ElementProto.msMatchesSelector || ElementProto.mozMatchesSelector || ElementProto.webkitMatchesSelector || function matches(selector) {\n\t\t\tvar element = this;\n\t\t\tvar elements = (element.document || element.ownerDocument).querySelectorAll(selector);\n\t\t\tvar index = 0;\n\n\t\t\twhile (elements[index] && elements[index] !== element) {\n\t\t\t\t++index;\n\t\t\t}\n\n\t\t\treturn Boolean(elements[index]);\n\t\t};\n\t}\n\n\tif (typeof ElementProto.closest !== 'function') {\n\t\tElementProto.closest = function closest(selector) {\n\t\t\tvar element = this;\n\n\t\t\twhile (element && element.nodeType === 1) {\n\t\t\t\tif (element.matches(selector)) {\n\t\t\t\t\treturn element;\n\t\t\t\t}\n\n\t\t\t\telement = element.parentNode;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t}\n})(window.Element.prototype);\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/element-closest/element-closest.js","import { nodeListToArray } from './nodelist-to-array'\r\n\r\nexport default function setUpSubsHiddenToggle(containerClassName: string) {\r\n const subsContainers = document.getElementsByClassName(containerClassName);\r\n\r\n if (subsContainers.length > 0) {\r\n const subsContainer = subsContainers[0];\r\n\r\n const triggers = nodeListToArray(subsContainer.getElementsByClassName(\"toggle-hidden-js\"));\r\n\r\n triggers.forEach(el => {\r\n el.addEventListener(\"click\", () => {\r\n const fields = nodeListToArray(subsContainer.getElementsByClassName(\"toggle-hidden-element-js\"));\r\n\r\n fields.forEach(field => {\r\n if (field.classList.contains(\"hidden\")) {\r\n field.classList.remove(\"hidden\");\r\n } else {\r\n field.classList.add(\"hidden\");\r\n }\r\n });\r\n });\r\n });\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Static/javascript/modules/subs-toggle-hidden.ts","var gumshoe = require('../vendor/gumshoe');\r\n\r\nexport class ScrollspyNavbar {\r\n constructor() {\r\n if (document.querySelector(\".scrollspy-navbar\")) {\r\n let navbarContainer = document.querySelectorAll('.scrollspy-navbar')[0];\r\n let jumpToTop = navbarContainer.querySelectorAll('.top-trigger')[0];\r\n\r\n jumpToTop.addEventListener(\"click\", function(e){\r\n e.preventDefault();\r\n\r\n if (history.pushState) {\r\n history.pushState(null, null, '#top');\r\n } else {\r\n location.hash = '#top';\r\n }\r\n \r\n window.scrollTo(0, 0);\r\n });\r\n\r\n // Find all sections to add to scrollspy nav list\r\n const jumpSections = Array.prototype.slice.call(document.querySelectorAll('[data-scrollspy=\"true\"]'));\r\n let jumpList = '';\r\n\r\n // Create list item by looping through each section\r\n jumpSections.forEach(section => {\r\n let sectionTitle = section.getAttribute('data-scrollspy-title');\r\n let sectionTarget = section.id;\r\n\r\n jumpList += `
  • ${sectionTitle}
  • `;\r\n });\r\n\r\n // Add string of list items to scrollspy nav\r\n const jumpListContainer = navbarContainer.querySelectorAll('nav ul')[0];\r\n jumpListContainer.innerHTML = jumpList;\r\n\r\n // Handler when the DOM is fully loaded\r\n document.addEventListener(\"DOMContentLoaded\", function(){\r\n gumshoe.init({\r\n selector: '[data-gumshoe] a', // Default link selector (must use a valid CSS selector)\r\n selectorHeader: '#siteHeader', // Fixed header selector (must use a valid CSS selector)\r\n container: window, // The element to spy on scrolling in (must be a valid DOM Node)\r\n offset: 250, // Distance in pixels to offset calculations\r\n activeClass: 'active', // Class to apply to active navigation link and its parent list item\r\n scrollDelay: false // Wait until scrolling has stopped before updating the navigation\r\n });\r\n });\r\n\r\n const footer = document.querySelector(\".site-container > .footer\");\r\n const siteContainer = document.querySelector('.site-container');\r\n const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\r\n let lastScrollTop = 0;\r\n\r\n // Handle sticky offset when hitting footer\r\n window.addEventListener(\"scroll\", () =>\r\n window.requestAnimationFrame(() => {\r\n var currentPos = window.pageYOffset || document.documentElement.scrollTop; // Credits: \"https://github.com/qeremy/so/blob/master/so.dom.js#L426\"\r\n\r\n // get offset of footer\r\n let footerOffset = footer.getBoundingClientRect().top + window.scrollY;\r\n\r\n // handle scrolspy navbar sticky\r\n if (currentPos > (footerOffset - viewHeight)) {\r\n // downscroll code\r\n navbarContainer.classList.add('sticky-bottom');\r\n } else {\r\n navbarContainer.classList.remove('sticky-bottom');\r\n }\r\n\r\n // set current position to lastScrollTop\r\n lastScrollTop = currentPos;\r\n })\r\n );\r\n };\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Static/javascript/modules/scrollspy-navbar.ts","/*!\r\n * gumshoe v3.5.0: A simple, framework-agnostic scrollspy script.\r\n * (c) 2017 Chris Ferdinandi\r\n * MIT License\r\n * http://github.com/cferdinandi/gumshoe\r\n */\r\n\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n define([], factory(root));\r\n } else if (typeof exports === 'object') {\r\n module.exports = factory(root);\r\n } else {\r\n root.gumshoe = factory(root);\r\n }\r\n})(typeof global !== 'undefined' ? global : this.window || this.global, (function (root) {\r\n\r\n 'use strict';\r\n\r\n //\r\n // Variables\r\n //\r\n\r\n var gumshoe = {}; // Object for public APIs\r\n var supports = 'querySelector' in document && 'addEventListener' in root && 'classList' in document.createElement('_'); // Feature test\r\n var navs = []; // Array for nav elements\r\n var settings, eventTimeout, docHeight, header, headerHeight, currentNav, scrollEventDelay;\r\n\r\n // Default settings\r\n var defaults = {\r\n selector: '[data-gumshoe] a',\r\n selectorHeader: '[data-gumshoe-header]',\r\n container: root,\r\n offset: 0,\r\n activeClass: 'active',\r\n scrollDelay: false,\r\n callback: function () { }\r\n };\r\n\r\n\r\n //\r\n // Methods\r\n //\r\n\r\n\t/**\r\n\t * A simple forEach() implementation for Arrays, Objects and NodeLists.\r\n\t * @private\r\n\t * @author Todd Motto\r\n\t * @link https://github.com/toddmotto/foreach\r\n\t * @param {Array|Object|NodeList} collection Collection of items to iterate\r\n\t * @param {Function} callback Callback function for each iteration\r\n\t * @param {Array|Object|NodeList} scope Object/NodeList/Array that forEach is iterating over (aka `this`)\r\n\t */\r\n var forEach = function (collection, callback, scope) {\r\n if (Object.prototype.toString.call(collection) === '[object Object]') {\r\n for (var prop in collection) {\r\n if (Object.prototype.hasOwnProperty.call(collection, prop)) {\r\n callback.call(scope, collection[prop], prop, collection);\r\n }\r\n }\r\n } else {\r\n for (var i = 0, len = collection.length; i < len; i++) {\r\n callback.call(scope, collection[i], i, collection);\r\n }\r\n }\r\n };\r\n\r\n\t/**\r\n\t * Merge two or more objects. Returns a new object.\r\n\t * @private\r\n\t * @param {Boolean} deep If true, do a deep (or recursive) merge [optional]\r\n\t * @param {Object} objects The objects to merge together\r\n\t * @returns {Object} Merged values of defaults and options\r\n\t */\r\n var extend = function () {\r\n\r\n // Variables\r\n var extended = {};\r\n var deep = false;\r\n var i = 0;\r\n var length = arguments.length;\r\n\r\n // Check if a deep merge\r\n if (Object.prototype.toString.call(arguments[0]) === '[object Boolean]') {\r\n deep = arguments[0];\r\n i++;\r\n }\r\n\r\n // Merge the object into the extended object\r\n var merge = function (obj) {\r\n for (var prop in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\r\n // If deep merge and property is an object, merge properties\r\n if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') {\r\n extended[prop] = extend(true, extended[prop], obj[prop]);\r\n } else {\r\n extended[prop] = obj[prop];\r\n }\r\n }\r\n }\r\n };\r\n\r\n // Loop through each object and conduct a merge\r\n for (; i < length; i++) {\r\n var obj = arguments[i];\r\n merge(obj);\r\n }\r\n\r\n return extended;\r\n\r\n };\r\n\r\n\t/**\r\n\t * Get the height of an element.\r\n\t * @private\r\n\t * @param {Node} elem The element to get the height of\r\n\t * @return {Number} The element's height in pixels\r\n\t */\r\n var getHeight = function (elem) {\r\n return Math.max(elem.scrollHeight, elem.offsetHeight, elem.clientHeight);\r\n };\r\n\r\n\t/**\r\n\t * Get the document element's height\r\n\t * @private\r\n\t * @returns {Number}\r\n\t */\r\n var getDocumentHeight = function () {\r\n return Math.max(\r\n document.body.scrollHeight, document.documentElement.scrollHeight,\r\n document.body.offsetHeight, document.documentElement.offsetHeight,\r\n document.body.clientHeight, document.documentElement.clientHeight\r\n );\r\n };\r\n\r\n\t/**\r\n\t * Get an element's distance from the top of the Document.\r\n\t * @private\r\n\t * @param {Node} elem The element\r\n\t * @return {Number} Distance from the top in pixels\r\n\t */\r\n var getOffsetTop = function (elem) {\r\n var location = 0;\r\n if (elem.offsetParent) {\r\n do {\r\n location += elem.offsetTop;\r\n elem = elem.offsetParent;\r\n } while (elem);\r\n } else {\r\n location = elem.offsetTop;\r\n }\r\n location = location - headerHeight - settings.offset;\r\n return location >= 0 ? location : 0;\r\n };\r\n\r\n\t/**\r\n\t * Determine if an element is in the viewport\r\n\t * @param {Node} elem The element\r\n\t * @return {Boolean} Returns true if element is in the viewport\r\n\t */\r\n var isInViewport = function (elem) {\r\n var distance = elem.getBoundingClientRect();\r\n return (\r\n distance.top >= 0 &&\r\n distance.left >= 0 &&\r\n distance.bottom <= (root.innerHeight || document.documentElement.clientHeight) &&\r\n distance.right <= (root.innerWidth || document.documentElement.clientWidth)\r\n );\r\n };\r\n\r\n\t/**\r\n\t * Arrange nagivation elements from furthest from the top to closest\r\n\t * @private\r\n\t */\r\n var sortNavs = function () {\r\n navs.sort((function (a, b) {\r\n if (a.distance > b.distance) {\r\n return -1;\r\n }\r\n if (a.distance < b.distance) {\r\n return 1;\r\n }\r\n return 0;\r\n }));\r\n };\r\n\r\n\t/**\r\n\t * Calculate the distance of elements from the top of the document\r\n\t * @public\r\n\t */\r\n gumshoe.setDistances = function () {\r\n\r\n // Calculate distances\r\n docHeight = getDocumentHeight(); // The document\r\n headerHeight = header ? (getHeight(header) + getOffsetTop(header)) : 0; // The fixed header\r\n forEach(navs, (function (nav) {\r\n nav.distance = getOffsetTop(nav.target); // Each navigation target\r\n }));\r\n\r\n // When done, organization navigation elements\r\n sortNavs();\r\n\r\n };\r\n\r\n\t/**\r\n\t * Get all navigation elements and store them in an array\r\n\t * @private\r\n\t */\r\n var getNavs = function () {\r\n\r\n // Get all navigation links\r\n var navLinks = document.querySelectorAll(settings.selector);\r\n\r\n // For each link, create an object of attributes and push to an array\r\n forEach(navLinks, (function (nav) {\r\n if (!nav.hash) return;\r\n var target = document.querySelector(nav.hash);\r\n if (!target) return;\r\n navs.push({\r\n nav: nav,\r\n target: target,\r\n parent: nav.parentNode.tagName.toLowerCase() === 'li' ? nav.parentNode : null,\r\n distance: 0\r\n });\r\n }));\r\n\r\n };\r\n\r\n\r\n\t/**\r\n\t * Remove the activation class from the currently active navigation element\r\n\t * @private\r\n\t */\r\n var deactivateCurrentNav = function () {\r\n if (currentNav) {\r\n currentNav.nav.classList.remove(settings.activeClass);\r\n if (currentNav.parent) {\r\n currentNav.parent.classList.remove(settings.activeClass);\r\n }\r\n }\r\n };\r\n\r\n\t/**\r\n\t * Add the activation class to the currently active navigation element\r\n\t * @private\r\n\t * @param {Node} nav The currently active nav\r\n\t */\r\n var activateNav = function (nav) {\r\n\r\n // If a current Nav is set, deactivate it\r\n deactivateCurrentNav();\r\n\r\n // Activate the current target's navigation element\r\n nav.nav.classList.add(settings.activeClass);\r\n if (nav.parent) {\r\n nav.parent.classList.add(settings.activeClass);\r\n }\r\n\r\n settings.callback(nav); // Callback after methods are run\r\n\r\n // Set new currentNav\r\n currentNav = {\r\n nav: nav.nav,\r\n parent: nav.parent\r\n };\r\n\r\n };\r\n\r\n\t/**\r\n\t * Determine which navigation element is currently active and run activation method\r\n\t * @public\r\n\t * @returns {Object} The current nav data.\r\n\t */\r\n gumshoe.getCurrentNav = function () {\r\n\r\n // Get current position from top of the document\r\n var position = root.pageYOffset;\r\n\r\n // If at the bottom of the page and last section is in the viewport, activate the last nav\r\n if ((root.innerHeight + position) >= docHeight && isInViewport(navs[0].target)) {\r\n activateNav(navs[0]);\r\n return navs[0];\r\n }\r\n\r\n // Otherwise, loop through each nav until you find the active one\r\n for (var i = 0, len = navs.length; i < len; i++) {\r\n var nav = navs[i];\r\n if (nav.distance <= position) {\r\n activateNav(nav);\r\n return nav;\r\n }\r\n }\r\n\r\n // If no active nav is found, deactivate the current nav\r\n deactivateCurrentNav();\r\n settings.callback();\r\n\r\n };\r\n\r\n\t/**\r\n\t * If nav element has active class on load, set it as currently active navigation\r\n\t * @private\r\n\t */\r\n var setInitCurrentNav = function () {\r\n forEach(navs, (function (nav) {\r\n if (nav.nav.classList.contains(settings.activeClass)) {\r\n currentNav = {\r\n nav: nav.nav,\r\n parent: nav.parent\r\n };\r\n }\r\n }));\r\n };\r\n\r\n\t/**\r\n\t * Destroy the current initialization.\r\n\t * @public\r\n\t */\r\n gumshoe.destroy = function () {\r\n\r\n // If plugin isn't already initialized, stop\r\n if (!settings) return;\r\n\r\n // Remove event listeners\r\n settings.container.removeEventListener('resize', eventThrottler, false);\r\n settings.container.removeEventListener('scroll', eventThrottler, false);\r\n\r\n // Reset variables\r\n navs = [];\r\n settings = null;\r\n eventTimeout = null;\r\n docHeight = null;\r\n header = null;\r\n headerHeight = null;\r\n currentNav = null;\r\n scrollEventDelay = null;\r\n\r\n };\r\n\r\n\t/**\r\n\t * Run functions after scrolling stops\r\n\t * @param {[type]} event [description]\r\n\t * @return {[type]} [description]\r\n\t */\r\n var scrollStop = function (event) {\r\n\r\n // Clear our timeout throughout the scroll\r\n window.clearTimeout(eventTimeout);\r\n\r\n // recalculate distances and then get currently active nav\r\n eventTimeout = setTimeout((function () {\r\n gumshoe.setDistances();\r\n gumshoe.getCurrentNav();\r\n }), 66);\r\n\r\n };\r\n\r\n\t/**\r\n\t * On window scroll and resize, only run events at a rate of 15fps for better performance\r\n\t * @private\r\n\t * @param {Function} eventTimeout Timeout function\r\n\t * @param {Object} settings\r\n\t */\r\n var eventThrottler = function (event) {\r\n if (!eventTimeout) {\r\n eventTimeout = setTimeout((function () {\r\n\r\n eventTimeout = null; // Reset timeout\r\n\r\n // If scroll event, get currently active nav\r\n if (event.type === 'scroll') {\r\n gumshoe.getCurrentNav();\r\n }\r\n\r\n // If resize event, recalculate distances and then get currently active nav\r\n if (event.type === 'resize') {\r\n gumshoe.setDistances();\r\n gumshoe.getCurrentNav();\r\n }\r\n\r\n }), 66);\r\n }\r\n };\r\n\r\n\t/**\r\n\t * Initialize Plugin\r\n\t * @public\r\n\t * @param {Object} options User settings\r\n\t */\r\n gumshoe.init = function (options) {\r\n\r\n // feature test\r\n if (!supports) return;\r\n\r\n // Destroy any existing initializations\r\n gumshoe.destroy();\r\n\r\n // Set variables\r\n settings = extend(defaults, options || {}); // Merge user options with defaults\r\n header = document.querySelector(settings.selectorHeader); // Get fixed header\r\n getNavs(); // Get navigation elements\r\n\r\n // If no navigation elements exist, stop running gumshoe\r\n if (navs.length === 0) return;\r\n\r\n // Run init methods\r\n setInitCurrentNav();\r\n gumshoe.setDistances();\r\n gumshoe.getCurrentNav();\r\n\r\n // Listen for events\r\n settings.container.addEventListener('resize', eventThrottler, false);\r\n if (settings.scrollDelay) {\r\n settings.container.addEventListener('scroll', scrollStop, false);\r\n } else {\r\n settings.container.addEventListener('scroll', eventThrottler, false);\r\n }\r\n\r\n };\r\n\r\n\r\n //\r\n // Public APIs\r\n //\r\n\r\n return gumshoe;\r\n\r\n}));\r\n\n\n\n// WEBPACK FOOTER //\n// ./Static/javascript/vendor/gumshoe.js","/*! smooth-scroll v12.1.5 | (c) 2017 Chris Ferdinandi | MIT License | http://github.com/cferdinandi/smooth-scroll */\n!(function(e,t){\"function\"==typeof define&&define.amd?define([],(function(){return t(e)})):\"object\"==typeof exports?module.exports=t(e):e.SmoothScroll=t(e)})(\"undefined\"!=typeof global?global:\"undefined\"!=typeof window?window:this,(function(e){\"use strict\";var t=\"querySelector\"in document&&\"addEventListener\"in e&&\"requestAnimationFrame\"in e&&\"closest\"in e.Element.prototype,n={ignore:\"[data-scroll-ignore]\",header:null,speed:500,offset:0,easing:\"easeInOutCubic\",customEasing:null,before:function(){},after:function(){}},o=function(){for(var e={},t=0,n=arguments.length;t=1&&t<=31||127==t||0===a&&t>=48&&t<=57||1===a&&t>=48&&t<=57&&45===i?r+=\"\\\\\"+t.toString(16)+\" \":r+=t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?n.charAt(a):\"\\\\\"+n.charAt(a)}return\"#\"+r},i=function(e,t){var n;return\"easeInQuad\"===e.easing&&(n=t*t),\"easeOutQuad\"===e.easing&&(n=t*(2-t)),\"easeInOutQuad\"===e.easing&&(n=t<.5?2*t*t:(4-2*t)*t-1),\"easeInCubic\"===e.easing&&(n=t*t*t),\"easeOutCubic\"===e.easing&&(n=--t*t*t+1),\"easeInOutCubic\"===e.easing&&(n=t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),\"easeInQuart\"===e.easing&&(n=t*t*t*t),\"easeOutQuart\"===e.easing&&(n=1- --t*t*t*t),\"easeInOutQuart\"===e.easing&&(n=t<.5?8*t*t*t*t:1-8*--t*t*t*t),\"easeInQuint\"===e.easing&&(n=t*t*t*t*t),\"easeOutQuint\"===e.easing&&(n=1+--t*t*t*t*t),\"easeInOutQuint\"===e.easing&&(n=t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(n=e.customEasing(t)),n||t},u=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},c=function(e,t,n){var o=0;if(e.offsetParent)do{o+=e.offsetTop,e=e.offsetParent}while(e);return o=Math.max(o-t-n,0)},s=function(e){return e?a(e)+e.offsetTop:0},l=function(t,n,o){o||(t.focus(),document.activeElement.id!==t.id&&(t.setAttribute(\"tabindex\",\"-1\"),t.focus(),t.style.outline=\"none\"),e.scrollTo(0,n))},f=function(t){return!!(\"matchMedia\"in e&&e.matchMedia(\"(prefers-reduced-motion)\").matches)};return function(a,d){var m,h,g,p,v,b,y,S={};S.cancelScroll=function(){cancelAnimationFrame(y)},S.animateScroll=function(t,a,r){var f=o(m||n,r||{}),d=\"[object Number]\"===Object.prototype.toString.call(t),h=d||!t.tagName?null:t;if(d||h){var g=e.pageYOffset;f.header&&!p&&(p=document.querySelector(f.header)),v||(v=s(p));var b,y,E,I=d?t:c(h,v,parseInt(\"function\"==typeof f.offset?f.offset():f.offset,10)),O=I-g,A=u(),C=0,w=function(n,o){var r=e.pageYOffset;if(n==o||r==o||(g=A)return S.cancelScroll(),l(t,o,d),f.after(t,a),b=null,!0},Q=function(t){b||(b=t),C+=t-b,y=C/parseInt(f.speed,10),y=y>1?1:y,E=g+O*i(f,y),e.scrollTo(0,Math.floor(E)),w(E,I)||(e.requestAnimationFrame(Q),b=t)};0===e.pageYOffset&&e.scrollTo(0,0),f.before(t,a),S.cancelScroll(),e.requestAnimationFrame(Q)}};var E=function(e){h&&(h.id=h.getAttribute(\"data-scroll-id\"),S.animateScroll(h,g),h=null,g=null)},I=function(t){if(!f()&&0===t.button&&!t.metaKey&&!t.ctrlKey&&(g=t.target.closest(a))&&\"a\"===g.tagName.toLowerCase()&&!t.target.closest(m.ignore)&&g.hostname===e.location.hostname&&g.pathname===e.location.pathname&&/#/.test(g.href)){var n;try{n=r(decodeURIComponent(g.hash))}catch(e){n=r(g.hash)}if(\"#\"===n){t.preventDefault(),h=document.body;var o=h.id?h.id:\"smooth-scroll-top\";return h.setAttribute(\"data-scroll-id\",o),h.id=\"\",void(e.location.hash.substring(1)===o?E():e.location.hash=o)}h=document.querySelector(n),h&&(h.setAttribute(\"data-scroll-id\",h.id),h.id=\"\",g.hash===e.location.hash&&(t.preventDefault(),E()))}},O=function(e){b||(b=setTimeout((function(){b=null,v=s(p)}),66))};return S.destroy=function(){m&&(document.removeEventListener(\"click\",I,!1),e.removeEventListener(\"resize\",O,!1),S.cancelScroll(),m=null,h=null,g=null,p=null,v=null,b=null,y=null)},S.init=function(a){t&&(S.destroy(),m=o(n,a||{}),p=m.header?document.querySelector(m.header):null,v=s(p),document.addEventListener(\"click\",I,!1),e.addEventListener(\"hashchange\",E,!1),p&&e.addEventListener(\"resize\",O,!1))},S.init(d),S}}));\n\n\n// WEBPACK FOOTER //\n// ./node_modules/smooth-scroll/dist/js/smooth-scroll.min.js","/**\r\n * Multimedia Layout\r\n * @param {string} multimediaSelector - Selector for target elements\r\n */\r\nvar Masonry = require('masonry-layout');\r\nvar Swiper = require('swiper').default;\r\nimport { lockBody, unlockBody } from '../modules/lock-body';\r\nimport * as A11yDialog from 'a11y-dialog';\r\nexport class MultimediaLayout {\r\n constructor(public multimediaSelector) {\r\n const gridCutoff = 9;\r\n\r\n /**\r\n * Masonry View More Handler\r\n * @param {bool} isShow - Boolean for showing or hiding extra elements\r\n * @param {string} container - Container element for media items\r\n */\r\n function viewMoreHandler(isShow, container) {\r\n let masonryItems = container.querySelectorAll('.item-wrapper');\r\n let masonryInstance = Masonry.data(container);\r\n\r\n if (masonryItems.length > gridCutoff) {\r\n for (var i = 0; i < masonryItems.length; i++) {\r\n if (isShow) {\r\n masonryItems[i].classList.remove('visually-hidden');\r\n container.classList.add('show-all');\r\n } else if (!isShow && i > gridCutoff - 1) {\r\n masonryItems[i].classList.add('visually-hidden');\r\n container.classList.remove('show-all');\r\n }\r\n }\r\n\r\n // resets the layout for the masonry grid\r\n masonryInstance.layout();\r\n }\r\n }\r\n\r\n function initMasonryGrid(container) {\r\n if (!container.classList.contains('masonry-wrapper')) {\r\n container.classList.add('masonry-wrapper');\r\n var masonryInstance = new Masonry(container, {\r\n // options\r\n itemSelector: '.item-wrapper',\r\n percentPosition: true\r\n });\r\n\r\n // set up initial view more handler\r\n viewMoreHandler(false, container);\r\n }\r\n }\r\n\r\n function initCarousel(container) {\r\n if (!container.classList.contains('swiper-wrapper')) {\r\n container.classList.add('swiper-wrapper');\r\n var carouselInstance = new Swiper(container.parentElement, {\r\n // Swiper parameters\r\n init: false,\r\n slidesPerView: 1,\r\n spaceBetween: 150,\r\n slidesPerGroup: 1,\r\n speed: 750,\r\n watchOverflow: true,\r\n autoHeight: true,\r\n\r\n pagination: {\r\n el: '.swiper-pagination',\r\n clickable: false,\r\n type: 'custom',\r\n renderCustom: function(swiper, current, total) {\r\n return current + ' of ' + total;\r\n }\r\n },\r\n\r\n // Navigation arrows\r\n navigation: {\r\n nextEl: '.swiper-button-next',\r\n prevEl: '.swiper-button-prev'\r\n }\r\n });\r\n\r\n let slideItems = container.querySelectorAll('.item-wrapper');\r\n\r\n for (var i = 0; i < slideItems.length; i++) {\r\n slideItems[i].classList.add('swiper-slide');\r\n slideItems[i].classList.remove('visually-hidden');\r\n\r\n // After slide classes are applied init carousel display\r\n if (i === slideItems.length - 1) {\r\n carouselInstance.init();\r\n }\r\n }\r\n }\r\n }\r\n\r\n function destroyMasonry(container) {\r\n if (container.classList.contains('masonry-wrapper')) {\r\n let masonryInstance = Masonry.data(container);\r\n\r\n masonryInstance.destroy();\r\n container.classList.remove('masonry-wrapper');\r\n }\r\n }\r\n\r\n function destroyCarousel(container) {\r\n if (container.classList.contains('swiper-wrapper')) {\r\n let carouselInstance = container.parentElement.swiper;\r\n\r\n carouselInstance.destroy();\r\n container.classList.remove('swiper-wrapper');\r\n\r\n let slideItems = container.querySelectorAll('.item-wrapper');\r\n\r\n for (var i = 0; i < slideItems.length; i++) {\r\n slideItems[i].classList.remove('swiper-slide');\r\n }\r\n }\r\n }\r\n\r\n function initModal(container) {\r\n container = container.parentElement.parentElement;\r\n\r\n const mediaModal = container.querySelector('.modal-wrapper');\r\n const mediaModalInstance = new A11yDialog(mediaModal);\r\n const mediaModalContent = mediaModal.querySelector('.swiper-wrapper');\r\n let modalTriggers = container.querySelectorAll('.item-wrapper');\r\n let modalCarouselInstance;\r\n\r\n if (!mediaModalContent.classList.contains('modal-content-loaded')) {\r\n mediaModalContent.innerHTML = container.querySelector('.block-body').innerHTML;\r\n mediaModalContent.classList.add('modal-content-loaded');\r\n }\r\n\r\n function initModalCarousel() {\r\n let modalSlideItems = mediaModalContent.querySelectorAll('.item-wrapper');\r\n\r\n for (var i = 0; i < modalSlideItems.length; i++) {\r\n modalSlideItems[i].classList.remove('visually-hidden');\r\n modalSlideItems[i].classList.add('swiper-slide');\r\n }\r\n\r\n modalCarouselInstance = new Swiper(mediaModalContent.parentElement, {\r\n // Swiper parameters\r\n init: true,\r\n slidesPerView: 1,\r\n spaceBetween: 150,\r\n slidesPerGroup: 1,\r\n speed: 750,\r\n watchOverflow: true,\r\n autoHeight: true,\r\n\r\n pagination: {\r\n el: '.multimedia-block .swiper-pagination',\r\n clickable: false,\r\n type: 'custom',\r\n renderCustom: function(swiper, current, total) {\r\n return current + ' of ' + total;\r\n }\r\n },\r\n\r\n // Navigation arrows\r\n navigation: {\r\n nextEl: '.multimedia-block .swiper-button-next',\r\n prevEl: '.multimedia-block .swiper-button-prev'\r\n }\r\n });\r\n }\r\n\r\n mediaModalInstance.on('show', (dialog, e) => {\r\n lockBody();\r\n });\r\n\r\n mediaModalInstance.on('hide', function(dialog, e) {\r\n unlockBody();\r\n modalCarouselInstance.destroy();\r\n });\r\n\r\n for (var i = 0; i < modalTriggers.length; i++) {\r\n let index = i;\r\n\r\n modalTriggers[i].addEventListener('click', e => {\r\n if (window.matchMedia('(min-width: 48rem)').matches) {\r\n mediaModalInstance.show();\r\n initModalCarousel();\r\n modalCarouselInstance.slideTo(index, 0);\r\n }\r\n });\r\n }\r\n }\r\n\r\n // Handler for different display modes based on screen size\r\n function initHandler(container) {\r\n initModal(container);\r\n\r\n if (window.matchMedia('(max-width: 48rem)').matches) {\r\n destroyMasonry(container);\r\n initCarousel(container);\r\n } else {\r\n destroyCarousel(container);\r\n initMasonryGrid(container);\r\n }\r\n }\r\n\r\n // Initialize Multimedia Block\r\n if (document.querySelector(multimediaSelector)) {\r\n let multimediaContainers = document.querySelectorAll(multimediaSelector);\r\n\r\n window.addEventListener('load', () => {\r\n for (var i = 0; i < multimediaContainers.length; i++) {\r\n let multimediaContainer = multimediaContainers[i];\r\n\r\n initHandler(multimediaContainer);\r\n\r\n window.addEventListener('resize', () =>\r\n window.requestAnimationFrame(() => {\r\n initHandler(multimediaContainer);\r\n })\r\n );\r\n\r\n let viewMoreTrigger = multimediaContainer.parentElement.querySelector('.multimedia-block-view-more');\r\n let masonryItems = multimediaContainer.querySelectorAll('.item-wrapper');\r\n\r\n if (masonryItems.length > gridCutoff) {\r\n viewMoreTrigger.addEventListener('click', e => {\r\n if (multimediaContainer.classList.contains('show-all')) {\r\n viewMoreHandler(false, multimediaContainer);\r\n e.target.innerText = 'View More';\r\n } else {\r\n viewMoreHandler(true, multimediaContainer);\r\n e.target.innerText = 'View Less';\r\n }\r\n });\r\n } else {\r\n viewMoreTrigger.parentElement.classList.add('hide-view-more');\r\n }\r\n }\r\n });\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Static/javascript/modules/multimedia-layout.ts","/*!\n * Masonry v4.2.2\n * Cascading grid layout library\n * https://masonry.desandro.com\n * MIT License\n * by David DeSandro\n */\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 'outlayer/outlayer',\n 'get-size/get-size'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('outlayer'),\n require('get-size')\n );\n } else {\n // browser global\n window.Masonry = factory(\n window.Outlayer,\n window.getSize\n );\n }\n\n}( window, function factory( Outlayer, getSize ) {\n\n'use strict';\n\n// -------------------------- masonryDefinition -------------------------- //\n\n // create an Outlayer layout class\n var Masonry = Outlayer.create('masonry');\n // isFitWidth -> fitWidth\n Masonry.compatOptions.fitWidth = 'isFitWidth';\n\n var proto = Masonry.prototype;\n\n proto._resetLayout = function() {\n this.getSize();\n this._getMeasurement( 'columnWidth', 'outerWidth' );\n this._getMeasurement( 'gutter', 'outerWidth' );\n this.measureColumns();\n\n // reset column Y\n this.colYs = [];\n for ( var i=0; i < this.cols; i++ ) {\n this.colYs.push( 0 );\n }\n\n this.maxY = 0;\n this.horizontalColIndex = 0;\n };\n\n proto.measureColumns = function() {\n this.getContainerWidth();\n // if columnWidth is 0, default to outerWidth of first item\n if ( !this.columnWidth ) {\n var firstItem = this.items[0];\n var firstItemElem = firstItem && firstItem.element;\n // columnWidth fall back to item of first element\n this.columnWidth = firstItemElem && getSize( firstItemElem ).outerWidth ||\n // if first elem has no width, default to size of container\n this.containerWidth;\n }\n\n var columnWidth = this.columnWidth += this.gutter;\n\n // calculate columns\n var containerWidth = this.containerWidth + this.gutter;\n var cols = containerWidth / columnWidth;\n // fix rounding errors, typically with gutters\n var excess = columnWidth - containerWidth % columnWidth;\n // if overshoot is less than a pixel, round up, otherwise floor it\n var mathMethod = excess && excess < 1 ? 'round' : 'floor';\n cols = Math[ mathMethod ]( cols );\n this.cols = Math.max( cols, 1 );\n };\n\n proto.getContainerWidth = function() {\n // container is parent if fit width\n var isFitWidth = this._getOption('fitWidth');\n var container = isFitWidth ? this.element.parentNode : this.element;\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var size = getSize( container );\n this.containerWidth = size && size.innerWidth;\n };\n\n proto._getItemLayoutPosition = function( item ) {\n item.getSize();\n // how many columns does this brick span\n var remainder = item.size.outerWidth % this.columnWidth;\n var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil';\n // round if off by 1 pixel, otherwise use ceil\n var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );\n colSpan = Math.min( colSpan, this.cols );\n // use horizontal or top column position\n var colPosMethod = this.options.horizontalOrder ?\n '_getHorizontalColPosition' : '_getTopColPosition';\n var colPosition = this[ colPosMethod ]( colSpan, item );\n // position the brick\n var position = {\n x: this.columnWidth * colPosition.col,\n y: colPosition.y\n };\n // apply setHeight to necessary columns\n var setHeight = colPosition.y + item.size.outerHeight;\n var setMax = colSpan + colPosition.col;\n for ( var i = colPosition.col; i < setMax; i++ ) {\n this.colYs[i] = setHeight;\n }\n\n return position;\n };\n\n proto._getTopColPosition = function( colSpan ) {\n var colGroup = this._getTopColGroup( colSpan );\n // get the minimum Y value from the columns\n var minimumY = Math.min.apply( Math, colGroup );\n\n return {\n col: colGroup.indexOf( minimumY ),\n y: minimumY,\n };\n };\n\n /**\n * @param {Number} colSpan - number of columns the element spans\n * @returns {Array} colGroup\n */\n proto._getTopColGroup = function( colSpan ) {\n if ( colSpan < 2 ) {\n // if brick spans only one column, use all the column Ys\n return this.colYs;\n }\n\n var colGroup = [];\n // how many different places could this brick fit horizontally\n var groupCount = this.cols + 1 - colSpan;\n // for each group potential horizontal position\n for ( var i = 0; i < groupCount; i++ ) {\n colGroup[i] = this._getColGroupY( i, colSpan );\n }\n return colGroup;\n };\n\n proto._getColGroupY = function( col, colSpan ) {\n if ( colSpan < 2 ) {\n return this.colYs[ col ];\n }\n // make an array of colY values for that one group\n var groupColYs = this.colYs.slice( col, col + colSpan );\n // and get the max value of the array\n return Math.max.apply( Math, groupColYs );\n };\n\n // get column position based on horizontal index. #873\n proto._getHorizontalColPosition = function( colSpan, item ) {\n var col = this.horizontalColIndex % this.cols;\n var isOver = colSpan > 1 && col + colSpan > this.cols;\n // shift to next row if item can't fit on current row\n col = isOver ? 0 : col;\n // don't let zero-size items take up space\n var hasSize = item.size.outerWidth && item.size.outerHeight;\n this.horizontalColIndex = hasSize ? col + colSpan : this.horizontalColIndex;\n\n return {\n col: col,\n y: this._getColGroupY( col, colSpan ),\n };\n };\n\n proto._manageStamp = function( stamp ) {\n var stampSize = getSize( stamp );\n var offset = this._getElementOffset( stamp );\n // get the columns that this stamp affects\n var isOriginLeft = this._getOption('originLeft');\n var firstX = isOriginLeft ? offset.left : offset.right;\n var lastX = firstX + stampSize.outerWidth;\n var firstCol = Math.floor( firstX / this.columnWidth );\n firstCol = Math.max( 0, firstCol );\n var lastCol = Math.floor( lastX / this.columnWidth );\n // lastCol should not go over if multiple of columnWidth #425\n lastCol -= lastX % this.columnWidth ? 0 : 1;\n lastCol = Math.min( this.cols - 1, lastCol );\n // set colYs to bottom of the stamp\n\n var isOriginTop = this._getOption('originTop');\n var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +\n stampSize.outerHeight;\n for ( var i = firstCol; i <= lastCol; i++ ) {\n this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );\n }\n };\n\n proto._getContainerSize = function() {\n this.maxY = Math.max.apply( Math, this.colYs );\n var size = {\n height: this.maxY\n };\n\n if ( this._getOption('fitWidth') ) {\n size.width = this._getContainerFitWidth();\n }\n\n return size;\n };\n\n proto._getContainerFitWidth = function() {\n var unusedCols = 0;\n // count unused columns\n var i = this.cols;\n while ( --i ) {\n if ( this.colYs[i] !== 0 ) {\n break;\n }\n unusedCols++;\n }\n // fit container to columns that have been used\n return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;\n };\n\n proto.needsResizeLayout = function() {\n var previousWidth = this.containerWidth;\n this.getContainerWidth();\n return previousWidth != this.containerWidth;\n };\n\n return Masonry;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/masonry-layout/masonry.js","/*!\n * Outlayer v2.1.1\n * the brains and guts of a layout library\n * MIT license\n */\n\n( function( window, factory ) {\n 'use strict';\n // universal module definition\n /* jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './item'\n ],\n function( EvEmitter, getSize, utils, Item ) {\n return factory( window, EvEmitter, getSize, utils, Item);\n }\n );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./item')\n );\n } else {\n // browser global\n window.Outlayer = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n window.Outlayer.Item\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize, utils, Item ) {\n'use strict';\n\n// ----- vars ----- //\n\nvar console = window.console;\nvar jQuery = window.jQuery;\nvar noop = function() {};\n\n// -------------------------- Outlayer -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Outlayer intances\nvar instances = {};\n\n\n/**\n * @param {Element, String} element\n * @param {Object} options\n * @constructor\n */\nfunction Outlayer( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for ' + this.constructor.namespace +\n ': ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // add id for Outlayer.getFromElement\n var id = ++GUID;\n this.element.outlayerGUID = id; // expando\n instances[ id ] = this; // associate via id\n\n // kick it off\n this._create();\n\n var isInitLayout = this._getOption('initLayout');\n if ( isInitLayout ) {\n this.layout();\n }\n}\n\n// settings are for internal use only\nOutlayer.namespace = 'outlayer';\nOutlayer.Item = Item;\n\n// default options\nOutlayer.defaults = {\n containerStyle: {\n position: 'relative'\n },\n initLayout: true,\n originLeft: true,\n originTop: true,\n resize: true,\n resizeContainer: true,\n // item options\n transitionDuration: '0.4s',\n hiddenStyle: {\n opacity: 0,\n transform: 'scale(0.001)'\n },\n visibleStyle: {\n opacity: 1,\n transform: 'scale(1)'\n }\n};\n\nvar proto = Outlayer.prototype;\n// inherit EvEmitter\nutils.extend( proto, EvEmitter.prototype );\n\n/**\n * set options\n * @param {Object} opts\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\n/**\n * get backwards compatible option value, check old name\n */\nproto._getOption = function( option ) {\n var oldOption = this.constructor.compatOptions[ option ];\n return oldOption && this.options[ oldOption ] !== undefined ?\n this.options[ oldOption ] : this.options[ option ];\n};\n\nOutlayer.compatOptions = {\n // currentName: oldName\n initLayout: 'isInitLayout',\n horizontal: 'isHorizontal',\n layoutInstant: 'isLayoutInstant',\n originLeft: 'isOriginLeft',\n originTop: 'isOriginTop',\n resize: 'isResizeBound',\n resizeContainer: 'isResizingContainer'\n};\n\nproto._create = function() {\n // get items from children\n this.reloadItems();\n // elements that affect layout, but are not laid out\n this.stamps = [];\n this.stamp( this.options.stamp );\n // set container style\n utils.extend( this.element.style, this.options.containerStyle );\n\n // bind resize method\n var canBindResize = this._getOption('resize');\n if ( canBindResize ) {\n this.bindResize();\n }\n};\n\n// goes through all children again and gets bricks in proper order\nproto.reloadItems = function() {\n // collection of item elements\n this.items = this._itemize( this.element.children );\n};\n\n\n/**\n * turn elements into Outlayer.Items to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Outlayer Items\n */\nproto._itemize = function( elems ) {\n\n var itemElems = this._filterFindItemElements( elems );\n var Item = this.constructor.Item;\n\n // create new Outlayer Items for collection\n var items = [];\n for ( var i=0; i < itemElems.length; i++ ) {\n var elem = itemElems[i];\n var item = new Item( elem, this );\n items.push( item );\n }\n\n return items;\n};\n\n/**\n * get item elements to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - item elements\n */\nproto._filterFindItemElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.itemSelector );\n};\n\n/**\n * getter method for getting item elements\n * @returns {Array} elems - collection of item elements\n */\nproto.getItemElements = function() {\n return this.items.map( function( item ) {\n return item.element;\n });\n};\n\n// ----- init & layout ----- //\n\n/**\n * lays out all items\n */\nproto.layout = function() {\n this._resetLayout();\n this._manageStamps();\n\n // don't animate first layout\n var layoutInstant = this._getOption('layoutInstant');\n var isInstant = layoutInstant !== undefined ?\n layoutInstant : !this._isLayoutInited;\n this.layoutItems( this.items, isInstant );\n\n // flag for initalized\n this._isLayoutInited = true;\n};\n\n// _init is alias for layout\nproto._init = proto.layout;\n\n/**\n * logic before any new layout\n */\nproto._resetLayout = function() {\n this.getSize();\n};\n\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\n/**\n * get measurement from option, for columnWidth, rowHeight, gutter\n * if option is String -> get element from selector string, & get size of element\n * if option is Element -> get size of element\n * else use option as a number\n *\n * @param {String} measurement\n * @param {String} size - width or height\n * @private\n */\nproto._getMeasurement = function( measurement, size ) {\n var option = this.options[ measurement ];\n var elem;\n if ( !option ) {\n // default to 0\n this[ measurement ] = 0;\n } else {\n // use option as an element\n if ( typeof option == 'string' ) {\n elem = this.element.querySelector( option );\n } else if ( option instanceof HTMLElement ) {\n elem = option;\n }\n // use size of element, if element\n this[ measurement ] = elem ? getSize( elem )[ size ] : option;\n }\n};\n\n/**\n * layout a collection of item elements\n * @api public\n */\nproto.layoutItems = function( items, isInstant ) {\n items = this._getItemsForLayout( items );\n\n this._layoutItems( items, isInstant );\n\n this._postLayout();\n};\n\n/**\n * get the items to be laid out\n * you may want to skip over some items\n * @param {Array} items\n * @returns {Array} items\n */\nproto._getItemsForLayout = function( items ) {\n return items.filter( function( item ) {\n return !item.isIgnored;\n });\n};\n\n/**\n * layout items\n * @param {Array} items\n * @param {Boolean} isInstant\n */\nproto._layoutItems = function( items, isInstant ) {\n this._emitCompleteOnItems( 'layout', items );\n\n if ( !items || !items.length ) {\n // no items, emit event with empty array\n return;\n }\n\n var queue = [];\n\n items.forEach( function( item ) {\n // get x/y object from method\n var position = this._getItemLayoutPosition( item );\n // enqueue\n position.item = item;\n position.isInstant = isInstant || item.isLayoutInstant;\n queue.push( position );\n }, this );\n\n this._processLayoutQueue( queue );\n};\n\n/**\n * get item layout position\n * @param {Outlayer.Item} item\n * @returns {Object} x and y position\n */\nproto._getItemLayoutPosition = function( /* item */ ) {\n return {\n x: 0,\n y: 0\n };\n};\n\n/**\n * iterate over array and position each item\n * Reason being - separating this logic prevents 'layout invalidation'\n * thx @paul_irish\n * @param {Array} queue\n */\nproto._processLayoutQueue = function( queue ) {\n this.updateStagger();\n queue.forEach( function( obj, i ) {\n this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );\n }, this );\n};\n\n// set stagger from option in milliseconds number\nproto.updateStagger = function() {\n var stagger = this.options.stagger;\n if ( stagger === null || stagger === undefined ) {\n this.stagger = 0;\n return;\n }\n this.stagger = getMilliseconds( stagger );\n return this.stagger;\n};\n\n/**\n * Sets position of item in DOM\n * @param {Outlayer.Item} item\n * @param {Number} x - horizontal position\n * @param {Number} y - vertical position\n * @param {Boolean} isInstant - disables transitions\n */\nproto._positionItem = function( item, x, y, isInstant, i ) {\n if ( isInstant ) {\n // if not transition, just set CSS\n item.goTo( x, y );\n } else {\n item.stagger( i * this.stagger );\n item.moveTo( x, y );\n }\n};\n\n/**\n * Any logic you want to do after each layout,\n * i.e. size the container\n */\nproto._postLayout = function() {\n this.resizeContainer();\n};\n\nproto.resizeContainer = function() {\n var isResizingContainer = this._getOption('resizeContainer');\n if ( !isResizingContainer ) {\n return;\n }\n var size = this._getContainerSize();\n if ( size ) {\n this._setContainerMeasure( size.width, true );\n this._setContainerMeasure( size.height, false );\n }\n};\n\n/**\n * Sets width or height of container if returned\n * @returns {Object} size\n * @param {Number} width\n * @param {Number} height\n */\nproto._getContainerSize = noop;\n\n/**\n * @param {Number} measure - size of width or height\n * @param {Boolean} isWidth\n */\nproto._setContainerMeasure = function( measure, isWidth ) {\n if ( measure === undefined ) {\n return;\n }\n\n var elemSize = this.size;\n // add padding and border width if border box\n if ( elemSize.isBorderBox ) {\n measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +\n elemSize.borderLeftWidth + elemSize.borderRightWidth :\n elemSize.paddingBottom + elemSize.paddingTop +\n elemSize.borderTopWidth + elemSize.borderBottomWidth;\n }\n\n measure = Math.max( measure, 0 );\n this.element.style[ isWidth ? 'width' : 'height' ] = measure + 'px';\n};\n\n/**\n * emit eventComplete on a collection of items events\n * @param {String} eventName\n * @param {Array} items - Outlayer.Items\n */\nproto._emitCompleteOnItems = function( eventName, items ) {\n var _this = this;\n function onComplete() {\n _this.dispatchEvent( eventName + 'Complete', null, [ items ] );\n }\n\n var count = items.length;\n if ( !items || !count ) {\n onComplete();\n return;\n }\n\n var doneCount = 0;\n function tick() {\n doneCount++;\n if ( doneCount == count ) {\n onComplete();\n }\n }\n\n // bind callback\n items.forEach( function( item ) {\n item.once( eventName, tick );\n });\n};\n\n/**\n * emits events via EvEmitter 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 // add original event to arguments\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery ) {\n // set this.$element\n this.$element = this.$element || jQuery( this.element );\n if ( event ) {\n // create jQuery event\n var $event = jQuery.Event( event );\n $event.type = type;\n this.$element.trigger( $event, args );\n } else {\n // just trigger with type if no event available\n this.$element.trigger( type, args );\n }\n }\n};\n\n// -------------------------- ignore & stamps -------------------------- //\n\n\n/**\n * keep item in collection, but do not lay it out\n * ignored items do not get skipped in layout\n * @param {Element} elem\n */\nproto.ignore = function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n item.isIgnored = true;\n }\n};\n\n/**\n * return item to layout collection\n * @param {Element} elem\n */\nproto.unignore = function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n delete item.isIgnored;\n }\n};\n\n/**\n * adds elements to stamps\n * @param {NodeList, Array, Element, or String} elems\n */\nproto.stamp = function( elems ) {\n elems = this._find( elems );\n if ( !elems ) {\n return;\n }\n\n this.stamps = this.stamps.concat( elems );\n // ignore\n elems.forEach( this.ignore, this );\n};\n\n/**\n * removes elements to stamps\n * @param {NodeList, Array, or Element} elems\n */\nproto.unstamp = function( elems ) {\n elems = this._find( elems );\n if ( !elems ){\n return;\n }\n\n elems.forEach( function( elem ) {\n // filter out removed stamp elements\n utils.removeFrom( this.stamps, elem );\n this.unignore( elem );\n }, this );\n};\n\n/**\n * finds child elements\n * @param {NodeList, Array, Element, or String} elems\n * @returns {Array} elems\n */\nproto._find = function( elems ) {\n if ( !elems ) {\n return;\n }\n // if string, use argument as selector string\n if ( typeof elems == 'string' ) {\n elems = this.element.querySelectorAll( elems );\n }\n elems = utils.makeArray( elems );\n return elems;\n};\n\nproto._manageStamps = function() {\n if ( !this.stamps || !this.stamps.length ) {\n return;\n }\n\n this._getBoundingRect();\n\n this.stamps.forEach( this._manageStamp, this );\n};\n\n// update boundingLeft / Top\nproto._getBoundingRect = function() {\n // get bounding rect for container element\n var boundingRect = this.element.getBoundingClientRect();\n var size = this.size;\n this._boundingRect = {\n left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,\n top: boundingRect.top + size.paddingTop + size.borderTopWidth,\n right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),\n bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )\n };\n};\n\n/**\n * @param {Element} stamp\n**/\nproto._manageStamp = noop;\n\n/**\n * get x/y position of element relative to container element\n * @param {Element} elem\n * @returns {Object} offset - has left, top, right, bottom\n */\nproto._getElementOffset = function( elem ) {\n var boundingRect = elem.getBoundingClientRect();\n var thisRect = this._boundingRect;\n var size = getSize( elem );\n var offset = {\n left: boundingRect.left - thisRect.left - size.marginLeft,\n top: boundingRect.top - thisRect.top - size.marginTop,\n right: thisRect.right - boundingRect.right - size.marginRight,\n bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom\n };\n return offset;\n};\n\n// -------------------------- resize -------------------------- //\n\n// enable event handlers for listeners\n// i.e. resize -> onresize\nproto.handleEvent = utils.handleEvent;\n\n/**\n * Bind layout to window resizing\n */\nproto.bindResize = function() {\n window.addEventListener( 'resize', this );\n this.isResizeBound = true;\n};\n\n/**\n * Unbind layout to window resizing\n */\nproto.unbindResize = function() {\n window.removeEventListener( 'resize', this );\n this.isResizeBound = false;\n};\n\nproto.onresize = function() {\n this.resize();\n};\n\nutils.debounceMethod( Outlayer, 'onresize', 100 );\n\nproto.resize = function() {\n // don't trigger if size did not change\n // or if resize was unbound. See #9\n if ( !this.isResizeBound || !this.needsResizeLayout() ) {\n return;\n }\n\n this.layout();\n};\n\n/**\n * check if layout is needed post layout\n * @returns Boolean\n */\nproto.needsResizeLayout = function() {\n var size = getSize( this.element );\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var hasSizes = this.size && size;\n return hasSizes && size.innerWidth !== this.size.innerWidth;\n};\n\n// -------------------------- methods -------------------------- //\n\n/**\n * add items to Outlayer instance\n * @param {Array or NodeList or Element} elems\n * @returns {Array} items - Outlayer.Items\n**/\nproto.addItems = function( elems ) {\n var items = this._itemize( elems );\n // add items to collection\n if ( items.length ) {\n this.items = this.items.concat( items );\n }\n return items;\n};\n\n/**\n * Layout newly-appended item elements\n * @param {Array or NodeList or Element} elems\n */\nproto.appended = function( elems ) {\n var items = this.addItems( elems );\n if ( !items.length ) {\n return;\n }\n // layout and reveal just the new items\n this.layoutItems( items, true );\n this.reveal( items );\n};\n\n/**\n * Layout prepended elements\n * @param {Array or NodeList or Element} elems\n */\nproto.prepended = function( elems ) {\n var items = this._itemize( elems );\n if ( !items.length ) {\n return;\n }\n // add items to beginning of collection\n var previousItems = this.items.slice(0);\n this.items = items.concat( previousItems );\n // start new layout\n this._resetLayout();\n this._manageStamps();\n // layout new stuff without transition\n this.layoutItems( items, true );\n this.reveal( items );\n // layout previous items\n this.layoutItems( previousItems );\n};\n\n/**\n * reveal a collection of items\n * @param {Array of Outlayer.Items} items\n */\nproto.reveal = function( items ) {\n this._emitCompleteOnItems( 'reveal', items );\n if ( !items || !items.length ) {\n return;\n }\n var stagger = this.updateStagger();\n items.forEach( function( item, i ) {\n item.stagger( i * stagger );\n item.reveal();\n });\n};\n\n/**\n * hide a collection of items\n * @param {Array of Outlayer.Items} items\n */\nproto.hide = function( items ) {\n this._emitCompleteOnItems( 'hide', items );\n if ( !items || !items.length ) {\n return;\n }\n var stagger = this.updateStagger();\n items.forEach( function( item, i ) {\n item.stagger( i * stagger );\n item.hide();\n });\n};\n\n/**\n * reveal item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nproto.revealItemElements = function( elems ) {\n var items = this.getItems( elems );\n this.reveal( items );\n};\n\n/**\n * hide item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nproto.hideItemElements = function( elems ) {\n var items = this.getItems( elems );\n this.hide( items );\n};\n\n/**\n * get Outlayer.Item, given an Element\n * @param {Element} elem\n * @param {Function} callback\n * @returns {Outlayer.Item} item\n */\nproto.getItem = function( elem ) {\n // loop through items to get the one that matches\n for ( var i=0; i < this.items.length; i++ ) {\n var item = this.items[i];\n if ( item.element == elem ) {\n // return item\n return item;\n }\n }\n};\n\n/**\n * get collection of Outlayer.Items, given Elements\n * @param {Array} elems\n * @returns {Array} items - Outlayer.Items\n */\nproto.getItems = function( elems ) {\n elems = utils.makeArray( elems );\n var items = [];\n elems.forEach( function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n items.push( item );\n }\n }, this );\n\n return items;\n};\n\n/**\n * remove element(s) from instance and DOM\n * @param {Array or NodeList or Element} elems\n */\nproto.remove = function( elems ) {\n var removeItems = this.getItems( elems );\n\n this._emitCompleteOnItems( 'remove', removeItems );\n\n // bail if no items to remove\n if ( !removeItems || !removeItems.length ) {\n return;\n }\n\n removeItems.forEach( function( item ) {\n item.remove();\n // remove item from collection\n utils.removeFrom( this.items, item );\n }, this );\n};\n\n// ----- destroy ----- //\n\n// remove and disable Outlayer instance\nproto.destroy = function() {\n // clean up dynamic styles\n var style = this.element.style;\n style.height = '';\n style.position = '';\n style.width = '';\n // destroy items\n this.items.forEach( function( item ) {\n item.destroy();\n });\n\n this.unbindResize();\n\n var id = this.element.outlayerGUID;\n delete instances[ id ]; // remove reference to instance by id\n delete this.element.outlayerGUID;\n // remove data for jQuery\n if ( jQuery ) {\n jQuery.removeData( this.element, this.constructor.namespace );\n }\n\n};\n\n// -------------------------- data -------------------------- //\n\n/**\n * get Outlayer instance from element\n * @param {Element} elem\n * @returns {Outlayer}\n */\nOutlayer.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.outlayerGUID;\n return id && instances[ id ];\n};\n\n\n// -------------------------- create Outlayer class -------------------------- //\n\n/**\n * create a layout class\n * @param {String} namespace\n */\nOutlayer.create = function( namespace, options ) {\n // sub-class Outlayer\n var Layout = subclass( Outlayer );\n // apply new options and compatOptions\n Layout.defaults = utils.extend( {}, Outlayer.defaults );\n utils.extend( Layout.defaults, options );\n Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions );\n\n Layout.namespace = namespace;\n\n Layout.data = Outlayer.data;\n\n // sub-class Item\n Layout.Item = subclass( Item );\n\n // -------------------------- declarative -------------------------- //\n\n utils.htmlInit( Layout, namespace );\n\n // -------------------------- jQuery bridge -------------------------- //\n\n // make into jQuery plugin\n if ( jQuery && jQuery.bridget ) {\n jQuery.bridget( namespace, Layout );\n }\n\n return Layout;\n};\n\nfunction subclass( Parent ) {\n function SubClass() {\n Parent.apply( this, arguments );\n }\n\n SubClass.prototype = Object.create( Parent.prototype );\n SubClass.prototype.constructor = SubClass;\n\n return SubClass;\n}\n\n// ----- helpers ----- //\n\n// how many milliseconds are in each unit\nvar msUnits = {\n ms: 1,\n s: 1000\n};\n\n// munge time-like parameter into millisecond number\n// '0.4s' -> 40\nfunction getMilliseconds( time ) {\n if ( typeof time == 'number' ) {\n return time;\n }\n var matches = time.match( /(^\\d*\\.?\\d*)(\\w*)/ );\n var num = matches && matches[1];\n var unit = matches && matches[2];\n if ( !num.length ) {\n return 0;\n }\n num = parseFloat( num );\n var mult = msUnits[ unit ] || 1;\n return num * mult;\n}\n\n// ----- fin ----- //\n\n// back in global\nOutlayer.Item = Item;\n\nreturn Outlayer;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/outlayer/outlayer.js","/**\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\n\n// WEBPACK FOOTER //\n// ./node_modules/fizzy-ui-utils/utils.js","/**\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\n\n// WEBPACK FOOTER //\n// ./node_modules/desandro-matches-selector/matches-selector.js","/**\n * Outlayer Item\n */\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 - RequireJS\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size'\n ],\n factory\n );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory(\n require('ev-emitter'),\n require('get-size')\n );\n } else {\n // browser global\n window.Outlayer = {};\n window.Outlayer.Item = factory(\n window.EvEmitter,\n window.getSize\n );\n }\n\n}( window, function factory( EvEmitter, getSize ) {\n'use strict';\n\n// ----- helpers ----- //\n\nfunction isEmptyObj( obj ) {\n for ( var prop in obj ) {\n return false;\n }\n prop = null;\n return true;\n}\n\n// -------------------------- CSS3 support -------------------------- //\n\n\nvar docElemStyle = document.documentElement.style;\n\nvar transitionProperty = typeof docElemStyle.transition == 'string' ?\n 'transition' : 'WebkitTransition';\nvar transformProperty = typeof docElemStyle.transform == 'string' ?\n 'transform' : 'WebkitTransform';\n\nvar transitionEndEvent = {\n WebkitTransition: 'webkitTransitionEnd',\n transition: 'transitionend'\n}[ transitionProperty ];\n\n// cache all vendor properties that could have vendor prefix\nvar vendorProperties = {\n transform: transformProperty,\n transition: transitionProperty,\n transitionDuration: transitionProperty + 'Duration',\n transitionProperty: transitionProperty + 'Property',\n transitionDelay: transitionProperty + 'Delay'\n};\n\n// -------------------------- Item -------------------------- //\n\nfunction Item( element, layout ) {\n if ( !element ) {\n return;\n }\n\n this.element = element;\n // parent layout class, i.e. Masonry, Isotope, or Packery\n this.layout = layout;\n this.position = {\n x: 0,\n y: 0\n };\n\n this._create();\n}\n\n// inherit EvEmitter\nvar proto = Item.prototype = Object.create( EvEmitter.prototype );\nproto.constructor = Item;\n\nproto._create = function() {\n // transition objects\n this._transn = {\n ingProperties: {},\n clean: {},\n onEnd: {}\n };\n\n this.css({\n position: 'absolute'\n });\n};\n\n// trigger specified handler for event type\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\n/**\n * apply CSS styles to element\n * @param {Object} style\n */\nproto.css = function( style ) {\n var elemStyle = this.element.style;\n\n for ( var prop in style ) {\n // use vendor property if available\n var supportedProp = vendorProperties[ prop ] || prop;\n elemStyle[ supportedProp ] = style[ prop ];\n }\n};\n\n // measure position, and sets it\nproto.getPosition = function() {\n var style = getComputedStyle( this.element );\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n var xValue = style[ isOriginLeft ? 'left' : 'right' ];\n var yValue = style[ isOriginTop ? 'top' : 'bottom' ];\n var x = parseFloat( xValue );\n var y = parseFloat( yValue );\n // convert percent to pixels\n var layoutSize = this.layout.size;\n if ( xValue.indexOf('%') != -1 ) {\n x = ( x / 100 ) * layoutSize.width;\n }\n if ( yValue.indexOf('%') != -1 ) {\n y = ( y / 100 ) * layoutSize.height;\n }\n // clean up 'auto' or other non-integer values\n x = isNaN( x ) ? 0 : x;\n y = isNaN( y ) ? 0 : y;\n // remove padding from measurement\n x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;\n y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;\n\n this.position.x = x;\n this.position.y = y;\n};\n\n// set settled position, apply padding\nproto.layoutPosition = function() {\n var layoutSize = this.layout.size;\n var style = {};\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n\n // x\n var xPadding = isOriginLeft ? 'paddingLeft' : 'paddingRight';\n var xProperty = isOriginLeft ? 'left' : 'right';\n var xResetProperty = isOriginLeft ? 'right' : 'left';\n\n var x = this.position.x + layoutSize[ xPadding ];\n // set in percentage or pixels\n style[ xProperty ] = this.getXValue( x );\n // reset other property\n style[ xResetProperty ] = '';\n\n // y\n var yPadding = isOriginTop ? 'paddingTop' : 'paddingBottom';\n var yProperty = isOriginTop ? 'top' : 'bottom';\n var yResetProperty = isOriginTop ? 'bottom' : 'top';\n\n var y = this.position.y + layoutSize[ yPadding ];\n // set in percentage or pixels\n style[ yProperty ] = this.getYValue( y );\n // reset other property\n style[ yResetProperty ] = '';\n\n this.css( style );\n this.emitEvent( 'layout', [ this ] );\n};\n\nproto.getXValue = function( x ) {\n var isHorizontal = this.layout._getOption('horizontal');\n return this.layout.options.percentPosition && !isHorizontal ?\n ( ( x / this.layout.size.width ) * 100 ) + '%' : x + 'px';\n};\n\nproto.getYValue = function( y ) {\n var isHorizontal = this.layout._getOption('horizontal');\n return this.layout.options.percentPosition && isHorizontal ?\n ( ( y / this.layout.size.height ) * 100 ) + '%' : y + 'px';\n};\n\nproto._transitionTo = function( x, y ) {\n this.getPosition();\n // get current x & y from top/left\n var curX = this.position.x;\n var curY = this.position.y;\n\n var didNotMove = x == this.position.x && y == this.position.y;\n\n // save end position\n this.setPosition( x, y );\n\n // if did not move and not transitioning, just go to layout\n if ( didNotMove && !this.isTransitioning ) {\n this.layoutPosition();\n return;\n }\n\n var transX = x - curX;\n var transY = y - curY;\n var transitionStyle = {};\n transitionStyle.transform = this.getTranslate( transX, transY );\n\n this.transition({\n to: transitionStyle,\n onTransitionEnd: {\n transform: this.layoutPosition\n },\n isCleaning: true\n });\n};\n\nproto.getTranslate = function( x, y ) {\n // flip cooridinates if origin on right or bottom\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n x = isOriginLeft ? x : -x;\n y = isOriginTop ? y : -y;\n return 'translate3d(' + x + 'px, ' + y + 'px, 0)';\n};\n\n// non transition + transform support\nproto.goTo = function( x, y ) {\n this.setPosition( x, y );\n this.layoutPosition();\n};\n\nproto.moveTo = proto._transitionTo;\n\nproto.setPosition = function( x, y ) {\n this.position.x = parseFloat( x );\n this.position.y = parseFloat( y );\n};\n\n// ----- transition ----- //\n\n/**\n * @param {Object} style - CSS\n * @param {Function} onTransitionEnd\n */\n\n// non transition, just trigger callback\nproto._nonTransition = function( args ) {\n this.css( args.to );\n if ( args.isCleaning ) {\n this._removeStyles( args.to );\n }\n for ( var prop in args.onTransitionEnd ) {\n args.onTransitionEnd[ prop ].call( this );\n }\n};\n\n/**\n * proper transition\n * @param {Object} args - arguments\n * @param {Object} to - style to transition to\n * @param {Object} from - style to start transition from\n * @param {Boolean} isCleaning - removes transition styles after transition\n * @param {Function} onTransitionEnd - callback\n */\nproto.transition = function( args ) {\n // redirect to nonTransition if no transition duration\n if ( !parseFloat( this.layout.options.transitionDuration ) ) {\n this._nonTransition( args );\n return;\n }\n\n var _transition = this._transn;\n // keep track of onTransitionEnd callback by css property\n for ( var prop in args.onTransitionEnd ) {\n _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];\n }\n // keep track of properties that are transitioning\n for ( prop in args.to ) {\n _transition.ingProperties[ prop ] = true;\n // keep track of properties to clean up when transition is done\n if ( args.isCleaning ) {\n _transition.clean[ prop ] = true;\n }\n }\n\n // set from styles\n if ( args.from ) {\n this.css( args.from );\n // force redraw. http://blog.alexmaccaw.com/css-transitions\n var h = this.element.offsetHeight;\n // hack for JSHint to hush about unused var\n h = null;\n }\n // enable transition\n this.enableTransition( args.to );\n // set styles that are transitioning\n this.css( args.to );\n\n this.isTransitioning = true;\n\n};\n\n// dash before all cap letters, including first for\n// WebkitTransform => -webkit-transform\nfunction toDashedAll( str ) {\n return str.replace( /([A-Z])/g, function( $1 ) {\n return '-' + $1.toLowerCase();\n });\n}\n\nvar transitionProps = 'opacity,' + toDashedAll( transformProperty );\n\nproto.enableTransition = function(/* style */) {\n // HACK changing transitionProperty during a transition\n // will cause transition to jump\n if ( this.isTransitioning ) {\n return;\n }\n\n // make `transition: foo, bar, baz` from style object\n // HACK un-comment this when enableTransition can work\n // while a transition is happening\n // var transitionValues = [];\n // for ( var prop in style ) {\n // // dash-ify camelCased properties like WebkitTransition\n // prop = vendorProperties[ prop ] || prop;\n // transitionValues.push( toDashedAll( prop ) );\n // }\n // munge number to millisecond, to match stagger\n var duration = this.layout.options.transitionDuration;\n duration = typeof duration == 'number' ? duration + 'ms' : duration;\n // enable transition styles\n this.css({\n transitionProperty: transitionProps,\n transitionDuration: duration,\n transitionDelay: this.staggerDelay || 0\n });\n // listen for transition end event\n this.element.addEventListener( transitionEndEvent, this, false );\n};\n\n// ----- events ----- //\n\nproto.onwebkitTransitionEnd = function( event ) {\n this.ontransitionend( event );\n};\n\nproto.onotransitionend = function( event ) {\n this.ontransitionend( event );\n};\n\n// properties that I munge to make my life easier\nvar dashedVendorProperties = {\n '-webkit-transform': 'transform'\n};\n\nproto.ontransitionend = function( event ) {\n // disregard bubbled events from children\n if ( event.target !== this.element ) {\n return;\n }\n var _transition = this._transn;\n // get property name of transitioned property, convert to prefix-free\n var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;\n\n // remove property that has completed transitioning\n delete _transition.ingProperties[ propertyName ];\n // check if any properties are still transitioning\n if ( isEmptyObj( _transition.ingProperties ) ) {\n // all properties have completed transitioning\n this.disableTransition();\n }\n // clean style\n if ( propertyName in _transition.clean ) {\n // clean up style\n this.element.style[ event.propertyName ] = '';\n delete _transition.clean[ propertyName ];\n }\n // trigger onTransitionEnd callback\n if ( propertyName in _transition.onEnd ) {\n var onTransitionEnd = _transition.onEnd[ propertyName ];\n onTransitionEnd.call( this );\n delete _transition.onEnd[ propertyName ];\n }\n\n this.emitEvent( 'transitionEnd', [ this ] );\n};\n\nproto.disableTransition = function() {\n this.removeTransitionStyles();\n this.element.removeEventListener( transitionEndEvent, this, false );\n this.isTransitioning = false;\n};\n\n/**\n * removes style property from element\n * @param {Object} style\n**/\nproto._removeStyles = function( style ) {\n // clean up transition styles\n var cleanStyle = {};\n for ( var prop in style ) {\n cleanStyle[ prop ] = '';\n }\n this.css( cleanStyle );\n};\n\nvar cleanTransitionStyle = {\n transitionProperty: '',\n transitionDuration: '',\n transitionDelay: ''\n};\n\nproto.removeTransitionStyles = function() {\n // remove transition\n this.css( cleanTransitionStyle );\n};\n\n// ----- stagger ----- //\n\nproto.stagger = function( delay ) {\n delay = isNaN( delay ) ? 0 : delay;\n this.staggerDelay = delay + 'ms';\n};\n\n// ----- show/hide/remove ----- //\n\n// remove element from DOM\nproto.removeElem = function() {\n this.element.parentNode.removeChild( this.element );\n // remove display: none\n this.css({ display: '' });\n this.emitEvent( 'remove', [ this ] );\n};\n\nproto.remove = function() {\n // just remove element if no transition support or no transition\n if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {\n this.removeElem();\n return;\n }\n\n // start transition\n this.once( 'transitionEnd', function() {\n this.removeElem();\n });\n this.hide();\n};\n\nproto.reveal = function() {\n delete this.isHidden;\n // remove display: none\n this.css({ display: '' });\n\n var options = this.layout.options;\n\n var onTransitionEnd = {};\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('visibleStyle');\n onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;\n\n this.transition({\n from: options.hiddenStyle,\n to: options.visibleStyle,\n isCleaning: true,\n onTransitionEnd: onTransitionEnd\n });\n};\n\nproto.onRevealTransitionEnd = function() {\n // check if still visible\n // during transition, item may have been hidden\n if ( !this.isHidden ) {\n this.emitEvent('reveal');\n }\n};\n\n/**\n * get style property use for hide/reveal transition end\n * @param {String} styleProperty - hiddenStyle/visibleStyle\n * @returns {String}\n */\nproto.getHideRevealTransitionEndProperty = function( styleProperty ) {\n var optionStyle = this.layout.options[ styleProperty ];\n // use opacity\n if ( optionStyle.opacity ) {\n return 'opacity';\n }\n // get first property\n for ( var prop in optionStyle ) {\n return prop;\n }\n};\n\nproto.hide = function() {\n // set flag\n this.isHidden = true;\n // remove display: none\n this.css({ display: '' });\n\n var options = this.layout.options;\n\n var onTransitionEnd = {};\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('hiddenStyle');\n onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;\n\n this.transition({\n from: options.visibleStyle,\n to: options.hiddenStyle,\n // keep hidden stuff hidden\n isCleaning: true,\n onTransitionEnd: onTransitionEnd\n });\n};\n\nproto.onHideTransitionEnd = function() {\n // check if still hidden\n // during transition, item may have been un-hidden\n if ( this.isHidden ) {\n this.css({ display: 'none' });\n this.emitEvent('hide');\n }\n};\n\nproto.destroy = function() {\n this.css({\n position: '',\n left: '',\n right: '',\n top: '',\n bottom: '',\n transition: '',\n transform: ''\n });\n};\n\nreturn Item;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/outlayer/item.js","/**\n * Dom7 2.1.5\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * http://framework7.io/docs/dom.html\n *\n * Copyright 2020, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n *\n * Licensed under MIT\n *\n * Released on: May 15, 2020\n */\nimport { document, window } from 'ssr-window';\n\nclass Dom7 {\n constructor(arr) {\n const self = this;\n // Create array-like object\n for (let i = 0; i < arr.length; i += 1) {\n self[i] = arr[i];\n }\n self.length = arr.length;\n // Return collection with methods\n return this;\n }\n}\n\nfunction $(selector, context) {\n const arr = [];\n let i = 0;\n if (selector && !context) {\n if (selector instanceof Dom7) {\n return selector;\n }\n }\n if (selector) {\n // String\n if (typeof selector === 'string') {\n let els;\n let tempParent;\n const html = selector.trim();\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf(':~]/)) {\n // Pure ID selector\n els = [document.getElementById(selector.trim().split('#')[1])];\n } else {\n // Other selectors\n els = (context || document).querySelectorAll(selector.trim());\n }\n for (i = 0; i < els.length; i += 1) {\n if (els[i]) arr.push(els[i]);\n }\n }\n } else if (selector.nodeType || selector === window || selector === document) {\n // Node/element\n arr.push(selector);\n } else if (selector.length > 0 && selector[0].nodeType) {\n // Array of elements or instance of Dom\n for (i = 0; i < selector.length; i += 1) {\n arr.push(selector[i]);\n }\n }\n }\n return new Dom7(arr);\n}\n\n$.fn = Dom7.prototype;\n$.Class = Dom7;\n$.Dom7 = Dom7;\n\nfunction unique(arr) {\n const uniqueArray = [];\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group1) => group1.toUpperCase());\n}\n\nfunction requestAnimationFrame(callback) {\n if (window.requestAnimationFrame) return window.requestAnimationFrame(callback);\n else if (window.webkitRequestAnimationFrame) return window.webkitRequestAnimationFrame(callback);\n return window.setTimeout(callback, 1000 / 60);\n}\nfunction cancelAnimationFrame(id) {\n if (window.cancelAnimationFrame) return window.cancelAnimationFrame(id);\n else if (window.webkitCancelAnimationFrame) return window.webkitCancelAnimationFrame(id);\n return window.clearTimeout(id);\n}\n\n// Classes and attributes\nfunction addClass(className) {\n if (typeof className === 'undefined') {\n return this;\n }\n const classes = className.split(' ');\n for (let i = 0; i < classes.length; i += 1) {\n for (let j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.add(classes[i]);\n }\n }\n return this;\n}\nfunction removeClass(className) {\n const classes = className.split(' ');\n for (let i = 0; i < classes.length; i += 1) {\n for (let j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.remove(classes[i]);\n }\n }\n return this;\n}\nfunction hasClass(className) {\n if (!this[0]) return false;\n return this[0].classList.contains(className);\n}\nfunction toggleClass(className) {\n const classes = className.split(' ');\n for (let i = 0; i < classes.length; i += 1) {\n for (let j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.toggle(classes[i]);\n }\n }\n return this;\n}\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n }\n\n // Set attrs\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n // eslint-disable-next-line\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n return this;\n}\n// eslint-disable-next-line\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n return this;\n}\n// eslint-disable-next-line\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n // eslint-disable-next-line\n for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n return this;\n }\n}\nfunction data(key, value) {\n let el;\n if (typeof value === 'undefined') {\n el = this[0];\n // Get value\n if (el) {\n if (el.dom7ElementDataStorage && (key in el.dom7ElementDataStorage)) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n if (dataKey) {\n return dataKey;\n }\n return undefined;\n }\n return undefined;\n }\n\n // Set value\n for (let i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n return this;\n}\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n if (el.dataset) {\n // eslint-disable-next-line\n for (const dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (let i = 0; i < el.attributes.length; i += 1) {\n // eslint-disable-next-line\n const attr = el.attributes[i];\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n // eslint-disable-next-line\n for (const key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;\n else if (dataset[key] === 'true') dataset[key] = true;\n else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n return dataset;\n}\nfunction val(value) {\n const dom = this;\n if (typeof value === 'undefined') {\n if (dom[0]) {\n if (dom[0].multiple && dom[0].nodeName.toLowerCase() === 'select') {\n const values = [];\n for (let i = 0; i < dom[0].selectedOptions.length; i += 1) {\n values.push(dom[0].selectedOptions[i].value);\n }\n return values;\n }\n return dom[0].value;\n }\n return undefined;\n }\n\n for (let i = 0; i < dom.length; i += 1) {\n const el = dom[i];\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (let j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n return dom;\n}\n// Transforms\n// eslint-disable-next-line\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n const elStyle = this[i].style;\n elStyle.webkitTransform = transform;\n elStyle.transform = transform;\n }\n return this;\n}\nfunction transition(duration) {\n if (typeof duration !== 'string') {\n duration = `${duration}ms`; // eslint-disable-line\n }\n for (let i = 0; i < this.length; i += 1) {\n const elStyle = this[i].style;\n elStyle.webkitTransitionDuration = duration;\n elStyle.transitionDuration = duration;\n }\n return this;\n}\n// Events\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n if ($(target).is(targetSelector)) listener.apply(target, eventData);\n else {\n const parents = $(target).parents(); // eslint-disable-line\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n listener.apply(this, eventData);\n }\n const events = eventType.split(' ');\n let j;\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent,\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent,\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n return this;\n}\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n if (!capture) capture = false;\n\n const events = eventType.split(' ');\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n return this;\n}\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\nfunction trigger(...args) {\n const events = args[0].split(' ');\n const eventData = args[1];\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let evt;\n try {\n evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true,\n });\n } catch (e) {\n evt = document.createEvent('Event');\n evt.initEvent(event, true, true);\n evt.detail = eventData;\n }\n // eslint-disable-next-line\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n return this;\n}\nfunction transitionEnd(callback) {\n const events = ['webkitTransitionEnd', 'transitionend'];\n const dom = this;\n let i;\n function fireCallBack(e) {\n /* jshint validthis:true */\n if (e.target !== this) return;\n callback.call(this, e);\n for (i = 0; i < events.length; i += 1) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i += 1) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n}\nfunction animationEnd(callback) {\n const events = ['webkitAnimationEnd', 'animationend'];\n const dom = this;\n let i;\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n for (i = 0; i < events.length; i += 1) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i += 1) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n}\n// Sizing/Styles\nfunction width() {\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n // eslint-disable-next-line\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n return this[0].offsetWidth;\n }\n return null;\n}\nfunction height() {\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n // eslint-disable-next-line\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n return this[0].offsetHeight;\n }\n return null;\n}\nfunction offset() {\n if (this.length > 0) {\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: (box.top + scrollTop) - clientTop,\n left: (box.left + scrollLeft) - clientLeft,\n };\n }\n\n return null;\n}\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n return this;\n}\nfunction show() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n return this;\n}\nfunction styles() {\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\nfunction css(props, value) {\n let i;\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n for (i = 0; i < this.length; i += 1) {\n // eslint-disable-next-line\n for (let prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n return this;\n }\n }\n if (arguments.length === 2 && typeof props === 'string') {\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n return this;\n }\n return this;\n}\n\n// Dom manipulation\nfunction toArray() {\n const arr = [];\n for (let i = 0; i < this.length; i += 1) {\n arr.push(this[i]);\n }\n return arr;\n}\n// Iterate over the collection passing elements to `callback`\nfunction each(callback) {\n // Don't bother continuing without a callback\n if (!callback) return this;\n // Iterate over the current collection\n for (let i = 0; i < this.length; i += 1) {\n // If the callback returns false\n if (callback.call(this[i], i, this[i]) === false) {\n // End the loop early\n return this;\n }\n }\n // Return `this` to allow chained DOM operations\n return this;\n}\nfunction forEach(callback) {\n // Don't bother continuing without a callback\n if (!callback) return this;\n // Iterate over the current collection\n for (let i = 0; i < this.length; i += 1) {\n // If the callback returns false\n if (callback.call(this[i], this[i], i) === false) {\n // End the loop early\n return this;\n }\n }\n // Return `this` to allow chained DOM operations\n return this;\n}\nfunction filter(callback) {\n const matchedItems = [];\n const dom = this;\n for (let i = 0; i < dom.length; i += 1) {\n if (callback.call(dom[i], i, dom[i])) matchedItems.push(dom[i]);\n }\n return new Dom7(matchedItems);\n}\nfunction map(callback) {\n const modifiedItems = [];\n const dom = this;\n for (let i = 0; i < dom.length; i += 1) {\n modifiedItems.push(callback.call(dom[i], i, dom[i]));\n }\n return new Dom7(modifiedItems);\n}\n// eslint-disable-next-line\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : undefined;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n return this;\n}\n// eslint-disable-next-line\nfunction text(text) {\n if (typeof text === 'undefined') {\n if (this[0]) {\n return this[0].textContent.trim();\n }\n return null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n return this;\n}\nfunction is(selector) {\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n else if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n\n compareWith = $(selector);\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n return false;\n } else if (selector === document) return el === document;\n else if (selector === window) return el === window;\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n return false;\n }\n return false;\n}\nfunction indexOf(el) {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i] === el) return i;\n }\n return -1;\n}\nfunction index() {\n let child = this[0];\n let i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\n// eslint-disable-next-line\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n let returnIndex;\n if (index > length - 1) {\n return new Dom7([]);\n }\n if (index < 0) {\n returnIndex = length + index;\n if (returnIndex < 0) return new Dom7([]);\n return new Dom7([this[returnIndex]]);\n }\n return new Dom7([this[index]]);\n}\nfunction append(...args) {\n let newChild;\n\n for (let k = 0; k < args.length; k += 1) {\n newChild = args[k];\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n// eslint-disable-next-line\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\nfunction prepend(newChild) {\n let i;\n let j;\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n return this;\n}\n// eslint-disable-next-line\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\nfunction insertBefore(selector) {\n const before = $(selector);\n for (let i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (let j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\nfunction insertAfter(selector) {\n const after = $(selector);\n for (let i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (let j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return new Dom7([this[0].nextElementSibling]);\n }\n return new Dom7([]);\n }\n\n if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]);\n return new Dom7([]);\n }\n return new Dom7([]);\n}\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return new Dom7([]);\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n el = next;\n }\n return new Dom7(nextEls);\n}\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return new Dom7([el.previousElementSibling]);\n }\n return new Dom7([]);\n }\n\n if (el.previousElementSibling) return new Dom7([el.previousElementSibling]);\n return new Dom7([]);\n }\n return new Dom7([]);\n}\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return new Dom7([]);\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n el = prev;\n }\n return new Dom7(prevEls);\n}\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n return $(unique(parents));\n}\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n parent = parent.parentNode;\n }\n }\n return $(unique(parents));\n}\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n if (typeof selector === 'undefined') {\n return new Dom7([]);\n }\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n return closest;\n}\nfunction find(selector) {\n const foundElements = [];\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n return new Dom7(foundElements);\n}\nfunction children(selector) {\n const children = []; // eslint-disable-line\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].childNodes;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector) {\n if (childNodes[j].nodeType === 1) children.push(childNodes[j]);\n } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n return new Dom7(unique(children));\n}\nfunction remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n return this;\n}\nfunction detach() {\n return this.remove();\n}\nfunction add(...args) {\n const dom = this;\n let i;\n let j;\n for (i = 0; i < args.length; i += 1) {\n const toAdd = $(args[i]);\n for (j = 0; j < toAdd.length; j += 1) {\n dom[dom.length] = toAdd[j];\n dom.length += 1;\n }\n }\n return dom;\n}\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n if (el.nodeType === 1) {\n for (let j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n el.textContent = '';\n }\n }\n return this;\n}\n\nfunction scrollTo(...args) {\n let [left, top, duration, easing, callback] = args;\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n if (typeof easing === 'undefined') easing = 'swing';\n\n return this.each(function animate() {\n const el = this;\n let currentTop;\n let currentLeft;\n let maxTop;\n let maxLeft;\n let newTop;\n let newLeft;\n let scrollTop; // eslint-disable-line\n let scrollLeft; // eslint-disable-line\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n if (animateTop) {\n currentTop = el.scrollTop;\n if (!duration) {\n el.scrollTop = top;\n }\n }\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n if (!duration) return;\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = easing === 'linear' ? progress : (0.5 - (Math.cos(progress * Math.PI) / 2));\n let done;\n if (animateTop) scrollTop = currentTop + (easeProgress * (newTop - currentTop));\n if (animateLeft) scrollLeft = currentLeft + (easeProgress * (newLeft - currentLeft));\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n requestAnimationFrame(render);\n }\n requestAnimationFrame(render);\n });\n}\n// scrollTop(top, duration, easing, callback) {\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n const dom = this;\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n const dom = this;\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\nfunction animate(initialProps, initialParams) {\n const els = this;\n const a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing', // or 'linear'\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n }, initialParams),\n\n elements: els,\n animating: false,\n que: [],\n\n easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - (Math.cos(progress * Math.PI) / 2);\n }\n if (typeof easing === 'function') {\n return easing(progress);\n }\n return progress;\n },\n stop() {\n if (a.frameId) {\n cancelAnimationFrame(a.frameId);\n }\n a.animating = false;\n a.elements.each((index, el) => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n done(complete) {\n a.animating = false;\n a.elements.each((index, el) => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n const elements = [];\n\n // Define & Cache Initials & Units\n a.elements.each((index, el) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n\n elements[index] = {\n container: el,\n };\n Object.keys(props).forEach((prop) => {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue,\n initialValue,\n unit,\n finalValue,\n finalFullValue,\n currentValue: initialValue,\n };\n });\n });\n\n let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress;\n // let el;\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n if (startTime === null) {\n startTime = time;\n }\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), ((startTime + params.duration) - time < 0 ? 0 : (startTime + params.duration) - time), startTime);\n }\n\n elements.forEach((element) => {\n const el = element;\n if (done || el.done) return;\n Object.keys(props).forEach((prop) => {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n const { initialValue, finalValue, unit } = el[prop];\n el[prop].currentValue = initialValue + (easeProgress * (finalValue - initialValue));\n const currentValue = el[prop].currentValue;\n\n if (\n (finalValue > initialValue && currentValue >= finalValue) ||\n (finalValue < initialValue && currentValue <= finalValue)) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n if (done) {\n a.done(params.complete);\n return;\n }\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return;\n // Then call\n a.frameId = requestAnimationFrame(render);\n }\n a.frameId = requestAnimationFrame(render);\n return a;\n },\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n for (let i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n const els = this;\n for (let i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nconst noTrigger = ('resize scroll').split(' ');\nfunction eventShortcut(name, ...args) {\n if (typeof args[0] === 'undefined') {\n for (let i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();\n else {\n $(this[i]).trigger(name);\n }\n }\n }\n return this;\n }\n return this.on(name, ...args);\n}\n\nfunction click(...args) {\n return eventShortcut.bind(this)('click', ...args);\n}\nfunction blur(...args) {\n return eventShortcut.bind(this)('blur', ...args);\n}\nfunction focus(...args) {\n return eventShortcut.bind(this)('focus', ...args);\n}\nfunction focusin(...args) {\n return eventShortcut.bind(this)('focusin', ...args);\n}\nfunction focusout(...args) {\n return eventShortcut.bind(this)('focusout', ...args);\n}\nfunction keyup(...args) {\n return eventShortcut.bind(this)('keyup', ...args);\n}\nfunction keydown(...args) {\n return eventShortcut.bind(this)('keydown', ...args);\n}\nfunction keypress(...args) {\n return eventShortcut.bind(this)('keypress', ...args);\n}\nfunction submit(...args) {\n return eventShortcut.bind(this)('submit', ...args);\n}\nfunction change(...args) {\n return eventShortcut.bind(this)('change', ...args);\n}\nfunction mousedown(...args) {\n return eventShortcut.bind(this)('mousedown', ...args);\n}\nfunction mousemove(...args) {\n return eventShortcut.bind(this)('mousemove', ...args);\n}\nfunction mouseup(...args) {\n return eventShortcut.bind(this)('mouseup', ...args);\n}\nfunction mouseenter(...args) {\n return eventShortcut.bind(this)('mouseenter', ...args);\n}\nfunction mouseleave(...args) {\n return eventShortcut.bind(this)('mouseleave', ...args);\n}\nfunction mouseout(...args) {\n return eventShortcut.bind(this)('mouseout', ...args);\n}\nfunction mouseover(...args) {\n return eventShortcut.bind(this)('mouseover', ...args);\n}\nfunction touchstart(...args) {\n return eventShortcut.bind(this)('touchstart', ...args);\n}\nfunction touchend(...args) {\n return eventShortcut.bind(this)('touchend', ...args);\n}\nfunction touchmove(...args) {\n return eventShortcut.bind(this)('touchmove', ...args);\n}\nfunction resize(...args) {\n return eventShortcut.bind(this)('resize', ...args);\n}\nfunction scroll(...args) {\n return eventShortcut.bind(this)('scroll', ...args);\n}\n\nexport { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, prop, data, removeData, dataset, val, transform, transition, on, off, once, trigger, transitionEnd, animationEnd, width, outerWidth, height, outerHeight, offset, hide, show, styles, css, toArray, each, forEach, filter, map, html, text, is, indexOf, index, eq, append, appendTo, prepend, prependTo, insertBefore, insertAfter, next, nextAll, prev, prevAll, siblings, parent, parents, closest, find, children, remove, detach, add, empty, scrollTo, scrollTop, scrollLeft, animate, stop, click, blur, focus, focusin, focusout, keyup, keydown, keypress, submit, change, mousedown, mousemove, mouseup, mouseenter, mouseleave, mouseout, mouseover, touchstart, touchend, touchmove, resize, scroll };\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/dom7/dist/dom7.modular.js","/**\n * SSR Window 2.0.0\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2020, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: May 12, 2020\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target, src) {\n if (target === void 0) { target = {}; }\n if (src === void 0) { src = {}; }\n Object.keys(src).forEach(function (key) {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nvar doc = typeof document !== 'undefined' ? document : {};\nvar ssrDocument = {\n body: {},\n addEventListener: function () { },\n removeEventListener: function () { },\n activeElement: {\n blur: function () { },\n nodeName: '',\n },\n querySelector: function () {\n return null;\n },\n querySelectorAll: function () {\n return [];\n },\n getElementById: function () {\n return null;\n },\n createEvent: function () {\n return {\n initEvent: function () { },\n };\n },\n createElement: function () {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute: function () { },\n getElementsByTagName: function () {\n return [];\n },\n };\n },\n createElementNS: function () {\n return {};\n },\n importNode: function () {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nextend(doc, ssrDocument);\n\nvar win = typeof window !== 'undefined' ? window : {};\nvar ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState: function () { },\n pushState: function () { },\n go: function () { },\n back: function () { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener: function () { },\n removeEventListener: function () { },\n getComputedStyle: function () {\n return {\n getPropertyValue: function () {\n return '';\n },\n };\n },\n Image: function () { },\n Date: function () { },\n screen: {},\n setTimeout: function () { },\n clearTimeout: function () { },\n matchMedia: function () {\n return {};\n },\n};\nextend(win, ssrWindow);\n\nexport { doc as document, extend, win as window };\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/dom7/node_modules/ssr-window/dist/ssr-window.esm.js","/**\n * SSR Window 1.0.1\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2018, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: July 18, 2018\n */\nvar doc = (typeof document === 'undefined') ? {\n body: {},\n addEventListener: function addEventListener() {},\n removeEventListener: function removeEventListener() {},\n activeElement: {\n blur: function blur() {},\n nodeName: '',\n },\n querySelector: function querySelector() {\n return null;\n },\n querySelectorAll: function querySelectorAll() {\n return [];\n },\n getElementById: function getElementById() {\n return null;\n },\n createEvent: function createEvent() {\n return {\n initEvent: function initEvent() {},\n };\n },\n createElement: function createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute: function setAttribute() {},\n getElementsByTagName: function getElementsByTagName() {\n return [];\n },\n };\n },\n location: { hash: '' },\n} : document; // eslint-disable-line\n\nvar win = (typeof window === 'undefined') ? {\n document: doc,\n navigator: {\n userAgent: '',\n },\n location: {},\n history: {},\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener: function addEventListener() {},\n removeEventListener: function removeEventListener() {},\n getComputedStyle: function getComputedStyle() {\n return {\n getPropertyValue: function getPropertyValue() {\n return '';\n },\n };\n },\n Image: function Image() {},\n Date: function Date() {},\n screen: {},\n setTimeout: function setTimeout() {},\n clearTimeout: function clearTimeout() {},\n} : window; // eslint-disable-line\n\nexport { win as window, doc as document };\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ssr-window/dist/ssr-window.esm.js","export class initSwiper {\r\n constructor() {\r\n var Swiper = require('swiper').default;\r\n\r\n (window as any).initSwiper = function (swiperId: string, swiperParams: object) {\r\n\r\n const swiperItem = document.getElementById(swiperId)\r\n \r\n var mySwiper = new Swiper(swiperItem, swiperParams) \r\n }\r\n }\r\n}\r\n\r\nvar swiper = new initSwiper();\r\nexport default swiper;\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Static/javascript/modules/init-swiper.ts","export function enhanceEpiForms() {\r\n // grabs only nested text nodes\r\n function textNodesUnder(el) {\r\n var n, a = [], walk = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, null, false);\r\n while (n = walk.nextNode()) a.push(n);\r\n return a;\r\n }\r\n\r\n let containers = Array.prototype.slice.call(document.querySelectorAll('.EPiServerForms'));\r\n\r\n containers.forEach(container => {\r\n let newWrapper = document.createElement('div');\r\n newWrapper.className = 'epi-form';\r\n container.parentNode.insertBefore(newWrapper, container);\r\n newWrapper.appendChild(container);\r\n\r\n let formChoiceLabels = Array.prototype.slice.call(container.querySelectorAll('.FormChoice:not(.FormChoice--Image) > label'));\r\n let formID = container.id || (Math.ceil(Math.random() * 1000));\r\n\r\n formChoiceLabels.forEach((fieldLabel, index) => {\r\n let fieldInput = fieldLabel.querySelector('input');\r\n let fieldName = `input-${formID}-${index}`;\r\n fieldLabel.parentNode.insertBefore(fieldInput, fieldLabel);\r\n fieldLabel.setAttribute('for', fieldName);\r\n fieldInput.id = fieldName;\r\n });\r\n });\r\n\r\n let formChoiceImageLabels = Array.prototype.slice.call(document.querySelectorAll('.EPiServerForms .FormChoice--Image > label'));\r\n\r\n formChoiceImageLabels.forEach(fieldLabel => {\r\n fieldLabel.classList.add('enhanced-fields');\r\n });\r\n\r\n let captchaRefreshBtn = document.querySelector('.FormCaptcha__Refresh');\r\n\r\n if (captchaRefreshBtn) { \r\n // Originally set to type=\"submit\" which caused user\r\n // experience issues \r\n captchaRefreshBtn.setAttribute('type', 'button');\r\n }\r\n\r\n let formTextboxLabels = Array.prototype.slice.call(document.querySelectorAll('.EPiServerForms .FormTextbox > label'));\r\n\r\n formTextboxLabels.forEach(formLabel => {\r\n if (formLabel.innerHTML.toLowerCase().indexOf('phone') > -1) {\r\n\r\n let formInputField = formLabel.parentElement.querySelector('input[type=\"text\"]');\r\n\r\n if (formInputField != null) {\r\n formInputField.addEventListener('input', function (e) {\r\n let input = e.target.value.replace(/\\D/g, '').match(/(\\d{0,3})(\\d{0,3})(\\d{0,4})/);\r\n e.target.value = !input[2] ? input[1] : '(' + input[1] + ') ' + input[2] + (input[3] ? '-' + input[3] : '');\r\n });\r\n }\r\n }\r\n })\r\n}\n\n\n// WEBPACK FOOTER //\n// ./node_modules/source-map-loader!./Static/javascript/modules/epi-forms.ts"],"sourceRoot":""}