{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/lodash/debounce.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/now.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/toNumber.js","webpack:///./node_modules/lodash/_baseTrim.js","webpack:///./node_modules/lodash/_trimmedEndIndex.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./.tmp/app_sor_eu_core/js/search.js","webpack:///./.tmp/app_sor_eu_core/js/search/search.js","webpack:///./.tmp/app_sor_eu_core/js/search/refinementBar.js","webpack:///./node_modules/hc-sticky/dist/hc-sticky.js","webpack:///./.tmp/app_sor_eu_core/js/search/compare.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_sor_eu_core/js/components/utils.js","webpack:///./node_modules/underscore/modules/index-default.js","webpack:///./.tmp/app_sor_eu_core/js/components/processInclude.js","webpack:///./.tmp/app_sor_eu_core/js/helper/sessionSpecificLocalStorageHelper.js","webpack:///./.tmp/app_sor_eu_core/js/components/keyboardAccessibility.js","webpack:///./.tmp/app_sor_eu_core/js/components/breakpoints.js","webpack:///./.tmp/app_sor_eu_core/js/thirdParty/swiperInit.js","webpack:///./node_modules/underscore/modules/index.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","objectProto","nativeObjectToString","toString","isOwn","tag","unmasked","processInclude","$","document","ready","$drawerRefinement","utils","debounce","breakpoints","keyboardAccessibility","refinementBar","swiperInit","queryValue","$refineBar","$siteHeader","$productGrid","$moveableContainerXS","$moveableContainerLG","$moveableContainerXL","isShowAll","hrefValue","isAll","indexOf","results","RegExp","exec","updateUrl","url","updateRobotsMeta","response","selector","$updates","append","find","content","data","attr","updateDom","$results","$elemToUpdate","empty","html","setPagingParamsInBrowserUrlAndHistory","showAll","params","getParamsFromURL","start","sz","query","keys","forEach","prop","push","isNaN","pagesize","join","history","replaceState","scrollToPosition","pos","el","offset","top","animate","scrollTop","scrollWhenLoaded","counter","iterations","img","imgobj","complete","naturalWidth","isTileImageLoaded","handleRefinements","removeClass","each","classList","remove","addClass","trigger","handleSizeFilterRefresh","hasClass","hideChips","$chips","numOfChips","showChips","toggleChips","$selector","scrollToGridTop","$productSearchResults","$header","currentScrollTop","resultsScrollTop","height","initSizeFilterShowMore","chipsToShowNum","containerWidth","width","chipWidth","outerWidth","13","filter","click","off","on","updateSortByLabel","selectedOption","$sortByDropdown","defaultLabel","$activeOptionItem","text","trim","reinitLazyLoad","lazyLoadInstance","LazyLoad","elements_selector","use_native","load_delay","update","initSortDropdown","$menuOptions","preventDefault","$clickedItem","optionId","spinner","ajax","selectedUrl","method","success","initColorSwatchSwiper","initTileImageSwiper","stop","updateProductGrid","collapse","error","updateSortOptions","option","id","location","href","srule","triggerShowMore","$node","hrefVal","closest","last","after","appendProductGrid","val","initializeShowMore","stopPropagation","updateRefinementBarHeight","$refinementBar","$filterRefinements","filtersHeaderHeight","outerHeight","refinementApplyHeight","css","getUrlVars","getUrlParams","initializeOnRefresh","isShowAllExist","all","scrollPos","spos","getLazyLoadedProducts","$loadingDots","injectBannerContent","$contentContainer","$destination","getCurrentBreakpoint","appendTo","initRefinements","initBannerContent","newBreakpoint","lastBreakpoint","addEventListener","passive","initShowUnavailable","unavailableParam","URL","split","paramName","paramValue","updatedParams","searchParams","set","updatedUrl","origin","pathname","triggerLazyLoad","openFilters","open","drawer","target","closedFilters","isLowRes","closeRefinements","close","removeBackdrop","enableScroll","quickFilters","$selectedCard","parent","resize","isHighRes","removeAttr","sort","applyFilter","input","targetUrl","appendParamToURL","$spinner","page","done","displayedCount","specialHandlers","resultsCount","$btnShowMore","$btnShowAll","parseResults","destroyStickyPLPComponents","children","stickyFilterHeader","initStickyPLPComponents","always","firstLoad","qs","$link","parents","setUrlKeyValue","decodeURIComponent","na","isNotAvailable","str","pushState","scrollToProduct","onLoadedDrawerRecommendations","updateStickyPLPComponents","hcSticky","stickTo","Error","define","U","Y","bottom","bottomEnd","innerTop","innerSticker","stickyClass","followScroll","responsive","mobileFirst","onStart","onStop","onBeforeResize","onResize","resizeDebounce","disable","queries","queryFlow","console","log","Q","X","f","querySelector","Helpers","parentNode","getStyle","style","position","u","isEmptyObject","assign","innerWidth","a","stick","isAttached","attach","left","offsetLeft","add","className","release","detach","positionLeft","createElement","init","marginLeft","insertBefore","removeChild","h","v","y","b","S","w","k","E","x","L","T","j","O","C","z","pageYOffset","documentElement","N","H","R","offsetHeight","ceil","A","B","I","event","unbind","q","offsetParent","getCascadedStyle","right","display","verticalAlign","boxSizing","marginRight","marginTop","marginBottom","paddingLeft","paddingRight","float","cssFloat","MozBoxSizing","offsetWidth","nodeType","HTMLDocument","Document","clientHeight","body","scrollHeight","innerHeight","offsetTop","parseFloat","F","M","D","P","W","V","refresh","destroy","triggerMethod","reinit","jQuery","fn","extend","writable","configurable","Array","srcElement","attachEvent","handleEvent","removeEventListener","detachEvent","getComputedStyle","defaultView","getPropertyValue","currentStyle","toUpperCase","getBoundingClientRect","pageXOffset","scrollLeft","contains","borderTopWidth","borderLeftWidth","cloneNode","querySelectorAll","removeAttribute","nextSibling","margin","$compareBar","$compareBarSlots","$compareBarForm","$compareBarTitle","$compareButton","compareHeaderText","compareSlotText","compareModalTitle","currentCategoryId","compareEnabled","lazyLoadedProductsExist","sessionSpecificLocalStorageHelper","getMaxSlots","maxSlots","productsForComparison","compareState","$modal","saveCompareState","products","modal","highlight","setItem","refreshHeader","redrawCompareSlots","map","product","idx","pid","colorId","imgSrc","compileSlot","numAvailableSlots","setCompareButton","enableCompareCheckboxes","deselectProduct","productsFiltered","hide","downloadLazyImages","restoreCompareState","getItem","productsRestored","isModalActiveRestored","isModalHighlightRestored","$productTile","$productSwatch","$compareCheckbox","handleCompareBarToggleClick","toggleClass","handleWindowResize","pop","handleCompareCheckboxEvents","$checkbox","$imagePrimarySelected","checked","is","pidIndex","findIndex","show","selectProduct","handleClearAllClick","deselectProductOnCompareBar","$button","handleCompareBarFormSubmit","eSubmit","type","dataType","serialize","htmlResponse","isModalHighlight","title","modalSizeClass","customClasses","one","_satellite","track","pageName","pageType","productsOnPage","eClick","$swatch","initialize","obj","constructor","src","ssrDocument","activeElement","blur","nodeName","getElementById","createEvent","initEvent","childNodes","setAttribute","getElementsByTagName","createElementNS","importNode","hash","host","hostname","protocol","search","getDocument","doc","ssrWindow","navigator","userAgent","go","back","CustomEvent","Image","screen","matchMedia","requestAnimationFrame","callback","cancelAnimationFrame","getWindow","win","Dom7","items","proto","__proto__","makeReactive","super","arrayFlat","arr","res","isArray","arrayFilter","context","toCreate","tempParent","innerHTML","uniqueArray","support","deviceCached","browser","Methods","classes","classNames","toggle","attrs","getAttribute","attrName","transform","transition","duration","transitionDuration","eventType","targetSelector","listener","capture","handleLiveEvent","eventData","dom7EventData","unshift","events","dom7LiveListeners","proxyListener","dom7Listeners","handlers","handler","dom7proxy","splice","evt","detail","bubbles","cancelable","dataIndex","dispatchEvent","transitionEnd","dom","fireCallBack","includeMargins","styles","box","clientTop","clientLeft","scrollY","scrollX","props","textContent","compareWith","matches","webkitMatchesSelector","msMatchesSelector","child","previousSibling","eq","returnIndex","newChild","els","tempDiv","firstChild","appendChild","prepend","next","nextElementSibling","nextAll","nextEls","prev","previousElementSibling","prevAll","prevEls","foundElements","found","nextTick","delay","getTranslate","matrix","curTransform","transformMatrix","axis","curStyle","WebKitCSSMatrix","webkitTransform","MozTransform","OTransform","MsTransform","msTransform","m41","m42","node","to","noExtend","nextSource","HTMLElement","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","__swiper__","setCSSProperty","varName","varValue","setProperty","animateCSSModeScroll","side","swiper","targetPosition","startPosition","translate","startTime","speed","wrapperEl","scrollSnapType","cssModeFrameID","dir","isOutOfBound","current","getTime","progress","easeProgress","cos","PI","currentPosition","scrollTo","overflow","getSupport","smoothScroll","touch","DocumentTouch","passiveListener","supportsPassive","opts","gestures","getDevice","overrides","platform","ua","device","ios","android","screenWidth","screenHeight","match","ipad","ipod","iphone","windows","macos","os","getBrowser","isSafari","toLowerCase","isWebView","transitionEmit","step","runCallbacks","direction","activeIndex","previousIndex","emit","onTouchStart","touchEventsData","touches","enabled","animating","preventInteractionOnTransition","cssMode","loop","loopFix","originalEvent","$targetEl","touchEventsTarget","isTouchEvent","which","button","isTouched","isMoved","noSwipingClass","shadowRoot","path","noSwipingSelector","isTargetShadow","noSwiping","base","__closestFrom","assignedSlot","getRootNode","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","updateSize","swipeDirection","threshold","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","onTouchMove","rtl","rtlTranslate","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","isVertical","maxTranslate","minTranslate","diffX","diffY","sqrt","touchAngle","isHorizontal","atan2","abs","touchMoveStopPropagation","nested","startTranslate","setTransition","$wrapperEl","allowMomentumBounce","grabCursor","allowSlideNext","allowSlidePrev","setGrabCursor","diff","touchRatio","currentTranslate","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","watchSlidesProgress","updateActiveIndex","updateSlidesClasses","updateProgress","setTranslate","onTouchEnd","slidesGrid","currentPos","touchEndTime","timeDiff","updateClickedSlide","lastClickTime","destroyed","stopIndex","groupSize","slidesSizesGrid","slidesPerGroupSkip","slidesPerGroup","increment","ratio","longSwipesMs","longSwipes","slideTo","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","setBreakpoint","snapGrid","updateSlides","slidesPerView","isEnd","isBeginning","centeredSlides","slides","autoplay","running","paused","run","watchOverflow","checkOverflow","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","previousTranslate","translatesDiff","methodName","dummyEventAttached","dummyEventListener","touchEvents","domMethod","swiperMethod","passiveListeners","move","end","updateOnWindowResize","isGridEnabled","grid","rows","defaults","initialSlide","resizeObserver","createElements","autoHeight","setWrapperSize","virtualTranslate","effect","breakpointsBase","spaceBetween","slidesPerGroupAuto","centeredSlidesBounds","slidesOffsetBefore","slidesOffsetAfter","normalizeSlideIndex","centerInsufficientSlides","roundLengths","simulateTouch","uniqueNavElements","slideToClickedSlide","preloadImages","updateOnImagesReady","loopAdditionalSlides","loopedSlides","loopFillGroupWithBlank","loopPreventsSlide","containerModifierClass","slideClass","slideBlankClass","slideActiveClass","slideDuplicateActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slideDuplicateNextClass","slidePrevClass","slideDuplicatePrevClass","wrapperClass","runCallbacksOnInit","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","eventsEmitter","priority","self","eventsListeners","once","onceHandler","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","$el","clientWidth","Number","size","getDirectionLabel","getDirectionPropertyValue","label","swiperSize","wrongRTL","isVirtual","virtual","previousSlidesLength","slidesLength","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","slidePosition","prevSlideSize","virtualSize","slideSize","gridEnabled","initSlides","shouldResetSlideSize","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","floor","swiperSlideSize","updateWrapperSize","newSlidesGrid","slidesGridItem","_","slideIndex","allSlidesSize","slideSizeValue","maxSnap","snap","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","updateSlidesOffset","updateAutoHeight","activeSlides","newHeight","getSlideByIndex","visibleSlides","swiperSlideOffset","updateSlidesProgress","offsetCenter","visibleSlidesIndexes","slideOffset","slideProgress","slideBefore","slideAfter","multiplier","wasBeginning","wasEnd","activeSlide","realIndex","nextSlide","prevSlide","emitSlidesClasses","newActiveIndex","previousRealIndex","previousSnapIndex","skip","initialized","slideFound","clickedSlide","clickedIndex","byController","translateTo","internal","translateBounds","newTranslate","isH","onTranslateToWrapperTransitionEnd","transitionStart","initial","indexAsNumber","isFinite","normalizedTranslate","normalizedGrid","normalizedGridNext","_immediateVirtual","_swiperImmediateVirtual","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","slideNext","perGroup","slidesPerViewDynamic","_clientLeft","slidePrev","normalize","prevSnapIndex","normalizedSnapGrid","prevSnap","prevIndex","slideReset","slideToClosest","currentSnap","slideToIndex","loopCreate","blankSlidesNum","blankNode","prependSlides","appendSlides","loopDestroy","moving","isLocked","cursor","unsetGrabCursor","attachEvents","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","fill","directionChanged","needsReLoop","changeDirection","isEnabled","enable","containerEl","currentHeight","points","point","minRatio","substr","wasLocked","lastSlideIndex","lastSlideRightEdge","addClasses","suffixes","entries","prefix","resultClasses","item","autoheight","centered","removeClasses","images","loadImage","imageEl","srcset","sizes","checkForComplete","image","onReady","onload","onerror","imagesLoaded","imagesToLoad","currentSrc","extendedDefaults","Swiper","swipers","newParams","__modules__","mod","extendParams","swiperParams","passedParams","eventName","velocity","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","velocities","installModule","extendDefaults","newDefaults","use","setProgress","cls","getSlideClasses","slideEl","updates","view","exact","spv","breakLoop","translateValue","newDirection","needUpdate","currentDirection","mount","mounted","getWrapperSelector","wrapper","deleteInstance","cleanStyles","createElementIfNotDefined","checkProps","element","classesToSelector","appendSlide","observer","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","effectInit","overwriteParams","perspective","overwriteParamsResult","_s","effectTarget","effectParams","$slideEl","transformEl","effectVirtualTransitionEnd","allSlides","eventTriggered","triggerEvents","createShadow","shadowClass","$shadowContainer","$shadowEl","prototypeGroup","protoMethod","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","contentBoxSize","contentRect","inlineSize","blockSize","observe","unobserve","observers","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","attributes","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","cssModeTimeout","renderSlide","cache","force","addSlidesBefore","addSlidesAfter","previousFrom","from","previousTo","previousSlidesGrid","previousOffset","offsetProp","slidesAfter","slidesBefore","onRendered","lazy","load","renderExternal","slidesToRender","renderExternalUpdate","prependIndexes","appendIndexes","numberOfNewSlides","newCache","cachedIndex","$cachedEl","cachedElIndex","handle","kc","keyCode","charCode","pageUpDown","keyboard","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","shiftKey","altKey","ctrlKey","metaKey","onlyInViewport","inView","swiperWidth","swiperHeight","windowWidth","windowHeight","swiperOffset","swiperCoord","returnValue","timeout","mousewheel","releaseOnEdges","invert","forceToAxis","sensitivity","eventsTarget","thresholdDelta","thresholdTime","lastEventBeforeSnap","lastScrollTime","recentWheelEvents","handleMouseEnter","mouseEntered","handleMouseLeave","animateSlider","newEvent","delta","raw","rtlFactor","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","positions","sign","ignoreWheelEvents","sticky","shift","prevEvent","firstEvent","snapToThreshold","autoplayDisableOnInteraction","getEl","toggleEl","disabled","disabledClass","tagName","lockClass","$nextEl","$prevEl","onPrevClick","onNextClick","hideOnClick","hiddenClass","targetEl","pagination","clickable","isHidden","bulletSize","pfx","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","$bulletEl","total","paginationType","firstIndex","lastIndex","midIndex","suffix","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","progressbarDirection","scale","scaleX","scaleY","render","paginationHTML","numberOfBullets","dragStartPos","dragSize","trackSize","divider","dragTimeout","scrollbar","$dragEl","newSize","newPos","opacity","getPointerPosition","clientX","clientY","setDragPosition","positionRatio","onDragStart","onDragMove","onDragEnd","snapOnRelease","activeListener","eventMethod","$swiperEl","dragClass","dragEl","draggable","parallax","setTransform","currentOpacity","currentScale","_swiper","parallaxEl","$parallaxEl","parallaxDuration","zoom","maxRatio","containerClass","zoomedSlideClass","gesturesEnabled","fakeGestureTouched","fakeGestureMoved","isScaling","gesture","slideWidth","slideHeight","$imageEl","$imageWrapEl","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","x2","y2","onGestureStart","scaleStart","onGestureChange","scaleMove","onGestureEnd","scaledWidth","scaledHeight","onTransitionEnd","zoomIn","touchX","touchY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","touchAction","zoomOut","zoomToggle","getListeners","activeListenerWithCapture","getSlideSelector","toggleGestures","slideSelector","enableGestures","disableGestures","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","momentumDuration","in","out","checkInView","loadPrevNext","loadPrevNextAmount","loadOnTransitionStart","scrollingElement","elementClass","loadingClass","loadedClass","preloaderClass","scrollHandlerAttached","initialImageLoaded","loadInSlide","loadInDuplicate","$images","background","$pictureEl","sourceEl","$source","slideOriginalIndex","slideExist","amount","maxIndex","minIndex","checkInViewOnLoad","$scrollElement","isWindow","scrollElementWidth","scrollElementHeight","LinearSpline","i1","i3","binarySearch","guess","array","interpolate","removeSpline","controller","control","spline","inverse","by","_t","controlledTranslate","controlled","setControlledTranslate","setControlledTransition","a11y","notificationClass","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","slideLabelMessage","containerMessage","containerRoleDescriptionMessage","itemRoleDescriptionMessage","slideRole","liveRegion","notify","message","notification","makeElFocusable","makeElNotFocusable","addElRole","role","addElRoleDescription","description","addElLabel","disableEl","enableEl","onEnterOrSpaceKey","updateNavigation","hasPagination","initNavEl","wrapperId","controls","$containerEl","repeat","round","random","live","bulletEl","paths","slugify","getPathValues","urlOverride","pathArray","part","setHistory","includes","currentState","state","scrollToSlide","setHistoryPopState","hashNavigation","watchState","onHashChange","newHash","setHash","$activeSlideEl","autoplayResult","reverseDirection","stopOnLastSlide","pause","waitForTransition","onVisibilityChange","visibilityState","onMouseEnter","disableOnInteraction","onMouseLeave","pauseOnMouseEnter","thumbs","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","swiperCreated","onThumbClick","thumbsSwiper","currentIndex","thumbsParams","SwiperClass","thumbsSwiperParams","useOffset","newThumbsIndex","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","thumbsToActivate","thumbActiveClass","momentum","momentumRatio","momentumBounce","momentumBounceRatio","momentumVelocityRatio","minimumVelocity","lastMoveEvent","velocityEvent","distance","momentumDistance","newPosition","afterBouncePosition","needsLoopFix","doBounce","bounceAmount","moveDistance","currentSlideSize","slidesNumberEvenToRows","slidesPerRow","numFullColumns","newSlideOrderIndex","column","row","groupIndex","slideIndexInGroup","columnsInGroup","order","fadeEffect","crossFade","tx","ty","slideOpacity","cubeEffect","slideShadows","shadow","shadowOffset","shadowScale","$cubeShadowEl","wrapperRotate","slideAngle","tz","shadowBefore","shadowAfter","shadowAngle","sin","scale1","scale2","zFactor","flipEffect","limitRotation","rotateY","rotateX","zIndex","coverflowEffect","rotate","stretch","depth","modifier","center","offsetMultiplier","translateZ","slideTransform","$shadowBeforeEl","$shadowAfterEl","creativeEffect","limitProgress","shadowPerProgress","progressMultiplier","custom","getTranslateValue","translateString","rotateString","scaleString","opacityString","shadowOpacity","cardsEffect","tX","tY","tZ","tXAdd","isSwipeToNext","isSwipeToPrev","subProgress","prevY","keyValueArray","kvp","output","queryStringToObject","startIndex","endIndex","substring","pair","nameVal","JSON","parse","stringify","objectToQueryString","urlString","qsIndex","hashIndex","param","removeQueryParam","queryparam","delete","loadScript","script","loadJsAfterWindowLoad","readyState","heapify","list","ndx","heapSize","largest","cscUtils","encodeURIComponent","searchHash","postHash","arrHash","output2","updateURLParam","paramVal","newAdditionalURL","tempArray","baseURL","additionalURL","temp","arrayIntersection","a1","a2","inArray","createModalMarkup","showCloseBtn","enableLayeredDrawers","centeredClass","modalId","buttons","settings","dataAttributes","header","idAttribute","footer","footerBtns","btn","removeQueryParamFromCurrentUrl","createBackdrop","customClass","setUrlData","decodeQueryParam","elementInViewport","offsetToTop","compatMode","insertAtInputCursor","formInput","selectionStart","selectionEnd","stringToTitleCase","word","getTimeAndHours","stageMessage","date","hours","getHours","minutes","getMinutes","ampm","findNHighest","listToUse","arrayLength","firstListItem","heapifyMax","deepEqual","obj1","obj2","reduce","isEqual","mixin","allExports","include","getSessionID","sessionCookie","cookie","startsWith","sessionId","keyName","sessionID","itemWrapper","json","localStorage","removeItem","buildFunction","keyFunctions","preFunction","scope","returnedScope","delegatedSelector","throttle","isCurrentBreakpointAbbreviation","breakpointAbbreviation","$breakpointIndicator","isCurrentBreakpoint","abbreviation","currentBP","$bpIndicator","adjustSlides","sliderEl","swatchWidth","$container","$colorSwatches","first","isSwatchesFitContainer","swiperData","afterInit","swOptions","hasAttribute","handleEvents","ArrayProto","ObjProto","SymbolProto","nativeIsArray","nativeKeys","nativeCreate","_isNaN","_isFinite","Ctor","_wrapped","VERSION","optimizeCb","argCount","collection","accumulator","baseIteratee","identity","isFunction","matcher","iteratee","Infinity","cb","restArguments","rest","baseCreate","shallowProperty","_has","deepGet","MAX_ARRAY_INDEX","pow","getLength","isArrayLike","_keys","currentKey","createReduce","reducer","memo","reduceRight","predicate","findKey","reject","negate","every","some","fromIndex","guard","values","invoke","contextPath","pluck","where","findWhere","computed","lastComputed","shuffle","sample","clone","rand","sortBy","criteria","group","behavior","partition","groupBy","indexBy","countBy","reStrSymbol","toArray","isString","pass","compact","Boolean","_flatten","shallow","strict","isArguments","flatten","without","otherArrays","difference","uniq","isSorted","isBoolean","seen","union","arrays","intersection","argsLength","unzip","zip","createPredicateIndexFinder","findLastIndex","sortedIndex","low","high","mid","createIndexFinder","predicateFind","lastIndexOf","range","chunk","count","executeBound","sourceFunc","boundFunc","callingContext","bound","callArgs","concat","partial","boundArgs","placeholder","bindAll","memoize","hasher","address","defer","previous","later","throttled","_now","remaining","immediate","callNow","wrap","compose","times","before","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","collectNonEnumProps","nonEnumIdx","allKeys","mapObject","pairs","functions","names","createAssigner","keysFunc","source","extendOwn","keyInObj","pick","omit","String","tap","interceptor","isMatch","aStack","bStack","areArrays","aCtor","bCtor","deepEq","isEmpty","isElement","tagTester","isNumber","isDate","isRegExp","isError","isMap","isWeakMap","isSet","isWeakSet","nodelist","isNull","isUndefined","has","constant","noop","propertyOf","accum","Int8Array","escapeMap","unescapeMap","createEscaper","escaper","testRegexp","replaceRegexp","escape","unescape","fallback","idCounter","uniqueId","templateSettings","evaluate","noMatch","escapes","escapeRegExp","escapeChar","template","oldSettings","variable","argument","chain","instance","_chain","chainResult","toJSON","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 = 285);\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","'use strict';\n\nvar processInclude = require('./components/processInclude');\n\n$(document).ready(function () {\n processInclude(require('./search/search'));\n processInclude(require('./search/compare'));\n});\n","/* global LazyLoad */\n'use strict';\n\nconst utils = require('../components/utils');\nconst debounce = require('lodash/debounce');\nconst breakpoints = require('../components/breakpoints');\nconst keyboardAccessibility = require('../components/keyboardAccessibility');\nconst refinementBar = require('./refinementBar');\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","'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","/**\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\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","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 * Gets the current session ID.\n * @returns {string} returns the session ID if it can be found.\n */\nfunction getSessionID() {\n /**\n * Ideally we would use dwsid, which SFCC logs.\n * However, its stored in a cookie that is inaccessible to client JS.\n * 'sid' also identifies the current browsing session, matches session.sessionID, and is client JS accessible.\n * Per SFCC:\n * - session.sessionID: this can safely be used as an identifier against external systems.\n * - sid cookie: identifies the current browsing session.\n */\n const sessionCookie = document.cookie\n .split('; ')\n .find((row) => row.startsWith('sid='));\n\n const sessionId = sessionCookie ? sessionCookie.split('=')[1] : null;\n\n if (!sessionId) {\n // eslint-disable-next-line no-console\n console.error('getSessionID: could not determine session ID');\n }\n\n return sessionId;\n}\n\n/**\n * Gets an item from local storage, that was previously JSON stringified.\n * If the session ID that was stored with the item,\n * doesn't match the current ID then local storage is cleared and null returned.\n * Note: for non-primitive types, like for dates, JSON.parse will leave it as string.\n * @param {string} keyName - name of the key where the item is stored\n * @returns {*} the stored item or null (particularly if session ID has changed)\n */\nfunction getItem(keyName) {\n const sessionID = getSessionID();\n\n if (!sessionID) {\n return null;\n }\n\n const json = localStorage.getItem(keyName);\n let itemWrapper;\n\n if (json) {\n try {\n /**\n * In the future, if additional customization is needed,\n * add 'reviver' as an optional argument to getItem and pass it into JSON.parse.\n */\n itemWrapper = JSON.parse(json);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(`Unable to parse ${keyName}': ${e.message}; ${json}`);\n }\n }\n\n if (!itemWrapper) {\n return null;\n }\n\n // Session has change remove the item\n if (itemWrapper.sessionID !== sessionID) {\n localStorage.removeItem(keyName);\n return null;\n }\n\n return itemWrapper.item;\n}\n\n/**\n * Sets an item in local storage after passing it through JSON stringify along with its session ID.\n * @param {string} keyName - name of the key where the item is stored\n * @param {*} item - item to store\n * @returns {boolean} true if item is successfully stored, otherwise false.\n */\nfunction setItem(keyName, item) {\n const itemWrapper = {\n sessionID: getSessionID(),\n item: item\n };\n\n if (!itemWrapper.sessionID) {\n return false;\n }\n\n localStorage.setItem(keyName, JSON.stringify(itemWrapper));\n return true;\n}\n\nmodule.exports = {\n getItem: getItem,\n setItem: setItem\n};\n","'use strict';\n\nconst _ = require('underscore');\n\n/**\n * Usage:\n *\n * var keyboardAccessibility = require('./keyboardAccessibility');\n *\n * keyboardAccessibility('.main-menu .sitenav-primary-a', // <-- Selector for keydown event\n * {\n * // Keycode and function handler\n * 40: function (menuItem) { // down\n * if (menuItem.hasClass('nav-item')) { // top level\n * $('.navbar-nav .show').removeClass('show')\n * .children('.dropdown-menu')\n * .removeClass('show');\n * menuItem.addClass('show').children('.dropdown-menu').addClass('show');\n * $(this).attr('aria-expanded', 'true');\n * menuItem.find('ul > li > a')\n * .first()\n * .focus();\n * return true; // <-- Prevent default\n * } else {\n * menuItem.removeClass('show').children('.dropdown-menu').removeClass('show');\n * $(this).attr('aria-expanded', 'false');\n * menuItem.next().children().first().focus();\n * return true; // <-- Prevent default\n * }\n * return false; // <-- Allow default\n * },\n * 39: function (menuItem) { // right\n * // Another function\n * }\n * },\n * function () {\n * // Prefunction call which passes a jQuery object to the above function.\n * return $(this).parent();\n * }\n * );\n */\n\nconst buildFunction = function (keyFunctions, preFunction, event, scope) {\n const key = event.which;\n const returnedScope = preFunction.call(scope, event);\n if (keyFunctions[key]) {\n const preventEvent = keyFunctions[key].call(scope, returnedScope, event);\n if (preventEvent) {\n // Generally not needed to block keyboard event unless you want\n // to prevent browser behavior. Tab key is a good example.\n // Or blocking up/down to prevent window scrolling.\n event.stopPropagation();\n event.preventDefault();\n }\n }\n};\n\nmodule.exports = function (selector, keyFunctions, preFunction, delegatedSelector) {\n if (delegatedSelector) {\n $(delegatedSelector).on('keydown', selector, function (e) {\n _.throttle(buildFunction(keyFunctions, preFunction, e, this), 100);\n });\n } else {\n $(selector).on('keydown', function (e) {\n _.throttle(buildFunction(keyFunctions, preFunction, e, this), 100);\n });\n }\n};\n","'use strict';\n\n/**\n* Checks if the current bootstrap UI breakpoint matches the breakpoint abbreviation.\n* @param {string} breakpointAbbreviation Breakpoint abbreviations. Options are: xs, sm, md, lg, xl\n* @returns {boolean} True if the breakpoint abbreviation is the current breakpoint.\n*/\nfunction isCurrentBreakpointAbbreviation(breakpointAbbreviation) {\n if (\n breakpointAbbreviation !== 'xs' &&\n breakpointAbbreviation !== 'sm' &&\n breakpointAbbreviation !== 'md' &&\n breakpointAbbreviation !== 'lg' &&\n breakpointAbbreviation !== 'xl') {\n throw new Error('Invalid breakpoint abbreviation: ' + breakpointAbbreviation);\n }\n\n var selector = '.bootstrap-breakpoints-' + breakpointAbbreviation;\n var $breakpointIndicator = $(selector);\n\n if ($breakpointIndicator.length === 0) {\n throw new Error('Breakpoint indicator not found for: ' + breakpointAbbreviation);\n }\n return $breakpointIndicator.css('display') === 'block';\n}\n\n/**\n * Finds the current breakpoint from the hidden .bootstrap-breakpoints element.\n * @returns {string} The currently active breakpoint abbreviation. ('xs', 'sm', 'md', 'lg', or 'xl')\n */\nfunction getCurrentBreakpoint() {\n var $breakpointIndicators = $('.bootstrap-breakpoints > div');\n var currentBP;\n $breakpointIndicators.each(function () {\n var $bpIndicator = $(this);\n if ($bpIndicator.css('display') === 'block') {\n currentBP = $bpIndicator.data('bp');\n return false; // break out of the each loop\n }\n return true; // continue to next item in loop\n });\n return currentBP;\n}\n\nmodule.exports = {\n /**\n * This check is only for the resolution of the screen, it should\n * not be used to infer device type or user interaction (touch/click).\n * @returns {boolean} True if the screen is low resolution.\n */\n isLowRes: function () {\n return this.isCurrentBreakpoint('xs', 'sm', 'md');\n },\n /**\n * This check is only for the resolution of the screen, it should\n * not be used to infer device type or user interaction (touch/click).\n * @returns {boolean} True if the screen is high resolution.\n */\n isHighRes: function () {\n return this.isCurrentBreakpoint('lg', 'xl');\n },\n\n /**\n * Checks if the current bootstrap UI breakpoint matches a parameter.\n * @example isCurrentBreakpoint('xs', 'sm')\n * @param {arguments} breakpointAbbreviations One of more comma separated string breakpoint parameters. Options are: xs, sm, md, lg, xl\n * @returns {boolean} True if any of the breakpoint abbreviations are the current breakpoint.\n */\n isCurrentBreakpoint: function () {\n if (arguments.length === 0) {\n throw new Error('No breakpoint abbreviations specified.');\n }\n\n for (var i = 0, len = arguments.length; i < len; i++) {\n var abbreviation = arguments[i];\n\n if (isCurrentBreakpointAbbreviation(abbreviation)) {\n return true;\n }\n }\n\n /**\n * NOTE: it is explicitly intentional that this function accepts the breakpoint abbreviations and returns a boolean.\n * If the function was instead 'getCurrentBreakpoint' where it returns the breakpoint abbreviation...\n * then it might make future refactors and bootstrap updates more difficult if the abbreviations change\n * because the return value may not be consumed near the function call (difficult to track/update).\n */\n return false;\n },\n\n getCurrentBreakpoint: getCurrentBreakpoint\n};\n","'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","// 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","/**\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":""}