{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/lodash/debounce.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/now.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/toNumber.js","webpack:///./node_modules/lodash/_baseTrim.js","webpack:///./node_modules/lodash/_trimmedEndIndex.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./.tmp/app_col_eu_core/js/search.js","webpack:///./.tmp/app_col_eu_core/js/search/search.js","webpack:///./.tmp/app_col_eu_core/js/search/refinementBar.js","webpack:///./node_modules/hc-sticky/dist/hc-sticky.js","webpack:///./.tmp/app_col_eu_core/js/search/compare.js","webpack:///./.tmp/app_col_eu_core/js/components/processInclude.js","webpack:///../node_modules/ssr-window/ssr-window.esm.js","webpack:///../node_modules/dom7/dom7.esm.js","webpack:///../src/shared/dom.js","webpack:///../src/shared/get-support.js","webpack:///../src/shared/get-device.js","webpack:///../src/shared/get-browser.js","webpack:///../src/shared/utils.js","webpack:///../src/core/transition/transitionEmit.js","webpack:///../src/core/events/onTouchStart.js","webpack:///../src/core/events/onTouchMove.js","webpack:///../src/core/events/onTouchEnd.js","webpack:///../src/core/events/onResize.js","webpack:///../src/core/events/onClick.js","webpack:///../src/core/events/onScroll.js","webpack:///../src/core/events/index.js","webpack:///../src/core/breakpoints/setBreakpoint.js","webpack:///../src/core/defaults.js","webpack:///../src/core/moduleExtendParams.js","webpack:///../src/core/core.js","webpack:///../src/core/events-emitter.js","webpack:///../src/core/update/index.js","webpack:///../src/core/update/updateSize.js","webpack:///../src/core/update/updateSlides.js","webpack:///../src/core/update/updateAutoHeight.js","webpack:///../src/core/update/updateSlidesOffset.js","webpack:///../src/core/update/updateSlidesProgress.js","webpack:///../src/core/update/updateProgress.js","webpack:///../src/core/update/updateSlidesClasses.js","webpack:///../src/core/update/updateActiveIndex.js","webpack:///../src/core/update/updateClickedSlide.js","webpack:///../src/core/translate/index.js","webpack:///../src/core/translate/getTranslate.js","webpack:///../src/core/translate/setTranslate.js","webpack:///../src/core/translate/minTranslate.js","webpack:///../src/core/translate/maxTranslate.js","webpack:///../src/core/translate/translateTo.js","webpack:///../src/core/transition/index.js","webpack:///../src/core/transition/setTransition.js","webpack:///../src/core/transition/transitionStart.js","webpack:///../src/core/transition/transitionEnd.js","webpack:///../src/core/slide/index.js","webpack:///../src/core/slide/slideTo.js","webpack:///../src/core/slide/slideToLoop.js","webpack:///../src/core/slide/slideNext.js","webpack:///../src/core/slide/slidePrev.js","webpack:///../src/core/slide/slideReset.js","webpack:///../src/core/slide/slideToClosest.js","webpack:///../src/core/slide/slideToClickedSlide.js","webpack:///../src/core/loop/index.js","webpack:///../src/core/loop/loopCreate.js","webpack:///../src/core/loop/loopFix.js","webpack:///../src/core/loop/loopDestroy.js","webpack:///../src/core/grab-cursor/index.js","webpack:///../src/core/grab-cursor/setGrabCursor.js","webpack:///../src/core/grab-cursor/unsetGrabCursor.js","webpack:///../src/core/breakpoints/index.js","webpack:///../src/core/breakpoints/getBreakpoint.js","webpack:///../src/core/check-overflow/index.js","webpack:///../src/core/classes/index.js","webpack:///../src/core/classes/addClasses.js","webpack:///../src/core/classes/removeClasses.js","webpack:///../src/core/images/index.js","webpack:///../src/core/images/loadImage.js","webpack:///../src/core/images/preloadImages.js","webpack:///../src/shared/create-element-if-not-defined.js","webpack:///../src/shared/classes-to-selector.js","webpack:///../src/modules/manipulation/methods/appendSlide.js","webpack:///../src/modules/manipulation/methods/prependSlide.js","webpack:///../src/modules/manipulation/methods/addSlide.js","webpack:///../src/modules/manipulation/methods/removeSlide.js","webpack:///../src/modules/manipulation/methods/removeAllSlides.js","webpack:///../src/shared/effect-init.js","webpack:///../src/shared/effect-target.js","webpack:///../src/shared/effect-virtual-transition-end.js","webpack:///../src/shared/create-shadow.js","webpack:///../src/core/modules/resize/resize.js","webpack:///../src/core/modules/observer/observer.js","webpack:///../src/swiper.js","webpack:///../src/modules/virtual/virtual.js","webpack:///../src/modules/keyboard/keyboard.js","webpack:///../src/modules/mousewheel/mousewheel.js","webpack:///../src/modules/navigation/navigation.js","webpack:///../src/modules/pagination/pagination.js","webpack:///../src/modules/scrollbar/scrollbar.js","webpack:///../src/modules/parallax/parallax.js","webpack:///../src/modules/zoom/zoom.js","webpack:///../src/modules/lazy/lazy.js","webpack:///../src/modules/controller/controller.js","webpack:///../src/modules/a11y/a11y.js","webpack:///../src/modules/history/history.js","webpack:///../src/modules/hash-navigation/hash-navigation.js","webpack:///../src/modules/autoplay/autoplay.js","webpack:///../src/modules/thumbs/thumbs.js","webpack:///../src/modules/free-mode/free-mode.js","webpack:///../src/modules/grid/grid.js","webpack:///../src/modules/manipulation/manipulation.js","webpack:///../src/modules/effect-fade/effect-fade.js","webpack:///../src/modules/effect-cube/effect-cube.js","webpack:///../src/modules/effect-flip/effect-flip.js","webpack:///../src/modules/effect-coverflow/effect-coverflow.js","webpack:///../src/modules/effect-creative/effect-creative.js","webpack:///../src/modules/effect-cards/effect-cards.js","webpack:///./node_modules/underscore/modules/index-default.js","webpack:///./.tmp/app_col_eu_core/js/components/utils.js","webpack:///./.tmp/app_col_eu_core/js/helper/sessionSpecificLocalStorageHelper.js","webpack:///./.tmp/app_col_eu_core/js/components/keyboardAccessibility.js","webpack:///./.tmp/app_col_eu_core/js/components/breakpoints.js","webpack:///./.tmp/app_col_eu_core/js/thirdParty/swiperInit.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/underscore/modules/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","g","this","Function","e","window","isObject","require","now","toNumber","nativeMax","Math","max","nativeMin","min","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","undefined","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","baseGetTag","isObjectLike","getRawTag","objectToString","symToStringTag","root","Date","freeGlobal","global","baseTrim","isSymbol","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","other","valueOf","isBinary","test","slice","trimmedEndIndex","reTrimStart","string","replace","reWhitespace","index","length","charAt","objectProto","nativeObjectToString","toString","isOwn","tag","unmasked","processInclude","$","document","ready","$drawerRefinement","utils","debounce","breakpoints","keyboardAccessibility","refinementBar","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","downloadLazyImages","restoreCompareState","getItem","productsRestored","isModalActiveRestored","isModalHighlightRestored","$productTile","$productSwatch","$compareCheckbox","handleCompareBarToggleClick","toggleClass","handleWindowResize","pop","handleCompareCheckboxEvents","$checkbox","$imagePrimarySelected","checked","is","pidIndex","findIndex","selectProduct","handleClearAllClick","deselectProductOnCompareBar","$button","handleCompareBarFormSubmit","eSubmit","type","dataType","serialize","htmlResponse","isModalHighlight","title","modalSizeClass","customClasses","one","_satellite","track","pageName","pageType","productsOnPage","eClick","$swatch","initialize","include","obj","constructor","src","ssrDocument","activeElement","blur","nodeName","getElementById","createEvent","initEvent","childNodes","setAttribute","getElementsByTagName","createElementNS","importNode","hash","host","hostname","protocol","search","getDocument","doc","ssrWindow","navigator","userAgent","go","back","CustomEvent","Image","screen","matchMedia","requestAnimationFrame","callback","cancelAnimationFrame","getWindow","win","Dom7","items","proto","__proto__","makeReactive","super","arrayFlat","arr","res","isArray","arrayFilter","context","toCreate","tempParent","innerHTML","uniqueArray","support","deviceCached","browser","Methods","classes","classNames","toggle","attrs","getAttribute","attrName","transform","transition","duration","transitionDuration","eventType","targetSelector","listener","capture","handleLiveEvent","eventData","dom7EventData","unshift","events","dom7LiveListeners","proxyListener","dom7Listeners","handlers","handler","dom7proxy","splice","evt","detail","bubbles","cancelable","dataIndex","dispatchEvent","transitionEnd","dom","fireCallBack","includeMargins","styles","box","clientTop","clientLeft","scrollY","scrollX","props","textContent","compareWith","matches","webkitMatchesSelector","msMatchesSelector","child","previousSibling","eq","returnIndex","newChild","els","tempDiv","firstChild","appendChild","prepend","next","nextElementSibling","nextAll","nextEls","prev","previousElementSibling","prevAll","prevEls","foundElements","found","nextTick","delay","getTranslate","matrix","curTransform","transformMatrix","axis","curStyle","WebKitCSSMatrix","webkitTransform","MozTransform","OTransform","MsTransform","msTransform","m41","m42","node","to","noExtend","nextSource","HTMLElement","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","__swiper__","setCSSProperty","varName","varValue","setProperty","animateCSSModeScroll","side","swiper","targetPosition","startPosition","translate","startTime","speed","wrapperEl","scrollSnapType","cssModeFrameID","dir","isOutOfBound","current","getTime","progress","easeProgress","cos","PI","currentPosition","scrollTo","overflow","getSupport","smoothScroll","touch","DocumentTouch","passiveListener","supportsPassive","opts","gestures","getDevice","overrides","platform","ua","device","ios","android","screenWidth","screenHeight","match","ipad","ipod","iphone","windows","macos","os","getBrowser","isSafari","toLowerCase","isWebView","transitionEmit","step","runCallbacks","direction","activeIndex","previousIndex","emit","onTouchStart","touchEventsData","touches","enabled","animating","preventInteractionOnTransition","cssMode","loop","loopFix","originalEvent","$targetEl","touchEventsTarget","isTouchEvent","which","button","isTouched","isMoved","noSwipingClass","shadowRoot","path","noSwipingSelector","isTargetShadow","noSwiping","base","__closestFrom","assignedSlot","getRootNode","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","updateSize","swipeDirection","threshold","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","onTouchMove","rtl","rtlTranslate","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","isVertical","maxTranslate","minTranslate","diffX","diffY","sqrt","touchAngle","isHorizontal","atan2","abs","touchMoveStopPropagation","nested","startTranslate","setTransition","$wrapperEl","allowMomentumBounce","grabCursor","allowSlideNext","allowSlidePrev","setGrabCursor","diff","touchRatio","currentTranslate","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","watchSlidesProgress","updateActiveIndex","updateSlidesClasses","updateProgress","setTranslate","onTouchEnd","slidesGrid","currentPos","touchEndTime","timeDiff","updateClickedSlide","lastClickTime","destroyed","stopIndex","groupSize","slidesSizesGrid","slidesPerGroupSkip","slidesPerGroup","increment","ratio","longSwipesMs","longSwipes","slideTo","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","setBreakpoint","snapGrid","updateSlides","slidesPerView","isEnd","isBeginning","centeredSlides","slides","autoplay","running","paused","run","watchOverflow","checkOverflow","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","previousTranslate","translatesDiff","methodName","dummyEventAttached","dummyEventListener","touchEvents","domMethod","swiperMethod","passiveListeners","move","end","updateOnWindowResize","isGridEnabled","grid","rows","defaults","initialSlide","resizeObserver","createElements","autoHeight","setWrapperSize","virtualTranslate","effect","breakpointsBase","spaceBetween","slidesPerGroupAuto","centeredSlidesBounds","slidesOffsetBefore","slidesOffsetAfter","normalizeSlideIndex","centerInsufficientSlides","roundLengths","simulateTouch","uniqueNavElements","slideToClickedSlide","preloadImages","updateOnImagesReady","loopAdditionalSlides","loopedSlides","loopFillGroupWithBlank","loopPreventsSlide","containerModifierClass","slideClass","slideBlankClass","slideActiveClass","slideDuplicateActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slideDuplicateNextClass","slidePrevClass","slideDuplicatePrevClass","wrapperClass","runCallbacksOnInit","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","eventsEmitter","priority","self","eventsListeners","once","onceHandler","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","$el","clientWidth","Number","size","getDirectionLabel","getDirectionPropertyValue","label","swiperSize","wrongRTL","isVirtual","virtual","previousSlidesLength","slidesLength","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","slidePosition","prevSlideSize","virtualSize","slideSize","gridEnabled","initSlides","shouldResetSlideSize","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","floor","swiperSlideSize","updateWrapperSize","newSlidesGrid","slidesGridItem","_","slideIndex","allSlidesSize","slideSizeValue","maxSnap","snap","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","updateSlidesOffset","updateAutoHeight","activeSlides","newHeight","getSlideByIndex","visibleSlides","swiperSlideOffset","updateSlidesProgress","offsetCenter","visibleSlidesIndexes","slideOffset","slideProgress","slideBefore","slideAfter","multiplier","wasBeginning","wasEnd","activeSlide","realIndex","nextSlide","prevSlide","emitSlidesClasses","newActiveIndex","previousRealIndex","previousSnapIndex","skip","initialized","slideFound","clickedSlide","clickedIndex","byController","translateTo","internal","translateBounds","newTranslate","isH","onTranslateToWrapperTransitionEnd","transitionStart","initial","indexAsNumber","isFinite","normalizedTranslate","normalizedGrid","normalizedGridNext","_immediateVirtual","_swiperImmediateVirtual","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","slideNext","perGroup","slidesPerViewDynamic","_clientLeft","slidePrev","normalize","prevSnapIndex","normalizedSnapGrid","prevSnap","prevIndex","slideReset","slideToClosest","currentSnap","slideToIndex","loopCreate","blankSlidesNum","blankNode","prependSlides","appendSlides","loopDestroy","moving","isLocked","cursor","unsetGrabCursor","attachEvents","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","fill","directionChanged","needsReLoop","changeDirection","isEnabled","enable","containerEl","currentHeight","points","point","minRatio","substr","wasLocked","lastSlideIndex","lastSlideRightEdge","addClasses","suffixes","entries","prefix","resultClasses","item","autoheight","centered","removeClasses","images","loadImage","imageEl","srcset","sizes","checkForComplete","image","onReady","onload","onerror","imagesLoaded","imagesToLoad","currentSrc","extendedDefaults","Swiper","swipers","newParams","__modules__","mod","extendParams","swiperParams","passedParams","eventName","velocity","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","velocities","installModule","extendDefaults","newDefaults","use","setProgress","cls","getSlideClasses","slideEl","updates","view","exact","spv","breakLoop","translateValue","newDirection","needUpdate","currentDirection","mount","mounted","getWrapperSelector","wrapper","deleteInstance","cleanStyles","createElementIfNotDefined","checkProps","element","classesToSelector","appendSlide","observer","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","effectInit","overwriteParams","perspective","overwriteParamsResult","_s","effectTarget","effectParams","$slideEl","transformEl","effectVirtualTransitionEnd","allSlides","eventTriggered","triggerEvents","createShadow","shadowClass","$shadowContainer","$shadowEl","prototypeGroup","protoMethod","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","contentBoxSize","contentRect","inlineSize","blockSize","observe","unobserve","observers","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","attributes","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","cssModeTimeout","renderSlide","cache","force","addSlidesBefore","addSlidesAfter","previousFrom","from","previousTo","previousSlidesGrid","previousOffset","offsetProp","slidesAfter","slidesBefore","onRendered","lazy","load","renderExternal","slidesToRender","renderExternalUpdate","prependIndexes","appendIndexes","numberOfNewSlides","newCache","cachedIndex","$cachedEl","cachedElIndex","handle","kc","keyCode","charCode","pageUpDown","keyboard","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","shiftKey","altKey","ctrlKey","metaKey","onlyInViewport","inView","swiperWidth","swiperHeight","windowWidth","windowHeight","swiperOffset","swiperCoord","returnValue","timeout","mousewheel","releaseOnEdges","invert","forceToAxis","sensitivity","eventsTarget","thresholdDelta","thresholdTime","lastEventBeforeSnap","lastScrollTime","recentWheelEvents","handleMouseEnter","mouseEntered","handleMouseLeave","animateSlider","newEvent","delta","raw","rtlFactor","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","positions","sign","ignoreWheelEvents","sticky","shift","prevEvent","firstEvent","snapToThreshold","autoplayDisableOnInteraction","getEl","toggleEl","disabled","disabledClass","tagName","lockClass","$nextEl","$prevEl","onPrevClick","onNextClick","hideOnClick","hiddenClass","targetEl","pagination","clickable","isHidden","bulletSize","pfx","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","$bulletEl","total","paginationType","firstIndex","lastIndex","midIndex","suffix","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","progressbarDirection","scale","scaleX","scaleY","render","paginationHTML","numberOfBullets","dragStartPos","dragSize","trackSize","divider","dragTimeout","scrollbar","$dragEl","newSize","newPos","hide","opacity","getPointerPosition","clientX","clientY","setDragPosition","positionRatio","onDragStart","onDragMove","onDragEnd","snapOnRelease","activeListener","eventMethod","$swiperEl","dragClass","dragEl","draggable","parallax","setTransform","currentOpacity","currentScale","_swiper","parallaxEl","$parallaxEl","parallaxDuration","zoom","maxRatio","containerClass","zoomedSlideClass","gesturesEnabled","fakeGestureTouched","fakeGestureMoved","isScaling","gesture","slideWidth","slideHeight","$imageEl","$imageWrapEl","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","x2","y2","onGestureStart","scaleStart","onGestureChange","scaleMove","onGestureEnd","scaledWidth","scaledHeight","onTransitionEnd","zoomIn","touchX","touchY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","touchAction","zoomOut","zoomToggle","getListeners","activeListenerWithCapture","getSlideSelector","toggleGestures","slideSelector","enableGestures","disableGestures","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","momentumDuration","in","out","checkInView","loadPrevNext","loadPrevNextAmount","loadOnTransitionStart","scrollingElement","elementClass","loadingClass","loadedClass","preloaderClass","scrollHandlerAttached","initialImageLoaded","loadInSlide","loadInDuplicate","$images","background","$pictureEl","sourceEl","$source","slideOriginalIndex","slideExist","amount","maxIndex","minIndex","checkInViewOnLoad","$scrollElement","isWindow","scrollElementWidth","scrollElementHeight","LinearSpline","i1","i3","binarySearch","guess","array","interpolate","removeSpline","controller","control","spline","inverse","by","_t","controlledTranslate","controlled","setControlledTranslate","setControlledTransition","a11y","notificationClass","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","slideLabelMessage","containerMessage","containerRoleDescriptionMessage","itemRoleDescriptionMessage","slideRole","liveRegion","notify","message","notification","makeElFocusable","makeElNotFocusable","addElRole","role","addElRoleDescription","description","addElLabel","disableEl","enableEl","onEnterOrSpaceKey","updateNavigation","hasPagination","initNavEl","wrapperId","controls","$containerEl","repeat","round","random","live","bulletEl","paths","slugify","getPathValues","urlOverride","pathArray","part","setHistory","includes","currentState","state","scrollToSlide","setHistoryPopState","hashNavigation","watchState","onHashChange","newHash","setHash","$activeSlideEl","autoplayResult","reverseDirection","stopOnLastSlide","pause","waitForTransition","onVisibilityChange","visibilityState","onMouseEnter","disableOnInteraction","onMouseLeave","pauseOnMouseEnter","thumbs","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","swiperCreated","onThumbClick","thumbsSwiper","currentIndex","thumbsParams","SwiperClass","thumbsSwiperParams","useOffset","newThumbsIndex","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","thumbsToActivate","thumbActiveClass","momentum","momentumRatio","momentumBounce","momentumBounceRatio","momentumVelocityRatio","minimumVelocity","lastMoveEvent","velocityEvent","distance","momentumDistance","newPosition","afterBouncePosition","needsLoopFix","doBounce","bounceAmount","moveDistance","currentSlideSize","slidesNumberEvenToRows","slidesPerRow","numFullColumns","newSlideOrderIndex","column","row","groupIndex","slideIndexInGroup","columnsInGroup","order","fadeEffect","crossFade","tx","ty","slideOpacity","cubeEffect","slideShadows","shadow","shadowOffset","shadowScale","$cubeShadowEl","wrapperRotate","slideAngle","tz","shadowBefore","shadowAfter","shadowAngle","sin","scale1","scale2","zFactor","flipEffect","limitRotation","rotateY","rotateX","zIndex","coverflowEffect","rotate","stretch","depth","modifier","center","offsetMultiplier","translateZ","slideTransform","$shadowBeforeEl","$shadowAfterEl","creativeEffect","limitProgress","shadowPerProgress","progressMultiplier","custom","getTranslateValue","translateString","rotateString","scaleString","opacityString","shadowOpacity","cardsEffect","tX","tY","tZ","tXAdd","isSwipeToNext","isSwipeToPrev","subProgress","prevY","mixin","allExports","keyValueArray","kvp","output","queryStringToObject","startIndex","endIndex","substring","pair","nameVal","JSON","parse","stringify","objectToQueryString","urlString","qsIndex","hashIndex","param","removeQueryParam","queryparam","delete","loadScript","script","loadJsAfterWindowLoad","readyState","heapify","list","ndx","heapSize","largest","cscUtils","encodeURIComponent","searchHash","postHash","arrHash","output2","updateURLParam","paramVal","newAdditionalURL","tempArray","baseURL","additionalURL","temp","arrayIntersection","a1","a2","inArray","createModalMarkup","showCloseBtn","enableLayeredDrawers","centeredClass","modalId","buttons","settings","dataAttributes","header","idAttribute","footer","footerBtns","btn","removeQueryParamFromCurrentUrl","createBackdrop","customClass","setUrlData","decodeQueryParam","elementInViewport","offsetToTop","compatMode","insertAtInputCursor","formInput","selectionStart","selectionEnd","stringToTitleCase","word","getTimeAndHours","stageMessage","date","hours","getHours","minutes","getMinutes","ampm","findNHighest","listToUse","arrayLength","firstListItem","heapifyMax","deepEqual","obj1","obj2","reduce","isEqual","getSessionID","sessionCookie","cookie","startsWith","sessionId","keyName","sessionID","itemWrapper","json","localStorage","removeItem","buildFunction","keyFunctions","preFunction","scope","returnedScope","delegatedSelector","throttle","isCurrentBreakpointAbbreviation","breakpointAbbreviation","$breakpointIndicator","isCurrentBreakpoint","abbreviation","currentBP","$bpIndicator","adjustSlides","sliderEl","swatchWidth","$container","$colorSwatches","first","isSwatchesFitContainer","swiperData","afterInit","swOptions","hasAttribute","handleEvents","freeSelf","webpackPolyfill","deprecate","ArrayProto","ObjProto","SymbolProto","nativeIsArray","nativeKeys","nativeCreate","_isNaN","_isFinite","Ctor","_wrapped","VERSION","optimizeCb","argCount","collection","accumulator","baseIteratee","identity","isFunction","matcher","iteratee","Infinity","cb","restArguments","rest","baseCreate","shallowProperty","_has","deepGet","MAX_ARRAY_INDEX","pow","getLength","isArrayLike","_keys","currentKey","createReduce","reducer","memo","reduceRight","predicate","findKey","reject","negate","every","some","fromIndex","guard","values","invoke","contextPath","pluck","where","findWhere","computed","lastComputed","shuffle","sample","clone","rand","sortBy","criteria","group","behavior","partition","groupBy","indexBy","countBy","reStrSymbol","toArray","isString","pass","compact","Boolean","_flatten","shallow","strict","isArguments","flatten","without","otherArrays","difference","uniq","isSorted","isBoolean","seen","union","arrays","intersection","argsLength","unzip","zip","createPredicateIndexFinder","findLastIndex","sortedIndex","low","high","mid","createIndexFinder","predicateFind","lastIndexOf","range","chunk","count","executeBound","sourceFunc","boundFunc","callingContext","bound","callArgs","concat","partial","boundArgs","placeholder","bindAll","memoize","hasher","address","defer","previous","later","throttled","_now","remaining","immediate","callNow","wrap","compose","times","before","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","collectNonEnumProps","nonEnumIdx","allKeys","mapObject","pairs","functions","names","createAssigner","keysFunc","source","extendOwn","keyInObj","pick","omit","String","tap","interceptor","isMatch","aStack","bStack","areArrays","aCtor","bCtor","deepEq","isEmpty","isElement","tagTester","isNumber","isDate","isRegExp","isError","isMap","isWeakMap","isSet","isWeakSet","nodelist","isNull","isUndefined","has","constant","noop","propertyOf","accum","Int8Array","escapeMap","unescapeMap","createEscaper","escaper","testRegexp","replaceRegexp","escape","unescape","fallback","idCounter","uniqueId","templateSettings","evaluate","noMatch","escapes","escapeRegExp","escapeChar","template","oldSettings","variable","argument","chain","instance","_chain","chainResult","toJSON"],"mappings":"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","file":"search.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 287);\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","'use strict';\n\nvar processInclude = require('./components/processInclude');\n\n$(document).ready(function () {\n processInclude(require('./search/search'));\n processInclude(require('./search/compare'));\n});\n","/* global LazyLoad */\n'use strict';\n\nconst utils = require('../components/utils');\nconst debounce = require('lodash/debounce');\nconst breakpoints = require('../components/breakpoints');\nconst keyboardAccessibility = require('../components/keyboardAccessibility');\nconst refinementBar = require('./refinementBar');\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 * Draw and render the Compare Bar product slots.\n */\nfunction redrawCompareSlots() {\n let html = productsForComparison.map(function (product, idx) {\n return compileSlot(product.pid, product.colorId, product.imgSrc, idx);\n }).join('');\n\n // Render empty slots\n if (productsForComparison.length < maxSlots) {\n const numAvailableSlots = maxSlots - productsForComparison.length;\n\n for (let i = 0; i < numAvailableSlots; i++) {\n html += `\n
\n \n
\n `;\n }\n }\n\n $compareBarSlots.empty().append(html);\n}\n\n/**\n * Enables/disables the Compare button.\n * Depends on amount of selected products.\n * Enabled - more than 1 product.\n * Disabled - less than 2 products.\n */\nfunction setCompareButton() {\n if (productsForComparison.length < 2) {\n $compareButton.attr('disabled', true);\n } else {\n $compareButton.removeAttr('disabled');\n }\n}\n\n/**\n * 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.addClass('compare-bar--visible');\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('compare-bar--expanded compare-bar--visible');\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('compare-bar--expanded compare-bar--visible');\n}\n\n/**\n * Initializes product images inside compare modal.\n */\nfunction downloadLazyImages() {\n const lazyLoadInstance = new LazyLoad({\n elements_selector: '.lazy',\n use_native: true,\n load_delay: 200\n });\n\n if (lazyLoadInstance) {\n lazyLoadInstance.update();\n }\n}\n\n/**\n * Restores 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 the click event on the title and empty slot inside compare bar.\n * Shows or hides compare bar body with product slots.\n * Toggling \"compare-bar--expanded\" class on the compare bar.\n */\n handleCompareBarToggleClick: function () {\n $compareBar.on('click', '.js-btn-toggle, .js-slot-empty', function (e) {\n e.preventDefault();\n $compareBar.toggleClass('compare-bar--expanded');\n });\n },\n\n /**\n * Handles window resize event.\n * Refreshes the state of compare panel and related elements.\n */\n handleWindowResize: function () {\n if (compareEnabled) {\n $(window).on('resize', debounce(function () {\n maxSlots = getMaxSlots();\n\n while (productsForComparison.length > maxSlots) {\n let product = productsForComparison.pop();\n $('.js-compare-checkbox input#' + product.pid).prop('checked', false);\n }\n\n 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('.compare-bar__slot').data('pid').toString();\n deselectProduct(pid);\n $button.trigger('compare:deselected', { pid: pid });\n });\n },\n\n /**\n * Handles the submitting event of the compare bar form.\n */\n handleCompareBarFormSubmit: function () {\n $compareBarForm.on('submit', function (eSubmit) {\n eSubmit.preventDefault();\n\n $.spinner().start();\n\n $.ajax({\n url: $compareBarForm.attr('action'),\n type: 'GET',\n dataType: 'html',\n data: $compareBarForm.serialize()\n }).done(function (htmlResponse) {\n if ($modal) {\n if (productsForComparison.length === 1) {\n $modal.removeClass('compare-modal--highlight');\n }\n $modal.find('.modal-body').html(htmlResponse);\n\n downloadLazyImages();\n\n swiperInit.initColorSwatchSwiper($modal);\n swiperInit.initTileImageSwiper($modal);\n $.spinner().stop();\n } else {\n const isModalHighlight = $compareBarForm.find('input[name=\"highlightDifferences\"]').attr('value') === 'true';\n\n $modal = $.modal({\n content: htmlResponse,\n title: compareModalTitle,\n modalSizeClass: 'modal-xl',\n customClasses: `compare-modal js-compare-modal ${isModalHighlight ? 'compare-modal--highlight' : ''}`\n })\n .one('shown.bs.modal', function () {\n // native modal functionality adds additional space\n // it can not be overlapped by CSS\n // should be removed by JS\n $modal.css('padding-right', '');\n\n downloadLazyImages();\n saveCompareState();\n $compareBar.removeClass('compare-bar--expanded compare-bar--visible');\n $.spinner().stop();\n\n if (typeof _satellite !== 'undefined') {\n _satellite.track('productCompare', {\n pageName: 'product compare',\n pageType: 'product compare',\n productsOnPage: productsForComparison.map(function (product) {\n return product.pid;\n })\n });\n }\n swiperInit.initColorSwatchSwiper($modal);\n swiperInit.initTileImageSwiper($modal);\n })\n .on('hidden.bs.modal', function () {\n $modal.remove();\n $modal = null;\n saveCompareState();\n\n if (productsForComparison.length) {\n $compareBar.addClass('compare-bar--visible');\n }\n })\n .on('click', '.js-slot-empty', function (eClick) {\n eClick.preventDefault();\n $modal.modal('hide');\n })\n .on('click', '.js-btn-product-badge', function (eClick) {\n eClick.preventDefault();\n const $button = $(this);\n const pid = $button.closest('.product').data('pid').toString();\n\n deselectProduct(pid);\n $button.trigger('compare:deselected', { pid: pid });\n\n if (productsForComparison.length === 0) {\n $modal.modal('hide');\n } else {\n $compareBarForm.trigger('submit');\n }\n })\n .on('click', '.js-color-swatch', function (eClick) {\n eClick.preventDefault();\n const $swatch = $(this);\n const $productTile = $swatch.closest('.product');\n const pid = $productTile.data('pid').toString();\n\n // Updating \"Shop Now\" button in the compare modal\n $(`.js-btn-compare-shop[data-pid=\"${pid}\"]`).attr('href', $swatch.attr('href'));\n\n // Finding the same product tile on the page\n const $productTilePage = $(`.page .product[data-pid=\"${pid}\"]`);\n const $productSwatchPage = $productTilePage.find(`.js-color-swatch[data-variant-id=\"${$swatch.data('variant-id')}\"]`);\n $productSwatchPage.trigger('click');\n })\n .on('click', '.js-toggle-switch-input', function () {\n $modal.toggleClass('compare-modal--highlight');\n $compareBarForm.find('input[name=\"highlightDifferences\"]').attr('value', $modal.hasClass('compare-modal--highlight'));\n saveCompareState();\n });\n }\n });\n });\n },\n\n /**\n * Initializes the compare feature for the current category.\n * Works only once during the initial page load.\n */\n initialize: function () {\n if (compareEnabled) {\n // Required after each: lazy loading of products, applying filters, changing sorting\n $(document).on('search:lazyLoadSuccess search:pageupdate', 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","'use strict';\n\nmodule.exports = function (include) {\n if (typeof include === 'function') {\n include();\n } else if (typeof include === 'object') {\n Object.keys(include).forEach(function (key) {\n if (typeof include[key] === 'function') {\n include[key]();\n }\n });\n }\n};\n","/**\n * SSR Window 4.0.0\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: August 25, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 4.0.0\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: August 25, 2021\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n}\n\nclass Dom7 extends Array {\n constructor(items) {\n super(...(items || []));\n makeReactive(this);\n }\n\n}\n\nfunction arrayFlat(arr = []) {\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase());\n}\n\n// eslint-disable-next-line\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf(' c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n}\n\nfunction removeClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n}\n\nfunction toggleClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n}\n\nfunction hasClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n let el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (const dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (let i = 0; i < el.attributes.length; i += 1) {\n const attr = el.attributes[i];\n\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n\n for (const key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n const el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n const values = [];\n\n for (let i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (let j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n}\n\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger(...args) {\n const window = getWindow();\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n}\n\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n const window = getWindow();\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append(...els) {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < els.length; k += 1) {\n newChild = els[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n const before = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (let j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n const after = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (let j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add(...els) {\n const dom = this;\n let i;\n let j;\n\n for (i = 0; i < els.length; i += 1) {\n const toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.nodeType === 1) {\n for (let j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\n// eslint-disable-next-line\n\nfunction scrollTo(...args) {\n const window = getWindow();\n let [left, top, duration, easing, callback] = args;\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n const el = this;\n let currentTop;\n let currentLeft;\n let maxTop;\n let maxLeft;\n let newTop;\n let newLeft;\n let scrollTop; // eslint-disable-line\n\n let scrollLeft; // eslint-disable-line\n\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n let done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\n// eslint-disable-next-line\n\nfunction animate(initialProps, initialParams) {\n const window = getWindow();\n const els = this;\n const a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n\n easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n\n stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n\n done(complete) {\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n const elements = []; // Define & Cache Initials & Units\n\n a.elements.each((el, index) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(prop => {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue,\n initialValue,\n unit,\n finalValue,\n finalFullValue,\n currentValue: initialValue\n };\n });\n });\n let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(element => {\n const el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(prop => {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n const {\n initialValue,\n finalValue,\n unit\n } = el[prop];\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n const currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n\n for (let i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n const els = this;\n\n for (let i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nconst noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler(...args) {\n if (typeof args[0] === 'undefined') {\n for (let i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on(name, ...args);\n }\n\n return eventHandler;\n}\n\nconst click = shortcut('click');\nconst blur = shortcut('blur');\nconst focus = shortcut('focus');\nconst focusin = shortcut('focusin');\nconst focusout = shortcut('focusout');\nconst keyup = shortcut('keyup');\nconst keydown = shortcut('keydown');\nconst keypress = shortcut('keypress');\nconst submit = shortcut('submit');\nconst change = shortcut('change');\nconst mousedown = shortcut('mousedown');\nconst mousemove = shortcut('mousemove');\nconst mouseup = shortcut('mouseup');\nconst mouseenter = shortcut('mouseenter');\nconst mouseleave = shortcut('mouseleave');\nconst mouseout = shortcut('mouseout');\nconst mouseover = shortcut('mouseover');\nconst touchstart = shortcut('touchstart');\nconst touchend = shortcut('touchend');\nconst touchmove = shortcut('touchmove');\nconst resize = shortcut('resize');\nconst scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width };\n","import {\n $,\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove,\n} from 'dom7';\n\nconst Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove,\n};\n\nObject.keys(Methods).forEach((methodName) => {\n Object.defineProperty($.fn, methodName, { value: Methods[methodName], writable: true });\n});\n\nexport default $;\n","import { getWindow, getDocument } from 'ssr-window';\n\nlet support;\n\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n\n touch: !!(\n 'ontouchstart' in window ||\n (window.DocumentTouch && document instanceof window.DocumentTouch)\n ),\n\n passiveListener: (function checkPassiveListener() {\n let supportsPassive = false;\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n },\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {\n // No support\n }\n return supportsPassive;\n })(),\n\n gestures: (function checkGestures() {\n return 'ongesturestart' in window;\n })(),\n };\n}\n\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\n\nexport { getSupport };\n","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\n\nlet deviceCached;\n\nfunction calcDevice({ userAgent } = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n\n const device = {\n ios: false,\n android: false,\n };\n\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = [\n '1024x1366',\n '1366x1024',\n '834x1194',\n '1194x834',\n '834x1112',\n '1112x834',\n '768x1024',\n '1024x768',\n '820x1180',\n '1180x820',\n '810x1080',\n '1080x810',\n ];\n if (\n !ipad &&\n macos &&\n support.touch &&\n iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0\n ) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\n\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\n\nexport { getDevice };\n","import { getWindow } from 'ssr-window';\n\nlet browser;\n\nfunction calcBrowser() {\n const window = getWindow();\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n return {\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),\n };\n}\n\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\n\nexport { getBrowser };\n","import { getWindow } from 'ssr-window';\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach((key) => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n\n return style;\n}\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n\n const curStyle = getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform\n .split(', ')\n .map((a) => a.replace(',', '.'))\n .join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix =\n curStyle.MozTransform ||\n curStyle.OTransform ||\n curStyle.MsTransform ||\n curStyle.msTransform ||\n curStyle.transform ||\n curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return (\n typeof o === 'object' &&\n o !== null &&\n o.constructor &&\n Object.prototype.toString.call(o).slice(8, -1) === 'Object'\n );\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter((key) => noExtend.indexOf(key) < 0);\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\n\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\n\nfunction animateCSSModeScroll({ swiper, targetPosition, side }) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n\n const isOutOfBound = (current, target) => {\n return (dir === 'next' && current >= target) || (dir === 'prev' && current <= target);\n };\n\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition,\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition,\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\n\nexport {\n animateCSSModeScroll,\n deleteProps,\n nextTick,\n now,\n getTranslate,\n isObject,\n extend,\n getComputedStyle,\n setCSSProperty,\n};\n","export default function transitionEmit({ swiper, runCallbacks, direction, step }) {\n const { activeIndex, previousIndex } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';\n else if (activeIndex < previousIndex) dir = 'prev';\n else dir = 'reset';\n }\n\n swiper.emit(`transition${step}`);\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}\n","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js';\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\n\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n\n const data = swiper.touchEventsData;\n const { params, touches, enabled } = swiper;\n if (!enabled) return;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) {\n $targetEl = $(event.path[0]);\n }\n\n const noSwipingSelector = params.noSwipingSelector\n ? params.noSwipingSelector\n : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (\n params.noSwiping &&\n (isTargetShadow\n ? closestElement(noSwipingSelector, e.target)\n : $targetEl.closest(noSwipingSelector)[0])\n ) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n if (\n edgeSwipeDetection &&\n (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)\n ) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined,\n });\n\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n if ($targetEl.is(data.focusableElements)) preventDefault = false;\n if (\n document.activeElement &&\n $(document.activeElement).is(data.focusableElements) &&\n document.activeElement !== $targetEl[0]\n ) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault =\n preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if (\n (params.touchStartForcePreventDefault || shouldPreventDefault) &&\n !$targetEl[0].isContentEditable\n ) {\n e.preventDefault();\n }\n }\n swiper.emit('touchStart', e);\n}\n","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js';\n\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const { params, touches, rtlTranslate: rtl, enabled } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch =\n e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n // isMoved = true;\n swiper.allowClick = false;\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (\n (pageY < touches.startY && swiper.translate <= swiper.maxTranslate()) ||\n (pageY > touches.startY && swiper.translate >= swiper.minTranslate())\n ) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (\n (pageX < touches.startX && swiper.translate <= swiper.maxTranslate()) ||\n (pageX > touches.startX && swiper.translate >= swiper.minTranslate())\n ) {\n return;\n }\n }\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n\n touches.currentX = pageX;\n touches.currentY = pageY;\n\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold)\n return;\n\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (\n (swiper.isHorizontal() && touches.currentY === touches.startY) ||\n (swiper.isVertical() && touches.currentX === touches.startX)\n ) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;\n data.isScrolling = swiper.isHorizontal()\n ? touchAngle > params.touchAngle\n : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop && !params.cssMode) {\n swiper.loopFix();\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance)\n data.currentTranslate =\n swiper.minTranslate() -\n 1 +\n (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance)\n data.currentTranslate =\n swiper.maxTranslate() +\n 1 -\n (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (\n !swiper.allowSlideNext &&\n swiper.swipeDirection === 'next' &&\n data.currentTranslate < data.startTranslate\n ) {\n data.currentTranslate = data.startTranslate;\n }\n if (\n !swiper.allowSlidePrev &&\n swiper.swipeDirection === 'prev' &&\n data.currentTranslate > data.startTranslate\n ) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal()\n ? touches.currentX - touches.startX\n : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (\n (params.freeMode && params.freeMode.enabled && swiper.freeMode) ||\n params.watchSlidesProgress\n ) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}\n","import { now, nextTick } from '../../shared/utils.js';\n\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n\n const { params, touches, rtlTranslate: rtl, slidesGrid, enabled } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n // Return Grab Cursor\n if (\n params.grabCursor &&\n data.isMoved &&\n data.isTouched &&\n (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)\n ) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n swiper.updateClickedSlide(e);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (\n !data.isTouched ||\n !data.isMoved ||\n !swiper.swipeDirection ||\n touches.diff === 0 ||\n data.currentTranslate === data.startTranslate\n ) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({ currentPos });\n return;\n }\n\n // Find current slide\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (\n let i = 0;\n i < slidesGrid.length;\n i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup\n ) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);\n else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);\n else swiper.slideTo(stopIndex);\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget =\n swiper.navigation &&\n (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}\n","export default function onResize() {\n const swiper = this;\n\n const { params, el } = swiper;\n\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const { allowSlideNext, allowSlidePrev, snapGrid } = swiper;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n\n swiper.updateSize();\n swiper.updateSlides();\n\n swiper.updateSlidesClasses();\n if (\n (params.slidesPerView === 'auto' || params.slidesPerView > 1) &&\n swiper.isEnd &&\n !swiper.isBeginning &&\n !swiper.params.centeredSlides\n ) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}\n","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}\n","export default function onScroll() {\n const swiper = this;\n const { wrapperEl, rtlTranslate, enabled } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === -0) swiper.translate = 0;\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n}\n","import { getDocument } from 'ssr-window';\n\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\n\nlet dummyEventAttached = false;\nfunction dummyEventListener() {}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const { params, touchEvents, el, wrapperEl, device, support } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n\n // Touch Events\n if (!support.touch) {\n el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n } else {\n const passiveListener =\n touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners\n ? { passive: true, capture: false }\n : false;\n el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n el[domMethod](\n touchEvents.move,\n swiper.onTouchMove,\n support.passiveListener ? { passive: false, capture } : capture,\n );\n el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n if (touchEvents.cancel) {\n el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n }\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](\n device.ios || device.android\n ? 'resize orientationchange observerUpdate'\n : 'resize observerUpdate',\n onResize,\n true,\n );\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n};\n\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const { params, support } = swiper;\n\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n if (support.touch && !dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n\n events(swiper, 'on');\n}\n\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\n\nexport default {\n attachEvents,\n detachEvents,\n};\n","import { extend } from '../../shared/utils.js';\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\n\nexport default function setBreakpoint() {\n const swiper = this;\n const { activeIndex, initialized, loopedSlides = 0, params, $el } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) return;\n\n // Get breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n\n const wasEnabled = params.enabled;\n\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(\n `${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`,\n );\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}grid`);\n if (\n (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column') ||\n (!breakpointParams.grid.fill && params.grid.fill === 'column')\n ) {\n $el.addClass(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n\n const directionChanged =\n breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop =\n params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n\n const isEnabled = swiper.params.enabled;\n\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n });\n\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n\n swiper.currentBreakpoint = breakpoint;\n\n swiper.emit('_beforeBreakpoint', breakpointParams);\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n}\n","export default {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n\n // Overrides\n width: null,\n height: null,\n\n //\n preventInteractionOnTransition: false,\n\n // ssr\n userAgent: null,\n url: null,\n\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n\n // Autoheight\n autoHeight: false,\n\n // Set wrapper width\n setWrapperSize: false,\n\n // Virtual Translate\n virtualTranslate: false,\n\n // Effects\n effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n\n // Round length\n roundLengths: false,\n\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n\n // Unique Navigation Elements\n uniqueNavElements: true,\n\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n\n // Progress\n watchSlidesProgress: false,\n\n // Cursor\n grabCursor: false,\n\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: true,\n\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null, // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n\n // Passive Listeners\n passiveListeners: true,\n\n // NS\n containerModifierClass: 'swiper-', // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n\n // Callbacks\n runCallbacksOnInit: true,\n\n // Internals\n _emitClasses: false,\n};\n","import { extend } from '../shared/utils.js';\n\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (\n ['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 &&\n params[moduleParamName] === true\n ) {\n params[moduleParamName] = { auto: true };\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = { enabled: true };\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = { enabled: false };\n extend(allModulesParams, obj);\n };\n}\n","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport $ from '../shared/dom.js';\nimport { extend, now, deleteProps } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\n\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\n\nimport eventsEmitter from './events-emitter.js';\n\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport images from './images/index.js';\nimport checkOverflow from './check-overflow/index.js';\n\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\n\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes,\n images,\n};\n\nconst extendedDefaults = {};\n\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n if (\n args.length === 1 &&\n args[0].constructor &&\n Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object'\n ) {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each((containerEl) => {\n const newParams = extend({}, params, { el: containerEl });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({ userAgent: params.userAgent });\n swiper.browser = getBrowser();\n\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n\n const allModulesParams = {};\n\n swiper.modules.forEach((mod) => {\n mod({\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper),\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach((eventName) => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Save Dom lib\n swiper.$ = $;\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n\n // Classes\n classNames: [],\n\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n\n //\n isBeginning: true,\n isEnd: false,\n\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n\n // Touch Events\n touchEvents: (function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3],\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2],\n };\n return swiper.support.touch || !swiper.params.simulateTouch\n ? swiper.touchEventsTouch\n : swiper.touchEventsDesktop;\n })(),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined,\n },\n\n // Clicks\n allowClick: true,\n\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0,\n },\n\n // Images\n imagesToLoad: [],\n imagesLoaded: 0,\n });\n\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n return swiper;\n }\n\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter((className) => {\n return (\n className.indexOf('swiper') === 0 ||\n className.indexOf(swiper.params.containerModifierClass) === 0\n );\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n\n getSlideClasses(slideEl) {\n const swiper = this;\n\n return slideEl.className\n .split(' ')\n .filter((className) => {\n return (\n className.indexOf('swiper-slide') === 0 ||\n className.indexOf(swiper.params.slideClass) === 0\n );\n })\n .join(' ');\n }\n\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each((slideEl) => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({ slideEl, classNames });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n\n slidesPerViewDynamic(view = 'current', exact = false) {\n const swiper = this;\n const { params, slides, slidesGrid, slidesSizesGrid, size: swiperSize, activeIndex } = swiper;\n let spv = 1;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact\n ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize\n : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const { snapGrid, params } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(\n Math.max(translateValue, swiper.maxTranslate()),\n swiper.minTranslate(),\n );\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if (\n (swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) &&\n swiper.isEnd &&\n !swiper.params.centeredSlides\n ) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (\n newDirection === currentDirection ||\n (newDirection !== 'horizontal' && newDirection !== 'vertical')\n ) {\n return swiper;\n }\n\n swiper.$el\n .removeClass(`${swiper.params.containerModifierClass}${currentDirection}`)\n .addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n\n swiper.params.direction = newDirection;\n\n swiper.slides.each((slideEl) => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n\n return swiper;\n }\n\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = $(el.shadowRoot.querySelector(getWrapperSelector()));\n // Children needs to return slot items\n res.children = (options) => $el.children(options);\n return res;\n }\n return $el.children(getWrapperSelector());\n };\n // Find Wrapper\n let $wrapperEl = getWrapper();\n if ($wrapperEl.length === 0 && swiper.params.createElements) {\n const document = getDocument();\n const wrapper = document.createElement('div');\n $wrapperEl = $(wrapper);\n wrapper.className = swiper.params.wrapperClass;\n $el.append(wrapper);\n $el.children(`.${swiper.params.slideClass}`).each((slideEl) => {\n $wrapperEl.append(slideEl);\n });\n }\n\n Object.assign(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\n\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate:\n swiper.params.direction === 'horizontal' &&\n (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n });\n\n return true;\n }\n\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop) {\n swiper.slideTo(\n swiper.params.initialSlide + swiper.loopedSlides,\n 0,\n swiper.params.runCallbacksOnInit,\n false,\n true,\n );\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Attach events\n swiper.attachEvents();\n\n // Init Flag\n swiper.initialized = true;\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n\n return swiper;\n }\n\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const { params, $el, $wrapperEl, slides } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n if (slides && slides.length) {\n slides\n .removeClass(\n [\n params.slideVisibleClass,\n params.slideActiveClass,\n params.slideNextClass,\n params.slidePrevClass,\n ].join(' '),\n )\n .removeAttr('style')\n .removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach((eventName) => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach((m) => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\n\nObject.keys(prototypes).forEach((prototypeGroup) => {\n Object.keys(prototypes[prototypeGroup]).forEach((protoMethod) => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\n\nSwiper.use([Resize, Observer]);\n\nexport default Swiper;\n","/* eslint-disable no-underscore-dangle */\n\nexport default {\n on(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach((event) => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n\n once(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n function onceHandler(...args) {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n\n onAny(handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n\n offAny(handler) {\n const self = this;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach((event) => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (\n eventHandler === handler ||\n (eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler)\n ) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n\n emit(...args) {\n const self = this;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n\n eventsArray.forEach((event) => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach((eventHandler) => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler) => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n },\n};\n","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\n\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide,\n};\n","export default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {\n return;\n }\n\n // Subtract paddings\n width =\n width -\n parseInt($el.css('padding-left') || 0, 10) -\n parseInt($el.css('padding-right') || 0, 10);\n height =\n height -\n parseInt($el.css('padding-top') || 0, 10) -\n parseInt($el.css('padding-bottom') || 0, 10);\n\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height,\n });\n}\n","import { setCSSProperty } from '../../shared/utils.js';\n\nexport default function updateSlides() {\n const swiper = this;\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom',\n }[property];\n }\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n\n const params = swiper.params;\n\n const { $wrapperEl, size: swiperSize, rtlTranslate: rtl, wrongRTL } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n if (rtl) slides.css({ marginLeft: '', marginBottom: '', marginTop: '' });\n else slides.css({ marginRight: '', marginBottom: '', marginTop: '' });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n }\n\n // Calc slides\n let slideSize;\n\n const shouldResetSlideSize =\n params.slidesPerView === 'auto' &&\n params.breakpoints &&\n Object.keys(params.breakpoints).filter((key) => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide[0]);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const { clientWidth, offsetWidth } = slide[0];\n slideSize =\n width +\n paddingLeft +\n paddingRight +\n marginLeft +\n marginRight +\n (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0)\n slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (\n (index - Math.min(swiper.params.slidesPerGroupSkip, index)) %\n swiper.params.slidesPerGroup ===\n 0\n )\n snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n\n prevSlideSize = slideSize;\n\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n }\n if (params.setWrapperSize) {\n $wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`,\n });\n }\n\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n\n if (\n Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) >\n 1\n ) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides\n .filter((_, slideIndex) => {\n if (!params.cssMode) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n })\n .css({ [key]: `${spaceBetween}px` });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach((slideSizeValue) => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map((snap) => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach((slideSizeValue) => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid,\n });\n\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(\n swiper.wrapperEl,\n '--swiper-centered-offset-after',\n `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`,\n );\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map((v) => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map((v) => v + addToSlidesGrid);\n }\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n}\n","export default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n\n const getSlideByIndex = (index) => {\n if (isVirtual) {\n return swiper.slides.filter(\n (el) => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index,\n )[0];\n }\n return swiper.slides.eq(index)[0];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n swiper.visibleSlides.each((slide) => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}\n","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal()\n ? slides[i].offsetLeft\n : slides[i].offsetTop;\n }\n}\n","import $ from '../../shared/dom.js';\n\nexport default function updateSlidesProgress(translate = (this && this.translate) || 0) {\n const swiper = this;\n const params = swiper.params;\n\n const { slides, rtlTranslate: rtl } = swiper;\n\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n\n // Visible Slides\n slides.removeClass(params.slideVisibleClass);\n\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n\n const slideProgress =\n (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) /\n (slide.swiperSlideSize + params.spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible =\n (slideBefore >= 0 && slideBefore < swiper.size - 1) ||\n (slideAfter > 1 && slideAfter <= swiper.size) ||\n (slideBefore <= 0 && slideAfter >= swiper.size);\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n slide.progress = rtl ? -slideProgress : slideProgress;\n }\n swiper.visibleSlides = $(swiper.visibleSlides);\n}\n","export default function updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = (swiper && swiper.translate && swiper.translate * multiplier) || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let { progress, isBeginning, isEnd } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n Object.assign(swiper, {\n progress,\n isBeginning,\n isEnd,\n });\n\n if (params.watchSlidesProgress || (params.centeredSlides && params.autoHeight))\n swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n}\n","export default function updateSlidesClasses() {\n const swiper = this;\n\n const { slides, params, $wrapperEl, activeIndex, realIndex } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n\n slides.removeClass(\n `${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`,\n );\n\n let activeSlide;\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(\n `.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`,\n );\n } else {\n activeSlide = slides.eq(activeIndex);\n }\n\n // Active classes\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children(\n `.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`,\n )\n .addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl\n .children(\n `.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`,\n )\n .addClass(params.slideDuplicateActiveClass);\n }\n }\n // Next Slide\n let nextSlide = activeSlide\n .nextAll(`.${params.slideClass}`)\n .eq(0)\n .addClass(params.slideNextClass);\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n }\n // Prev Slide\n let prevSlide = activeSlide\n .prevAll(`.${params.slideClass}`)\n .eq(0)\n .addClass(params.slidePrevClass);\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children(\n `.${params.slideClass}:not(.${\n params.slideDuplicateClass\n })[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`,\n )\n .addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl\n .children(\n `.${params.slideClass}.${\n params.slideDuplicateClass\n }[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`,\n )\n .addClass(params.slideDuplicateNextClass);\n }\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children(\n `.${params.slideClass}:not(.${\n params.slideDuplicateClass\n })[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`,\n )\n .addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl\n .children(\n `.${params.slideClass}.${\n params.slideDuplicateClass\n }[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`,\n )\n .addClass(params.slideDuplicatePrevClass);\n }\n }\n swiper.emitSlidesClasses();\n}\n","export default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex,\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n if (typeof activeIndex === 'undefined') {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (\n translate >= slidesGrid[i] &&\n translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2\n ) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n\n // Get real index\n const realIndex = parseInt(\n swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex,\n 10,\n );\n\n Object.assign(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex,\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}\n","import $ from '../../shared/dom.js';\n\nexport default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e.target).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n let slideIndex;\n\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (\n params.slideToClickedSlide &&\n swiper.clickedIndex !== undefined &&\n swiper.clickedIndex !== swiper.activeIndex\n ) {\n swiper.slideToClickedSlide();\n }\n}\n","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\n\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo,\n};\n","import { getTranslate } from '../../shared/utils.js';\n\nexport default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n\n const { params, rtlTranslate: rtl, translate, $wrapperEl } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n\n return currentTranslate || 0;\n}\n","export default function setTranslate(translate, byController) {\n const swiper = this;\n const { rtlTranslate: rtl, params, $wrapperEl, wrapperEl, progress } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n}\n","export default function minTranslate() {\n return -this.snapGrid[0];\n}\n","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}\n","import { animateCSSModeScroll } from '../../shared/utils.js';\n\nexport default function translateTo(\n translate = 0,\n speed = this.params.speed,\n runCallbacks = true,\n translateBounds = true,\n internal,\n) {\n const swiper = this;\n\n const { params, wrapperEl } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;\n else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;\n else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({ swiper, targetPosition: -newTranslate, side: isH ? 'left' : 'top' });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth',\n });\n }\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener(\n 'transitionend',\n swiper.onTranslateToWrapperTransitionEnd,\n );\n swiper.$wrapperEl[0].removeEventListener(\n 'webkitTransitionEnd',\n swiper.onTranslateToWrapperTransitionEnd,\n );\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.$wrapperEl[0].addEventListener(\n 'transitionend',\n swiper.onTranslateToWrapperTransitionEnd,\n );\n swiper.$wrapperEl[0].addEventListener(\n 'webkitTransitionEnd',\n swiper.onTranslateToWrapperTransitionEnd,\n );\n }\n }\n\n return true;\n}\n","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\n\nexport default {\n setTransition,\n transitionStart,\n transitionEnd,\n};\n","export default function setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n}\n","import transitionEmit from './transitionEmit.js';\n\nexport default function transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const { params } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n transitionEmit({ swiper, runCallbacks, direction, step: 'Start' });\n}\n","import transitionEmit from './transitionEmit.js';\n\nexport default function transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const { params } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n\n transitionEmit({ swiper, runCallbacks, direction, step: 'End' });\n}\n","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\n\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide,\n};\n","import { animateCSSModeScroll } from '../../shared/utils.js';\n\nexport default function slideTo(\n index = 0,\n speed = this.params.speed,\n runCallbacks = true,\n internal,\n initial,\n) {\n if (typeof index !== 'number' && typeof index !== 'string') {\n throw new Error(\n `The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`,\n );\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(\n `The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`,\n );\n }\n\n // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n index = indexAsNumber;\n }\n\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled,\n } = swiper;\n\n if (\n (swiper.animating && params.preventInteractionOnTransition) ||\n (!enabled && !internal && !initial)\n ) {\n return false;\n }\n\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n const translate = -snapGrid[snapIndex];\n\n // Update progress\n swiper.updateProgress(translate);\n\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (\n normalizedTranslate >= normalizedGrid &&\n normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2\n ) {\n slideIndex = i;\n } else if (\n normalizedTranslate >= normalizedGrid &&\n normalizedTranslate < normalizedGridNext\n ) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (\n !swiper.allowSlideNext &&\n translate < swiper.translate &&\n translate < swiper.minTranslate()\n ) {\n return false;\n }\n if (\n !swiper.allowSlidePrev &&\n translate > swiper.translate &&\n translate > swiper.maxTranslate()\n ) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n let direction;\n if (slideIndex > activeIndex) direction = 'next';\n else if (slideIndex < activeIndex) direction = 'prev';\n else direction = 'reset';\n\n // Update Index\n if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._swiperImmediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({ swiper, targetPosition: t, side: isH ? 'left' : 'top' });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth',\n });\n }\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener(\n 'transitionend',\n swiper.onSlideToWrapperTransitionEnd,\n );\n swiper.$wrapperEl[0].removeEventListener(\n 'webkitTransitionEnd',\n swiper.onSlideToWrapperTransitionEnd,\n );\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener(\n 'webkitTransitionEnd',\n swiper.onSlideToWrapperTransitionEnd,\n );\n }\n }\n\n return true;\n}\n","export default function slideToLoop(\n index = 0,\n speed = this.params.speed,\n runCallbacks = true,\n internal,\n) {\n const swiper = this;\n let newIndex = index;\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const { animating, enabled, params } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const { params, animating, snapGrid, slidesGrid, rtlTranslate, enabled } = swiper;\n if (!enabled) return swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map((val) => normalize(val));\n\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (\n params.slidesPerView === 'auto' &&\n params.slidesPerGroup === 1 &&\n params.slidesPerGroupAuto\n ) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(\n speed = this.params.speed,\n runCallbacks = true,\n internal,\n threshold = 0.5,\n) {\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n","import $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\n\nexport default function slideToClickedSlide() {\n const swiper = this;\n const { params, $wrapperEl } = swiper;\n\n const slidesPerView =\n params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (\n slideToIndex < swiper.loopedSlides - slidesPerView / 2 ||\n slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2\n ) {\n swiper.loopFix();\n slideToIndex = $wrapperEl\n .children(\n `.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`,\n )\n .eq(0)\n .index();\n\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl\n .children(\n `.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`,\n )\n .eq(0)\n .index();\n\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}\n","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\n\nexport default {\n loopCreate,\n loopFix,\n loopDestroy,\n};\n","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\n\nexport default function loopCreate() {\n const swiper = this;\n const document = getDocument();\n const { params, $wrapperEl } = swiper;\n // Remove duplicated slides\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n\n let slides = $wrapperEl.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(\n `${params.slideClass} ${params.slideBlankClass}`,\n );\n $wrapperEl.append(blankNode);\n }\n slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n if (swiper.loopedSlides > slides.length) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((el, index) => {\n const slide = $(el);\n if (index < swiper.loopedSlides) {\n appendSlides.push(el);\n }\n if (index < slides.length && index >= slides.length - swiper.loopedSlides) {\n prependSlides.push(el);\n }\n slide.attr('data-swiper-slide-index', index);\n });\n for (let i = 0; i < appendSlides.length; i += 1) {\n $wrapperEl.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $wrapperEl.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n}\n","export default function loopFix() {\n const swiper = this;\n\n swiper.emit('beforeLoopFix');\n\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n rtlTranslate: rtl,\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate();\n\n // Fix For Negative Oversliding\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n swiper.emit('loopFix');\n}\n","export default function loopDestroy() {\n const swiper = this;\n const { $wrapperEl, params, slides } = swiper;\n $wrapperEl\n .children(\n `.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`,\n )\n .remove();\n slides.removeAttr('data-swiper-slide-index');\n}\n","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\n\nexport default {\n setGrabCursor,\n unsetGrabCursor,\n};\n","export default function setGrabCursor(moving) {\n const swiper = this;\n if (\n swiper.support.touch ||\n !swiper.params.simulateTouch ||\n (swiper.params.watchOverflow && swiper.isLocked) ||\n swiper.params.cssMode\n )\n return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n el.style.cursor = 'move';\n el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}\n","export default function unsetGrabCursor() {\n const swiper = this;\n if (\n swiper.support.touch ||\n (swiper.params.watchOverflow && swiper.isLocked) ||\n swiper.params.cssMode\n ) {\n return;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n}\n","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\n\nexport default { setBreakpoint, getBreakpoint };\n","import { getWindow } from 'ssr-window';\n\nexport default function getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || (base === 'container' && !containerEl)) return undefined;\n let breakpoint = false;\n\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n\n const points = Object.keys(breakpoints).map((point) => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return { value, point };\n }\n return { value: point, point };\n });\n\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const { point, value } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\n","function checkOverflow() {\n const swiper = this;\n const { isLocked: wasLocked, params } = swiper;\n const { slidesOffsetBefore } = params;\n\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge =\n swiper.slidesGrid[lastSlideIndex] +\n swiper.slidesSizesGrid[lastSlideIndex] +\n slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\n\nexport default { checkOverflow };\n","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\n\nexport default { addClasses, removeClasses };\n","function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach((item) => {\n if (typeof item === 'object') {\n Object.keys(item).forEach((classNames) => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\n\nexport default function addClasses() {\n const swiper = this;\n const { classNames, params, rtl, $el, device, support } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses([\n 'initialized',\n params.direction,\n { 'pointer-events': !support.touch },\n { 'free-mode': swiper.params.freeMode && params.freeMode.enabled },\n { 'autoheight': params.autoHeight },\n { 'rtl': rtl },\n { 'grid': params.grid && params.grid.rows > 1 },\n { 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column' },\n { 'android': device.android },\n { 'ios': device.ios },\n { 'css-mode': params.cssMode },\n { 'centered': params.cssMode && params.centeredSlides },\n ], params.containerModifierClass);\n classNames.push(...suffixes);\n $el.addClass([...classNames].join(' '));\n swiper.emitContainerClasses();\n}\n","export default function removeClasses() {\n const swiper = this;\n const { $el, classNames } = swiper;\n\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n}\n","import loadImage from './loadImage.js';\nimport preloadImages from './preloadImages.js';\n\nexport default {\n loadImage,\n preloadImages,\n};\n","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\n\nexport default function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n function onReady() {\n if (callback) callback();\n }\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n if (sizes) {\n image.sizes = sizes;\n }\n if (srcset) {\n image.srcset = srcset;\n }\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n}\n","export default function preloadImages() {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(\n imageEl,\n imageEl.currentSrc || imageEl.getAttribute('src'),\n imageEl.srcset || imageEl.getAttribute('srcset'),\n imageEl.sizes || imageEl.getAttribute('sizes'),\n true,\n onReady,\n );\n }\n}\n","import { getDocument } from 'ssr-window';\n\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n const document = getDocument();\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach((key) => {\n if (!params[key] && params.auto === true) {\n let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n if (!element) {\n element = document.createElement('div');\n element.className = checkProps[key];\n swiper.$el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}\n","export default function classesToSelector(classes = '') {\n return `.${classes\n .trim()\n .replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}\n","export default function appendSlide(slides) {\n const swiper = this;\n const { $wrapperEl, params } = swiper;\n if (params.loop) {\n swiper.loopDestroy();\n }\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n } else {\n $wrapperEl.append(slides);\n }\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer) {\n swiper.update();\n }\n}\n","export default function prependSlide(slides) {\n const swiper = this;\n const { params, $wrapperEl, activeIndex } = swiper;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n let newActiveIndex = activeIndex + 1;\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.prepend(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n } else {\n $wrapperEl.prepend(slides);\n }\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer) {\n swiper.update();\n }\n swiper.slideTo(newActiveIndex, 0, false);\n}\n","export default function addSlide(index, slides) {\n const swiper = this;\n const { $wrapperEl, params, activeIndex } = swiper;\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n const baseLength = swiper.slides.length;\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n\n const slidesBuffer = [];\n for (let i = baseLength - 1; i >= index; i -= 1) {\n const currentSlide = swiper.slides.eq(i);\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n newActiveIndex =\n activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n $wrapperEl.append(slides);\n }\n\n for (let i = 0; i < slidesBuffer.length; i += 1) {\n $wrapperEl.append(slidesBuffer[i]);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}\n","export default function removeSlide(slidesIndexes) {\n const swiper = this;\n const { params, $wrapperEl, activeIndex } = swiper;\n\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n let newActiveIndex = activeIndexBuffer;\n let indexToRemove;\n\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for (let i = 0; i < slidesIndexes.length; i += 1) {\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}\n","export default function removeAllSlides() {\n const swiper = this;\n\n const slidesIndexes = [];\n for (let i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n swiper.removeSlide(slidesIndexes);\n}\n","export default function effectInit(params) {\n const { effect, swiper, on, setTranslate, setTransition, overwriteParams, perspective } = params;\n\n on('beforeInit', () => {\n if (swiper.params.effect !== effect) return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n if (perspective && perspective()) {\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n }\n\n const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\n\n Object.assign(swiper.params, overwriteParamsResult);\n Object.assign(swiper.originalParams, overwriteParamsResult);\n });\n on('setTranslate', () => {\n if (swiper.params.effect !== effect) return;\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n if (swiper.params.effect !== effect) return;\n setTransition(duration);\n });\n}\n","export default function effectTarget(effectParams, $slideEl) {\n if (effectParams.transformEl) {\n return $slideEl.find(effectParams.transformEl).css({\n 'backface-visibility': 'hidden',\n '-webkit-backface-visibility': 'hidden',\n });\n }\n return $slideEl;\n}\n","export default function effectVirtualTransitionEnd({ swiper, duration, transformEl, allSlides }) {\n const { slides, activeIndex, $wrapperEl } = swiper;\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n let $transitionEndTarget;\n if (allSlides) {\n $transitionEndTarget = transformEl ? slides.find(transformEl) : slides;\n } else {\n $transitionEndTarget = transformEl\n ? slides.eq(activeIndex).find(transformEl)\n : slides.eq(activeIndex);\n }\n $transitionEndTarget.transitionEnd(() => {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n eventTriggered = true;\n swiper.animating = false;\n const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n for (let i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\n });\n }\n}\n","import $ from './dom.js';\n\nexport default function createShadow(params, $slideEl, side) {\n const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}`;\n const $shadowContainer = params.transformEl ? $slideEl.find(params.transformEl) : $slideEl;\n let $shadowEl = $shadowContainer.children(`.${shadowClass}`);\n\n if (!$shadowEl.length) {\n $shadowEl = $(`
`);\n $shadowContainer.append($shadowEl);\n }\n return $shadowEl;\n}\n","import { getWindow } from 'ssr-window';\n\nexport default function Resize({ swiper, on, emit }) {\n const window = getWindow();\n let observer = null;\n\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver((entries) => {\n const { width, height } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({ contentBoxSize, contentRect, target }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect\n ? contentRect.width\n : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect\n ? contentRect.height\n : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n observer.observe(swiper.el);\n };\n\n const removeObserver = () => {\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}\n","import { getWindow } from 'ssr-window';\n\nexport default function Observer({ swiper, extendParams, on, emit }) {\n const observers = [];\n const window = getWindow();\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc((mutations) => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData,\n });\n\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren,\n });\n\n // Observe wrapper\n attach(swiper.$wrapperEl[0], { attributes: false });\n };\n const destroy = () => {\n observers.forEach((observer) => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false,\n });\n on('init', init);\n on('destroy', destroy);\n}\n","// Swiper Class\nimport Swiper from './core/core.js';\n\n//IMPORT_MODULES\n\nconst modules = [\n //INSTALL_MODULES\n];\n\nSwiper.use(modules);\n\n//EXPORT\n","import $ from '../../shared/dom.js';\nimport { setCSSProperty } from '../../shared/utils.js';\n\nexport default function Virtual({ swiper, extendParams, on }) {\n extendParams({\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderSlide: null,\n renderExternal: null,\n renderExternalUpdate: true,\n addSlidesBefore: 0,\n addSlidesAfter: 0,\n },\n });\n\n let cssModeTimeout;\n\n swiper.virtual = {\n cache: {},\n from: undefined,\n to: undefined,\n slides: [],\n offset: 0,\n slidesGrid: [],\n };\n\n function renderSlide(slide, index) {\n const params = swiper.params.virtual;\n if (params.cache && swiper.virtual.cache[index]) {\n return swiper.virtual.cache[index];\n }\n const $slideEl = params.renderSlide\n ? $(params.renderSlide.call(swiper, slide, index))\n : $(\n `
${slide}
`,\n );\n if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);\n if (params.cache) swiper.virtual.cache[index] = $slideEl;\n return $slideEl;\n }\n\n function update(force) {\n const { slidesPerView, slidesPerGroup, centeredSlides } = swiper.params;\n const { addSlidesBefore, addSlidesAfter } = swiper.params.virtual;\n const {\n from: previousFrom,\n to: previousTo,\n slides,\n slidesGrid: previousSlidesGrid,\n offset: previousOffset,\n } = swiper.virtual;\n if (!swiper.params.cssMode) {\n swiper.updateActiveIndex();\n }\n\n const activeIndex = swiper.activeIndex || 0;\n\n let offsetProp;\n if (swiper.rtlTranslate) offsetProp = 'right';\n else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n\n let slidesAfter;\n let slidesBefore;\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n } else {\n slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;\n slidesBefore = slidesPerGroup + addSlidesBefore;\n }\n const from = Math.max((activeIndex || 0) - slidesBefore, 0);\n const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n\n Object.assign(swiper.virtual, {\n from,\n to,\n offset,\n slidesGrid: swiper.slidesGrid,\n });\n\n function onRendered() {\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n if (swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n }\n\n if (previousFrom === from && previousTo === to && !force) {\n if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n swiper.slides.css(offsetProp, `${offset}px`);\n }\n swiper.updateProgress();\n return;\n }\n if (swiper.params.virtual.renderExternal) {\n swiper.params.virtual.renderExternal.call(swiper, {\n offset,\n from,\n to,\n slides: (function getSlides() {\n const slidesToRender = [];\n for (let i = from; i <= to; i += 1) {\n slidesToRender.push(slides[i]);\n }\n return slidesToRender;\n })(),\n });\n if (swiper.params.virtual.renderExternalUpdate) {\n onRendered();\n }\n return;\n }\n const prependIndexes = [];\n const appendIndexes = [];\n if (force) {\n swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();\n } else {\n for (let i = previousFrom; i <= previousTo; i += 1) {\n if (i < from || i > to) {\n swiper.$wrapperEl\n .find(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${i}\"]`)\n .remove();\n }\n }\n }\n for (let i = 0; i < slides.length; i += 1) {\n if (i >= from && i <= to) {\n if (typeof previousTo === 'undefined' || force) {\n appendIndexes.push(i);\n } else {\n if (i > previousTo) appendIndexes.push(i);\n if (i < previousFrom) prependIndexes.push(i);\n }\n }\n }\n appendIndexes.forEach((index) => {\n swiper.$wrapperEl.append(renderSlide(slides[index], index));\n });\n prependIndexes\n .sort((a, b) => b - a)\n .forEach((index) => {\n swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n });\n swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);\n onRendered();\n }\n\n function appendSlide(slides) {\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.push(slides[i]);\n }\n } else {\n swiper.virtual.slides.push(slides);\n }\n update(true);\n }\n function prependSlide(slides) {\n const activeIndex = swiper.activeIndex;\n let newActiveIndex = activeIndex + 1;\n let numberOfNewSlides = 1;\n\n if (Array.isArray(slides)) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n numberOfNewSlides = slides.length;\n } else {\n swiper.virtual.slides.unshift(slides);\n }\n if (swiper.params.virtual.cache) {\n const cache = swiper.virtual.cache;\n const newCache = {};\n Object.keys(cache).forEach((cachedIndex) => {\n const $cachedEl = cache[cachedIndex];\n const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');\n if (cachedElIndex) {\n $cachedEl.attr(\n 'data-swiper-slide-index',\n parseInt(cachedElIndex, 10) + numberOfNewSlides,\n );\n }\n newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n });\n swiper.virtual.cache = newCache;\n }\n update(true);\n swiper.slideTo(newActiveIndex, 0);\n }\n function removeSlide(slidesIndexes) {\n if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n let activeIndex = swiper.activeIndex;\n if (Array.isArray(slidesIndexes)) {\n for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n swiper.virtual.slides.splice(slidesIndexes[i], 1);\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes[i]];\n }\n if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n } else {\n swiper.virtual.slides.splice(slidesIndexes, 1);\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes];\n }\n if (slidesIndexes < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n update(true);\n swiper.slideTo(activeIndex, 0);\n }\n function removeAllSlides() {\n swiper.virtual.slides = [];\n if (swiper.params.virtual.cache) {\n swiper.virtual.cache = {};\n }\n update(true);\n swiper.slideTo(0, 0);\n }\n\n on('beforeInit', () => {\n if (!swiper.params.virtual.enabled) return;\n swiper.virtual.slides = swiper.params.virtual.slides;\n swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n\n if (!swiper.params.initialSlide) {\n update();\n }\n });\n on('setTranslate', () => {\n if (!swiper.params.virtual.enabled) return;\n if (swiper.params.cssMode && !swiper._immediateVirtual) {\n clearTimeout(cssModeTimeout);\n cssModeTimeout = setTimeout(() => {\n update();\n }, 100);\n } else {\n update();\n }\n });\n on('init update resize', () => {\n if (!swiper.params.virtual.enabled) return;\n if (swiper.params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);\n }\n });\n\n Object.assign(swiper.virtual, {\n appendSlide,\n prependSlide,\n removeSlide,\n removeAllSlides,\n update,\n });\n}\n","/* eslint-disable consistent-return */\nimport { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\n\nexport default function Keyboard({ swiper, extendParams, on, emit }) {\n const document = getDocument();\n const window = getWindow();\n swiper.keyboard = {\n enabled: false,\n };\n extendParams({\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true,\n },\n });\n\n function handle(event) {\n if (!swiper.enabled) return;\n\n const { rtlTranslate: rtl } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n const kc = e.keyCode || e.charCode;\n const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40;\n // Directions locks\n if (\n !swiper.allowSlideNext &&\n ((swiper.isHorizontal() && isArrowRight) ||\n (swiper.isVertical() && isArrowDown) ||\n isPageDown)\n ) {\n return false;\n }\n if (\n !swiper.allowSlidePrev &&\n ((swiper.isHorizontal() && isArrowLeft) || (swiper.isVertical() && isArrowUp) || isPageUp)\n ) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n if (\n document.activeElement &&\n document.activeElement.nodeName &&\n (document.activeElement.nodeName.toLowerCase() === 'input' ||\n document.activeElement.nodeName.toLowerCase() === 'textarea')\n ) {\n return undefined;\n }\n if (\n swiper.params.keyboard.onlyInViewport &&\n (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)\n ) {\n let inView = false;\n // Check that swiper should be inside of visible area of window\n if (\n swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 &&\n swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0\n ) {\n return undefined;\n }\n\n const $el = swiper.$el;\n const swiperWidth = $el[0].clientWidth;\n const swiperHeight = $el[0].clientHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = swiper.$el.offset();\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + swiperWidth, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + swiperHeight],\n [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight],\n ];\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n inView = true;\n }\n }\n if (!inView) return undefined;\n }\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (((isPageDown || isArrowRight) && !rtl) || ((isPageUp || isArrowLeft) && rtl))\n swiper.slideNext();\n if (((isPageUp || isArrowLeft) && !rtl) || ((isPageDown || isArrowRight) && rtl))\n swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n emit('keyPress', kc);\n return undefined;\n }\n function enable() {\n if (swiper.keyboard.enabled) return;\n $(document).on('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n function disable() {\n if (!swiper.keyboard.enabled) return;\n $(document).off('keydown', handle);\n swiper.keyboard.enabled = false;\n }\n\n on('init', () => {\n if (swiper.params.keyboard.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n if (swiper.keyboard.enabled) {\n disable();\n }\n });\n\n Object.assign(swiper.keyboard, {\n enable,\n disable,\n });\n}\n","/* eslint-disable consistent-return */\nimport { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now, nextTick } from '../../shared/utils.js';\n\nexport default function Mousewheel({ swiper, extendParams, on, emit }) {\n const window = getWindow();\n\n extendParams({\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarget: 'container',\n thresholdDelta: null,\n thresholdTime: null,\n },\n });\n\n swiper.mousewheel = {\n enabled: false,\n };\n\n let timeout;\n let lastScrollTime = now();\n let lastEventBeforeSnap;\n const recentWheelEvents = [];\n\n function normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n\n let sX = 0;\n let sY = 0; // spinX, spinY\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in e) {\n sY = e.detail;\n }\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n\n if (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY,\n };\n }\n function handleMouseEnter() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = true;\n }\n function handleMouseLeave() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = false;\n }\n function animateSlider(newEvent) {\n if (\n swiper.params.mousewheel.thresholdDelta &&\n newEvent.delta < swiper.params.mousewheel.thresholdDelta\n ) {\n // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n }\n\n if (\n swiper.params.mousewheel.thresholdTime &&\n now() - lastScrollTime < swiper.params.mousewheel.thresholdTime\n ) {\n // Prevent if time between scrolls is below configured threshold\n return false;\n }\n\n // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n // Return false as a default\n return true;\n }\n // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n emit('scroll', newEvent.raw);\n }\n // If you got here is because an animation has been triggered so store the current time\n lastScrollTime = new window.Date().getTime();\n // Return false as a default\n return false;\n }\n function releaseScroll(newEvent) {\n const params = swiper.params.mousewheel;\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n return false;\n }\n function handle(event) {\n let e = event;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n const params = swiper.params.mousewheel;\n\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n\n let target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges)\n return true;\n\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n\n const data = normalize(e);\n\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;\n else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;\n else return true;\n } else {\n delta =\n Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n\n if (delta === 0) return true;\n\n if (params.invert) delta = -delta;\n\n // Get the scroll positions\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();\n\n // When loop is true:\n // the disableParentSwiper will be true.\n // When loop is false:\n // if the scroll positions is not on edge,\n // then the disableParentSwiper will be true.\n // if the scroll on edge positions,\n // then the disableParentSwiper will be false.\n disableParentSwiper = swiper.params.loop\n ? true\n : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n\n if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event,\n };\n\n // Keep the most recent events\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n const prevEvent = recentWheelEvents.length\n ? recentWheelEvents[recentWheelEvents.length - 1]\n : undefined;\n recentWheelEvents.push(newEvent);\n\n // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n if (prevEvent) {\n if (\n newEvent.direction !== prevEvent.direction ||\n newEvent.delta > prevEvent.delta ||\n newEvent.time > prevEvent.time + 150\n ) {\n animateSlider(newEvent);\n }\n } else {\n animateSlider(newEvent);\n }\n\n // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n if (releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n };\n const ignoreWheelEvents =\n lastEventBeforeSnap &&\n newEvent.time < lastEventBeforeSnap.time + 500 &&\n newEvent.delta <= lastEventBeforeSnap.delta &&\n newEvent.direction === lastEventBeforeSnap.direction;\n if (!ignoreWheelEvents) {\n lastEventBeforeSnap = undefined;\n\n if (swiper.params.loop) {\n swiper.loopFix();\n }\n let position = swiper.getTranslate() + delta * params.sensitivity;\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode.sticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(timeout);\n timeout = undefined;\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n const prevEvent = recentWheelEvents.length\n ? recentWheelEvents[recentWheelEvents.length - 1]\n : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n if (\n prevEvent &&\n (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)\n ) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (\n recentWheelEvents.length >= 15 &&\n newEvent.time - firstEvent.time < 500 &&\n firstEvent.delta - newEvent.delta >= 1 &&\n newEvent.delta <= 6\n ) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n timeout = nextTick(() => {\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n if (!timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n timeout = nextTick(() => {\n const snapToThreshold = 0.5;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 500);\n }\n }\n\n // Emit event\n if (!ignoreWheelEvents) emit('scroll', e);\n\n // Stop autoplay\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction)\n swiper.autoplay.stop();\n // Return page scroll on edge positions\n if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n }\n }\n\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n return false;\n }\n\n function events(method) {\n let target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n target[method]('mouseenter', handleMouseEnter);\n target[method]('mouseleave', handleMouseLeave);\n target[method]('wheel', handle);\n }\n\n function enable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener('wheel', handle);\n return true;\n }\n if (swiper.mousewheel.enabled) return false;\n events('on');\n swiper.mousewheel.enabled = true;\n return true;\n }\n function disable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, handle);\n return true;\n }\n if (!swiper.mousewheel.enabled) return false;\n events('off');\n swiper.mousewheel.enabled = false;\n return true;\n }\n\n on('init', () => {\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n disable();\n }\n if (swiper.params.mousewheel.enabled) enable();\n });\n on('destroy', () => {\n if (swiper.params.cssMode) {\n enable();\n }\n if (swiper.mousewheel.enabled) disable();\n });\n\n Object.assign(swiper.mousewheel, {\n enable,\n disable,\n });\n}\n","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nimport $ from '../../shared/dom.js';\n\nexport default function Navigation({ swiper, extendParams, on, emit }) {\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n },\n });\n\n swiper.navigation = {\n nextEl: null,\n $nextEl: null,\n prevEl: null,\n $prevEl: null,\n };\n\n function getEl(el) {\n let $el;\n if (el) {\n $el = $(el);\n if (\n swiper.params.uniqueNavElements &&\n typeof el === 'string' &&\n $el.length > 1 &&\n swiper.$el.find(el).length === 1\n ) {\n $el = swiper.$el.find(el);\n }\n }\n return $el;\n }\n\n function toggleEl($el, disabled) {\n const params = swiper.params.navigation;\n if ($el && $el.length > 0) {\n $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass);\n if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n }\n function update() {\n // Update Navigation Buttons\n if (swiper.params.loop) return;\n const { $nextEl, $prevEl } = swiper.navigation;\n\n toggleEl($prevEl, swiper.isBeginning);\n toggleEl($nextEl, swiper.isEnd);\n }\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop) return;\n swiper.slidePrev();\n }\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop) return;\n swiper.slideNext();\n }\n function init() {\n const params = swiper.params.navigation;\n\n swiper.params.navigation = createElementIfNotDefined(\n swiper,\n swiper.originalParams.navigation,\n swiper.params.navigation,\n {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev',\n },\n );\n if (!(params.nextEl || params.prevEl)) return;\n\n const $nextEl = getEl(params.nextEl);\n const $prevEl = getEl(params.prevEl);\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', onNextClick);\n }\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', onPrevClick);\n }\n\n Object.assign(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0],\n });\n\n if (!swiper.enabled) {\n if ($nextEl) $nextEl.addClass(params.lockClass);\n if ($prevEl) $prevEl.addClass(params.lockClass);\n }\n }\n function destroy() {\n const { $nextEl, $prevEl } = swiper.navigation;\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n }\n\n on('init', () => {\n init();\n update();\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const { $nextEl, $prevEl } = swiper.navigation;\n if ($nextEl) {\n $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n if ($prevEl) {\n $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n });\n on('click', (_s, e) => {\n const { $nextEl, $prevEl } = swiper.navigation;\n const targetEl = e.target;\n if (\n swiper.params.navigation.hideOnClick &&\n !$(targetEl).is($prevEl) &&\n !$(targetEl).is($nextEl)\n ) {\n if (\n swiper.pagination &&\n swiper.params.pagination &&\n swiper.params.pagination.clickable &&\n (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))\n )\n return;\n let isHidden;\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n });\n\n Object.assign(swiper.navigation, {\n update,\n init,\n destroy,\n });\n}\n","import $ from '../../shared/dom.js';\nimport classesToSelector from '../../shared/classes-to-selector.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\n\nexport default function Pagination({ swiper, extendParams, on, emit }) {\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: (number) => number,\n formatFractionTotal: (number) => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n },\n });\n\n swiper.pagination = {\n el: null,\n $el: null,\n bullets: [],\n };\n\n let bulletSize;\n let dynamicBulletIndex = 0;\n\n function isPaginationDisabled() {\n return (\n !swiper.params.pagination.el ||\n !swiper.pagination.el ||\n !swiper.pagination.$el ||\n swiper.pagination.$el.length === 0\n );\n }\n\n function setSideBullets($bulletEl, position) {\n const { bulletActiveClass } = swiper.params.pagination;\n $bulletEl[position]()\n .addClass(`${bulletActiveClass}-${position}`)\n [position]()\n .addClass(`${bulletActiveClass}-${position}-${position}`);\n }\n\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength =\n swiper.virtual && swiper.params.virtual.enabled\n ? swiper.virtual.slides.length\n : swiper.slides.length;\n const $el = swiper.pagination.$el;\n // Current/Total\n let current;\n const total = swiper.params.loop\n ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup)\n : swiper.snapGrid.length;\n if (swiper.params.loop) {\n current = Math.ceil(\n (swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup,\n );\n if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n current -= slidesLength - swiper.loopedSlides * 2;\n }\n if (current > total - 1) current -= total;\n if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n }\n // Types\n if (\n params.type === 'bullets' &&\n swiper.pagination.bullets &&\n swiper.pagination.bullets.length > 0\n ) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(\n swiper.isHorizontal() ? 'width' : 'height',\n `${bulletSize * (params.dynamicMainBullets + 4)}px`,\n );\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n dynamicBulletIndex += current - swiper.previousIndex;\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n firstIndex = current - dynamicBulletIndex;\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.removeClass(\n ['', '-next', '-next-next', '-prev', '-prev-prev', '-main']\n .map((suffix) => `${params.bulletActiveClass}${suffix}`)\n .join(' '),\n );\n if ($el.length > 1) {\n bullets.each((bullet) => {\n const $bullet = $(bullet);\n const bulletIndex = $bullet.index();\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(`${params.bulletActiveClass}-main`);\n }\n if (bulletIndex === firstIndex) {\n setSideBullets($bullet, 'prev');\n }\n if (bulletIndex === lastIndex) {\n setSideBullets($bullet, 'next');\n }\n }\n });\n } else {\n const $bullet = bullets.eq(current);\n const bulletIndex = $bullet.index();\n $bullet.addClass(params.bulletActiveClass);\n if (params.dynamicBullets) {\n const $firstDisplayedBullet = bullets.eq(firstIndex);\n const $lastDisplayedBullet = bullets.eq(lastIndex);\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n }\n if (swiper.params.loop) {\n if (bulletIndex >= bullets.length - params.dynamicMainBullets) {\n for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n }\n bullets\n .eq(bullets.length - params.dynamicMainBullets - 1)\n .addClass(`${params.bulletActiveClass}-prev`);\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset =\n (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n }\n }\n if (params.type === 'fraction') {\n $el\n .find(classesToSelector(params.currentClass))\n .text(params.formatFractionCurrent(current + 1));\n $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n $el\n .find(classesToSelector(params.progressbarFillClass))\n .transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`)\n .transition(swiper.params.speed);\n }\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n emit('paginationRender', $el[0]);\n } else {\n emit('paginationUpdate', $el[0]);\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength =\n swiper.virtual && swiper.params.virtual.enabled\n ? swiper.virtual.slides.length\n : swiper.slides.length;\n\n const $el = swiper.pagination.$el;\n let paginationHTML = '';\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop\n ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup)\n : swiper.snapGrid.length;\n if (\n swiper.params.freeMode &&\n swiper.params.freeMode.enabled &&\n !swiper.params.loop &&\n numberOfBullets > slidesLength\n ) {\n numberOfBullets = slidesLength;\n }\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\">`;\n }\n }\n $el.html(paginationHTML);\n\n swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML =\n `` +\n ' / ' +\n ``;\n }\n $el.html(paginationHTML);\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n $el.html(paginationHTML);\n }\n if (params.type !== 'custom') {\n emit('paginationRender', swiper.pagination.$el[0]);\n }\n }\n function init() {\n swiper.params.pagination = createElementIfNotDefined(\n swiper,\n swiper.originalParams.pagination,\n swiper.params.pagination,\n { el: 'swiper-pagination' },\n );\n const params = swiper.params.pagination;\n if (!params.el) return;\n\n let $el = $(params.el);\n if ($el.length === 0) return;\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n $el = swiper.$el.find(params.el);\n // check if it belongs to another nested Swiper\n if ($el.length > 1) {\n $el = $el.filter((el) => {\n if ($(el).parents('.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n $el.addClass(params.modifierClass + swiper.params.direction);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', classesToSelector(params.bulletClass), function onClick(e) {\n e.preventDefault();\n let index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index += swiper.loopedSlides;\n swiper.slideTo(index);\n });\n }\n\n Object.assign(swiper.pagination, {\n $el,\n el: $el[0],\n });\n\n if (!swiper.enabled) {\n $el.addClass(params.lockClass);\n }\n }\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const $el = swiper.pagination.$el;\n\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n $el.removeClass(params.modifierClass + swiper.params.direction);\n if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass)\n swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n if (params.clickable) {\n $el.off('click', classesToSelector(params.bulletClass));\n }\n }\n\n on('init', () => {\n init();\n render();\n update();\n });\n on('activeIndexChange', () => {\n if (swiper.params.loop) {\n update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n if (!swiper.params.loop) {\n update();\n }\n });\n on('slidesLengthChange', () => {\n if (swiper.params.loop) {\n render();\n update();\n }\n });\n on('snapGridLengthChange', () => {\n if (!swiper.params.loop) {\n render();\n update();\n }\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const { $el } = swiper.pagination;\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const { $el } = swiper.pagination;\n if (\n swiper.params.pagination.el &&\n swiper.params.pagination.hideOnClick &&\n $el.length > 0 &&\n !$(targetEl).hasClass(swiper.params.pagination.bulletClass)\n ) {\n if (\n swiper.navigation &&\n ((swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl) ||\n (swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl))\n )\n return;\n const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n $el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n });\n\n Object.assign(swiper.pagination, {\n render,\n update,\n init,\n destroy,\n });\n}\n","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\n\nexport default function Scrollbar({ swiper, extendParams, on, emit }) {\n const document = getDocument();\n\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n },\n });\n\n swiper.scrollbar = {\n el: null,\n dragEl: null,\n $el: null,\n $dragEl: null,\n };\n\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const { scrollbar, rtlTranslate: rtl, progress } = swiper;\n const { $dragEl, $el } = scrollbar;\n const params = swiper.params.scrollbar;\n\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n if (rtl) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n if (swiper.isHorizontal()) {\n $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n $dragEl[0].style.width = `${newSize}px`;\n } else {\n $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n $dragEl[0].style.height = `${newSize}px`;\n }\n if (params.hide) {\n clearTimeout(timeout);\n $el[0].style.opacity = 1;\n timeout = setTimeout(() => {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n }\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.$dragEl.transition(duration);\n }\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n\n const { scrollbar } = swiper;\n const { $dragEl, $el } = scrollbar;\n\n $dragEl[0].style.width = '';\n $dragEl[0].style.height = '';\n trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n\n divider =\n swiper.size /\n (swiper.virtualSize +\n swiper.params.slidesOffsetBefore -\n (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n\n if (swiper.isHorizontal()) {\n $dragEl[0].style.width = `${dragSize}px`;\n } else {\n $dragEl[0].style.height = `${dragSize}px`;\n }\n\n if (divider >= 1) {\n $el[0].style.display = 'none';\n } else {\n $el[0].style.display = '';\n }\n if (swiper.params.scrollbar.hide) {\n $el[0].style.opacity = 0;\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.$el[swiper.isLocked ? 'addClass' : 'removeClass'](\n swiper.params.scrollbar.lockClass,\n );\n }\n }\n function getPointerPosition(e) {\n if (swiper.isHorizontal()) {\n return e.type === 'touchstart' || e.type === 'touchmove'\n ? e.targetTouches[0].clientX\n : e.clientX;\n }\n return e.type === 'touchstart' || e.type === 'touchmove'\n ? e.targetTouches[0].clientY\n : e.clientY;\n }\n function setDragPosition(e) {\n const { scrollbar, rtlTranslate: rtl } = swiper;\n const { $el } = scrollbar;\n\n let positionRatio;\n positionRatio =\n (getPointerPosition(e) -\n $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] -\n (dragStartPos !== null ? dragStartPos : dragSize / 2)) /\n (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n\n const position =\n swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const { scrollbar, $wrapperEl } = swiper;\n const { $el, $dragEl } = scrollbar;\n isTouched = true;\n dragStartPos =\n e.target === $dragEl[0] || e.target === $dragEl\n ? getPointerPosition(e) -\n e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top']\n : null;\n e.preventDefault();\n e.stopPropagation();\n\n $wrapperEl.transition(100);\n $dragEl.transition(100);\n setDragPosition(e);\n\n clearTimeout(dragTimeout);\n\n $el.transition(0);\n if (params.hide) {\n $el.css('opacity', 1);\n }\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', 'none');\n }\n emit('scrollbarDragStart', e);\n }\n function onDragMove(e) {\n const { scrollbar, $wrapperEl } = swiper;\n const { $el, $dragEl } = scrollbar;\n\n if (!isTouched) return;\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n setDragPosition(e);\n $wrapperEl.transition(0);\n $el.transition(0);\n $dragEl.transition(0);\n emit('scrollbarDragMove', e);\n }\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const { scrollbar, $wrapperEl } = swiper;\n const { $el } = scrollbar;\n\n if (!isTouched) return;\n isTouched = false;\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', '');\n $wrapperEl.transition('');\n }\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n emit('scrollbarDragEnd', e);\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n\n function events(method) {\n const { scrollbar, touchEventsTouch, touchEventsDesktop, params, support } = swiper;\n const $el = scrollbar.$el;\n const target = $el[0];\n const activeListener =\n support.passiveListener && params.passiveListeners\n ? { passive: false, capture: false }\n : false;\n const passiveListener =\n support.passiveListener && params.passiveListeners\n ? { passive: true, capture: false }\n : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n if (!support.touch) {\n target[eventMethod](touchEventsDesktop.start, onDragStart, activeListener);\n document[eventMethod](touchEventsDesktop.move, onDragMove, activeListener);\n document[eventMethod](touchEventsDesktop.end, onDragEnd, passiveListener);\n } else {\n target[eventMethod](touchEventsTouch.start, onDragStart, activeListener);\n target[eventMethod](touchEventsTouch.move, onDragMove, activeListener);\n target[eventMethod](touchEventsTouch.end, onDragEnd, passiveListener);\n }\n }\n\n function enableDraggable() {\n if (!swiper.params.scrollbar.el) return;\n events('on');\n }\n function disableDraggable() {\n if (!swiper.params.scrollbar.el) return;\n events('off');\n }\n function init() {\n const { scrollbar, $el: $swiperEl } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(\n swiper,\n swiper.originalParams.scrollbar,\n swiper.params.scrollbar,\n { el: 'swiper-scrollbar' },\n );\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n\n let $el = $(params.el);\n if (\n swiper.params.uniqueNavElements &&\n typeof params.el === 'string' &&\n $el.length > 1 &&\n $swiperEl.find(params.el).length === 1\n ) {\n $el = $swiperEl.find(params.el);\n }\n\n let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n if ($dragEl.length === 0) {\n $dragEl = $(`
`);\n $el.append($dragEl);\n }\n\n Object.assign(scrollbar, {\n $el,\n el: $el[0],\n $dragEl,\n dragEl: $dragEl[0],\n });\n\n if (params.draggable) {\n enableDraggable();\n }\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n }\n function destroy() {\n disableDraggable();\n }\n\n on('init', () => {\n init();\n updateSize();\n setTranslate();\n });\n on('update resize observerUpdate lock unlock', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const { $el } = swiper.scrollbar;\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n });\n on('destroy', () => {\n destroy();\n });\n\n Object.assign(swiper.scrollbar, {\n updateSize,\n setTranslate,\n init,\n destroy,\n });\n}\n","import $ from '../../shared/dom.js';\n\nexport default function Parallax({ swiper, extendParams, on }) {\n extendParams({\n parallax: {\n enabled: false,\n },\n });\n\n const setTransform = (el, progress) => {\n const { rtl } = swiper;\n\n const $el = $(el);\n const rtlFactor = rtl ? -1 : 1;\n\n const p = $el.attr('data-swiper-parallax') || '0';\n let x = $el.attr('data-swiper-parallax-x');\n let y = $el.attr('data-swiper-parallax-y');\n const scale = $el.attr('data-swiper-parallax-scale');\n const opacity = $el.attr('data-swiper-parallax-opacity');\n\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.isHorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n\n if (x.indexOf('%') >= 0) {\n x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n } else {\n x = `${x * progress * rtlFactor}px`;\n }\n if (y.indexOf('%') >= 0) {\n y = `${parseInt(y, 10) * progress}%`;\n } else {\n y = `${y * progress}px`;\n }\n\n if (typeof opacity !== 'undefined' && opacity !== null) {\n const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n $el[0].style.opacity = currentOpacity;\n }\n if (typeof scale === 'undefined' || scale === null) {\n $el.transform(`translate3d(${x}, ${y}, 0px)`);\n } else {\n const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);\n }\n };\n\n const setTranslate = () => {\n const { $el, slides, progress, snapGrid } = swiper;\n $el\n .children(\n '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]',\n )\n .each((el) => {\n setTransform(el, progress);\n });\n slides.each((slideEl, slideIndex) => {\n let slideProgress = slideEl.progress;\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n }\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n $(slideEl)\n .find(\n '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]',\n )\n .each((el) => {\n setTransform(el, slideProgress);\n });\n });\n };\n\n const setTransition = (duration = swiper.params.speed) => {\n const { $el } = swiper;\n $el\n .find(\n '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]',\n )\n .each((parallaxEl) => {\n const $parallaxEl = $(parallaxEl);\n let parallaxDuration =\n parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n $parallaxEl.transition(parallaxDuration);\n });\n };\n\n on('beforeInit', () => {\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n });\n on('init', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTranslate', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTransition', (_swiper, duration) => {\n if (!swiper.params.parallax.enabled) return;\n setTransition(duration);\n });\n}\n","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { getTranslate } from '../../shared/utils.js';\n\nexport default function Zoom({ swiper, extendParams, on, emit }) {\n const window = getWindow();\n extendParams({\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed',\n },\n });\n\n swiper.zoom = {\n enabled: false,\n };\n\n let currentScale = 1;\n let isScaling = false;\n let gesturesEnabled;\n let fakeGestureTouched;\n let fakeGestureMoved;\n const gesture = {\n $slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n $imageEl: undefined,\n $imageWrapEl: undefined,\n maxRatio: 3,\n };\n const image = {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {},\n };\n const velocity = {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined,\n };\n\n let scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get() {\n return scale;\n },\n set(value) {\n if (scale !== value) {\n const imageEl = gesture.$imageEl ? gesture.$imageEl[0] : undefined;\n const slideEl = gesture.$slideEl ? gesture.$slideEl[0] : undefined;\n emit('zoomChange', value, imageEl, slideEl);\n }\n scale = value;\n },\n });\n\n function getDistanceBetweenTouches(e) {\n if (e.targetTouches.length < 2) return 1;\n const x1 = e.targetTouches[0].pageX;\n const y1 = e.targetTouches[0].pageY;\n const x2 = e.targetTouches[1].pageX;\n const y2 = e.targetTouches[1].pageY;\n const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n return distance;\n }\n\n // Events\n function onGestureStart(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n if (!support.gestures) {\n if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {\n return;\n }\n fakeGestureTouched = true;\n gesture.scaleStart = getDistanceBetweenTouches(e);\n }\n if (!gesture.$slideEl || !gesture.$slideEl.length) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl\n .find(`.${params.containerClass}`)\n .eq(0)\n .find('img, svg, canvas, picture, .swiper-zoom-target');\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n if (gesture.$imageWrapEl.length === 0) {\n gesture.$imageEl = undefined;\n return;\n }\n }\n if (gesture.$imageEl) {\n gesture.$imageEl.transition(0);\n }\n isScaling = true;\n }\n function onGestureChange(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n if (!support.gestures) {\n if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {\n return;\n }\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches(e);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) {\n if (e.type === 'gesturechange') onGestureStart(e);\n return;\n }\n if (support.gestures) {\n zoom.scale = e.scale * currentScale;\n } else {\n zoom.scale = (gesture.scaleMove / gesture.scaleStart) * currentScale;\n }\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n }\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n }\n gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n }\n function onGestureEnd(e) {\n const device = swiper.device;\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n if (!support.gestures) {\n if (!fakeGestureTouched || !fakeGestureMoved) {\n return;\n }\n if (\n e.type !== 'touchend' ||\n (e.type === 'touchend' && e.changedTouches.length < 2 && !device.android)\n ) {\n return;\n }\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.$imageEl\n .transition(swiper.params.speed)\n .transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n currentScale = zoom.scale;\n isScaling = false;\n if (zoom.scale === 1) gesture.$slideEl = undefined;\n }\n function onTouchStart(e) {\n const device = swiper.device;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) e.preventDefault();\n image.isTouched = true;\n image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n }\n function onTouchMove(e) {\n const zoom = swiper.zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n swiper.allowClick = false;\n if (!image.isTouched || !gesture.$slideEl) return;\n\n if (!image.isMoved) {\n image.width = gesture.$imageEl[0].offsetWidth;\n image.height = gesture.$imageEl[0].offsetHeight;\n image.startX = getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n image.startY = getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n gesture.$imageWrapEl.transition(0);\n }\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n\n image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n if (!image.isMoved && !isScaling) {\n if (\n swiper.isHorizontal() &&\n ((Math.floor(image.minX) === Math.floor(image.startX) &&\n image.touchesCurrent.x < image.touchesStart.x) ||\n (Math.floor(image.maxX) === Math.floor(image.startX) &&\n image.touchesCurrent.x > image.touchesStart.x))\n ) {\n image.isTouched = false;\n return;\n }\n if (\n !swiper.isHorizontal() &&\n ((Math.floor(image.minY) === Math.floor(image.startY) &&\n image.touchesCurrent.y < image.touchesStart.y) ||\n (Math.floor(image.maxY) === Math.floor(image.startY) &&\n image.touchesCurrent.y > image.touchesStart.y))\n ) {\n image.isTouched = false;\n return;\n }\n }\n if (e.cancelable) {\n e.preventDefault();\n }\n e.stopPropagation();\n\n image.isMoved = true;\n image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;\n image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;\n\n if (image.currentX < image.minX) {\n image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n }\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n }\n\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n }\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n }\n\n // Velocity\n if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n if (!velocity.prevTime) velocity.prevTime = Date.now();\n velocity.x =\n (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y =\n (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n\n gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n function onTouchEnd() {\n const zoom = swiper.zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n image.isTouched = false;\n image.isMoved = false;\n let momentumDurationX = 300;\n let momentumDurationY = 300;\n const momentumDistanceX = velocity.x * momentumDurationX;\n const newPositionX = image.currentX + momentumDistanceX;\n const momentumDistanceY = velocity.y * momentumDurationY;\n const newPositionY = image.currentY + momentumDistanceY;\n\n // Fix duration\n if (velocity.x !== 0)\n momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0)\n momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n\n image.currentX = newPositionX;\n image.currentY = newPositionY;\n\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n\n gesture.$imageWrapEl\n .transition(momentumDuration)\n .transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n function onTransitionEnd() {\n const zoom = swiper.zoom;\n if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n if (gesture.$imageEl) {\n gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n }\n if (gesture.$imageWrapEl) {\n gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n }\n\n zoom.scale = 1;\n currentScale = 1;\n\n gesture.$slideEl = undefined;\n gesture.$imageEl = undefined;\n gesture.$imageWrapEl = undefined;\n }\n }\n\n function zoomIn(e) {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (e && e.target) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n }\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n }\n\n gesture.$imageEl = gesture.$slideEl\n .find(`.${params.containerClass}`)\n .eq(0)\n .find('img, svg, canvas, picture, .swiper-zoom-target');\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n if (\n !gesture.$imageEl ||\n gesture.$imageEl.length === 0 ||\n !gesture.$imageWrapEl ||\n gesture.$imageWrapEl.length === 0\n )\n return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.touchAction = 'none';\n }\n\n gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);\n\n let touchX;\n let touchY;\n let offsetX;\n let offsetY;\n let diffX;\n let diffY;\n let translateX;\n let translateY;\n let imageWidth;\n let imageHeight;\n let scaledWidth;\n let scaledHeight;\n let translateMinX;\n let translateMinY;\n let translateMaxX;\n let translateMaxY;\n let slideWidth;\n let slideHeight;\n\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n\n zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n if (e) {\n slideWidth = gesture.$slideEl[0].offsetWidth;\n slideHeight = gesture.$slideEl[0].offsetHeight;\n offsetX = gesture.$slideEl.offset().left + window.scrollX;\n offsetY = gesture.$slideEl.offset().top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n\n imageWidth = gesture.$imageEl[0].offsetWidth;\n imageHeight = gesture.$imageEl[0].offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n\n translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n gesture.$imageWrapEl\n .transition(300)\n .transform(`translate3d(${translateX}px, ${translateY}px,0)`);\n gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n }\n function zoomOut() {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n gesture.$imageEl = gesture.$slideEl\n .find(`.${params.containerClass}`)\n .eq(0)\n .find('img, svg, canvas, picture, .swiper-zoom-target');\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n if (\n !gesture.$imageEl ||\n gesture.$imageEl.length === 0 ||\n !gesture.$imageWrapEl ||\n gesture.$imageWrapEl.length === 0\n )\n return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.style.touchAction = '';\n }\n zoom.scale = 1;\n currentScale = 1;\n gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);\n gesture.$slideEl = undefined;\n }\n\n // Toggle Zoom\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoomOut();\n } else {\n // Zoom In\n zoomIn(e);\n }\n }\n\n function getListeners() {\n const support = swiper.support;\n const passiveListener =\n swiper.touchEvents.start === 'touchstart' &&\n support.passiveListener &&\n swiper.params.passiveListeners\n ? { passive: true, capture: false }\n : false;\n const activeListenerWithCapture = support.passiveListener\n ? { passive: false, capture: true }\n : true;\n return { passiveListener, activeListenerWithCapture };\n }\n\n function getSlideSelector() {\n return `.${swiper.params.slideClass}`;\n }\n\n function toggleGestures(method) {\n const { passiveListener } = getListeners();\n const slideSelector = getSlideSelector();\n swiper.$wrapperEl[method]('gesturestart', slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl[method]('gesturechange', slideSelector, onGestureChange, passiveListener);\n swiper.$wrapperEl[method]('gestureend', slideSelector, onGestureEnd, passiveListener);\n }\n function enableGestures() {\n if (gesturesEnabled) return;\n gesturesEnabled = true;\n toggleGestures('on');\n }\n function disableGestures() {\n if (!gesturesEnabled) return;\n gesturesEnabled = false;\n toggleGestures('off');\n }\n\n // Attach/Detach Events\n function enable() {\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n const support = swiper.support;\n const { passiveListener, activeListenerWithCapture } = getListeners();\n const slideSelector = getSlideSelector();\n\n // Scale image\n if (support.gestures) {\n swiper.$wrapperEl.on(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.on(\n swiper.touchEvents.start,\n slideSelector,\n onGestureStart,\n passiveListener,\n );\n swiper.$wrapperEl.on(\n swiper.touchEvents.move,\n slideSelector,\n onGestureChange,\n activeListenerWithCapture,\n );\n swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.on(\n swiper.touchEvents.cancel,\n slideSelector,\n onGestureEnd,\n passiveListener,\n );\n }\n }\n\n // Move image\n swiper.$wrapperEl.on(\n swiper.touchEvents.move,\n `.${swiper.params.zoom.containerClass}`,\n onTouchMove,\n activeListenerWithCapture,\n );\n }\n function disable() {\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n const support = swiper.support;\n zoom.enabled = false;\n\n const { passiveListener, activeListenerWithCapture } = getListeners();\n const slideSelector = getSlideSelector();\n\n // Scale image\n if (support.gestures) {\n swiper.$wrapperEl.off(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.off(\n swiper.touchEvents.start,\n slideSelector,\n onGestureStart,\n passiveListener,\n );\n swiper.$wrapperEl.off(\n swiper.touchEvents.move,\n slideSelector,\n onGestureChange,\n activeListenerWithCapture,\n );\n swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.off(\n swiper.touchEvents.cancel,\n slideSelector,\n onGestureEnd,\n passiveListener,\n );\n }\n }\n\n // Move image\n swiper.$wrapperEl.off(\n swiper.touchEvents.move,\n `.${swiper.params.zoom.containerClass}`,\n onTouchMove,\n activeListenerWithCapture,\n );\n }\n\n on('init', () => {\n if (swiper.params.zoom.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n disable();\n });\n on('touchStart', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchStart(e);\n });\n on('touchEnd', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchEnd(e);\n });\n on('doubleTap', (_s, e) => {\n if (\n !swiper.animating &&\n swiper.params.zoom.enabled &&\n swiper.zoom.enabled &&\n swiper.params.zoom.toggle\n ) {\n zoomToggle(e);\n }\n });\n on('transitionEnd', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n onTransitionEnd();\n }\n });\n on('slideChange', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n onTransitionEnd();\n }\n });\n\n Object.assign(swiper.zoom, {\n enable,\n disable,\n in: zoomIn,\n out: zoomOut,\n toggle: zoomToggle,\n });\n}\n","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\n\nexport default function Lazy({ swiper, extendParams, on, emit }) {\n extendParams({\n lazy: {\n checkInView: false,\n enabled: false,\n loadPrevNext: false,\n loadPrevNextAmount: 1,\n loadOnTransitionStart: false,\n scrollingElement: '',\n\n elementClass: 'swiper-lazy',\n loadingClass: 'swiper-lazy-loading',\n loadedClass: 'swiper-lazy-loaded',\n preloaderClass: 'swiper-lazy-preloader',\n },\n });\n\n swiper.lazy = {};\n\n let scrollHandlerAttached = false;\n let initialImageLoaded = false;\n\n function loadInSlide(index, loadInDuplicate = true) {\n const params = swiper.params.lazy;\n if (typeof index === 'undefined') return;\n if (swiper.slides.length === 0) return;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n const $slideEl = isVirtual\n ? swiper.$wrapperEl.children(\n `.${swiper.params.slideClass}[data-swiper-slide-index=\"${index}\"]`,\n )\n : swiper.slides.eq(index);\n\n const $images = $slideEl.find(\n `.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`,\n );\n if (\n $slideEl.hasClass(params.elementClass) &&\n !$slideEl.hasClass(params.loadedClass) &&\n !$slideEl.hasClass(params.loadingClass)\n ) {\n $images.push($slideEl[0]);\n }\n if ($images.length === 0) return;\n\n $images.each((imageEl) => {\n const $imageEl = $(imageEl);\n $imageEl.addClass(params.loadingClass);\n\n const background = $imageEl.attr('data-background');\n const src = $imageEl.attr('data-src');\n const srcset = $imageEl.attr('data-srcset');\n const sizes = $imageEl.attr('data-sizes');\n const $pictureEl = $imageEl.parent('picture');\n\n swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, () => {\n if (\n typeof swiper === 'undefined' ||\n swiper === null ||\n !swiper ||\n (swiper && !swiper.params) ||\n swiper.destroyed\n )\n return;\n if (background) {\n $imageEl.css('background-image', `url(\"${background}\")`);\n $imageEl.removeAttr('data-background');\n } else {\n if (srcset) {\n $imageEl.attr('srcset', srcset);\n $imageEl.removeAttr('data-srcset');\n }\n if (sizes) {\n $imageEl.attr('sizes', sizes);\n $imageEl.removeAttr('data-sizes');\n }\n if ($pictureEl.length) {\n $pictureEl.children('source').each((sourceEl) => {\n const $source = $(sourceEl);\n\n if ($source.attr('data-srcset')) {\n $source.attr('srcset', $source.attr('data-srcset'));\n $source.removeAttr('data-srcset');\n }\n });\n }\n if (src) {\n $imageEl.attr('src', src);\n $imageEl.removeAttr('data-src');\n }\n }\n\n $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n $slideEl.find(`.${params.preloaderClass}`).remove();\n if (swiper.params.loop && loadInDuplicate) {\n const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n const originalSlide = swiper.$wrapperEl.children(\n `[data-swiper-slide-index=\"${slideOriginalIndex}\"]:not(.${swiper.params.slideDuplicateClass})`,\n );\n loadInSlide(originalSlide.index(), false);\n } else {\n const duplicatedSlide = swiper.$wrapperEl.children(\n `.${swiper.params.slideDuplicateClass}[data-swiper-slide-index=\"${slideOriginalIndex}\"]`,\n );\n loadInSlide(duplicatedSlide.index(), false);\n }\n }\n emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n });\n\n emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n });\n }\n\n function load() {\n const { $wrapperEl, params: swiperParams, slides, activeIndex } = swiper;\n const isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n const params = swiperParams.lazy;\n\n let slidesPerView = swiperParams.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = 0;\n }\n\n function slideExist(index) {\n if (isVirtual) {\n if (\n $wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index=\"${index}\"]`)\n .length\n ) {\n return true;\n }\n } else if (slides[index]) return true;\n return false;\n }\n\n function slideIndex(slideEl) {\n if (isVirtual) {\n return $(slideEl).attr('data-swiper-slide-index');\n }\n return $(slideEl).index();\n }\n\n if (!initialImageLoaded) initialImageLoaded = true;\n if (swiper.params.watchSlidesProgress) {\n $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each((slideEl) => {\n const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n loadInSlide(index);\n });\n } else if (slidesPerView > 1) {\n for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n } else {\n loadInSlide(activeIndex);\n }\n if (params.loadPrevNext) {\n if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {\n const amount = params.loadPrevNextAmount;\n const spv = slidesPerView;\n const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);\n // Next Slides\n for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n // Prev Slides\n for (let i = minIndex; i < activeIndex; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n } else {\n const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);\n if (nextSlide.length > 0) loadInSlide(slideIndex(nextSlide));\n\n const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);\n if (prevSlide.length > 0) loadInSlide(slideIndex(prevSlide));\n }\n }\n }\n function checkInViewOnLoad() {\n const window = getWindow();\n if (!swiper || swiper.destroyed) return;\n const $scrollElement = swiper.params.lazy.scrollingElement\n ? $(swiper.params.lazy.scrollingElement)\n : $(window);\n const isWindow = $scrollElement[0] === window;\n const scrollElementWidth = isWindow ? window.innerWidth : $scrollElement[0].offsetWidth;\n const scrollElementHeight = isWindow ? window.innerHeight : $scrollElement[0].offsetHeight;\n const swiperOffset = swiper.$el.offset();\n const { rtlTranslate: rtl } = swiper;\n\n let inView = false;\n\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + swiper.width, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + swiper.height],\n [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height],\n ];\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n if (\n point[0] >= 0 &&\n point[0] <= scrollElementWidth &&\n point[1] >= 0 &&\n point[1] <= scrollElementHeight\n ) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n inView = true;\n }\n }\n\n const passiveListener =\n swiper.touchEvents.start === 'touchstart' &&\n swiper.support.passiveListener &&\n swiper.params.passiveListeners\n ? { passive: true, capture: false }\n : false;\n\n if (inView) {\n load();\n $scrollElement.off('scroll', checkInViewOnLoad, passiveListener);\n } else if (!scrollHandlerAttached) {\n scrollHandlerAttached = true;\n $scrollElement.on('scroll', checkInViewOnLoad, passiveListener);\n }\n }\n\n on('beforeInit', () => {\n if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n swiper.params.preloadImages = false;\n }\n });\n on('init', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('scroll', () => {\n if (\n swiper.params.freeMode &&\n swiper.params.freeMode.enabled &&\n !swiper.params.freeMode.sticky\n ) {\n load();\n }\n });\n on('scrollbarDragMove resize _freeModeNoMomentumRelease', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('transitionStart', () => {\n if (swiper.params.lazy.enabled) {\n if (\n swiper.params.lazy.loadOnTransitionStart ||\n (!swiper.params.lazy.loadOnTransitionStart && !initialImageLoaded)\n ) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n }\n });\n on('transitionEnd', () => {\n if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('slideChange', () => {\n const { lazy, cssMode, watchSlidesProgress, touchReleaseOnEdges, resistanceRatio } =\n swiper.params;\n if (\n lazy.enabled &&\n (cssMode || (watchSlidesProgress && (touchReleaseOnEdges || resistanceRatio === 0)))\n ) {\n load();\n }\n });\n\n Object.assign(swiper.lazy, {\n load,\n loadInSlide,\n });\n}\n","/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nimport { nextTick } from '../../shared/utils.js';\n\nexport default function Controller({ swiper, extendParams, on }) {\n extendParams({\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide', // or 'container'\n },\n });\n\n swiper.controller = {\n control: undefined,\n };\n\n function LinearSpline(x, y) {\n const binarySearch = (function search() {\n let maxIndex;\n let minIndex;\n let guess;\n return (array, val) => {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1) {\n guess = (maxIndex + minIndex) >> 1;\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n return maxIndex;\n };\n })();\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n let i1;\n let i3;\n\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0;\n\n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n\n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return (\n ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1]\n );\n };\n return this;\n }\n // xxx: for now i will just save one spline function to to\n function getInterpolateFunction(c) {\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop\n ? new LinearSpline(swiper.slidesGrid, c.slidesGrid)\n : new LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n }\n function setTranslate(_t, byController) {\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n const Swiper = swiper.constructor;\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n if (swiper.params.controller.by === 'slide') {\n getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier =\n (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n }\n\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n if (Array.isArray(controlled)) {\n for (let i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n }\n function setTransition(duration, byController) {\n const Swiper = swiper.constructor;\n const controlled = swiper.controller.control;\n let i;\n function setControlledTransition(c) {\n c.setTransition(duration, swiper);\n if (duration !== 0) {\n c.transitionStart();\n if (c.params.autoHeight) {\n nextTick(() => {\n c.updateAutoHeight();\n });\n }\n c.$wrapperEl.transitionEnd(() => {\n if (!controlled) return;\n if (c.params.loop && swiper.params.controller.by === 'slide') {\n c.loopFix();\n }\n c.transitionEnd();\n });\n }\n }\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n\n function removeSpline() {\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n }\n on('beforeInit', () => {\n swiper.controller.control = swiper.params.controller.control;\n });\n on('update', () => {\n removeSpline();\n });\n on('resize', () => {\n removeSpline();\n });\n on('observerUpdate', () => {\n removeSpline();\n });\n on('setTranslate', (_s, translate, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTranslate(translate, byController);\n });\n on('setTransition', (_s, duration, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTransition(duration, byController);\n });\n\n Object.assign(swiper.controller, {\n setTranslate,\n setTransition,\n });\n}\n","import classesToSelector from '../../shared/classes-to-selector.js';\nimport $ from '../../shared/dom.js';\n\nexport default function A11y({ swiper, extendParams, on }) {\n extendParams({\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n slideLabelMessage: '{{index}} / {{slidesLength}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group',\n },\n });\n\n let liveRegion = null;\n\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n }\n\n function getRandomNumber(size = 16) {\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n function makeElFocusable($el) {\n $el.attr('tabIndex', '0');\n }\n function makeElNotFocusable($el) {\n $el.attr('tabIndex', '-1');\n }\n function addElRole($el, role) {\n $el.attr('role', role);\n }\n function addElRoleDescription($el, description) {\n $el.attr('aria-roledescription', description);\n }\n function addElControls($el, controls) {\n $el.attr('aria-controls', controls);\n }\n function addElLabel($el, label) {\n $el.attr('aria-label', label);\n }\n function addElId($el, id) {\n $el.attr('id', id);\n }\n function addElLive($el, live) {\n $el.attr('aria-live', live);\n }\n function disableEl($el) {\n $el.attr('aria-disabled', true);\n }\n function enableEl($el) {\n $el.attr('aria-disabled', false);\n }\n\n function onEnterOrSpaceKey(e) {\n if (e.keyCode !== 13 && e.keyCode !== 32) return;\n const params = swiper.params.a11y;\n const $targetEl = $(e.target);\n if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n if (swiper.isEnd) {\n notify(params.lastSlideMessage);\n } else {\n notify(params.nextSlideMessage);\n }\n }\n if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n if (swiper.isBeginning) {\n notify(params.firstSlideMessage);\n } else {\n notify(params.prevSlideMessage);\n }\n }\n\n if (\n swiper.pagination &&\n $targetEl.is(classesToSelector(swiper.params.pagination.bulletClass))\n ) {\n $targetEl[0].click();\n }\n }\n\n function updateNavigation() {\n if (swiper.params.loop || !swiper.navigation) return;\n const { $nextEl, $prevEl } = swiper.navigation;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n disableEl($prevEl);\n makeElNotFocusable($prevEl);\n } else {\n enableEl($prevEl);\n makeElFocusable($prevEl);\n }\n }\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n disableEl($nextEl);\n makeElNotFocusable($nextEl);\n } else {\n enableEl($nextEl);\n makeElFocusable($nextEl);\n }\n }\n }\n\n function hasPagination() {\n return (\n swiper.pagination &&\n swiper.params.pagination.clickable &&\n swiper.pagination.bullets &&\n swiper.pagination.bullets.length\n );\n }\n\n function updatePagination() {\n const params = swiper.params.a11y;\n if (hasPagination()) {\n swiper.pagination.bullets.each((bulletEl) => {\n const $bulletEl = $(bulletEl);\n makeElFocusable($bulletEl);\n if (!swiper.params.pagination.renderBullet) {\n addElRole($bulletEl, 'button');\n addElLabel(\n $bulletEl,\n params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1),\n );\n }\n });\n }\n }\n\n const initNavEl = ($el, wrapperId, message) => {\n makeElFocusable($el);\n if ($el[0].tagName !== 'BUTTON') {\n addElRole($el, 'button');\n $el.on('keydown', onEnterOrSpaceKey);\n }\n addElLabel($el, message);\n addElControls($el, wrapperId);\n };\n\n function init() {\n const params = swiper.params.a11y;\n\n swiper.$el.append(liveRegion);\n\n // Container\n const $containerEl = swiper.$el;\n if (params.containerRoleDescriptionMessage) {\n addElRoleDescription($containerEl, params.containerRoleDescriptionMessage);\n }\n if (params.containerMessage) {\n addElLabel($containerEl, params.containerMessage);\n }\n\n // Wrapper\n const $wrapperEl = swiper.$wrapperEl;\n const wrapperId = $wrapperEl.attr('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n addElId($wrapperEl, wrapperId);\n addElLive($wrapperEl, live);\n\n // Slide\n if (params.itemRoleDescriptionMessage) {\n addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage);\n }\n addElRole($(swiper.slides), params.slideRole);\n\n const slidesLength = swiper.params.loop\n ? swiper.slides.filter((el) => !el.classList.contains(swiper.params.slideDuplicateClass))\n .length\n : swiper.slides.length;\n swiper.slides.each((slideEl, index) => {\n const $slideEl = $(slideEl);\n const slideIndex = swiper.params.loop\n ? parseInt($slideEl.attr('data-swiper-slide-index'), 10)\n : index;\n const ariaLabelMessage = params.slideLabelMessage\n .replace(/\\{\\{index\\}\\}/, slideIndex + 1)\n .replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n addElLabel($slideEl, ariaLabelMessage);\n });\n\n // Navigation\n let $nextEl;\n let $prevEl;\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl && $nextEl.length) {\n initNavEl($nextEl, wrapperId, params.nextSlideMessage);\n }\n if ($prevEl && $prevEl.length) {\n initNavEl($prevEl, wrapperId, params.prevSlideMessage);\n }\n\n // Pagination\n if (hasPagination()) {\n swiper.pagination.$el.on(\n 'keydown',\n classesToSelector(swiper.params.pagination.bulletClass),\n onEnterOrSpaceKey,\n );\n }\n }\n function destroy() {\n if (liveRegion && liveRegion.length > 0) liveRegion.remove();\n\n let $nextEl;\n let $prevEl;\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n if ($nextEl) {\n $nextEl.off('keydown', onEnterOrSpaceKey);\n }\n if ($prevEl) {\n $prevEl.off('keydown', onEnterOrSpaceKey);\n }\n\n // Pagination\n if (hasPagination()) {\n swiper.pagination.$el.off(\n 'keydown',\n classesToSelector(swiper.params.pagination.bulletClass),\n onEnterOrSpaceKey,\n );\n }\n }\n\n on('beforeInit', () => {\n liveRegion = $(\n ``,\n );\n });\n\n on('afterInit', () => {\n if (!swiper.params.a11y.enabled) return;\n init();\n updateNavigation();\n });\n on('toEdge', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('fromEdge', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('paginationUpdate', () => {\n if (!swiper.params.a11y.enabled) return;\n updatePagination();\n });\n on('destroy', () => {\n if (!swiper.params.a11y.enabled) return;\n destroy();\n });\n}\n","import { getWindow } from 'ssr-window';\n\nexport default function History({ swiper, extendParams, on }) {\n extendParams({\n history: {\n enabled: false,\n root: '',\n replaceState: false,\n key: 'slides',\n },\n });\n\n let initialized = false;\n let paths = {};\n\n const slugify = (text) => {\n return text\n .toString()\n .replace(/\\s+/g, '-')\n .replace(/[^\\w-]+/g, '')\n .replace(/--+/g, '-')\n .replace(/^-+/, '')\n .replace(/-+$/, '');\n };\n\n const getPathValues = (urlOverride) => {\n const window = getWindow();\n let location;\n if (urlOverride) {\n location = new URL(urlOverride);\n } else {\n location = window.location;\n }\n const pathArray = location.pathname\n .slice(1)\n .split('/')\n .filter((part) => part !== '');\n const total = pathArray.length;\n const key = pathArray[total - 2];\n const value = pathArray[total - 1];\n return { key, value };\n };\n const setHistory = (key, index) => {\n const window = getWindow();\n if (!initialized || !swiper.params.history.enabled) return;\n let location;\n if (swiper.params.url) {\n location = new URL(swiper.params.url);\n } else {\n location = window.location;\n }\n const slide = swiper.slides.eq(index);\n let value = slugify(slide.attr('data-history'));\n if (swiper.params.history.root.length > 0) {\n let root = swiper.params.history.root;\n if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);\n value = `${root}/${key}/${value}`;\n } else if (!location.pathname.includes(key)) {\n value = `${key}/${value}`;\n }\n const currentState = window.history.state;\n if (currentState && currentState.value === value) {\n return;\n }\n if (swiper.params.history.replaceState) {\n window.history.replaceState({ value }, null, value);\n } else {\n window.history.pushState({ value }, null, value);\n }\n };\n\n const scrollToSlide = (speed, value, runCallbacks) => {\n if (value) {\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHistory = slugify(slide.attr('data-history'));\n if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n };\n\n const setHistoryPopState = () => {\n paths = getPathValues(swiper.params.url);\n scrollToSlide(swiper.params.speed, swiper.paths.value, false);\n };\n\n const init = () => {\n const window = getWindow();\n if (!swiper.params.history) return;\n if (!window.history || !window.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n initialized = true;\n paths = getPathValues(swiper.params.url);\n if (!paths.key && !paths.value) return;\n scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n };\n const destroy = () => {\n const window = getWindow();\n if (!swiper.params.history.replaceState) {\n window.removeEventListener('popstate', setHistoryPopState);\n }\n };\n\n on('init', () => {\n if (swiper.params.history.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.history.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n}\n","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\n\nexport default function HashNavigation({ swiper, extendParams, emit, on }) {\n let initialized = false;\n const document = getDocument();\n const window = getWindow();\n extendParams({\n hashNavigation: {\n enabled: false,\n replaceState: false,\n watchState: false,\n },\n });\n const onHashChange = () => {\n emit('hashChange');\n const newHash = document.location.hash.replace('#', '');\n const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n if (newHash !== activeSlideHash) {\n const newIndex = swiper.$wrapperEl\n .children(`.${swiper.params.slideClass}[data-hash=\"${newHash}\"]`)\n .index();\n if (typeof newIndex === 'undefined') return;\n swiper.slideTo(newIndex);\n }\n };\n const setHash = () => {\n if (!initialized || !swiper.params.hashNavigation.enabled) return;\n if (\n swiper.params.hashNavigation.replaceState &&\n window.history &&\n window.history.replaceState\n ) {\n window.history.replaceState(\n null,\n null,\n `#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || '',\n );\n emit('hashSet');\n } else {\n const slide = swiper.slides.eq(swiper.activeIndex);\n const hash = slide.attr('data-hash') || slide.attr('data-history');\n document.location.hash = hash || '';\n emit('hashSet');\n }\n };\n const init = () => {\n if (\n !swiper.params.hashNavigation.enabled ||\n (swiper.params.history && swiper.params.history.enabled)\n )\n return;\n initialized = true;\n const hash = document.location.hash.replace('#', '');\n if (hash) {\n const speed = 0;\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHash = slide.attr('data-hash') || slide.attr('data-history');\n if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n }\n }\n }\n if (swiper.params.hashNavigation.watchState) {\n $(window).on('hashchange', onHashChange);\n }\n };\n const destroy = () => {\n if (swiper.params.hashNavigation.watchState) {\n $(window).off('hashchange', onHashChange);\n }\n };\n\n on('init', () => {\n if (swiper.params.hashNavigation.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.hashNavigation.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHash();\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHash();\n }\n });\n}\n","/* eslint no-underscore-dangle: \"off\" */\n/* eslint no-use-before-define: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport { nextTick } from '../../shared/utils.js';\n\nexport default function Autoplay({ swiper, extendParams, on, emit }) {\n let timeout;\n\n swiper.autoplay = {\n running: false,\n paused: false,\n };\n\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false,\n },\n });\n\n function run() {\n const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n let delay = swiper.params.autoplay.delay;\n if ($activeSlideEl.attr('data-swiper-autoplay')) {\n delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n }\n clearTimeout(timeout);\n timeout = nextTick(() => {\n let autoplayResult;\n if (swiper.params.autoplay.reverseDirection) {\n if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isBeginning) {\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(\n swiper.slides.length - 1,\n swiper.params.speed,\n true,\n true,\n );\n emit('autoplay');\n } else {\n stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isEnd) {\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n if (swiper.params.cssMode && swiper.autoplay.running) run();\n else if (autoplayResult === false) {\n run();\n }\n }, delay);\n }\n function start() {\n if (typeof timeout !== 'undefined') return false;\n if (swiper.autoplay.running) return false;\n swiper.autoplay.running = true;\n emit('autoplayStart');\n run();\n return true;\n }\n function stop() {\n if (!swiper.autoplay.running) return false;\n if (typeof timeout === 'undefined') return false;\n\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n swiper.autoplay.running = false;\n emit('autoplayStop');\n return true;\n }\n function pause(speed) {\n if (!swiper.autoplay.running) return;\n if (swiper.autoplay.paused) return;\n if (timeout) clearTimeout(timeout);\n swiper.autoplay.paused = true;\n if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n swiper.autoplay.paused = false;\n run();\n } else {\n ['transitionend', 'webkitTransitionEnd'].forEach((event) => {\n swiper.$wrapperEl[0].addEventListener(event, onTransitionEnd);\n });\n }\n }\n function onVisibilityChange() {\n const document = getDocument();\n if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n pause();\n }\n if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n run();\n swiper.autoplay.paused = false;\n }\n }\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n if (e.target !== swiper.$wrapperEl[0]) return;\n ['transitionend', 'webkitTransitionEnd'].forEach((event) => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n swiper.autoplay.paused = false;\n if (!swiper.autoplay.running) {\n stop();\n } else {\n run();\n }\n }\n function onMouseEnter() {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n pause();\n }\n\n ['transitionend', 'webkitTransitionEnd'].forEach((event) => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n }\n function onMouseLeave() {\n if (swiper.params.autoplay.disableOnInteraction) {\n return;\n }\n swiper.autoplay.paused = false;\n run();\n }\n function attachMouseEvents() {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.$el.on('mouseenter', onMouseEnter);\n swiper.$el.on('mouseleave', onMouseLeave);\n }\n }\n function detachMouseEvents() {\n swiper.$el.off('mouseenter', onMouseEnter);\n swiper.$el.off('mouseleave', onMouseLeave);\n }\n\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n start();\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n attachMouseEvents();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.pause(speed);\n } else {\n stop();\n }\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n pause();\n }\n }\n });\n on('touchEnd', () => {\n if (\n swiper.params.cssMode &&\n swiper.autoplay.paused &&\n !swiper.params.autoplay.disableOnInteraction\n ) {\n run();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n if (swiper.autoplay.running) {\n stop();\n }\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n });\n\n Object.assign(swiper.autoplay, {\n pause,\n run,\n start,\n stop,\n });\n}\n","import { isObject } from '../../shared/utils.js';\nimport $ from '../../shared/dom.js';\n\nexport default function Thumb({ swiper, extendParams, on }) {\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs',\n },\n });\n\n let initialized = false;\n let swiperCreated = false;\n\n swiper.thumbs = {\n swiper: null,\n };\n\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass))\n return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n if (swiper.params.loop) {\n let currentIndex = swiper.activeIndex;\n if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n currentIndex = swiper.activeIndex;\n }\n const prevIndex = swiper.slides\n .eq(currentIndex)\n .prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`)\n .eq(0)\n .index();\n const nextIndex = swiper.slides\n .eq(currentIndex)\n .nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`)\n .eq(0)\n .index();\n if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;\n else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;\n else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;\n else slideToIndex = prevIndex;\n }\n swiper.slideTo(slideToIndex);\n }\n\n function init() {\n const { thumbs: thumbsParams } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Object.assign(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n });\n Object.assign(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n });\n } else if (isObject(thumbsParams.swiper)) {\n const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n Object.assign(thumbsSwiperParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n });\n swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n swiperCreated = true;\n }\n swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n\n const slidesPerView =\n thumbsSwiper.params.slidesPerView === 'auto'\n ? thumbsSwiper.slidesPerViewDynamic()\n : thumbsSwiper.params.slidesPerView;\n\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n let currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n if (thumbsSwiper.params.loop) {\n if (\n thumbsSwiper.slides\n .eq(currentThumbsIndex)\n .hasClass(thumbsSwiper.params.slideDuplicateClass)\n ) {\n thumbsSwiper.loopFix();\n // eslint-disable-next-line\n thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n currentThumbsIndex = thumbsSwiper.activeIndex;\n }\n // Find actual thumbs index to slide to\n const prevThumbsIndex = thumbsSwiper.slides\n .eq(currentThumbsIndex)\n .prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`)\n .eq(0)\n .index();\n const nextThumbsIndex = thumbsSwiper.slides\n .eq(currentThumbsIndex)\n .nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`)\n .eq(0)\n .index();\n if (typeof prevThumbsIndex === 'undefined') {\n newThumbsIndex = nextThumbsIndex;\n } else if (typeof nextThumbsIndex === 'undefined') {\n newThumbsIndex = prevThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex =\n thumbsSwiper.params.slidesPerGroup > 1 ? nextThumbsIndex : currentThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = nextThumbsIndex;\n } else {\n newThumbsIndex = prevThumbsIndex;\n }\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n\n if (\n thumbsSwiper.visibleSlidesIndexes &&\n thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0\n ) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (\n newThumbsIndex > currentThumbsIndex &&\n thumbsSwiper.params.slidesPerGroup === 1\n ) {\n // newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n }\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n\n // Activate thumbs\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n\n thumbsToActivate = Math.floor(thumbsToActivate);\n\n thumbsSwiper.slides.removeClass(thumbActiveClass);\n if (\n thumbsSwiper.params.loop ||\n (thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled)\n ) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.$wrapperEl\n .children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`)\n .addClass(thumbActiveClass);\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);\n }\n }\n }\n\n on('beforeInit', () => {\n const { thumbs } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n init();\n update(true);\n });\n on('slideChange update resize observerUpdate', () => {\n if (!swiper.thumbs.swiper) return;\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n if (swiperCreated && thumbsSwiper) {\n thumbsSwiper.destroy();\n }\n });\n\n Object.assign(swiper.thumbs, {\n init,\n update,\n });\n}\n","import { now } from '../../shared/utils.js';\n\nexport default function freeMode({ swiper, extendParams, emit, once }) {\n extendParams({\n freeMode: {\n enabled: false,\n momentum: true,\n momentumRatio: 1,\n momentumBounce: true,\n momentumBounceRatio: 1,\n momentumVelocityRatio: 1,\n sticky: false,\n minimumVelocity: 0.02,\n },\n });\n\n function onTouchMove() {\n const { touchEventsData: data, touches } = swiper;\n // Velocity\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime,\n });\n }\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: now(),\n });\n }\n\n function onTouchEnd({ currentPos }) {\n const { params, $wrapperEl, rtlTranslate: rtl, snapGrid, touchEventsData: data } = swiper;\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n return;\n }\n\n if (params.freeMode.momentum) {\n if (data.velocities.length > 1) {\n const lastMoveEvent = data.velocities.pop();\n const velocityEvent = data.velocities.pop();\n\n const distance = lastMoveEvent.position - velocityEvent.position;\n const time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\n swiper.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n swiper.velocity *= params.freeMode.momentumVelocityRatio;\n\n data.velocities.length = 0;\n let momentumDuration = 1000 * params.freeMode.momentumRatio;\n const momentumDistance = swiper.velocity * momentumDuration;\n\n let newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n\n let doBounce = false;\n let afterBouncePosition;\n const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\n let needsLoopFix;\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeMode.sticky) {\n let nextSlide;\n for (let j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n\n if (\n Math.abs(snapGrid[nextSlide] - newPosition) <\n Math.abs(snapGrid[nextSlide - 1] - newPosition) ||\n swiper.swipeDirection === 'next'\n ) {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n newPosition = -newPosition;\n }\n if (needsLoopFix) {\n once('transitionEnd', () => {\n swiper.loopFix();\n });\n }\n // Fix duration\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n if (params.freeMode.sticky) {\n // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (params.freeMode.momentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(() => {\n swiper.setTranslate(afterBouncePosition);\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n emit('_freeModeNoMomentumRelease');\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n if (!swiper.animating) {\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n } else if (params.freeMode) {\n emit('_freeModeNoMomentumRelease');\n }\n\n if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n }\n\n Object.assign(swiper, {\n freeMode: {\n onTouchMove,\n onTouchEnd,\n },\n });\n}\n","export default function Grid({ swiper, extendParams }) {\n extendParams({\n grid: {\n rows: 1,\n fill: 'column',\n },\n });\n\n let slidesNumberEvenToRows;\n let slidesPerRow;\n let numFullColumns;\n\n const initSlides = (slidesLength) => {\n const { slidesPerView } = swiper.params;\n const { rows, fill } = swiper.params.grid;\n slidesPerRow = slidesNumberEvenToRows / rows;\n numFullColumns = Math.floor(slidesLength / rows);\n if (Math.floor(slidesLength / rows) === slidesLength / rows) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;\n }\n if (slidesPerView !== 'auto' && fill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);\n }\n };\n\n const updateSlide = (i, slide, slidesLength, getDirectionLabel) => {\n const { slidesPerGroup, spaceBetween } = swiper.params;\n const { rows, fill } = swiper.params.grid;\n // Set slides order\n let newSlideOrderIndex;\n let column;\n let row;\n if (fill === 'row' && slidesPerGroup > 1) {\n const groupIndex = Math.floor(i / (slidesPerGroup * rows));\n const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;\n const columnsInGroup =\n groupIndex === 0\n ? slidesPerGroup\n : Math.min(\n Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows),\n slidesPerGroup,\n );\n row = Math.floor(slideIndexInGroup / columnsInGroup);\n column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;\n\n newSlideOrderIndex = column + (row * slidesNumberEvenToRows) / rows;\n slide.css({\n '-webkit-order': newSlideOrderIndex,\n order: newSlideOrderIndex,\n });\n } else if (fill === 'column') {\n column = Math.floor(i / rows);\n row = i - column * rows;\n if (column > numFullColumns || (column === numFullColumns && row === rows - 1)) {\n row += 1;\n if (row >= rows) {\n row = 0;\n column += 1;\n }\n }\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide.css(\n getDirectionLabel('margin-top'),\n row !== 0 ? spaceBetween && `${spaceBetween}px` : '',\n );\n };\n\n const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => {\n const { spaceBetween, centeredSlides, roundLengths } = swiper.params;\n const { rows } = swiper.params.grid;\n swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;\n swiper.$wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + spaceBetween}px`,\n });\n if (centeredSlides) {\n snapGrid.splice(0, snapGrid.length);\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n }\n snapGrid.push(...newSlidesGrid);\n }\n };\n\n swiper.grid = {\n initSlides,\n updateSlide,\n updateWrapperSize,\n };\n}\n","import appendSlide from './methods/appendSlide.js';\nimport prependSlide from './methods/prependSlide.js';\nimport addSlide from './methods/addSlide.js';\nimport removeSlide from './methods/removeSlide.js';\nimport removeAllSlides from './methods/removeAllSlides.js';\n\nexport default function Manipulation({ swiper }) {\n Object.assign(swiper, {\n appendSlide: appendSlide.bind(swiper),\n prependSlide: prependSlide.bind(swiper),\n addSlide: addSlide.bind(swiper),\n removeSlide: removeSlide.bind(swiper),\n removeAllSlides: removeAllSlides.bind(swiper),\n });\n}\n","import effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\n\nexport default function EffectFade({ swiper, extendParams, on }) {\n extendParams({\n fadeEffect: {\n crossFade: false,\n transformEl: null,\n },\n });\n\n const setTranslate = () => {\n const { slides } = swiper;\n const params = swiper.params.fadeEffect;\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = swiper.slides.eq(i);\n const offset = $slideEl[0].swiperSlideOffset;\n let tx = -offset;\n if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n const slideOpacity = swiper.params.fadeEffect.crossFade\n ? Math.max(1 - Math.abs($slideEl[0].progress), 0)\n : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl\n .css({\n opacity: slideOpacity,\n })\n .transform(`translate3d(${tx}px, ${ty}px, 0px)`);\n }\n };\n const setTransition = (duration) => {\n const { transformEl } = swiper.params.fadeEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration);\n effectVirtualTransitionEnd({ swiper, duration, transformEl, allSlides: true });\n };\n\n effectInit({\n effect: 'fade',\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode,\n }),\n });\n}\n","import $ from '../../shared/dom.js';\nimport effectInit from '../../shared/effect-init.js';\n\nexport default function EffectCube({ swiper, extendParams, on }) {\n extendParams({\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94,\n },\n });\n\n const setTranslate = () => {\n const {\n $el,\n $wrapperEl,\n slides,\n width: swiperWidth,\n height: swiperHeight,\n rtlTranslate: rtl,\n size: swiperSize,\n browser,\n } = swiper;\n const params = swiper.params.cubeEffect;\n const isHorizontal = swiper.isHorizontal();\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let wrapperRotate = 0;\n let $cubeShadowEl;\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('
');\n $wrapperEl.append($cubeShadowEl);\n }\n $cubeShadowEl.css({ height: `${swiperWidth}px` });\n } else {\n $cubeShadowEl = $el.find('.swiper-cube-shadow');\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('
');\n $el.append($cubeShadowEl);\n }\n }\n }\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let slideIndex = i;\n if (isVirtual) {\n slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n }\n let slideAngle = slideIndex * 90;\n let round = Math.floor(slideAngle / 360);\n if (rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n let tx = 0;\n let ty = 0;\n let tz = 0;\n if (slideIndex % 4 === 0) {\n tx = -round * 4 * swiperSize;\n tz = 0;\n } else if ((slideIndex - 1) % 4 === 0) {\n tx = 0;\n tz = -round * 4 * swiperSize;\n } else if ((slideIndex - 2) % 4 === 0) {\n tx = swiperSize + round * 4 * swiperSize;\n tz = swiperSize;\n } else if ((slideIndex - 3) % 4 === 0) {\n tx = -swiperSize;\n tz = 3 * swiperSize + swiperSize * 4 * round;\n }\n if (rtl) {\n tx = -tx;\n }\n\n if (!isHorizontal) {\n ty = tx;\n tx = 0;\n }\n\n const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${\n isHorizontal ? slideAngle : 0\n }deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n if (progress <= 1 && progress > -1) {\n wrapperRotate = slideIndex * 90 + progress * 90;\n if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n }\n $slideEl.transform(transform);\n if (params.slideShadows) {\n // Set shadows\n let shadowBefore = isHorizontal\n ? $slideEl.find('.swiper-slide-shadow-left')\n : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = isHorizontal\n ? $slideEl.find('.swiper-slide-shadow-right')\n : $slideEl.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $(\n `
`,\n );\n $slideEl.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $(\n `
`,\n );\n $slideEl.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n }\n $wrapperEl.css({\n '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,\n 'transform-origin': `50% 50% -${swiperSize / 2}px`,\n });\n\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl.transform(\n `translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${\n -swiperWidth / 2\n }px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`,\n );\n } else {\n const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n const multiplier =\n 1.5 -\n (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2 +\n Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2);\n const scale1 = params.shadowScale;\n const scale2 = params.shadowScale / multiplier;\n const offset = params.shadowOffset;\n $cubeShadowEl.transform(\n `scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${\n -swiperHeight / 2 / scale2\n }px) rotateX(-90deg)`,\n );\n }\n }\n const zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0;\n $wrapperEl.transform(\n `translate3d(0px,0,${zFactor}px) rotateX(${\n swiper.isHorizontal() ? 0 : wrapperRotate\n }deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`,\n );\n };\n const setTransition = (duration) => {\n const { $el, slides } = swiper;\n slides\n .transition(duration)\n .find(\n '.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left',\n )\n .transition(duration);\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n $el.find('.swiper-cube-shadow').transition(duration);\n }\n };\n\n effectInit({\n effect: 'cube',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n resistanceRatio: 0,\n spaceBetween: 0,\n centeredSlides: false,\n virtualTranslate: true,\n }),\n });\n}\n","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\n\nexport default function EffectFlip({ swiper, extendParams, on }) {\n extendParams({\n flipEffect: {\n slideShadows: true,\n limitRotation: true,\n transformEl: null,\n },\n });\n\n const setTranslate = () => {\n const { slides, rtlTranslate: rtl } = swiper;\n const params = swiper.params.flipEffect;\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let progress = $slideEl[0].progress;\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n }\n const offset = $slideEl[0].swiperSlideOffset;\n const rotate = -180 * progress;\n let rotateY = rotate;\n let rotateX = 0;\n let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n } else if (rtl) {\n rotateY = -rotateY;\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n if (params.slideShadows) {\n // Set shadows\n let shadowBefore = swiper.isHorizontal()\n ? $slideEl.find('.swiper-slide-shadow-left')\n : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = swiper.isHorizontal()\n ? $slideEl.find('.swiper-slide-shadow-right')\n : $slideEl.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = createShadow(params, $slideEl, swiper.isHorizontal() ? 'left' : 'top');\n }\n if (shadowAfter.length === 0) {\n shadowAfter = createShadow(params, $slideEl, swiper.isHorizontal() ? 'right' : 'bottom');\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform);\n }\n };\n\n const setTransition = (duration) => {\n const { transformEl } = swiper.params.flipEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements\n .transition(duration)\n .find(\n '.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left',\n )\n .transition(duration);\n effectVirtualTransitionEnd({ swiper, duration, transformEl });\n };\n\n effectInit({\n effect: 'flip',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode,\n }),\n });\n}\n","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\n\nexport default function EffectCoverflow({ swiper, extendParams, on }) {\n extendParams({\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n scale: 1,\n modifier: 1,\n slideShadows: true,\n transformEl: null,\n },\n });\n\n const setTranslate = () => {\n const { width: swiperWidth, height: swiperHeight, slides, slidesSizesGrid } = swiper;\n const params = swiper.params.coverflowEffect;\n const isHorizontal = swiper.isHorizontal();\n const transform = swiper.translate;\n const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n const rotate = isHorizontal ? params.rotate : -params.rotate;\n const translate = params.depth;\n // Each slide offset from center\n for (let i = 0, length = slides.length; i < length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideSize = slidesSizesGrid[i];\n const slideOffset = $slideEl[0].swiperSlideOffset;\n const offsetMultiplier =\n ((center - slideOffset - slideSize / 2) / slideSize) * params.modifier;\n\n let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n let translateZ = -translate * Math.abs(offsetMultiplier);\n\n let stretch = params.stretch;\n // Allow percentage to make a relative stretch for responsive sliders\n if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n stretch = (parseFloat(params.stretch) / 100) * slideSize;\n }\n let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n\n let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);\n\n // Fix for ultra small values\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n if (Math.abs(scale) < 0.001) scale = 0;\n\n const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(slideTransform);\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n\n if (params.slideShadows) {\n // Set shadows\n let $shadowBeforeEl = isHorizontal\n ? $slideEl.find('.swiper-slide-shadow-left')\n : $slideEl.find('.swiper-slide-shadow-top');\n let $shadowAfterEl = isHorizontal\n ? $slideEl.find('.swiper-slide-shadow-right')\n : $slideEl.find('.swiper-slide-shadow-bottom');\n if ($shadowBeforeEl.length === 0) {\n $shadowBeforeEl = createShadow(params, $slideEl, isHorizontal ? 'left' : 'top');\n }\n if ($shadowAfterEl.length === 0) {\n $shadowAfterEl = createShadow(params, $slideEl, isHorizontal ? 'right' : 'bottom');\n }\n if ($shadowBeforeEl.length)\n $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if ($shadowAfterEl.length)\n $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n }\n }\n };\n const setTransition = (duration) => {\n const { transformEl } = swiper.params.coverflowEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements\n .transition(duration)\n .find(\n '.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left',\n )\n .transition(duration);\n };\n\n effectInit({\n effect: 'coverflow',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n }),\n });\n}\n","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\n\nexport default function EffectCreative({ swiper, extendParams, on }) {\n extendParams({\n creativeEffect: {\n transformEl: null,\n limitProgress: 1,\n shadowPerProgress: false,\n progressMultiplier: 1,\n perspective: true,\n prev: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1,\n },\n next: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1,\n },\n },\n });\n\n const getTranslateValue = (value) => {\n if (typeof value === 'string') return value;\n return `${value}px`;\n };\n\n const setTranslate = () => {\n const { slides } = swiper;\n const params = swiper.params.creativeEffect;\n const { progressMultiplier: multiplier } = params;\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideProgress = $slideEl[0].progress;\n const progress = Math.min(\n Math.max($slideEl[0].progress, -params.limitProgress),\n params.limitProgress,\n );\n const offset = $slideEl[0].swiperSlideOffset;\n const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];\n const r = [0, 0, 0];\n let custom = false;\n if (!swiper.isHorizontal()) {\n t[1] = t[0];\n t[0] = 0;\n }\n let data = {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n scale: 1,\n opacity: 1,\n };\n if (progress < 0) {\n data = params.next;\n custom = true;\n } else if (progress > 0) {\n data = params.prev;\n custom = true;\n }\n // set translate\n t.forEach((value, index) => {\n t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(\n progress * multiplier,\n )}))`;\n });\n // set rotates\n r.forEach((value, index) => {\n r[index] = data.rotate[index] * Math.abs(progress * multiplier);\n });\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n\n const translateString = t.join(', ');\n const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`;\n const scaleString =\n progress < 0\n ? `scale(${1 + (1 - data.scale) * progress * multiplier})`\n : `scale(${1 - (1 - data.scale) * progress * multiplier})`;\n const opacityString =\n progress < 0\n ? 1 + (1 - data.opacity) * progress * multiplier\n : 1 - (1 - data.opacity) * progress * multiplier;\n const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`;\n\n // Set shadows\n if ((custom && data.shadow) || !custom) {\n let $shadowEl = $slideEl.children('.swiper-slide-shadow');\n if ($shadowEl.length === 0 && data.shadow) {\n $shadowEl = createShadow(params, $slideEl);\n }\n if ($shadowEl.length) {\n const shadowOpacity = params.shadowPerProgress\n ? progress * (1 / params.limitProgress)\n : progress;\n $shadowEl[0].style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);\n }\n }\n\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform).css({ opacity: opacityString });\n if (data.origin) {\n $targetEl.css('transform-origin', data.origin);\n }\n }\n };\n\n const setTransition = (duration) => {\n const { transformEl } = swiper.params.creativeEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n\n effectVirtualTransitionEnd({ swiper, duration, transformEl, allSlides: true });\n };\n\n effectInit({\n effect: 'creative',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => swiper.params.creativeEffect.perspective,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode,\n }),\n });\n}\n","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\n\nexport default function EffectCards({ swiper, extendParams, on }) {\n extendParams({\n cardsEffect: {\n slideShadows: true,\n transformEl: null,\n },\n });\n\n const setTranslate = () => {\n const { slides, activeIndex } = swiper;\n const params = swiper.params.cardsEffect;\n const { startTranslate, isTouched } = swiper.touchEventsData;\n const currentTranslate = swiper.translate;\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideProgress = $slideEl[0].progress;\n const progress = Math.min(Math.max(slideProgress, -4), 4);\n let offset = $slideEl[0].swiperSlideOffset;\n if (swiper.params.centeredSlides && !swiper.params.cssMode) {\n swiper.$wrapperEl.transform(`translateX(${swiper.minTranslate()}px)`);\n }\n if (swiper.params.centeredSlides && swiper.params.cssMode) {\n offset -= slides[0].swiperSlideOffset;\n }\n let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let tY = 0;\n const tZ = -100 * Math.abs(progress);\n let scale = 1;\n let rotate = -2 * progress;\n\n let tXAdd = 8 - Math.abs(progress) * 0.75;\n\n const isSwipeToNext =\n (i === activeIndex || i === activeIndex - 1) &&\n progress > 0 &&\n progress < 1 &&\n (isTouched || swiper.params.cssMode) &&\n currentTranslate < startTranslate;\n const isSwipeToPrev =\n (i === activeIndex || i === activeIndex + 1) &&\n progress < 0 &&\n progress > -1 &&\n (isTouched || swiper.params.cssMode) &&\n currentTranslate > startTranslate;\n if (isSwipeToNext || isSwipeToPrev) {\n const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;\n rotate += -28 * progress * subProgress;\n scale += -0.5 * subProgress;\n tXAdd += 96 * subProgress;\n tY = `${-25 * subProgress * Math.abs(progress)}%`;\n }\n\n if (progress < 0) {\n // next\n tX = `calc(${tX}px + (${tXAdd * Math.abs(progress)}%))`;\n } else if (progress > 0) {\n // prev\n tX = `calc(${tX}px + (-${tXAdd * Math.abs(progress)}%))`;\n } else {\n tX = `${tX}px`;\n }\n if (!swiper.isHorizontal()) {\n const prevY = tY;\n tY = tX;\n tX = prevY;\n }\n\n const scaleString =\n progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;\n const transform = `\n translate3d(${tX}, ${tY}, ${tZ}px)\n rotateZ(${rotate}deg)\n scale(${scaleString})\n `;\n\n if (params.slideShadows) {\n // Set shadows\n let $shadowEl = $slideEl.find('.swiper-slide-shadow');\n if ($shadowEl.length === 0) {\n $shadowEl = createShadow(params, $slideEl);\n }\n if ($shadowEl.length)\n $shadowEl[0].style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform);\n }\n };\n\n const setTransition = (duration) => {\n const { transformEl } = swiper.params.cardsEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n\n effectVirtualTransitionEnd({ swiper, duration, transformEl });\n };\n\n effectInit({\n effect: 'cards',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode,\n }),\n });\n}\n","import * as allExports from './index.js';\nimport { mixin } from './index.js';\n\n// Add all of the Underscore functions to the wrapper object.\nvar _ = mixin(allExports);\n// Legacy Node.js API\n_._ = _;\n// Export the Underscore API.\nexport default _;\n","'use strict';\n\n// TODO: https://columbia.atlassian.net/browse/GSD-16533 Update URL functions to use the JS URL API\n/**\n * Append a parameter to a url\n * @param {string} url - a url\n * @param {string} name - key\n * @param {string} value - value\n * @return {string} url with param appended\n */\nfunction appendParamToURL(url, name, value) {\n var c = '?';\n if (url.indexOf(c) !== -1) {\n c = '&';\n }\n return url + c + name + '=' + encodeURIComponent(value);\n}\n\n/**\n * Helper function for getParamsFromURL. Split a url string into key/value pairs.\n * @param {string} str - url parameter string\n * @return {Object} object with params split into key/value pairs\n */\nfunction keyValueArray(str) {\n var kvp = str.split('&');\n var x;\n var k;\n var v;\n var output = {};\n\n for (var i = kvp.length - 1; i >= 0; i--) {\n if (kvp[i].length) { // No empty strings...\n x = kvp[i].split('=');\n k = x[0];\n v = '';\n if (x.length > 1) {\n v = x[1];\n }\n output[k] = v;\n }\n }\n\n return output;\n}\n\n/**\n * Split a url string into key/value pairs.\n * @param {string} url - url parameter string\n * @return {Object} object with params split into key/value pairs\n */\nfunction getParamsFromURL(url) {\n var arr = url.split('?');\n var search = '';\n var searchHash = '';\n var postHash = false;\n\n if (arr.length > 1) {\n var arrHash = arr[1].split('#');\n search = arrHash[0];\n\n if (arrHash.length > 1) {\n postHash = true;\n searchHash = arrHash[1];\n }\n }\n\n var output = {};\n if (search.length) {\n output = keyValueArray(search);\n }\n if (postHash) {\n if (searchHash.length) {\n var output2 = keyValueArray(searchHash);\n Object.keys(output2).forEach(function (prop) {\n output[prop] = output2[prop]; // Merge them...\n });\n }\n }\n\n return output;\n}\n\n/**\n * Update an existing url param\n * https://stackoverflow.com/questions/1090948/change-url-parameters\n * @param {string} url - Url to be updated\n * @param {string} param - param to be updated\n * @param {string} paramVal - new parameter value\n * @returns {string} - updated url\n */\nfunction updateURLParam(url, param, paramVal) {\n var newAdditionalURL = '';\n var tempArray = url.split('?');\n var baseURL = tempArray[0];\n var additionalURL = tempArray[1];\n var temp = '';\n if (additionalURL) {\n tempArray = additionalURL.split('&');\n for (var i = 0; i < tempArray.length; i++) {\n if (tempArray[i].split('=')[0] !== param) {\n newAdditionalURL += temp + tempArray[i];\n temp = '&';\n }\n }\n }\n\n var rowsText = temp + '' + param + '=' + paramVal;\n return baseURL + '?' + newAdditionalURL + rowsText;\n}\n\n/**\n * Turn the URL query string into a JSON object to make it easier to add/update/delete key/value pairs.\n * @param {string} url the URL string from which to get the querystring. Null or empty string to use the location.href.\n * @returns {obejct} the query string as an object.\n */\nfunction queryStringToObject(url) {\n var search;\n if (!url) {\n // get the query string from window.location.search\n search = location.search.substring(1); // exclude the leading ?\n } else {\n // find the query string in the given url\n var startIndex = url.indexOf('?') + 1;\n var endIndex = url.indexOf('#');\n endIndex = endIndex >= startIndex ? endIndex : url.length;\n // examples:\n // 'key=val#hash', '/?key=val#hash' => 'key=val'\n // '?key#hash' => 'key'\n search = url.substring(startIndex, endIndex);\n if (startIndex === 0 && search.indexOf('=') === -1) {\n // this string doesn't look like a query string (no '?' and no '=')\n // examples: 'key#hash', '/#hash'\n search = '';\n }\n }\n\n var result = {};\n if (search) {\n var pairs = search.split('&');\n pairs.forEach(function (pair) {\n var nameVal = pair.split('=');\n result[nameVal[0]] = decodeURIComponent(nameVal[1] || '');\n });\n }\n\n return JSON.parse(JSON.stringify(result));\n}\n\n/**\n * Convert an object into a serialized string; the opposite of queryStringToObject().\n * @param {Object} obj The object to be serialized into a string\n * @param {string} urlString An optional url into which to insert the querystring. Any existing query string will be replaced.\n * @returns {string} The resulting query or URL string.\n */\nfunction objectToQueryString(obj, urlString) {\n var url = urlString || '';\n var path = '';\n var hash = '';\n if (url) {\n var qsIndex = url.indexOf('?');\n var hashIndex = url.indexOf('#');\n var index;\n if (hashIndex > -1) {\n index = hashIndex;\n hash = url.substring(hashIndex);\n }\n if (qsIndex > -1) {\n index = qsIndex;\n }\n path = url.substring(0, index); // if index is undefined, path is the entire string.\n }\n return path + '?' + $.param(obj) + hash;\n}\n\n/**\n * Update a URL with a key/value pair. This will insert or update a pair.\n * @param {string} url The url to be updated.\n * @param {string} name The key name to use in the query string.\n * @param {string} val The value of the key to be set.\n * @returns {string} The updated URL.\n */\nfunction setUrlKeyValue(url, name, val) {\n var qs = queryStringToObject(url);\n qs[name] = encodeURIComponent(val);\n return objectToQueryString(qs, url);\n}\n\n/**\n * Update a URL with multiple key/value pairs. This will insert new or update existing keys.\n * @param {string} url The url to be updated.\n * @param {Object} obj an object of name/value pairs to be inserted/updated in the url query string.\n * @returns {string} The updated URL.\n */\nfunction setUrlData(url, obj) {\n var qs = queryStringToObject(url);\n var mergedQs = $.extend({}, qs, obj);\n return objectToQueryString(mergedQs, url);\n}\n\n/**\n * DecodeURIComponent cannot be used directly to parse query parameters from a URL. It needs a bit of preparation.\n * reference: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent\n * @param {string} val The query param value to be decoded.\n * @returns {string} The decoded query param value.\n */\nfunction decodeQueryParam(val) {\n return decodeURIComponent(val.replace(/\\+/g, ' '));\n}\n\n/**\n * Remove the queryparam from the url\n * @param {string} queryparam queryparam to be removed\n * @param {string} urlString url to be manipulated\n * @returns {URL} new url without provided queryparam\n */\nfunction removeQueryParam(queryparam, urlString) {\n var url = new URL(urlString);\n url.searchParams.delete(queryparam);\n return url;\n}\n\n/**\n * Remove the queryparam from the url, and replace the state\n * @param {string} queryparam queryparam to be removed\n */\nfunction removeQueryParamFromCurrentUrl(queryparam) {\n var url = removeQueryParam(queryparam, window.location.href);\n history.replaceState(null, '', url);\n}\n\n/**\n * Returns an array with values that exist in both arrays\n * @param {array} a1 - Array\n * @param {array} a2 - Array\n * @return {array} - Values that appear in both arrays\n */\nfunction arrayIntersection(a1, a2) {\n var intersect = $.map(a1,\n function (v) {\n return $.inArray(v, a2) < 0 ? null : v;\n }\n );\n return intersect;\n}\n\n/**\n * Creates and returns the markup required to display a modal.\n * The calling script should then use the bootstrap $.modal() method to display the modal.\n * Example 1:\n * var modalMarkup = createModalMarkup('

Hello World

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