{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/lodash/debounce.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/now.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/toNumber.js","webpack:///./node_modules/lodash/_baseTrim.js","webpack:///./node_modules/lodash/_trimmedEndIndex.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./.tmp/app_col_eu_core/js/search.js","webpack:///./.tmp/app_col_eu_core/js/search/search.js","webpack:///./.tmp/app_col_eu_core/js/search/refinementBar.js","webpack:///./node_modules/hc-sticky/dist/hc-sticky.js","webpack:///./.tmp/app_col_eu_core/js/search/compare.js","webpack:///./.tmp/app_col_eu_core/js/components/processInclude.js","webpack:///../node_modules/ssr-window/ssr-window.esm.js","webpack:///../node_modules/dom7/dom7.esm.js","webpack:///../src/shared/dom.js","webpack:///../src/shared/get-support.js","webpack:///../src/shared/get-device.js","webpack:///../src/shared/get-browser.js","webpack:///../src/shared/utils.js","webpack:///../src/core/transition/transitionEmit.js","webpack:///../src/core/events/onTouchStart.js","webpack:///../src/core/events/onTouchMove.js","webpack:///../src/core/events/onTouchEnd.js","webpack:///../src/core/events/onResize.js","webpack:///../src/core/events/onClick.js","webpack:///../src/core/events/onScroll.js","webpack:///../src/core/events/index.js","webpack:///../src/core/breakpoints/setBreakpoint.js","webpack:///../src/core/defaults.js","webpack:///../src/core/moduleExtendParams.js","webpack:///../src/core/core.js","webpack:///../src/core/events-emitter.js","webpack:///../src/core/update/index.js","webpack:///../src/core/update/updateSize.js","webpack:///../src/core/update/updateSlides.js","webpack:///../src/core/update/updateAutoHeight.js","webpack:///../src/core/update/updateSlidesOffset.js","webpack:///../src/core/update/updateSlidesProgress.js","webpack:///../src/core/update/updateProgress.js","webpack:///../src/core/update/updateSlidesClasses.js","webpack:///../src/core/update/updateActiveIndex.js","webpack:///../src/core/update/updateClickedSlide.js","webpack:///../src/core/translate/index.js","webpack:///../src/core/translate/getTranslate.js","webpack:///../src/core/translate/setTranslate.js","webpack:///../src/core/translate/minTranslate.js","webpack:///../src/core/translate/maxTranslate.js","webpack:///../src/core/translate/translateTo.js","webpack:///../src/core/transition/index.js","webpack:///../src/core/transition/setTransition.js","webpack:///../src/core/transition/transitionStart.js","webpack:///../src/core/transition/transitionEnd.js","webpack:///../src/core/slide/index.js","webpack:///../src/core/slide/slideTo.js","webpack:///../src/core/slide/slideToLoop.js","webpack:///../src/core/slide/slideNext.js","webpack:///../src/core/slide/slidePrev.js","webpack:///../src/core/slide/slideReset.js","webpack:///../src/core/slide/slideToClosest.js","webpack:///../src/core/slide/slideToClickedSlide.js","webpack:///../src/core/loop/index.js","webpack:///../src/core/loop/loopCreate.js","webpack:///../src/core/loop/loopFix.js","webpack:///../src/core/loop/loopDestroy.js","webpack:///../src/core/grab-cursor/index.js","webpack:///../src/core/grab-cursor/setGrabCursor.js","webpack:///../src/core/grab-cursor/unsetGrabCursor.js","webpack:///../src/core/breakpoints/index.js","webpack:///../src/core/breakpoints/getBreakpoint.js","webpack:///../src/core/check-overflow/index.js","webpack:///../src/core/classes/index.js","webpack:///../src/core/classes/addClasses.js","webpack:///../src/core/classes/removeClasses.js","webpack:///../src/core/images/index.js","webpack:///../src/core/images/loadImage.js","webpack:///../src/core/images/preloadImages.js","webpack:///../src/shared/create-element-if-not-defined.js","webpack:///../src/shared/classes-to-selector.js","webpack:///../src/modules/manipulation/methods/appendSlide.js","webpack:///../src/modules/manipulation/methods/prependSlide.js","webpack:///../src/modules/manipulation/methods/addSlide.js","webpack:///../src/modules/manipulation/methods/removeSlide.js","webpack:///../src/modules/manipulation/methods/removeAllSlides.js","webpack:///../src/shared/effect-init.js","webpack:///../src/shared/effect-target.js","webpack:///../src/shared/effect-virtual-transition-end.js","webpack:///../src/shared/create-shadow.js","webpack:///../src/core/modules/resize/resize.js","webpack:///../src/core/modules/observer/observer.js","webpack:///../src/swiper.js","webpack:///../src/modules/virtual/virtual.js","webpack:///../src/modules/keyboard/keyboard.js","webpack:///../src/modules/mousewheel/mousewheel.js","webpack:///../src/modules/navigation/navigation.js","webpack:///../src/modules/pagination/pagination.js","webpack:///../src/modules/scrollbar/scrollbar.js","webpack:///../src/modules/parallax/parallax.js","webpack:///../src/modules/zoom/zoom.js","webpack:///../src/modules/lazy/lazy.js","webpack:///../src/modules/controller/controller.js","webpack:///../src/modules/a11y/a11y.js","webpack:///../src/modules/history/history.js","webpack:///../src/modules/hash-navigation/hash-navigation.js","webpack:///../src/modules/autoplay/autoplay.js","webpack:///../src/modules/thumbs/thumbs.js","webpack:///../src/modules/free-mode/free-mode.js","webpack:///../src/modules/grid/grid.js","webpack:///../src/modules/manipulation/manipulation.js","webpack:///../src/modules/effect-fade/effect-fade.js","webpack:///../src/modules/effect-cube/effect-cube.js","webpack:///../src/modules/effect-flip/effect-flip.js","webpack:///../src/modules/effect-coverflow/effect-coverflow.js","webpack:///../src/modules/effect-creative/effect-creative.js","webpack:///../src/modules/effect-cards/effect-cards.js","webpack:///./node_modules/underscore/modules/index-default.js","webpack:///./.tmp/app_col_eu_core/js/components/utils.js","webpack:///./.tmp/app_col_eu_core/js/helper/sessionSpecificLocalStorageHelper.js","webpack:///./.tmp/app_col_eu_core/js/components/keyboardAccessibility.js","webpack:///./.tmp/app_col_eu_core/js/components/breakpoints.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./.tmp/app_col_eu_core/js/thirdParty/swiperInit.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/underscore/modules/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","g","this","Function","e","window","isObject","require","now","toNumber","nativeMax","Math","max","nativeMin","min","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","undefined","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","baseGetTag","isObjectLike","getRawTag","objectToString","symToStringTag","root","Date","freeGlobal","global","baseTrim","isSymbol","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","other","valueOf","isBinary","test","slice","trimmedEndIndex","reTrimStart","string","replace","reWhitespace","index","length","charAt","objectProto","nativeObjectToString","toString","isOwn","tag","unmasked","processInclude","$","document","ready","$drawerRefinement","utils","debounce","breakpoints","keyboardAccessibility","refinementBar","queryValue","$refineBar","$siteHeader","$productGrid","$moveableContainerXS","$moveableContainerLG","$moveableContainerXL","isShowAll","hrefValue","isAll","indexOf","results","RegExp","exec","updateUrl","url","updateRobotsMeta","response","selector","$updates","append","find","content","data","attr","updateDom","$results","$elemToUpdate","empty","html","setPagingParamsInBrowserUrlAndHistory","showAll","params","getParamsFromURL","start","sz","query","keys","forEach","prop","push","isNaN","pagesize","join","history","replaceState","scrollToPosition","pos","el","offset","top","animate","scrollTop","scrollWhenLoaded","counter","iterations","img","imgobj","complete","naturalWidth","isTileImageLoaded","handleRefinements","removeClass","each","classList","remove","addClass","trigger","handleSizeFilterRefresh","hasClass","hideChips","$chips","numOfChips","showChips","toggleChips","$selector","scrollToGridTop","$productSearchResults","$header","currentScrollTop","resultsScrollTop","height","initSizeFilterShowMore","chipsToShowNum","containerWidth","width","chipWidth","outerWidth","13","filter","click","off","on","updateSortByLabel","selectedOption","$sortByDropdown","defaultLabel","$activeOptionItem","text","trim","reinitLazyLoad","lazyLoadInstance","LazyLoad","elements_selector","use_native","load_delay","update","initSortDropdown","$menuOptions","preventDefault","$clickedItem","optionId","spinner","ajax","selectedUrl","method","success","stop","updateProductGrid","collapse","error","updateSortOptions","option","id","location","href","srule","triggerShowMore","$node","hrefVal","closest","last","after","appendProductGrid","val","initializeShowMore","stopPropagation","updateRefinementBarHeight","$refinementBar","$filterRefinements","filtersHeaderHeight","outerHeight","refinementApplyHeight","css","getUrlVars","getUrlParams","initializeOnRefresh","isShowAllExist","all","scrollPos","spos","getLazyLoadedProducts","$loadingDots","injectBannerContent","$contentContainer","$destination","getCurrentBreakpoint","appendTo","initRefinements","initBannerContent","newBreakpoint","lastBreakpoint","addEventListener","passive","initShowUnavailable","unavailableParam","URL","split","paramName","paramValue","updatedParams","searchParams","set","updatedUrl","origin","pathname","triggerLazyLoad","openFilters","open","drawer","target","closedFilters","isLowRes","closeRefinements","close","removeBackdrop","enableScroll","quickFilters","$selectedCard","parent","resize","isHighRes","removeAttr","sort","applyFilter","input","targetUrl","appendParamToURL","$spinner","page","done","displayedCount","specialHandlers","resultsCount","$btnShowMore","$btnShowAll","parseResults","destroyStickyPLPComponents","children","stickyFilterHeader","initStickyPLPComponents","always","firstLoad","qs","$link","parents","setUrlKeyValue","decodeURIComponent","na","isNotAvailable","str","pushState","scrollToProduct","onLoadedDrawerRecommendations","updateStickyPLPComponents","hcSticky","stickTo","Error","define","U","Y","bottom","bottomEnd","innerTop","innerSticker","stickyClass","followScroll","responsive","mobileFirst","onStart","onStop","onBeforeResize","onResize","resizeDebounce","disable","queries","queryFlow","console","log","Q","X","f","querySelector","Helpers","parentNode","getStyle","style","position","u","isEmptyObject","assign","innerWidth","a","stick","isAttached","attach","left","offsetLeft","add","className","release","detach","positionLeft","createElement","init","marginLeft","insertBefore","removeChild","h","v","y","b","S","w","k","E","x","L","T","j","O","C","z","pageYOffset","documentElement","N","H","R","offsetHeight","ceil","A","B","I","event","unbind","q","offsetParent","getCascadedStyle","right","display","verticalAlign","boxSizing","marginRight","marginTop","marginBottom","paddingLeft","paddingRight","float","cssFloat","MozBoxSizing","offsetWidth","nodeType","HTMLDocument","Document","clientHeight","body","scrollHeight","innerHeight","offsetTop","parseFloat","F","M","D","P","W","V","refresh","destroy","triggerMethod","reinit","jQuery","fn","extend","writable","configurable","Array","srcElement","attachEvent","handleEvent","removeEventListener","detachEvent","getComputedStyle","defaultView","getPropertyValue","currentStyle","toUpperCase","getBoundingClientRect","pageXOffset","scrollLeft","contains","borderTopWidth","borderLeftWidth","cloneNode","querySelectorAll","removeAttribute","nextSibling","margin","$compareBar","$compareBarSlots","$compareBarForm","$compareBarTitle","$compareButton","compareHeaderText","compareSlotText","compareModalTitle","currentCategoryId","compareEnabled","lazyLoadedProductsExist","sessionSpecificLocalStorageHelper","swiperInit","getMaxSlots","maxSlots","productsForComparison","compareState","$modal","saveCompareState","products","modal","highlight","setItem","refreshHeader","redrawCompareSlots","map","product","idx","pid","colorId","imgSrc","compileSlot","numAvailableSlots","setCompareButton","setCompareCheckboxes","deselectProduct","productsFiltered","downloadLazyImages","restoreProductsForComparison","$productTile","$productSwatch","$compareCheckbox","isChecked","is","restoreCompareState","getItem","productsRestored","isModalActiveRestored","isModalHighlightRestored","handleCompareBarToggleClick","toggleClass","handleWindowResize","pop","handleCompareCheckboxEvents","$checkbox","$imagePrimarySelected","checked","pidIndex","findIndex","selectProduct","handleClearAllClick","deselectProductOnCompareBar","$button","handleCompareBarFormSubmit","eSubmit","type","dataType","serialize","htmlResponse","initColorSwatchSwiper","initTileImageSwiper","isModalHighlight","title","modalSizeClass","customClasses","one","_satellite","track","pageName","pageType","productsOnPage","eClick","$swatch","initialize","include","obj","constructor","src","ssrDocument","activeElement","blur","nodeName","getElementById","createEvent","initEvent","childNodes","setAttribute","getElementsByTagName","createElementNS","importNode","hash","host","hostname","protocol","search","getDocument","doc","ssrWindow","navigator","userAgent","go","back","CustomEvent","Image","screen","matchMedia","requestAnimationFrame","callback","cancelAnimationFrame","getWindow","win","Dom7","items","proto","__proto__","makeReactive","super","arrayFlat","arr","res","isArray","arrayFilter","context","toCreate","tempParent","innerHTML","uniqueArray","support","deviceCached","browser","Methods","classes","classNames","toggle","attrs","getAttribute","attrName","transform","transition","duration","transitionDuration","eventType","targetSelector","listener","capture","handleLiveEvent","eventData","dom7EventData","unshift","events","dom7LiveListeners","proxyListener","dom7Listeners","handlers","handler","dom7proxy","splice","evt","detail","bubbles","cancelable","dataIndex","dispatchEvent","transitionEnd","dom","fireCallBack","includeMargins","styles","box","clientTop","clientLeft","scrollY","scrollX","props","textContent","compareWith","matches","webkitMatchesSelector","msMatchesSelector","child","previousSibling","eq","returnIndex","newChild","els","tempDiv","firstChild","appendChild","prepend","next","nextElementSibling","nextAll","nextEls","prev","previousElementSibling","prevAll","prevEls","foundElements","found","nextTick","delay","getTranslate","matrix","curTransform","transformMatrix","axis","curStyle","WebKitCSSMatrix","webkitTransform","MozTransform","OTransform","MsTransform","msTransform","m41","m42","node","to","noExtend","nextSource","HTMLElement","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","__swiper__","setCSSProperty","varName","varValue","setProperty","animateCSSModeScroll","side","swiper","targetPosition","startPosition","translate","startTime","speed","wrapperEl","scrollSnapType","cssModeFrameID","dir","isOutOfBound","current","getTime","progress","easeProgress","cos","PI","currentPosition","scrollTo","overflow","getSupport","smoothScroll","touch","DocumentTouch","passiveListener","supportsPassive","opts","gestures","getDevice","overrides","platform","ua","device","ios","android","screenWidth","screenHeight","match","ipad","ipod","iphone","windows","macos","os","getBrowser","isSafari","toLowerCase","isWebView","transitionEmit","step","runCallbacks","direction","activeIndex","previousIndex","emit","onTouchStart","touchEventsData","touches","enabled","animating","preventInteractionOnTransition","cssMode","loop","loopFix","originalEvent","$targetEl","touchEventsTarget","isTouchEvent","which","button","isTouched","isMoved","noSwipingClass","shadowRoot","path","noSwipingSelector","isTargetShadow","noSwiping","base","__closestFrom","assignedSlot","getRootNode","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","updateSize","swipeDirection","threshold","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","onTouchMove","rtl","rtlTranslate","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","isVertical","maxTranslate","minTranslate","diffX","diffY","sqrt","touchAngle","isHorizontal","atan2","abs","touchMoveStopPropagation","nested","startTranslate","setTransition","$wrapperEl","allowMomentumBounce","grabCursor","allowSlideNext","allowSlidePrev","setGrabCursor","diff","touchRatio","currentTranslate","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","watchSlidesProgress","updateActiveIndex","updateSlidesClasses","updateProgress","setTranslate","onTouchEnd","slidesGrid","currentPos","touchEndTime","timeDiff","updateClickedSlide","lastClickTime","destroyed","stopIndex","groupSize","slidesSizesGrid","slidesPerGroupSkip","slidesPerGroup","increment","ratio","longSwipesMs","longSwipes","slideTo","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","setBreakpoint","snapGrid","updateSlides","slidesPerView","isEnd","isBeginning","centeredSlides","slides","autoplay","running","paused","run","watchOverflow","checkOverflow","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","previousTranslate","translatesDiff","methodName","dummyEventAttached","dummyEventListener","touchEvents","domMethod","swiperMethod","passiveListeners","move","end","updateOnWindowResize","isGridEnabled","grid","rows","defaults","initialSlide","resizeObserver","createElements","autoHeight","setWrapperSize","virtualTranslate","effect","breakpointsBase","spaceBetween","slidesPerGroupAuto","centeredSlidesBounds","slidesOffsetBefore","slidesOffsetAfter","normalizeSlideIndex","centerInsufficientSlides","roundLengths","simulateTouch","uniqueNavElements","slideToClickedSlide","preloadImages","updateOnImagesReady","loopAdditionalSlides","loopedSlides","loopFillGroupWithBlank","loopPreventsSlide","containerModifierClass","slideClass","slideBlankClass","slideActiveClass","slideDuplicateActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slideDuplicateNextClass","slidePrevClass","slideDuplicatePrevClass","wrapperClass","runCallbacksOnInit","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","eventsEmitter","priority","self","eventsListeners","once","onceHandler","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","$el","clientWidth","Number","size","getDirectionLabel","getDirectionPropertyValue","label","swiperSize","wrongRTL","isVirtual","virtual","previousSlidesLength","slidesLength","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","slidePosition","prevSlideSize","virtualSize","slideSize","gridEnabled","initSlides","shouldResetSlideSize","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","floor","swiperSlideSize","updateWrapperSize","newSlidesGrid","slidesGridItem","_","slideIndex","allSlidesSize","slideSizeValue","maxSnap","snap","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","updateSlidesOffset","updateAutoHeight","activeSlides","newHeight","getSlideByIndex","visibleSlides","swiperSlideOffset","updateSlidesProgress","offsetCenter","visibleSlidesIndexes","slideOffset","slideProgress","slideBefore","slideAfter","multiplier","wasBeginning","wasEnd","activeSlide","realIndex","nextSlide","prevSlide","emitSlidesClasses","newActiveIndex","previousRealIndex","previousSnapIndex","skip","initialized","slideFound","clickedSlide","clickedIndex","byController","translateTo","internal","translateBounds","newTranslate","isH","onTranslateToWrapperTransitionEnd","transitionStart","initial","indexAsNumber","isFinite","normalizedTranslate","normalizedGrid","normalizedGridNext","_immediateVirtual","_swiperImmediateVirtual","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","slideNext","perGroup","slidesPerViewDynamic","_clientLeft","slidePrev","normalize","prevSnapIndex","normalizedSnapGrid","prevSnap","prevIndex","slideReset","slideToClosest","currentSnap","slideToIndex","loopCreate","blankSlidesNum","blankNode","prependSlides","appendSlides","loopDestroy","moving","isLocked","cursor","unsetGrabCursor","attachEvents","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","fill","directionChanged","needsReLoop","changeDirection","isEnabled","enable","containerEl","currentHeight","points","point","minRatio","substr","wasLocked","lastSlideIndex","lastSlideRightEdge","addClasses","suffixes","entries","prefix","resultClasses","item","autoheight","centered","removeClasses","images","loadImage","imageEl","srcset","sizes","checkForComplete","image","onReady","onload","onerror","imagesLoaded","imagesToLoad","currentSrc","extendedDefaults","Swiper","swipers","newParams","__modules__","mod","extendParams","swiperParams","passedParams","eventName","velocity","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","velocities","installModule","extendDefaults","newDefaults","use","setProgress","cls","getSlideClasses","slideEl","updates","view","exact","spv","breakLoop","translateValue","newDirection","needUpdate","currentDirection","mount","mounted","getWrapperSelector","wrapper","deleteInstance","cleanStyles","createElementIfNotDefined","checkProps","element","classesToSelector","appendSlide","observer","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","effectInit","overwriteParams","perspective","overwriteParamsResult","_s","effectTarget","effectParams","$slideEl","transformEl","effectVirtualTransitionEnd","allSlides","eventTriggered","triggerEvents","createShadow","shadowClass","$shadowContainer","$shadowEl","prototypeGroup","protoMethod","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","contentBoxSize","contentRect","inlineSize","blockSize","observe","unobserve","observers","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","attributes","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","cssModeTimeout","renderSlide","cache","force","addSlidesBefore","addSlidesAfter","previousFrom","from","previousTo","previousSlidesGrid","previousOffset","offsetProp","slidesAfter","slidesBefore","onRendered","lazy","load","renderExternal","slidesToRender","renderExternalUpdate","prependIndexes","appendIndexes","numberOfNewSlides","newCache","cachedIndex","$cachedEl","cachedElIndex","handle","kc","keyCode","charCode","pageUpDown","keyboard","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","shiftKey","altKey","ctrlKey","metaKey","onlyInViewport","inView","swiperWidth","swiperHeight","windowWidth","windowHeight","swiperOffset","swiperCoord","returnValue","timeout","mousewheel","releaseOnEdges","invert","forceToAxis","sensitivity","eventsTarget","thresholdDelta","thresholdTime","lastEventBeforeSnap","lastScrollTime","recentWheelEvents","handleMouseEnter","mouseEntered","handleMouseLeave","animateSlider","newEvent","delta","raw","rtlFactor","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","positions","sign","ignoreWheelEvents","sticky","shift","prevEvent","firstEvent","snapToThreshold","autoplayDisableOnInteraction","getEl","toggleEl","disabled","disabledClass","tagName","lockClass","$nextEl","$prevEl","onPrevClick","onNextClick","hideOnClick","hiddenClass","targetEl","pagination","clickable","isHidden","bulletSize","pfx","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","$bulletEl","total","paginationType","firstIndex","lastIndex","midIndex","suffix","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","progressbarDirection","scale","scaleX","scaleY","render","paginationHTML","numberOfBullets","dragStartPos","dragSize","trackSize","divider","dragTimeout","scrollbar","$dragEl","newSize","newPos","hide","opacity","getPointerPosition","clientX","clientY","setDragPosition","positionRatio","onDragStart","onDragMove","onDragEnd","snapOnRelease","activeListener","eventMethod","$swiperEl","dragClass","dragEl","draggable","parallax","setTransform","currentOpacity","currentScale","_swiper","parallaxEl","$parallaxEl","parallaxDuration","zoom","maxRatio","containerClass","zoomedSlideClass","gesturesEnabled","fakeGestureTouched","fakeGestureMoved","isScaling","gesture","slideWidth","slideHeight","$imageEl","$imageWrapEl","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","x2","y2","onGestureStart","scaleStart","onGestureChange","scaleMove","onGestureEnd","scaledWidth","scaledHeight","onTransitionEnd","zoomIn","touchX","touchY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","touchAction","zoomOut","zoomToggle","getListeners","activeListenerWithCapture","getSlideSelector","toggleGestures","slideSelector","enableGestures","disableGestures","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","momentumDuration","in","out","checkInView","loadPrevNext","loadPrevNextAmount","loadOnTransitionStart","scrollingElement","elementClass","loadingClass","loadedClass","preloaderClass","scrollHandlerAttached","initialImageLoaded","loadInSlide","loadInDuplicate","$images","background","$pictureEl","sourceEl","$source","slideOriginalIndex","slideExist","amount","maxIndex","minIndex","checkInViewOnLoad","$scrollElement","isWindow","scrollElementWidth","scrollElementHeight","LinearSpline","i1","i3","binarySearch","guess","array","interpolate","removeSpline","controller","control","spline","inverse","by","_t","controlledTranslate","controlled","setControlledTranslate","setControlledTransition","a11y","notificationClass","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","slideLabelMessage","containerMessage","containerRoleDescriptionMessage","itemRoleDescriptionMessage","slideRole","liveRegion","notify","message","notification","makeElFocusable","makeElNotFocusable","addElRole","role","addElRoleDescription","description","addElLabel","disableEl","enableEl","onEnterOrSpaceKey","updateNavigation","hasPagination","initNavEl","wrapperId","controls","$containerEl","repeat","round","random","live","bulletEl","paths","slugify","getPathValues","urlOverride","pathArray","part","setHistory","includes","currentState","state","scrollToSlide","setHistoryPopState","hashNavigation","watchState","onHashChange","newHash","setHash","$activeSlideEl","autoplayResult","reverseDirection","stopOnLastSlide","pause","waitForTransition","onVisibilityChange","visibilityState","onMouseEnter","disableOnInteraction","onMouseLeave","pauseOnMouseEnter","thumbs","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","swiperCreated","onThumbClick","thumbsSwiper","currentIndex","thumbsParams","SwiperClass","thumbsSwiperParams","useOffset","newThumbsIndex","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","thumbsToActivate","thumbActiveClass","momentum","momentumRatio","momentumBounce","momentumBounceRatio","momentumVelocityRatio","minimumVelocity","lastMoveEvent","velocityEvent","distance","momentumDistance","newPosition","afterBouncePosition","needsLoopFix","doBounce","bounceAmount","moveDistance","currentSlideSize","slidesNumberEvenToRows","slidesPerRow","numFullColumns","newSlideOrderIndex","column","row","groupIndex","slideIndexInGroup","columnsInGroup","order","fadeEffect","crossFade","tx","ty","slideOpacity","cubeEffect","slideShadows","shadow","shadowOffset","shadowScale","$cubeShadowEl","wrapperRotate","slideAngle","tz","shadowBefore","shadowAfter","shadowAngle","sin","scale1","scale2","zFactor","flipEffect","limitRotation","rotateY","rotateX","zIndex","coverflowEffect","rotate","stretch","depth","modifier","center","offsetMultiplier","translateZ","slideTransform","$shadowBeforeEl","$shadowAfterEl","creativeEffect","limitProgress","shadowPerProgress","progressMultiplier","custom","getTranslateValue","translateString","rotateString","scaleString","opacityString","shadowOpacity","cardsEffect","tX","tY","tZ","tXAdd","isSwipeToNext","isSwipeToPrev","subProgress","prevY","mixin","allExports","keyValueArray","kvp","output","queryStringToObject","startIndex","endIndex","substring","pair","nameVal","JSON","parse","stringify","objectToQueryString","urlString","qsIndex","hashIndex","param","removeQueryParam","queryparam","delete","loadScript","script","loadJsAfterWindowLoad","readyState","heapify","list","ndx","heapSize","largest","cscUtils","encodeURIComponent","searchHash","postHash","arrHash","output2","updateURLParam","paramVal","newAdditionalURL","tempArray","baseURL","additionalURL","temp","arrayIntersection","a1","a2","inArray","createModalMarkup","showCloseBtn","enableLayeredDrawers","centeredClass","modalId","buttons","settings","dataAttributes","header","idAttribute","footer","footerBtns","btn","removeQueryParamFromCurrentUrl","createBackdrop","customClass","setUrlData","decodeQueryParam","elementInViewport","offsetToTop","compatMode","insertAtInputCursor","formInput","selectionStart","selectionEnd","stringToTitleCase","word","getTimeAndHours","stageMessage","date","hours","getHours","minutes","getMinutes","ampm","findNHighest","listToUse","arrayLength","firstListItem","heapifyMax","deepEqual","obj1","obj2","reduce","isEqual","getSessionID","sessionCookie","cookie","startsWith","sessionId","keyName","sessionID","itemWrapper","json","localStorage","removeItem","buildFunction","keyFunctions","preFunction","scope","returnedScope","delegatedSelector","throttle","isCurrentBreakpointAbbreviation","breakpointAbbreviation","$breakpointIndicator","isCurrentBreakpoint","abbreviation","currentBP","$bpIndicator","adjustSlides","sliderEl","swatchWidth","$container","$colorSwatches","first","isSwatchesFitContainer","swiperData","afterInit","swOptions","hasAttribute","handleEvents","freeSelf","webpackPolyfill","deprecate","ArrayProto","ObjProto","SymbolProto","nativeIsArray","nativeKeys","nativeCreate","_isNaN","_isFinite","Ctor","_wrapped","VERSION","optimizeCb","argCount","collection","accumulator","baseIteratee","identity","isFunction","matcher","iteratee","Infinity","cb","restArguments","rest","baseCreate","shallowProperty","_has","deepGet","MAX_ARRAY_INDEX","pow","getLength","isArrayLike","_keys","currentKey","createReduce","reducer","memo","reduceRight","predicate","findKey","reject","negate","every","some","fromIndex","guard","values","invoke","contextPath","pluck","where","findWhere","computed","lastComputed","shuffle","sample","clone","rand","sortBy","criteria","group","behavior","partition","groupBy","indexBy","countBy","reStrSymbol","toArray","isString","pass","compact","Boolean","_flatten","shallow","strict","isArguments","flatten","without","otherArrays","difference","uniq","isSorted","isBoolean","seen","union","arrays","intersection","argsLength","unzip","zip","createPredicateIndexFinder","findLastIndex","sortedIndex","low","high","mid","createIndexFinder","predicateFind","lastIndexOf","range","chunk","count","executeBound","sourceFunc","boundFunc","callingContext","bound","callArgs","concat","partial","boundArgs","placeholder","bindAll","memoize","hasher","address","defer","previous","later","throttled","_now","remaining","immediate","callNow","wrap","compose","times","before","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","collectNonEnumProps","nonEnumIdx","allKeys","mapObject","pairs","functions","names","createAssigner","keysFunc","source","extendOwn","keyInObj","pick","omit","String","tap","interceptor","isMatch","aStack","bStack","areArrays","aCtor","bCtor","deepEq","isEmpty","isElement","tagTester","isNumber","isDate","isRegExp","isError","isMap","isWeakMap","isSet","isWeakSet","nodelist","isNull","isUndefined","has","constant","noop","propertyOf","accum","Int8Array","escapeMap","unescapeMap","createEscaper","escaper","testRegexp","replaceRegexp","escape","unescape","fallback","idCounter","uniqueId","templateSettings","evaluate","noMatch","escapes","escapeRegExp","escapeChar","template","oldSettings","variable","argument","chain","instance","_chain","chainResult","toJSON"],"mappings":"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","file":"search.js","sourcesContent":[" \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, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\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\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 287);\n","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 || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (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","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","'use strict';\n\nvar processInclude = require('./components/processInclude');\n\n$(document).ready(function () {\n processInclude(require('./search/search'));\n processInclude(require('./search/compare'));\n});\n","/* global LazyLoad */\n'use strict';\n\nconst utils = require('../components/utils');\nconst debounce = require('lodash/debounce');\nconst breakpoints = require('../components/breakpoints');\nconst keyboardAccessibility = require('../components/keyboardAccessibility');\nconst refinementBar = require('./refinementBar');\n\n// Store the last loaded query string\nlet queryValue = '';\nconst $refineBar = $('.refinement-bar');\nconst $siteHeader = $('.siteheader');\nconst $productGrid = $('.product-grid');\n\nlet $drawerRefinement;\n\n// moveable grid banner\nconst $moveableContainerXS = $('.js-moveable-container-xs');\nconst $moveableContainerLG = $('.js-moveable-container-lg');\nconst $moveableContainerXL = $('.js-moveable-container-xl');\n\n/**\n * Check the all query parameter in href\n * @param {string} hrefValue - url href value\n * @return {boolean} isAll\n */\nfunction isShowAll(hrefValue) {\n var isAll = false;\n if (hrefValue && hrefValue.indexOf('?') > -1) {\n var results = new RegExp('[\\\\?&]all=([^&#]*)').exec(hrefValue);\n if (results && results.length > 1 && results[1] === 'true') {\n isAll = true;\n }\n }\n return isAll;\n}\n\n/**\n * Check the na query parameter in href\n * @return {boolean} na\n */\nfunction isNotAvailable() {\n var na = false;\n if (window.location.href.indexOf('?') > -1) {\n var results = new RegExp('[\\\\?&]na=([^&#]*)').exec(window.location.href);\n if (results && results.length > 1 && results[1] === 'true') {\n na = true;\n }\n }\n return na;\n}\n\n/**\n * update the url query parameter\n * @param {string} url - URL if the page being loaded\n * @return {string} - update url\n */\nfunction updateUrl(url) {\n if (isShowAll()) {\n return url + (url.indexOf('?') > -1 ? '&' : '?') + 'all=true';\n }\n return url;\n}\n/**\n * Update DOM elements with Ajax results\n * @param {Object} response - jQuery DOM element\n * @param {string} selector - DOM element to look up in the $tempDom\n */\nfunction updateRobotsMeta(response, selector) {\n var $tempDom = $('
').append($(response));\n var $updates = $tempDom.find(selector);\n if ($updates && $updates.length > 0) {\n var content = $updates.data('index-content');\n if (content) {\n $('meta[name=robots]').attr('content', content);\n }\n }\n}\n\n/**\n * Update DOM elements with Ajax results\n * @param {Object} $results - jQuery DOM element\n * @param {string} selector - DOM element to look up in the $results\n * @return {undefined}\n */\nfunction updateDom($results, selector) {\n var $updates = $results.find(selector);\n if ($updates.length) {\n var $elemToUpdate = $(selector);\n if ($elemToUpdate.length) {\n $elemToUpdate.empty().html($updates.html());\n }\n }\n}\n\n/**\n * Sets paging related params like page size and show all.\n * @param {string} url - URL of the page being loaded\n * @param {boolean} showAll - true if showAll button is triggered, else false\n */\nfunction setPagingParamsInBrowserUrlAndHistory(url, showAll) {\n const params = utils.getParamsFromURL(url);\n let start = null;\n let sz = null;\n let query = [];\n\n if (!showAll) {\n Object.keys(params).forEach(function (prop) {\n if (prop === 'sz') {\n sz = parseInt(params[prop], 10);\n } else if (prop === 'start') {\n start = parseInt(params[prop], 10);\n } else {\n query.push(prop + '=' + params[prop]);\n }\n });\n\n if (start !== null && sz !== null && isNaN(start) === false && isNaN(sz) === false) {\n var pagesize = start + sz;\n query.push('pagesize=' + pagesize);\n }\n } else if (showAll) {\n Object.keys(params).forEach(function (prop) {\n if (prop !== 'sz' && prop !== 'start' && prop !== 'all') {\n query.push(prop + '=' + params[prop]);\n }\n });\n\n query.push('all=true');\n }\n\n queryValue = query.join('&');\n\n if (queryValue) {\n window.history.replaceState(null, null, '?' + queryValue);\n }\n}\n\n/**\n * Update URL Query with last loaded page params\n * @param {string} pos - Clicked product position\n */\nfunction setPositionParamInBrowserUrlAndHistory(pos) {\n let qs = utils.setUrlKeyValue(window.location.href, 'pos', pos); // this adds or replaces the 'pos' key in the query string\n qs = decodeURIComponent(qs);\n window.history.replaceState(undefined, undefined, qs);\n}\n\n/**\n * Scroll window to position of the last clicked product.\n *\n * @param {number} pos - Product tile position\n */\nfunction scrollToPosition(pos) {\n if (pos > 0) {\n var $container = $('.search-results');\n var el = $container.find('.js-grid-tile').get(pos);\n var offset = $(el).offset();\n if (offset != null) {\n var top = offset.top - 110; // Height of top nav...\n\n $('html, body').animate({\n scrollTop: top\n }, 500);\n }\n }\n}\n\n/**\n * Test if the tile image is loaded.\n *\n * @param {number} pos - Product tile position\n * @return {boolean} - tile image is loaded\n */\nfunction isTileImageLoaded(pos) {\n var $container = $('.search-results');\n var el = $container.find('.js-grid-tile').get(pos);\n var img = $(el).find('.tile__image');\n\n if (img !== undefined) {\n var imgobj = img[0];\n\n if (!imgobj.complete) {\n return false;\n }\n if (typeof imgobj.naturalWidth !== 'undefined' && imgobj.naturalWidth === 0) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Trigger scrolling after tile image is loaded.\n *\n * @param {number} pos - Product tile position\n * @param {number} counter - Number of times this can loop\n */\nfunction scrollWhenLoaded(pos, counter) {\n var iterations = counter - 1;\n if (iterations <= 0) {\n scrollToPosition(pos);\n } else if (isTileImageLoaded(pos) === true) {\n scrollToPosition(pos);\n } else {\n setTimeout(function () {\n scrollWhenLoaded(pos, iterations);\n }, 500);\n }\n}\n\n/**\n * Keep refinement panes expanded/collapsed after Ajax refresh\n *\n * @param {Object} $results - jQuery DOM element\n * @param {string} selector - Container to update\n * @return {undefined}\n */\nfunction handleRefinements($results, selector) {\n // Reset default \"active\" elements returned in $results (ajax response)\n $results.find('.refinement.active').removeClass('active');\n\n // \"Copy\" the actual active refinements from the DOM...\n $('.refinement.active').each(function () {\n this.classList.remove('active');\n $results\n .find(`.${[...this.classList].join('.')}`)\n .addClass('active');\n });\n\n updateDom($results, selector);\n $('.js-refinements').trigger('search:refinementsupdate');\n}\n\n/**\n * Keep size filter values expanded/collapsed after Ajax refresh\n *\n * @param {Object} $results - jQuery DOM element\n * @param {string} selector - Container to update\n * @return {undefined}\n */\nfunction handleSizeFilterRefresh($results, selector) {\n var $target = $('.refinement-size.filter-showMore');\n if ($target.hasClass('filter-showMore--expanded')) {\n $results.find(selector).addClass('filter-showMore filter-showMore--expanded');\n }\n updateDom($results, selector);\n $('.js-refinements').trigger('search:refinementsupdate');\n}\n\n/**\n * Hides filter values beyond a given threshold\n *\n * @param {Object} $chips - jQuery DOM element\n * @param {number} numOfChips - Threshold for values to show/hide\n * @return {undefined}\n */\nfunction hideChips($chips, numOfChips) {\n $chips.each(function (index) {\n if (index >= numOfChips) {\n $(this).addClass('d-none');\n }\n });\n}\n\n/**\n * Shows all filter values\n *\n * @param {Object} $chips - jQuery DOM element\n * @return {undefined}\n */\nfunction showChips($chips) {\n $chips.removeClass('d-none');\n}\n\n/**\n * Toggles show all and hide functionality for filter values\n *\n * @param {Object} $selector - jQuery DOM element\n * @param {Object} $chips - jQuery DOM element\n * @param {number} numOfChips - Threshold for values to show/hide\n * @return {undefined}\n */\nfunction toggleChips($selector, $chips, numOfChips) {\n if ($selector.hasClass('filter-showMore--expanded')) {\n $selector.removeClass('filter-showMore--expanded');\n hideChips($chips, numOfChips);\n } else {\n $selector.addClass('filter-showMore--expanded');\n showChips($chips);\n }\n $('.js-refinements .refinement .title').trigger('filter:click');\n}\n\n/**\n * Scroll to Top of Product Grid\n */\nconst scrollToGridTop = function () {\n const $productSearchResults = $('#product-search-results');\n const $header = $('header');\n\n const currentScrollTop = $(document).scrollTop();\n\n // Since the header is sticky, it doesn't count towards scroll so subtract it from the scroll top\n const resultsScrollTop = $productSearchResults.offset().top - $header.height();\n\n // Only move the scroll position if the user has scrolled down the search results\n if (currentScrollTop > resultsScrollTop) {\n $(document).scrollTop(resultsScrollTop);\n }\n};\n\n/**\n * Initialize the show more/less values on size refinement\n *\n * @return {undefined}\n */\nfunction initSizeFilterShowMore() {\n var $selector = $('.refinement-bar .refinement-size');\n var $chips = $selector.find('li');\n\n var chipsToShowNum = 0;\n var containerWidth = $selector.width();\n var chipWidth = $chips.outerWidth(true);\n\n if (containerWidth && chipWidth) {\n chipsToShowNum = parseInt(containerWidth / chipWidth, 10) * 4;\n }\n\n if (chipsToShowNum && $chips.length > chipsToShowNum) {\n // fire click event on enter\n keyboardAccessibility('.js-filter-showMore', {\n 13: function (filter) { // enter\n $(filter).click();\n }\n },\n function () {\n return this; // this is the scope of the jQuery event handler in keyboardAccessibility\n }, 'body');\n\n $('.js-filter-showMore')\n .off('click')\n .on('click', toggleChips.bind(null, $selector, $chips, chipsToShowNum))\n .removeClass('d-none');\n if ($selector.hasClass('filter-showMore filter-showMore--expanded')) {\n showChips($chips);\n } else {\n $selector.addClass('filter-showMore');\n hideChips($chips, chipsToShowNum);\n }\n }\n}\n\n/**\n * Parse Ajax results and updated select DOM elements\n *\n * @param {string} response - Ajax response HTML code\n * @return {undefined}\n */\nfunction parseResults(response) {\n const $results = $(response);\n updateRobotsMeta(response, '.search-results');\n let specialHandlers = {\n '.refinement-bar .refinement-size': handleSizeFilterRefresh,\n '.refinement-bar .refinements--color-size-price': handleRefinements\n };\n let resultsCount = 0;\n let displayedCount = 0;\n let $btnShowMore = {};\n let $btnShowAll = {};\n\n // Update DOM elements that do not require special handling\n [\n '.grid-header',\n '.filter-status__bar',\n '.header.page-title',\n '.product-grid',\n '.show-more',\n '.filter-status--applied',\n '.js-refinement-category',\n '.js-result-count',\n '.refinement-apply',\n '.filter-status__clear'\n ].forEach(function (selector) {\n updateDom($results, selector);\n });\n\n Object.keys(specialHandlers).forEach(function (selector) {\n specialHandlers[selector]($results, selector);\n });\n\n // Hide/show \"More\" button depending on how many products were returned.\n // TODO: refactor.\n resultsCount = $('.js-result-count').data('count') || resultsCount;\n displayedCount = $('.js-grid-tile').length;\n $btnShowMore = $('.show-more .show-more-button');\n $btnShowAll = $('.show-more .show-all-button');\n\n if (resultsCount > displayedCount) {\n $btnShowMore.removeClass('d-none');\n $btnShowAll.removeClass('d-none');\n } else {\n $btnShowMore.addClass('d-none');\n $btnShowAll.addClass('d-none');\n }\n\n $('.js-refinements').trigger('search:pageupdate');\n\n updateSortOptions(response); // eslint-disable-line no-use-before-define\n initSizeFilterShowMore();\n}\n\n/**\n * Update selected sort option label\n * @param {string} selectedOption - Ajax response HTML code\n */\nfunction updateSortByLabel(selectedOption) {\n if (selectedOption) {\n var $sortByDropdown = $('.js-sort-by-dropdown');\n var defaultLabel = $sortByDropdown.data('sort-label');\n var $activeOptionItem = $('.' + selectedOption);\n $sortByDropdown.find('.sort-order__text').text(defaultLabel + ': ' + $activeOptionItem.text().trim());\n }\n}\n\n/**\n * Reinitialize LazyLoad\n */\nfunction reinitLazyLoad() {\n var lazyLoadInstance = new LazyLoad({\n elements_selector: '.lazy',\n use_native: true,\n load_delay: 200\n });\n // Update the instance\n if (lazyLoadInstance) {\n lazyLoadInstance.update();\n }\n}\n\n/**\n * Replace product grid HTML with updated code on Sort\n *\n * @param {string} response - Updated HTML code\n * @return {undefined}\n */\nfunction updateProductGrid(response) {\n updateRobotsMeta(response, '.product-grid-footer');\n\n $('.product-grid').html(response); // Reference to $productGrid is lost on grid update\n\n $('.js-refinements').trigger('search:pageupdate');\n $(document).trigger('search:productGridUpdated');\n\n $.spinner().stop();\n\n reinitLazyLoad();\n}\n\n/**\n * Click event handler for sort dropdown.\n */\nfunction initSortDropdown() {\n const $menuOptions = $('#sort-menu .form-control__options__item');\n\n // Sync sort menu label with selected item\n if ($menuOptions.hasClass('selected')) {\n updateSortByLabel($('#sort-menu .selected').data('id'));\n }\n\n // Handle sort order menu selection\n $menuOptions.off('click').on('click', function (e) {\n e.preventDefault();\n var $clickedItem = $(this);\n\n var url = $clickedItem.data('sorturl');\n var optionId = $clickedItem.data('id');\n setPagingParamsInBrowserUrlAndHistory(url);\n\n $.spinner().start();\n $menuOptions.removeClass('selected');\n $clickedItem.addClass('selected');\n\n $clickedItem.trigger('search:sort', url);\n updateSortByLabel(optionId);\n $.ajax({\n url: updateUrl(url),\n data: { selectedUrl: url },\n method: 'GET',\n success: function (response) {\n updateProductGrid(response);\n $('#sort-menu').collapse('hide');\n scrollToGridTop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n}\n\n\n/**\n * Update sort option URLs from Ajax response\n *\n * @param {string} response - Ajax response HTML code\n * @return {undefined}\n */\nfunction updateSortOptions(response) {\n var $tempDom = $('
').append($(response));\n var sortOptions = $tempDom.find('.product-grid-footer').data('sort-options').options;\n sortOptions.forEach(function (option) {\n $('#sort-menu .dropdown-item.' + option.id).data('sorturl', option.url);\n });\n initSortDropdown();\n const params = utils.getParamsFromURL(window.location.href);\n if (params.srule) {\n updateSortByLabel(params.srule);\n }\n}\n\n/**\n * Append results to product grid on Show More or Show All\n *\n * @param {string} response - Updated HTML code\n * @return {undefined}\n */\nfunction appendProductGrid(response) {\n updateRobotsMeta(response, '.product-grid-footer');\n updateSortOptions(response);\n\n // Remove More and Show All buttons.\n $('.product-grid .product-grid-footer').remove();\n\n // Append after existing tiles. Check the last tile is not in the banner GSD-4530\n $('.product-grid .js-grid-tile, .product-grid .js-inline-tile').filter(function () {\n return !$(this).closest('.grid-banner').length;\n }).last().after(response);\n\n $('.js-refinements').trigger('search:pageupdate');\n\n reinitLazyLoad();\n}\n\n/**\n * Method to trigger show more products\n * @param {Object} $node current action node\n * @param {Object} e event object\n */\nfunction triggerShowMore($node) {\n var url = $node.data('url');\n var hrefVal = $node.attr('href') || $node.data('href');\n var showAll = isShowAll(hrefVal);\n\n setPagingParamsInBrowserUrlAndHistory(hrefVal, showAll);\n\n $node.trigger('search:showMore');\n // hide Show More and Show All button if user clicks Show All action button\n if ($node.hasClass('show-all-button')) {\n $node.removeClass('d-inline-block');\n $node.addClass('d-none');\n $('.show-more-button').addClass('d-none');\n }\n\n $('.loading-dots').removeClass('d-none');\n\n $.ajax({\n url: url,\n data: { selectedUrl: url },\n method: 'GET',\n success: function (response) {\n appendProductGrid(response);\n },\n complete: function () {\n $('.loading-dots').addClass('d-none');\n $('.showAllStatus').val('complete');\n $(document).trigger('search:productGridUpdated');\n }\n });\n}\n/**\n * Initialize Show More and Show All event listeners\n */\nfunction initializeShowMore() {\n // Show more products\n $('.search-results .show-more-button, .search-results .show-all-button').off('click').on('click', function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n triggerShowMore($(this));\n });\n}\n\n/**\n * Fixed applied filters on mobile\n */\nfunction stickyFilterHeader() {\n if (breakpoints.isHighRes()) {\n return;\n }\n\n var filtersHeaderHeight = $('.filter-status').outerHeight();\n $('.filter-refinements').css('top', filtersHeaderHeight);\n\n var countfilters = $('.filter-status--applied ul').children().length;\n if (countfilters > 0) {\n $('.filter-status__bar').addClass('active');\n } else {\n $('.filter-status__bar').removeClass('active');\n }\n}\n\n/**\n * Update Refinement bar height for overflow scrolling on mobile\n */\nfunction updateRefinementBarHeight() {\n // update the refinementbar height on mobile\n const $refinementBar = $('.refinement-bar');\n const $filterRefinements = $refinementBar.find('.drawer__content');\n const filtersHeaderHeight = $('.filter-status').outerHeight() || 0;\n const refinementApplyHeight = $('.refinement-apply').outerHeight() + filtersHeaderHeight;\n\n $filterRefinements.css('height', $refinementBar.outerHeight() - refinementApplyHeight);\n}\n\n/**\n * @returns {Object} query Parameter from url\n */\nfunction getUrlVars() {\n var getUrlParams = {};\n window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) {\n getUrlParams[key] = value;\n });\n return getUrlParams;\n}\n\n/**\n * Initialize events on PLP refresh.\n */\nfunction initializeOnRefresh() {\n $(function () {\n var isShowAllExist = getUrlVars().all;\n var scrollPos = getUrlVars().spos;\n if (isShowAllExist && scrollPos) {\n $('body, html').animate({\n scrollTop: scrollPos\n }, 800);\n }\n });\n initializeShowMore();\n reinitLazyLoad();\n}\n\n/**\n * If deferredProductsAsyncUrl is on the page and has a value, we need\n * to make a request immediately to get the rest of the products from the original\n * search call\n */\nfunction getLazyLoadedProducts() {\n let url = $('.js-deferred-products-async-url').val();\n let $loadingDots = $('.loading-dots');\n if (url) {\n $loadingDots.removeClass('d-none');\n $.ajax({\n url: url,\n data: { selectedUrl: url },\n method: 'GET',\n success: function (response) {\n updateRobotsMeta(response, '.product-grid-footer');\n updateSortOptions(response);\n\n // Remove More and Show All buttons.\n $('.product-grid .product-grid-footer').remove();\n\n // Append after existing tiles. Check the last tile is not in the banner GSD-4530\n $('.product-grid .js-grid-tile, .product-grid .js-inline-tile').filter(function () {\n return !$(this).closest('.grid-banner').length;\n }).last().after(response);\n reinitLazyLoad();\n $('.search-results .show-more-button').removeClass('d-none');\n $('.search-results .show-all-button').removeClass('d-none');\n initializeShowMore();\n // event for getting the additional lazy loaded products page results\n $productGrid.trigger('search:getLazyLoadedProducts');\n $(document).trigger('search:productGridUpdated');\n },\n complete: function () {\n $loadingDots.addClass('d-none');\n }\n });\n }\n}\n\n/**\n * Scroll to a specific product based upon position\n */\nfunction scrollToProduct() {\n let url = $('.js-updategridurl').data('updategridurl');\n\n if (!url) {\n return;\n }\n\n const params = utils.getParamsFromURL(window.location.href);\n\n if (!params || !params.pos) {\n return;\n }\n\n var pos = parseInt(params.pos, 10);\n\n // scrollTo position on multi page results after lazy load\n $productGrid.on('search:getLazyLoadedProducts', function () {\n scrollWhenLoaded(pos, 10);\n $siteHeader.trigger('height-changed');\n });\n}\n\n/**\n * Injects full-width banner into grid\n */\nfunction injectBannerContent() {\n const $contentContainer = $('.js-moveable-slot');\n\n if ($contentContainer.length) {\n const currentBreakpoint = breakpoints.getCurrentBreakpoint();\n let $destination;\n\n switch (currentBreakpoint) {\n case 'lg':\n $destination = $moveableContainerLG;\n break;\n case 'xl':\n $destination = $moveableContainerXL;\n break;\n default:\n $destination = $moveableContainerXS;\n }\n\n // move and unhide content slot\n $contentContainer.appendTo($destination).removeClass('d-none');\n }\n}\n\nmodule.exports = {\n initRefinements: function () {\n $('.js-refinements').on('search:pageupdate', initializeOnRefresh);\n initSizeFilterShowMore();\n },\n\n initBannerContent: function () {\n if (!$('.js-moveable-slot').length) return;\n\n injectBannerContent();\n\n let lastBreakpoint = breakpoints.getCurrentBreakpoint();\n let newBreakpoint;\n\n window.addEventListener('resize', debounce(function () {\n newBreakpoint = breakpoints.getCurrentBreakpoint();\n\n if (lastBreakpoint !== newBreakpoint) {\n lastBreakpoint = newBreakpoint;\n injectBannerContent();\n }\n }, 25), { passive: true });\n },\n\n initShowUnavailable: function () {\n $('.js-show-unavailable').on('click', function () {\n const unavailableParam = $(this).data('unavailableparam');\n\n if (unavailableParam) {\n const url = new URL(window.location.href);\n const [paramName, paramValue] = unavailableParam.split('=');\n const updatedParams = url.searchParams;\n updatedParams.set(paramName, paramValue);\n const updatedUrl = new URL(`${url.origin}${url.pathname}?${updatedParams}`);\n\n window.location = updatedUrl;\n }\n });\n },\n\n triggerLazyLoad: getLazyLoadedProducts,\n\n openFilters: function () {\n // Display refinements bar when Menu icon clicked\n $('.search-results').on('click', '.js-filter-results', function () {\n // Quick filters enabled (drawer component version)\n if ($refineBar.length) {\n if ($drawerRefinement) {\n $drawerRefinement.open();\n } else {\n $drawerRefinement = $.drawer({\n target: '.refinement-bar'\n });\n }\n updateRefinementBarHeight();\n }\n });\n },\n\n closedFilters: function () {\n // On mobile all filters should be collapsed\n if (breakpoints.isLowRes()) {\n $('.card.collapsible-xl.refinement').removeClass('active');\n }\n },\n\n closeRefinements: function () {\n // Refinements close button\n $('body').on('click', '.refinement-bar button.close, .backdrop, .btn-apply-filters', function () {\n if ($drawerRefinement) {\n $drawerRefinement.close();\n } else {\n $('.refinement-bar').removeClass('open js-popover-shown');\n utils.removeBackdrop();\n $.enableScroll();\n }\n });\n },\n\n quickFilters: function () {\n // close other quick filters when quick filter drawer is opened\n $(document).on('click', '.js-quick-filters .card-header', function (e) {\n const $selectedCard = $(e.target).parent('.card');\n $selectedCard.addClass('selected');\n $('.js-quick-filters .card.active:not(.selected)').removeClass('active');\n $selectedCard.removeClass('selected');\n });\n\n // close quick filter drawer when filter is selected\n $(document).on('click', '.js-quick-filters [data-refinementurl]', function (e) {\n const $selectedCard = $(e.target).closest('.card');\n $selectedCard.removeClass('active');\n });\n\n // close quick filter drawer if clicked elsewhere\n $(document).on('click', '*', function (e) {\n const isClickedCard = $(e.target).closest('.card').length;\n\n if (!isClickedCard) {\n $('.js-quick-filters .card.active').removeClass('active');\n }\n });\n },\n\n resize: function () {\n // Close refinement bar and close the backdrop if user resizes browser\n $(window).on('widthResize.reloadEvents', function () {\n if (breakpoints.isHighRes()) {\n $refineBar.removeClass('open');\n utils.removeBackdrop();\n } else {\n $.enableScroll();\n $refineBar.removeAttr('style');\n }\n });\n },\n\n sort: function () {\n initSortDropdown();\n },\n\n applyFilter: function () {\n // fire click event on enter\n keyboardAccessibility('.js-refinements .form-check input', {\n 13: function (input) { // enter\n $(input).trigger('click');\n }\n },\n function () {\n return this; // this is the scope of the jQuery event handler in keyboardAccessibility\n }, 'body');\n\n // Handle refinement value selection and reset click\n $('.search-results, .refinement-bar').on('click', '[data-refinementurl]', function (e) {\n e.preventDefault();\n\n let targetUrl = $(this).data('refinementurl');\n window.history.replaceState(null, null, targetUrl);\n setPagingParamsInBrowserUrlAndHistory(targetUrl);\n targetUrl = utils.appendParamToURL(targetUrl, 'format', 'ajax');\n\n let $spinner = breakpoints.isLowRes() ? $('.refinement-bar').spinner() : $.spinner();\n $spinner.start();\n\n $.ajax({\n url: updateUrl(targetUrl),\n data: {\n page: $('.product-grid-footer').data('page-number'),\n selectedUrl: targetUrl\n },\n method: 'GET'\n }).done((response) => {\n parseResults(response);\n scrollToGridTop();\n getLazyLoadedProducts();\n updateRefinementBarHeight();\n\n if (!$drawerRefinement) {\n refinementBar.destroyStickyPLPComponents();\n stickyFilterHeader();\n refinementBar.initStickyPLPComponents();\n }\n }).always(() => {\n $spinner.stop();\n });\n\n $(this).trigger('search:filter', e);\n });\n },\n\n firstLoad: function () {\n initializeOnRefresh();\n refinementBar.initStickyPLPComponents();\n\n $('body').on('click', '.js-grid-tile .tile__image-container a, .js-grid-tile .js-tile-link, .js-grid-tile .js-tile-ratings, .js-grid-tile button.js-quickview', function () {\n const $link = $(this);\n\n // Skipping position update for product tile inside compare modal\n if (!$link.closest('.js-compare-modal').length) {\n const index = $link.parents('.js-grid-tile').index('.js-grid-tile');\n setPositionParamInBrowserUrlAndHistory(index);\n }\n });\n\n $(function () {\n if (isNotAvailable()) {\n var url = window.location.href.split('?')[0];\n const params = utils.getParamsFromURL(window.location.href);\n let query = [];\n Object.keys(params).forEach(function (prop) {\n if (prop !== 'na') {\n query.push(prop + '=' + params[prop]);\n }\n });\n let str = query.join('&');\n window.history.pushState({}, 'Back to Parent Category', url + '?' + str);\n }\n\n scrollToProduct();\n });\n },\n onLoadedDrawerRecommendations: function () {\n $('body').on('contentAsyncLoaded.drawer', '.drawer--tile-recommendations', function () {\n reinitLazyLoad();\n });\n }\n};\n","'use strict';\n\nrequire('hc-sticky');\n\nconst $siteHeader = $('.siteheader');\n\n/**\n * Destroy sticky components\n */\nfunction destroyStickyPLPComponents() {\n $('.js-filter-bar').hcSticky('destroy');\n}\n\n/**\n * Update sticky components on PLP for persistent filters\n */\nfunction updateStickyPLPComponents() {\n const animationBuffer = 16; // 16px = 1rem, buffer prevents content from showing between header and filter bar during animation\n if ($(window).scrollTop() > 0) {\n $('.js-filter-bar').hcSticky('update', {\n top: $siteHeader.outerHeight() - animationBuffer\n });\n }\n}\n\n/**\n * Initialize sticky components on PLP for persistent filters\n */\nfunction initStickyPLPComponents() {\n $('.js-filter-bar').hcSticky({\n stickTo: '.js-plp-sticky-row'\n });\n\n document.addEventListener('scroll', updateStickyPLPComponents, { passive: true });\n $(window).on('widthResize', updateStickyPLPComponents);\n}\n\nmodule.exports = {\n initStickyPLPComponents: initStickyPLPComponents,\n destroyStickyPLPComponents: destroyStickyPLPComponents\n};\n","/*!\n * HC-Sticky\n * =========\n * Version: 2.2.3\n * Author: Some Web Media\n * Author URL: http://somewebmedia.com\n * Plugin URL: https://github.com/somewebmedia/hc-sticky\n * Description: Cross-browser plugin that makes any element on your page visible while you scroll\n * License: MIT\n */\n!function(t,e){\"use strict\";if(\"object\"==typeof module&&\"object\"==typeof module.exports){if(!t.document)throw new Error(\"HC-Sticky requires a browser to run.\");module.exports=e(t)}else\"function\"==typeof define&&define.amd?define(\"hcSticky\",[],e(t)):e(t)}(\"undefined\"!=typeof window?window:this,function(U){\"use strict\";var Y={top:0,bottom:0,bottomEnd:0,innerTop:0,innerSticker:null,stickyClass:\"sticky\",stickTo:null,followScroll:!0,responsive:null,mobileFirst:!1,onStart:null,onStop:null,onBeforeResize:null,onResize:null,resizeDebounce:100,disable:!1,queries:null,queryFlow:\"down\"},$=function(t,e,o){console.log(\"%c! HC Sticky:%c \"+t+\"%c \"+o+\" is now deprecated and will be removed. Use%c \"+e+\"%c instead.\",\"color: red\",\"color: darkviolet\",\"color: black\",\"color: darkviolet\",\"color: black\")},Q=U.document,X=function(n,f){var o=this;if(\"string\"==typeof n&&(n=Q.querySelector(n)),!n)return!1;f.queries&&$(\"queries\",\"responsive\",\"option\"),f.queryFlow&&$(\"queryFlow\",\"mobileFirst\",\"option\");var p={},d=X.Helpers,s=n.parentNode;\"static\"===d.getStyle(s,\"position\")&&(s.style.position=\"relative\");var u=function(){var t=0>>0;if(\"function\"!=typeof t)throw new TypeError(t+\" is not a function\");for(1\n \n
\n \n
\n \n \n
\n `;\n}\n\n/**\n * Draw and render the Compare Bar product slots.\n */\nfunction redrawCompareSlots() {\n let html = productsForComparison.map(function (product, idx) {\n return compileSlot(product.pid, product.colorId, product.imgSrc, idx);\n }).join('');\n\n // Render empty slots\n if (productsForComparison.length < maxSlots) {\n const numAvailableSlots = maxSlots - productsForComparison.length;\n\n for (let i = 0; i < numAvailableSlots; i++) {\n html += `\n
\n \n
\n `;\n }\n }\n\n $compareBarSlots.empty().append(html);\n}\n\n/**\n * Enables/disables the Compare button.\n * Depends on amount of selected products.\n * Enabled - more than 1 product.\n * Disabled - less than 2 products.\n */\nfunction setCompareButton() {\n if (productsForComparison.length < 2) {\n $compareButton.attr('disabled', true);\n } else {\n $compareButton.removeAttr('disabled');\n }\n}\n\n/**\n * Enables/disables \"Compare\" checkboxes for product tiles.\n */\nfunction setCompareCheckboxes() {\n if (productsForComparison.length < maxSlots) {\n // Enabling all available checkboxes on the page\n $('.js-compare-checkbox input').removeAttr('disabled');\n } else {\n // Disabling all checkboxes which are not selected\n $('.js-compare-checkbox input:not(:checked)').attr('disabled', true);\n }\n}\n\n/**\n * Handles the selection of a product for comparison\n *\n * @param {string} pid - ID for product to compare\n * @param {string} colorId - Color ID for selected product\n * @param {string} imgSrc - Image URL for selected product\n */\nfunction selectProduct(pid, colorId, imgSrc) {\n const pidIndex = productsForComparison.findIndex(function (product) {\n return product.pid === pid;\n });\n\n if (pidIndex !== -1) {\n productsForComparison[pidIndex].colorId = colorId;\n productsForComparison[pidIndex].imgSrc = imgSrc;\n } else if (productsForComparison.length < maxSlots) {\n productsForComparison.push({\n pid: pid,\n colorId: colorId,\n imgSrc: imgSrc\n });\n\n $('.js-compare-checkbox input#' + pid).prop('checked', true);\n\n refreshHeader();\n setCompareCheckboxes();\n setCompareButton();\n }\n\n redrawCompareSlots();\n saveCompareState();\n\n $compareBar.addClass('compare-bar--visible');\n}\n\n/**\n * Handles the deselection of a product\n *\n * @param {string} pid - ID for product to compare\n */\nfunction deselectProduct(pid) {\n const productsFiltered = productsForComparison.filter(function (product) {\n return product.pid !== pid;\n });\n\n if (productsFiltered.length < productsForComparison.length) {\n productsForComparison = productsFiltered;\n\n if (productsForComparison.length === 0) {\n $compareBar.removeClass('compare-bar--expanded compare-bar--visible');\n }\n\n $('.js-compare-checkbox input#' + pid).prop('checked', false);\n\n setCompareCheckboxes();\n redrawCompareSlots();\n setCompareButton();\n refreshHeader();\n saveCompareState();\n }\n}\n\n/**\n * Clears the Compare Bar and hides it\n * @return {undefined}\n */\nfunction clearCompareBar() {\n productsForComparison.forEach(function (product) {\n $(this).trigger('compare:deselected', { pid: product.pid });\n });\n productsForComparison = [];\n saveCompareState();\n\n // Reset all checkboxes\n $('.js-compare-checkbox input').prop('checked', false);\n setCompareCheckboxes();\n\n $compareBar.removeClass('compare-bar--expanded compare-bar--visible');\n}\n\n/**\n * Initializes product images inside compare modal.\n */\nfunction downloadLazyImages() {\n const lazyLoadInstance = new LazyLoad({\n elements_selector: '.lazy',\n use_native: true,\n load_delay: 200\n });\n\n if (lazyLoadInstance) {\n lazyLoadInstance.update();\n }\n}\n\n/**\n * Restores products that have already been selected for comparison.\n */\nfunction restoreProductsForComparison() {\n productsForComparison.forEach(function (product) {\n const $productTile = $(`.product[data-pid=\"${product.pid}\"]`);\n const $productSwatch = $productTile.find(`.js-color-swatch[data-variant-id=\"${product.pid}${product.colorId}\"]`);\n const $compareCheckbox = $productTile.find('.js-compare-checkbox input');\n const isChecked = $compareCheckbox.is(':checked');\n\n if ($productTile.length && $productSwatch.length && $compareCheckbox.length && !isChecked) {\n $compareCheckbox.trigger('click');\n $productSwatch.trigger('click');\n }\n });\n}\n\n/**\n * Restores the state of compare feature for the current category.\n */\nfunction restoreCompareState() {\n compareState = sessionSpecificLocalStorageHelper.getItem('compare') || {};\n\n if (!compareState[currentCategoryId]) {\n compareState[currentCategoryId] = {};\n saveCompareState();\n return;\n }\n\n const productsRestored = compareState[currentCategoryId].products;\n const isModalActiveRestored = compareState[currentCategoryId].modal;\n const isModalHighlightRestored = compareState[currentCategoryId].highlight;\n\n if (productsRestored.length) {\n productsForComparison = productsRestored;\n\n $('.js-compare-checkbox input').removeAttr('disabled');\n\n restoreProductsForComparison();\n setCompareCheckboxes();\n redrawCompareSlots();\n setCompareButton();\n refreshHeader();\n\n $compareBar.addClass('compare-bar--visible');\n }\n\n $compareBarForm.find('input[name=\"highlightDifferences\"]').attr('value', isModalHighlightRestored);\n\n if (isModalActiveRestored && productsForComparison.length > 1) {\n $compareBarForm.trigger('submit');\n }\n}\n\nmodule.exports = {\n /**\n * Handles the click event on the title and empty slot inside compare bar.\n * Shows or hides compare bar body with product slots.\n * Toggling \"compare-bar--expanded\" class on the compare bar.\n */\n handleCompareBarToggleClick: function () {\n $compareBar.on('click', '.js-btn-toggle, .js-slot-empty', function (e) {\n e.preventDefault();\n $compareBar.toggleClass('compare-bar--expanded');\n });\n },\n\n /**\n * Handles window resize event.\n * Refreshes the state of compare panel and related elements.\n */\n handleWindowResize: function () {\n if (compareEnabled) {\n $(window).on('resize', debounce(function () {\n maxSlots = getMaxSlots();\n\n while (productsForComparison.length > maxSlots) {\n let product = productsForComparison.pop();\n $('.js-compare-checkbox input#' + product.pid).prop('checked', false);\n }\n\n setCompareCheckboxes();\n redrawCompareSlots();\n setCompareButton();\n refreshHeader();\n saveCompareState();\n }, 300));\n }\n },\n\n /**\n * Handles the Compare checkbox click and changing the swatch.\n */\n handleCompareCheckboxEvents: function () {\n $('div.page').on('click swatch-changed', '.js-compare-checkbox input', function () {\n const $checkbox = $(this);\n const $productTile = $checkbox.closest('.product-tile');\n const $imagePrimarySelected = $productTile.find('.tile__image-container a.selected .tile__image--primary');\n const checked = $checkbox.is(':checked');\n const pid = $checkbox.attr('id').toString();\n const colorId = $productTile.find('.js-color-swatch.selected').data('variant-id').toString().replace(pid, '');\n const imgSrc = $imagePrimarySelected.data('src') || $imagePrimarySelected.prop('src');\n\n if (checked) {\n selectProduct(pid, colorId, imgSrc);\n $checkbox.trigger('compare:selected', { pid: pid });\n } else {\n deselectProduct(pid);\n $checkbox.trigger('compare:deselected', { pid: pid });\n }\n });\n },\n\n /**\n * Handles the Clear All link click.\n */\n handleClearAllClick: function () {\n $compareBar.on('click', '.js-btn-clear-all', function (e) {\n e.preventDefault();\n clearCompareBar();\n });\n },\n\n /**\n * Handles deselection of a product on the compare bar.\n */\n deselectProductOnCompareBar: function () {\n $compareBar.on('click', '.close', function (e) {\n e.preventDefault();\n const $button = $(this);\n const pid = $button.closest('.compare-bar__slot').data('pid').toString();\n deselectProduct(pid);\n $button.trigger('compare:deselected', { pid: pid });\n });\n },\n\n /**\n * Handles the submitting event of the compare bar form.\n */\n handleCompareBarFormSubmit: function () {\n $compareBarForm.on('submit', function (eSubmit) {\n eSubmit.preventDefault();\n\n $.spinner().start();\n\n $.ajax({\n url: $compareBarForm.attr('action'),\n type: 'GET',\n dataType: 'html',\n data: $compareBarForm.serialize()\n }).done(function (htmlResponse) {\n if ($modal) {\n if (productsForComparison.length === 1) {\n $modal.removeClass('compare-modal--highlight');\n }\n $modal.find('.modal-body').html(htmlResponse);\n\n downloadLazyImages();\n\n swiperInit.initColorSwatchSwiper($modal);\n swiperInit.initTileImageSwiper($modal);\n $.spinner().stop();\n } else {\n const isModalHighlight = $compareBarForm.find('input[name=\"highlightDifferences\"]').attr('value') === 'true';\n\n $modal = $.modal({\n content: htmlResponse,\n title: compareModalTitle,\n modalSizeClass: 'modal-xl',\n customClasses: `compare-modal js-compare-modal ${isModalHighlight ? 'compare-modal--highlight' : ''}`\n })\n .one('shown.bs.modal', function () {\n // native modal functionality adds additional space\n // it can not be overlapped by CSS\n // should be removed by JS\n $modal.css('padding-right', '');\n\n downloadLazyImages();\n saveCompareState();\n $compareBar.removeClass('compare-bar--expanded compare-bar--visible');\n $.spinner().stop();\n\n if (typeof _satellite !== 'undefined') {\n _satellite.track('productCompare', {\n pageName: 'product compare',\n pageType: 'product compare',\n productsOnPage: productsForComparison.map(function (product) {\n return product.pid;\n })\n });\n }\n swiperInit.initColorSwatchSwiper($modal);\n swiperInit.initTileImageSwiper($modal);\n })\n .on('hidden.bs.modal', function () {\n $modal.remove();\n $modal = null;\n saveCompareState();\n\n if (productsForComparison.length) {\n $compareBar.addClass('compare-bar--visible');\n }\n })\n .on('click', '.js-slot-empty', function (eClick) {\n eClick.preventDefault();\n $modal.modal('hide');\n })\n .on('click', '.js-btn-product-badge', function (eClick) {\n eClick.preventDefault();\n const $button = $(this);\n const pid = $button.closest('.product').data('pid').toString();\n\n deselectProduct(pid);\n $button.trigger('compare:deselected', { pid: pid });\n\n if (productsForComparison.length === 0) {\n $modal.modal('hide');\n } else {\n $compareBarForm.trigger('submit');\n }\n })\n .on('click', '.js-color-swatch', function (eClick) {\n eClick.preventDefault();\n const $swatch = $(this);\n const $productTile = $swatch.closest('.product');\n const pid = $productTile.data('pid').toString();\n\n // Updating \"Shop Now\" button in the compare modal\n $(`.js-btn-compare-shop[data-pid=\"${pid}\"]`).attr('href', $swatch.attr('href'));\n\n // Finding the same product tile on the page\n const $productTilePage = $(`.page .product[data-pid=\"${pid}\"]`);\n const $productSwatchPage = $productTilePage.find(`.js-color-swatch[data-variant-id=\"${$swatch.data('variant-id')}\"]`);\n $productSwatchPage.trigger('click');\n })\n .on('click', '.js-toggle-switch-input', function () {\n $modal.toggleClass('compare-modal--highlight');\n $compareBarForm.find('input[name=\"highlightDifferences\"]').attr('value', $modal.hasClass('compare-modal--highlight'));\n saveCompareState();\n });\n }\n });\n });\n },\n\n /**\n * Initializes the compare feature for the current category.\n * Works only once during the initial page load.\n */\n initialize: function () {\n if (compareEnabled) {\n // Required after each: lazy loading of products, applying filters, changing sorting\n $(document).on('search:productGridUpdated search:pageupdate', function () {\n $('.js-compare-checkbox input').removeAttr('disabled');\n restoreProductsForComparison();\n setCompareCheckboxes();\n });\n\n // Required for the initial page load only\n if (lazyLoadedProductsExist) {\n $(document).one('search:productGridUpdated', restoreCompareState);\n } else {\n restoreCompareState();\n }\n }\n }\n};\n","'use strict';\n\nmodule.exports = function (include) {\n if (typeof include === 'function') {\n include();\n } else if (typeof include === 'object') {\n Object.keys(include).forEach(function (key) {\n if (typeof include[key] === 'function') {\n include[key]();\n }\n });\n }\n};\n","/**\n * SSR Window 4.0.0\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: August 25, 2021\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 Object.keys(src).forEach((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\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n 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};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst 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() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 4.0.0\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: August 25, 2021\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n}\n\nclass Dom7 extends Array {\n constructor(items) {\n super(...(items || []));\n makeReactive(this);\n }\n\n}\n\nfunction arrayFlat(arr = []) {\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase());\n}\n\n// eslint-disable-next-line\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf(' c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n}\n\nfunction removeClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n}\n\nfunction toggleClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n}\n\nfunction hasClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n}\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 } // Set attrs\n\n\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 for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\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 for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n let el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\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\n return this;\n}\n\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\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 const attr = el.attributes[i];\n\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n\n for (const 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\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n const el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n const values = [];\n\n for (let i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\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\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n}\n\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\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\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\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\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\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\n return this;\n}\n\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\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\n return this;\n}\n\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger(...args) {\n const window = getWindow();\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n const window = getWindow();\n\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}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n const window = getWindow();\n\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}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\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}\n\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n const window = getWindow();\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append(...els) {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < els.length; k += 1) {\n newChild = els[k];\n\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\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\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\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\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\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n const before = $(selector);\n\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}\n\nfunction insertAfter(selector) {\n const after = $(selector);\n\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}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n\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\n return $(parents);\n}\n\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\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\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add(...els) {\n const dom = this;\n let i;\n let j;\n\n for (i = 0; i < els.length; i += 1) {\n const toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\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\n el.textContent = '';\n }\n }\n\n return this;\n}\n\n// eslint-disable-next-line\n\nfunction scrollTo(...args) {\n const window = getWindow();\n let [left, top, duration, easing, callback] = args;\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\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\n let scrollLeft; // eslint-disable-line\n\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\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\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\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\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\n// eslint-disable-next-line\n\nfunction animate(initialProps, initialParams) {\n const window = getWindow();\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\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\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\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n\n stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n\n done(complete) {\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n const elements = []; // Define & Cache Initials & Units\n\n a.elements.each((el, index) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\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 let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\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 {\n initialValue,\n finalValue,\n unit\n } = el[prop];\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n const 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\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n\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\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\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(' ');\n\nfunction shortcut(name) {\n function eventHandler(...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]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on(name, ...args);\n }\n\n return eventHandler;\n}\n\nconst click = shortcut('click');\nconst blur = shortcut('blur');\nconst focus = shortcut('focus');\nconst focusin = shortcut('focusin');\nconst focusout = shortcut('focusout');\nconst keyup = shortcut('keyup');\nconst keydown = shortcut('keydown');\nconst keypress = shortcut('keypress');\nconst submit = shortcut('submit');\nconst change = shortcut('change');\nconst mousedown = shortcut('mousedown');\nconst mousemove = shortcut('mousemove');\nconst mouseup = shortcut('mouseup');\nconst mouseenter = shortcut('mouseenter');\nconst mouseleave = shortcut('mouseleave');\nconst mouseout = shortcut('mouseout');\nconst mouseover = shortcut('mouseover');\nconst touchstart = shortcut('touchstart');\nconst touchend = shortcut('touchend');\nconst touchmove = shortcut('touchmove');\nconst resize = shortcut('resize');\nconst scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width };\n","import {\n $,\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\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 filter,\n remove,\n} from 'dom7';\n\nconst Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\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 filter,\n remove,\n};\n\nObject.keys(Methods).forEach((methodName) => {\n Object.defineProperty($.fn, methodName, { value: Methods[methodName], writable: true });\n});\n\nexport default $;\n","import { getWindow, getDocument } from 'ssr-window';\n\nlet support;\n\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n\n touch: !!(\n 'ontouchstart' in window ||\n (window.DocumentTouch && document instanceof window.DocumentTouch)\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\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\n\nexport { getSupport };\n","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\n\nlet deviceCached;\n\nfunction calcDevice({ userAgent } = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n\n const device = {\n ios: false,\n android: false,\n };\n\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let 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 const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = [\n '1024x1366',\n '1366x1024',\n '834x1194',\n '1194x834',\n '834x1112',\n '1112x834',\n '768x1024',\n '1024x768',\n '820x1180',\n '1180x820',\n '810x1080',\n '1080x810',\n ];\n if (\n !ipad &&\n macos &&\n support.touch &&\n iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0\n ) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\n\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\n\nexport { getDevice };\n","import { getWindow } from 'ssr-window';\n\nlet browser;\n\nfunction calcBrowser() {\n const window = getWindow();\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 isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),\n };\n}\n\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\n\nexport { getBrowser };\n","import { getWindow } from 'ssr-window';\n\nfunction 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}\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n\n return style;\n}\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n\n const curStyle = getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform\n .split(', ')\n .map((a) => 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 window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix =\n curStyle.MozTransform ||\n curStyle.OTransform ||\n curStyle.MsTransform ||\n curStyle.msTransform ||\n curStyle.transform ||\n 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}\nfunction isObject(o) {\n return (\n typeof o === 'object' &&\n o !== null &&\n o.constructor &&\n Object.prototype.toString.call(o).slice(8, -1) === 'Object'\n );\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter((key) => noExtend.indexOf(key) < 0);\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 (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\n\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\n\nfunction animateCSSModeScroll({ swiper, targetPosition, side }) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n\n const isOutOfBound = (current, target) => {\n return (dir === 'next' && current >= target) || (dir === 'prev' && current <= target);\n };\n\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition,\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition,\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\n\nexport {\n animateCSSModeScroll,\n deleteProps,\n nextTick,\n now,\n getTranslate,\n isObject,\n extend,\n getComputedStyle,\n setCSSProperty,\n};\n","export default function transitionEmit({ swiper, runCallbacks, direction, step }) {\n const { activeIndex, previousIndex } = swiper;\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(`transition${step}`);\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}\n","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js';\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\n\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n\n const data = swiper.touchEventsData;\n const { params, touches, enabled } = swiper;\n if (!enabled) return;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) {\n $targetEl = $(event.path[0]);\n }\n\n const noSwipingSelector = params.noSwipingSelector\n ? params.noSwipingSelector\n : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (\n params.noSwiping &&\n (isTargetShadow\n ? closestElement(noSwipingSelector, e.target)\n : $targetEl.closest(noSwipingSelector)[0])\n ) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.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 cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n if (\n edgeSwipeDetection &&\n (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)\n ) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n\n Object.assign(data, {\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.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n if ($targetEl.is(data.focusableElements)) preventDefault = false;\n if (\n document.activeElement &&\n $(document.activeElement).is(data.focusableElements) &&\n document.activeElement !== $targetEl[0]\n ) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault =\n preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if (\n (params.touchStartForcePreventDefault || shouldPreventDefault) &&\n !$targetEl[0].isContentEditable\n ) {\n e.preventDefault();\n }\n }\n swiper.emit('touchStart', e);\n}\n","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js';\n\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const { params, touches, rtlTranslate: rtl, enabled } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch =\n e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.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.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (data.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.isTouched = false;\n data.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.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.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 if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold)\n return;\n\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (\n (swiper.isHorizontal() && touches.currentY === touches.startY) ||\n (swiper.isVertical() && touches.currentX === touches.startX)\n ) {\n data.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.isScrolling = swiper.isHorizontal()\n ? touchAngle > params.touchAngle\n : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop && !params.cssMode) {\n swiper.loopFix();\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n data.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.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.currentTranslate = diff + data.startTranslate;\n\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance)\n data.currentTranslate =\n swiper.minTranslate() -\n 1 +\n (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance)\n data.currentTranslate =\n swiper.maxTranslate() +\n 1 -\n (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (\n !swiper.allowSlideNext &&\n swiper.swipeDirection === 'next' &&\n data.currentTranslate < data.startTranslate\n ) {\n data.currentTranslate = data.startTranslate;\n }\n if (\n !swiper.allowSlidePrev &&\n swiper.swipeDirection === 'prev' &&\n data.currentTranslate > data.startTranslate\n ) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal()\n ? touches.currentX - touches.startX\n : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (\n (params.freeMode && params.freeMode.enabled && swiper.freeMode) ||\n params.watchSlidesProgress\n ) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}\n","import { now, nextTick } from '../../shared/utils.js';\n\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n\n const { params, touches, rtlTranslate: rtl, slidesGrid, enabled } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n // Return Grab Cursor\n if (\n params.grabCursor &&\n data.isMoved &&\n data.isTouched &&\n (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)\n ) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n swiper.updateClickedSlide(e);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (\n !data.isTouched ||\n !data.isMoved ||\n !swiper.swipeDirection ||\n touches.diff === 0 ||\n data.currentTranslate === data.startTranslate\n ) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({ currentPos });\n return;\n }\n\n // Find current slide\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (\n let i = 0;\n i < slidesGrid.length;\n i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup\n ) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - 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 const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\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 + increment);\n else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);\n else swiper.slideTo(stopIndex);\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget =\n swiper.navigation &&\n (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}\n","export default function 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 swiper.updateSlidesClasses();\n if (\n (params.slidesPerView === 'auto' || params.slidesPerView > 1) &&\n swiper.isEnd &&\n !swiper.isBeginning &&\n !swiper.params.centeredSlides\n ) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\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","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\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","export default function onScroll() {\n const swiper = this;\n const { wrapperEl, rtlTranslate, enabled } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === -0) swiper.translate = 0;\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n}\n","import { getDocument } from 'ssr-window';\n\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\n\nlet dummyEventAttached = false;\nfunction dummyEventListener() {}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const { params, touchEvents, el, wrapperEl, device, support } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n\n // Touch Events\n if (!support.touch) {\n el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n } else {\n const passiveListener =\n touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners\n ? { passive: true, capture: false }\n : false;\n el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n el[domMethod](\n touchEvents.move,\n swiper.onTouchMove,\n support.passiveListener ? { passive: false, capture } : capture,\n );\n el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n if (touchEvents.cancel) {\n el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n }\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](\n device.ios || device.android\n ? 'resize orientationchange observerUpdate'\n : 'resize observerUpdate',\n onResize,\n true,\n );\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n};\n\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const { params, support } = swiper;\n\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n if (support.touch && !dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n\n events(swiper, 'on');\n}\n\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\n\nexport default {\n attachEvents,\n detachEvents,\n};\n","import { extend } from '../../shared/utils.js';\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\n\nexport default function setBreakpoint() {\n const swiper = this;\n const { activeIndex, initialized, loopedSlides = 0, params, $el } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) return;\n\n // Get breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n\n const wasEnabled = params.enabled;\n\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(\n `${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`,\n );\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}grid`);\n if (\n (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column') ||\n (!breakpointParams.grid.fill && params.grid.fill === 'column')\n ) {\n $el.addClass(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n\n const directionChanged =\n breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop =\n params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n\n const isEnabled = swiper.params.enabled;\n\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n });\n\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n\n swiper.currentBreakpoint = breakpoint;\n\n swiper.emit('_beforeBreakpoint', breakpointParams);\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n}\n","export default {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n\n // Overrides\n width: null,\n height: null,\n\n //\n preventInteractionOnTransition: false,\n\n // ssr\n userAgent: null,\n url: null,\n\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\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 breakpointsBase: 'window',\n\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\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: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\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\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 loopPreventsSlide: true,\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-', // 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 // Internals\n _emitClasses: false,\n};\n","import { extend } from '../shared/utils.js';\n\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (\n ['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 &&\n params[moduleParamName] === true\n ) {\n params[moduleParamName] = { auto: true };\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\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 extend(allModulesParams, obj);\n };\n}\n","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport $ from '../shared/dom.js';\nimport { extend, now, deleteProps } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\n\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\n\nimport eventsEmitter from './events-emitter.js';\n\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport images from './images/index.js';\nimport checkOverflow from './check-overflow/index.js';\n\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\n\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes,\n images,\n};\n\nconst extendedDefaults = {};\n\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n if (\n args.length === 1 &&\n args[0].constructor &&\n Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object'\n ) {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each((containerEl) => {\n const newParams = extend({}, params, { el: containerEl });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({ userAgent: params.userAgent });\n swiper.browser = getBrowser();\n\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n\n const allModulesParams = {};\n\n swiper.modules.forEach((mod) => {\n mod({\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper),\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach((eventName) => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Save Dom lib\n swiper.$ = $;\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\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\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n\n //\n isBeginning: true,\n isEnd: false,\n\n // Props\n translate: 0,\n previousTranslate: 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', 'touchcancel'];\n const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3],\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2],\n };\n return swiper.support.touch || !swiper.params.simulateTouch\n ? swiper.touchEventsTouch\n : 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 focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 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 swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n return swiper;\n }\n\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter((className) => {\n return (\n className.indexOf('swiper') === 0 ||\n className.indexOf(swiper.params.containerModifierClass) === 0\n );\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n\n getSlideClasses(slideEl) {\n const swiper = this;\n\n return slideEl.className\n .split(' ')\n .filter((className) => {\n return (\n className.indexOf('swiper-slide') === 0 ||\n className.indexOf(swiper.params.slideClass) === 0\n );\n })\n .join(' ');\n }\n\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each((slideEl) => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({ slideEl, classNames });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n\n slidesPerViewDynamic(view = 'current', exact = false) {\n const swiper = this;\n const { params, slides, slidesGrid, slidesSizesGrid, size: swiperSize, activeIndex } = 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 // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact\n ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize\n : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\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(\n Math.max(translateValue, swiper.maxTranslate()),\n swiper.minTranslate(),\n );\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if (\n (swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) &&\n swiper.isEnd &&\n !swiper.params.centeredSlides\n ) {\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 changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (\n newDirection === currentDirection ||\n (newDirection !== 'horizontal' && newDirection !== 'vertical')\n ) {\n return swiper;\n }\n\n swiper.$el\n .removeClass(`${swiper.params.containerModifierClass}${currentDirection}`)\n .addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n\n swiper.params.direction = newDirection;\n\n swiper.slides.each((slideEl) => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n\n return swiper;\n }\n\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = $(el.shadowRoot.querySelector(getWrapperSelector()));\n // Children needs to return slot items\n res.children = (options) => $el.children(options);\n return res;\n }\n return $el.children(getWrapperSelector());\n };\n // Find Wrapper\n let $wrapperEl = getWrapper();\n if ($wrapperEl.length === 0 && swiper.params.createElements) {\n const document = getDocument();\n const wrapper = document.createElement('div');\n $wrapperEl = $(wrapper);\n wrapper.className = swiper.params.wrapperClass;\n $el.append(wrapper);\n $el.children(`.${swiper.params.slideClass}`).each((slideEl) => {\n $wrapperEl.append(slideEl);\n });\n }\n\n Object.assign(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\n\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate:\n swiper.params.direction === 'horizontal' &&\n (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n });\n\n return true;\n }\n\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\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 && swiper.enabled) {\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(\n swiper.params.initialSlide + swiper.loopedSlides,\n 0,\n swiper.params.runCallbacksOnInit,\n false,\n true,\n );\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Attach events\n swiper.attachEvents();\n\n // Init Flag\n swiper.initialized = true;\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n\n return swiper;\n }\n\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const { params, $el, $wrapperEl, slides } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\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\n .removeClass(\n [\n params.slideVisibleClass,\n params.slideActiveClass,\n params.slideNextClass,\n params.slidePrevClass,\n ].join(' '),\n )\n .removeAttr('style')\n .removeAttr('data-swiper-slide-index');\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 deleteProps(swiper);\n }\n swiper.destroyed = true;\n\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach((m) => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\n\nObject.keys(prototypes).forEach((prototypeGroup) => {\n Object.keys(prototypes[prototypeGroup]).forEach((protoMethod) => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\n\nSwiper.use([Resize, Observer]);\n\nexport default Swiper;\n","/* eslint-disable no-underscore-dangle */\n\nexport default {\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\n once(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n function onceHandler(...args) {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n\n onAny(handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n\n offAny(handler) {\n const self = this;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\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 if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (\n eventHandler === handler ||\n (eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler)\n ) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n\n emit(...args) {\n const self = this;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n\n eventsArray.forEach((event) => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach((eventHandler) => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler) => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n },\n};\n","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\n\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide,\n};\n","export default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\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 =\n width -\n parseInt($el.css('padding-left') || 0, 10) -\n parseInt($el.css('padding-right') || 0, 10);\n height =\n height -\n parseInt($el.css('padding-top') || 0, 10) -\n parseInt($el.css('padding-bottom') || 0, 10);\n\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height,\n });\n}\n","import { setCSSProperty } from '../../shared/utils.js';\n\nexport default function updateSlides() {\n const swiper = this;\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom',\n }[property];\n }\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n\n const params = swiper.params;\n\n const { $wrapperEl, size: swiperSize, rtlTranslate: rtl, wrongRTL } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\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 previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 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: '', marginBottom: '', marginTop: '' });\n else slides.css({ marginRight: '', marginBottom: '', marginTop: '' });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n }\n\n // Calc slides\n let slideSize;\n\n const shouldResetSlideSize =\n params.slidesPerView === 'auto' &&\n params.breakpoints &&\n Object.keys(params.breakpoints).filter((key) => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide[0]);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const { clientWidth, offsetWidth } = slide[0];\n slideSize =\n width +\n paddingLeft +\n paddingRight +\n marginLeft +\n marginRight +\n (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\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 slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\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)\n 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 (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (\n (index - Math.min(swiper.params.slidesPerGroupSkip, index)) %\n swiper.params.slidesPerGroup ===\n 0\n )\n 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;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n }\n if (params.setWrapperSize) {\n $wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`,\n });\n }\n\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n\n if (\n Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) >\n 1\n ) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides\n .filter((_, slideIndex) => {\n if (!params.cssMode) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n })\n .css({ [key]: `${spaceBetween}px` });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach((slideSizeValue) => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map((snap) => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach((slideSizeValue) => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid,\n });\n\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(\n swiper.wrapperEl,\n '--swiper-centered-offset-after',\n `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`,\n );\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map((v) => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map((v) => v + addToSlidesGrid);\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) {\n swiper.updateSlidesOffset();\n }\n}\n","export default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\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\n const getSlideByIndex = (index) => {\n if (isVirtual) {\n return swiper.slides.filter(\n (el) => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index,\n )[0];\n }\n return swiper.slides.eq(index)[0];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n swiper.visibleSlides.each((slide) => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\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","export default function 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()\n ? slides[i].offsetLeft\n : slides[i].offsetTop;\n }\n}\n","import $ from '../../shared/dom.js';\n\nexport default function updateSlidesProgress(translate = (this && 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 swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n\n const slideProgress =\n (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) /\n (slide.swiperSlideSize + params.spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible =\n (slideBefore >= 0 && slideBefore < swiper.size - 1) ||\n (slideAfter > 1 && slideAfter <= swiper.size) ||\n (slideBefore <= 0 && slideAfter >= swiper.size);\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n slide.progress = rtl ? -slideProgress : slideProgress;\n }\n swiper.visibleSlides = $(swiper.visibleSlides);\n}\n","export default function updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = (swiper && swiper.translate && swiper.translate * multiplier) || 0;\n }\n const params = swiper.params;\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 Object.assign(swiper, {\n progress,\n isBeginning,\n isEnd,\n });\n\n if (params.watchSlidesProgress || (params.centeredSlides && params.autoHeight))\n 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","export default function updateSlidesClasses() {\n const swiper = this;\n\n const { slides, params, $wrapperEl, activeIndex, realIndex } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n\n slides.removeClass(\n `${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`,\n );\n\n let activeSlide;\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(\n `.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`,\n );\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(\n `.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`,\n )\n .addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl\n .children(\n `.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`,\n )\n .addClass(params.slideDuplicateActiveClass);\n }\n }\n // Next Slide\n let nextSlide = activeSlide\n .nextAll(`.${params.slideClass}`)\n .eq(0)\n .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\n .prevAll(`.${params.slideClass}`)\n .eq(0)\n .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(\n `.${params.slideClass}:not(.${\n params.slideDuplicateClass\n })[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`,\n )\n .addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl\n .children(\n `.${params.slideClass}.${\n params.slideDuplicateClass\n }[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`,\n )\n .addClass(params.slideDuplicateNextClass);\n }\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children(\n `.${params.slideClass}:not(.${\n params.slideDuplicateClass\n })[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`,\n )\n .addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl\n .children(\n `.${params.slideClass}.${\n params.slideDuplicateClass\n }[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`,\n )\n .addClass(params.slideDuplicatePrevClass);\n }\n }\n swiper.emitSlidesClasses();\n}\n","export default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n 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 (\n translate >= slidesGrid[i] &&\n translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2\n ) {\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 const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / 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(\n swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex,\n 10,\n );\n\n Object.assign(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 if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}\n","import $ from '../../shared/dom.js';\n\nexport default function 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 let slideIndex;\n\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\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 = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (\n params.slideToClickedSlide &&\n swiper.clickedIndex !== undefined &&\n swiper.clickedIndex !== swiper.activeIndex\n ) {\n swiper.slideToClickedSlide();\n }\n}\n","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\n\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo,\n};\n","import { getTranslate } from '../../shared/utils.js';\n\nexport default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n\n const { params, rtlTranslate: rtl, translate, $wrapperEl } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n\n return currentTranslate || 0;\n}\n","export default function setTranslate(translate, byController) {\n const swiper = this;\n const { rtlTranslate: rtl, params, $wrapperEl, wrapperEl, progress } = 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.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n swiper.previousTranslate = swiper.translate;\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","export default function minTranslate() {\n return -this.snapGrid[0];\n}\n","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}\n","import { animateCSSModeScroll } from '../../shared/utils.js';\n\nexport default function translateTo(\n translate = 0,\n speed = this.params.speed,\n runCallbacks = true,\n translateBounds = true,\n internal,\n) {\n const swiper = this;\n\n const { params, wrapperEl } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;\n else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;\n else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({ swiper, targetPosition: -newTranslate, side: isH ? 'left' : 'top' });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth',\n });\n }\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener(\n 'transitionend',\n swiper.onTranslateToWrapperTransitionEnd,\n );\n swiper.$wrapperEl[0].removeEventListener(\n 'webkitTransitionEnd',\n swiper.onTranslateToWrapperTransitionEnd,\n );\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.$wrapperEl[0].addEventListener(\n 'transitionend',\n swiper.onTranslateToWrapperTransitionEnd,\n );\n swiper.$wrapperEl[0].addEventListener(\n 'webkitTransitionEnd',\n swiper.onTranslateToWrapperTransitionEnd,\n );\n }\n }\n\n return true;\n}\n","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\n\nexport default {\n setTransition,\n transitionStart,\n transitionEnd,\n};\n","export default function setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n}\n","import transitionEmit from './transitionEmit.js';\n\nexport default function transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const { params } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n transitionEmit({ swiper, runCallbacks, direction, step: 'Start' });\n}\n","import transitionEmit from './transitionEmit.js';\n\nexport default function transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const { params } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n\n transitionEmit({ swiper, runCallbacks, direction, step: 'End' });\n}\n","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\n\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide,\n};\n","import { animateCSSModeScroll } from '../../shared/utils.js';\n\nexport default function slideTo(\n index = 0,\n speed = this.params.speed,\n runCallbacks = true,\n internal,\n initial,\n) {\n if (typeof index !== 'number' && typeof index !== 'string') {\n throw new Error(\n `The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`,\n );\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(\n `The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`,\n );\n }\n\n // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n index = indexAsNumber;\n }\n\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled,\n } = swiper;\n\n if (\n (swiper.animating && params.preventInteractionOnTransition) ||\n (!enabled && !internal && !initial)\n ) {\n return false;\n }\n\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.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 const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (\n normalizedTranslate >= normalizedGrid &&\n normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2\n ) {\n slideIndex = i;\n } else if (\n normalizedTranslate >= normalizedGrid &&\n normalizedTranslate < normalizedGridNext\n ) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (\n !swiper.allowSlideNext &&\n translate < swiper.translate &&\n translate < swiper.minTranslate()\n ) {\n return false;\n }\n if (\n !swiper.allowSlidePrev &&\n translate > swiper.translate &&\n translate > swiper.maxTranslate()\n ) {\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 // 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 if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._swiperImmediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({ swiper, targetPosition: t, side: isH ? 'left' : 'top' });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth',\n });\n }\n return true;\n }\n\n if (speed === 0) {\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 if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener(\n 'transitionend',\n swiper.onSlideToWrapperTransitionEnd,\n );\n swiper.$wrapperEl[0].removeEventListener(\n 'webkitTransitionEnd',\n swiper.onSlideToWrapperTransitionEnd,\n );\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener(\n 'webkitTransitionEnd',\n swiper.onSlideToWrapperTransitionEnd,\n );\n }\n }\n\n return true;\n}\n","export default function slideToLoop(\n index = 0,\n speed = this.params.speed,\n runCallbacks = true,\n internal,\n) {\n const swiper = this;\n let newIndex = index;\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const { animating, enabled, params } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const { params, animating, snapGrid, slidesGrid, rtlTranslate, enabled } = swiper;\n if (!enabled) return swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) 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\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map((val) => normalize(val));\n\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (\n params.slidesPerView === 'auto' &&\n params.slidesPerGroup === 1 &&\n params.slidesPerGroupAuto\n ) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(\n speed = this.params.speed,\n runCallbacks = true,\n internal,\n threshold = 0.5,\n) {\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n","import $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\n\nexport default function slideToClickedSlide() {\n const swiper = this;\n const { params, $wrapperEl } = swiper;\n\n const slidesPerView =\n 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(\n `.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`,\n )\n .eq(0)\n .index();\n\n 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(\n `.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`,\n )\n .eq(0)\n .index();\n\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}\n","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\n\nexport default {\n loopCreate,\n loopFix,\n loopDestroy,\n};\n","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\n\nexport default function loopCreate() {\n const swiper = this;\n const document = getDocument();\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(\n `${params.slideClass} ${params.slideBlankClass}`,\n );\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 = Math.ceil(parseFloat(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((el, index) => {\n const slide = $(el);\n if (index < swiper.loopedSlides) {\n appendSlides.push(el);\n }\n if (index < slides.length && index >= slides.length - swiper.loopedSlides) {\n prependSlides.push(el);\n }\n slide.attr('data-swiper-slide-index', index);\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","export default function loopFix() {\n const swiper = this;\n\n swiper.emit('beforeLoopFix');\n\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n 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 // 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 (activeIndex >= slides.length - loopedSlides) {\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 swiper.emit('loopFix');\n}\n","export default function loopDestroy() {\n const swiper = this;\n const { $wrapperEl, params, slides } = swiper;\n $wrapperEl\n .children(\n `.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`,\n )\n .remove();\n slides.removeAttr('data-swiper-slide-index');\n}\n","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\n\nexport default {\n setGrabCursor,\n unsetGrabCursor,\n};\n","export default function setGrabCursor(moving) {\n const swiper = this;\n if (\n swiper.support.touch ||\n !swiper.params.simulateTouch ||\n (swiper.params.watchOverflow && swiper.isLocked) ||\n swiper.params.cssMode\n )\n return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\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","export default function unsetGrabCursor() {\n const swiper = this;\n if (\n swiper.support.touch ||\n (swiper.params.watchOverflow && swiper.isLocked) ||\n swiper.params.cssMode\n ) {\n return;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n}\n","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\n\nexport default { setBreakpoint, getBreakpoint };\n","import { getWindow } from 'ssr-window';\n\nexport default function getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || (base === 'container' && !containerEl)) return undefined;\n let breakpoint = false;\n\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n\n const points = Object.keys(breakpoints).map((point) => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return { value, point };\n }\n return { value: point, point };\n });\n\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const { point, value } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\n","function checkOverflow() {\n const swiper = this;\n const { isLocked: wasLocked, params } = swiper;\n const { slidesOffsetBefore } = params;\n\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge =\n swiper.slidesGrid[lastSlideIndex] +\n swiper.slidesSizesGrid[lastSlideIndex] +\n slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\n\nexport default { checkOverflow };\n","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\n\nexport default { addClasses, removeClasses };\n","function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach((item) => {\n if (typeof item === 'object') {\n Object.keys(item).forEach((classNames) => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\n\nexport default function addClasses() {\n const swiper = this;\n const { classNames, params, rtl, $el, device, support } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses([\n 'initialized',\n params.direction,\n { 'pointer-events': !support.touch },\n { 'free-mode': swiper.params.freeMode && params.freeMode.enabled },\n { 'autoheight': params.autoHeight },\n { 'rtl': rtl },\n { 'grid': params.grid && params.grid.rows > 1 },\n { 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column' },\n { 'android': device.android },\n { 'ios': device.ios },\n { 'css-mode': params.cssMode },\n { 'centered': params.cssMode && params.centeredSlides },\n ], params.containerModifierClass);\n classNames.push(...suffixes);\n $el.addClass([...classNames].join(' '));\n swiper.emitContainerClasses();\n}\n","export default function removeClasses() {\n const swiper = this;\n const { $el, classNames } = swiper;\n\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n}\n","import loadImage from './loadImage.js';\nimport preloadImages from './preloadImages.js';\n\nexport default {\n loadImage,\n preloadImages,\n};\n","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\n\nexport default function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n function onReady() {\n if (callback) callback();\n }\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!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","export default function 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","import { getDocument } from 'ssr-window';\n\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n const document = getDocument();\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach((key) => {\n if (!params[key] && params.auto === true) {\n let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n if (!element) {\n element = document.createElement('div');\n element.className = checkProps[key];\n swiper.$el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}\n","export default function classesToSelector(classes = '') {\n return `.${classes\n .trim()\n .replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}\n","export default function 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) {\n swiper.update();\n }\n}\n","export default function 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) {\n swiper.update();\n }\n swiper.slideTo(newActiveIndex, 0, false);\n}\n","export default function addSlide(index, slides) {\n const swiper = this;\n const { $wrapperEl, params, activeIndex } = swiper;\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n const baseLength = swiper.slides.length;\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n\n const slidesBuffer = [];\n for (let i = baseLength - 1; i >= index; i -= 1) {\n const currentSlide = swiper.slides.eq(i);\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\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 newActiveIndex =\n activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n $wrapperEl.append(slides);\n }\n\n for (let i = 0; i < slidesBuffer.length; i += 1) {\n $wrapperEl.append(slidesBuffer[i]);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.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","export default function removeSlide(slidesIndexes) {\n const swiper = this;\n const { params, $wrapperEl, activeIndex } = swiper;\n\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n let newActiveIndex = activeIndexBuffer;\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) {\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","export default function 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","export default function effectInit(params) {\n const { effect, swiper, on, setTranslate, setTransition, overwriteParams, perspective } = params;\n\n on('beforeInit', () => {\n if (swiper.params.effect !== effect) return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n if (perspective && perspective()) {\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n }\n\n const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\n\n Object.assign(swiper.params, overwriteParamsResult);\n Object.assign(swiper.originalParams, overwriteParamsResult);\n });\n on('setTranslate', () => {\n if (swiper.params.effect !== effect) return;\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n if (swiper.params.effect !== effect) return;\n setTransition(duration);\n });\n}\n","export default function effectTarget(effectParams, $slideEl) {\n if (effectParams.transformEl) {\n return $slideEl.find(effectParams.transformEl).css({\n 'backface-visibility': 'hidden',\n '-webkit-backface-visibility': 'hidden',\n });\n }\n return $slideEl;\n}\n","export default function effectVirtualTransitionEnd({ swiper, duration, transformEl, allSlides }) {\n const { slides, activeIndex, $wrapperEl } = swiper;\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n let $transitionEndTarget;\n if (allSlides) {\n $transitionEndTarget = transformEl ? slides.find(transformEl) : slides;\n } else {\n $transitionEndTarget = transformEl\n ? slides.eq(activeIndex).find(transformEl)\n : slides.eq(activeIndex);\n }\n $transitionEndTarget.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","import $ from './dom.js';\n\nexport default function createShadow(params, $slideEl, side) {\n const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}`;\n const $shadowContainer = params.transformEl ? $slideEl.find(params.transformEl) : $slideEl;\n let $shadowEl = $shadowContainer.children(`.${shadowClass}`);\n\n if (!$shadowEl.length) {\n $shadowEl = $(`
`);\n $shadowContainer.append($shadowEl);\n }\n return $shadowEl;\n}\n","import { getWindow } from 'ssr-window';\n\nexport default function Resize({ swiper, on, emit }) {\n const window = getWindow();\n let observer = null;\n\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver((entries) => {\n const { width, height } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({ contentBoxSize, contentRect, target }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect\n ? contentRect.width\n : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect\n ? contentRect.height\n : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n observer.observe(swiper.el);\n };\n\n const removeObserver = () => {\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}\n","import { getWindow } from 'ssr-window';\n\nexport default function Observer({ swiper, extendParams, on, emit }) {\n const observers = [];\n const window = getWindow();\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc((mutations) => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\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 observers.push(observer);\n };\n const init = () => {\n if (!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 attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren,\n });\n\n // Observe wrapper\n attach(swiper.$wrapperEl[0], { attributes: false });\n };\n const destroy = () => {\n observers.forEach((observer) => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false,\n });\n on('init', init);\n on('destroy', destroy);\n}\n","// Swiper Class\nimport Swiper from './core/core.js';\n\n//IMPORT_MODULES\n\nconst modules = [\n //INSTALL_MODULES\n];\n\nSwiper.use(modules);\n\n//EXPORT\n","import $ from '../../shared/dom.js';\nimport { setCSSProperty } from '../../shared/utils.js';\n\nexport default function Virtual({ swiper, extendParams, on }) {\n extendParams({\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderSlide: null,\n renderExternal: null,\n renderExternalUpdate: true,\n addSlidesBefore: 0,\n addSlidesAfter: 0,\n },\n });\n\n let cssModeTimeout;\n\n swiper.virtual = {\n cache: {},\n from: undefined,\n to: undefined,\n slides: [],\n offset: 0,\n slidesGrid: [],\n };\n\n function renderSlide(slide, index) {\n const params = swiper.params.virtual;\n if (params.cache && swiper.virtual.cache[index]) {\n return swiper.virtual.cache[index];\n }\n const $slideEl = params.renderSlide\n ? $(params.renderSlide.call(swiper, slide, index))\n : $(\n `
${slide}
`,\n );\n if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);\n if (params.cache) swiper.virtual.cache[index] = $slideEl;\n return $slideEl;\n }\n\n function update(force) {\n const { slidesPerView, slidesPerGroup, centeredSlides } = swiper.params;\n const { addSlidesBefore, addSlidesAfter } = swiper.params.virtual;\n const {\n from: previousFrom,\n to: previousTo,\n slides,\n slidesGrid: previousSlidesGrid,\n offset: previousOffset,\n } = swiper.virtual;\n if (!swiper.params.cssMode) {\n swiper.updateActiveIndex();\n }\n\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 + addSlidesAfter;\n slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n } else {\n slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;\n slidesBefore = slidesPerGroup + addSlidesBefore;\n }\n const from = Math.max((activeIndex || 0) - slidesBefore, 0);\n const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n\n Object.assign(swiper.virtual, {\n from,\n to,\n offset,\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 !== previousOffset) {\n swiper.slides.css(offsetProp, `${offset}px`);\n }\n swiper.updateProgress();\n return;\n }\n if (swiper.params.virtual.renderExternal) {\n swiper.params.virtual.renderExternal.call(swiper, {\n offset,\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 if (swiper.params.virtual.renderExternalUpdate) {\n onRendered();\n }\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\n .find(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${i}\"]`)\n .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) => {\n swiper.$wrapperEl.append(renderSlide(slides[index], index));\n });\n prependIndexes\n .sort((a, b) => b - a)\n .forEach((index) => {\n swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n });\n swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);\n onRendered();\n }\n\n function appendSlide(slides) {\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.push(slides[i]);\n }\n } else {\n swiper.virtual.slides.push(slides);\n }\n update(true);\n }\n function prependSlide(slides) {\n const activeIndex = swiper.activeIndex;\n let newActiveIndex = activeIndex + 1;\n let numberOfNewSlides = 1;\n\n if (Array.isArray(slides)) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n numberOfNewSlides = slides.length;\n } else {\n swiper.virtual.slides.unshift(slides);\n }\n if (swiper.params.virtual.cache) {\n const cache = swiper.virtual.cache;\n const newCache = {};\n Object.keys(cache).forEach((cachedIndex) => {\n const $cachedEl = cache[cachedIndex];\n const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');\n if (cachedElIndex) {\n $cachedEl.attr(\n 'data-swiper-slide-index',\n parseInt(cachedElIndex, 10) + numberOfNewSlides,\n );\n }\n newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n });\n swiper.virtual.cache = newCache;\n }\n update(true);\n swiper.slideTo(newActiveIndex, 0);\n }\n function removeSlide(slidesIndexes) {\n if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n let activeIndex = swiper.activeIndex;\n if (Array.isArray(slidesIndexes)) {\n for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n swiper.virtual.slides.splice(slidesIndexes[i], 1);\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes[i]];\n }\n if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n } else {\n swiper.virtual.slides.splice(slidesIndexes, 1);\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes];\n }\n if (slidesIndexes < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n update(true);\n swiper.slideTo(activeIndex, 0);\n }\n function removeAllSlides() {\n swiper.virtual.slides = [];\n if (swiper.params.virtual.cache) {\n swiper.virtual.cache = {};\n }\n update(true);\n swiper.slideTo(0, 0);\n }\n\n on('beforeInit', () => {\n if (!swiper.params.virtual.enabled) return;\n swiper.virtual.slides = swiper.params.virtual.slides;\n swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n\n if (!swiper.params.initialSlide) {\n update();\n }\n });\n on('setTranslate', () => {\n if (!swiper.params.virtual.enabled) return;\n if (swiper.params.cssMode && !swiper._immediateVirtual) {\n clearTimeout(cssModeTimeout);\n cssModeTimeout = setTimeout(() => {\n update();\n }, 100);\n } else {\n update();\n }\n });\n on('init update resize', () => {\n if (!swiper.params.virtual.enabled) return;\n if (swiper.params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);\n }\n });\n\n Object.assign(swiper.virtual, {\n appendSlide,\n prependSlide,\n removeSlide,\n removeAllSlides,\n update,\n });\n}\n","/* eslint-disable consistent-return */\nimport { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\n\nexport default function Keyboard({ swiper, extendParams, on, emit }) {\n const document = getDocument();\n const window = getWindow();\n swiper.keyboard = {\n enabled: false,\n };\n extendParams({\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true,\n },\n });\n\n function handle(event) {\n if (!swiper.enabled) return;\n\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 const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40;\n // Directions locks\n if (\n !swiper.allowSlideNext &&\n ((swiper.isHorizontal() && isArrowRight) ||\n (swiper.isVertical() && isArrowDown) ||\n isPageDown)\n ) {\n return false;\n }\n if (\n !swiper.allowSlidePrev &&\n ((swiper.isHorizontal() && isArrowLeft) || (swiper.isVertical() && isArrowUp) || isPageUp)\n ) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n if (\n document.activeElement &&\n document.activeElement.nodeName &&\n (document.activeElement.nodeName.toLowerCase() === 'input' ||\n document.activeElement.nodeName.toLowerCase() === 'textarea')\n ) {\n return undefined;\n }\n if (\n swiper.params.keyboard.onlyInViewport &&\n (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)\n ) {\n let inView = false;\n // Check that swiper should be inside of visible area of window\n if (\n swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 &&\n swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0\n ) {\n return undefined;\n }\n\n const $el = swiper.$el;\n const swiperWidth = $el[0].clientWidth;\n const swiperHeight = $el[0].clientHeight;\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 + swiperWidth, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + swiperHeight],\n [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight],\n ];\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n inView = true;\n }\n }\n if (!inView) return undefined;\n }\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (((isPageDown || isArrowRight) && !rtl) || ((isPageUp || isArrowLeft) && rtl))\n swiper.slideNext();\n if (((isPageUp || isArrowLeft) && !rtl) || ((isPageDown || isArrowRight) && rtl))\n swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n emit('keyPress', kc);\n return undefined;\n }\n function enable() {\n if (swiper.keyboard.enabled) return;\n $(document).on('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n function disable() {\n if (!swiper.keyboard.enabled) return;\n $(document).off('keydown', handle);\n swiper.keyboard.enabled = false;\n }\n\n on('init', () => {\n if (swiper.params.keyboard.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n if (swiper.keyboard.enabled) {\n disable();\n }\n });\n\n Object.assign(swiper.keyboard, {\n enable,\n disable,\n });\n}\n","/* eslint-disable consistent-return */\nimport { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now, nextTick } from '../../shared/utils.js';\n\nexport default function Mousewheel({ swiper, extendParams, on, emit }) {\n const window = getWindow();\n\n extendParams({\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarget: 'container',\n thresholdDelta: null,\n thresholdTime: null,\n },\n });\n\n swiper.mousewheel = {\n enabled: false,\n };\n\n let timeout;\n let lastScrollTime = now();\n let lastEventBeforeSnap;\n const recentWheelEvents = [];\n\n function 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 (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\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 function handleMouseEnter() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = true;\n }\n function handleMouseLeave() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = false;\n }\n function animateSlider(newEvent) {\n if (\n swiper.params.mousewheel.thresholdDelta &&\n newEvent.delta < swiper.params.mousewheel.thresholdDelta\n ) {\n // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n }\n\n if (\n swiper.params.mousewheel.thresholdTime &&\n now() - lastScrollTime < swiper.params.mousewheel.thresholdTime\n ) {\n // Prevent if time between scrolls is below configured threshold\n return false;\n }\n\n // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n // Return false as a default\n return true;\n }\n // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n emit('scroll', newEvent.raw);\n }\n // If you got here is because an animation has been triggered so store the current time\n lastScrollTime = new window.Date().getTime();\n // Return false as a default\n return false;\n }\n function releaseScroll(newEvent) {\n const params = swiper.params.mousewheel;\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n return false;\n }\n function handle(event) {\n let e = event;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n const params = swiper.params.mousewheel;\n\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n\n let target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges)\n 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 = normalize(e);\n\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;\n else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;\n else return true;\n } else {\n delta =\n Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n\n if (delta === 0) return true;\n\n if (params.invert) delta = -delta;\n\n // Get the scroll positions\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();\n\n // When loop is true:\n // the disableParentSwiper will be true.\n // When loop is false:\n // if the scroll positions is not on edge,\n // then the disableParentSwiper will be true.\n // if the scroll on edge positions,\n // then the disableParentSwiper will be false.\n disableParentSwiper = swiper.params.loop\n ? true\n : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n\n if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event,\n };\n\n // Keep the most recent events\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n const prevEvent = recentWheelEvents.length\n ? recentWheelEvents[recentWheelEvents.length - 1]\n : undefined;\n recentWheelEvents.push(newEvent);\n\n // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n if (prevEvent) {\n if (\n newEvent.direction !== prevEvent.direction ||\n newEvent.delta > prevEvent.delta ||\n newEvent.time > prevEvent.time + 150\n ) {\n animateSlider(newEvent);\n }\n } else {\n animateSlider(newEvent);\n }\n\n // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n if (releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n };\n const ignoreWheelEvents =\n lastEventBeforeSnap &&\n newEvent.time < lastEventBeforeSnap.time + 500 &&\n newEvent.delta <= lastEventBeforeSnap.delta &&\n newEvent.direction === lastEventBeforeSnap.direction;\n if (!ignoreWheelEvents) {\n lastEventBeforeSnap = undefined;\n\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.freeMode.sticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(timeout);\n timeout = undefined;\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n const prevEvent = recentWheelEvents.length\n ? recentWheelEvents[recentWheelEvents.length - 1]\n : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n if (\n prevEvent &&\n (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)\n ) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (\n recentWheelEvents.length >= 15 &&\n newEvent.time - firstEvent.time < 500 &&\n firstEvent.delta - newEvent.delta >= 1 &&\n newEvent.delta <= 6\n ) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n timeout = nextTick(() => {\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n if (!timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n timeout = nextTick(() => {\n const snapToThreshold = 0.5;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 500);\n }\n }\n\n // Emit event\n if (!ignoreWheelEvents) emit('scroll', e);\n\n // Stop autoplay\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction)\n swiper.autoplay.stop();\n // Return page scroll on edge positions\n if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n }\n }\n\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n return false;\n }\n\n function events(method) {\n let target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n target[method]('mouseenter', handleMouseEnter);\n target[method]('mouseleave', handleMouseLeave);\n target[method]('wheel', handle);\n }\n\n function enable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener('wheel', handle);\n return true;\n }\n if (swiper.mousewheel.enabled) return false;\n events('on');\n swiper.mousewheel.enabled = true;\n return true;\n }\n function disable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, handle);\n return true;\n }\n if (!swiper.mousewheel.enabled) return false;\n events('off');\n swiper.mousewheel.enabled = false;\n return true;\n }\n\n on('init', () => {\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n disable();\n }\n if (swiper.params.mousewheel.enabled) enable();\n });\n on('destroy', () => {\n if (swiper.params.cssMode) {\n enable();\n }\n if (swiper.mousewheel.enabled) disable();\n });\n\n Object.assign(swiper.mousewheel, {\n enable,\n disable,\n });\n}\n","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nimport $ from '../../shared/dom.js';\n\nexport default function Navigation({ swiper, extendParams, on, emit }) {\n extendParams({\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\n swiper.navigation = {\n nextEl: null,\n $nextEl: null,\n prevEl: null,\n $prevEl: null,\n };\n\n function getEl(el) {\n let $el;\n if (el) {\n $el = $(el);\n if (\n swiper.params.uniqueNavElements &&\n typeof el === 'string' &&\n $el.length > 1 &&\n swiper.$el.find(el).length === 1\n ) {\n $el = swiper.$el.find(el);\n }\n }\n return $el;\n }\n\n function toggleEl($el, disabled) {\n const params = swiper.params.navigation;\n if ($el && $el.length > 0) {\n $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass);\n if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n }\n function update() {\n // Update Navigation Buttons\n if (swiper.params.loop) return;\n const { $nextEl, $prevEl } = swiper.navigation;\n\n toggleEl($prevEl, swiper.isBeginning);\n toggleEl($nextEl, swiper.isEnd);\n }\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop) return;\n swiper.slidePrev();\n }\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop) return;\n swiper.slideNext();\n }\n function init() {\n const params = swiper.params.navigation;\n\n swiper.params.navigation = createElementIfNotDefined(\n swiper,\n swiper.originalParams.navigation,\n swiper.params.navigation,\n {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev',\n },\n );\n if (!(params.nextEl || params.prevEl)) return;\n\n const $nextEl = getEl(params.nextEl);\n const $prevEl = getEl(params.prevEl);\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', onNextClick);\n }\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', onPrevClick);\n }\n\n Object.assign(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0],\n });\n\n if (!swiper.enabled) {\n if ($nextEl) $nextEl.addClass(params.lockClass);\n if ($prevEl) $prevEl.addClass(params.lockClass);\n }\n }\n function destroy() {\n const { $nextEl, $prevEl } = swiper.navigation;\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n }\n\n on('init', () => {\n init();\n update();\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const { $nextEl, $prevEl } = swiper.navigation;\n if ($nextEl) {\n $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n if ($prevEl) {\n $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n });\n on('click', (_s, e) => {\n const { $nextEl, $prevEl } = swiper.navigation;\n const targetEl = e.target;\n if (\n swiper.params.navigation.hideOnClick &&\n !$(targetEl).is($prevEl) &&\n !$(targetEl).is($nextEl)\n ) {\n if (\n swiper.pagination &&\n swiper.params.pagination &&\n swiper.params.pagination.clickable &&\n (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))\n )\n return;\n let isHidden;\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n });\n\n Object.assign(swiper.navigation, {\n update,\n init,\n destroy,\n });\n}\n","import $ from '../../shared/dom.js';\nimport classesToSelector from '../../shared/classes-to-selector.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\n\nexport default function Pagination({ swiper, extendParams, on, emit }) {\n const pfx = 'swiper-pagination';\n extendParams({\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 formatFractionCurrent: (number) => number,\n formatFractionTotal: (number) => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n },\n });\n\n swiper.pagination = {\n el: null,\n $el: null,\n bullets: [],\n };\n\n let bulletSize;\n let dynamicBulletIndex = 0;\n\n function isPaginationDisabled() {\n return (\n !swiper.params.pagination.el ||\n !swiper.pagination.el ||\n !swiper.pagination.$el ||\n swiper.pagination.$el.length === 0\n );\n }\n\n function setSideBullets($bulletEl, position) {\n const { bulletActiveClass } = swiper.params.pagination;\n $bulletEl[position]()\n .addClass(`${bulletActiveClass}-${position}`)\n [position]()\n .addClass(`${bulletActiveClass}-${position}-${position}`);\n }\n\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength =\n swiper.virtual && swiper.params.virtual.enabled\n ? swiper.virtual.slides.length\n : swiper.slides.length;\n const $el = swiper.pagination.$el;\n // Current/Total\n let current;\n const total = swiper.params.loop\n ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup)\n : swiper.snapGrid.length;\n if (swiper.params.loop) {\n current = Math.ceil(\n (swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup,\n );\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 (\n params.type === 'bullets' &&\n swiper.pagination.bullets &&\n swiper.pagination.bullets.length > 0\n ) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(\n swiper.isHorizontal() ? 'width' : 'height',\n `${bulletSize * (params.dynamicMainBullets + 4)}px`,\n );\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n dynamicBulletIndex += current - swiper.previousIndex;\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n firstIndex = current - dynamicBulletIndex;\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.removeClass(\n ['', '-next', '-next-next', '-prev', '-prev-prev', '-main']\n .map((suffix) => `${params.bulletActiveClass}${suffix}`)\n .join(' '),\n );\n if ($el.length > 1) {\n bullets.each((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 setSideBullets($bullet, 'prev');\n }\n if (bulletIndex === lastIndex) {\n setSideBullets($bullet, 'next');\n }\n }\n });\n } else {\n const $bullet = bullets.eq(current);\n const bulletIndex = $bullet.index();\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 if (swiper.params.loop) {\n if (bulletIndex >= bullets.length - params.dynamicMainBullets) {\n for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n }\n bullets\n .eq(bullets.length - params.dynamicMainBullets - 1)\n .addClass(`${params.bulletActiveClass}-prev`);\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset =\n (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * 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\n .find(classesToSelector(params.currentClass))\n .text(params.formatFractionCurrent(current + 1));\n $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(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\n .find(classesToSelector(params.progressbarFillClass))\n .transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`)\n .transition(swiper.params.speed);\n }\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n emit('paginationRender', $el[0]);\n } else {\n emit('paginationUpdate', $el[0]);\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength =\n swiper.virtual && swiper.params.virtual.enabled\n ? swiper.virtual.slides.length\n : swiper.slides.length;\n\n const $el = swiper.pagination.$el;\n let paginationHTML = '';\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop\n ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup)\n : swiper.snapGrid.length;\n if (\n swiper.params.freeMode &&\n swiper.params.freeMode.enabled &&\n !swiper.params.loop &&\n numberOfBullets > slidesLength\n ) {\n numberOfBullets = slidesLength;\n }\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\n swiper.pagination.bullets = $el.find(classesToSelector(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 emit('paginationRender', swiper.pagination.$el[0]);\n }\n }\n function init() {\n swiper.params.pagination = createElementIfNotDefined(\n swiper,\n swiper.originalParams.pagination,\n swiper.params.pagination,\n { el: 'swiper-pagination' },\n );\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 (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n $el = swiper.$el.find(params.el);\n // check if it belongs to another nested Swiper\n if ($el.length > 1) {\n $el = $el.filter((el) => {\n if ($(el).parents('.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n $el.addClass(params.modifierClass + swiper.params.direction);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n 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', classesToSelector(params.bulletClass), function onClick(e) {\n e.preventDefault();\n let index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index += swiper.loopedSlides;\n swiper.slideTo(index);\n });\n }\n\n Object.assign(swiper.pagination, {\n $el,\n el: $el[0],\n });\n\n if (!swiper.enabled) {\n $el.addClass(params.lockClass);\n }\n }\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const $el = swiper.pagination.$el;\n\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n $el.removeClass(params.modifierClass + swiper.params.direction);\n if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass)\n swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n if (params.clickable) {\n $el.off('click', classesToSelector(params.bulletClass));\n }\n }\n\n on('init', () => {\n init();\n render();\n update();\n });\n on('activeIndexChange', () => {\n if (swiper.params.loop) {\n update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n if (!swiper.params.loop) {\n update();\n }\n });\n on('slidesLengthChange', () => {\n if (swiper.params.loop) {\n render();\n update();\n }\n });\n on('snapGridLengthChange', () => {\n if (!swiper.params.loop) {\n render();\n update();\n }\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const { $el } = swiper.pagination;\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const { $el } = swiper.pagination;\n if (\n swiper.params.pagination.el &&\n swiper.params.pagination.hideOnClick &&\n $el.length > 0 &&\n !$(targetEl).hasClass(swiper.params.pagination.bulletClass)\n ) {\n if (\n swiper.navigation &&\n ((swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl) ||\n (swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl))\n )\n return;\n const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n $el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n });\n\n Object.assign(swiper.pagination, {\n render,\n update,\n init,\n destroy,\n });\n}\n","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\n\nexport default function Scrollbar({ swiper, extendParams, on, emit }) {\n const document = getDocument();\n\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n\n extendParams({\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\n swiper.scrollbar = {\n el: null,\n dragEl: null,\n $el: null,\n $dragEl: null,\n };\n\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const { scrollbar, rtlTranslate: rtl, progress } = swiper;\n const { $dragEl, $el } = 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 $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n $dragEl[0].style.width = `${newSize}px`;\n } else {\n $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n $dragEl[0].style.height = `${newSize}px`;\n }\n if (params.hide) {\n clearTimeout(timeout);\n $el[0].style.opacity = 1;\n timeout = setTimeout(() => {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n }\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.$dragEl.transition(duration);\n }\n function updateSize() {\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 trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n\n divider =\n swiper.size /\n (swiper.virtualSize +\n swiper.params.slidesOffsetBefore -\n (swiper.params.centeredSlides ? swiper.snapGrid[0] : 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.scrollbar.hide) {\n $el[0].style.opacity = 0;\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.$el[swiper.isLocked ? 'addClass' : 'removeClass'](\n swiper.params.scrollbar.lockClass,\n );\n }\n }\n function getPointerPosition(e) {\n if (swiper.isHorizontal()) {\n return e.type === 'touchstart' || e.type === 'touchmove'\n ? e.targetTouches[0].clientX\n : e.clientX;\n }\n return e.type === 'touchstart' || e.type === 'touchmove'\n ? e.targetTouches[0].clientY\n : e.clientY;\n }\n function setDragPosition(e) {\n const { scrollbar, rtlTranslate: rtl } = swiper;\n const { $el } = scrollbar;\n\n let positionRatio;\n positionRatio =\n (getPointerPosition(e) -\n $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] -\n (dragStartPos !== null ? dragStartPos : dragSize / 2)) /\n (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n\n const position =\n swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const { scrollbar, $wrapperEl } = swiper;\n const { $el, $dragEl } = scrollbar;\n isTouched = true;\n dragStartPos =\n e.target === $dragEl[0] || e.target === $dragEl\n ? getPointerPosition(e) -\n e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top']\n : null;\n e.preventDefault();\n e.stopPropagation();\n\n $wrapperEl.transition(100);\n $dragEl.transition(100);\n setDragPosition(e);\n\n clearTimeout(dragTimeout);\n\n $el.transition(0);\n if (params.hide) {\n $el.css('opacity', 1);\n }\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', 'none');\n }\n emit('scrollbarDragStart', e);\n }\n function onDragMove(e) {\n const { scrollbar, $wrapperEl } = swiper;\n const { $el, $dragEl } = scrollbar;\n\n if (!isTouched) return;\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n setDragPosition(e);\n $wrapperEl.transition(0);\n $el.transition(0);\n $dragEl.transition(0);\n emit('scrollbarDragMove', e);\n }\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const { scrollbar, $wrapperEl } = swiper;\n const { $el } = scrollbar;\n\n if (!isTouched) return;\n isTouched = false;\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', '');\n $wrapperEl.transition('');\n }\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n emit('scrollbarDragEnd', e);\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n\n function events(method) {\n const { scrollbar, touchEventsTouch, touchEventsDesktop, params, support } = swiper;\n const $el = scrollbar.$el;\n const target = $el[0];\n const activeListener =\n support.passiveListener && params.passiveListeners\n ? { passive: false, capture: false }\n : false;\n const passiveListener =\n support.passiveListener && params.passiveListeners\n ? { passive: true, capture: false }\n : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n if (!support.touch) {\n target[eventMethod](touchEventsDesktop.start, onDragStart, activeListener);\n document[eventMethod](touchEventsDesktop.move, onDragMove, activeListener);\n document[eventMethod](touchEventsDesktop.end, onDragEnd, passiveListener);\n } else {\n target[eventMethod](touchEventsTouch.start, onDragStart, activeListener);\n target[eventMethod](touchEventsTouch.move, onDragMove, activeListener);\n target[eventMethod](touchEventsTouch.end, onDragEnd, passiveListener);\n }\n }\n\n function enableDraggable() {\n if (!swiper.params.scrollbar.el) return;\n events('on');\n }\n function disableDraggable() {\n if (!swiper.params.scrollbar.el) return;\n events('off');\n }\n function init() {\n const { scrollbar, $el: $swiperEl } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(\n swiper,\n swiper.originalParams.scrollbar,\n swiper.params.scrollbar,\n { el: 'swiper-scrollbar' },\n );\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n\n let $el = $(params.el);\n if (\n swiper.params.uniqueNavElements &&\n typeof params.el === 'string' &&\n $el.length > 1 &&\n $swiperEl.find(params.el).length === 1\n ) {\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 Object.assign(scrollbar, {\n $el,\n el: $el[0],\n $dragEl,\n dragEl: $dragEl[0],\n });\n\n if (params.draggable) {\n enableDraggable();\n }\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n }\n function destroy() {\n disableDraggable();\n }\n\n on('init', () => {\n init();\n updateSize();\n setTranslate();\n });\n on('update resize observerUpdate lock unlock', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const { $el } = swiper.scrollbar;\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n });\n on('destroy', () => {\n destroy();\n });\n\n Object.assign(swiper.scrollbar, {\n updateSize,\n setTranslate,\n init,\n destroy,\n });\n}\n","import $ from '../../shared/dom.js';\n\nexport default function Parallax({ swiper, extendParams, on }) {\n extendParams({\n parallax: {\n enabled: false,\n },\n });\n\n const setTransform = (el, progress) => {\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\n const setTranslate = () => {\n const { $el, slides, progress, snapGrid } = swiper;\n $el\n .children(\n '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]',\n )\n .each((el) => {\n setTransform(el, progress);\n });\n slides.each((slideEl, slideIndex) => {\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)\n .find(\n '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]',\n )\n .each((el) => {\n setTransform(el, slideProgress);\n });\n });\n };\n\n const setTransition = (duration = swiper.params.speed) => {\n const { $el } = swiper;\n $el\n .find(\n '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]',\n )\n .each((parallaxEl) => {\n const $parallaxEl = $(parallaxEl);\n let parallaxDuration =\n parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n $parallaxEl.transition(parallaxDuration);\n });\n };\n\n on('beforeInit', () => {\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n });\n on('init', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTranslate', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTransition', (_swiper, duration) => {\n if (!swiper.params.parallax.enabled) return;\n setTransition(duration);\n });\n}\n","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { getTranslate } from '../../shared/utils.js';\n\nexport default function Zoom({ swiper, extendParams, on, emit }) {\n const window = getWindow();\n extendParams({\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\n swiper.zoom = {\n enabled: false,\n };\n\n let currentScale = 1;\n let isScaling = false;\n let gesturesEnabled;\n let fakeGestureTouched;\n let fakeGestureMoved;\n const gesture = {\n $slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n $imageEl: undefined,\n $imageWrapEl: undefined,\n maxRatio: 3,\n };\n const 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 const velocity = {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined,\n };\n\n let scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get() {\n return scale;\n },\n set(value) {\n if (scale !== value) {\n const imageEl = gesture.$imageEl ? gesture.$imageEl[0] : undefined;\n const slideEl = gesture.$slideEl ? gesture.$slideEl[0] : undefined;\n emit('zoomChange', value, imageEl, slideEl);\n }\n scale = value;\n },\n });\n\n function 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\n // Events\n function onGestureStart(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n if (!support.gestures) {\n if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {\n return;\n }\n fakeGestureTouched = true;\n gesture.scaleStart = getDistanceBetweenTouches(e);\n }\n if (!gesture.$slideEl || !gesture.$slideEl.length) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl\n .find(`.${params.containerClass}`)\n .eq(0)\n .find('img, svg, canvas, picture, .swiper-zoom-target');\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 if (gesture.$imageEl) {\n gesture.$imageEl.transition(0);\n }\n isScaling = true;\n }\n function onGestureChange(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n if (!support.gestures) {\n if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {\n return;\n }\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches(e);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) {\n if (e.type === 'gesturechange') onGestureStart(e);\n return;\n }\n if (support.gestures) {\n zoom.scale = e.scale * currentScale;\n } else {\n zoom.scale = (gesture.scaleMove / gesture.scaleStart) * 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 function onGestureEnd(e) {\n const device = swiper.device;\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n if (!support.gestures) {\n if (!fakeGestureTouched || !fakeGestureMoved) {\n return;\n }\n if (\n e.type !== 'touchend' ||\n (e.type === 'touchend' && e.changedTouches.length < 2 && !device.android)\n ) {\n return;\n }\n fakeGestureTouched = false;\n 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\n .transition(swiper.params.speed)\n .transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n currentScale = zoom.scale;\n isScaling = false;\n if (zoom.scale === 1) gesture.$slideEl = undefined;\n }\n function onTouchStart(e) {\n const device = swiper.device;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) 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 function onTouchMove(e) {\n const zoom = swiper.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 = getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n image.startY = 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 }\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 && !isScaling) {\n if (\n swiper.isHorizontal() &&\n ((Math.floor(image.minX) === Math.floor(image.startX) &&\n image.touchesCurrent.x < image.touchesStart.x) ||\n (Math.floor(image.maxX) === Math.floor(image.startX) &&\n image.touchesCurrent.x > image.touchesStart.x))\n ) {\n image.isTouched = false;\n return;\n }\n if (\n !swiper.isHorizontal() &&\n ((Math.floor(image.minY) === Math.floor(image.startY) &&\n image.touchesCurrent.y < image.touchesStart.y) ||\n (Math.floor(image.maxY) === Math.floor(image.startY) &&\n image.touchesCurrent.y > image.touchesStart.y))\n ) {\n image.isTouched = false;\n return;\n }\n }\n if (e.cancelable) {\n e.preventDefault();\n }\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 =\n (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y =\n (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 function onTouchEnd() {\n const zoom = swiper.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)\n momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0)\n 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\n .transition(momentumDuration)\n .transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n function onTransitionEnd() {\n const zoom = swiper.zoom;\n if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n if (gesture.$imageEl) {\n gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n }\n if (gesture.$imageWrapEl) {\n gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n }\n\n zoom.scale = 1;\n currentScale = 1;\n\n gesture.$slideEl = undefined;\n gesture.$imageEl = undefined;\n gesture.$imageWrapEl = undefined;\n }\n }\n\n function zoomIn(e) {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (e && e.target) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n }\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n }\n\n gesture.$imageEl = gesture.$slideEl\n .find(`.${params.containerClass}`)\n .eq(0)\n .find('img, svg, canvas, picture, .swiper-zoom-target');\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n if (\n !gesture.$imageEl ||\n gesture.$imageEl.length === 0 ||\n !gesture.$imageWrapEl ||\n gesture.$imageWrapEl.length === 0\n )\n return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.touchAction = 'none';\n }\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 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 + window.scrollX;\n offsetY = gesture.$slideEl.offset().top + window.scrollY;\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\n .transition(300)\n .transform(`translate3d(${translateX}px, ${translateY}px,0)`);\n gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n }\n function zoomOut() {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n gesture.$imageEl = gesture.$slideEl\n .find(`.${params.containerClass}`)\n .eq(0)\n .find('img, svg, canvas, picture, .swiper-zoom-target');\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n if (\n !gesture.$imageEl ||\n gesture.$imageEl.length === 0 ||\n !gesture.$imageWrapEl ||\n gesture.$imageWrapEl.length === 0\n )\n return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.style.touchAction = '';\n }\n zoom.scale = 1;\n 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 // Toggle Zoom\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoomOut();\n } else {\n // Zoom In\n zoomIn(e);\n }\n }\n\n function getListeners() {\n const support = swiper.support;\n const passiveListener =\n swiper.touchEvents.start === 'touchstart' &&\n support.passiveListener &&\n swiper.params.passiveListeners\n ? { passive: true, capture: false }\n : false;\n const activeListenerWithCapture = support.passiveListener\n ? { passive: false, capture: true }\n : true;\n return { passiveListener, activeListenerWithCapture };\n }\n\n function getSlideSelector() {\n return `.${swiper.params.slideClass}`;\n }\n\n function toggleGestures(method) {\n const { passiveListener } = getListeners();\n const slideSelector = getSlideSelector();\n swiper.$wrapperEl[method]('gesturestart', slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl[method]('gesturechange', slideSelector, onGestureChange, passiveListener);\n swiper.$wrapperEl[method]('gestureend', slideSelector, onGestureEnd, passiveListener);\n }\n function enableGestures() {\n if (gesturesEnabled) return;\n gesturesEnabled = true;\n toggleGestures('on');\n }\n function disableGestures() {\n if (!gesturesEnabled) return;\n gesturesEnabled = false;\n toggleGestures('off');\n }\n\n // Attach/Detach Events\n function enable() {\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n const support = swiper.support;\n const { passiveListener, activeListenerWithCapture } = getListeners();\n const slideSelector = getSlideSelector();\n\n // Scale image\n if (support.gestures) {\n swiper.$wrapperEl.on(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.on(\n swiper.touchEvents.start,\n slideSelector,\n onGestureStart,\n passiveListener,\n );\n swiper.$wrapperEl.on(\n swiper.touchEvents.move,\n slideSelector,\n onGestureChange,\n activeListenerWithCapture,\n );\n swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.on(\n swiper.touchEvents.cancel,\n slideSelector,\n onGestureEnd,\n passiveListener,\n );\n }\n }\n\n // Move image\n swiper.$wrapperEl.on(\n swiper.touchEvents.move,\n `.${swiper.params.zoom.containerClass}`,\n onTouchMove,\n activeListenerWithCapture,\n );\n }\n function disable() {\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n const support = swiper.support;\n zoom.enabled = false;\n\n const { passiveListener, activeListenerWithCapture } = getListeners();\n const slideSelector = getSlideSelector();\n\n // Scale image\n if (support.gestures) {\n swiper.$wrapperEl.off(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.off(\n swiper.touchEvents.start,\n slideSelector,\n onGestureStart,\n passiveListener,\n );\n swiper.$wrapperEl.off(\n swiper.touchEvents.move,\n slideSelector,\n onGestureChange,\n activeListenerWithCapture,\n );\n swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.off(\n swiper.touchEvents.cancel,\n slideSelector,\n onGestureEnd,\n passiveListener,\n );\n }\n }\n\n // Move image\n swiper.$wrapperEl.off(\n swiper.touchEvents.move,\n `.${swiper.params.zoom.containerClass}`,\n onTouchMove,\n activeListenerWithCapture,\n );\n }\n\n on('init', () => {\n if (swiper.params.zoom.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n disable();\n });\n on('touchStart', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchStart(e);\n });\n on('touchEnd', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchEnd(e);\n });\n on('doubleTap', (_s, e) => {\n if (\n !swiper.animating &&\n swiper.params.zoom.enabled &&\n swiper.zoom.enabled &&\n swiper.params.zoom.toggle\n ) {\n zoomToggle(e);\n }\n });\n on('transitionEnd', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n onTransitionEnd();\n }\n });\n on('slideChange', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n onTransitionEnd();\n }\n });\n\n Object.assign(swiper.zoom, {\n enable,\n disable,\n in: zoomIn,\n out: zoomOut,\n toggle: zoomToggle,\n });\n}\n","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\n\nexport default function Lazy({ swiper, extendParams, on, emit }) {\n extendParams({\n lazy: {\n checkInView: false,\n enabled: false,\n loadPrevNext: false,\n loadPrevNextAmount: 1,\n loadOnTransitionStart: false,\n scrollingElement: '',\n\n elementClass: 'swiper-lazy',\n loadingClass: 'swiper-lazy-loading',\n loadedClass: 'swiper-lazy-loaded',\n preloaderClass: 'swiper-lazy-preloader',\n },\n });\n\n swiper.lazy = {};\n\n let scrollHandlerAttached = false;\n let initialImageLoaded = false;\n\n function loadInSlide(index, loadInDuplicate = true) {\n const params = swiper.params.lazy;\n if (typeof index === '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(\n `.${swiper.params.slideClass}[data-swiper-slide-index=\"${index}\"]`,\n )\n : swiper.slides.eq(index);\n\n const $images = $slideEl.find(\n `.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`,\n );\n if (\n $slideEl.hasClass(params.elementClass) &&\n !$slideEl.hasClass(params.loadedClass) &&\n !$slideEl.hasClass(params.loadingClass)\n ) {\n $images.push($slideEl[0]);\n }\n if ($images.length === 0) return;\n\n $images.each((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 const $pictureEl = $imageEl.parent('picture');\n\n swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, () => {\n if (\n typeof swiper === 'undefined' ||\n swiper === null ||\n !swiper ||\n (swiper && !swiper.params) ||\n swiper.destroyed\n )\n 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 ($pictureEl.length) {\n $pictureEl.children('source').each((sourceEl) => {\n const $source = $(sourceEl);\n\n if ($source.attr('data-srcset')) {\n $source.attr('srcset', $source.attr('data-srcset'));\n $source.removeAttr('data-srcset');\n }\n });\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(\n `[data-swiper-slide-index=\"${slideOriginalIndex}\"]:not(.${swiper.params.slideDuplicateClass})`,\n );\n loadInSlide(originalSlide.index(), false);\n } else {\n const duplicatedSlide = swiper.$wrapperEl.children(\n `.${swiper.params.slideDuplicateClass}[data-swiper-slide-index=\"${slideOriginalIndex}\"]`,\n );\n loadInSlide(duplicatedSlide.index(), false);\n }\n }\n emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n });\n\n emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n });\n }\n\n function load() {\n const { $wrapperEl, params: swiperParams, slides, activeIndex } = 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) {\n if (isVirtual) {\n if (\n $wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index=\"${index}\"]`)\n .length\n ) {\n return true;\n }\n } else if (slides[index]) return true;\n return false;\n }\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 (!initialImageLoaded) initialImageLoaded = true;\n if (swiper.params.watchSlidesProgress) {\n $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each((slideEl) => {\n const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n loadInSlide(index);\n });\n } else if (slidesPerView > 1) {\n for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n } else {\n 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)) loadInSlide(i);\n }\n // Prev Slides\n for (let i = minIndex; i < activeIndex; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n } else {\n const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);\n if (nextSlide.length > 0) loadInSlide(slideIndex(nextSlide));\n\n const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);\n if (prevSlide.length > 0) loadInSlide(slideIndex(prevSlide));\n }\n }\n }\n function checkInViewOnLoad() {\n const window = getWindow();\n if (!swiper || swiper.destroyed) return;\n const $scrollElement = swiper.params.lazy.scrollingElement\n ? $(swiper.params.lazy.scrollingElement)\n : $(window);\n const isWindow = $scrollElement[0] === window;\n const scrollElementWidth = isWindow ? window.innerWidth : $scrollElement[0].offsetWidth;\n const scrollElementHeight = isWindow ? window.innerHeight : $scrollElement[0].offsetHeight;\n const swiperOffset = swiper.$el.offset();\n const { rtlTranslate: rtl } = swiper;\n\n let inView = false;\n\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 &&\n point[0] <= scrollElementWidth &&\n point[1] >= 0 &&\n point[1] <= scrollElementHeight\n ) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n inView = true;\n }\n }\n\n const passiveListener =\n swiper.touchEvents.start === 'touchstart' &&\n swiper.support.passiveListener &&\n swiper.params.passiveListeners\n ? { passive: true, capture: false }\n : false;\n\n if (inView) {\n load();\n $scrollElement.off('scroll', checkInViewOnLoad, passiveListener);\n } else if (!scrollHandlerAttached) {\n scrollHandlerAttached = true;\n $scrollElement.on('scroll', checkInViewOnLoad, passiveListener);\n }\n }\n\n on('beforeInit', () => {\n if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n swiper.params.preloadImages = false;\n }\n });\n on('init', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('scroll', () => {\n if (\n swiper.params.freeMode &&\n swiper.params.freeMode.enabled &&\n !swiper.params.freeMode.sticky\n ) {\n load();\n }\n });\n on('scrollbarDragMove resize _freeModeNoMomentumRelease', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('transitionStart', () => {\n if (swiper.params.lazy.enabled) {\n if (\n swiper.params.lazy.loadOnTransitionStart ||\n (!swiper.params.lazy.loadOnTransitionStart && !initialImageLoaded)\n ) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n }\n });\n on('transitionEnd', () => {\n if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('slideChange', () => {\n const { lazy, cssMode, watchSlidesProgress, touchReleaseOnEdges, resistanceRatio } =\n swiper.params;\n if (\n lazy.enabled &&\n (cssMode || (watchSlidesProgress && (touchReleaseOnEdges || resistanceRatio === 0)))\n ) {\n load();\n }\n });\n\n Object.assign(swiper.lazy, {\n load,\n loadInSlide,\n });\n}\n","/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nimport { nextTick } from '../../shared/utils.js';\n\nexport default function Controller({ swiper, extendParams, on }) {\n extendParams({\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide', // or 'container'\n },\n });\n\n swiper.controller = {\n control: undefined,\n };\n\n 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 (\n ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1]\n );\n };\n return this;\n }\n // xxx: for now i will just save one spline function to to\n function getInterpolateFunction(c) {\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop\n ? new LinearSpline(swiper.slidesGrid, c.slidesGrid)\n : new LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n }\n function setTranslate(_t, byController) {\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n const Swiper = swiper.constructor;\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 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 =\n (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 function setTransition(duration, byController) {\n const Swiper = swiper.constructor;\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 if (c.params.autoHeight) {\n nextTick(() => {\n c.updateAutoHeight();\n });\n }\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\n function removeSpline() {\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n }\n on('beforeInit', () => {\n swiper.controller.control = swiper.params.controller.control;\n });\n on('update', () => {\n removeSpline();\n });\n on('resize', () => {\n removeSpline();\n });\n on('observerUpdate', () => {\n removeSpline();\n });\n on('setTranslate', (_s, translate, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTranslate(translate, byController);\n });\n on('setTransition', (_s, duration, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTransition(duration, byController);\n });\n\n Object.assign(swiper.controller, {\n setTranslate,\n setTransition,\n });\n}\n","import classesToSelector from '../../shared/classes-to-selector.js';\nimport $ from '../../shared/dom.js';\n\nexport default function A11y({ swiper, extendParams, on }) {\n extendParams({\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 slideLabelMessage: '{{index}} / {{slidesLength}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group',\n },\n });\n\n let liveRegion = null;\n\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n }\n\n function getRandomNumber(size = 16) {\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n function makeElFocusable($el) {\n $el.attr('tabIndex', '0');\n }\n function makeElNotFocusable($el) {\n $el.attr('tabIndex', '-1');\n }\n function addElRole($el, role) {\n $el.attr('role', role);\n }\n function addElRoleDescription($el, description) {\n $el.attr('aria-roledescription', description);\n }\n function addElControls($el, controls) {\n $el.attr('aria-controls', controls);\n }\n function addElLabel($el, label) {\n $el.attr('aria-label', label);\n }\n function addElId($el, id) {\n $el.attr('id', id);\n }\n function addElLive($el, live) {\n $el.attr('aria-live', live);\n }\n function disableEl($el) {\n $el.attr('aria-disabled', true);\n }\n function enableEl($el) {\n $el.attr('aria-disabled', false);\n }\n\n function onEnterOrSpaceKey(e) {\n if (e.keyCode !== 13 && e.keyCode !== 32) return;\n const params = swiper.params.a11y;\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 notify(params.lastSlideMessage);\n } else {\n 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 notify(params.firstSlideMessage);\n } else {\n notify(params.prevSlideMessage);\n }\n }\n\n if (\n swiper.pagination &&\n $targetEl.is(classesToSelector(swiper.params.pagination.bulletClass))\n ) {\n $targetEl[0].click();\n }\n }\n\n function updateNavigation() {\n if (swiper.params.loop || !swiper.navigation) return;\n const { $nextEl, $prevEl } = swiper.navigation;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n disableEl($prevEl);\n makeElNotFocusable($prevEl);\n } else {\n enableEl($prevEl);\n makeElFocusable($prevEl);\n }\n }\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n disableEl($nextEl);\n makeElNotFocusable($nextEl);\n } else {\n enableEl($nextEl);\n makeElFocusable($nextEl);\n }\n }\n }\n\n function hasPagination() {\n return (\n swiper.pagination &&\n swiper.params.pagination.clickable &&\n swiper.pagination.bullets &&\n swiper.pagination.bullets.length\n );\n }\n\n function updatePagination() {\n const params = swiper.params.a11y;\n if (hasPagination()) {\n swiper.pagination.bullets.each((bulletEl) => {\n const $bulletEl = $(bulletEl);\n makeElFocusable($bulletEl);\n if (!swiper.params.pagination.renderBullet) {\n addElRole($bulletEl, 'button');\n addElLabel(\n $bulletEl,\n params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1),\n );\n }\n });\n }\n }\n\n const initNavEl = ($el, wrapperId, message) => {\n makeElFocusable($el);\n if ($el[0].tagName !== 'BUTTON') {\n addElRole($el, 'button');\n $el.on('keydown', onEnterOrSpaceKey);\n }\n addElLabel($el, message);\n addElControls($el, wrapperId);\n };\n\n function init() {\n const params = swiper.params.a11y;\n\n swiper.$el.append(liveRegion);\n\n // Container\n const $containerEl = swiper.$el;\n if (params.containerRoleDescriptionMessage) {\n addElRoleDescription($containerEl, params.containerRoleDescriptionMessage);\n }\n if (params.containerMessage) {\n addElLabel($containerEl, params.containerMessage);\n }\n\n // Wrapper\n const $wrapperEl = swiper.$wrapperEl;\n const wrapperId = $wrapperEl.attr('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n addElId($wrapperEl, wrapperId);\n addElLive($wrapperEl, live);\n\n // Slide\n if (params.itemRoleDescriptionMessage) {\n addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage);\n }\n addElRole($(swiper.slides), params.slideRole);\n\n const slidesLength = swiper.params.loop\n ? swiper.slides.filter((el) => !el.classList.contains(swiper.params.slideDuplicateClass))\n .length\n : swiper.slides.length;\n swiper.slides.each((slideEl, index) => {\n const $slideEl = $(slideEl);\n const slideIndex = swiper.params.loop\n ? parseInt($slideEl.attr('data-swiper-slide-index'), 10)\n : index;\n const ariaLabelMessage = params.slideLabelMessage\n .replace(/\\{\\{index\\}\\}/, slideIndex + 1)\n .replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n addElLabel($slideEl, ariaLabelMessage);\n });\n\n // Navigation\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\n if ($nextEl && $nextEl.length) {\n initNavEl($nextEl, wrapperId, params.nextSlideMessage);\n }\n if ($prevEl && $prevEl.length) {\n initNavEl($prevEl, wrapperId, params.prevSlideMessage);\n }\n\n // Pagination\n if (hasPagination()) {\n swiper.pagination.$el.on(\n 'keydown',\n classesToSelector(swiper.params.pagination.bulletClass),\n onEnterOrSpaceKey,\n );\n }\n }\n function destroy() {\n if (liveRegion && liveRegion.length > 0) 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', onEnterOrSpaceKey);\n }\n if ($prevEl) {\n $prevEl.off('keydown', onEnterOrSpaceKey);\n }\n\n // Pagination\n if (hasPagination()) {\n swiper.pagination.$el.off(\n 'keydown',\n classesToSelector(swiper.params.pagination.bulletClass),\n onEnterOrSpaceKey,\n );\n }\n }\n\n on('beforeInit', () => {\n liveRegion = $(\n ``,\n );\n });\n\n on('afterInit', () => {\n if (!swiper.params.a11y.enabled) return;\n init();\n updateNavigation();\n });\n on('toEdge', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('fromEdge', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('paginationUpdate', () => {\n if (!swiper.params.a11y.enabled) return;\n updatePagination();\n });\n on('destroy', () => {\n if (!swiper.params.a11y.enabled) return;\n destroy();\n });\n}\n","import { getWindow } from 'ssr-window';\n\nexport default function History({ swiper, extendParams, on }) {\n extendParams({\n history: {\n enabled: false,\n root: '',\n replaceState: false,\n key: 'slides',\n },\n });\n\n let initialized = false;\n let paths = {};\n\n const slugify = (text) => {\n return text\n .toString()\n .replace(/\\s+/g, '-')\n .replace(/[^\\w-]+/g, '')\n .replace(/--+/g, '-')\n .replace(/^-+/, '')\n .replace(/-+$/, '');\n };\n\n const getPathValues = (urlOverride) => {\n const window = getWindow();\n let location;\n if (urlOverride) {\n location = new URL(urlOverride);\n } else {\n location = window.location;\n }\n const pathArray = location.pathname\n .slice(1)\n .split('/')\n .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 const setHistory = (key, index) => {\n const window = getWindow();\n if (!initialized || !swiper.params.history.enabled) return;\n let location;\n if (swiper.params.url) {\n location = new URL(swiper.params.url);\n } else {\n location = window.location;\n }\n const slide = swiper.slides.eq(index);\n let value = slugify(slide.attr('data-history'));\n if (swiper.params.history.root.length > 0) {\n let root = swiper.params.history.root;\n if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);\n value = `${root}/${key}/${value}`;\n } else if (!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\n const scrollToSlide = (speed, value, runCallbacks) => {\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 = slugify(slide.attr('data-history'));\n if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n };\n\n const setHistoryPopState = () => {\n paths = getPathValues(swiper.params.url);\n scrollToSlide(swiper.params.speed, swiper.paths.value, false);\n };\n\n const init = () => {\n const window = getWindow();\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 initialized = true;\n paths = getPathValues(swiper.params.url);\n if (!paths.key && !paths.value) return;\n scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n };\n const destroy = () => {\n const window = getWindow();\n if (!swiper.params.history.replaceState) {\n window.removeEventListener('popstate', setHistoryPopState);\n }\n };\n\n on('init', () => {\n if (swiper.params.history.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.history.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n}\n","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\n\nexport default function HashNavigation({ swiper, extendParams, emit, on }) {\n let initialized = false;\n const document = getDocument();\n const window = getWindow();\n extendParams({\n hashNavigation: {\n enabled: false,\n replaceState: false,\n watchState: false,\n },\n });\n const onHashChange = () => {\n emit('hashChange');\n const newHash = document.location.hash.replace('#', '');\n const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n if (newHash !== activeSlideHash) {\n const newIndex = swiper.$wrapperEl\n .children(`.${swiper.params.slideClass}[data-hash=\"${newHash}\"]`)\n .index();\n if (typeof newIndex === 'undefined') return;\n swiper.slideTo(newIndex);\n }\n };\n const setHash = () => {\n if (!initialized || !swiper.params.hashNavigation.enabled) return;\n if (\n swiper.params.hashNavigation.replaceState &&\n window.history &&\n window.history.replaceState\n ) {\n window.history.replaceState(\n null,\n null,\n `#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || '',\n );\n emit('hashSet');\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 emit('hashSet');\n }\n };\n const init = () => {\n if (\n !swiper.params.hashNavigation.enabled ||\n (swiper.params.history && swiper.params.history.enabled)\n )\n return;\n 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 = slide.index();\n swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n }\n }\n }\n if (swiper.params.hashNavigation.watchState) {\n $(window).on('hashchange', onHashChange);\n }\n };\n const destroy = () => {\n if (swiper.params.hashNavigation.watchState) {\n $(window).off('hashchange', onHashChange);\n }\n };\n\n on('init', () => {\n if (swiper.params.hashNavigation.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.hashNavigation.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHash();\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHash();\n }\n });\n}\n","/* eslint no-underscore-dangle: \"off\" */\n/* eslint no-use-before-define: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport { nextTick } from '../../shared/utils.js';\n\nexport default function Autoplay({ swiper, extendParams, on, emit }) {\n let timeout;\n\n swiper.autoplay = {\n running: false,\n paused: false,\n };\n\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false,\n },\n });\n\n function run() {\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 clearTimeout(timeout);\n timeout = nextTick(() => {\n let autoplayResult;\n if (swiper.params.autoplay.reverseDirection) {\n if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isBeginning) {\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(\n swiper.slides.length - 1,\n swiper.params.speed,\n true,\n true,\n );\n emit('autoplay');\n } else {\n stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isEnd) {\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n if (swiper.params.cssMode && swiper.autoplay.running) run();\n else if (autoplayResult === false) {\n run();\n }\n }, delay);\n }\n function start() {\n if (typeof timeout !== 'undefined') return false;\n if (swiper.autoplay.running) return false;\n swiper.autoplay.running = true;\n emit('autoplayStart');\n run();\n return true;\n }\n function stop() {\n if (!swiper.autoplay.running) return false;\n if (typeof timeout === 'undefined') return false;\n\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n swiper.autoplay.running = false;\n emit('autoplayStop');\n return true;\n }\n function pause(speed) {\n if (!swiper.autoplay.running) return;\n if (swiper.autoplay.paused) return;\n if (timeout) clearTimeout(timeout);\n swiper.autoplay.paused = true;\n if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n swiper.autoplay.paused = false;\n run();\n } else {\n ['transitionend', 'webkitTransitionEnd'].forEach((event) => {\n swiper.$wrapperEl[0].addEventListener(event, onTransitionEnd);\n });\n }\n }\n function onVisibilityChange() {\n const document = getDocument();\n if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n pause();\n }\n if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n run();\n swiper.autoplay.paused = false;\n }\n }\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n if (e.target !== swiper.$wrapperEl[0]) return;\n ['transitionend', 'webkitTransitionEnd'].forEach((event) => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n swiper.autoplay.paused = false;\n if (!swiper.autoplay.running) {\n stop();\n } else {\n run();\n }\n }\n function onMouseEnter() {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n pause();\n }\n\n ['transitionend', 'webkitTransitionEnd'].forEach((event) => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n }\n function onMouseLeave() {\n if (swiper.params.autoplay.disableOnInteraction) {\n return;\n }\n swiper.autoplay.paused = false;\n run();\n }\n function attachMouseEvents() {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.$el.on('mouseenter', onMouseEnter);\n swiper.$el.on('mouseleave', onMouseLeave);\n }\n }\n function detachMouseEvents() {\n swiper.$el.off('mouseenter', onMouseEnter);\n swiper.$el.off('mouseleave', onMouseLeave);\n }\n\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n start();\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n attachMouseEvents();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.pause(speed);\n } else {\n stop();\n }\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n pause();\n }\n }\n });\n on('touchEnd', () => {\n if (\n swiper.params.cssMode &&\n swiper.autoplay.paused &&\n !swiper.params.autoplay.disableOnInteraction\n ) {\n run();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n if (swiper.autoplay.running) {\n stop();\n }\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n });\n\n Object.assign(swiper.autoplay, {\n pause,\n run,\n start,\n stop,\n });\n}\n","import { isObject } from '../../shared/utils.js';\nimport $ from '../../shared/dom.js';\n\nexport default function Thumb({ swiper, extendParams, on }) {\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs',\n },\n });\n\n let initialized = false;\n let swiperCreated = false;\n\n swiper.thumbs = {\n swiper: null,\n };\n\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass))\n return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n if (swiper.params.loop) {\n let currentIndex = swiper.activeIndex;\n if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n currentIndex = swiper.activeIndex;\n }\n const prevIndex = swiper.slides\n .eq(currentIndex)\n .prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`)\n .eq(0)\n .index();\n const nextIndex = swiper.slides\n .eq(currentIndex)\n .nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`)\n .eq(0)\n .index();\n if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;\n else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;\n else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;\n else slideToIndex = prevIndex;\n }\n swiper.slideTo(slideToIndex);\n }\n\n function init() {\n const { thumbs: thumbsParams } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Object.assign(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n });\n Object.assign(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n });\n } else if (isObject(thumbsParams.swiper)) {\n const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n Object.assign(thumbsSwiperParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n });\n swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n swiperCreated = true;\n }\n swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n\n const slidesPerView =\n thumbsSwiper.params.slidesPerView === 'auto'\n ? thumbsSwiper.slidesPerViewDynamic()\n : thumbsSwiper.params.slidesPerView;\n\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n let currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n if (thumbsSwiper.params.loop) {\n if (\n thumbsSwiper.slides\n .eq(currentThumbsIndex)\n .hasClass(thumbsSwiper.params.slideDuplicateClass)\n ) {\n thumbsSwiper.loopFix();\n // eslint-disable-next-line\n thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n currentThumbsIndex = thumbsSwiper.activeIndex;\n }\n // Find actual thumbs index to slide to\n const prevThumbsIndex = thumbsSwiper.slides\n .eq(currentThumbsIndex)\n .prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`)\n .eq(0)\n .index();\n const nextThumbsIndex = thumbsSwiper.slides\n .eq(currentThumbsIndex)\n .nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`)\n .eq(0)\n .index();\n if (typeof prevThumbsIndex === 'undefined') {\n newThumbsIndex = nextThumbsIndex;\n } else if (typeof nextThumbsIndex === 'undefined') {\n newThumbsIndex = prevThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex =\n thumbsSwiper.params.slidesPerGroup > 1 ? nextThumbsIndex : currentThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = nextThumbsIndex;\n } else {\n newThumbsIndex = prevThumbsIndex;\n }\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n\n if (\n thumbsSwiper.visibleSlidesIndexes &&\n thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0\n ) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (\n newThumbsIndex > currentThumbsIndex &&\n thumbsSwiper.params.slidesPerGroup === 1\n ) {\n // newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n }\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n\n // Activate thumbs\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n\n thumbsToActivate = Math.floor(thumbsToActivate);\n\n thumbsSwiper.slides.removeClass(thumbActiveClass);\n if (\n thumbsSwiper.params.loop ||\n (thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled)\n ) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.$wrapperEl\n .children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`)\n .addClass(thumbActiveClass);\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);\n }\n }\n }\n\n on('beforeInit', () => {\n const { thumbs } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n init();\n update(true);\n });\n on('slideChange update resize observerUpdate', () => {\n if (!swiper.thumbs.swiper) return;\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n if (swiperCreated && thumbsSwiper) {\n thumbsSwiper.destroy();\n }\n });\n\n Object.assign(swiper.thumbs, {\n init,\n update,\n });\n}\n","import { now } from '../../shared/utils.js';\n\nexport default function freeMode({ swiper, extendParams, emit, once }) {\n extendParams({\n freeMode: {\n enabled: false,\n momentum: true,\n momentumRatio: 1,\n momentumBounce: true,\n momentumBounceRatio: 1,\n momentumVelocityRatio: 1,\n sticky: false,\n minimumVelocity: 0.02,\n },\n });\n\n function onTouchMove() {\n const { touchEventsData: data, touches } = swiper;\n // Velocity\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime,\n });\n }\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: now(),\n });\n }\n\n function onTouchEnd({ currentPos }) {\n const { params, $wrapperEl, rtlTranslate: rtl, snapGrid, touchEventsData: data } = swiper;\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n 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.freeMode.momentum) {\n if (data.velocities.length > 1) {\n const lastMoveEvent = data.velocities.pop();\n const velocityEvent = data.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.freeMode.minimumVelocity) {\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 || now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n swiper.velocity *= params.freeMode.momentumVelocityRatio;\n\n data.velocities.length = 0;\n let momentumDuration = 1000 * params.freeMode.momentumRatio;\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.freeMode.momentumBounceRatio;\n let needsLoopFix;\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.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.freeMode.momentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeMode.sticky) {\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 (\n Math.abs(snapGrid[nextSlide] - newPosition) <\n Math.abs(snapGrid[nextSlide - 1] - newPosition) ||\n swiper.swipeDirection === 'next'\n ) {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n newPosition = -newPosition;\n }\n if (needsLoopFix) {\n 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 if (params.freeMode.sticky) {\n // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (params.freeMode.momentumBounce && 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.allowMomentumBounce) return;\n emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(() => {\n swiper.setTranslate(afterBouncePosition);\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n emit('_freeModeNoMomentumRelease');\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.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n } else if (params.freeMode) {\n emit('_freeModeNoMomentumRelease');\n }\n\n if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n }\n\n Object.assign(swiper, {\n freeMode: {\n onTouchMove,\n onTouchEnd,\n },\n });\n}\n","export default function Grid({ swiper, extendParams }) {\n extendParams({\n grid: {\n rows: 1,\n fill: 'column',\n },\n });\n\n let slidesNumberEvenToRows;\n let slidesPerRow;\n let numFullColumns;\n\n const initSlides = (slidesLength) => {\n const { slidesPerView } = swiper.params;\n const { rows, fill } = swiper.params.grid;\n slidesPerRow = slidesNumberEvenToRows / rows;\n numFullColumns = Math.floor(slidesLength / rows);\n if (Math.floor(slidesLength / rows) === slidesLength / rows) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;\n }\n if (slidesPerView !== 'auto' && fill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);\n }\n };\n\n const updateSlide = (i, slide, slidesLength, getDirectionLabel) => {\n const { slidesPerGroup, spaceBetween } = swiper.params;\n const { rows, fill } = swiper.params.grid;\n // Set slides order\n let newSlideOrderIndex;\n let column;\n let row;\n if (fill === 'row' && slidesPerGroup > 1) {\n const groupIndex = Math.floor(i / (slidesPerGroup * rows));\n const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;\n const columnsInGroup =\n groupIndex === 0\n ? slidesPerGroup\n : Math.min(\n Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows),\n slidesPerGroup,\n );\n row = Math.floor(slideIndexInGroup / columnsInGroup);\n column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;\n\n newSlideOrderIndex = column + (row * slidesNumberEvenToRows) / rows;\n slide.css({\n '-webkit-order': newSlideOrderIndex,\n order: newSlideOrderIndex,\n });\n } else if (fill === 'column') {\n column = Math.floor(i / rows);\n row = i - column * rows;\n if (column > numFullColumns || (column === numFullColumns && row === rows - 1)) {\n row += 1;\n if (row >= rows) {\n row = 0;\n column += 1;\n }\n }\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide.css(\n getDirectionLabel('margin-top'),\n row !== 0 ? spaceBetween && `${spaceBetween}px` : '',\n );\n };\n\n const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => {\n const { spaceBetween, centeredSlides, roundLengths } = swiper.params;\n const { rows } = swiper.params.grid;\n swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;\n swiper.$wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + spaceBetween}px`,\n });\n if (centeredSlides) {\n snapGrid.splice(0, snapGrid.length);\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n }\n snapGrid.push(...newSlidesGrid);\n }\n };\n\n swiper.grid = {\n initSlides,\n updateSlide,\n updateWrapperSize,\n };\n}\n","import appendSlide from './methods/appendSlide.js';\nimport prependSlide from './methods/prependSlide.js';\nimport addSlide from './methods/addSlide.js';\nimport removeSlide from './methods/removeSlide.js';\nimport removeAllSlides from './methods/removeAllSlides.js';\n\nexport default function Manipulation({ swiper }) {\n Object.assign(swiper, {\n appendSlide: appendSlide.bind(swiper),\n prependSlide: prependSlide.bind(swiper),\n addSlide: addSlide.bind(swiper),\n removeSlide: removeSlide.bind(swiper),\n removeAllSlides: removeAllSlides.bind(swiper),\n });\n}\n","import effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\n\nexport default function EffectFade({ swiper, extendParams, on }) {\n extendParams({\n fadeEffect: {\n crossFade: false,\n transformEl: null,\n },\n });\n\n const setTranslate = () => {\n const { slides } = swiper;\n const params = swiper.params.fadeEffect;\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = swiper.slides.eq(i);\n const offset = $slideEl[0].swiperSlideOffset;\n let tx = -offset;\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\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl\n .css({\n opacity: slideOpacity,\n })\n .transform(`translate3d(${tx}px, ${ty}px, 0px)`);\n }\n };\n const setTransition = (duration) => {\n const { transformEl } = swiper.params.fadeEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration);\n effectVirtualTransitionEnd({ swiper, duration, transformEl, allSlides: true });\n };\n\n effectInit({\n effect: 'fade',\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode,\n }),\n });\n}\n","import $ from '../../shared/dom.js';\nimport effectInit from '../../shared/effect-init.js';\n\nexport default function EffectCube({ swiper, extendParams, on }) {\n extendParams({\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94,\n },\n });\n\n const setTranslate = () => {\n const {\n $el,\n $wrapperEl,\n slides,\n width: swiperWidth,\n height: swiperHeight,\n rtlTranslate: rtl,\n size: swiperSize,\n browser,\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 = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${\n isHorizontal ? slideAngle : 0\n }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);\n if (params.slideShadows) {\n // Set shadows\n let shadowBefore = isHorizontal\n ? $slideEl.find('.swiper-slide-shadow-left')\n : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = isHorizontal\n ? $slideEl.find('.swiper-slide-shadow-right')\n : $slideEl.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $(\n `
`,\n );\n $slideEl.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $(\n `
`,\n );\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 'transform-origin': `50% 50% -${swiperSize / 2}px`,\n });\n\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl.transform(\n `translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${\n -swiperWidth / 2\n }px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`,\n );\n } else {\n const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n const multiplier =\n 1.5 -\n (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2 +\n Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2);\n const scale1 = params.shadowScale;\n const scale2 = params.shadowScale / multiplier;\n const offset = params.shadowOffset;\n $cubeShadowEl.transform(\n `scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${\n -swiperHeight / 2 / scale2\n }px) rotateX(-90deg)`,\n );\n }\n }\n const zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0;\n $wrapperEl.transform(\n `translate3d(0px,0,${zFactor}px) rotateX(${\n swiper.isHorizontal() ? 0 : wrapperRotate\n }deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`,\n );\n };\n const setTransition = (duration) => {\n const { $el, slides } = swiper;\n slides\n .transition(duration)\n .find(\n '.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left',\n )\n .transition(duration);\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n $el.find('.swiper-cube-shadow').transition(duration);\n }\n };\n\n effectInit({\n effect: 'cube',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n resistanceRatio: 0,\n spaceBetween: 0,\n centeredSlides: false,\n virtualTranslate: true,\n }),\n });\n}\n","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\n\nexport default function EffectFlip({ swiper, extendParams, on }) {\n extendParams({\n flipEffect: {\n slideShadows: true,\n limitRotation: true,\n transformEl: null,\n },\n });\n\n const setTranslate = () => {\n const { slides, rtlTranslate: rtl } = swiper;\n const params = swiper.params.flipEffect;\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 = $slideEl[0].swiperSlideOffset;\n const rotate = -180 * progress;\n let rotateY = rotate;\n let rotateX = 0;\n let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;\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 (params.slideShadows) {\n // Set shadows\n let shadowBefore = swiper.isHorizontal()\n ? $slideEl.find('.swiper-slide-shadow-left')\n : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = swiper.isHorizontal()\n ? $slideEl.find('.swiper-slide-shadow-right')\n : $slideEl.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = createShadow(params, $slideEl, swiper.isHorizontal() ? 'left' : 'top');\n }\n if (shadowAfter.length === 0) {\n shadowAfter = createShadow(params, $slideEl, swiper.isHorizontal() ? 'right' : 'bottom');\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 const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform);\n }\n };\n\n const setTransition = (duration) => {\n const { transformEl } = swiper.params.flipEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements\n .transition(duration)\n .find(\n '.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left',\n )\n .transition(duration);\n effectVirtualTransitionEnd({ swiper, duration, transformEl });\n };\n\n effectInit({\n effect: 'flip',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode,\n }),\n });\n}\n","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\n\nexport default function EffectCoverflow({ swiper, extendParams, on }) {\n extendParams({\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n scale: 1,\n modifier: 1,\n slideShadows: true,\n transformEl: null,\n },\n });\n\n const setTranslate = () => {\n const { width: swiperWidth, height: swiperHeight, slides, slidesSizesGrid } = swiper;\n const params = swiper.params.coverflowEffect;\n const isHorizontal = swiper.isHorizontal();\n const transform = swiper.translate;\n const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + 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 =\n ((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 stretch = params.stretch;\n // Allow percentage to make a relative stretch for responsive sliders\n if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n stretch = (parseFloat(params.stretch) / 100) * slideSize;\n }\n let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n\n let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);\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 if (Math.abs(scale) < 0.001) scale = 0;\n\n const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(slideTransform);\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n\n if (params.slideShadows) {\n // Set shadows\n let $shadowBeforeEl = isHorizontal\n ? $slideEl.find('.swiper-slide-shadow-left')\n : $slideEl.find('.swiper-slide-shadow-top');\n let $shadowAfterEl = isHorizontal\n ? $slideEl.find('.swiper-slide-shadow-right')\n : $slideEl.find('.swiper-slide-shadow-bottom');\n if ($shadowBeforeEl.length === 0) {\n $shadowBeforeEl = createShadow(params, $slideEl, isHorizontal ? 'left' : 'top');\n }\n if ($shadowAfterEl.length === 0) {\n $shadowAfterEl = createShadow(params, $slideEl, isHorizontal ? 'right' : 'bottom');\n }\n if ($shadowBeforeEl.length)\n $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if ($shadowAfterEl.length)\n $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n }\n }\n };\n const setTransition = (duration) => {\n const { transformEl } = swiper.params.coverflowEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements\n .transition(duration)\n .find(\n '.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left',\n )\n .transition(duration);\n };\n\n effectInit({\n effect: 'coverflow',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n }),\n });\n}\n","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\n\nexport default function EffectCreative({ swiper, extendParams, on }) {\n extendParams({\n creativeEffect: {\n transformEl: null,\n limitProgress: 1,\n shadowPerProgress: false,\n progressMultiplier: 1,\n perspective: true,\n prev: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1,\n },\n next: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1,\n },\n },\n });\n\n const getTranslateValue = (value) => {\n if (typeof value === 'string') return value;\n return `${value}px`;\n };\n\n const setTranslate = () => {\n const { slides } = swiper;\n const params = swiper.params.creativeEffect;\n const { progressMultiplier: multiplier } = params;\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideProgress = $slideEl[0].progress;\n const progress = Math.min(\n Math.max($slideEl[0].progress, -params.limitProgress),\n params.limitProgress,\n );\n const offset = $slideEl[0].swiperSlideOffset;\n const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];\n const r = [0, 0, 0];\n let custom = false;\n if (!swiper.isHorizontal()) {\n t[1] = t[0];\n t[0] = 0;\n }\n let data = {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n scale: 1,\n opacity: 1,\n };\n if (progress < 0) {\n data = params.next;\n custom = true;\n } else if (progress > 0) {\n data = params.prev;\n custom = true;\n }\n // set translate\n t.forEach((value, index) => {\n t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(\n progress * multiplier,\n )}))`;\n });\n // set rotates\n r.forEach((value, index) => {\n r[index] = data.rotate[index] * Math.abs(progress * multiplier);\n });\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n\n const translateString = t.join(', ');\n const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`;\n const scaleString =\n progress < 0\n ? `scale(${1 + (1 - data.scale) * progress * multiplier})`\n : `scale(${1 - (1 - data.scale) * progress * multiplier})`;\n const opacityString =\n progress < 0\n ? 1 + (1 - data.opacity) * progress * multiplier\n : 1 - (1 - data.opacity) * progress * multiplier;\n const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`;\n\n // Set shadows\n if ((custom && data.shadow) || !custom) {\n let $shadowEl = $slideEl.children('.swiper-slide-shadow');\n if ($shadowEl.length === 0 && data.shadow) {\n $shadowEl = createShadow(params, $slideEl);\n }\n if ($shadowEl.length) {\n const shadowOpacity = params.shadowPerProgress\n ? progress * (1 / params.limitProgress)\n : progress;\n $shadowEl[0].style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);\n }\n }\n\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform).css({ opacity: opacityString });\n if (data.origin) {\n $targetEl.css('transform-origin', data.origin);\n }\n }\n };\n\n const setTransition = (duration) => {\n const { transformEl } = swiper.params.creativeEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n\n effectVirtualTransitionEnd({ swiper, duration, transformEl, allSlides: true });\n };\n\n effectInit({\n effect: 'creative',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => swiper.params.creativeEffect.perspective,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode,\n }),\n });\n}\n","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\n\nexport default function EffectCards({ swiper, extendParams, on }) {\n extendParams({\n cardsEffect: {\n slideShadows: true,\n transformEl: null,\n },\n });\n\n const setTranslate = () => {\n const { slides, activeIndex } = swiper;\n const params = swiper.params.cardsEffect;\n const { startTranslate, isTouched } = swiper.touchEventsData;\n const currentTranslate = swiper.translate;\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideProgress = $slideEl[0].progress;\n const progress = Math.min(Math.max(slideProgress, -4), 4);\n let offset = $slideEl[0].swiperSlideOffset;\n if (swiper.params.centeredSlides && !swiper.params.cssMode) {\n swiper.$wrapperEl.transform(`translateX(${swiper.minTranslate()}px)`);\n }\n if (swiper.params.centeredSlides && swiper.params.cssMode) {\n offset -= slides[0].swiperSlideOffset;\n }\n let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let tY = 0;\n const tZ = -100 * Math.abs(progress);\n let scale = 1;\n let rotate = -2 * progress;\n\n let tXAdd = 8 - Math.abs(progress) * 0.75;\n\n const isSwipeToNext =\n (i === activeIndex || i === activeIndex - 1) &&\n progress > 0 &&\n progress < 1 &&\n (isTouched || swiper.params.cssMode) &&\n currentTranslate < startTranslate;\n const isSwipeToPrev =\n (i === activeIndex || i === activeIndex + 1) &&\n progress < 0 &&\n progress > -1 &&\n (isTouched || swiper.params.cssMode) &&\n currentTranslate > startTranslate;\n if (isSwipeToNext || isSwipeToPrev) {\n const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;\n rotate += -28 * progress * subProgress;\n scale += -0.5 * subProgress;\n tXAdd += 96 * subProgress;\n tY = `${-25 * subProgress * Math.abs(progress)}%`;\n }\n\n if (progress < 0) {\n // next\n tX = `calc(${tX}px + (${tXAdd * Math.abs(progress)}%))`;\n } else if (progress > 0) {\n // prev\n tX = `calc(${tX}px + (-${tXAdd * Math.abs(progress)}%))`;\n } else {\n tX = `${tX}px`;\n }\n if (!swiper.isHorizontal()) {\n const prevY = tY;\n tY = tX;\n tX = prevY;\n }\n\n const scaleString =\n progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;\n const transform = `\n translate3d(${tX}, ${tY}, ${tZ}px)\n rotateZ(${rotate}deg)\n scale(${scaleString})\n `;\n\n if (params.slideShadows) {\n // Set shadows\n let $shadowEl = $slideEl.find('.swiper-slide-shadow');\n if ($shadowEl.length === 0) {\n $shadowEl = createShadow(params, $slideEl);\n }\n if ($shadowEl.length)\n $shadowEl[0].style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform);\n }\n };\n\n const setTransition = (duration) => {\n const { transformEl } = swiper.params.cardsEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n\n effectVirtualTransitionEnd({ swiper, duration, transformEl });\n };\n\n effectInit({\n effect: 'cards',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode,\n }),\n });\n}\n","import * as allExports from './index.js';\nimport { mixin } from './index.js';\n\n// Add all of the Underscore functions to the wrapper object.\nvar _ = mixin(allExports);\n// Legacy Node.js API\n_._ = _;\n// Export the Underscore API.\nexport default _;\n","'use strict';\n\n// TODO: https://columbia.atlassian.net/browse/GSD-16533 Update URL functions to use the JS URL API\n/**\n * Append a parameter to a url\n * @param {string} url - a url\n * @param {string} name - key\n * @param {string} value - value\n * @return {string} url with param appended\n */\nfunction appendParamToURL(url, name, value) {\n var c = '?';\n if (url.indexOf(c) !== -1) {\n c = '&';\n }\n return url + c + name + '=' + encodeURIComponent(value);\n}\n\n/**\n * Helper function for getParamsFromURL. Split a url string into key/value pairs.\n * @param {string} str - url parameter string\n * @return {Object} object with params split into key/value pairs\n */\nfunction keyValueArray(str) {\n var kvp = str.split('&');\n var x;\n var k;\n var v;\n var output = {};\n\n for (var i = kvp.length - 1; i >= 0; i--) {\n if (kvp[i].length) { // No empty strings...\n x = kvp[i].split('=');\n k = x[0];\n v = '';\n if (x.length > 1) {\n v = x[1];\n }\n output[k] = v;\n }\n }\n\n return output;\n}\n\n/**\n * Split a url string into key/value pairs.\n * @param {string} url - url parameter string\n * @return {Object} object with params split into key/value pairs\n */\nfunction getParamsFromURL(url) {\n var arr = url.split('?');\n var search = '';\n var searchHash = '';\n var postHash = false;\n\n if (arr.length > 1) {\n var arrHash = arr[1].split('#');\n search = arrHash[0];\n\n if (arrHash.length > 1) {\n postHash = true;\n searchHash = arrHash[1];\n }\n }\n\n var output = {};\n if (search.length) {\n output = keyValueArray(search);\n }\n if (postHash) {\n if (searchHash.length) {\n var output2 = keyValueArray(searchHash);\n Object.keys(output2).forEach(function (prop) {\n output[prop] = output2[prop]; // Merge them...\n });\n }\n }\n\n return output;\n}\n\n/**\n * Update an existing url param\n * https://stackoverflow.com/questions/1090948/change-url-parameters\n * @param {string} url - Url to be updated\n * @param {string} param - param to be updated\n * @param {string} paramVal - new parameter value\n * @returns {string} - updated url\n */\nfunction updateURLParam(url, param, paramVal) {\n var newAdditionalURL = '';\n var tempArray = url.split('?');\n var baseURL = tempArray[0];\n var additionalURL = tempArray[1];\n var temp = '';\n if (additionalURL) {\n tempArray = additionalURL.split('&');\n for (var i = 0; i < tempArray.length; i++) {\n if (tempArray[i].split('=')[0] !== param) {\n newAdditionalURL += temp + tempArray[i];\n temp = '&';\n }\n }\n }\n\n var rowsText = temp + '' + param + '=' + paramVal;\n return baseURL + '?' + newAdditionalURL + rowsText;\n}\n\n/**\n * Turn the URL query string into a JSON object to make it easier to add/update/delete key/value pairs.\n * @param {string} url the URL string from which to get the querystring. Null or empty string to use the location.href.\n * @returns {obejct} the query string as an object.\n */\nfunction queryStringToObject(url) {\n var search;\n if (!url) {\n // get the query string from window.location.search\n search = location.search.substring(1); // exclude the leading ?\n } else {\n // find the query string in the given url\n var startIndex = url.indexOf('?') + 1;\n var endIndex = url.indexOf('#');\n endIndex = endIndex >= startIndex ? endIndex : url.length;\n // examples:\n // 'key=val#hash', '/?key=val#hash' => 'key=val'\n // '?key#hash' => 'key'\n search = url.substring(startIndex, endIndex);\n if (startIndex === 0 && search.indexOf('=') === -1) {\n // this string doesn't look like a query string (no '?' and no '=')\n // examples: 'key#hash', '/#hash'\n search = '';\n }\n }\n\n var result = {};\n if (search) {\n var pairs = search.split('&');\n pairs.forEach(function (pair) {\n var nameVal = pair.split('=');\n result[nameVal[0]] = decodeURIComponent(nameVal[1] || '');\n });\n }\n\n return JSON.parse(JSON.stringify(result));\n}\n\n/**\n * Convert an object into a serialized string; the opposite of queryStringToObject().\n * @param {Object} obj The object to be serialized into a string\n * @param {string} urlString An optional url into which to insert the querystring. Any existing query string will be replaced.\n * @returns {string} The resulting query or URL string.\n */\nfunction objectToQueryString(obj, urlString) {\n var url = urlString || '';\n var path = '';\n var hash = '';\n if (url) {\n var qsIndex = url.indexOf('?');\n var hashIndex = url.indexOf('#');\n var index;\n if (hashIndex > -1) {\n index = hashIndex;\n hash = url.substring(hashIndex);\n }\n if (qsIndex > -1) {\n index = qsIndex;\n }\n path = url.substring(0, index); // if index is undefined, path is the entire string.\n }\n return path + '?' + $.param(obj) + hash;\n}\n\n/**\n * Update a URL with a key/value pair. This will insert or update a pair.\n * @param {string} url The url to be updated.\n * @param {string} name The key name to use in the query string.\n * @param {string} val The value of the key to be set.\n * @returns {string} The updated URL.\n */\nfunction setUrlKeyValue(url, name, val) {\n var qs = queryStringToObject(url);\n qs[name] = encodeURIComponent(val);\n return objectToQueryString(qs, url);\n}\n\n/**\n * Update a URL with multiple key/value pairs. This will insert new or update existing keys.\n * @param {string} url The url to be updated.\n * @param {Object} obj an object of name/value pairs to be inserted/updated in the url query string.\n * @returns {string} The updated URL.\n */\nfunction setUrlData(url, obj) {\n var qs = queryStringToObject(url);\n var mergedQs = $.extend({}, qs, obj);\n return objectToQueryString(mergedQs, url);\n}\n\n/**\n * DecodeURIComponent cannot be used directly to parse query parameters from a URL. It needs a bit of preparation.\n * reference: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent\n * @param {string} val The query param value to be decoded.\n * @returns {string} The decoded query param value.\n */\nfunction decodeQueryParam(val) {\n return decodeURIComponent(val.replace(/\\+/g, ' '));\n}\n\n/**\n * Remove the queryparam from the url\n * @param {string} queryparam queryparam to be removed\n * @param {string} urlString url to be manipulated\n * @returns {URL} new url without provided queryparam\n */\nfunction removeQueryParam(queryparam, urlString) {\n var url = new URL(urlString);\n url.searchParams.delete(queryparam);\n return url;\n}\n\n/**\n * Remove the queryparam from the url, and replace the state\n * @param {string} queryparam queryparam to be removed\n */\nfunction removeQueryParamFromCurrentUrl(queryparam) {\n var url = removeQueryParam(queryparam, window.location.href);\n history.replaceState(null, '', url);\n}\n\n/**\n * Returns an array with values that exist in both arrays\n * @param {array} a1 - Array\n * @param {array} a2 - Array\n * @return {array} - Values that appear in both arrays\n */\nfunction arrayIntersection(a1, a2) {\n var intersect = $.map(a1,\n function (v) {\n return $.inArray(v, a2) < 0 ? null : v;\n }\n );\n return intersect;\n}\n\n/**\n * Creates and returns the markup required to display a modal.\n * The calling script should then use the bootstrap $.modal() method to display the modal.\n * Example 1:\n * var modalMarkup = createModalMarkup('

Hello World

', {title: 'Greeting'});\n * var $modal = $(modalMarkup).modal();\n * Example 2:\n * var $modal = $(createModalMarkup('')); // create empty modal\n * $modal.find('.modal-body').html(data); // inject content into the returned markup\n * $modal.modal();\n * @param {string} content The content to put in the modal. Pass empty string to just get the modal markup.\n * @param {Object} options Additional settings.\n * @return {string} The completed markup.\n */\nfunction createModalMarkup(content = '', options = {}) {\n /* Bootstrap Modal documentation: https://getbootstrap.com/docs/4.0/components/modal/ */\n const defaults = {\n title: '',\n showCloseBtn: true,\n enableLayeredDrawers: false,\n modalSizeClass: 'modal-lg', // possible values: modal-sm, modal-md (or empty string), modal-lg, modal-fluid\n centeredClass: 'modal-dialog-centered', // pass empty string to top-align the modal\n customClasses: '', // additional classes to be added to the modal\n modalId: '', // Custom id for the modal\n buttons: [\n // example markup (this will also dismiss the modal on click):\n // ''\n ]\n };\n const settings = $.extend({}, defaults, options);\n\n // additional uncommon bootstrap options go into data attributes\n const dataAttributes = [];\n ['backdrop', 'keyboard', 'focus', 'show'].forEach(param => {\n if (settings[param] !== undefined) {\n dataAttributes.push(`data-${param}=\"${settings[param]}\"`);\n }\n });\n\n let header = '
';\n if (settings.title) {\n header += `
${settings.title}
`;\n }\n if (settings.showCloseBtn) {\n header += '';\n }\n header += '
';\n\n let idAttribute = '';\n if (settings.modalId) {\n idAttribute = `id=\"${settings.modalId}\"`;\n }\n\n let footer = '';\n let footerBtns = '';\n for (let btn of settings.buttons) {\n footerBtns += btn;\n }\n if (footerBtns) {\n footer = `
${footerBtns}
`;\n }\n\n // tabindex=\"-1\" is necessary to allow the modal to close when ESC key is pressed.\n // https://stackoverflow.com/questions/12630156/how-do-you-enable-the-escape-key-close-functionality-in-a-twitter-bootstrap-moda\n const html = `
\n
\n
\n ${header}\n
\n ${content}\n
\n ${footer}\n
\n
\n
`;\n\n return html;\n}\n/**\n * Creates a backdrop element and appends it to the body tag.\n * @param {string} customClass An optional class to apply to the backdrop.\n */\nfunction createBackdrop(customClass) {\n var cls = customClass || '';\n var html = '
';\n $('body').append(html);\n}\n\n/**\n * Removes from the page the backdrop with the passed in class, or all backdrops if nothing is passed.\n * @param {string} customClass An optional class for selecting a backdrop to be removed. All will be removed if this is null.\n */\nfunction removeBackdrop(customClass) {\n var selector = '.backdrop' + (customClass ? '.' + customClass : '');\n $('body').find(selector).remove();\n}\n\n/**\n * display element in viewport\n * @param {string} el element in viewport\n * @param {string} offsetToTop off set top position\n * @return {boolean} element view port\n */\nfunction elementInViewport(el, offsetToTop) {\n var top = el.offsetTop;\n var left = el.offsetLeft;\n var width = el.offsetWidth;\n var height = el.offsetHeight;\n\n while (el.offsetParent) {\n el = el.offsetParent; // eslint-disable-line no-param-reassign\n top += el.offsetTop;\n left += el.offsetLeft;\n }\n\n if (typeof offsetToTop !== 'undefined') {\n top -= offsetToTop;\n }\n\n if (window.pageXOffset !== null) {\n return (\n top < (window.pageYOffset + window.innerHeight) &&\n left < (window.pageXOffset + window.innerWidth) &&\n (top + height) > window.pageYOffset &&\n (left + width) > window.pageXOffset\n );\n }\n\n if (document.compatMode === 'CSS1Compat') {\n return (\n top < (window.document.documentElement.scrollTop + window.document.documentElement.clientHeight) &&\n left < (window.document.documentElement.scrollLeft + window.document.documentElement.clientWidth) &&\n (top + height) > window.document.documentElement.scrollTop &&\n (left + width) > window.document.documentElement.scrollLeft\n );\n }\n\n return false;\n}\n\n/**\n * append script to body tag\n * @param {string} src url of the script to append\n * @param {function} callback optional callback to fire after load\n */\nfunction loadScript(src, callback) {\n var script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = src;\n document.getElementsByTagName('body')[0].appendChild(script);\n\n if (callback) {\n script.onload = callback;\n }\n}\n\n/**\n * load script to DOM if document ready state is complete or load after window load\n * @param {string} src url of the script to append\n * @param {function} callback optional callback to fire after load\n */\nfunction loadJsAfterWindowLoad(src, callback) {\n if (document.readyState === 'complete') {\n loadScript(src, callback);\n } else {\n window.addEventListener('load', function () {\n loadScript(src, callback);\n });\n }\n}\n\n/**\n * Inserts pasted text at cursor location in input or textarea elements.\n * If a range of text is selected in the input, that range will be replaced by the new text\n * If no text in the input is selected, the string will be inserted at the end\n * @param {selector} formInput - DOM element for the target form input\n * @param {string} str - string to insert into the form\n */\nfunction insertAtInputCursor(formInput, str) {\n var input = formInput;\n var start = input.selectionStart;\n var end = input.selectionEnd;\n\n // Inserts str between selection start and end positions\n input.value = input.value.substring(0, start) + str + input.value.substring(end);\n // Update cursor position\n input.selectionStart = start + str.length;\n input.selectionEnd = input.selectionStart;\n}\n\n/**\n * Returns validity of date\n * @param {string} stageMessage The name of the stage we're going to.\n * @returns {string} Returns true if the day is within the month. Returns false if it is an invalid date.\n */\nfunction getTimeAndHours(stageMessage) {\n var date = new Date();\n var hours = date.getHours();\n var minutes = date.getMinutes();\n var ampm = hours >= 12 ? 'PM' : 'AM';\n hours %= 12;\n hours = hours || 12; // the hour '0' should be '12'\n minutes = minutes < 10 ? '0' + minutes : minutes;\n var strTime = hours + ':' + minutes + ' ' + ampm;\n return stageMessage + ' ' + strTime;\n}\n// intentionally export loadJsAfterWindowLoad onto global scope\nglobal.cscUtils = global.cscUtils || {};\nglobal.cscUtils.loadJsAfterWindowLoad = loadJsAfterWindowLoad;\n\n/**\n * Converts a string to Title Case.\n * @example\n * 'fRiEnDsHiP is MAGIC' -> 'Friendship Is Magic'\n * 'don't uppercase contractions' -> 'Don't Uppercase Contractions'\n * 'hyphenated-strings work too' -> 'Hyphenated-Strings Work Too'\n * @param {string} str The string to be title cased.\n * @returns {string} The original string in title case.\n */\nfunction stringToTitleCase(str) {\n return str.replace(/[^\\s/-]+/g, function (word) {\n return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\n });\n}\n\n/** Function to heapify a subtree rooted with node ndx\n * @param {Array} list - The array to heapify\n * @param {number} ndx - The index of the root of the subtree to heapify\n * @param {number} heapSize - The size of the heap\n * @param {string} key - The object key to find the highest numbers for\n */\nfunction heapify(list, ndx, heapSize, key) {\n let largest = ndx;\n // eslint-disable-next-line @stylistic/js/no-mixed-operators\n const left = 2 * ndx + 1;\n // eslint-disable-next-line @stylistic/js/no-mixed-operators\n const right = 2 * ndx + 2;\n\n // Check if left child is larger than root\n if (left < heapSize && list[left][key] > list[largest][key]) {\n largest = left;\n }\n\n // Check if right child is larger than root\n if (right < heapSize && list[right][key] > list[largest][key]) {\n largest = right;\n }\n\n // If largest is not root\n if (largest !== ndx) {\n // Swap array[i] and array[largest]\n // eslint-disable-next-line no-param-reassign\n [list[ndx], list[largest]] = [list[largest], list[ndx]];\n // Recursively heapify the affected sub-tree\n heapify(list, largest, heapSize, key);\n }\n}\n\n/** Function to heapify the array into max heap\n * @param {Array} list - The array to heapify\n * @param {string} key - The object key to find the highest numbers for\n */\nfunction heapifyMax(list, key) {\n const arrayLength = list.length;\n\n // Build max heap\n for (let ndx = Math.floor(arrayLength / 2) - 1; ndx >= 0; ndx--) {\n heapify(list, ndx, arrayLength, key);\n }\n\n for (let ndx = arrayLength - 1; ndx > 0; ndx--) {\n let firstListItem = list[0];\n // eslint-disable-next-line no-param-reassign\n list[0] = list[ndx];\n // eslint-disable-next-line no-param-reassign\n list[ndx] = firstListItem;\n\n heapify(list, 0, ndx, key);\n }\n}\n\n/** Function to find the n highest numbers in an array\n * @param {Array} list - The array to find the n highest numbers in\n * @param {number} n - The number of highest numbers to find\n * @param {string} key - The object key to find the highest numbers for\n * @returns {Array} The n highest numbers\n */\nfunction findNHighest(list, n, key) {\n if (list.length < n) {\n // eslint-disable-next-line no-param-reassign\n n = list.length;\n }\n\n const listToUse = JSON.parse(JSON.stringify(list)); // Deep copy the list\n const result = [];\n\n // Build max heap\n heapifyMax(listToUse, key);\n\n for (let i = 0; i < n; i++) {\n // Extract max element from the max heap\n result.push(listToUse.pop());\n }\n\n return result;\n}\n\n/** Function to compare two objects for deep equality\n * @param {Object} obj1 - The first object to compare\n * @param {Object} obj2 - The second object to compare\n * @returns {boolean} Whether the two objects are deep equal\n */\nfunction deepEqual(obj1, obj2) {\n return (obj1 && obj2 && typeof obj1 === 'object' && typeof obj2 === 'object') ?\n (Object.keys(obj1).length === Object.keys(obj2).length) &&\n Object.keys(obj1).reduce(function (isEqual, key) {\n return isEqual && deepEqual(obj1[key], obj2[key]);\n }, true) : (obj1 === obj2);\n}\n\nmodule.exports = {\n appendParamToURL: appendParamToURL,\n keyValueArray: keyValueArray,\n getParamsFromURL: getParamsFromURL,\n updateURLParam: updateURLParam,\n arrayIntersection: arrayIntersection,\n createModalMarkup: createModalMarkup,\n queryStringToObject: queryStringToObject,\n objectToQueryString: objectToQueryString,\n removeQueryParam: removeQueryParam,\n removeQueryParamFromCurrentUrl: removeQueryParamFromCurrentUrl,\n createBackdrop: createBackdrop,\n removeBackdrop: removeBackdrop,\n setUrlKeyValue: setUrlKeyValue,\n setUrlData: setUrlData,\n decodeQueryParam: decodeQueryParam,\n elementInViewport: elementInViewport,\n loadJsAfterWindowLoad: loadJsAfterWindowLoad,\n insertAtInputCursor: insertAtInputCursor,\n stringToTitleCase,\n getTimeAndHours: getTimeAndHours,\n findNHighest: findNHighest,\n deepEqual: deepEqual\n};\n","'use strict';\n\n/**\n * Gets the current session ID.\n * @returns {string} returns the session ID if it can be found.\n */\nfunction getSessionID() {\n /**\n * Ideally we would use dwsid, which SFCC logs.\n * However, its stored in a cookie that is inaccessible to client JS.\n * 'sid' also identifies the current browsing session, matches session.sessionID, and is client JS accessible.\n * Per SFCC:\n * - session.sessionID: this can safely be used as an identifier against external systems.\n * - sid cookie: identifies the current browsing session.\n */\n const sessionCookie = document.cookie\n .split('; ')\n .find((row) => row.startsWith('sid='));\n\n const sessionId = sessionCookie ? sessionCookie.split('=')[1] : null;\n\n if (!sessionId) {\n // eslint-disable-next-line no-console\n console.error('getSessionID: could not determine session ID');\n }\n\n return sessionId;\n}\n\n/**\n * Gets an item from local storage, that was previously JSON stringified.\n * If the session ID that was stored with the item,\n * doesn't match the current ID then local storage is cleared and null returned.\n * Note: for non-primitive types, like for dates, JSON.parse will leave it as string.\n * @param {string} keyName - name of the key where the item is stored\n * @returns {*} the stored item or null (particularly if session ID has changed)\n */\nfunction getItem(keyName) {\n const sessionID = getSessionID();\n\n if (!sessionID) {\n return null;\n }\n\n const json = localStorage.getItem(keyName);\n let itemWrapper;\n\n if (json) {\n try {\n /**\n * In the future, if additional customization is needed,\n * add 'reviver' as an optional argument to getItem and pass it into JSON.parse.\n */\n itemWrapper = JSON.parse(json);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(`Unable to parse ${keyName}': ${e.message}; ${json}`);\n }\n }\n\n if (!itemWrapper) {\n return null;\n }\n\n // Session has change remove the item\n if (itemWrapper.sessionID !== sessionID) {\n localStorage.removeItem(keyName);\n return null;\n }\n\n return itemWrapper.item;\n}\n\n/**\n * Sets an item in local storage after passing it through JSON stringify along with its session ID.\n * @param {string} keyName - name of the key where the item is stored\n * @param {*} item - item to store\n * @returns {boolean} true if item is successfully stored, otherwise false.\n */\nfunction setItem(keyName, item) {\n const itemWrapper = {\n sessionID: getSessionID(),\n item: item\n };\n\n if (!itemWrapper.sessionID) {\n return false;\n }\n\n localStorage.setItem(keyName, JSON.stringify(itemWrapper));\n return true;\n}\n\nmodule.exports = {\n getItem: getItem,\n setItem: setItem\n};\n","'use strict';\n\nconst _ = require('underscore');\n\n/**\n * Usage:\n *\n * var keyboardAccessibility = require('./keyboardAccessibility');\n *\n * keyboardAccessibility('.main-menu .sitenav-primary-a', // <-- Selector for keydown event\n * {\n * // Keycode and function handler\n * 40: function (menuItem) { // down\n * if (menuItem.hasClass('nav-item')) { // top level\n * $('.navbar-nav .show').removeClass('show')\n * .children('.dropdown-menu')\n * .removeClass('show');\n * menuItem.addClass('show').children('.dropdown-menu').addClass('show');\n * $(this).attr('aria-expanded', 'true');\n * menuItem.find('ul > li > a')\n * .first()\n * .focus();\n * return true; // <-- Prevent default\n * } else {\n * menuItem.removeClass('show').children('.dropdown-menu').removeClass('show');\n * $(this).attr('aria-expanded', 'false');\n * menuItem.next().children().first().focus();\n * return true; // <-- Prevent default\n * }\n * return false; // <-- Allow default\n * },\n * 39: function (menuItem) { // right\n * // Another function\n * }\n * },\n * function () {\n * // Prefunction call which passes a jQuery object to the above function.\n * return $(this).parent();\n * }\n * );\n */\n\nconst buildFunction = function (keyFunctions, preFunction, event, scope) {\n const key = event.which;\n const returnedScope = preFunction.call(scope, event);\n if (keyFunctions[key]) {\n const preventEvent = keyFunctions[key].call(scope, returnedScope, event);\n if (preventEvent) {\n // Generally not needed to block keyboard event unless you want\n // to prevent browser behavior. Tab key is a good example.\n // Or blocking up/down to prevent window scrolling.\n event.stopPropagation();\n event.preventDefault();\n }\n }\n};\n\nmodule.exports = function (selector, keyFunctions, preFunction, delegatedSelector) {\n if (delegatedSelector) {\n $(delegatedSelector).on('keydown', selector, function (e) {\n _.throttle(buildFunction(keyFunctions, preFunction, e, this), 100);\n });\n } else {\n $(selector).on('keydown', function (e) {\n _.throttle(buildFunction(keyFunctions, preFunction, e, this), 100);\n });\n }\n};\n","'use strict';\n\n/**\n* Checks if the current bootstrap UI breakpoint matches the breakpoint abbreviation.\n* @param {string} breakpointAbbreviation Breakpoint abbreviations. Options are: xs, sm, md, lg, xl\n* @returns {boolean} True if the breakpoint abbreviation is the current breakpoint.\n*/\nfunction isCurrentBreakpointAbbreviation(breakpointAbbreviation) {\n if (\n breakpointAbbreviation !== 'xs' &&\n breakpointAbbreviation !== 'sm' &&\n breakpointAbbreviation !== 'md' &&\n breakpointAbbreviation !== 'lg' &&\n breakpointAbbreviation !== 'xl') {\n throw new Error('Invalid breakpoint abbreviation: ' + breakpointAbbreviation);\n }\n\n var selector = '.bootstrap-breakpoints-' + breakpointAbbreviation;\n var $breakpointIndicator = $(selector);\n\n if ($breakpointIndicator.length === 0) {\n throw new Error('Breakpoint indicator not found for: ' + breakpointAbbreviation);\n }\n return $breakpointIndicator.css('display') === 'block';\n}\n\n/**\n * Finds the current breakpoint from the hidden .bootstrap-breakpoints element.\n * @returns {string} The currently active breakpoint abbreviation. ('xs', 'sm', 'md', 'lg', or 'xl')\n */\nfunction getCurrentBreakpoint() {\n var $breakpointIndicators = $('.bootstrap-breakpoints > div');\n var currentBP;\n $breakpointIndicators.each(function () {\n var $bpIndicator = $(this);\n if ($bpIndicator.css('display') === 'block') {\n currentBP = $bpIndicator.data('bp');\n return false; // break out of the each loop\n }\n return true; // continue to next item in loop\n });\n return currentBP;\n}\n\nmodule.exports = {\n /**\n * This check is only for the resolution of the screen, it should\n * not be used to infer device type or user interaction (touch/click).\n * @returns {boolean} True if the screen is low resolution.\n */\n isLowRes: function () {\n return this.isCurrentBreakpoint('xs', 'sm', 'md');\n },\n /**\n * This check is only for the resolution of the screen, it should\n * not be used to infer device type or user interaction (touch/click).\n * @returns {boolean} True if the screen is high resolution.\n */\n isHighRes: function () {\n return this.isCurrentBreakpoint('lg', 'xl');\n },\n\n /**\n * Checks if the current bootstrap UI breakpoint matches a parameter.\n * @example isCurrentBreakpoint('xs', 'sm')\n * @param {arguments} breakpointAbbreviations One of more comma separated string breakpoint parameters. Options are: xs, sm, md, lg, xl\n * @returns {boolean} True if any of the breakpoint abbreviations are the current breakpoint.\n */\n isCurrentBreakpoint: function () {\n if (arguments.length === 0) {\n throw new Error('No breakpoint abbreviations specified.');\n }\n\n for (var i = 0, len = arguments.length; i < len; i++) {\n var abbreviation = arguments[i];\n\n if (isCurrentBreakpointAbbreviation(abbreviation)) {\n return true;\n }\n }\n\n /**\n * NOTE: it is explicitly intentional that this function accepts the breakpoint abbreviations and returns a boolean.\n * If the function was instead 'getCurrentBreakpoint' where it returns the breakpoint abbreviation...\n * then it might make future refactors and bootstrap updates more difficult if the abbreviations change\n * because the return value may not be consumed near the function call (difficult to track/update).\n */\n return false;\n },\n\n getCurrentBreakpoint: getCurrentBreakpoint\n};\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","'use strict';\n/**\n * Global modules.\n */\nconst Swiper = global.Swiper = require('swiper/swiper-bundle.min.js');\nconst debounce = require('lodash/debounce');\n/**\n * Global constants.\n */\nconst swipers = [];\n\n/**\n * Adjusts the number of visible slides and slides per group based on the container's width.\n * @param {Object} sliderEl - The Swiper instance or slider object.\n */\nfunction adjustSlides(sliderEl) {\n if (!sliderEl || !sliderEl.el) {\n return;\n }\n\n let slidesPerView = Math.floor(sliderEl.el.clientWidth / sliderEl.swatchWidth);\n\n if (sliderEl.slides.length <= slidesPerView) {\n sliderEl.el.swiper.destroy(true, true);\n return;\n }\n\n slidesPerView = Math.floor(sliderEl.width / sliderEl.swatchWidth);\n // eslint-disable-next-line no-param-reassign\n sliderEl.params.slidesPerView = slidesPerView;\n // eslint-disable-next-line no-param-reassign\n sliderEl.params.slidesPerGroup = slidesPerView;\n sliderEl.update();\n}\n\n/**\n * Initializes and restores swiper for swatch gallery\n * @param {JQuery} $container - modal swiper container\n */\nfunction initColorSwatchSwiper($container = $(document)) {\n const $selector = $container.find('.swiper-container--swatches:not(.swiper-initialized)');\n $selector.each(function (index) {\n const $swiperEl = $(this);\n const $colorSwatches = $swiperEl.find('.js-color-swatch');\n const containerWidth = $swiperEl.width();\n const swatchWidth = $colorSwatches.first().outerWidth(true);\n const isSwatchesFitContainer = containerWidth >= $colorSwatches.length * swatchWidth;\n\n if (!$swiperEl.swiper && !isSwatchesFitContainer) {\n const swiperData = {\n loop: false,\n slidesPerView: 'auto',\n slidesPerGroupAuto: true,\n watchOverflow: true,\n navigation: {\n nextEl: '.swiper-button-next',\n prevEl: '.swiper-button-prev'\n },\n on: {\n resize: debounce(adjustSlides, 300),\n afterInit: function () {\n this.swatchWidth = swatchWidth;\n adjustSlides(this);\n }\n }\n };\n\n swipers[index] = new Swiper(this, swiperData);\n }\n });\n}\n\n/**\n * Initializes and restores swiper for image gallery\n * @param {JQuery} $container - modal swiper container\n */\nfunction initTileImageSwiper($container = $(document)) {\n const $selector = $container.find('.image-carousel-enabled .selected .swiper-container--images:not(.swiper-initialized)');\n $selector.each(function (index) {\n const $swiperEl = $(this);\n\n if (!$swiperEl.swiper) {\n const swiperData = {\n loop: true,\n slidesPerView: 1,\n navigation: {\n nextEl: '.swiper-button-next',\n prevEl: '.swiper-button-prev'\n }\n };\n\n swipers[index] = new Swiper(this, swiperData);\n }\n });\n}\n\nmodule.exports = {\n init: function ($selector = $('.swiper-container[data-swiper]')) {\n var swiper = [];\n $selector.each(function (index) {\n // do not duplicate existing swiper instances\n if (!this.swiper) {\n var $el = $(this);\n var swOptions = $el.data('swiper');\n\n swOptions.on = {\n init: function () {\n $el.addClass('swiper-loaded');\n }\n };\n\n $el.on('updateLazyImages', () => {\n if ($el[0].swiper) {\n var $images = $('.swiper-wrapper', $el).find('img');\n $images.each((i) => {\n if ($images[i].hasAttribute('src')) {\n $images.eq(i).attr('src', $images.eq(i).attr('data-src'));\n }\n });\n }\n });\n\n swiper[index] = new Swiper(this, swOptions);\n }\n });\n },\n destroy: function ($selector) {\n if (!$selector) { return; }\n $selector.each(function () {\n if ($(this)[0].swiper) {\n $(this)[0].swiper.destroy(true, true);\n }\n });\n },\n initColorSwatchSwiper: initColorSwatchSwiper,\n initTileImageSwiper: initTileImageSwiper,\n handleEvents: function () {\n $(window)\n .on('resize', debounce(() => initColorSwatchSwiper(), 300));\n $(document)\n .on('search:productGridUpdated', () => {\n initColorSwatchSwiper();\n initTileImageSwiper();\n });\n }\n};\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","// Underscore.js 1.10.2\n// https://underscorejs.org\n// (c) 2009-2020 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n// Baseline setup\n// --------------\n\n// Establish the root object, `window` (`self`) in the browser, `global`\n// on the server, or `this` in some virtual machines. We use `self`\n// instead of `window` for `WebWorker` support.\nvar root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global ||\n Function('return this')() ||\n {};\n\n// Save bytes in the minified (but not gzipped) version:\nvar ArrayProto = Array.prototype, ObjProto = Object.prototype;\nvar SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n// Create quick reference variables for speed access to core prototypes.\nvar push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n// All **ECMAScript 5** native function implementations that we hope to use\n// are declared here.\nvar nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create;\n\n// Create references to these builtin functions because we override them.\nvar _isNaN = root.isNaN,\n _isFinite = root.isFinite;\n\n// Naked function reference for surrogate-prototype-swapping.\nvar Ctor = function(){};\n\n// The Underscore object. All exported functions below are added to it in the\n// modules/index-all.js using the mixin function.\nexport default function _(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n}\n\n// Current version.\nexport var VERSION = _.VERSION = '1.10.2';\n\n// Internal function that returns an efficient (for current engines) version\n// of the passed-in callback, to be repeatedly applied in other Underscore\n// functions.\nfunction optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n}\n\n// An internal function to generate callbacks that can be applied to each\n// element in a collection, returning the desired result — either `identity`,\n// an arbitrary callback, a property matcher, or a property accessor.\nfunction baseIteratee(value, context, argCount) {\n if (value == null) return identity;\n if (isFunction(value)) return optimizeCb(value, context, argCount);\n if (isObject(value) && !isArray(value)) return matcher(value);\n return property(value);\n}\n\n// External wrapper for our callback generator. Users may customize\n// `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n// This abstraction hides the internal-only argCount argument.\n_.iteratee = iteratee;\nexport function iteratee(value, context) {\n return baseIteratee(value, context, Infinity);\n}\n\n// The function we actually call internally. It invokes _.iteratee if\n// overridden, otherwise baseIteratee.\nfunction cb(value, context, argCount) {\n if (_.iteratee !== iteratee) return _.iteratee(value, context);\n return baseIteratee(value, context, argCount);\n}\n\n// Some functions take a variable number of arguments, or a few expected\n// arguments at the beginning and then a variable number of values to operate\n// on. This helper accumulates all remaining arguments past the function’s\n// argument length (or an explicit `startIndex`), into an array that becomes\n// the last argument. Similar to ES6’s \"rest parameter\".\nexport function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n}\n\n// An internal function for creating a new object that inherits from another.\nfunction baseCreate(prototype) {\n if (!isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n}\n\nfunction shallowProperty(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n}\n\nfunction _has(obj, path) {\n return obj != null && hasOwnProperty.call(obj, path);\n}\n\nfunction deepGet(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n}\n\n// Helper for collection methods to determine whether a collection\n// should be iterated as an array or as an object.\n// Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n// Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\nvar MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\nvar getLength = shallowProperty('length');\nfunction isArrayLike(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n}\n\n// Collection Functions\n// --------------------\n\n// The cornerstone, an `each` implementation, aka `forEach`.\n// Handles raw objects in addition to array-likes. Treats all\n// sparse array-likes as if they were dense.\nexport function each(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var _keys = keys(obj);\n for (i = 0, length = _keys.length; i < length; i++) {\n iteratee(obj[_keys[i]], _keys[i], obj);\n }\n }\n return obj;\n}\nexport { each as forEach };\n\n// Return the results of applying the iteratee to each element.\nexport function map(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\nexport { map as collect };\n\n// Create a reducing function iterating left or right.\nfunction createReduce(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[_keys ? _keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = _keys ? _keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n}\n\n// **Reduce** builds up a single result from a list of values, aka `inject`,\n// or `foldl`.\nexport var reduce = createReduce(1);\nexport { reduce as foldl, reduce as inject };\n\n// The right-associative version of reduce, also known as `foldr`.\nexport var reduceRight = createReduce(-1);\nexport { reduceRight as foldr };\n\n// Return the first value which passes a truth test.\nexport function find(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n}\nexport { find as detect };\n\n// Return all the elements that pass a truth test.\nexport function filter(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n}\nexport { filter as select };\n\n// Return all the elements for which a truth test fails.\nexport function reject(obj, predicate, context) {\n return filter(obj, negate(cb(predicate)), context);\n}\n\n// Determine whether all of the elements match a truth test.\nexport function every(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n}\nexport { every as all };\n\n// Determine if at least one element in the object matches a truth test.\nexport function some(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n}\nexport { some as any };\n\n// Determine if the array or object contains a given item (using `===`).\nexport function contains(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return indexOf(obj, item, fromIndex) >= 0;\n}\nexport { contains as includes, contains as include };\n\n// Invoke a method (with arguments) on every item in a collection.\nexport var invoke = restArguments(function(obj, path, args) {\n var contextPath, func;\n if (isFunction(path)) {\n func = path;\n } else if (isArray(path)) {\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n});\n\n// Convenience version of a common use case of `map`: fetching a property.\nexport function pluck(obj, key) {\n return map(obj, property(key));\n}\n\n// Convenience version of a common use case of `filter`: selecting only objects\n// containing specific `key:value` pairs.\nexport function where(obj, attrs) {\n return filter(obj, matcher(attrs));\n}\n\n// Convenience version of a common use case of `find`: getting the first object\n// containing specific `key:value` pairs.\nexport function findWhere(obj, attrs) {\n return find(obj, matcher(attrs));\n}\n\n// Return the maximum element (or element-based computation).\nexport function max(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n\n// Return the minimum element (or element-based computation).\nexport function min(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n\n// Shuffle a collection.\nexport function shuffle(obj) {\n return sample(obj, Infinity);\n}\n\n// Sample **n** random values from a collection using the modern version of the\n// [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n// If **n** is not specified, returns a single random element.\n// The internal `guard` argument allows it to work with `map`.\nexport function sample(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n return obj[random(obj.length - 1)];\n }\n var sample = isArrayLike(obj) ? clone(obj) : values(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n}\n\n// Sort the object's values by a criterion produced by an iteratee.\nexport function sortBy(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return pluck(map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n}\n\n// An internal function used for aggregate \"group by\" operations.\nfunction group(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n}\n\n// Groups the object's values by a criterion. Pass either a string attribute\n// to group by, or a function that returns the criterion.\nexport var groupBy = group(function(result, value, key) {\n if (_has(result, key)) result[key].push(value); else result[key] = [value];\n});\n\n// Indexes the object's values by a criterion, similar to `groupBy`, but for\n// when you know that your index values will be unique.\nexport var indexBy = group(function(result, value, key) {\n result[key] = value;\n});\n\n// Counts instances of an object that group by a certain criterion. Pass\n// either a string attribute to count by, or a function that returns the\n// criterion.\nexport var countBy = group(function(result, value, key) {\n if (_has(result, key)) result[key]++; else result[key] = 1;\n});\n\nvar reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\n// Safely create a real, live array from anything iterable.\nexport function toArray(obj) {\n if (!obj) return [];\n if (isArray(obj)) return slice.call(obj);\n if (isString(obj)) {\n // Keep surrogate pair characters together\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return map(obj, identity);\n return values(obj);\n}\n\n// Return the number of elements in an object.\nexport function size(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : keys(obj).length;\n}\n\n// Split a collection into two arrays: one whose elements all satisfy the given\n// predicate, and one whose elements all do not satisfy the predicate.\nexport var partition = group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n}, true);\n\n// Array Functions\n// ---------------\n\n// Get the first element of an array. Passing **n** will return the first N\n// values in the array. The **guard** check allows it to work with `map`.\nexport function first(array, n, guard) {\n if (array == null || array.length < 1) return n == null ? void 0 : [];\n if (n == null || guard) return array[0];\n return initial(array, array.length - n);\n}\nexport { first as head, first as take };\n\n// Returns everything but the last entry of the array. Especially useful on\n// the arguments object. Passing **n** will return all the values in\n// the array, excluding the last N.\nexport function initial(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n}\n\n// Get the last element of an array. Passing **n** will return the last N\n// values in the array.\nexport function last(array, n, guard) {\n if (array == null || array.length < 1) return n == null ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return rest(array, Math.max(0, array.length - n));\n}\n\n// Returns everything but the first entry of the array. Especially useful on\n// the arguments object. Passing an **n** will return the rest N values in the\n// array.\nexport function rest(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n}\nexport { rest as tail, rest as drop };\n\n// Trim out all falsy values from an array.\nexport function compact(array) {\n return filter(array, Boolean);\n}\n\n// Internal implementation of a recursive `flatten` function.\nfunction _flatten(input, shallow, strict, output) {\n output = output || [];\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (isArray(value) || isArguments(value))) {\n // Flatten current level of array or arguments object.\n if (shallow) {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n } else {\n _flatten(value, shallow, strict, output);\n idx = output.length;\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n}\n\n// Flatten out an array, either recursively (by default), or just one level.\nexport function flatten(array, shallow) {\n return _flatten(array, shallow, false);\n}\n\n// Return a version of the array that does not contain the specified value(s).\nexport var without = restArguments(function(array, otherArrays) {\n return difference(array, otherArrays);\n});\n\n// Produce a duplicate-free version of the array. If the array has already\n// been sorted, you have the option of using a faster algorithm.\n// The faster algorithm will not work with an iteratee if the iteratee\n// is not a one-to-one function, so providing an iteratee will disable\n// the faster algorithm.\nexport function uniq(array, isSorted, iteratee, context) {\n if (!isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n}\nexport { uniq as unique };\n\n// Produce an array that contains the union: each distinct element from all of\n// the passed-in arrays.\nexport var union = restArguments(function(arrays) {\n return uniq(_flatten(arrays, true, true));\n});\n\n// Produce an array that contains every item shared between all the\n// passed-in arrays.\nexport function intersection(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n}\n\n// Take the difference between one array and a number of other arrays.\n// Only the elements present in just the first array will remain.\nexport var difference = restArguments(function(array, rest) {\n rest = _flatten(rest, true, true);\n return filter(array, function(value){\n return !contains(rest, value);\n });\n});\n\n// Complement of zip. Unzip accepts an array of arrays and groups\n// each array's elements on shared indices.\nexport function unzip(array) {\n var length = array && max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = pluck(array, index);\n }\n return result;\n}\n\n// Zip together multiple lists into a single array -- elements that share\n// an index go together.\nexport var zip = restArguments(unzip);\n\n// Converts lists into objects. Pass either a single array of `[key, value]`\n// pairs, or two parallel arrays of the same length -- one of keys, and one of\n// the corresponding values. Passing by pairs is the reverse of pairs.\nexport function object(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n}\n\n// Generator function to create the findIndex and findLastIndex functions.\nfunction createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n}\n\n// Returns the first index on an array-like that passes a predicate test.\nexport var findIndex = createPredicateIndexFinder(1);\nexport var findLastIndex = createPredicateIndexFinder(-1);\n\n// Use a comparator function to figure out the smallest index at which\n// an object should be inserted so as to maintain order. Uses binary search.\nexport function sortedIndex(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n}\n\n// Generator function to create the indexOf and lastIndexOf functions.\nfunction createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n}\n\n// Return the position of the first occurrence of an item in an array,\n// or -1 if the item is not included in the array.\n// If the array is large and already in sort order, pass `true`\n// for **isSorted** to use binary search.\nexport var indexOf = createIndexFinder(1, findIndex, sortedIndex);\nexport var lastIndexOf = createIndexFinder(-1, findLastIndex);\n\n// Generate an integer Array containing an arithmetic progression. A port of\n// the native Python `range()` function. See\n// [the Python documentation](https://docs.python.org/library/functions.html#range).\nexport function range(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n}\n\n// Chunk a single array into multiple arrays, each containing `count` or fewer\n// items.\nexport function chunk(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n}\n\n// Function (ahem) Functions\n// ------------------\n\n// Determines whether to execute a function as a constructor\n// or a normal function with the provided arguments.\nfunction executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (isObject(result)) return result;\n return self;\n}\n\n// Create a function bound to a given object (assigning `this`, and arguments,\n// optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n// available.\nexport var bind = restArguments(function(func, context, args) {\n if (!isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n});\n\n// Partially apply a function by creating a version that has had some of its\n// arguments pre-filled, without changing its dynamic `this` context. _ acts\n// as a placeholder by default, allowing any combination of arguments to be\n// pre-filled. Set `partial.placeholder` for a custom placeholder argument.\nexport var partial = restArguments(function(func, boundArgs) {\n var placeholder = partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n});\n\npartial.placeholder = _;\n\n// Bind a number of an object's methods to that object. Remaining arguments\n// are the method names to be bound. Useful for ensuring that all callbacks\n// defined on an object belong to it.\nexport var bindAll = restArguments(function(obj, _keys) {\n _keys = _flatten(_keys, false, false);\n var index = _keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = _keys[index];\n obj[key] = bind(obj[key], obj);\n }\n});\n\n// Memoize an expensive function by storing its results.\nexport function memoize(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!_has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n}\n\n// Delays a function for the given number of milliseconds, and then calls\n// it with the arguments supplied.\nexport var delay = restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n});\n\n// Defers a function, scheduling it to run after the current call stack has\n// cleared.\nexport var defer = partial(delay, _, 1);\n\n// Returns a function, that, when invoked, will only be triggered at most once\n// during a given window of time. Normally, the throttled function will run\n// as much as it can, without ever going more than once per `wait` duration;\n// but if you'd like to disable the execution on the leading edge, pass\n// `{leading: false}`. To disable execution on the trailing edge, ditto.\nexport function throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var _now = now();\n if (!previous && options.leading === false) previous = _now;\n var remaining = wait - (_now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = _now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n\n// Returns a function, that, as long as it continues to be invoked, will not\n// be triggered. The function will be called after it stops being called for\n// N milliseconds. If `immediate` is passed, trigger the function on the\n// leading edge, instead of the trailing.\nexport function debounce(func, wait, immediate) {\n var timeout, result;\n\n var later = function(context, args) {\n timeout = null;\n if (args) result = func.apply(context, args);\n };\n\n var debounced = restArguments(function(args) {\n if (timeout) clearTimeout(timeout);\n if (immediate) {\n var callNow = !timeout;\n timeout = setTimeout(later, wait);\n if (callNow) result = func.apply(this, args);\n } else {\n timeout = delay(later, wait, this, args);\n }\n\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return debounced;\n}\n\n// Returns the first function passed as an argument to the second,\n// allowing you to adjust arguments, run code before and after, and\n// conditionally execute the original function.\nexport function wrap(func, wrapper) {\n return partial(wrapper, func);\n}\n\n// Returns a negated version of the passed-in predicate.\nexport function negate(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n}\n\n// Returns a function that is the composition of a list of functions, each\n// consuming the return value of the function that follows.\nexport function compose() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n}\n\n// Returns a function that will only be executed on and after the Nth call.\nexport function after(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n}\n\n// Returns a function that will only be executed up to (but not including) the Nth call.\nexport function before(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n}\n\n// Returns a function that will be executed at most one time, no matter how\n// often you call it. Useful for lazy initialization.\nexport var once = partial(before, 2);\n\n// Object Functions\n// ----------------\n\n// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\nvar hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\nvar nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\nfunction collectNonEnumProps(obj, _keys) {\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = isFunction(constructor) && constructor.prototype || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (_has(obj, prop) && !contains(_keys, prop)) _keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !contains(_keys, prop)) {\n _keys.push(prop);\n }\n }\n}\n\n// Retrieve the names of an object's own properties.\n// Delegates to **ECMAScript 5**'s native `Object.keys`.\nexport function keys(obj) {\n if (!isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var _keys = [];\n for (var key in obj) if (_has(obj, key)) _keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, _keys);\n return _keys;\n}\n\n// Retrieve all the property names of an object.\nexport function allKeys(obj) {\n if (!isObject(obj)) return [];\n var _keys = [];\n for (var key in obj) _keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, _keys);\n return _keys;\n}\n\n// Retrieve the values of an object's properties.\nexport function values(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[_keys[i]];\n }\n return values;\n}\n\n// Returns the results of applying the iteratee to each element of the object.\n// In contrast to map it returns an object.\nexport function mapObject(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = keys(obj),\n length = _keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = _keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n\n// Convert an object into a list of `[key, value]` pairs.\n// The opposite of object.\nexport function pairs(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [_keys[i], obj[_keys[i]]];\n }\n return pairs;\n}\n\n// Invert the keys and values of an object. The values must be serializable.\nexport function invert(obj) {\n var result = {};\n var _keys = keys(obj);\n for (var i = 0, length = _keys.length; i < length; i++) {\n result[obj[_keys[i]]] = _keys[i];\n }\n return result;\n}\n\n// Return a sorted list of the function names available on the object.\nexport function functions(obj) {\n var names = [];\n for (var key in obj) {\n if (isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n}\nexport { functions as methods };\n\n// An internal function for creating assigner functions.\nfunction createAssigner(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n _keys = keysFunc(source),\n l = _keys.length;\n for (var i = 0; i < l; i++) {\n var key = _keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n}\n\n// Extend a given object with all the properties in passed-in object(s).\nexport var extend = createAssigner(allKeys);\n\n// Assigns a given object with all the own properties in the passed-in object(s).\n// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\nexport var extendOwn = createAssigner(keys);\nexport { extendOwn as assign };\n\n// Returns the first key on an object that passes a predicate test.\nexport function findKey(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = keys(obj), key;\n for (var i = 0, length = _keys.length; i < length; i++) {\n key = _keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n}\n\n// Internal pick helper function to determine if `obj` has key `key`.\nfunction keyInObj(value, key, obj) {\n return key in obj;\n}\n\n// Return a copy of the object only containing the whitelisted properties.\nexport var pick = restArguments(function(obj, _keys) {\n var result = {}, iteratee = _keys[0];\n if (obj == null) return result;\n if (isFunction(iteratee)) {\n if (_keys.length > 1) iteratee = optimizeCb(iteratee, _keys[1]);\n _keys = allKeys(obj);\n } else {\n iteratee = keyInObj;\n _keys = _flatten(_keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = _keys.length; i < length; i++) {\n var key = _keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n});\n\n// Return a copy of the object without the blacklisted properties.\nexport var omit = restArguments(function(obj, _keys) {\n var iteratee = _keys[0], context;\n if (isFunction(iteratee)) {\n iteratee = negate(iteratee);\n if (_keys.length > 1) context = _keys[1];\n } else {\n _keys = map(_flatten(_keys, false, false), String);\n iteratee = function(value, key) {\n return !contains(_keys, key);\n };\n }\n return pick(obj, iteratee, context);\n});\n\n// Fill in a given object with default properties.\nexport var defaults = createAssigner(allKeys, true);\n\n// Creates an object that inherits from the given prototype object.\n// If additional properties are provided then they will be added to the\n// created object.\nexport function create(prototype, props) {\n var result = baseCreate(prototype);\n if (props) extendOwn(result, props);\n return result;\n}\n\n// Create a (shallow-cloned) duplicate of an object.\nexport function clone(obj) {\n if (!isObject(obj)) return obj;\n return isArray(obj) ? obj.slice() : extend({}, obj);\n}\n\n// Invokes interceptor with the obj, and then returns obj.\n// The primary purpose of this method is to \"tap into\" a method chain, in\n// order to perform operations on intermediate results within the chain.\nexport function tap(obj, interceptor) {\n interceptor(obj);\n return obj;\n}\n\n// Returns whether an object has a given set of `key:value` pairs.\nexport function isMatch(object, attrs) {\n var _keys = keys(attrs), length = _keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n}\n\n\n// Internal recursive comparison function for `isEqual`.\nfunction eq(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n}\n\n// Internal recursive comparison function for `isEqual`.\nfunction deepEq(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor &&\n isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var _keys = keys(a), key;\n length = _keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = _keys[length];\n if (!(_has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n}\n\n// Perform a deep comparison to check if two objects are equal.\nexport function isEqual(a, b) {\n return eq(a, b);\n}\n\n// Is a given array, string, or object empty?\n// An \"empty\" object has no enumerable own-properties.\nexport function isEmpty(obj) {\n if (obj == null) return true;\n if (isArrayLike(obj) && (isArray(obj) || isString(obj) || isArguments(obj))) return obj.length === 0;\n return keys(obj).length === 0;\n}\n\n// Is a given value a DOM element?\nexport function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n}\n\n// Internal function for creating a toString-based type tester.\nfunction tagTester(name) {\n return function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n}\n\n// Is a given value an array?\n// Delegates to ECMA5's native Array.isArray\nexport var isArray = nativeIsArray || tagTester('Array');\n\n// Is a given variable an object?\nexport function isObject(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n}\n\n// Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet.\nexport var isArguments = tagTester('Arguments');\nexport var isFunction = tagTester('Function');\nexport var isString = tagTester('String');\nexport var isNumber = tagTester('Number');\nexport var isDate = tagTester('Date');\nexport var isRegExp = tagTester('RegExp');\nexport var isError = tagTester('Error');\nexport var isSymbol = tagTester('Symbol');\nexport var isMap = tagTester('Map');\nexport var isWeakMap = tagTester('WeakMap');\nexport var isSet = tagTester('Set');\nexport var isWeakSet = tagTester('WeakSet');\n\n// Define a fallback version of the method in browsers (ahem, IE < 9), where\n// there isn't any inspectable \"Arguments\" type.\n(function() {\n if (!isArguments(arguments)) {\n isArguments = function(obj) {\n return _has(obj, 'callee');\n };\n }\n}());\n\n// Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n// IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\nvar nodelist = root.document && root.document.childNodes;\nif (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n}\n\n// Is a given object a finite number?\nexport function isFinite(obj) {\n return !isSymbol(obj) && _isFinite(obj) && !_isNaN(parseFloat(obj));\n}\n\n// Is the given value `NaN`?\nexport function isNaN(obj) {\n return isNumber(obj) && _isNaN(obj);\n}\n\n// Is a given value a boolean?\nexport function isBoolean(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n}\n\n// Is a given value equal to null?\nexport function isNull(obj) {\n return obj === null;\n}\n\n// Is a given variable undefined?\nexport function isUndefined(obj) {\n return obj === void 0;\n}\n\n// Shortcut function for checking if an object has a given property directly\n// on itself (in other words, not on a prototype).\nexport function has(obj, path) {\n if (!isArray(path)) {\n return _has(obj, path);\n }\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (obj == null || !hasOwnProperty.call(obj, key)) {\n return false;\n }\n obj = obj[key];\n }\n return !!length;\n}\n\n// Utility Functions\n// -----------------\n\n// Keep the identity function around for default iteratees.\nexport function identity(value) {\n return value;\n}\n\n// Predicate-generating functions. Often useful outside of Underscore.\nexport function constant(value) {\n return function() {\n return value;\n };\n}\n\nexport function noop(){}\n\n// Creates a function that, when passed an object, will traverse that object’s\n// properties down the given `path`, specified as an array of keys or indexes.\nexport function property(path) {\n if (!isArray(path)) {\n return shallowProperty(path);\n }\n return function(obj) {\n return deepGet(obj, path);\n };\n}\n\n// Generates a function for a given object that returns a given property.\nexport function propertyOf(obj) {\n if (obj == null) {\n return function(){};\n }\n return function(path) {\n return !isArray(path) ? obj[path] : deepGet(obj, path);\n };\n}\n\n// Returns a predicate for checking whether an object has a given set of\n// `key:value` pairs.\nexport function matcher(attrs) {\n attrs = extendOwn({}, attrs);\n return function(obj) {\n return isMatch(obj, attrs);\n };\n}\nexport { matcher as matches };\n\n// Run a function **n** times.\nexport function times(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n}\n\n// Return a random integer between min and max (inclusive).\nexport function random(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n}\n\n// A (possibly faster) way to get the current timestamp as an integer.\nexport var now = Date.now || function() {\n return new Date().getTime();\n};\n\n// List of HTML entities for escaping.\nvar escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n};\nvar unescapeMap = invert(escapeMap);\n\n// Functions for escaping and unescaping strings to/from HTML interpolation.\nfunction createEscaper(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n}\nexport var escape = createEscaper(escapeMap);\nexport var unescape = createEscaper(unescapeMap);\n\n// Traverses the children of `obj` along `path`. If a child is a function, it\n// is invoked with its parent as context. Returns the value of the final\n// child, or `fallback` if any child is undefined.\nexport function result(obj, path, fallback) {\n if (!isArray(path)) path = [path];\n var length = path.length;\n if (!length) {\n return isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = isFunction(prop) ? prop.call(obj) : prop;\n }\n return obj;\n}\n\n// Generate a unique integer id (unique within the entire client session).\n// Useful for temporary DOM ids.\nvar idCounter = 0;\nexport function uniqueId(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n}\n\n// By default, Underscore uses ERB-style template delimiters, change the\n// following template settings to use alternative delimiters.\nexport var templateSettings = _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n};\n\n// When customizing `templateSettings`, if you don't want to define an\n// interpolation, evaluation or escaping regex, we need one that is\n// guaranteed not to match.\nvar noMatch = /(.)^/;\n\n// Certain characters need to be escaped so that they can be put into a\n// string literal.\nvar escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n};\n\nvar escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\nvar escapeChar = function(match) {\n return '\\\\' + escapes[match];\n};\n\n// JavaScript micro-templating, similar to John Resig's implementation.\n// Underscore templating handles arbitrary delimiters, preserves whitespace,\n// and correctly escapes quotes within interpolated code.\n// NB: `oldSettings` only exists for backwards compatibility.\nexport function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n}\n\n// Add a \"chain\" function. Start chaining a wrapped Underscore object.\nexport function chain(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n}\n\n// OOP\n// ---------------\n// If Underscore is called as a function, it returns a wrapped object that\n// can be used OO-style. This wrapper holds altered versions of all the\n// underscore functions. Wrapped objects may be chained.\n\n// Helper function to continue chaining intermediate results.\nfunction chainResult(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n}\n\n// Add your own custom functions to the Underscore object.\nexport function mixin(obj) {\n each(functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_, args));\n };\n });\n return _;\n}\n\n// Add all mutator Array functions to the wrapper.\neach(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n return chainResult(this, obj);\n };\n});\n\n// Add all accessor Array functions to the wrapper.\neach(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return chainResult(this, method.apply(this._wrapped, arguments));\n };\n});\n\n// Extracts the result from a wrapped and chained object.\n_.prototype.value = function() {\n return this._wrapped;\n};\n\n// Provide unwrapping proxy for some methods used in engine operations\n// such as arithmetic and JSON stringification.\n_.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n_.prototype.toString = function() {\n return String(this._wrapped);\n};\n"],"sourceRoot":""}