{"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:///./.tmp/app_col_core/js/components/utils.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./.tmp/app_col_core/js/search.js","webpack:///./.tmp/app_col_core/js/search/search.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:///./.tmp/app_col_core/js/search/refinementBar.js","webpack:///./node_modules/hc-sticky/dist/hc-sticky.js","webpack:///./.tmp/app_col_core/js/search/compare.js","webpack:///./node_modules/underscore/modules/index-default.js","webpack:///./.tmp/app_col_core/js/components/processInclude.js","webpack:///./.tmp/app_col_core/js/components/breakpoints.js","webpack:///./.tmp/app_col_core/js/helper/sessionSpecificLocalStorageHelper.js","webpack:///./.tmp/app_col_core/js/components/keyboardAccessibility.js","webpack:///./node_modules/underscore/modules/index.js","webpack:///./.tmp/app_col_core/js/thirdParty/swiperInit.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/lodash/_root.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/lodash/_Symbol.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","keyValueArray","str","x","k","v","kvp","split","output","queryStringToObject","url","search","startIndex","indexOf","endIndex","substring","location","forEach","pair","nameVal","decodeURIComponent","JSON","parse","stringify","objectToQueryString","obj","urlString","path","hash","qsIndex","hashIndex","$","param","removeQueryParam","queryparam","URL","searchParams","delete","loadScript","src","callback","script","document","createElement","type","getElementsByTagName","appendChild","onload","loadJsAfterWindowLoad","readyState","addEventListener","heapify","list","ndx","heapSize","largest","left","right","cscUtils","appendParamToURL","encodeURIComponent","getParamsFromURL","arr","searchHash","postHash","arrHash","output2","keys","prop","updateURLParam","paramVal","newAdditionalURL","tempArray","baseURL","additionalURL","temp","arrayIntersection","a1","a2","map","inArray","createModalMarkup","content","defaults","title","showCloseBtn","enableLayeredDrawers","modalSizeClass","centeredClass","customClasses","modalId","buttons","settings","extend","dataAttributes","push","header","idAttribute","footer","footerBtns","btn","html","join","removeQueryParamFromCurrentUrl","href","history","replaceState","createBackdrop","customClass","append","removeBackdrop","selector","find","remove","setUrlKeyValue","val","qs","setUrlData","decodeQueryParam","elementInViewport","el","offsetToTop","top","offsetTop","offsetLeft","width","offsetWidth","height","offsetHeight","offsetParent","pageXOffset","pageYOffset","innerHeight","innerWidth","compatMode","documentElement","scrollTop","clientHeight","scrollLeft","clientWidth","insertAtInputCursor","formInput","input","start","selectionStart","end","selectionEnd","stringToTitleCase","word","toUpperCase","toLowerCase","getTimeAndHours","stageMessage","date","hours","getHours","minutes","getMinutes","ampm","findNHighest","listToUse","arrayLength","floor","firstListItem","heapifyMax","pop","deepEqual","obj1","obj2","reduce","isEqual","objectProto","nativeObjectToString","toString","isOwn","tag","unmasked","processInclude","ready","$drawerRefinement","utils","debounce","breakpoints","keyboardAccessibility","refinementBar","swiperInit","queryValue","$refineBar","$siteHeader","$productGrid","$moveableContainerXS","$moveableContainerLG","$moveableContainerXL","isShowAll","hrefValue","isAll","results","RegExp","exec","updateUrl","updateRobotsMeta","response","$updates","data","attr","updateDom","$results","$elemToUpdate","empty","setPagingParamsInBrowserUrlAndHistory","showAll","params","sz","query","isNaN","pagesize","scrollToPosition","pos","offset","animate","scrollWhenLoaded","counter","iterations","img","imgobj","complete","naturalWidth","isTileImageLoaded","handleRefinements","removeClass","each","classList","addClass","trigger","handleSizeFilterRefresh","hasClass","hideChips","$chips","numOfChips","showChips","toggleChips","$selector","scrollToGridTop","$productSearchResults","$header","currentScrollTop","resultsScrollTop","initSizeFilterShowMore","chipsToShowNum","containerWidth","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","initColorSwatchSwiper","initTileImageSwiper","stop","updateProductGrid","collapse","error","updateSortOptions","option","id","srule","triggerShowMore","$node","hrefVal","closest","last","after","appendProductGrid","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","passive","initShowUnavailable","unavailableParam","paramName","paramValue","updatedParams","set","updatedUrl","origin","pathname","triggerLazyLoad","openFilters","open","drawer","target","closedFilters","isLowRes","closeRefinements","close","enableScroll","quickFilters","$selectedCard","parent","resize","isHighRes","removeAttr","sort","applyFilter","targetUrl","$spinner","page","done","displayedCount","specialHandlers","resultsCount","$btnShowMore","$btnShowAll","parseResults","destroyStickyPLPComponents","children","stickyFilterHeader","initStickyPLPComponents","always","firstLoad","$link","parents","na","isNotAvailable","pushState","scrollToProduct","onLoadedDrawerRecommendations","constructor","ssrDocument","body","removeEventListener","activeElement","blur","nodeName","querySelector","querySelectorAll","getElementById","createEvent","initEvent","childNodes","style","setAttribute","createElementNS","importNode","host","hostname","protocol","getDocument","doc","ssrWindow","navigator","userAgent","go","back","CustomEvent","getComputedStyle","getPropertyValue","Image","screen","matchMedia","requestAnimationFrame","cancelAnimationFrame","getWindow","win","Dom7","items","proto","__proto__","makeReactive","super","Array","arrayFlat","res","isArray","arrayFilter","context","toCreate","tempParent","innerHTML","a","nodeType","uniqueArray","fn","support","deviceCached","browser","Methods","classes","classNames","add","className","contains","toggleClass","toggle","attrs","getAttribute","attrName","removeAttribute","transform","transition","duration","transitionDuration","eventType","targetSelector","listener","capture","handleLiveEvent","eventData","dom7EventData","unshift","is","handleEvent","j","events","event","dom7LiveListeners","proxyListener","dom7Listeners","handlers","handler","dom7proxy","splice","evt","detail","bubbles","cancelable","dataIndex","dispatchEvent","transitionEnd","dom","fireCallBack","includeMargins","styles","parseFloat","box","getBoundingClientRect","clientTop","clientLeft","scrollY","scrollX","props","textContent","compareWith","matches","webkitMatchesSelector","msMatchesSelector","child","previousSibling","eq","returnIndex","newChild","els","tempDiv","firstChild","prepend","insertBefore","next","nextElementSibling","nextAll","nextEls","prev","previousElementSibling","prevAll","prevEls","parentNode","foundElements","found","removeChild","nextTick","delay","getTranslate","matrix","curTransform","transformMatrix","axis","curStyle","currentStyle","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","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","noSwipingSelector","isTargetShadow","noSwiping","base","__closestFrom","assignedSlot","getRootNode","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","assign","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","onResize","setBreakpoint","snapGrid","updateSlides","slidesPerView","isEnd","isBeginning","centeredSlides","slides","autoplay","running","paused","run","watchOverflow","checkOverflow","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","previousTranslate","translatesDiff","methodName","writable","dummyEventAttached","dummyEventListener","touchEvents","domMethod","swiperMethod","passiveListeners","move","updateOnWindowResize","isGridEnabled","grid","rows","init","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","Number","size","getDirectionLabel","marginRight","getDirectionPropertyValue","label","swiperSize","wrongRTL","isVirtual","virtual","previousSlidesLength","slidesLength","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","slidePosition","prevSlideSize","virtualSize","marginLeft","marginBottom","marginTop","slideSize","gridEnabled","initSlides","shouldResetSlideSize","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","paddingLeft","paddingRight","boxSizing","swiperSlideSize","updateWrapperSize","newSlidesGrid","slidesGridItem","_","slideIndex","allSlidesSize","slideSizeValue","maxSnap","snap","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","updateSlidesOffset","updateAutoHeight","activeSlides","newHeight","getSlideByIndex","visibleSlides","ceil","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","y","translateTo","internal","translateBounds","newTranslate","isH","onTranslateToWrapperTransitionEnd","transitionStart","initial","Error","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","cloneNode","loopDestroy","moving","isLocked","cursor","unsetGrabCursor","attachEvents","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","fill","directionChanged","needsReLoop","changeDirection","isEnabled","disable","enable","containerEl","currentHeight","points","point","minRatio","substr","b","wasLocked","lastSlideIndex","lastSlideRightEdge","addClasses","suffixes","entries","prefix","resultClasses","item","autoheight","centered","removeClasses","images","loadImage","imageEl","srcset","sizes","checkForComplete","image","onReady","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","destroy","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","attach","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","position","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","display","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","updateStickyPLPComponents","hcSticky","stickTo","define","U","Y","bottom","bottomEnd","innerTop","innerSticker","stickyClass","followScroll","responsive","mobileFirst","onStart","onStop","onBeforeResize","resizeDebounce","queries","queryFlow","console","log","Q","X","f","Helpers","getStyle","u","isEmptyObject","stick","isAttached","release","detach","positionLeft","h","S","w","E","L","T","O","C","z","N","H","R","A","B","I","unbind","q","getCascadedStyle","verticalAlign","float","cssFloat","MozBoxSizing","HTMLDocument","Document","scrollHeight","F","M","D","P","W","V","refresh","triggerMethod","reinit","jQuery","configurable","srcElement","attachEvent","detachEvent","defaultView","borderTopWidth","borderLeftWidth","nextSibling","margin","$compareBar","$compareBarSlots","$compareBarForm","$compareBarTitle","$compareButton","compareHeaderText","compareSlotText","compareModalTitle","currentCategoryId","compareEnabled","lazyLoadedProductsExist","sessionSpecificLocalStorageHelper","getMaxSlots","maxSlots","productsForComparison","compareState","$modal","saveCompareState","products","modal","highlight","setItem","refreshHeader","redrawCompareSlots","product","idx","pid","colorId","imgSrc","compileSlot","numAvailableSlots","setCompareButton","enableCompareCheckboxes","deselectProduct","productsFiltered","downloadLazyImages","restoreCompareState","getItem","productsRestored","isModalActiveRestored","isModalHighlightRestored","$productTile","$productSwatch","$compareCheckbox","handleCompareBarToggleClick","handleWindowResize","handleCompareCheckboxEvents","$checkbox","$imagePrimarySelected","checked","pidIndex","findIndex","show","selectProduct","handleClearAllClick","deselectProductOnCompareBar","$button","handleCompareBarFormSubmit","eSubmit","dataType","serialize","htmlResponse","isModalHighlight","one","_satellite","track","pageName","pageType","productsOnPage","eClick","$swatch","initialize","mixin","allExports","include","isCurrentBreakpointAbbreviation","breakpointAbbreviation","$breakpointIndicator","isCurrentBreakpoint","abbreviation","currentBP","$bpIndicator","getSessionID","sessionCookie","cookie","startsWith","sessionId","keyName","sessionID","itemWrapper","json","localStorage","removeItem","buildFunction","keyFunctions","preFunction","scope","returnedScope","delegatedSelector","throttle","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","first","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","adjustSlides","sliderEl","swatchWidth","$container","$colorSwatches","isSwatchesFitContainer","swiperData","afterInit","swOptions","hasAttribute","handleEvents","freeSelf","webpackPolyfill","deprecate"],"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 = 298);\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","'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 no-mixed-operators\n const left = 2 * ndx + 1;\n // eslint-disable-next-line 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","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');\nconst swiperInit = require('../thirdParty/swiperInit');\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\n swiperInit.initColorSwatchSwiper();\n swiperInit.initTileImageSwiper();\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:lazyLoadSuccess');\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:lazyLoadSuccess');\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","/**\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","'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\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 }\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 * 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 $('input#' + pid).prop('checked', true);\n\n if (productsForComparison.length === maxSlots) {\n // Disable all checkboxes which are not selected.\n $('.js-compare-checkbox input:not(:checked)').attr('disabled', true);\n }\n }\n\n redrawCompareSlots();\n setCompareButton();\n refreshHeader();\n saveCompareState();\n\n $compareBar.show();\n}\n\n/**\n * Enables \"Compare\" checkboxes for product tiles.\n */\nfunction enableCompareCheckboxes() {\n if (productsForComparison.length < maxSlots) {\n $('.js-compare-checkbox input').removeAttr('disabled');\n }\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('active').hide();\n }\n\n $('.js-compare-checkbox input#' + pid).prop('checked', false);\n\n enableCompareCheckboxes();\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 enableCompareCheckboxes();\n\n $compareBar.removeClass('active').hide();\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 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 productsRestored.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\n if ($productTile.length && $productSwatch.length && $compareCheckbox.length) {\n $productSwatch.trigger('click');\n $compareCheckbox.trigger('click');\n }\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 compare bar toggle click.\n * Handles empty slot click.\n * Shows or hides compare bar body toggling \"active\" class on the top container.\n */\n handleCompareBarToggleClick: function () {\n $compareBar.on('click', '.js-compare-bar-toggle, .js-slot-empty', function (e) {\n e.preventDefault();\n $compareBar.toggleClass('active');\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 if (productsForComparison.length === maxSlots) {\n // Disable all checkboxes which are not selected\n $('.js-compare-checkbox input:not(:checked)').attr('disabled', true);\n } else {\n enableCompareCheckboxes();\n }\n\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('.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('active').hide();\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.show();\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 load of products\n $(document).on('search:lazyLoadSuccess', enableCompareCheckboxes);\n\n // Required for the initial page load only\n if (lazyLoadedProductsExist) {\n $(document).one('search:lazyLoadSuccess', restoreCompareState);\n } else {\n enableCompareCheckboxes();\n restoreCompareState();\n }\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\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","'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","'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","// 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","'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:lazyLoadSuccess', () => {\n initColorSwatchSwiper();\n initTileImageSwiper();\n });\n }\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","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","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","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n"],"sourceRoot":""}