{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/util.js","webpack:///../app_common/cartridges/app_common/cartridge/client/default/js/components/security.js","webpack:///./cartridges/app_custom/cartridge/client/default/js/productDetail.js","webpack:///./cartridges/app_custom/cartridge/client/default/js/product/details.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/product/detail.js","webpack:///./cartridges/app_custom/cartridge/client/default/js/co/client/coClientModalUtils.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/components/focus.js","webpack:///./cartridges/app_custom/cartridge/client/default/js/product/wishlist.js","webpack:///../plugin_wishlists/cartridges/plugin_wishlists/cartridge/client/default/js/product/wishlist.js","webpack:///../sswd_base/cartridges/sswd_base/cartridge/client/default/js/util.js","webpack:///./cartridges/app_custom/cartridge/client/default/js/co/coBuyNow.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/product/base.js","webpack:///../sswd_base/cartridges/sswd_base/cartridge/client/default/js/components/XPostForm.js","webpack:///../app_common/cartridges/app_common/cartridge/client/default/js/components/updateDom.js","webpack:///./cartridges/app_custom/cartridge/client/default/js/components/buyNow.js","webpack:///./cartridges/app_custom/cartridge/client/default/js/thirdParty/swiper.js","webpack:///./node_modules/swiper/swiper-bundle.js","webpack:///../sswd_base/cartridges/sswd_base/cartridge/client/default/js/util/XStringUtils.js","webpack:///./cartridges/app_custom/cartridge/client/default/js/common/cart.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/components/scrollAnimate.js","webpack:///../app_common/cartridges/app_common/cartridge/client/default/js/components/clicklock.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","include","keys","forEach","getCsrfObject","$","data","processInclude","document","ready","base","detail","encodeHtml","Swiper","arySpinnerCtrl","spinnerCal","target","num","Number","val","createErrorNotification","message","errorHtml","append","setTimeout","remove","swiperProductsThumbnail","breakpoints","0","slidesPerView","768","1200","allowTouchMove","loop","speed","navigation","nextEl","prevEl","thumbs","swiper","exportDetails","extend","quantityChange","on","e","this","timeStamp","type","setInterval","clearInterval","quantity","parseInt","isNaN","addToCart","clickAssortedProducts","event","link","relatedTarget","modal","find","text","attr","show","hide","html","css","dateTimePickerApi","stopImmediatePropagation","url","pid","getPidValue","body","hasClass","addClass","spinner","start","ajax","method","done","success","apiData","shippingDateList","shipping_date_list","sd","ed","checkMap","Map","length","shipping_rate","set","shipping_date","datepicker","language","format","startDate","endDate","disabled","autoclose","clearBtn","maxViewMode","beforeShowDay","date","param","dateStr","dt","getFullYear","getMonth","slice","getDate","rateNum","classes","dateTimePickerFunc","redirectUrl","window","location","href","errorMessage","fail","responseJSON","always","stop","moveProductPurchaseSp","$bundleFooterRow","closest","$productItemContainer","insertAfter","methods","updateAddToCartEnableDisableOtherElements","enableOrDisable","availability","updateAttributesAndDetails","$productContainer","id","empty","attributesHtml","shortDescription","removeClass","longDescription","showSpinner","updateAttribute","response","eq","container","product","updateAddToCart","readyToOrder","available","enable","toArray","every","item","updateAvailability","allAvailable","allReady","resources","info_selectforstock","sizeChart","preventDefault","$prodSizeChart","is","dataType","content","toggleClass","$sizeChart","has","copyProductLink","$temp","select","execCommand","focusChooseBonusProductModal","CONFIRMATION","DEFAULT_ID","BUTTON","OK","CANCEL","RESULT","confirm","modalId","Promise","resolve","reject","$modal","setTabNextFocus","focusParams","keyCode","firstFocusableEl","containerSelector","firstElementSelector","lastFocusableEl","lastElementSelector","nextToLastElementSelector","linkElements","shiftKey","focus","wishlist","displayMessage","$button","msg","csrfError","$messages","$alert","removeAttr","exportWishlist","addToWishlist","async","optionId","optionVal","csrfObject","csrfTokenName","tokenName","csrfTokenValue","token","postdata","error","err","button","status","XStringUtils","postForm","CO_BUY_NOW_RESPONSE_RESULT","CO_BUY_NOW_ACTION_RESULT","CO_BUY_NOW_MODAL","locateModal","$body","prop","parent","detach","appendTo","execBuyNow","buyNowObj","coBuyNowFormData","FormData","originUrl","productId","forceChangeUses","coBuyNowActionUrl","actionResult","actionUrl","formData","responseResult","result","$coBuyNowErrorMessage","doCoBuyNowServiceAction","reBuyNowObj","assign","topPageUrl","focusHelper","$el","getQuantitySelector","quantitySelected","quantitySelectedModal","quantitySelectedPDP","undefined","getQuantitySelected","handleVariantResponse","isVaraint","isChoiceOfBonusProducts","parents","variationAttributes","attrs","msgs","attrsWithSwatches","indexOf","values","attrValue","$attrValue","$swatchButton","selected","siblings","assistiveSelectedText","selectable","processSwatchValues","$attr","resetUrl","processNonSwatchValues","updateAttrs","productType","imgs","carousel","carouselId","alt","index","title","first","createCarousel","images","large","replaceWith","price","promotionsHtml","availabilityValue","availabilityMessages","messages","trigger","attributes","attributeGroup","ID","attribute","label","getAttributesHtml","attributeSelect","selectedValueUrl","optionsHtml","updateOptions","quantities","map","join","updateQuantities","parseHtml","$html","parseHTML","footer","children","chooseBonusProducts","bonusUrl","bonusChoiceRuleBased","showProductsUrlRuleBased","showProductsUrlListBased","htmlString","maxBonusItems","uuid","pliUUID","addToCartUrl","pageSize","labels","selectprods","parsedHtml","renderedTemplate","enterDialogMessage","closeButtonText","getOptions","options","$elOption","urlValue","selectedValueId","JSON","stringify","miniCartReportingUrl","editBonusProducts","onClosingChooseBonusProductModal","trapChooseBonusProductModalFocus","colorAttribute","selectAttribute","currentTarget","pidsObj","setPids","each","push","qty","childProducts","form","messageType","newBonusDiscountLineItem","handlePostCartAdd","reportingURL","selectBonusProduct","$choiceOfBonusProduct","maxPids","submittedQty","totalQty","optionID","valueId","selectedBonusProductHtml","removeBonusProduct","$selected","count","enableBonusProductSelection","showMoreBonusProducts","addBonusProductsToCart","$readyToOrderBonusProducts","queryString","pidsObject","bonusProducts","qtyOption","option","msgSuccess","reload","isMultiPart","urlSearchParams","URLSearchParams","entry","entries","fetch","headers","Accept","credentials","json","ok","Error","refreshArea","$results","selector","$updates","updateDom","getBuyNowObj","pathname","search","isObject$1","obj","constructor","extend$1","src","ssrDocument","activeElement","nodeName","querySelector","querySelectorAll","getElementById","createEvent","createElement","childNodes","style","getElementsByTagName","createElementNS","importNode","hash","host","hostname","origin","protocol","getDocument","doc","ssrWindow","navigator","userAgent","history","CustomEvent","getComputedStyle","getPropertyValue","screen","matchMedia","requestAnimationFrame","callback","clearTimeout","getWindow","win","Dom7","Array","items","super","proto","__proto__","makeReactive","arrayFlat","arr","res","el","isArray","arrayFilter","filter","context","trim","toCreate","tempParent","innerHTML","a","qsa","nodeType","uniqueArray","arrayUnique","fn","Methods","_len","arguments","_key","classNames","split","classList","add","_len2","_key2","_len4","_key4","className","contains","_len3","_key3","toggle","getAttribute","setAttribute","attrName","removeAttribute","transform","transition","duration","transitionDuration","_len5","args","_key5","eventType","targetSelector","listener","capture","handleLiveEvent","eventData","dom7EventData","unshift","apply","k","handleEvent","events","j","dom7LiveListeners","proxyListener","addEventListener","dom7Listeners","off","_len6","_key6","handlers","handler","dom7proxy","removeEventListener","splice","_len9","_key9","evt","bubbles","cancelable","dataIndex","dispatchEvent","transitionEnd","dom","fireCallBack","outerWidth","includeMargins","styles","offsetWidth","parseFloat","outerHeight","offsetHeight","offset","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","top","left","props","textContent","compareWith","matches","webkitMatchesSelector","msMatchesSelector","child","previousSibling","returnIndex","newChild","tempDiv","firstChild","appendChild","prepend","insertBefore","next","nextElementSibling","nextAll","nextEls","prev","previousElementSibling","prevAll","prevEls","parentNode","foundElements","found","removeChild","nextTick","delay","now","Date","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","currentStyle","getComputedStyle$1","WebKitCSSMatrix","webkitTransform","replace","MozTransform","OTransform","MsTransform","msTransform","toString","m41","m42","isObject","isNode","node","HTMLElement","to","noExtend","nextSource","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","__swiper__","setCSSProperty","varName","varValue","setProperty","animateCSSModeScroll","_ref","targetPosition","side","startPosition","translate","time","startTime","params","wrapperEl","scrollSnapType","cancelAnimationFrame","cssModeFrameID","dir","isOutOfBound","current","animate","getTime","progress","Math","max","min","easeProgress","cos","PI","currentPosition","scrollTo","overflow","support","deviceCached","browser","getSupport","smoothScroll","documentElement","touch","DocumentTouch","passiveListener","supportsPassive","opts","gestures","calcSupport","getDevice","overrides","_temp","platform","ua","device","ios","android","screenWidth","width","screenHeight","height","match","ipad","ipod","iphone","windows","macos","os","calcDevice","getBrowser","isSafari","toLowerCase","isWebView","test","calcBrowser","methodName","writable","eventsEmitter","priority","self","eventsListeners","destroyed","onceHandler","__emitterProxy","eventsAnyListeners","eventHandler","transitionEmit","runCallbacks","direction","step","activeIndex","previousIndex","emit","onTouchStart","touchEventsData","touches","enabled","animating","preventInteractionOnTransition","cssMode","loopFix","originalEvent","$targetEl","touchEventsTarget","isTouchEvent","which","isTouched","isMoved","swipingClassHasValue","noSwipingClass","eventPath","composedPath","path","shadowRoot","noSwipingSelector","isTargetShadow","noSwiping","__closestFrom","assignedSlot","getRootNode","closestElement","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","innerWidth","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","updateSize","swipeDirection","threshold","allowThresholdMove","focusableElements","blur","shouldPreventDefault","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","freeMode","onTouchMove","rtlTranslate","rtl","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","isVertical","maxTranslate","minTranslate","diffX","diffY","sqrt","touchAngle","isHorizontal","atan2","abs","touchMoveStopPropagation","nested","stopPropagation","startTranslate","setTransition","$wrapperEl","allowMomentumBounce","grabCursor","allowSlideNext","allowSlidePrev","setGrabCursor","diff","touchRatio","currentTranslate","disableParentSwiper","resistanceRatio","resistance","followFinger","watchSlidesProgress","updateActiveIndex","updateSlidesClasses","updateProgress","setTranslate","onTouchEnd","slidesGrid","touchEndTime","timeDiff","pathTree","updateClickedSlide","lastClickTime","currentPos","stopIndex","groupSize","slidesSizesGrid","slidesPerGroupSkip","slidesPerGroup","increment","rewindFirstIndex","rewindLastIndex","rewind","isBeginning","virtual","slides","isEnd","ratio","longSwipesMs","longSwipes","slideTo","longSwipesRatio","shortSwipes","onResize","setBreakpoint","snapGrid","updateSlides","centeredSlides","autoplay","running","paused","run","watchOverflow","checkOverflow","onClick","preventClicks","preventClicksPropagation","onScroll","newProgress","previousTranslate","translatesDiff","dummyEventAttached","dummyEventListener","touchEvents","domMethod","swiperMethod","passiveListeners","passive","move","end","cancel","updateOnWindowResize","isGridEnabled","grid","rows","defaults","init","initialSlide","resizeObserver","createElements","autoHeight","setWrapperSize","virtualTranslate","effect","breakpointsBase","spaceBetween","slidesPerGroupAuto","centeredSlidesBounds","slidesOffsetBefore","slidesOffsetAfter","normalizeSlideIndex","centerInsufficientSlides","roundLengths","simulateTouch","uniqueNavElements","slideToClickedSlide","preloadImages","updateOnImagesReady","loopAdditionalSlides","loopedSlides","loopedSlidesLimit","loopFillGroupWithBlank","loopPreventsSlide","maxBackfaceHiddenSlides","containerModifierClass","slideClass","slideBlankClass","slideActiveClass","slideDuplicateActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slideDuplicateNextClass","slidePrevClass","slideDuplicatePrevClass","wrapperClass","runCallbacksOnInit","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","update","clientWidth","clientHeight","size","getDirectionLabel","getDirectionPropertyValue","swiperSize","wrongRTL","isVirtual","previousSlidesLength","slidesLength","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","slidePosition","prevSlideSize","virtualSize","marginLeft","marginBottom","marginTop","marginRight","gridEnabled","slideSize","initSlides","shouldResetSlideSize","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","paddingLeft","paddingRight","boxSizing","floor","swiperSlideSize","updateWrapperSize","newSlidesGrid","slidesGridItem","_","slideIndex","allSlidesSize","slideSizeValue","maxSnap","snap","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","v","updateSlidesOffset","backFaceHiddenClass","hasClassBackfaceClassAdded","updateAutoHeight","activeSlides","newHeight","getSlideByIndex","visibleSlides","ceil","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","offsetCenter","visibleSlidesIndexes","slideOffset","slideProgress","originalSlideProgress","slideBefore","slideAfter","originalProgress","multiplier","wasBeginning","wasEnd","realIndex","activeSlide","nextSlide","prevSlide","emitSlidesClasses","newActiveIndex","previousRealIndex","previousSnapIndex","skip","initialized","slideFound","clickedSlide","clickedIndex","byController","x","y","translateTo","translateBounds","internal","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","transitionStart","initial","indexAsNumber","isFinite","normalizedTranslate","normalizedGrid","normalizedGridNext","_immediateVirtual","_swiperImmediateVirtual","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","slideNext","perGroup","slidesPerViewDynamic","_clientLeft","slidePrev","normalize","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","lastIndex","slideReset","slideToClosest","currentSnap","slideToIndex","loopCreate","$selector","blankSlidesNum","blankNode","prependSlides","appendSlides","cloneNode","loopDestroy","moving","isLocked","cursor","unsetGrabCursor","attachEvents","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","fill","wasModuleEnabled","isModuleEnabled","disable","directionChanged","needsReLoop","changeDirection","isEnabled","containerEl","currentHeight","innerHeight","points","point","minRatio","substr","sort","b","wasLocked","lastSlideIndex","lastSlideRightEdge","addClasses","suffixes","prefix","resultClasses","prepareClasses","removeClasses","loadImage","imageEl","srcset","sizes","checkForComplete","image","onReady","complete","Image","onload","onerror","imagesLoaded","imagesToLoad","currentSrc","extendedDefaults","swipers","newParams","__modules__","mod","extendParams","once","swiperParams","passedParams","eventName","onAny","velocity","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","velocities","cls","slideEl","updates","getSlideClasses","view","exact","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","mounted","getWrapperSelector","getWrapper","wrapper","mount","deleteInstance","cleanStyles","deleteProps","newDefaults","installModule","createElementIfNotDefined","checkProps","element","classesToSelector","appendSlide","observer","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","effectInit","overwriteParams","perspective","recreateShadows","getEffectParams","requireUpdateOnVirtual","overwriteParamsResult","_s","slideShadows","effectTarget","effectParams","$slideEl","transformEl","effectVirtualTransitionEnd","allSlides","$transitionEndTarget","eventTriggered","triggerEvents","createShadow","shadowClass","$shadowContainer","$shadowEl","prototypeGroup","protoMethod","use","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","_ref2","contentBoxSize","contentRect","inlineSize","blockSize","observe","unobserve","observers","attach","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","cssModeTimeout","renderSlide","cache","force","addSlidesBefore","addSlidesAfter","from","previousFrom","previousTo","previousSlidesGrid","previousOffset","offsetProp","slidesAfter","slidesBefore","onRendered","lazy","load","renderExternal","slidesToRender","renderExternalUpdate","prependIndexes","appendIndexes","numberOfNewSlides","newCache","cachedIndex","$cachedEl","cachedElIndex","handle","kc","charCode","pageUpDown","keyboard","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","altKey","ctrlKey","metaKey","onlyInViewport","inView","swiperWidth","swiperHeight","windowWidth","windowHeight","swiperOffset","swiperCoord","returnValue","timeout","mousewheel","releaseOnEdges","invert","forceToAxis","sensitivity","eventsTarget","thresholdDelta","thresholdTime","lastEventBeforeSnap","lastScrollTime","recentWheelEvents","handleMouseEnter","mouseEntered","handleMouseLeave","animateSlider","newEvent","delta","raw","rtlFactor","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","positions","sign","ignoreWheelEvents","position","sticky","shift","prevEvent","firstEvent","snapToThreshold","autoplayDisableOnInteraction","releaseScroll","getEl","toggleEl","disabledClass","tagName","lockClass","$nextEl","$prevEl","onPrevClick","onNextClick","destroy","hideOnClick","hiddenClass","navigationDisabledClass","targetEl","pagination","clickable","isHidden","pfx","bulletSize","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","paginationDisabledClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","$bulletEl","total","paginationType","firstIndex","midIndex","suffix","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","progressbarDirection","scale","scaleX","scaleY","render","paginationHTML","numberOfBullets","dragStartPos","dragSize","trackSize","divider","dragTimeout","scrollbar","$dragEl","newSize","newPos","opacity","display","getPointerPosition","clientX","clientY","setDragPosition","positionRatio","onDragStart","onDragMove","onDragEnd","snapOnRelease","activeListener","eventMethod","$swiperEl","dragClass","dragEl","draggable","scrollbarDisabledClass","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","offsetX","offsetY","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","binarySearch","guess","array","i1","i3","interpolate","removeSpline","controller","control","spline","inverse","by","_t","controlled","controlledTranslate","setControlledTranslate","getInterpolateFunction","setControlledTransition","a11y","notificationClass","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","slideLabelMessage","containerMessage","containerRoleDescriptionMessage","itemRoleDescriptionMessage","slideRole","clicked","liveRegion","notify","notification","makeElFocusable","makeElNotFocusable","addElRole","role","addElRoleDescription","description","addElLabel","disableEl","enableEl","onEnterOrSpaceKey","click","hasPagination","hasClickablePagination","initNavEl","wrapperId","controls","addElControls","handlePointerDown","handlePointerUp","handleFocus","includes","isActive","isVisible","sourceCapabilities","firesTouchEvents","$containerEl","repeat","round","random","live","addElLive","updateNavigation","bulletEl","updatePagination","root","replaceState","keepQuery","paths","slugify","getPathValues","urlOverride","URL","pathArray","part","setHistory","currentState","state","pushState","scrollToSlide","setHistoryPopState","hashNavigation","watchState","onHashChange","newHash","setHash","$activeSlideEl","autoplayResult","reverseDirection","stopOnLastSlide","pause","waitForTransition","onVisibilityChange","visibilityState","onMouseEnter","disableOnInteraction","onMouseLeave","pauseOnMouseEnter","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","swiperCreated","onThumbClick","thumbsSwiper","currentIndex","thumbsParams","SwiperClass","thumbsSwiperParams","thumbsToActivate","thumbActiveClass","useOffset","newThumbsIndex","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","momentum","momentumRatio","momentumBounce","momentumBounceRatio","momentumVelocityRatio","minimumVelocity","lastMoveEvent","pop","velocityEvent","distance","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","needsLoopFix","moveDistance","currentSlideSize","slidesNumberEvenToRows","slidesPerRow","numFullColumns","newSlideOrderIndex","column","row","groupIndex","slideIndexInGroup","columnsInGroup","order","fadeEffect","crossFade","tx","ty","slideOpacity","cubeEffect","shadow","shadowOffset","shadowScale","createSlideShadows","shadowBefore","shadowAfter","$cubeShadowEl","wrapperRotate","slideAngle","tz","shadowAngle","sin","scale1","scale2","zFactor","flipEffect","limitRotation","rotateY","rotateX","zIndex","coverflowEffect","rotate","stretch","depth","modifier","center","centerOffset","offsetMultiplier","translateZ","slideTransform","$shadowBeforeEl","$shadowAfterEl","creativeEffect","limitProgress","shadowPerProgress","progressMultiplier","getTranslateValue","isCenteredSlides","margin","custom","translateString","rotateString","scaleString","opacityString","shadowOpacity","cardsEffect","perSlideRotate","perSlideOffset","tX","tY","tZ","tXAdd","isSwipeToNext","isSwipeToPrev","subProgress","prevY","factory","str","convertToHyphen","convertToHalfWidthDigit","String","fromCharCode","charCodeAt","convertToPSM","convertToFullWidth","katakanaMap","�カ��","�キ��","�ク��","�ケ��","�コ��","�サ��","�シ��","�ス��","�セ��","�ソ��","�€��","��セ�","�ゑセ�","��セ�","��セ�","�奇セ�","�具セ�","�鯉セ�","�搾セ�","�趣セ�","�奇セ�","�具セ�","�鯉セ�","�搾セ�","�趣セ�","�ウ��","�懶セ�","�ヲ��","�ア","�イ","�ウ","�エ","�オ","�カ","�キ","�ク","�ケ","�コ","�サ","�シ","�ス","�セ","�ソ","�€","��","��","��","��","��","��","��","��","��","��","��","��","��","��","��","��","��","��","��","��","��","��","��","��","��","��","��","��","�ヲ","��","�ァ","�ィ","�ゥ","�ェ","�ォ","�ッ","�ャ","�ュ","�ョ","�ー","��","��","katakanaRegExp","RegExp","char","convertFullWidthKatakanaToHalfWidthKatakana","繧ャ","繧ョ","繧ー","繧イ","繧エ","繧カ","繧ク","繧コ","繧シ","繧セ","繝€","繝�","繝�","繝�","繝�","繝�","繝�","繝�","繝�","繝�","繝�","繝�","繝�","繝�","繝�","繝エ","繝キ","繝コ","繧「","繧、","繧ヲ","繧ィ","繧ェ","繧ォ","繧ュ","繧ッ","繧ア","繧ウ","繧オ","繧キ","繧ケ","繧サ","繧ス","繧ソ","繝�","繝�","繝�","繝�","繝�","繝�","繝�","繝�","繝�","繝�","繝�","繝�","繝�","繝�","繝�","繝�","繝�","繝。","繝「","繝、","繝ヲ","繝ィ","繝ゥ","繝ェ","繝ォ","繝ャ","繝ュ","繝ッ","繝イ","繝ウ","繧。","繧」","繧・","繧ァ","繧ゥ","繝�","繝」","繝・","繝ァ","繝シ","clicklock","getAddrToCartMessages","clickAddFalseToMessageAlert","$addrToCartMessages","messageHtmlStr","$messageHtml","waitForScroll","promise","doAddToCart","$addCartButton","quantityElementDesktop","quantityElementMobile","postDataObj","lock","clickAddToMessageAlert","refreshUrl","refreshProductView","unlock","handleBuyNow","sswd","locked"],"mappings":"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","file":"default\\js\\productDetail.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 = 150);\n","'use strict';\n\nmodule.exports = function (include) {\n    if (typeof include === 'function') {\n        include();\n    } else if (typeof include === 'object') {\n        Object.keys(include).forEach(function (key) {\n            if (typeof include[key] === 'function') {\n                include[key]();\n            }\n        });\n    }\n};\n","'use strict';\n\n/**\n * 繧サ繧ュ繝・繝ェ繝�ぅ繝シ縺ォ髢「縺吶k蜃ヲ逅�↓蠢�ヲ√↑諠��ア繧呈�シ邏阪☆繧九◆繧√�繧ソ繧ー繧貞叙蠕励@縺ヲ霑斐☆縲�\n * 縲慶omponents/security.isml縲阪′繧、繝ウ繧ッ繝ォ繝シ繝峨&繧後※縺�k縺薙→繧貞燕謠舌→縺吶k縲�\n *\n * @returns {JQuery<Element>} id縺圭"secInfo\"縺ョspan繧ソ繧ー繧定。ィ縺冕Query繧ェ繝悶ず繧ァ繧ッ繝�\n */\nfunction getSecInfo() {\n    const $secInfo = $('#secInfo');\n    return $secInfo;\n}\n\n/**\n * CSRF繝医�繧ッ繝ウ繧貞性繧€繧ェ繝悶ず繧ァ繧ッ繝医r霑斐☆縲�\n *\n * @returns {object} CSRF繝医�繧ッ繝ウ繧貞性繧€繧ェ繝悶ず繧ァ繧ッ繝�\n * - tokenName: 'CSRF繝医�繧ッ繝ウ蜷�'\n * - token: 'CSRF繝医�繧ッ繝ウ蛟、'\n * 萓�:\n * ```js\n * {\n *     tokenName: 'csrf_token',\n *     token: 'lSb3zUKYcM2Q3TXQiqrtvQvEENcg7eJ5lgqUMw-2k5ZiQLpFENIUsd4LUAWEKF7BboUkovZ8F-1tBBgZNqYG6ulLL7Epkta2GRc_9IpCvRaS_soWu0TRWMm83-hkOSjq5_wdtQ5zifwS_qaYRtE9A9YfmnWmmz_7gx7U21PWEX4TV3Sme44='\n * }\n * ```\n */\nfunction getCsrfObject() {\n    const $secInfo = getSecInfo();\n    const csrf = $secInfo.data('csrf');\n    return csrf;\n}\n\nmodule.exports = {\n    getCsrfObject,\n};\n","'use strict';\n\nconst processInclude = require('base/util');\n\n$(document).ready(function () {\n    processInclude(require('./product/details'));\n    processInclude(require('./common/cart'));\n    processInclude(require('./product/wishlist'));\n});\n","'use strict';\n\nconst base = require('base/product/base');\nconst detail = require('base/product/detail');\nconst {encodeHtml} = require('sswd_base/util/XStringUtils');\nconst Swiper = require('../thirdParty/swiper');\n\n/**\n * 螟牙虚繧ケ繝斐�繝噂n *\n * @protected\n * @constant {number}\n */\nconst SPIN_SPEED = 20;\n\n/**\n * 繧ケ繝斐リ繝シ繧ウ繝ウ繝医Ο繝シ繝ォ逕ィ驟榊�\n * 繧ー繝ュ繝シ繝舌Ν縺ォ菴ソ逕ィ縺吶k縺溘a螳夂セゥ\n */\nlet arySpinnerCtrl = [];\n\n/**\n * 螟牙虚險育ョ励☆繧矩未謨ー縲�\n * 繧ケ繝斐リ繝シ蛟、縺ョ譛€螟ァ蛟、繧�怙蟆丞€、繧定カ�∴縺ェ縺�h縺�↓蛻カ蠕。\n *\n */\nfunction spinnerCal() {\n    let target = $(arySpinnerCtrl['.target']);\n    // 迴セ蝨ィ縺ョ蛟、繧貞叙蠕予n    let num = Number(target.val());\n    // 謨ー驥上r蜉�邂予n    num += arySpinnerCtrl['.cal'];\n    if (num > Number(target.data('max'))) {\n        // 譛€螟ァ蛟、繧定カ�∴繧句�エ蜷医€∵怙螟ァ蛟、繧偵そ繝�ヨ\n        target.val(Number(target.data('max')));\n    } else if (Number(target.data('min')) > num) {\n        // 譛€螟ァ蛟、繧定カ�∴繧句�エ蜷医€∵怙螟ァ蛟、繧偵そ繝�ヨ\n        target.val(Number(target.data('min')));\n    } else {\n        target.val(num);\n    }\n}\n\n/**\n * 謨ー驥丞、画峩繧ケ繝斐リ繝シ\n */\nfunction quantityChange() {\n    // 謨ー驥丞、画峩繝懊ち繝ウ髟キ謚シ縺玲凾\n    $('.btnspinner').on('touchstart mousedown click', function (e) {\n        if (arySpinnerCtrl['.interval']) return false;\n        // 蜈・蜉帙ヵ繧」繝シ繝ォ繝峨r遉コ縺吶が繝悶ず繧ァ繧ッ繝医r蜿門セ予n        let target = $(this).data('target');\n        arySpinnerCtrl['.target'] = target;\n        arySpinnerCtrl['.timestamp'] = e.timeStamp;\n        // 謨ー驥上�蠅玲ク帛€、繧呈�シ邏構n        arySpinnerCtrl['.cal'] = Number($(this).data('cal'));\n\n        // 繧ッ繝ェ繝�け縺ッ蜊倅ク€縺ョ蜃ヲ逅�↓逡吶a繧欺n        if (e.type === 'click') {\n            spinnerCal(arySpinnerCtrl);\n            arySpinnerCtrl = [];\n            return false;\n        }\n\n        // 髟キ謚シ縺玲凾縺ョ蜃ヲ逅�\n        setTimeout(function () {\n            // 繧、繝ウ繧ソ繝シ繝舌Ν譛ェ螳溯。御クュ + 髟キ謚シ縺励�繧、繝吶Φ繝医ち繧、繝励せ繧ソ繝ウ繝嶺ク€閾エ譎ゅ↓險育ョ怜�逅�\n            // 髟キ謚シ縺励°繧�500繝溘Μ遘貞セ後↓蜃ヲ逅�′螳溯。後&繧後k\n            if (!arySpinnerCtrl['.interval'] && arySpinnerCtrl['.timestamp'] === e.timeStamp) {\n                arySpinnerCtrl['.interval'] = setInterval(spinnerCal, SPIN_SPEED);\n            }\n        }, 500);\n    });\n\n    // 髟キ謚シ縺苓ァ」髯、譎� 逕サ髱「繧ケ繧ッ繝ュ繝シ繝ォ繧りァ」髯、縺ォ蜷ォ繧€\n    $(document).on('touchend mouseup scroll', function (e) {\n        if (arySpinnerCtrl['.interval']) {\n            // 繧ケ繝斐リ繝シ縺ョ螟牙虚繧貞●豁「縺吶k縺溘a縺ォ蛟、繧偵け繝ェ繧「\n            clearInterval(arySpinnerCtrl['.interval']);\n            arySpinnerCtrl = [];\n        }\n    });\n    $('.quantity-select').on('change', function (e) {\n        const quantity = parseInt($(this).val());\n        if (isNaN(quantity) || quantity <= 0) {\n            $(this).val(1);\n        }\n    });\n}\n\n/**\n * 讒区�蜩�∈謚樊凾縺ョ繝「繝シ繝€繝ォ螳溯。圭n */\nfunction clickAssortedProducts() {\n    $('#requestProductDetailsModal').on('show.bs.modal', function (event) {\n        // 繝「繝シ繝€繝ォ繧貞他縺ウ蜃コ縺吶→縺阪↓菴ソ繧上l縺溘�繧ソ繝ウ繧貞叙蠕予n        let link = $(event.relatedTarget);\n\n        // 繝「繝シ繝€繝ォ繧貞叙蠕予n        let modal = $(this);\n\n        // 蜿門セ励@縺滓ァ区�蜩∵ュ蝣ア縺ァ荳頑嶌縺阪☆繧欺n        modal.find('#modal-title').text(link.data('name'));\n        modal.find('#modal-img').attr('src', link.data('imageurl'));\n        modal.find('#modal-img').attr('alt', link.data('imagealt'));\n        modal.find('#modal-img').attr('title', link.data('imagetitle'));\n        modal.find('#modal-description').text(link.data('description'));\n\n        // 蛻晄悄蛹暴n        modal.find('#modal-storagedays').show();\n        modal.find('#modal-label-storagedays').show();\n        modal.find('#modal-internalCapacity').show();\n        modal.find('#modal-label-internalCapacity').show();\n        modal.find('#modal-allergies').show();\n        modal.find('#modal-label-allergies').show();\n        modal.find('#modal-nutritionalContents').show();\n        modal.find('#modal-label-nutritionalContents').show();\n\n        // 蛟、縺後↑縺�b縺ョ繧帝��岼縺斐→陦ィ遉コ縺励↑縺Ыn        if (link.data('storagedays') !== null) {\n            modal.find('#modal-storagedays').text('');\n            modal\n                .find('#modal-storagedays')\n                .text(link.data('storagedays') + modal.find('#modal-storagedays').text());\n        } else {\n            modal.find('#modal-storagedays').hide();\n            modal.find('#modal-label-storagedays').hide();\n        }\n        if (link.data('internalcapacity') !== '') {\n            modal.find('#modal-internalCapacity').text(link.data('internalcapacity'));\n        } else {\n            modal.find('#modal-internalCapacity').hide();\n            modal.find('#modal-label-internalCapacity').hide();\n        }\n        if (link.data('strjoinallergies') !== '') {\n            modal.find('#modal-allergies').text(link.data('strjoinallergies'));\n        } else {\n            modal.find('#modal-allergies').hide();\n            modal.find('#modal-label-allergies').hide();\n        }\n        if (link.data('nutritionalcontents') !== '') {\n            modal.find('#modal-nutritionalContents').html(link.data('nutritionalcontents'));\n            modal.find('#modal-nutritionalContents').css('white-space', 'pre-line');\n        } else {\n            modal.find('#modal-nutritionalContents').hide();\n            modal.find('#modal-label-nutritionalContents').hide();\n        }\n    });\n}\n\n/**\n * 譌・莉倥rYYYY/MM/DD蠖「蠑上〒霑泌唆縺励∪縺兔n * @param {date} dt 譌・莉禄n * @returns {string} YYYY/MM/DD譌・莉禄n */\nfunction formatDate(dt) {\n    let y = dt.getFullYear();\n    let m = ('00' + (dt.getMonth() + 1)).slice(-2);\n    let d = ('00' + dt.getDate()).slice(-2);\n    return y + '/' + m + '/' + d;\n}\n/**\n * 繧ィ繝ゥ繝シ繝。繝�そ繝シ繧ク繧定。ィ遉コ縺吶k繝昴ャ繝励い繝��繧剃ス懈�縺吶k\n * @param {Object} message - 繧ィ繝ゥ繝シ繝。繝�そ繝シ繧ク\n */\nfunction createErrorNotification(message) {\n    const errorHtml =\n        '<div class=\"alert alert-danger alert-dismissible valid-cart-error ' +\n        'fade show\" role=\"alert\">' +\n        '<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\">' +\n        '<span aria-hidden=\"true\">&times;</span>' +\n        '</button>' +\n        encodeHtml(message) +\n        '</div>';\n\n    // 繧ォ繝シ繝医Γ繝�そ繝シ繧ク縺ョCSS繧貞茜逕ィ\n    $('body').append('<div class=\"add-to-cart-messages\"></div>');\n    $('.add-to-cart-messages').append(errorHtml);\n    setTimeout(function () {\n        $('.add-to-cart-messages').remove();\n    }, 5e3);\n}\n\n/**\n * 蜃コ闕キ莠亥ョ壽律諠��ア繧奪ateTimePicker縺ォ險ュ螳壹@縺セ縺吶€�\n * @param {object} apiData 蜃コ闕キ莠亥ョ壽律諠��ア\n * @returns 繧ィ繝ゥ繝シ縺ョ蝣エ蜷医�pop繧「繝��陦ィ遉コ繧定。後>邨ゆコ�\n */\nfunction dateTimePickerFunc(apiData) {\n    // 蜃コ闕キ莠亥ョ壽律繧ォ繝ャ繝ウ繝€繝シ諠��ア縺ョ蜿門セ予n    let shippingDateList = apiData.data.shipping_date_list;\n\n    // 縲€笳具シ�50%譛ェ貅€\n    // 縲€笆ウ��50%莉・荳浬n    // 縲€テ暦シ�100%\n    // 縲€-�医げ繝ャ繝シ繧「繧ヲ繝茨シ会シ夂ゥコ逋ス�亥€、辟。縺暦シ噂n\n    let sd = null;\n    let ed = null;\n    let checkMap = new Map();\n    for (let i = 0; i < shippingDateList.length; i += 1) {\n        // 驕ク謚槫庄閭ス髢句ァ区律莉倥�蛻、螳喀n        if (sd === null && shippingDateList[i].shipping_rate !== '') {\n            sd = shippingDateList[i];\n        }\n        // 驕ク謚槫庄閭ス邨ゆコ�律莉倥�蛻、螳喀n        if (shippingDateList[i].shipping_rate !== '') {\n            ed = shippingDateList[i];\n        }\n        // 縲�無テ怜愛螳夂畑\n        checkMap.set(shippingDateList[i].shipping_date, shippingDateList[i].shipping_rate);\n    }\n\n    // 驕ク謚槫庄閭ス髢句ァ区律繝サ邨ゆコ�律縺悟ュ伜惠縺励↑縺��エ蜷医€―n    if (sd === null) {\n        sd = shippingDateList[0];\n    }\n    if (ed === null) {\n        ed = shippingDateList[shippingDateList.length - 1];\n    }\n\n    // dataPicker縺ョ險ュ螳喀n    $('#shipping-date').datepicker({\n        language: 'ja', // 譌・譛ャ隱槫喧\n        format: 'yyyy/mm/dd', // 譌・莉倩。ィ遉コ繧馳yyy/mm/dd縺ォ繝輔か繝シ繝槭ャ繝�\n        startDate: sd.shipping_date, // 驕ク謚槫庄閭ス縺ェ髢句ァ区律莉禄n        endDate: ed.shipping_date, // 驕ク謚槫庄閭ス縺ェ邨ゆコ�律莉禄n        disabled: false, // 譌・莉倥r驕ク謚槭&縺帙↑縺Ыn        autoclose: true, // 驕ク謚槫セ碁哩縺倥k\n        clearBtn: false, // 繧ッ繝ェ繧「繝懊ち繝ウ陦ィ遉コ\n        // datesDisabled: disableArray ,//  驕ク謚樔ク榊庄縺ォ縺吶k譌・莉倬�蛻予n        // container: '#picker-container',// 繝斐ャ繧ォ繝シ繧定ソス蜉�縺輔○繧倶ク€譎ら噪縺ェ蝣エ謇€\n        maxViewMode: 0, // 譌・譎ゅ�縺ソ驕ク謚槫庄閭ス\n        beforeShowDay: function (date) {\n            let param;\n            let dateStr = formatDate(date);\n            let rateNum = checkMap.get(dateStr);\n\n            if (rateNum === '') {\n                param = {\n                    classes: 'disabled', // -縺ォ縺吶kCSS縺ョ繧ッ繝ゥ繧ケ蜷構n                };\n            } else if (Number(rateNum) === 100) {\n                param = {\n                    classes: 'batsu', // テ励↓縺吶kCSS縺ョ繧ッ繝ゥ繧ケ蜷構n                };\n            } else if (Number(rateNum) < 50) {\n                param = {\n                    classes: 'maru', // 笳九↓縺吶kCSS縺ョ繧ッ繝ゥ繧ケ蜷構n                };\n            } else {\n                param = {\n                    classes: 'sankaku', // 笆ウ縺ォ縺吶kCSS縺ョ繧ッ繝ゥ繧ケ蜷構n                };\n            }\n            return param;\n        },\n    });\n\n    // datepicker繧定。ィ遉コ\n    $('#shipping-date').datepicker('show');\n\n    // next繧貞宛蠕。\n    $('.datepicker')\n        .find('.next')\n        .on('click', function (e) {\n            //縲€髱樊エサ諤ァ繧ッ繝ゥ繧ケ縺後≠繧句�エ蜷域ャ。譛医↓驕キ遘サ縺励↑縺Ыn            if ($(this).hasClass('disabled')) {\n                e.stopImmediatePropagation();\n            }\n        });\n    // prev繧貞宛蠕。\n    $('.datepicker')\n        .find('.prev')\n        .on('click', function (e) {\n            //縲€髱樊エサ諤ァ繧ッ繝ゥ繧ケ縺後≠繧句�エ蜷亥燕譛医↓驕キ遘サ縺励↑縺Ыn            if ($(this).hasClass('disabled')) {\n                e.stopImmediatePropagation();\n            }\n        });\n}\n\n/**\n * 蜃コ闕キ莠亥ョ壽律蜿門セ輸PI縺九i蜃コ闕キ莠亥ョ壽律諠��ア繧貞叙蠕励@DateTimePicker繧定。ィ遉コ縺励∪縺吶€�\n */\nfunction dateTimePickerApi() {\n    $('#shipping-date').on('click', function (event) {\n        // DatatimePicker縺ョ陦ィ遉コ繧呈椛蛻カ\n        event.stopImmediatePropagation();\n\n        const url = $(this).data('apiurl');\n        if (!url) {\n            return;\n        }\n        const pid = base.getPidValue($(this));\n\n        // body縺ォcss繧定ソス蜉�\n        const body = $('body');\n        if (!body.hasClass('product-detail-page')) {\n            body.addClass('product-detail-page');\n        }\n\n        $.spinner().start();\n        $.ajax({\n            url,\n            method: 'GET',\n            data: {\n                pid,\n            },\n        })\n            .done(function (data) {\n                if (data.success) {\n                    dateTimePickerFunc(data);\n                    return;\n                }\n                if (data.redirectUrl) {\n                    window.location.href = data.redirectUrl;\n                } else if (data.errorMessage) {\n                    createErrorNotification(data.errorMessage);\n                }\n            })\n            .fail(function (data) {\n                createErrorNotification(data.responseJSON.message);\n            })\n            .always(function () {\n                $.spinner().stop();\n            });\n    });\n}\n\n/**\n * Swiper繧ケ繧ッ繝ェ繝励ヨ�壹し繝�繝阪う繝ォ謫堺ス彌n */\nconst swiperProductsThumbnail = new Swiper('.swiper_products_thumbnail', {\n    breakpoints: {\n        // 繝悶Ξ繝シ繧ッ繝昴う繝ウ繝�\n        0: {\n            // 逕サ髱「蟷�0px莉・荳翫〒驕ゥ逕ィ\n            slidesPerView: 6,\n        },\n        768: {\n            // 逕サ髱「蟷�769px莉・荳翫〒驕ゥ逕ィ\n            slidesPerView: 12,\n        },\n        1200: {\n            // 逕サ髱「蟷�1200px莉・荳翫〒驕ゥ逕ィ\n            slidesPerView: 12,\n        },\n    },\n    allowTouchMove: false,\n});\n\n/**\n * Swiper繧ケ繧ッ繝ェ繝励ヨ�壼膚蜩√せ繝ゥ繧、繝噂n */\nconst swiperProducts = new Swiper('.swiper_products', {\n    breakpoints: {\n        // 繝悶Ξ繝シ繧ッ繝昴う繝ウ繝�\n        0: {\n            // 逕サ髱「蟷�0px莉・荳翫〒驕ゥ逕ィ\n            slidesPerView: 1,\n        },\n        768: {\n            // 逕サ髱「蟷�769px莉・荳翫〒驕ゥ逕ィ\n            slidesPerView: 1,\n        },\n        1200: {\n            // 逕サ髱「蟷�1200px莉・荳翫〒驕ゥ逕ィ\n            slidesPerView: 1,\n        },\n    },\n    loop: true, // 繝ォ繝シ繝励&縺帙k\n    speed: 1500, // 蟆代@繧�▲縺上j(繝�ヵ繧ゥ繝ォ繝医�300)\n    navigation: {\n        nextEl: '.swiper-button-next',\n        prevEl: '.swiper-button-prev',\n    },\n    thumbs: {\n        swiper: swiperProductsThumbnail,\n    },\n});\n\n/**\n * 雉シ蜈・繧ィ繝ェ繧「(SP)繧帝←蛻�↑菴咲スョ縺ォ遘サ蜍輔☆繧九€�\n * 縺薙l縺ッ縲√Μ繝「繝シ繝医う繝ウ繧ッ繝ォ繝シ繝�('Product-IncludePurchase')縺悟�蜉帙@縺滓凾轤ケ縺ァ縺ッ縲∵悽譚・縺ョ菴咲スョ縺ォ雉シ蜈・繧ィ繝ェ繧「(SP)縺悟ュ伜惠縺励↑縺�%縺ィ縺ォ繧医k縲�\n *\n * @returns {void}\n */\nfunction moveProductPurchaseSp() {\n    const $bundleFooter = $('.bundle-footer');\n    const $bundleFooterRow = $bundleFooter.closest('.row');\n    const $productItemContainer = $('.container.product-detail.set-item');\n    $bundleFooterRow.insertAfter($productItemContainer);\n}\n\nconst exportDetails = $.extend({}, base, detail, {\n    quantityChange,\n    addToCart: function () {}, // addToCart繧貞�騾壼喧縲Case蛛エ縺ョ蜃ヲ逅�′繧ウ繝シ繝ォ縺輔l縺ェ縺�h縺�↓蜃ヲ逅�r辟。蜉ケ蛹悶€�\n    clickAssortedProducts,\n    dateTimePickerApi,\n    moveProductPurchaseSp,\n});\n\nmodule.exports = exportDetails;\n","'use strict';\nvar base = require('./base');\n\n/**\n * Enable/disable UI elements\n * @param {boolean} enableOrDisable - true or false\n */\nfunction updateAddToCartEnableDisableOtherElements(enableOrDisable) {\n    $('button.add-to-cart-global').attr('disabled', enableOrDisable);\n}\n\nmodule.exports = {\n    methods: {\n        updateAddToCartEnableDisableOtherElements: updateAddToCartEnableDisableOtherElements\n    },\n\n    availability: base.availability,\n\n    addToCart: base.addToCart,\n\n    updateAttributesAndDetails: function () {\n        $('body').on('product:statusUpdate', function (e, data) {\n            var $productContainer = $('.product-detail[data-pid=\"' + data.id + '\"]');\n\n            $productContainer.find('.description-and-detail .product-attributes')\n                .empty()\n                .html(data.attributesHtml);\n\n            if (data.shortDescription) {\n                $productContainer.find('.description-and-detail .description')\n                    .removeClass('hidden-xl-down');\n                $productContainer.find('.description-and-detail .description .content')\n                    .empty()\n                    .html(data.shortDescription);\n            } else {\n                $productContainer.find('.description-and-detail .description')\n                    .addClass('hidden-xl-down');\n            }\n\n            if (data.longDescription) {\n                $productContainer.find('.description-and-detail .details')\n                    .removeClass('hidden-xl-down');\n                $productContainer.find('.description-and-detail .details .content')\n                    .empty()\n                    .html(data.longDescription);\n            } else {\n                $productContainer.find('.description-and-detail .details')\n                    .addClass('hidden-xl-down');\n            }\n        });\n    },\n\n    showSpinner: function () {\n        $('body').on('product:beforeAddToCart product:beforeAttributeSelect', function () {\n            $.spinner().start();\n        });\n    },\n    updateAttribute: function () {\n        $('body').on('product:afterAttributeSelect', function (e, response) {\n            if ($('.product-detail>.bundle-items').length) {\n                response.container.data('pid', response.data.product.id);\n                response.container.find('.product-id').text(response.data.product.id);\n            } else if ($('.product-set-detail').eq(0)) {\n                response.container.data('pid', response.data.product.id);\n                response.container.find('.product-id').text(response.data.product.id);\n            } else {\n                $('.product-id').text(response.data.product.id);\n                $('.product-detail:not(\".bundle-item\")').data('pid', response.data.product.id);\n            }\n        });\n    },\n    updateAddToCart: function () {\n        $('body').on('product:updateAddToCart', function (e, response) {\n            // update local add to cart (for sets)\n            $('button.add-to-cart', response.$productContainer).attr('disabled',\n                (!response.product.readyToOrder || !response.product.available));\n\n            var enable = $('.product-availability').toArray().every(function (item) {\n                return $(item).data('available') && $(item).data('ready-to-order');\n            });\n            module.exports.methods.updateAddToCartEnableDisableOtherElements(!enable);\n        });\n    },\n    updateAvailability: function () {\n        $('body').on('product:updateAvailability', function (e, response) {\n            $('div.availability', response.$productContainer)\n                .data('ready-to-order', response.product.readyToOrder)\n                .data('available', response.product.available);\n\n            $('.availability-msg', response.$productContainer)\n                .empty().html(response.message);\n\n            if ($('.global-availability').length) {\n                var allAvailable = $('.product-availability').toArray()\n                    .every(function (item) { return $(item).data('available'); });\n\n                var allReady = $('.product-availability').toArray()\n                    .every(function (item) { return $(item).data('ready-to-order'); });\n\n                $('.global-availability')\n                    .data('ready-to-order', allReady)\n                    .data('available', allAvailable);\n\n                $('.global-availability .availability-msg').empty()\n                    .html(allReady ? response.message : response.resources.info_selectforstock);\n            }\n        });\n    },\n    sizeChart: function () {\n        $('.size-chart a').on('click', function (e) {\n            e.preventDefault();\n            var url = $(this).attr('href');\n            var $prodSizeChart = $(this).closest('.size-chart').find('.size-chart-collapsible');\n            if ($prodSizeChart.is(':empty')) {\n                $.ajax({\n                    url: url,\n                    type: 'get',\n                    dataType: 'json',\n                    success: function (data) {\n                        $prodSizeChart.append(data.content);\n                    }\n                });\n            }\n            $prodSizeChart.toggleClass('active');\n        });\n\n        var $sizeChart = $('.size-chart-collapsible');\n        $('body').on('click touchstart', function (e) {\n            if ($('.size-chart').has(e.target).length <= 0) {\n                $sizeChart.removeClass('active');\n            }\n        });\n    },\n    copyProductLink: function () {\n        $('body').on('click', '#fa-link', function () {\n            event.preventDefault();\n            var $temp = $('<input>');\n            $('body').append($temp);\n            $temp.val($('#shareUrl').val()).select();\n            document.execCommand('copy');\n            $temp.remove();\n            $('.copy-link-message').attr('role', 'alert');\n            $('.copy-link-message').removeClass('d-none');\n            setTimeout(function () {\n                $('.copy-link-message').addClass('d-none');\n            }, 3000);\n        });\n    },\n\n    focusChooseBonusProductModal: base.focusChooseBonusProductModal()\n};\n","'use strict';\n\n/** @type {object} 遒コ隱阪ム繧、繧「繝ュ繧ー */\nconst CONFIRMATION = {\n    /** @type {string} 繝�ヵ繧ゥ繝ォ繝医�繝「繝シ繝€繝ォID */\n    DEFAULT_ID: 'confirmationModal',\n    /** @type {object} 遒コ隱阪ム繧、繧「繝ュ繧ー蜀��繝懊ち繝ウ */\n    BUTTON: {\n        /** @type {string} 繝懊ち繝ウ縲薫K縲阪�繧ッ繝ゥ繧ケ蜷� */\n        OK: 'co-modal-ok',\n        /** @type {string} 繝懊ち繝ウ縲靴ANCEL縲阪�繧ッ繝ゥ繧ケ蜷� */\n        CANCEL: 'co-modal-cancel',\n    },\n    /** @type {object} 遒コ隱阪ム繧、繧「繝ュ繧ー邨先棡 */\n    RESULT: {\n        /** @type {number} OK */\n        OK: 0,\n        /** @type {number} CANCEL */\n        CANCEL: -1,\n    },\n};\n\n/**\n * 遒コ隱阪ム繧、繧「繝ュ繧ー(繝「繝シ繝€繝ォ)繧定。ィ遉コ縺励€∵款縺輔l縺溘�繧ソ繝ウ縺御ス輔〒縺ゅk縺九r霑斐☆縲�\n * 縺ェ縺翫€√�繝シ繧ク蜀�↓遒コ隱阪ム繧、繧「繝ュ繧ー縺ョHTML縺悟性縺セ繧後※縺�k縺薙→縲�\n *\n * (蜿り€�)/co/coUses/coUsesModal.isml\n * (遒コ隱阪ム繧、繧「繝ュ繧ー縺ョHTML縺ョ蜑肴署)\n * - OK繝懊ち繝ウ縺ョclass縺後€慶o-modal-ok縲阪〒縺ゅk\n * - CANCEL繝懊ち繝ウ縺ョclass縺後€慶o-modal-cancel縲阪〒縺ゅk\n *\n * 譛ャ髢「謨ー縺ッ縲∵擅莉カ縺ォ蠢懊§縺ヲ遒コ隱阪ム繧、繧「繝ュ繧ー繧定。ィ遉コ縺励◆縺��エ蜷医↓蛻ゥ逕ィ縺吶k縺薙→繧呈Φ螳壹€�\n * 縺昴�縺溘a縲∫音螳壹�繝懊ち繝ウ隕∫エ�縺ォ繝「繝シ繝€繝ォ逕ィ縺ョ繝��繧ソ螻樊€ァ繧堤畑縺�※陦ィ遉コ繧偵ヨ繧ー繝ォ縺吶k逕ィ騾斐〒縺ッ蛻ゥ逕ィ縺励↑縺�%縺ィ縲�\n * (萓�)縲慧ata-target=\"#confirmationModal\" data-toggle=\"modal\"縲構n *\n * @param {string|undefined} modalId - 遒コ隱阪ム繧、繧「繝ュ繧ー(繝「繝シ繝€繝ォ)縺ョ隕∫エ�ID縲よ欠螳壹@縺ェ縺��エ蜷�(undefined譎�)縺ョ繝�ヵ繧ゥ繝ォ繝医�縲慶onfirmationModal縲阪€�\n * @returns {Promise<number>} CONFIRMATION.RESULT.OK 縺セ縺溘� CONFIRMATION.RESULT.CANCEL\n */\nfunction confirm(modalId) {\n    return new Promise((resolve, reject) => {\n        /* eslint no-unused-vars: [\"error\", { \"args\": \"none\" }] */\n        // 繝「繝シ繝€繝ォ繧貞叙蠕励☆繧欺n        const $modal = $(`#${modalId || CONFIRMATION.DEFAULT_ID}`);\n        // 繝「繝シ繝€繝ォ縺後け繝ュ繝シ繧コ縺励◆蝣エ蜷医�蜃ヲ逅�\n        $modal.on('hide.bs.modal', () => {\n            // XXX 縺薙l縺ッ縲√�繧ソ繝ウ縺梧款縺輔l縺壹↓繝「繝シ繝€繝ォ縺後け繝ュ繝シ繧コ縺励◆蝣エ蜷医�蜃ヲ逅�€ゅ�繧ソ繝ウ縺梧款縺輔l縺溷�エ蜷医�縺吶〒縺ォresolve貂医∩縺ィ縺ェ繧九€�\n            resolve(CONFIRMATION.RESULT.CANCEL);\n        });\n        // OK繝懊ち繝ウ縺梧款縺輔l縺溷�エ蜷医�蜃ヲ逅�\n        $(`.${CONFIRMATION.BUTTON.OK}`, $modal).on('click', () => {\n            resolve(CONFIRMATION.RESULT.OK);\n        });\n        // CANCEL繝懊ち繝ウ縺梧款縺輔l縺溷�エ蜷医�蜃ヲ逅�\n        $(`.${CONFIRMATION.BUTTON.CANCEL}`, $modal).on('click', () => {\n            resolve(CONFIRMATION.RESULT.CANCEL);\n        });\n        // 繝「繝シ繝€繝ォ繧定。ィ遉コ縺吶k\n        $modal.modal('show');\n    });\n}\n\nmodule.exports = {\n    CONFIRMATION,\n    confirm,\n};\n","'use strict';\n\nmodule.exports = {\n    setTabNextFocus: function (focusParams) {\n        var KEYCODE_TAB = 9;\n        var isTabPressed = (focusParams.event.key === 'Tab' || focusParams.event.keyCode === KEYCODE_TAB);\n\n        if (!isTabPressed) {\n            return;\n        }\n\n        var firstFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.firstElementSelector);\n        var lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.lastElementSelector);\n\n        if ($(focusParams.containerSelector + ' ' + focusParams.lastElementSelector).is(':disabled')) {\n            lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.nextToLastElementSelector);\n            if ($('.product-quickview.product-set').length > 0) {\n                var linkElements = $(focusParams.containerSelector + ' a#fa-link.share-icons');\n                lastFocusableEl = linkElements[linkElements.length - 1];\n            }\n        }\n\n        if (focusParams.event.shiftKey) /* shift + tab */ {\n            if ($(':focus').is(firstFocusableEl)) {\n                lastFocusableEl.focus();\n                focusParams.event.preventDefault();\n            }\n        } else /* tab */ {\n            if ($(':focus').is(lastFocusableEl)) { // eslint-disable-line\n                firstFocusableEl.focus();\n                focusParams.event.preventDefault();\n            }\n        }\n    }\n};\n","'use strict';\n\nconst wishlist = require('wishlist/product/wishlist');\nconst {getCsrfObject} = require('app_common/components/security');\n\n/**\n * 縺頑ー励↓蜈・繧顔匳骭イ譎ゅ�AJAX騾壻ソ。縺ョ邨先棡蛹コ蛻�\n *\n * @protected\n * @constant {string}\n * @author SCSK 荳ュ譚大享邏€\n */\nconst AJAX_RESPONSE_ERR_EXIST = 'errExist';\nconst AJAX_RESPONSE_ERR_AT_MAX = 'errAtMax';\nconst AJAX_RESPONSE_ERR_OTHER = 'errOther';\n\n/**\n * 縺頑ー励↓蜈・繧顔匳骭イ譎ゅ�繝。繝�そ繝シ繧ク陦ィ遉コ繧ウ繝ウ繝医Ο繝シ繝ォ\n *\n * @param {object} data 縺頑ー励↓蜈・繧顔匳骭イAjax繧オ繝シ繝薙せ繧貞他縺ウ蜃コ縺励◆邨先棡\n * (逋サ骭イ謌仙粥譎�)\n * ```js\n * {\n *    success: true,\n *    pid: '<蝠�刀ID>',\n *    msg: '<繝。繝�そ繝シ繧クID'>\n * }\n * ```\n * (逋サ骭イ螟ア謨玲凾)\n * ```js\n * {\n *    error: true,\n *    pid: '<蝠�刀ID>',\n *    msg: '<繝。繝�そ繝シ繧クID>'\n * }\n * ```\n * - 縲悟膚蜩!D縲阪�縲√♀豌励↓蜈・繧顔匳骭イ譎ゅ↓騾∽ソ。縺励◆蝠�刀ID縺ォ隧イ蠖薙☆繧九€�\n * -縲後Γ繝�そ繝シ繧クID縲阪�莉・荳九〒螳夂セゥ縺吶k縺�★繧後°縺ォ隧イ蠖薙☆繧九€�\n *     - AJAX_RESPONSE_ERR_EXIST\n *     - AJAX_RESPONSE_ERR_AT_MAX\n *     - AJAX_RESPONSE_ERR_OTHER\n * @param {jQuery<Element>} $button - 縲後♀豌励↓蜈・繧翫↓霑ス蜉�縲阪�繧ソ繝ウ繧定。ィ縺冕Query繧ェ繝悶ず繧ァ繧ッ繝�\n * @returns {void}\n * @author SCSK 荳ュ譚大享邏€\n */\nfunction displayMessage(data, $button) {\n    // 繧ケ繝斐リ繝シ逕サ髱「蛛懈ュ「\n    $.spinner().stop();\n\n    let message = '';\n    let status = 'alert-success';\n\n    // AJAX縺ョ邨先棡縺ァ陦ィ遉コ縺吶k繝。繝�そ繝シ繧ク繧定ェソ謨エ\n    if (data.success) {\n        // 縺頑ー励↓蜈・繧翫↓霑ス蜉�縺ァ縺阪◆蝣エ蜷�\n        message = $('.add-to-wishlist-popup .add-to-wishlist-first').html();\n    } else if (data.msg === AJAX_RESPONSE_ERR_EXIST) {\n        // 縺吶〒縺ォ逋サ骭イ縺輔l縺ヲ縺�◆蝣エ蜷�\n        message = $('.add-to-wishlist-popup .add-to-wishlist-error-exist').html();\n    } else if (data.msg === AJAX_RESPONSE_ERR_AT_MAX) {\n        // 荳企剞縺ォ驕斐@縺ヲ縺�k蝣エ蜷�\n        message = $('.add-to-wishlist-popup .add-to-wishlist-error-atmax').html();\n    } else if (data.msg === AJAX_RESPONSE_ERR_OTHER) {\n        // 莉悶�繧ィ繝ゥ繝シ縺檎匱逕溘@縺溷�エ蜷�\n        message = $('.add-to-wishlist-popup .add-to-wishlist-error-other').html();\n    } else if (data.csrfError) {\n        // CSRF繝医�繧ッ繝ウ繧ィ繝ゥ繝シ縺ョ蝣エ蜷�\n        message = $('.add-to-wishlist-popup .add-to-wishlist-error-csrf').html();\n    } else {\n        // 莠域悄縺帙〓繧ィ繝ゥ繝シ縺ョ蝣エ蜷�\n        message = $('.add-to-wishlist-popup .add-to-wishlist-error-system').html();\n    }\n\n    let $messages = $('.add-to-cart-messages');\n    if ($messages.length === 0) {\n        $messages = $('<div class=\"add-to-cart-messages\"></div>');\n        $('body').append($messages);\n    }\n\n    // 繧ッ繝ゥ繧ケ霑ス蜉�\n    const $alert = $(\n        `<div class=\"alert ${status} add-to-basket-alert text-center\" role=\"alert\">${message}</div>`\n    );\n    $messages.append($alert);\n\n    // 繧「繧、繧ウ繝ウCSS\n    if (data.success) {\n        if (!$button.hasClass('tny-heart-on')) {\n            $button.addClass('tny-heart-on');\n        }\n    }\n    // 繧ソ繧、繝�繧「繧ヲ繝医そ繝�ヨ��5遘抵シ噂n    setTimeout(function () {\n        $alert.remove();\n        $messages.remove();\n        $button.removeAttr('disabled');\n    }, 5000);\n}\n\n/**\n * 縺頑ー励↓蜈・繧翫↓霑ス蜉�\n * plugin_wishlist縺九i遘サ讀構n * AJAX騾壻ソ。蠕後�蜃ヲ逅��縺ソ謾ケ菫ョ\n *\n * @returns {void}\n * @author 荳ュ譚大享邏€\n */\nfunction addToWishlist() {\n    $(document).on('click', '.add-to-wish-list', async function (e) {\n        e.preventDefault();\n\n        // html縺九i諠��ア蜿門セ予n        let url = $(this).data('href');\n        let $button = $(this);\n        // TODO�嗔id縺ョ蜿悶j譁ケ縺ォ縺、縺�※taneya-store�亥膚蜩∫ウサ讖溯��峨→隱ソ謨エ縺悟ソ�ヲ―n        let pid =\n            $(this).closest('.product-detail').find('.product-id').html() ||\n            $(this).data('product-id');\n        let optionId = $(this)\n            .closest('.product-detail')\n            .find('.product-option')\n            .attr('data-option-id');\n        let optionVal = $(this)\n            .closest('.product-detail')\n            .find('.options-select option:selected')\n            .attr('data-value-id');\n\n        optionId = optionId || null;\n        optionVal = optionVal || null;\n        if (!url || !pid) {\n            return;\n        }\n\n        // 繧ケ繝斐リ繝シ逕サ髱「縺ョ繧ケ繧ソ繝シ繝�\n        $.spinner().start();\n\n        $(this).attr('disabled', true);\n\n        const csrfObject = getCsrfObject();\n        const csrfTokenName = csrfObject.tokenName;\n        const csrfTokenValue = csrfObject.token;\n        const postdata = {\n            pid,\n            optionId,\n            optionVal,\n        };\n        postdata[csrfTokenName] = csrfTokenValue;\n\n        // AJAX騾壻ソ。\n        $.ajax({\n            url: url,\n            type: 'post',\n            dataType: 'json',\n            data: postdata,\n            success: function (data) {\n                displayMessage(data, $button);\n            },\n            error: function (err) {\n                displayMessage(err.responseJSON || {}, $button);\n            },\n        });\n    });\n}\n\nconst exportWishlist = $.extend({}, wishlist, {\n    addToWishlist,\n});\n\nmodule.exports = exportWishlist;\n","'use strict';\n\n\n/**\n * appends params to a url\n * @param {string} data - data returned from the server's ajax call\n * @param {Object} button - button that was clicked to add a product to the wishlist\n */\nfunction displayMessage(data, button) {\n    $.spinner().stop();\n    var status;\n    if (data.success) {\n        status = 'alert-success';\n    } else {\n        status = 'alert-danger';\n    }\n\n    if ($('.add-to-wishlist-messages').length === 0) {\n        $('body').append(\n        '<div class=\"add-to-wishlist-messages \"></div>'\n        );\n    }\n    $('.add-to-wishlist-messages')\n        .append('<div class=\"add-to-wishlist-alert text-center ' + status + '\">' + data.msg + '</div>');\n\n    setTimeout(function () {\n        $('.add-to-wishlist-messages').remove();\n        button.removeAttr('disabled');\n    }, 5000);\n}\n\nmodule.exports = {\n    addToWishlist: function () {\n        $('.add-to-wish-list').on('click', function (e) {\n            e.preventDefault();\n            var url = $(this).data('href');\n            var button = $(this);\n            var pid = $(this).closest('.product-detail').find('.product-id').html();\n            var optionId = $(this).closest('.product-detail').find('.product-option').attr('data-option-id');\n            var optionVal = $(this).closest('.product-detail').find('.options-select option:selected').attr('data-value-id');\n            optionId = optionId || null;\n            optionVal = optionVal || null;\n            if (!url || !pid) {\n                return;\n            }\n\n            $.spinner().start();\n            $(this).attr('disabled', true);\n            $.ajax({\n                url: url,\n                type: 'post',\n                dataType: 'json',\n                data: {\n                    pid: pid,\n                    optionId: optionId,\n                    optionVal: optionVal\n                },\n                success: function (data) {\n                    displayMessage(data, button);\n                },\n                error: function (err) {\n                    displayMessage(err, button);\n                }\n            });\n        });\n    }\n};\n","'use strict';\n\nconst XStringUtils = require('./util/XStringUtils');\n\nmodule.exports = {\n    XStringUtils,\n};","'use strict';\n\n/*\n * 縲後☆縺占ウシ蜈・縲咲畑縺ョ繧ッ繝ゥ繧、繧「繝ウ繝�JS縲�\n * 縲慶o/coBuyNow/coBuyNowParts.isml縲阪r繧、繝ウ繧ッ繝ォ繝シ繝峨@縺溽判髱「荳翫〒讖溯�縺吶k縲�\n */\n\nconst {CONFIRMATION, confirm} = require('./client/coClientModalUtils');\nconst postForm = require('sswd_base/components/XPostForm');\nconst {getCsrfObject} = require('app_common/components/security');\n\n/** @type {object} 縲後☆縺占ウシ蜈・縲阪し繝シ繝薙せ縺ョ繝ャ繧ケ繝昴Φ繧ケ邨先棡 */\nconst CO_BUY_NOW_RESPONSE_RESULT = {\n    /** @type {string} 譛ェ繝ュ繧ー繧、繝ウ縺ョ蝣エ蜷� */\n    NOT_LOGGED_IN: 'notLoggedIn',\n    /** @type {string} 縲後☆縺占ウシ蜈・縲阪′蜿ッ閭ス縺ァ縺ゅk蝣エ蜷� */\n    OK: 'ok',\n    /** @type {string} 繧ィ繝ゥ繝シ縺檎匱逕溘@縺溷�エ蜷� */\n    ERROR: 'error',\n    /** @type {string} 蝠�刀縺瑚ウシ蜈・荳榊庄縺ァ縺ゅk蝣エ蜷� */\n    CAN_NOT_BUY: 'canNotBuy',\n    /** @type {string} 逕ィ騾斐r縲後#閾ェ螳�畑縲阪↓螟画峩縺吶k蠢�ヲ√′縺ゅk蝣エ蜷� */\n    CHANGE_USES: 'changeUses',\n};\n\n/** @type {object} 縲後☆縺占ウシ蜈・縲阪し繝シ繝薙せ縺ョ繝ャ繧ケ繝昴Φ繧ケ繧貞�逅�@縺溽オ先棡 */\nconst CO_BUY_NOW_ACTION_RESULT = {\n    /** @type {string} CSRF繝医�繧ッ繝ウ繝√ぉ繝�け縺ァ繧ィ繝ゥ繝シ縺檎匱逕溘@縺溷�エ蜷� */\n    CSRF_FAIL: 'csrfFail',\n    /** @type {string} 譛ェ繝ュ繧ー繧、繝ウ縺ョ蝣エ蜷� */\n    NOT_LOGGED_IN: 'notLoggedIn',\n    /** @type {string} 縲後☆縺占ウシ蜈・縲阪′蜿ッ閭ス縺ァ縺ゅk蝣エ蜷� */\n    OK: 'ok',\n    /** @type {string} 繧ィ繝ゥ繝シ縺檎匱逕溘@縺溷�エ蜷� */\n    ERROR: 'error',\n    /** @type {string} 蝠�刀縺瑚ウシ蜈・荳榊庄縺ァ縺ゅk蝣エ蜷� */\n    CAN_NOT_BUY: 'canNotBuy',\n    /** @type {string} 逕ィ騾斐r縲後#閾ェ螳�畑縲阪↓螟画峩縺吶k縺薙→縺梧価隱阪&繧後◆蝣エ蜷� */\n    CHANGE_USES_OK: 'changeUsesOk',\n    /** @type {string} 逕ィ騾斐r縲後#閾ェ螳�畑縲阪↓螟画峩縺吶k縺薙→縺梧価隱阪&繧後↑縺九▲縺溷�エ蜷� */\n    CHANGE_USES_NG: 'changeUsesNg',\n    /** @type {string} 荳肴�縺ェ迥カ諷� */\n    UNKNOWN: 'unknown',\n};\n\n/** @type {object} 縲後☆縺占ウシ蜈・縲咲畑縺ョ繝「繝シ繝€繝ォ繝€繧、繧「繝ュ繧ー */\nconst CO_BUY_NOW_MODAL = {\n    /** @type {string} 繧ィ繝ゥ繝シ縺檎匱逕溘@縺溷�エ蜷医�繝€繧、繧「繝ュ繧ー縺ョID */\n    ERROR: 'coBuyNowErrorModal',\n    /** @type {string} 蝠�刀縺瑚ウシ蜈・荳榊庄縺ァ縺ゅk蝣エ蜷医�繝€繧、繧「繝ュ繧ー縺ョID */\n    CAN_NOT_BUY: 'coBuyNowCanNotBuyModal',\n    /** @type {string} 逕ィ騾斐r螟画峩縺吶k蝣エ蜷医�繝€繧、繧「繝ュ繧ー縺ョID */\n    CHANGE_USES: 'coBuyNowChangeUsesModal',\n};\n\n/**\n * 繝「繝シ繝€繝ォ縺ョ菴咲スョ繧帝←蛻�↑菴咲スョ縺ォ遘サ蜍輔☆繧九€�\n * 繝「繝シ繝€繝ォ縺檎音螳壹�隕∫エ�蜀�↓驟咲スョ縺輔l縺ヲ縺�k蝣エ蜷医↓縲√�繧ソ繝ウ繧呈款縺帙↑縺�こ繝シ繧ケ縺檎函縺倥k縺ョ繧帝亟縺舌%縺ィ縺檎岼逧�€�\n *\n * @param {string} modalId - 繝「繝シ繝€繝ォ縺ョID 萓�: `'coBuyNowErrorModal'`\n * @returns {void}\n */\nfunction locateModal(modalId) {\n    const $modal = $(`#${modalId}`);\n    if ($modal.length === 0) {\n        return;\n    }\n    const $body = $(document.body);\n    const bodyTagName = $body.prop('tagName');\n    const $parent = $modal.parent();\n    const parentTagName = $parent.prop('tagName');\n    if (bodyTagName === parentTagName) {\n        // --- 繧ソ繧ー蜷阪′蜷後§蝣エ蜷�(縺ゥ縺。繧峨bBODY縺ョ蝣エ蜷�)\n        // 縺吶〒縺ォbody逶エ荳九↓繝「繝シ繝€繝ォ縺悟ュ伜惠縺吶k縺ィ縺ソ縺ェ縺励€∽ス輔b縺励↑縺Ыn        return;\n    }\n    // --- 繧ソ繧ー蜷阪′逡ー縺ェ繧句�エ蜷�\n    // body逶エ荳九↓繝「繝シ繝€繝ォ繧堤ァサ蜍輔☆繧欺n    $modal.detach().appendTo($body);\n}\n\n/**\n * POST騾∽ソ。繧貞ョ溯。後@縲√◎縺ョ邨先棡繧貞性繧€繧ェ繝悶ず繧ァ繧ッ繝医r霑斐☆縲�\n *\n * @param {string} actionUrl 縲後☆縺占ウシ蜈・縲阪し繝シ繝薙せ縺ョURL\n * @param {FormData} formData 縲後☆縺占ウシ蜈・縲阪し繝シ繝薙せ縺ォ騾∽ソ。縺吶k繝輔か繝シ繝�繝��繧ソ\n * @param {boolean} 繝輔か繝シ繝�繝��繧ソ蜀�↓CSRF繝医�繧ッ繝ウ縺悟ュ伜惠縺吶k縺句凄縺欺n * @returns {object} POST騾∽ソ。繧貞ョ溯。後@縺溽オ先棡繧定。ィ縺吶が繝悶ず繧ァ繧ッ繝�\n * (萓�) CSRF繝医�繧ッ繝ウ繝√ぉ繝�け縺ァ繧ィ繝ゥ繝シ縺檎匱逕溘@縺溷�エ蜷�(縲靴SRF-AjaxFail縲阪′霑斐☆繝ャ繧ケ繝昴Φ繧ケ縺ォ隧イ蠖�)\n * ```js\n * {\n *     response: {\n *         csrfError: true,\n *         redirectUrl: '/on/demandware.store/Sites-taneya-Site/ja_JP/CSRF-Fail', // CSRF繧ィ繝ゥ繝シ逕サ髱「縺ョURL縺後そ繝�ヨ縺輔l繧欺n *     },\n *     actionResult: 'csrfFail', // 縲靴O_BUY_NOW_ACTION_RESULT.CSRF_FAIL縲阪↓隧イ蠖貼n * }\n * ```\n * (萓�) 譛ェ繝ュ繧ー繧、繝ウ縺ョ蝣エ蜷�(CO_BUY_NOW_RESPONSE_RESULT.NOT_LOGGED_IN)\n * ```js\n * {\n *     response: {\n *         result: 'notLoggedIn', // 縲靴O_BUY_NOW_RESPONSE_RESULT.NOT_LOGGED_ID縲阪↓隧イ蠖貼n *         redirectUrl: '/on/demandware.store/Sites-taneya-Site/ja_JP/Login-Show?rurl=102', // 繝ュ繧ー繧、繝ウ逕サ髱「縺ョURL縺後そ繝�ヨ縺輔l繧欺n *         originUrl: null, // null縺ィ縺ェ繧欺n *     },\n *     actionResult: 'notLoggedIn', // 縲靴O_BUY_NOW_ACTION_RESULT.NOT_LOGGED_ID縲阪↓隧イ蠖貼n * }\n * ```\n * (萓�) 縲後☆縺占ウシ蜈・縲阪′蜿ッ閭ス縺ァ縺ゅk蝣エ蜷�(CO_BUY_NOW_RESPONSE_RESULT.OK)\n * ```js\n * {\n *     response: {\n *         result: 'ok', // 縲靴O_BUY_NOW_RESPONSE_RESULT.OK縲阪↓隧イ蠖貼n *         redirectUrl: '/on/demandware.store/Sites-taneya-Site/ja_JP/Co-Start?stage=confirmation', // 繝√ぉ繝�け繧「繧ヲ繝育判髱「縺ョURL縺後そ繝�ヨ縺輔l繧欺n *         originUrl: '/on/demandware.store/Sites-taneya-Site/ja_JP/Product-Show?pid=12567', // 蜈�判髱「縺ョURL縺後そ繝�ヨ縺輔l繧欺n *     },\n *     actionResult: 'ok', // 縲靴O_BUY_NOW_ACTION_RESULT.OK縲阪↓隧イ蠖貼n * }\n * ```\n * (萓�) 繧ィ繝ゥ繝シ縺檎匱逕溘@縺溷�エ蜷� (CO_BUY_NOW_RESPONSE_RESULT.ERROR)\n * ```js\n * {\n *     response: {\n *         result: 'error', // 縲靴O_BUY_NOW_RESPONSE_RESULT.ERROR縲阪↓隧イ蠖貼n *         redirectUrl: null, // null縺ィ縺ェ繧欺n *         originUrl: '/on/demandware.store/Sites-taneya-Site/ja_JP/Product-Show?pid=12567', // 蜈�判髱「縺ョURL縺後そ繝�ヨ縺輔l繧欺n *         message: '繧ィ繝ゥ繝シ縺檎匱逕溘@縺セ縺励◆縲�', // 繧ィ繝ゥ繝シ繝。繝�そ繝シ繧ク縺後そ繝�ヨ縺輔l繧欺n *     },\n *     actionResult: 'error', // 縲靴O_BUY_NOW_ACTION_RESULT.ERROR縲阪↓隧イ蠖貼n * }\n * ```\n * (萓�) 蝠�刀縺瑚ウシ蜈・荳榊庄縺ァ縺ゅk蝣エ蜷� (CO_BUY_NOW_RESPONSE_RESULT.CAN_NOT_BUY)\n * ```js\n * {\n *     response: {\n *         result: 'canNotBuy', // 縲靴O_BUY_NOW_RESPONSE_RESULT.CAN_NOT_BUY縲阪↓隧イ蠖貼n *         redirectUrl: null, // null縺ィ縺ェ繧欺n *         originUrl: '/on/demandware.store/Sites-taneya-Site/ja_JP/Product-Show?pid=12567', // 縲経riginUrl縲阪r蜈�↓菴懈�縺励◆URL縺後そ繝�ヨ縺輔l繧欺n *     },\n *     actionResult: 'canNotBuy', // 縲靴O_BUY_NOW_ACTION_RESULT.CAN_NOT_BUY縲阪↓隧イ蠖貼n * }\n * ```\n * (萓�) 逕ィ騾斐r縲後#閾ェ螳�畑縲阪↓螟画峩縺吶k蠢�ヲ√′縺ゅk蝣エ蜷� (CO_BUY_NOW_RESPONSE_RESULT.CHANGE_USES)\n * ```js\n * {\n *     response: {\n *         result: 'changeUses', // 縲靴O_BUY_NOW_RESPONSE_RESULT.CHANGE_USES縲阪↓隧イ蠖貼n *         redirectUrl: null, // null縺ィ縺ェ繧欺n *         originUrl: '/on/demandware.store/Sites-taneya-Site/ja_JP/Product-Show?pid=12567', // 縲経riginUrl縲阪r蜈�↓菴懈�縺励◆URL縺後そ繝�ヨ縺輔l繧欺n *     },\n *     actionResult: 'changeUsesOk', // 縲靴O_BUY_NOW_ACTION_RESULT.CHANGE_USES_OK縲阪↓隧イ蠖薙€ゅ€靴O_BUY_NOW_ACTION_RESULT.CHANGE_USES_NG縲阪�蝣エ蜷医�縲慶hangeUsesNg縲阪→縺ェ繧九€�\n * }\n * ```\n */\nasync function doCoBuyNowServiceAction(actionUrl, formData) {\n    let response;\n    let actionResult;\n    try {\n        $.spinner().start();\n        // 縲後☆縺占ウシ蜈・縲阪し繝シ繝薙せ繧貞他縺ウ蜃コ縺兔n        response = await postForm(actionUrl, formData);\n        if (response.csrfError) {\n            // --- 縲靴SRF-AjaxFail縲阪↓繧医▲縺ヲCSRF繧ィ繝ゥ繝シ縺瑚ソ斐&繧後◆蝣エ蜷�\n            actionResult = CO_BUY_NOW_ACTION_RESULT.CSRF_FAIL;\n        } else {\n            const responseResult = response.result;\n            if (responseResult === CO_BUY_NOW_RESPONSE_RESULT.NOT_LOGGED_IN) {\n                // --- 縲系otLoggedIn縲阪�蝣エ蜷�\n                actionResult = CO_BUY_NOW_ACTION_RESULT.NOT_LOGGED_IN;\n            } else if (responseResult === CO_BUY_NOW_RESPONSE_RESULT.OK) {\n                // --- 縲経k縲阪�蝣エ蜷�\n                actionResult = CO_BUY_NOW_ACTION_RESULT.OK;\n            } else if (responseResult === CO_BUY_NOW_RESPONSE_RESULT.ERROR) {\n                // --- 縲憩rror縲阪�蝣エ蜷�\n                const modalId = CO_BUY_NOW_MODAL.ERROR;\n                locateModal(modalId);\n                // 繧ィ繝ゥ繝シ繝。繝�そ繝シ繧ク繧偵そ繝�ヨ縺吶k\n                const message = response.message;\n                const $modal = $(`#${modalId}`);\n                const coBuyNowErrorMessageId = 'coBuyNowErrorMessage';\n                const $coBuyNowErrorMessage = $(`#${coBuyNowErrorMessageId}`, $modal);\n                const XStringUtils = require('sswd_base/util').XStringUtils;\n                $coBuyNowErrorMessage.text(`${XStringUtils.encodeHtml(message)}`);\n                // 繝€繧、繧「繝ュ繧ー繧定。ィ遉コ縺吶k\n                await confirm(modalId);\n                actionResult = CO_BUY_NOW_ACTION_RESULT.ERROR;\n            } else if (responseResult === CO_BUY_NOW_RESPONSE_RESULT.CAN_NOT_BUY) {\n                // --- 縲慶anNotBuy縲阪�蝣エ蜷�\n                // 繝€繧、繧「繝ュ繧ー繧定。ィ遉コ縺吶k\n                const modalId = CO_BUY_NOW_MODAL.CAN_NOT_BUY;\n                locateModal(modalId);\n                await confirm(modalId);\n                actionResult = CO_BUY_NOW_ACTION_RESULT.CAN_NOT_BUY;\n            } else if (responseResult === CO_BUY_NOW_RESPONSE_RESULT.CHANGE_USES) {\n                // --- 縲慶hangeUses縲阪�蝣エ蜷�\n                // 繝€繧、繧「繝ュ繧ー繧定。ィ遉コ縺吶k\n                const modalId = CO_BUY_NOW_MODAL.CHANGE_USES;\n                locateModal(modalId);\n                const confirmResult = await confirm(modalId);\n                if (confirmResult === CONFIRMATION.RESULT.OK) {\n                    // --- OK繝懊ち繝ウ縺梧款縺輔l縺溷�エ蜷�\n                    actionResult = CO_BUY_NOW_ACTION_RESULT.CHANGE_USES_OK;\n                } else {\n                    // --- OK繝懊ち繝ウ縺梧款縺輔l縺ェ縺九▲縺溷�エ蜷�\n                    actionResult = CO_BUY_NOW_ACTION_RESULT.CHANGE_USES_NG;\n                }\n            } else {\n                // --- 縺ゥ縺ョ譚。莉カ縺ォ繧ょ粋閾エ縺励↑縺九▲縺溷�エ蜷�\n                actionResult = CO_BUY_NOW_ACTION_RESULT.UNKNOWN;\n            }\n        }\n    } catch (err) {\n        response = null;\n        actionResult = CO_BUY_NOW_ACTION_RESULT.UNKNOWN;\n    } finally {\n        $.spinner().stop();\n    }\n    return {\n        response,\n        actionResult,\n    };\n}\n\n/**\n * 縲後☆縺占ウシ蜈・縲阪�Ajax繧オ繝シ繝薙せ繧貞他縺ウ蜃コ縺励€√◎縺ョ邨先棡縺ォ蠢懊§縺溷�逅�r螳溯。後☆繧九€�\n *\n * - 邨先棡縺後€靴SRF繝医�繧ッ繝ウ繝√ぉ繝�け繧ィ繝ゥ繝シ縲阪�蝣エ蜷�\n *     - CSRF繧ィ繝ゥ繝シ逕サ髱「縺ォ驕キ遘サ縺吶k縲�\n * - 邨先棡縺後€梧悴繝ュ繧ー繧、繝ウ縲阪�蝣エ蜷�\n *     - 縲後Ο繧ー繧、繝ウ縲咲判髱「縺ォ驕キ遘サ縺吶k縲�\n * - 邨先棡縺後€梧ュ」蟶ク縲阪�蝣エ蜷�\n *     - 縲後♀謾ッ謇輔>譁ケ豕輔€阪∪縺溘�縲後#豕ィ譁��螳ケ遒コ隱阪€咲判髱「縺ォ驕キ遘サ縺吶k縲�\n * - 邨先棡縺後€後お繝ゥ繝シ縲阪�蝣エ蜷�\n *     - 繝「繝シ繝€繝ォ繝€繧、繧「繝ュ繧ー縲慶o/coBuyNow/coBuyNowErrorModal.isml縲阪�蜀�ョケ繧定。ィ遉コ縺吶k縲�\n *     - 繝「繝シ繝€繝ォ繝€繧、繧「繝ュ繧ー繧帝哩縺倥k縺ィ縲√€経riginUrl縲阪�逕サ髱「縺ォ驕キ遘サ縺吶k縲�\n * - 邨先棡縺後€悟膚蜩√′雉シ蜈・荳榊庄縺ァ縺ゅk縲阪�蝣エ蜷�\n *     - 繝「繝シ繝€繝ォ繝€繧、繧「繝ュ繧ー縲慶o/coBuyNow/coBuyNowCanNotBuyModal.isml縲阪r陦ィ遉コ縺吶k縲�\n *     - 繝「繝シ繝€繝ォ繝€繧、繧「繝ュ繧ー繧帝哩縺倥k縺ィ縲√€経riginUrl縲阪�逕サ髱「縺ォ驕キ遘サ縺吶k縲�\n * - 邨先棡縺後€檎畑騾泌、画峩縲阪�蝣エ蜷�\n *     - 繝「繝シ繝€繝ォ繝€繧、繧「繝ュ繧ー縲慶o/coBuyNow/coBuyNowChangeUsesModal.isml縲阪r陦ィ遉コ縺吶k縲�\n *          - 逕ィ騾泌、画峩繧定ィア蜿ッ縺励◆蝣エ蜷�\n *              - 縲掲orceChangeUses縲阪r縲荊rue縲阪↓縺励※蜀榊コヲ縲後☆縺占ウシ蜈・縲阪�Ajax繧オ繝シ繝薙せ繧貞他縺ウ蜃コ縺吶€�\n *          - 逕ィ騾泌、画峩繧定ィア蜿ッ縺励↑縺九▲縺溷�エ蜷�\n *              - 縺薙%縺ァ邨ゆコ�☆繧九€�\n *\n * @param {object} buyNowObj - 縲後☆縺占ウシ蜈・縲阪�Ajax繧オ繝シ繝薙せ縺ォ騾∽ソ。縺吶k繝��繧ソ繧貞性繧€繧ェ繝悶ず繧ァ繧ッ繝医€ゅヵ繧ゥ繝シ繝�螳夂セゥ縲慶oBuyNow.xml縲阪↓蟇セ蠢懊☆繧九€�\n * - `originUrl`: <縲後☆縺占ウシ蜈・縲阪い繧ッ繧キ繝ァ繝ウ逋コ逕溷�縺ョ逕サ髱「縺ョURL縲ゅ€�/縲榊ァ九∪繧翫→縺吶k縲�>\n * - `productId`: <繧ォ繝シ繝医↓霑ス蜉�縺吶k蝠�刀縺ョID>\n * - `quantity`: <繧ォ繝シ繝医↓霑ス蜉�縺吶k蝠�刀縺ョ謨ー驥�>\n * - `forceChangeUses`: <逕ィ騾斐r蠑キ蛻カ逧�↓螟画峩縺吶k縺句凄縺�>\n * (萓�) productId縺翫h縺ウquantity縺碁€∽ソ。縺輔l縺溷�エ蜷�\n * ```js\n * {\n *     originUrl: '/on/demandware.store/Sites-taneya-Site/ja_JP/Product-Show?pid=12567',\n *     productId: '12567',\n *     quantity: 2,\n *     forceChangeUses: false,\n * }\n * (萓�) queryString, productId, quantity縺碁€∽ソ。縺輔l縺ェ縺九▲縺溷�エ蜷�(蛟、縺ッnull縺ィ縺ェ繧�)\n * ```js\n * {\n *     originUrl: '/on/demandware.store/Sites-taneya-Site/ja_JP/Product-Show?pid=12567',\n *     productId: null,\n *     quantity: null,\n *     forceChangeUses: false,\n * }\n * ```\n * @returns {void}\n */\nasync function execBuyNow(buyNowObj) {\n    // CSRF繝医�繧ッ繝ウ繧貞叙蠕励☆繧欺n    const csrfObject = getCsrfObject();\n    const csrfTokenName = csrfObject.tokenName;\n    const csrfTokenValue = csrfObject.token;\n\n    // 縲後☆縺占ウシ蜈・縲咲畑縺ョFormData繧剃ス懈�縺吶k\n    const coBuyNowFormData = new FormData();\n    coBuyNowFormData.append('originUrl', buyNowObj.originUrl || '');\n    coBuyNowFormData.append('productId', buyNowObj.productId || '');\n    coBuyNowFormData.append('quantity', buyNowObj.quantity || '');\n    coBuyNowFormData.append(\n        'forceChangeUses',\n        buyNowObj.forceChangeUses === true ? 'true' : 'false'\n    );\n    coBuyNowFormData.append(csrfTokenName, csrfTokenValue);\n\n    // 縲後☆縺占ウシ蜈・縲阪ヵ繧ゥ繝シ繝�縺ョ騾∽ソ。蜈医�URL繧貞叙蠕励☆繧欺n    const $coBuyNowPartsInfo = $('#coBuyNowPartsInfo');\n    const coBuyNowActionUrl = $coBuyNowPartsInfo.data('url');\n    // 縲後☆縺占ウシ蜈・縲阪し繝シ繝薙せ繧貞他縺ウ蜃コ縺兔n    const {response, actionResult} = await doCoBuyNowServiceAction(\n        coBuyNowActionUrl,\n        coBuyNowFormData\n    );\n\n    if (actionResult === CO_BUY_NOW_ACTION_RESULT.CHANGE_USES_OK) {\n        // --- 縲檎畑騾斐r縲後#閾ェ螳�畑縲阪↓螟画峩縺吶k縺薙→縺梧価隱阪&繧後◆蝣エ蜷�\n        // forceChangeUses繧稚rue縺ォ險ュ螳壹@縺歟uyNowOb繧呈眠縺溘↓菴懈�縺吶k\n        const reBuyNowObj = {};\n        Object.assign(reBuyNowObj, buyNowObj);\n        reBuyNowObj.forceChangeUses = true;\n        // 譛ャ髢「謨ー繧貞�蠎ヲ蜻シ縺ウ蜃コ縺兔n        await execBuyNow(reBuyNowObj);\n        return;\n    }\n    let redirectUrl;\n    if (\n        actionResult === CO_BUY_NOW_ACTION_RESULT.CSRF_FAIL ||\n        actionResult === CO_BUY_NOW_ACTION_RESULT.NOT_LOGGED_IN ||\n        actionResult === CO_BUY_NOW_ACTION_RESULT.OK\n    ) {\n        // --- 譛ェ繝ュ繧ー繧、繝ウ縺セ縺溘�縲後☆縺占ウシ蜈・縲阪′蜿ッ閭ス縺ァ縺ゅk蝣エ蜷�\n        // redirectUrl縺ョURL縺ォ遘サ蜍輔☆繧欺n        redirectUrl = response.redirectUrl;\n    } else {\n        // --- 縺昴l莉・螟悶�蝣エ蜷�\n        const $coBuyNowInfo = $('#coBuyNowInfo');\n        const topPageUrl = $coBuyNowInfo.data('co-top-page-url');\n        // 蜈��逕サ髱「縺悟ュ伜惠縺吶k蝣エ蜷医�縺昴%縺ォ縲∝ュ伜惠縺励↑縺��エ蜷医�繝医ャ繝励↓遘サ蜍輔☆繧欺n        redirectUrl = response.originUrl || topPageUrl || null;\n    }\n    if (redirectUrl) {\n        // 驕キ遘サ縺悟ョ御コ�☆繧九∪縺ァ縲√せ繝斐リ繝シ縺ッ陦ィ遉コ縺励◆縺セ縺セ縺ィ縺吶k\n        $.spinner().start();\n        window.location.href = redirectUrl;\n    }\n}\n\nmodule.exports = {\n    execBuyNow,\n};\n","'use strict';\nvar focusHelper = require('../components/focus');\n\n/**\n * Retrieves the relevant pid value\n * @param {jquery} $el - DOM container for a given add to cart button\n * @return {string} - value to be used when adding product to cart\n */\nfunction getPidValue($el) {\n    var pid;\n\n    if ($('#quickViewModal').hasClass('show') && !$('.product-set').length) {\n        pid = $($el).closest('.modal-content').find('.product-quickview').data('pid');\n    } else if ($('.product-set-detail').length || $('.product-set').length) {\n        pid = $($el).closest('.product-detail').find('.product-id').text();\n    } else {\n        pid = $('.product-detail:not(\".bundle-item\")').data('pid');\n    }\n\n    return pid;\n}\n\n/**\n * Retrieve contextual quantity selector\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {jquery} - quantity selector DOM container\n */\nfunction getQuantitySelector($el) {\n    var quantitySelected;\n    if ($el && $('.set-items').length) {\n        quantitySelected = $($el).closest('.product-detail').find('.quantity-select');\n    } else if ($el && $('.product-bundle').length) {\n        var quantitySelectedModal = $($el).closest('.modal-footer').find('.quantity-select');\n        var quantitySelectedPDP = $($el).closest('.bundle-footer').find('.quantity-select');\n        if (quantitySelectedModal.val() === undefined) {\n            quantitySelected = quantitySelectedPDP;\n        } else {\n            quantitySelected = quantitySelectedModal;\n        }\n    } else {\n        quantitySelected = $('.quantity-select');\n    }\n    return quantitySelected;\n}\n\n/**\n * Retrieves the value associated with the Quantity pull-down menu\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {string} - value found in the quantity input\n */\nfunction getQuantitySelected($el) {\n    return getQuantitySelector($el).val();\n}\n\n/**\n * Process the attribute values for an attribute that has image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n *     selected.  If there is no variant that corresponds to a specific combination of attribute\n *     values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction processSwatchValues(attr, $productContainer, msgs) {\n    attr.values.forEach(function (attrValue) {\n        var $attrValue = $productContainer.find('[data-attr=\"' + attr.id + '\"] [data-attr-value=\"' +\n            attrValue.value + '\"]');\n        var $swatchButton = $attrValue.parent();\n\n        if (attrValue.selected) {\n            $attrValue.addClass('selected');\n            $attrValue.siblings('.selected-assistive-text').text(msgs.assistiveSelectedText);\n        } else {\n            $attrValue.removeClass('selected');\n            $attrValue.siblings('.selected-assistive-text').empty();\n        }\n\n        if (attrValue.url) {\n            $swatchButton.attr('data-url', attrValue.url);\n        } else {\n            $swatchButton.removeAttr('data-url');\n        }\n\n        // Disable if not selectable\n        $attrValue.removeClass('selectable unselectable');\n\n        $attrValue.addClass(attrValue.selectable ? 'selectable' : 'unselectable');\n    });\n}\n\n/**\n * Process attribute values associated with an attribute that does not have image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n *     selected.  If there is no variant that corresponds to a specific combination of attribute\n *     values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction processNonSwatchValues(attr, $productContainer) {\n    var $attr = '[data-attr=\"' + attr.id + '\"]';\n    var $defaultOption = $productContainer.find($attr + ' .select-' + attr.id + ' option:first');\n    $defaultOption.attr('value', attr.resetUrl);\n\n    attr.values.forEach(function (attrValue) {\n        var $attrValue = $productContainer\n            .find($attr + ' [data-attr-value=\"' + attrValue.value + '\"]');\n        $attrValue.attr('value', attrValue.url)\n            .removeAttr('disabled');\n\n        if (!attrValue.selectable) {\n            $attrValue.attr('disabled', true);\n        }\n    });\n}\n\n/**\n * Routes the handling of attribute processing depending on whether the attribute has image\n *     swatches or not\n *\n * @param {Object} attrs - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {jQuery} $productContainer - DOM element for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction updateAttrs(attrs, $productContainer, msgs) {\n    // Currently, the only attribute type that has image swatches is Color.\n    var attrsWithSwatches = ['color'];\n\n    attrs.forEach(function (attr) {\n        if (attrsWithSwatches.indexOf(attr.id) > -1) {\n            processSwatchValues(attr, $productContainer, msgs);\n        } else {\n            processNonSwatchValues(attr, $productContainer);\n        }\n    });\n}\n\n/**\n * Updates the availability status in the Product Detail Page\n *\n * @param {Object} response - Ajax response object after an\n *                            attribute value has been [de]selected\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction updateAvailability(response, $productContainer) {\n    var availabilityValue = '';\n    var availabilityMessages = response.product.availability.messages;\n    if (!response.product.readyToOrder) {\n        availabilityValue = '<li><div>' + response.resources.info_selectforstock + '</div></li>';\n    } else {\n        availabilityMessages.forEach(function (message) {\n            availabilityValue += '<li><div>' + message + '</div></li>';\n        });\n    }\n\n    $($productContainer).trigger('product:updateAvailability', {\n        product: response.product,\n        $productContainer: $productContainer,\n        message: availabilityValue,\n        resources: response.resources\n    });\n}\n\n/**\n * Generates html for product attributes section\n *\n * @param {array} attributes - list of attributes\n * @return {string} - Compiled HTML\n */\nfunction getAttributesHtml(attributes) {\n    if (!attributes) {\n        return '';\n    }\n\n    var html = '';\n\n    attributes.forEach(function (attributeGroup) {\n        if (attributeGroup.ID === 'mainAttributes') {\n            attributeGroup.attributes.forEach(function (attribute) {\n                html += '<div class=\"attribute-values\">' + attribute.label + ': '\n                    + attribute.value + '</div>';\n            });\n        }\n    });\n\n    return html;\n}\n\n/**\n * @typedef UpdatedOptionValue\n * @type Object\n * @property {string} id - Option value ID for look up\n * @property {string} url - Updated option value selection URL\n */\n\n/**\n * @typedef OptionSelectionResponse\n * @type Object\n * @property {string} priceHtml - Updated price HTML code\n * @property {Object} options - Updated Options\n * @property {string} options.id - Option ID\n * @property {UpdatedOptionValue[]} options.values - Option values\n */\n\n/**\n * Updates DOM using post-option selection Ajax response\n *\n * @param {OptionSelectionResponse} optionsHtml - Ajax response optionsHtml from selecting a product option\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction updateOptions(optionsHtml, $productContainer) {\n\t// Update options\n    $productContainer.find('.product-options').empty().html(optionsHtml);\n}\n\n/**\n * Dynamically creates Bootstrap carousel from response containing images\n * @param {Object[]} imgs - Array of large product images,along with related information\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction createCarousel(imgs, $productContainer) {\n    var carousel = $productContainer.find('.carousel');\n    $(carousel).carousel('dispose');\n    var carouselId = $(carousel).attr('id');\n    $(carousel).empty().append('<ol class=\"carousel-indicators\"></ol><div class=\"carousel-inner\" role=\"listbox\"></div><a class=\"carousel-control-prev\" href=\"#' + carouselId + '\" role=\"button\" data-slide=\"prev\"><span class=\"fa icon-prev\" aria-hidden=\"true\"></span><span class=\"sr-only\">' + $(carousel).data('prev') + '</span></a><a class=\"carousel-control-next\" href=\"#' + carouselId + '\" role=\"button\" data-slide=\"next\"><span class=\"fa icon-next\" aria-hidden=\"true\"></span><span class=\"sr-only\">' + $(carousel).data('next') + '</span></a>');\n    for (var i = 0; i < imgs.length; i++) {\n        $('<div class=\"carousel-item\"><img src=\"' + imgs[i].url + '\" class=\"d-block img-fluid\" alt=\"' + imgs[i].alt + ' image number ' + parseInt(imgs[i].index, 10) + '\" title=\"' + imgs[i].title + '\" itemprop=\"image\" /></div>').appendTo($(carousel).find('.carousel-inner'));\n        $('<li data-target=\"#' + carouselId + '\" data-slide-to=\"' + i + '\" class=\"\"></li>').appendTo($(carousel).find('.carousel-indicators'));\n    }\n    $($(carousel).find('.carousel-item')).first().addClass('active');\n    $($(carousel).find('.carousel-indicators > li')).first().addClass('active');\n    if (imgs.length === 1) {\n        $($(carousel).find('.carousel-indicators, a[class^=\"carousel-control-\"]')).detach();\n    }\n    $(carousel).carousel();\n    $($(carousel).find('.carousel-indicators')).attr('aria-hidden', true);\n}\n\n/**\n * Parses JSON from Ajax call made whenever an attribute value is [de]selected\n * @param {Object} response - response from Ajax call\n * @param {Object} response.product - Product object\n * @param {string} response.product.id - Product ID\n * @param {Object[]} response.product.variationAttributes - Product attributes\n * @param {Object[]} response.product.images - Product images\n * @param {boolean} response.product.hasRequiredAttrsSelected - Flag as to whether all required\n *     attributes have been selected.  Used partially to\n *     determine whether the Add to Cart button can be enabled\n * @param {jQuery} $productContainer - DOM element for a given product.\n */\nfunction handleVariantResponse(response, $productContainer) {\n    var isChoiceOfBonusProducts =\n        $productContainer.parents('.choose-bonus-product-dialog').length > 0;\n    var isVaraint;\n    if (response.product.variationAttributes) {\n        updateAttrs(response.product.variationAttributes, $productContainer, response.resources);\n        isVaraint = response.product.productType === 'variant';\n        if (isChoiceOfBonusProducts && isVaraint) {\n            $productContainer.parent('.bonus-product-item')\n                .data('pid', response.product.id);\n\n            $productContainer.parent('.bonus-product-item')\n                .data('ready-to-order', response.product.readyToOrder);\n        }\n    }\n\n    // Update primary images\n    var primaryImageUrls = response.product.images.large;\n    createCarousel(primaryImageUrls, $productContainer);\n\n    // Update pricing\n    if (!isChoiceOfBonusProducts) {\n        var $priceSelector = $('.prices .price', $productContainer).length\n            ? $('.prices .price', $productContainer)\n            : $('.prices .price');\n        $priceSelector.replaceWith(response.product.price.html);\n    }\n\n    // Update promotions\n    $productContainer.find('.promotions').empty().html(response.product.promotionsHtml);\n\n    updateAvailability(response, $productContainer);\n\n    if (isChoiceOfBonusProducts) {\n        var $selectButton = $productContainer.find('.select-bonus-product');\n        $selectButton.trigger('bonusproduct:updateSelectButton', {\n            product: response.product, $productContainer: $productContainer\n        });\n    } else {\n        // Enable \"Add to Cart\" button if all required attributes have been selected\n        $('button.add-to-cart, button.add-to-cart-global, button.update-cart-product-global').trigger('product:updateAddToCart', {\n            product: response.product, $productContainer: $productContainer\n        }).trigger('product:statusUpdate', response.product);\n    }\n\n    // Update attributes\n    $productContainer.find('.main-attributes').empty()\n        .html(getAttributesHtml(response.product.attributes));\n}\n\n/**\n * @typespec UpdatedQuantity\n * @type Object\n * @property {boolean} selected - Whether the quantity has been selected\n * @property {string} value - The number of products to purchase\n * @property {string} url - Compiled URL that specifies variation attributes, product ID, options,\n *     etc.\n */\n\n/**\n * Updates the quantity DOM elements post Ajax call\n * @param {UpdatedQuantity[]} quantities -\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction updateQuantities(quantities, $productContainer) {\n    if ($productContainer.parent('.bonus-product-item').length <= 0) {\n        var optionsHtml = quantities.map(function (quantity) {\n            var selected = quantity.selected ? ' selected ' : '';\n            return '<option value=\"' + quantity.value + '\"  data-url=\"' + quantity.url + '\"' +\n                selected + '>' + quantity.value + '</option>';\n        }).join('');\n        getQuantitySelector($productContainer).empty().html(optionsHtml);\n    }\n}\n\n/**\n * updates the product view when a product attribute is selected or deselected or when\n *         changing quantity\n * @param {string} selectedValueUrl - the Url for the selected variation value\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction attributeSelect(selectedValueUrl, $productContainer) {\n    if (selectedValueUrl) {\n        $('body').trigger('product:beforeAttributeSelect',\n            { url: selectedValueUrl, container: $productContainer });\n\n        $.ajax({\n            url: selectedValueUrl,\n            method: 'GET',\n            success: function (data) {\n                handleVariantResponse(data, $productContainer);\n                updateOptions(data.product.optionsHtml, $productContainer);\n                updateQuantities(data.product.quantities, $productContainer);\n                $('body').trigger('product:afterAttributeSelect',\n                    { data: data, container: $productContainer });\n                $.spinner().stop();\n            },\n            error: function () {\n                $.spinner().stop();\n            }\n        });\n    }\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @return {string} - The provided URL to use when adding a product to the cart\n */\nfunction getAddToCartUrl() {\n    return $('.add-to-cart-url').val();\n}\n\n/**\n * Parses the html for a modal window\n * @param {string} html - representing the body and footer of the modal window\n *\n * @return {Object} - Object with properties body and footer.\n */\nfunction parseHtml(html) {\n    var $html = $('<div>').append($.parseHTML(html));\n\n    var body = $html.find('.choice-of-bonus-product');\n    var footer = $html.find('.modal-footer').children();\n\n    return { body: body, footer: footer };\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @param {Object} data - data object used to fill in dynamic portions of the html\n */\nfunction chooseBonusProducts(data) {\n    $('.modal-body').spinner().start();\n\n    if ($('#chooseBonusProductModal').length !== 0) {\n        $('#chooseBonusProductModal').remove();\n    }\n    var bonusUrl;\n    if (data.bonusChoiceRuleBased) {\n        bonusUrl = data.showProductsUrlRuleBased;\n    } else {\n        bonusUrl = data.showProductsUrlListBased;\n    }\n\n    var htmlString = '<!-- Modal -->'\n        + '<div class=\"modal fade\" id=\"chooseBonusProductModal\" tabindex=\"-1\" role=\"dialog\">'\n        + '<span class=\"enter-message sr-only\" ></span>'\n        + '<div class=\"modal-dialog choose-bonus-product-dialog\" '\n        + 'data-total-qty=\"' + data.maxBonusItems + '\"'\n        + 'data-UUID=\"' + data.uuid + '\"'\n        + 'data-pliUUID=\"' + data.pliUUID + '\"'\n        + 'data-addToCartUrl=\"' + data.addToCartUrl + '\"'\n        + 'data-pageStart=\"0\"'\n        + 'data-pageSize=\"' + data.pageSize + '\"'\n        + 'data-moreURL=\"' + data.showProductsUrlRuleBased + '\"'\n        + 'data-bonusChoiceRuleBased=\"' + data.bonusChoiceRuleBased + '\">'\n        + '<!-- Modal content-->'\n        + '<div class=\"modal-content\">'\n        + '<div class=\"modal-header\">'\n        + '    <span class=\"\">' + data.labels.selectprods + '</span>'\n        + '    <button type=\"button\" class=\"close pull-right\" data-dismiss=\"modal\">'\n        + '        <span aria-hidden=\"true\">&times;</span>'\n        + '        <span class=\"sr-only\"> </span>'\n        + '    </button>'\n        + '</div>'\n        + '<div class=\"modal-body\"></div>'\n        + '<div class=\"modal-footer\"></div>'\n        + '</div>'\n        + '</div>'\n        + '</div>';\n    $('body').append(htmlString);\n    $('.modal-body').spinner().start();\n\n    $.ajax({\n        url: bonusUrl,\n        method: 'GET',\n        dataType: 'json',\n        success: function (response) {\n            var parsedHtml = parseHtml(response.renderedTemplate);\n            $('#chooseBonusProductModal .modal-body').empty();\n            $('#chooseBonusProductModal .enter-message').text(response.enterDialogMessage);\n            $('#chooseBonusProductModal .modal-header .close .sr-only').text(response.closeButtonText);\n            $('#chooseBonusProductModal .modal-body').html(parsedHtml.body);\n            $('#chooseBonusProductModal .modal-footer').html(parsedHtml.footer);\n            $('#chooseBonusProductModal').modal('show');\n            $.spinner().stop();\n        },\n        error: function () {\n            $.spinner().stop();\n        }\n    });\n}\n\n/**\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\n * @param {string} response - ajax response from clicking the add to cart button\n */\nfunction handlePostCartAdd(response) {\n    $('.minicart').trigger('count:update', response);\n    var messageType = response.error ? 'alert-danger' : 'alert-success';\n    // show add to cart toast\n    if (response.newBonusDiscountLineItem\n        && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\n        chooseBonusProducts(response.newBonusDiscountLineItem);\n    } else {\n        if ($('.add-to-cart-messages').length === 0) {\n            $('body').append(\n                '<div class=\"add-to-cart-messages\"></div>'\n            );\n        }\n\n        $('.add-to-cart-messages').append(\n            '<div class=\"alert ' + messageType + ' add-to-basket-alert text-center\" role=\"alert\">'\n            + response.message\n            + '</div>'\n        );\n\n        setTimeout(function () {\n            $('.add-to-basket-alert').remove();\n        }, 5000);\n    }\n}\n\n/**\n * Retrieves the bundle product item ID's for the Controller to replace bundle master product\n * items with their selected variants\n *\n * @return {string[]} - List of selected bundle product item ID's\n */\nfunction getChildProducts() {\n    var childProducts = [];\n    $('.bundle-item').each(function () {\n        childProducts.push({\n            pid: $(this).find('.product-id').text(),\n            quantity: parseInt($(this).find('label.quantity').data('quantity'), 10)\n        });\n    });\n\n    return childProducts.length ? JSON.stringify(childProducts) : [];\n}\n\n/**\n * Retrieve product options\n *\n * @param {jQuery} $productContainer - DOM element for current product\n * @return {string} - Product options and their selected values\n */\nfunction getOptions($productContainer) {\n    var options = $productContainer\n        .find('.product-option')\n        .map(function () {\n            var $elOption = $(this).find('.options-select');\n            var urlValue = $elOption.val();\n            var selectedValueId = $elOption.find('option[value=\"' + urlValue + '\"]')\n                .data('value-id');\n            return {\n                optionId: $(this).data('option-id'),\n                selectedValueId: selectedValueId\n            };\n        }).toArray();\n\n    return JSON.stringify(options);\n}\n\n/**\n * Makes a call to the server to report the event of adding an item to the cart\n *\n * @param {string | boolean} url - a string representing the end point to hit so that the event can be recorded, or false\n */\nfunction miniCartReportingUrl(url) {\n    if (url) {\n        $.ajax({\n            url: url,\n            method: 'GET',\n            success: function () {\n                // reporting urls hit on the server\n            },\n            error: function () {\n                // no reporting urls hit on the server\n            }\n        });\n    }\n}\n\nmodule.exports = {\n    attributeSelect: attributeSelect,\n    methods: {\n        editBonusProducts: function (data) {\n            chooseBonusProducts(data);\n        }\n    },\n\n    focusChooseBonusProductModal: function () {\n        $('body').on('shown.bs.modal', '#chooseBonusProductModal', function () {\n            $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'true');\n            $('#chooseBonusProductModal .close').focus();\n        });\n    },\n\n    onClosingChooseBonusProductModal: function () {\n        $('body').on('hidden.bs.modal', '#chooseBonusProductModal', function () {\n            $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'false');\n        });\n    },\n\n    trapChooseBonusProductModalFocus: function () {\n        $('body').on('keydown', '#chooseBonusProductModal', function (e) {\n            var focusParams = {\n                event: e,\n                containerSelector: '#chooseBonusProductModal',\n                firstElementSelector: '.close',\n                lastElementSelector: '.add-bonus-products'\n            };\n            focusHelper.setTabNextFocus(focusParams);\n        });\n    },\n\n    colorAttribute: function () {\n        $(document).on('click', '[data-attr=\"color\"] button', function (e) {\n            e.preventDefault();\n\n            if ($(this).attr('disabled')) {\n                return;\n            }\n            var $productContainer = $(this).closest('.set-item');\n            if (!$productContainer.length) {\n                $productContainer = $(this).closest('.product-detail');\n            }\n\n            attributeSelect($(this).attr('data-url'), $productContainer);\n        });\n    },\n\n    selectAttribute: function () {\n        $(document).on('change', 'select[class*=\"select-\"], .options-select', function (e) {\n            e.preventDefault();\n\n            var $productContainer = $(this).closest('.set-item');\n            if (!$productContainer.length) {\n                $productContainer = $(this).closest('.product-detail');\n            }\n            attributeSelect(e.currentTarget.value, $productContainer);\n        });\n    },\n\n    availability: function () {\n        $(document).on('change', '.quantity-select', function (e) {\n            e.preventDefault();\n\n            var $productContainer = $(this).closest('.product-detail');\n            if (!$productContainer.length) {\n                $productContainer = $(this).closest('.modal-content').find('.product-quickview');\n            }\n\n            if ($('.bundle-items', $productContainer).length === 0) {\n                attributeSelect($(e.currentTarget).find('option:selected').data('url'),\n                    $productContainer);\n            }\n        });\n    },\n\n    addToCart: function () {\n        $(document).on('click', 'button.add-to-cart, button.add-to-cart-global', function () {\n            var addToCartUrl;\n            var pid;\n            var pidsObj;\n            var setPids;\n\n            $('body').trigger('product:beforeAddToCart', this);\n\n            if ($('.set-items').length && $(this).hasClass('add-to-cart-global')) {\n                setPids = [];\n\n                $('.product-detail').each(function () {\n                    if (!$(this).hasClass('product-set-detail')) {\n                        setPids.push({\n                            pid: $(this).find('.product-id').text(),\n                            qty: $(this).find('.quantity-select').val(),\n                            options: getOptions($(this))\n                        });\n                    }\n                });\n                pidsObj = JSON.stringify(setPids);\n            }\n\n            pid = getPidValue($(this));\n\n            var $productContainer = $(this).closest('.product-detail');\n            if (!$productContainer.length) {\n                $productContainer = $(this).closest('.quick-view-dialog').find('.product-detail');\n            }\n\n            addToCartUrl = getAddToCartUrl();\n\n            var form = {\n                pid: pid,\n                pidsObj: pidsObj,\n                childProducts: getChildProducts(),\n                quantity: getQuantitySelected($(this))\n            };\n\n            if (!$('.bundle-item').length) {\n                form.options = getOptions($productContainer);\n            }\n\n            $(this).trigger('updateAddToCartFormData', form);\n            if (addToCartUrl) {\n                $.ajax({\n                    url: addToCartUrl,\n                    method: 'POST',\n                    data: form,\n                    success: function (data) {\n                        handlePostCartAdd(data);\n                        $('body').trigger('product:afterAddToCart', data);\n                        $.spinner().stop();\n                        miniCartReportingUrl(data.reportingURL);\n                    },\n                    error: function () {\n                        $.spinner().stop();\n                    }\n                });\n            }\n        });\n    },\n    selectBonusProduct: function () {\n        $(document).on('click', '.select-bonus-product', function () {\n            var $choiceOfBonusProduct = $(this).parents('.choice-of-bonus-product');\n            var pid = $(this).data('pid');\n            var maxPids = $('.choose-bonus-product-dialog').data('total-qty');\n            var submittedQty = parseInt($choiceOfBonusProduct.find('.bonus-quantity-select').val(), 10);\n            var totalQty = 0;\n            $.each($('#chooseBonusProductModal .selected-bonus-products .selected-pid'), function () {\n                totalQty += $(this).data('qty');\n            });\n            totalQty += submittedQty;\n            var optionID = $choiceOfBonusProduct.find('.product-option').data('option-id');\n            var valueId = $choiceOfBonusProduct.find('.options-select option:selected').data('valueId');\n            if (totalQty <= maxPids) {\n                var selectedBonusProductHtml = ''\n                + '<div class=\"selected-pid row\" '\n                + 'data-pid=\"' + pid + '\"'\n                + 'data-qty=\"' + submittedQty + '\"'\n                + 'data-optionID=\"' + (optionID || '') + '\"'\n                + 'data-option-selected-value=\"' + (valueId || '') + '\"'\n                + '>'\n                + '<div class=\"col-sm-11 col-9 bonus-product-name\" >'\n                + $choiceOfBonusProduct.find('.product-name').html()\n                + '</div>'\n                + '<div class=\"col-1\"><i class=\"fa fa-times\" aria-hidden=\"true\"></i></div>'\n                + '</div>'\n                ;\n                $('#chooseBonusProductModal .selected-bonus-products').append(selectedBonusProductHtml);\n                $('.pre-cart-products').html(totalQty);\n                $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n            } else {\n                $('.selected-bonus-products .bonus-summary').addClass('alert-danger');\n            }\n        });\n    },\n    removeBonusProduct: function () {\n        $(document).on('click', '.selected-pid', function () {\n            $(this).remove();\n            var $selected = $('#chooseBonusProductModal .selected-bonus-products .selected-pid');\n            var count = 0;\n            if ($selected.length) {\n                $selected.each(function () {\n                    count += parseInt($(this).data('qty'), 10);\n                });\n            }\n\n            $('.pre-cart-products').html(count);\n            $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n        });\n    },\n    enableBonusProductSelection: function () {\n        $('body').on('bonusproduct:updateSelectButton', function (e, response) {\n            $('button.select-bonus-product', response.$productContainer).attr('disabled',\n                (!response.product.readyToOrder || !response.product.available));\n            var pid = response.product.id;\n            $('button.select-bonus-product', response.$productContainer).data('pid', pid);\n        });\n    },\n    showMoreBonusProducts: function () {\n        $(document).on('click', '.show-more-bonus-products', function () {\n            var url = $(this).data('url');\n            $('.modal-content').spinner().start();\n            $.ajax({\n                url: url,\n                method: 'GET',\n                success: function (html) {\n                    var parsedHtml = parseHtml(html);\n                    $('.modal-body').append(parsedHtml.body);\n                    $('.show-more-bonus-products:first').remove();\n                    $('.modal-content').spinner().stop();\n                },\n                error: function () {\n                    $('.modal-content').spinner().stop();\n                }\n            });\n        });\n    },\n    addBonusProductsToCart: function () {\n        $(document).on('click', '.add-bonus-products', function () {\n            var $readyToOrderBonusProducts = $('.choose-bonus-product-dialog .selected-pid');\n            var queryString = '?pids=';\n            var url = $('.choose-bonus-product-dialog').data('addtocarturl');\n            var pidsObject = {\n                bonusProducts: []\n            };\n\n            $.each($readyToOrderBonusProducts, function () {\n                var qtyOption =\n                    parseInt($(this)\n                        .data('qty'), 10);\n\n                var option = null;\n                if (qtyOption > 0) {\n                    if ($(this).data('optionid') && $(this).data('option-selected-value')) {\n                        option = {};\n                        option.optionId = $(this).data('optionid');\n                        option.productId = $(this).data('pid');\n                        option.selectedValueId = $(this).data('option-selected-value');\n                    }\n                    pidsObject.bonusProducts.push({\n                        pid: $(this).data('pid'),\n                        qty: qtyOption,\n                        options: [option]\n                    });\n                    pidsObject.totalQty = parseInt($('.pre-cart-products').html(), 10);\n                }\n            });\n            queryString += JSON.stringify(pidsObject);\n            queryString = queryString + '&uuid=' + $('.choose-bonus-product-dialog').data('uuid');\n            queryString = queryString + '&pliuuid=' + $('.choose-bonus-product-dialog').data('pliuuid');\n            $.spinner().start();\n            $.ajax({\n                url: url + queryString,\n                method: 'POST',\n                success: function (data) {\n                    $.spinner().stop();\n                    if (data.error) {\n                        $('#chooseBonusProductModal').modal('hide');\n                        if ($('.add-to-cart-messages').length === 0) {\n                            $('body').append('<div class=\"add-to-cart-messages\"></div>');\n                        }\n                        $('.add-to-cart-messages').append(\n                            '<div class=\"alert alert-danger add-to-basket-alert text-center\"'\n                            + ' role=\"alert\">'\n                            + data.errorMessage + '</div>'\n                        );\n                        setTimeout(function () {\n                            $('.add-to-basket-alert').remove();\n                        }, 3000);\n                    } else {\n                        $('.configure-bonus-product-attributes').html(data);\n                        $('.bonus-products-step2').removeClass('hidden-xl-down');\n                        $('#chooseBonusProductModal').modal('hide');\n\n                        if ($('.add-to-cart-messages').length === 0) {\n                            $('body').append('<div class=\"add-to-cart-messages\"></div>');\n                        }\n                        $('.minicart-quantity').html(data.totalQty);\n                        $('.add-to-cart-messages').append(\n                            '<div class=\"alert alert-success add-to-basket-alert text-center\"'\n                            + ' role=\"alert\">'\n                            + data.msgSuccess + '</div>'\n                        );\n                        setTimeout(function () {\n                            $('.add-to-basket-alert').remove();\n                            if ($('.cart-page').length) {\n                                location.reload();\n                            }\n                        }, 1500);\n                    }\n                },\n                error: function () {\n                    $.spinner().stop();\n                }\n            });\n        });\n    },\n\n    getPidValue: getPidValue,\n    getQuantitySelected: getQuantitySelected,\n    miniCartReportingUrl: miniCartReportingUrl\n};\n","'use strict';\n\n/**\n * Ajax縺ァ繝輔か繝シ繝�繝��繧ソ(FormData)繧単OST騾∽ソ。縺励€√◎縺ョ繝ャ繧ケ繝昴Φ繧ケ繝��繧ソ繧定ソ斐☆縲�\n *\n * 騾壻ソ。譎ゅ↓繧ィ繝ゥ繝シ縺檎匱逕溘@縲√°縺、繝ェ繝€繧、繝ャ繧ッ繝域ュ蝣ア(redirectUrl)縺悟ュ伜惠縺吶k蝣エ蜷医�Error繧偵せ繝ュ繝シ縺帙★縲∵ュ」蟶ク譎ゅ→蜷梧ァ倥↓繝ャ繧ケ繝昴Φ繧ケ繝��繧ソ繧定ソ斐☆縲�\n * 縺薙�縺ィ縺阪€〉edirectUrl縺ォ縺ッ繧ィ繝ゥ繝シ逕サ髱「縺ョURL縺後そ繝�ヨ縺輔l縺ヲ縺�k縺薙→繧呈Φ螳壹@縺ヲ縺�k縲�\n * 蛻ゥ逕ィ蛛エ縺ッredirectUrl繧帝←蛻�↓繝上Φ繝峨Μ繝ウ繧ー縺吶k縲�\n * ```js\n * window.location.href = data.redirectUrl;\n * ```\n *\n * 荳€譁ケ縺ァ縲�€壻ソ。譎ゅ↓繧ィ繝ゥ繝シ縺檎匱逕溘@縲√°縺、繝ェ繝€繧、繝ャ繧ッ繝域ュ蝣ア(redirectUrl)縺悟ュ伜惠縺励↑縺��エ蜷医�Error繧偵せ繝ュ繝シ縺吶k縲�\n * 蛻ゥ逕ィ蛛エ縺ッError繧帝←蛻�↓繝上Φ繝峨Μ繝ウ繧ー(繧ュ繝」繝�メ)縺吶k縲�\n *\n * @param {string} url - 繝輔か繝シ繝�繝��繧ソ(FormData)騾∽ソ。蜈医�URL\n * @param {object} formData - 繝輔か繝シ繝�繝��繧ソ(FormData)\n * @param {boolean} [isMultiPart=false] - `enctype`繧蛋'multipart/form-data'`縺ィ縺吶k縺句凄縺九€�\n * - `true`縺ョ蝣エ蜷�: 蠑墓焚縺ョFormData繧偵◎縺ョ縺セ縺セ騾∽ソ。縺吶k縲らオ先棡縲~enctype`縺ッ`'multipart/form-data'`縺ィ縺ェ繧九€�\n * - `false`縺ョ蝣エ蜷�: 蠑墓焚縺ョFormData繧旦RLSearchParams縺ォ螟画鋤縺励※騾∽ソ。縺吶k縲らオ先棡縲~enctype`縺ッ`'application/x-www-form-urlencoded'`縺ィ縺ェ繧九€�\n * @returns {object} 繝ャ繧ケ繝昴Φ繧ケ縺ョJSON縺ォ逶ク蠖薙☆繧徽avaScript繧ェ繝悶ず繧ァ繧ッ繝�\n * @throws {Error} 騾壻ソ。譎ゅ↓繧ィ繝ゥ繝シ縺檎匱逕溘@縺溘€√°縺、繝ェ繝€繧、繝ャ繧ッ繝域ュ蝣ア縺悟ュ伜惠縺励↑縺��エ蜷�\n */\nmodule.exports = async (url, formData, isMultiPart) => {\n    let body;\n    if (isMultiPart === true) {\n        body = formData;\n    } else {\n        const urlSearchParams = new URLSearchParams();\n        // eslint-disable-next-line no-restricted-syntax\n        for (const entry of formData.entries()) {\n            const key = entry[0];\n            const value = entry[1];\n            urlSearchParams.append(key, value);\n        }\n        body = urlSearchParams;\n    }\n    const response = await fetch(url, {\n        method: 'POST',\n        headers: {\n            Accept: 'application/json',\n            'Cache-Control': 'no-cache',\n            'X-Requested-With': 'XMLHttpRequest',\n        },\n        body,\n        credentials: 'same-origin',\n    });\n    const data = await response.json();\n    if (!response.ok) {\n        if (data.redirectUrl) {\n            return data;\n        }\n        // 繧ケ繝��繧ソ繧ケ繧ウ繝シ繝�(500縺ェ縺ゥ)繧貞性繧√※繧ィ繝ゥ繝シ繧偵せ繝ュ繝シ縺吶k\n        throw new Error(response.status);\n    }\n    return data;\n};\n","'use strict';\n\n/**\n * Ajax縺ョ邨先棡縺ァDOM隕∫エ�繧呈峩譁ー縺吶k\n *\n * @param {object} $results - jQuery DOM element\n * @param {string} selector - DOM element to look up in the $results\n */\nfunction updateDom($results, selector) {\n    let $updates = $results.find(selector);\n    $(selector).empty().html($updates.html());\n}\n\n/**\n * Ajax縺ョ邨先棡繧定ァ」譫舌@縲�∈謚槭@縺櫂OM隕∫エ�繧呈峩譁ー縺吶k\n *\n * @param {string} response - Ajax response HTML code\n * @param {string} refreshArea - 譖エ譁ー驛ィ蛻�r謖�ョ壹☆繧九け繝ゥ繧ケ蜷構n * @returns {undefined}\n */\nfunction parseResults(response,refreshArea) {\n    const $parsedResponse = $(response);\n    const selector = refreshArea;\n\n    updateDom($parsedResponse, selector);\n}\n\nmodule.exports = parseResults;\n","'use strict';\n\n/**\n * 縲後☆縺占ウシ蜈・縲阪↓髢「縺吶k繧ェ繝悶ず繧ァ繧ッ繝医r菴懈�縺励※霑斐☆縲�\n * 縺薙�繧ェ繝悶ず繧ァ繧ッ繝医�縲…o/coBuyNow#execBuyNow縺ョ繝代Λ繝。繝シ繧ソ繝シ縺ィ縺励※蛻ゥ逕ィ縺吶k縲�\n *\n * @param {(string|null)} productId - 繧ォ繝シ繝医↓霑ス蜉�縺吶k蝠�刀縺ョID縲りソス蜉�縺励↑縺��エ蜷医�null縺ィ縺吶k縲� 萓�: `'12567'`\n * @param {(number|null)} quantity - 繧ォ繝シ繝医↓霑ス蜉�縺吶k蝠�刀縺ョ謨ー驥上€りソス蜉�縺励↑縺��エ蜷医�null縺ィ縺吶k縲� 萓�: `2`\n * @returns {object} buyNowObj - 縲後☆縺占ウシ蜈・縲阪�Ajax繧オ繝シ繝薙せ縺ォ騾∽ソ。縺吶k繝��繧ソ繧貞性繧€繧ェ繝悶ず繧ァ繧ッ繝医€ゅヵ繧ゥ繝シ繝�螳夂セゥ縲慶oBuyNow.xml縲阪↓蟇セ蠢懊☆繧九€�\n * - `originUrl`: <縲後☆縺占ウシ蜈・縲阪い繧ッ繧キ繝ァ繝ウ逋コ逕溷�縺ョ逕サ髱「縺ョURL縲ゅ€�/縲榊ァ九∪繧翫→縺吶k縲�>\n * - `productId`: <繧ォ繝シ繝医↓霑ス蜉�縺吶k蝠�刀縺ョID>\n * - `quantity`: <繧ォ繝シ繝医↓霑ス蜉�縺吶k蝠�刀縺ョ謨ー驥�>\n * - `forceChangeUses`: <逕ィ騾斐r蠑キ蛻カ逧�↓螟画峩縺吶k縺句凄縺�>\n * ```js\n * {\n *     originUrl: '/on/demandware.store/Sites-taneya-Site/ja_JP/Product-Show?pid=12567',\n *     productId: '12567',\n *     quantity: 2,\n *     forceChangeUses: false,\n * }\n * ```\n */\nfunction getBuyNowObj(productId, quantity) {\n    // 縲後☆縺占ウシ蜈・縲阪い繧ッ繧キ繝ァ繝ウ逋コ逕溷�縺ョ逕サ髱「縺ョURL\n    const originUrl = `${window.location.pathname}${window.location.search}`;\n    const buyNowObj = {\n        originUrl,\n        productId,\n        quantity,\n        forceChangeUses: false, // 縲檎畑騾斐r蠑キ蛻カ逧�↓螟画峩縺吶k縲阪が繝励す繝ァ繝ウ縺ッ縲掲alse縲阪→縺吶k\n    };\n    return buyNowObj;\n}\n\nmodule.exports = {\n    getBuyNowObj,\n};\n","module.exports = require('swiper/swiper-bundle.js');\n","/**\n * Swiper 8.4.7\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2023 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: January 30, 2023\n */\n\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Swiper = factory());\n})(this, (function () { 'use strict';\n\n    /**\n     * SSR Window 4.0.2\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: December 13, 2021\n     */\n\n    /* eslint-disable no-param-reassign */\n    function isObject$1(obj) {\n      return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n    }\n\n    function extend$1(target, src) {\n      if (target === void 0) {\n        target = {};\n      }\n\n      if (src === void 0) {\n        src = {};\n      }\n\n      Object.keys(src).forEach(key => {\n        if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject$1(src[key]) && isObject$1(target[key]) && Object.keys(src[key]).length > 0) {\n          extend$1(target[key], src[key]);\n        }\n      });\n    }\n\n    const ssrDocument = {\n      body: {},\n\n      addEventListener() {},\n\n      removeEventListener() {},\n\n      activeElement: {\n        blur() {},\n\n        nodeName: ''\n      },\n\n      querySelector() {\n        return null;\n      },\n\n      querySelectorAll() {\n        return [];\n      },\n\n      getElementById() {\n        return null;\n      },\n\n      createEvent() {\n        return {\n          initEvent() {}\n\n        };\n      },\n\n      createElement() {\n        return {\n          children: [],\n          childNodes: [],\n          style: {},\n\n          setAttribute() {},\n\n          getElementsByTagName() {\n            return [];\n          }\n\n        };\n      },\n\n      createElementNS() {\n        return {};\n      },\n\n      importNode() {\n        return null;\n      },\n\n      location: {\n        hash: '',\n        host: '',\n        hostname: '',\n        href: '',\n        origin: '',\n        pathname: '',\n        protocol: '',\n        search: ''\n      }\n    };\n\n    function getDocument() {\n      const doc = typeof document !== 'undefined' ? document : {};\n      extend$1(doc, ssrDocument);\n      return doc;\n    }\n\n    const 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\n        pushState() {},\n\n        go() {},\n\n        back() {}\n\n      },\n      CustomEvent: function CustomEvent() {\n        return this;\n      },\n\n      addEventListener() {},\n\n      removeEventListener() {},\n\n      getComputedStyle() {\n        return {\n          getPropertyValue() {\n            return '';\n          }\n\n        };\n      },\n\n      Image() {},\n\n      Date() {},\n\n      screen: {},\n\n      setTimeout() {},\n\n      clearTimeout() {},\n\n      matchMedia() {\n        return {};\n      },\n\n      requestAnimationFrame(callback) {\n        if (typeof setTimeout === 'undefined') {\n          callback();\n          return null;\n        }\n\n        return setTimeout(callback, 0);\n      },\n\n      cancelAnimationFrame(id) {\n        if (typeof setTimeout === 'undefined') {\n          return;\n        }\n\n        clearTimeout(id);\n      }\n\n    };\n\n    function getWindow() {\n      const win = typeof window !== 'undefined' ? window : {};\n      extend$1(win, ssrWindow);\n      return win;\n    }\n\n    /**\n     * Dom7 4.0.4\n     * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n     * https://framework7.io/docs/dom7.html\n     *\n     * Copyright 2022, Vladimir Kharlampidi\n     *\n     * Licensed under MIT\n     *\n     * Released on: January 11, 2022\n     */\n    /* eslint-disable no-proto */\n\n    function 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\n    class Dom7 extends Array {\n      constructor(items) {\n        if (typeof items === 'number') {\n          super(items);\n        } else {\n          super(...(items || []));\n          makeReactive(this);\n        }\n      }\n\n    }\n\n    function arrayFlat(arr) {\n      if (arr === void 0) {\n        arr = [];\n      }\n\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    }\n\n    function arrayFilter(arr, callback) {\n      return Array.prototype.filter.call(arr, callback);\n    }\n\n    function 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    }\n\n\n    function 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\n    function $(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('<li') === 0) toCreate = 'ul';\n          if (html.indexOf('<tr') === 0) toCreate = 'tbody';\n          if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';\n          if (html.indexOf('<tbody') === 0) toCreate = 'table';\n          if (html.indexOf('<option') === 0) toCreate = 'select';\n          const tempParent = document.createElement(toCreate);\n          tempParent.innerHTML = html;\n\n          for (let i = 0; i < tempParent.childNodes.length; i += 1) {\n            arr.push(tempParent.childNodes[i]);\n          }\n        } else {\n          arr = qsa(selector.trim(), context || document);\n        } // arr = qsa(selector, document);\n\n      } else if (selector.nodeType || selector === window || selector === document) {\n        arr.push(selector);\n      } else if (Array.isArray(selector)) {\n        if (selector instanceof Dom7) return selector;\n        arr = selector;\n      }\n\n      return new Dom7(arrayUnique(arr));\n    }\n\n    $.fn = Dom7.prototype; // eslint-disable-next-line\n\n    function addClass() {\n      for (var _len = arguments.length, classes = new Array(_len), _key = 0; _key < _len; _key++) {\n        classes[_key] = arguments[_key];\n      }\n\n      const classNames = arrayFlat(classes.map(c => c.split(' ')));\n      this.forEach(el => {\n        el.classList.add(...classNames);\n      });\n      return this;\n    }\n\n    function removeClass() {\n      for (var _len2 = arguments.length, classes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        classes[_key2] = arguments[_key2];\n      }\n\n      const classNames = arrayFlat(classes.map(c => c.split(' ')));\n      this.forEach(el => {\n        el.classList.remove(...classNames);\n      });\n      return this;\n    }\n\n    function toggleClass() {\n      for (var _len3 = arguments.length, classes = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        classes[_key3] = arguments[_key3];\n      }\n\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\n    function hasClass() {\n      for (var _len4 = arguments.length, classes = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        classes[_key4] = arguments[_key4];\n      }\n\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\n    function 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\n    function removeAttr(attr) {\n      for (let i = 0; i < this.length; i += 1) {\n        this[i].removeAttribute(attr);\n      }\n\n      return this;\n    }\n\n    function 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\n    function transition$1(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\n    function on() {\n      for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n        args[_key5] = arguments[_key5];\n      }\n\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\n    function off() {\n      for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n        args[_key6] = arguments[_key6];\n      }\n\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\n    function trigger() {\n      const window = getWindow();\n\n      for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n        args[_key9] = arguments[_key9];\n      }\n\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\n    function transitionEnd$1(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\n    function 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\n    function 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\n    function 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\n    function styles() {\n      const window = getWindow();\n      if (this[0]) return window.getComputedStyle(this[0], null);\n      return {};\n    }\n\n    function 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\n    function each(callback) {\n      if (!callback) return this;\n      this.forEach((el, index) => {\n        callback.apply(el, [el, index]);\n      });\n      return this;\n    }\n\n    function filter(callback) {\n      const result = arrayFilter(this, callback);\n      return $(result);\n    }\n\n    function 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\n    function 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\n    function 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\n    function 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\n    function 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\n    function append() {\n      let newChild;\n      const document = getDocument();\n\n      for (let k = 0; k < arguments.length; k += 1) {\n        newChild = k < 0 || arguments.length <= k ? undefined : arguments[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\n    function 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\n    function 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\n    function 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\n    function 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\n    function 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\n    function 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\n    function 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\n    function 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\n    function 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\n    function 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\n    function 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\n    const Methods = {\n      addClass,\n      removeClass,\n      hasClass,\n      toggleClass,\n      attr,\n      removeAttr,\n      transform,\n      transition: transition$1,\n      on,\n      off,\n      trigger,\n      transitionEnd: transitionEnd$1,\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    Object.keys(Methods).forEach(methodName => {\n      Object.defineProperty($.fn, methodName, {\n        value: Methods[methodName],\n        writable: true\n      });\n    });\n\n    function deleteProps(obj) {\n      const object = obj;\n      Object.keys(object).forEach(key => {\n        try {\n          object[key] = null;\n        } catch (e) {// no getter for object\n        }\n\n        try {\n          delete object[key];\n        } catch (e) {// something got wrong\n        }\n      });\n    }\n\n    function nextTick(callback, delay) {\n      if (delay === void 0) {\n        delay = 0;\n      }\n\n      return setTimeout(callback, delay);\n    }\n\n    function now() {\n      return Date.now();\n    }\n\n    function getComputedStyle$1(el) {\n      const window = getWindow();\n      let style;\n\n      if (window.getComputedStyle) {\n        style = window.getComputedStyle(el, null);\n      }\n\n      if (!style && el.currentStyle) {\n        style = el.currentStyle;\n      }\n\n      if (!style) {\n        style = el.style;\n      }\n\n      return style;\n    }\n\n    function getTranslate(el, axis) {\n      if (axis === void 0) {\n        axis = 'x';\n      }\n\n      const window = getWindow();\n      let matrix;\n      let curTransform;\n      let transformMatrix;\n      const curStyle = getComputedStyle$1(el);\n\n      if (window.WebKitCSSMatrix) {\n        curTransform = curStyle.transform || curStyle.webkitTransform;\n\n        if (curTransform.split(',').length > 6) {\n          curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n        } // Some old versions of Webkit choke when 'none' is passed; pass\n        // empty string instead in this case\n\n\n        transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n      } else {\n        transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n        matrix = transformMatrix.toString().split(',');\n      }\n\n      if (axis === 'x') {\n        // Latest Chrome and webkits Fix\n        if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n        else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n        else curTransform = parseFloat(matrix[4]);\n      }\n\n      if (axis === 'y') {\n        // Latest Chrome and webkits Fix\n        if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n        else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n        else curTransform = parseFloat(matrix[5]);\n      }\n\n      return curTransform || 0;\n    }\n\n    function isObject(o) {\n      return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n    }\n\n    function isNode(node) {\n      // eslint-disable-next-line\n      if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n        return node instanceof HTMLElement;\n      }\n\n      return node && (node.nodeType === 1 || node.nodeType === 11);\n    }\n\n    function extend() {\n      const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n      const noExtend = ['__proto__', 'constructor', 'prototype'];\n\n      for (let i = 1; i < arguments.length; i += 1) {\n        const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n\n        if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n          const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n\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\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\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\n      return to;\n    }\n\n    function setCSSProperty(el, varName, varValue) {\n      el.style.setProperty(varName, varValue);\n    }\n\n    function animateCSSModeScroll(_ref) {\n      let {\n        swiper,\n        targetPosition,\n        side\n      } = _ref;\n      const window = getWindow();\n      const startPosition = -swiper.translate;\n      let startTime = null;\n      let time;\n      const duration = swiper.params.speed;\n      swiper.wrapperEl.style.scrollSnapType = 'none';\n      window.cancelAnimationFrame(swiper.cssModeFrameID);\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\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\n        swiper.wrapperEl.scrollTo({\n          [side]: currentPosition\n        });\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\n        swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n      };\n\n      animate();\n    }\n\n    let support;\n\n    function calcSupport() {\n      const window = getWindow();\n      const document = getDocument();\n      return {\n        smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n        touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n        passiveListener: function checkPassiveListener() {\n          let supportsPassive = false;\n\n          try {\n            const opts = Object.defineProperty({}, 'passive', {\n              // eslint-disable-next-line\n              get() {\n                supportsPassive = true;\n              }\n\n            });\n            window.addEventListener('testPassiveListener', null, opts);\n          } catch (e) {// No support\n          }\n\n          return supportsPassive;\n        }(),\n        gestures: function checkGestures() {\n          return 'ongesturestart' in window;\n        }()\n      };\n    }\n\n    function getSupport() {\n      if (!support) {\n        support = calcSupport();\n      }\n\n      return support;\n    }\n\n    let deviceCached;\n\n    function calcDevice(_temp) {\n      let {\n        userAgent\n      } = _temp === void 0 ? {} : _temp;\n      const support = getSupport();\n      const window = getWindow();\n      const platform = window.navigator.platform;\n      const ua = userAgent || window.navigator.userAgent;\n      const device = {\n        ios: false,\n        android: false\n      };\n      const screenWidth = window.screen.width;\n      const screenHeight = window.screen.height;\n      const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\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'; // iPadOs 13 fix\n\n      const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\n      if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n        ipad = ua.match(/(Version)\\/([\\d.]+)/);\n        if (!ipad) ipad = [0, 1, '13_0_0'];\n        macos = false;\n      } // Android\n\n\n      if (android && !windows) {\n        device.os = 'android';\n        device.android = true;\n      }\n\n      if (ipad || iphone || ipod) {\n        device.os = 'ios';\n        device.ios = true;\n      } // Export object\n\n\n      return device;\n    }\n\n    function getDevice(overrides) {\n      if (overrides === void 0) {\n        overrides = {};\n      }\n\n      if (!deviceCached) {\n        deviceCached = calcDevice(overrides);\n      }\n\n      return deviceCached;\n    }\n\n    let browser;\n\n    function calcBrowser() {\n      const window = getWindow();\n\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\n      return {\n        isSafari: isSafari(),\n        isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n      };\n    }\n\n    function getBrowser() {\n      if (!browser) {\n        browser = calcBrowser();\n      }\n\n      return browser;\n    }\n\n    function Resize(_ref) {\n      let {\n        swiper,\n        on,\n        emit\n      } = _ref;\n      const window = getWindow();\n      let observer = null;\n      let animationFrame = 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          animationFrame = window.requestAnimationFrame(() => {\n            const {\n              width,\n              height\n            } = swiper;\n            let newWidth = width;\n            let newHeight = height;\n            entries.forEach(_ref2 => {\n              let {\n                contentBoxSize,\n                contentRect,\n                target\n              } = _ref2;\n              if (target && target !== swiper.el) return;\n              newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n              newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n            });\n\n            if (newWidth !== width || newHeight !== height) {\n              resizeHandler();\n            }\n          });\n        });\n        observer.observe(swiper.el);\n      };\n\n      const removeObserver = () => {\n        if (animationFrame) {\n          window.cancelAnimationFrame(animationFrame);\n        }\n\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\n        window.addEventListener('resize', resizeHandler);\n        window.addEventListener('orientationchange', orientationChangeHandler);\n      });\n      on('destroy', () => {\n        removeObserver();\n        window.removeEventListener('resize', resizeHandler);\n        window.removeEventListener('orientationchange', orientationChangeHandler);\n      });\n    }\n\n    function Observer(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on,\n        emit\n      } = _ref;\n      const observers = [];\n      const window = getWindow();\n\n      const attach = function (target, options) {\n        if (options === void 0) {\n          options = {};\n        }\n\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\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        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        observers.push(observer);\n      };\n\n      const init = () => {\n        if (!swiper.params.observer) return;\n\n        if (swiper.params.observeParents) {\n          const containerParents = swiper.$el.parents();\n\n          for (let i = 0; i < containerParents.length; i += 1) {\n            attach(containerParents[i]);\n          }\n        } // Observe container\n\n\n        attach(swiper.$el[0], {\n          childList: swiper.params.observeSlideChildren\n        }); // Observe wrapper\n\n        attach(swiper.$wrapperEl[0], {\n          attributes: false\n        });\n      };\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\n    /* eslint-disable no-underscore-dangle */\n    var eventsEmitter = {\n      on(events, handler, priority) {\n        const self = this;\n        if (!self.eventsListeners || self.destroyed) return self;\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 (!self.eventsListeners || self.destroyed) return self;\n        if (typeof handler !== 'function') return self;\n\n        function onceHandler() {\n          self.off(events, onceHandler);\n\n          if (onceHandler.__emitterProxy) {\n            delete onceHandler.__emitterProxy;\n          }\n\n          for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n            args[_key] = arguments[_key];\n          }\n\n          handler.apply(self, args);\n        }\n\n        onceHandler.__emitterProxy = handler;\n        return self.on(events, onceHandler, priority);\n      },\n\n      onAny(handler, priority) {\n        const self = this;\n        if (!self.eventsListeners || self.destroyed) return self;\n        if (typeof handler !== 'function') return self;\n        const method = priority ? 'unshift' : 'push';\n\n        if (self.eventsAnyListeners.indexOf(handler) < 0) {\n          self.eventsAnyListeners[method](handler);\n        }\n\n        return self;\n      },\n\n      offAny(handler) {\n        const self = this;\n        if (!self.eventsListeners || self.destroyed) return self;\n        if (!self.eventsAnyListeners) return self;\n        const index = self.eventsAnyListeners.indexOf(handler);\n\n        if (index >= 0) {\n          self.eventsAnyListeners.splice(index, 1);\n        }\n\n        return self;\n      },\n\n      off(events, handler) {\n        const self = this;\n        if (!self.eventsListeners || self.destroyed) return self;\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 (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n                self.eventsListeners[event].splice(index, 1);\n              }\n            });\n          }\n        });\n        return self;\n      },\n\n      emit() {\n        const self = this;\n        if (!self.eventsListeners || self.destroyed) return self;\n        if (!self.eventsListeners) return self;\n        let events;\n        let data;\n        let context;\n\n        for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n          args[_key2] = arguments[_key2];\n        }\n\n        if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n          events = args[0];\n          data = 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\n        data.unshift(context);\n        const eventsArray = Array.isArray(events) ? events : events.split(' ');\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\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    };\n\n    function updateSize() {\n      const swiper = this;\n      let width;\n      let height;\n      const $el = swiper.$el;\n\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\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\n      if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n        return;\n      } // Subtract paddings\n\n\n      width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n      height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n      if (Number.isNaN(width)) width = 0;\n      if (Number.isNaN(height)) height = 0;\n      Object.assign(swiper, {\n        width,\n        height,\n        size: swiper.isHorizontal() ? width : height\n      });\n    }\n\n    function updateSlides() {\n      const swiper = this;\n\n      function getDirectionLabel(property) {\n        if (swiper.isHorizontal()) {\n          return property;\n        } // prettier-ignore\n\n\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\n      function getDirectionPropertyValue(node, label) {\n        return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n      }\n\n      const params = swiper.params;\n      const {\n        $wrapperEl,\n        size: swiperSize,\n        rtlTranslate: rtl,\n        wrongRTL\n      } = 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      let offsetBefore = params.slidesOffsetBefore;\n\n      if (typeof offsetBefore === 'function') {\n        offsetBefore = params.slidesOffsetBefore.call(swiper);\n      }\n\n      let offsetAfter = params.slidesOffsetAfter;\n\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      let spaceBetween = params.spaceBetween;\n      let slidePosition = -offsetBefore;\n      let prevSlideSize = 0;\n      let index = 0;\n\n      if (typeof swiperSize === 'undefined') {\n        return;\n      }\n\n      if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n        spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n      }\n\n      swiper.virtualSize = -spaceBetween; // reset margins\n\n      if (rtl) slides.css({\n        marginLeft: '',\n        marginBottom: '',\n        marginTop: ''\n      });else slides.css({\n        marginRight: '',\n        marginBottom: '',\n        marginTop: ''\n      }); // reset cssMode offsets\n\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\n      if (gridEnabled) {\n        swiper.grid.initSlides(slidesLength);\n      } // Calc slides\n\n\n      let slideSize;\n      const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && 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\n        if (gridEnabled) {\n          swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n        }\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\n          const slideStyles = getComputedStyle(slide[0]);\n          const currentTransform = slide[0].style.transform;\n          const currentWebKitTransform = slide[0].style.webkitTransform;\n\n          if (currentTransform) {\n            slide[0].style.transform = 'none';\n          }\n\n          if (currentWebKitTransform) {\n            slide[0].style.webkitTransform = 'none';\n          }\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\n            if (boxSizing && boxSizing === 'border-box') {\n              slideSize = width + marginLeft + marginRight;\n            } else {\n              const {\n                clientWidth,\n                offsetWidth\n              } = slide[0];\n              slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n            }\n          }\n\n          if (currentTransform) {\n            slide[0].style.transform = currentTransform;\n          }\n\n          if (currentWebKitTransform) {\n            slide[0].style.webkitTransform = currentWebKitTransform;\n          }\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\n        if (slides[i]) {\n          slides[i].swiperSlideSize = slideSize;\n        }\n\n        slidesSizesGrid.push(slideSize);\n\n        if (params.centeredSlides) {\n          slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n          if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n          if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n          if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n          if (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 ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n          slidesGrid.push(slidePosition);\n          slidePosition = slidePosition + slideSize + spaceBetween;\n        }\n\n        swiper.virtualSize += slideSize + spaceBetween;\n        prevSlideSize = slideSize;\n        index += 1;\n      }\n\n      swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n      if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n        $wrapperEl.css({\n          width: `${swiper.virtualSize + params.spaceBetween}px`\n        });\n      }\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      } // Remove last grid elements depending on width\n\n\n      if (!params.centeredSlides) {\n        const newSlidesGrid = [];\n\n        for (let i = 0; i < snapGrid.length; i += 1) {\n          let slidesGridItem = snapGrid[i];\n          if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n\n          if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n            newSlidesGrid.push(slidesGridItem);\n          }\n        }\n\n        snapGrid = newSlidesGrid;\n\n        if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n          snapGrid.push(swiper.virtualSize - swiperSize);\n        }\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.filter((_, slideIndex) => {\n          if (!params.cssMode) return true;\n\n          if (slideIndex === slides.length - 1) {\n            return false;\n          }\n\n          return true;\n        }).css({\n          [key]: `${spaceBetween}px`\n        });\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\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(swiper.wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\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\n      if (snapGrid.length !== previousSnapGridLength) {\n        if (swiper.params.watchOverflow) swiper.checkOverflow();\n        swiper.emit('snapGridLengthChange');\n      }\n\n      if (slidesGrid.length !== previousSlidesGridLength) {\n        swiper.emit('slidesGridLengthChange');\n      }\n\n      if (params.watchSlidesProgress) {\n        swiper.updateSlidesOffset();\n      }\n\n      if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n        const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n        const hasClassBackfaceClassAdded = swiper.$el.hasClass(backFaceHiddenClass);\n\n        if (slidesLength <= params.maxBackfaceHiddenSlides) {\n          if (!hasClassBackfaceClassAdded) swiper.$el.addClass(backFaceHiddenClass);\n        } else if (hasClassBackfaceClassAdded) {\n          swiper.$el.removeClass(backFaceHiddenClass);\n        }\n      }\n    }\n\n    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\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(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n        }\n\n        return swiper.slides.eq(index)[0];\n      }; // Find slides currently in view\n\n\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      } // Find new height from highest slide in view\n\n\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      } // Update Height\n\n\n      if (newHeight || newHeight === 0) swiper.$wrapperEl.css('height', `${newHeight}px`);\n    }\n\n    function updateSlidesOffset() {\n      const swiper = this;\n      const slides = swiper.slides;\n\n      for (let i = 0; i < slides.length; i += 1) {\n        slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n      }\n    }\n\n    function updateSlidesProgress(translate) {\n      if (translate === void 0) {\n        translate = this && this.translate || 0;\n      }\n\n      const swiper = this;\n      const params = swiper.params;\n      const {\n        slides,\n        rtlTranslate: rtl,\n        snapGrid\n      } = swiper;\n      if (slides.length === 0) return;\n      if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n      let offsetCenter = -translate;\n      if (rtl) offsetCenter = translate; // Visible Slides\n\n      slides.removeClass(params.slideVisibleClass);\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\n        if (params.cssMode && params.centeredSlides) {\n          slideOffset -= slides[0].swiperSlideOffset;\n        }\n\n        const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n        const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n        const slideBefore = -(offsetCenter - slideOffset);\n        const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n        const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n        if (isVisible) {\n          swiper.visibleSlides.push(slide);\n          swiper.visibleSlidesIndexes.push(i);\n          slides.eq(i).addClass(params.slideVisibleClass);\n        }\n\n        slide.progress = rtl ? -slideProgress : slideProgress;\n        slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n      }\n\n      swiper.visibleSlides = $(swiper.visibleSlides);\n    }\n\n    function updateProgress(translate) {\n      const swiper = this;\n\n      if (typeof translate === 'undefined') {\n        const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n        translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n      }\n\n      const params = swiper.params;\n      const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n      let {\n        progress,\n        isBeginning,\n        isEnd\n      } = swiper;\n      const wasBeginning = isBeginning;\n      const wasEnd = isEnd;\n\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\n      Object.assign(swiper, {\n        progress,\n        isBeginning,\n        isEnd\n      });\n      if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n      if (isBeginning && !wasBeginning) {\n        swiper.emit('reachBeginning toEdge');\n      }\n\n      if (isEnd && !wasEnd) {\n        swiper.emit('reachEnd toEdge');\n      }\n\n      if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n        swiper.emit('fromEdge');\n      }\n\n      swiper.emit('progress', progress);\n    }\n\n    function updateSlidesClasses() {\n      const swiper = this;\n      const {\n        slides,\n        params,\n        $wrapperEl,\n        activeIndex,\n        realIndex\n      } = swiper;\n      const isVirtual = swiper.virtual && params.virtual.enabled;\n      slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n      let activeSlide;\n\n      if (isVirtual) {\n        activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n      } else {\n        activeSlide = slides.eq(activeIndex);\n      } // Active classes\n\n\n      activeSlide.addClass(params.slideActiveClass);\n\n      if (params.loop) {\n        // Duplicate to all looped slides\n        if (activeSlide.hasClass(params.slideDuplicateClass)) {\n          $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n        } else {\n          $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n        }\n      } // Next Slide\n\n\n      let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n\n      if (params.loop && nextSlide.length === 0) {\n        nextSlide = slides.eq(0);\n        nextSlide.addClass(params.slideNextClass);\n      } // Prev Slide\n\n\n      let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n\n      if (params.loop && prevSlide.length === 0) {\n        prevSlide = slides.eq(-1);\n        prevSlide.addClass(params.slidePrevClass);\n      }\n\n      if (params.loop) {\n        // Duplicate to all looped slides\n        if (nextSlide.hasClass(params.slideDuplicateClass)) {\n          $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n        } else {\n          $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n        }\n\n        if (prevSlide.hasClass(params.slideDuplicateClass)) {\n          $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n        } else {\n          $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n        }\n      }\n\n      swiper.emitSlidesClasses();\n    }\n\n    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\n      if (typeof activeIndex === 'undefined') {\n        for (let i = 0; i < slidesGrid.length; i += 1) {\n          if (typeof slidesGrid[i + 1] !== 'undefined') {\n            if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n              activeIndex = i;\n            } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n              activeIndex = i + 1;\n            }\n          } else if (translate >= slidesGrid[i]) {\n            activeIndex = i;\n          }\n        } // Normalize slideIndex\n\n\n        if (params.normalizeSlideIndex) {\n          if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n        }\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\n      if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n      if (activeIndex === previousIndex) {\n        if (snapIndex !== previousSnapIndex) {\n          swiper.snapIndex = snapIndex;\n          swiper.emit('snapIndexChange');\n        }\n\n        return;\n      } // Get real index\n\n\n      const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n      Object.assign(swiper, {\n        snapIndex,\n        realIndex,\n        previousIndex,\n        activeIndex\n      });\n      swiper.emit('activeIndexChange');\n      swiper.emit('snapIndexChange');\n\n      if (previousRealIndex !== realIndex) {\n        swiper.emit('realIndexChange');\n      }\n\n      if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n        swiper.emit('slideChange');\n      }\n    }\n\n    function updateClickedSlide(e) {\n      const swiper = this;\n      const params = swiper.params;\n      const slide = $(e).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\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\n      if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n        swiper.slideToClickedSlide();\n      }\n    }\n\n    var update = {\n      updateSize,\n      updateSlides,\n      updateAutoHeight,\n      updateSlidesOffset,\n      updateSlidesProgress,\n      updateProgress,\n      updateSlidesClasses,\n      updateActiveIndex,\n      updateClickedSlide\n    };\n\n    function getSwiperTranslate(axis) {\n      if (axis === void 0) {\n        axis = this.isHorizontal() ? 'x' : 'y';\n      }\n\n      const swiper = this;\n      const {\n        params,\n        rtlTranslate: rtl,\n        translate,\n        $wrapperEl\n      } = swiper;\n\n      if (params.virtualTranslate) {\n        return rtl ? -translate : translate;\n      }\n\n      if (params.cssMode) {\n        return translate;\n      }\n\n      let currentTranslate = getTranslate($wrapperEl[0], axis);\n      if (rtl) currentTranslate = -currentTranslate;\n      return currentTranslate || 0;\n    }\n\n    function setTranslate(translate, byController) {\n      const swiper = this;\n      const {\n        rtlTranslate: rtl,\n        params,\n        $wrapperEl,\n        wrapperEl,\n        progress\n      } = swiper;\n      let x = 0;\n      let y = 0;\n      const z = 0;\n\n      if (swiper.isHorizontal()) {\n        x = rtl ? -translate : translate;\n      } else {\n        y = translate;\n      }\n\n      if (params.roundLengths) {\n        x = Math.floor(x);\n        y = Math.floor(y);\n      }\n\n      if (params.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\n      swiper.previousTranslate = swiper.translate;\n      swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n      let newProgress;\n      const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n      if (translatesDiff === 0) {\n        newProgress = 0;\n      } else {\n        newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n      }\n\n      if (newProgress !== progress) {\n        swiper.updateProgress(translate);\n      }\n\n      swiper.emit('setTranslate', swiper.translate, byController);\n    }\n\n    function minTranslate() {\n      return -this.snapGrid[0];\n    }\n\n    function maxTranslate() {\n      return -this.snapGrid[this.snapGrid.length - 1];\n    }\n\n    function translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n      if (translate === void 0) {\n        translate = 0;\n      }\n\n      if (speed === void 0) {\n        speed = this.params.speed;\n      }\n\n      if (runCallbacks === void 0) {\n        runCallbacks = true;\n      }\n\n      if (translateBounds === void 0) {\n        translateBounds = true;\n      }\n\n      const swiper = this;\n      const {\n        params,\n        wrapperEl\n      } = 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;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n      swiper.updateProgress(newTranslate);\n\n      if (params.cssMode) {\n        const isH = swiper.isHorizontal();\n\n        if (speed === 0) {\n          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n        } else {\n          if (!swiper.support.smoothScroll) {\n            animateCSSModeScroll({\n              swiper,\n              targetPosition: -newTranslate,\n              side: isH ? 'left' : 'top'\n            });\n            return true;\n          }\n\n          wrapperEl.scrollTo({\n            [isH ? 'left' : 'top']: -newTranslate,\n            behavior: 'smooth'\n          });\n        }\n\n        return true;\n      }\n\n      if (speed === 0) {\n        swiper.setTransition(0);\n        swiper.setTranslate(newTranslate);\n\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\n        if (runCallbacks) {\n          swiper.emit('beforeTransitionStart', speed, internal);\n          swiper.emit('transitionStart');\n        }\n\n        if (!swiper.animating) {\n          swiper.animating = true;\n\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('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n              swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n              swiper.onTranslateToWrapperTransitionEnd = null;\n              delete swiper.onTranslateToWrapperTransitionEnd;\n\n              if (runCallbacks) {\n                swiper.emit('transitionEnd');\n              }\n            };\n          }\n\n          swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n        }\n      }\n\n      return true;\n    }\n\n    var translate = {\n      getTranslate: getSwiperTranslate,\n      setTranslate,\n      minTranslate,\n      maxTranslate,\n      translateTo\n    };\n\n    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\n    function transitionEmit(_ref) {\n      let {\n        swiper,\n        runCallbacks,\n        direction,\n        step\n      } = _ref;\n      const {\n        activeIndex,\n        previousIndex\n      } = swiper;\n      let dir = direction;\n\n      if (!dir) {\n        if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';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\n        swiper.emit(`slideChangeTransition${step}`);\n\n        if (dir === 'next') {\n          swiper.emit(`slideNextTransition${step}`);\n        } else {\n          swiper.emit(`slidePrevTransition${step}`);\n        }\n      }\n    }\n\n    function transitionStart(runCallbacks, direction) {\n      if (runCallbacks === void 0) {\n        runCallbacks = true;\n      }\n\n      const swiper = this;\n      const {\n        params\n      } = swiper;\n      if (params.cssMode) return;\n\n      if (params.autoHeight) {\n        swiper.updateAutoHeight();\n      }\n\n      transitionEmit({\n        swiper,\n        runCallbacks,\n        direction,\n        step: 'Start'\n      });\n    }\n\n    function transitionEnd(runCallbacks, direction) {\n      if (runCallbacks === void 0) {\n        runCallbacks = true;\n      }\n\n      const swiper = this;\n      const {\n        params\n      } = swiper;\n      swiper.animating = false;\n      if (params.cssMode) return;\n      swiper.setTransition(0);\n      transitionEmit({\n        swiper,\n        runCallbacks,\n        direction,\n        step: 'End'\n      });\n    }\n\n    var transition = {\n      setTransition,\n      transitionStart,\n      transitionEnd\n    };\n\n    function slideTo(index, speed, runCallbacks, internal, initial) {\n      if (index === void 0) {\n        index = 0;\n      }\n\n      if (speed === void 0) {\n        speed = this.params.speed;\n      }\n\n      if (runCallbacks === void 0) {\n        runCallbacks = true;\n      }\n\n      if (typeof index !== 'number' && typeof index !== 'string') {\n        throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`);\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         * Determines whether the `index` argument is a valid `number`\n         * after being converted from the `string` type.\n         * @type {boolean}\n         */\n\n        const isValidNumber = isFinite(indexAsNumber);\n\n        if (!isValidNumber) {\n          throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n        } // Knowing that the converted `index` is a valid number,\n        // we can update the original argument's value.\n\n\n        index = indexAsNumber;\n      }\n\n      const swiper = this;\n      let slideIndex = index;\n      if (slideIndex < 0) slideIndex = 0;\n      const {\n        params,\n        snapGrid,\n        slidesGrid,\n        previousIndex,\n        activeIndex,\n        rtlTranslate: rtl,\n        wrapperEl,\n        enabled\n      } = swiper;\n\n      if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\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      const translate = -snapGrid[snapIndex]; // Normalize slideIndex\n\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\n          if (typeof slidesGrid[i + 1] !== 'undefined') {\n            if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n              slideIndex = i;\n            } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n              slideIndex = i + 1;\n            }\n          } else if (normalizedTranslate >= normalizedGrid) {\n            slideIndex = i;\n          }\n        }\n      } // Directions locks\n\n\n      if (swiper.initialized && slideIndex !== activeIndex) {\n        if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n          return false;\n        }\n\n        if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n          if ((activeIndex || 0) !== slideIndex) return false;\n        }\n      }\n\n      if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n        swiper.emit('beforeSlideChangeStart');\n      } // Update progress\n\n\n      swiper.updateProgress(translate);\n      let direction;\n      if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n      if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n        swiper.updateActiveIndex(slideIndex); // Update Height\n\n        if (params.autoHeight) {\n          swiper.updateAutoHeight();\n        }\n\n        swiper.updateSlidesClasses();\n\n        if (params.effect !== 'slide') {\n          swiper.setTranslate(translate);\n        }\n\n        if (direction !== 'reset') {\n          swiper.transitionStart(runCallbacks, direction);\n          swiper.transitionEnd(runCallbacks, direction);\n        }\n\n        return false;\n      }\n\n      if (params.cssMode) {\n        const isH = swiper.isHorizontal();\n        const t = rtl ? translate : -translate;\n\n        if (speed === 0) {\n          const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n          if (isVirtual) {\n            swiper.wrapperEl.style.scrollSnapType = 'none';\n            swiper._immediateVirtual = true;\n          }\n\n          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n\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({\n              swiper,\n              targetPosition: t,\n              side: isH ? 'left' : 'top'\n            });\n            return true;\n          }\n\n          wrapperEl.scrollTo({\n            [isH ? 'left' : 'top']: t,\n            behavior: 'smooth'\n          });\n        }\n\n        return true;\n      }\n\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\n      if (speed === 0) {\n        swiper.transitionEnd(runCallbacks, direction);\n      } else if (!swiper.animating) {\n        swiper.animating = true;\n\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('transitionend', swiper.onSlideToWrapperTransitionEnd);\n            swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n            swiper.onSlideToWrapperTransitionEnd = null;\n            delete swiper.onSlideToWrapperTransitionEnd;\n            swiper.transitionEnd(runCallbacks, direction);\n          };\n        }\n\n        swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n        swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n      }\n\n      return true;\n    }\n\n    function slideToLoop(index, speed, runCallbacks, internal) {\n      if (index === void 0) {\n        index = 0;\n      }\n\n      if (speed === void 0) {\n        speed = this.params.speed;\n      }\n\n      if (runCallbacks === void 0) {\n        runCallbacks = true;\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         * Determines whether the `index` argument is a valid `number`\n         * after being converted from the `string` type.\n         * @type {boolean}\n         */\n\n        const isValidNumber = isFinite(indexAsNumber);\n\n        if (!isValidNumber) {\n          throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n        } // Knowing that the converted `index` is a valid number,\n        // we can update the original argument's value.\n\n\n        index = indexAsNumber;\n      }\n\n      const swiper = this;\n      let newIndex = index;\n\n      if (swiper.params.loop) {\n        newIndex += swiper.loopedSlides;\n      }\n\n      return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n    }\n\n    /* eslint no-unused-vars: \"off\" */\n    function slideNext(speed, runCallbacks, internal) {\n      if (speed === void 0) {\n        speed = this.params.speed;\n      }\n\n      if (runCallbacks === void 0) {\n        runCallbacks = true;\n      }\n\n      const swiper = this;\n      const {\n        animating,\n        enabled,\n        params\n      } = swiper;\n      if (!enabled) return swiper;\n      let perGroup = params.slidesPerGroup;\n\n      if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n        perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n      }\n\n      const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n\n      if (params.loop) {\n        if (animating && params.loopPreventsSlide) return false;\n        swiper.loopFix(); // eslint-disable-next-line\n\n        swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n      }\n\n      if (params.rewind && swiper.isEnd) {\n        return swiper.slideTo(0, speed, runCallbacks, internal);\n      }\n\n      return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n    }\n\n    /* eslint no-unused-vars: \"off\" */\n    function slidePrev(speed, runCallbacks, internal) {\n      if (speed === void 0) {\n        speed = this.params.speed;\n      }\n\n      if (runCallbacks === void 0) {\n        runCallbacks = true;\n      }\n\n      const swiper = this;\n      const {\n        params,\n        animating,\n        snapGrid,\n        slidesGrid,\n        rtlTranslate,\n        enabled\n      } = swiper;\n      if (!enabled) return swiper;\n\n      if (params.loop) {\n        if (animating && params.loopPreventsSlide) return false;\n        swiper.loopFix(); // eslint-disable-next-line\n\n        swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n      }\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\n      const normalizedTranslate = normalize(translate);\n      const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n      let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\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\n        if (typeof prevSnapIndex !== 'undefined') {\n          prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n        }\n      }\n\n      let prevIndex = 0;\n\n      if (typeof prevSnap !== 'undefined') {\n        prevIndex = slidesGrid.indexOf(prevSnap);\n        if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n\n        if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n          prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n          prevIndex = Math.max(prevIndex, 0);\n        }\n      }\n\n      if (params.rewind && swiper.isBeginning) {\n        const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n        return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n      }\n\n      return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n    }\n\n    /* eslint no-unused-vars: \"off\" */\n    function slideReset(speed, runCallbacks, internal) {\n      if (speed === void 0) {\n        speed = this.params.speed;\n      }\n\n      if (runCallbacks === void 0) {\n        runCallbacks = true;\n      }\n\n      const swiper = this;\n      return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n    }\n\n    /* eslint no-unused-vars: \"off\" */\n    function slideToClosest(speed, runCallbacks, internal, threshold) {\n      if (speed === void 0) {\n        speed = this.params.speed;\n      }\n\n      if (runCallbacks === void 0) {\n        runCallbacks = true;\n      }\n\n      if (threshold === void 0) {\n        threshold = 0.5;\n      }\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      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\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\n        if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n          index -= swiper.params.slidesPerGroup;\n        }\n      }\n\n      index = Math.max(index, 0);\n      index = Math.min(index, swiper.slidesGrid.length - 1);\n      return swiper.slideTo(index, speed, runCallbacks, internal);\n    }\n\n    function slideToClickedSlide() {\n      const swiper = this;\n      const {\n        params,\n        $wrapperEl\n      } = swiper;\n      const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n      let slideToIndex = swiper.clickedIndex;\n      let realIndex;\n\n      if (params.loop) {\n        if (swiper.animating) return;\n        realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n        if (params.centeredSlides) {\n          if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n            swiper.loopFix();\n            slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n            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.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n          nextTick(() => {\n            swiper.slideTo(slideToIndex);\n          });\n        } else {\n          swiper.slideTo(slideToIndex);\n        }\n      } else {\n        swiper.slideTo(slideToIndex);\n      }\n    }\n\n    var slide = {\n      slideTo,\n      slideToLoop,\n      slideNext,\n      slidePrev,\n      slideReset,\n      slideToClosest,\n      slideToClickedSlide\n    };\n\n    function loopCreate() {\n      const swiper = this;\n      const document = getDocument();\n      const {\n        params,\n        $wrapperEl\n      } = swiper; // Remove duplicated slides\n\n      const $selector = $wrapperEl.children().length > 0 ? $($wrapperEl.children()[0].parentNode) : $wrapperEl;\n      $selector.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n      let slides = $selector.children(`.${params.slideClass}`);\n\n      if (params.loopFillGroupWithBlank) {\n        const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n        if (blankSlidesNum !== params.slidesPerGroup) {\n          for (let i = 0; i < blankSlidesNum; i += 1) {\n            const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n            $selector.append(blankNode);\n          }\n\n          slides = $selector.children(`.${params.slideClass}`);\n        }\n      }\n\n      if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n      swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n      swiper.loopedSlides += params.loopAdditionalSlides;\n\n      if (swiper.loopedSlides > slides.length && swiper.params.loopedSlidesLimit) {\n        swiper.loopedSlides = slides.length;\n      }\n\n      const prependSlides = [];\n      const appendSlides = [];\n      slides.each((el, index) => {\n        const slide = $(el);\n        slide.attr('data-swiper-slide-index', index);\n      });\n\n      for (let i = 0; i < swiper.loopedSlides; i += 1) {\n        const index = i - Math.floor(i / slides.length) * slides.length;\n        appendSlides.push(slides.eq(index)[0]);\n        prependSlides.unshift(slides.eq(slides.length - index - 1)[0]);\n      }\n\n      for (let i = 0; i < appendSlides.length; i += 1) {\n        $selector.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n      }\n\n      for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n        $selector.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n      }\n    }\n\n    function loopFix() {\n      const swiper = this;\n      swiper.emit('beforeLoopFix');\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      const snapTranslate = -snapGrid[activeIndex];\n      const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n      if (activeIndex < loopedSlides) {\n        newIndex = slides.length - loopedSlides * 3 + activeIndex;\n        newIndex += loopedSlides;\n        const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\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\n        if (slideChanged && diff !== 0) {\n          swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n        }\n      }\n\n      swiper.allowSlidePrev = allowSlidePrev;\n      swiper.allowSlideNext = allowSlideNext;\n      swiper.emit('loopFix');\n    }\n\n    function loopDestroy() {\n      const swiper = this;\n      const {\n        $wrapperEl,\n        params,\n        slides\n      } = swiper;\n      $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n      slides.removeAttr('data-swiper-slide-index');\n    }\n\n    var loop = {\n      loopCreate,\n      loopFix,\n      loopDestroy\n    };\n\n    function setGrabCursor(moving) {\n      const swiper = this;\n      if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n      const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n      el.style.cursor = 'move';\n      el.style.cursor = moving ? 'grabbing' : 'grab';\n    }\n\n    function unsetGrabCursor() {\n      const swiper = this;\n\n      if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n        return;\n      }\n\n      swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n    }\n\n    var grabCursor = {\n      setGrabCursor,\n      unsetGrabCursor\n    };\n\n    function closestElement(selector, base) {\n      if (base === void 0) {\n        base = this;\n      }\n\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\n        if (!found && !el.getRootNode) {\n          return null;\n        }\n\n        return found || __closestFrom(el.getRootNode().host);\n      }\n\n      return __closestFrom(base);\n    }\n\n    function onTouchStart(event) {\n      const swiper = this;\n      const document = getDocument();\n      const window = getWindow();\n      const data = swiper.touchEventsData;\n      const {\n        params,\n        touches,\n        enabled\n      } = swiper;\n      if (!enabled) return;\n\n      if (swiper.animating && params.preventInteractionOnTransition) {\n        return;\n      }\n\n      if (!swiper.animating && params.cssMode && params.loop) {\n        swiper.loopFix();\n      }\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\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; // change target el for shadow root component\n\n      const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== ''; // eslint-disable-next-line\n\n      const eventPath = event.composedPath ? event.composedPath() : event.path;\n\n      if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n        $targetEl = $(eventPath[0]);\n      }\n\n      const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n      const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n      if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, $targetEl[0]) : $targetEl.closest(noSwipingSelector)[0])) {\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; // 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\n      if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\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      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\n      if (e.type !== 'touchstart') {\n        let preventDefault = true;\n\n        if ($targetEl.is(data.focusableElements)) {\n          preventDefault = false;\n\n          if ($targetEl[0].nodeName === 'SELECT') {\n            data.isTouched = false;\n          }\n        }\n\n        if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n          document.activeElement.blur();\n        }\n\n        const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n        if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n          e.preventDefault();\n        }\n      }\n\n      if (swiper.params.freeMode && swiper.params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n        swiper.freeMode.onTouchStart();\n      }\n\n      swiper.emit('touchStart', e);\n    }\n\n    function onTouchMove(event) {\n      const document = getDocument();\n      const swiper = this;\n      const data = swiper.touchEventsData;\n      const {\n        params,\n        touches,\n        rtlTranslate: rtl,\n        enabled\n      } = swiper;\n      if (!enabled) return;\n      let e = event;\n      if (e.originalEvent) e = e.originalEvent;\n\n      if (!data.isTouched) {\n        if (data.startMoving && data.isScrolling) {\n          swiper.emit('touchMoveOpposite', e);\n        }\n\n        return;\n      }\n\n      if (data.isTouchEvent && e.type !== 'touchmove') return;\n      const targetTouch = 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\n      if (e.preventedByNestedSwiper) {\n        touches.startX = pageX;\n        touches.startY = pageY;\n        return;\n      }\n\n      if (!swiper.allowTouchMove) {\n        if (!$(e.target).is(data.focusableElements)) {\n          swiper.allowClick = false;\n        }\n\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\n        return;\n      }\n\n      if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n        if (swiper.isVertical()) {\n          // Vertical\n          if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n            data.isTouched = false;\n            data.isMoved = false;\n            return;\n          }\n        } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n          return;\n        }\n      }\n\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\n      if (data.allowTouchCallbacks) {\n        swiper.emit('touchMove', e);\n      }\n\n      if (e.targetTouches && e.targetTouches.length > 1) return;\n      touches.currentX = pageX;\n      touches.currentY = pageY;\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) return;\n\n      if (typeof data.isScrolling === 'undefined') {\n        let touchAngle;\n\n        if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\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() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n          }\n        }\n      }\n\n      if (data.isScrolling) {\n        swiper.emit('touchMoveOpposite', e);\n      }\n\n      if (typeof data.startMoving === 'undefined') {\n        if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n          data.startMoving = true;\n        }\n      }\n\n      if (data.isScrolling) {\n        data.isTouched = false;\n        return;\n      }\n\n      if (!data.startMoving) {\n        return;\n      }\n\n      swiper.allowClick = false;\n\n      if (!params.cssMode && e.cancelable) {\n        e.preventDefault();\n      }\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\n        data.startTranslate = swiper.getTranslate();\n        swiper.setTransition(0);\n\n        if (swiper.animating) {\n          swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n        }\n\n        data.allowMomentumBounce = false; // Grab Cursor\n\n        if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n          swiper.setGrabCursor(true);\n        }\n\n        swiper.emit('sliderFirstMove', e);\n      }\n\n      swiper.emit('sliderMove', e);\n      data.isMoved = true;\n      let diff = swiper.isHorizontal() ? diffX : diffY;\n      touches.diff = diff;\n      diff *= params.touchRatio;\n      if (rtl) diff = -diff;\n      swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n      data.currentTranslate = diff + data.startTranslate;\n      let disableParentSwiper = true;\n      let resistanceRatio = params.resistanceRatio;\n\n      if (params.touchReleaseOnEdges) {\n        resistanceRatio = 0;\n      }\n\n      if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n        disableParentSwiper = false;\n        if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n      } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n        disableParentSwiper = false;\n        if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n      }\n\n      if (disableParentSwiper) {\n        e.preventedByNestedSwiper = true;\n      } // Directions locks\n\n\n      if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n        data.currentTranslate = data.startTranslate;\n      }\n\n      if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n        data.currentTranslate = data.startTranslate;\n      }\n\n      if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n        data.currentTranslate = data.startTranslate;\n      } // Threshold\n\n\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() ? touches.currentX - touches.startX : 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; // Update active index in free mode\n\n      if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n      }\n\n      if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n        swiper.freeMode.onTouchMove();\n      } // Update progress\n\n\n      swiper.updateProgress(data.currentTranslate); // Update translate\n\n      swiper.setTranslate(data.currentTranslate);\n    }\n\n    function onTouchEnd(event) {\n      const swiper = this;\n      const data = swiper.touchEventsData;\n      const {\n        params,\n        touches,\n        rtlTranslate: rtl,\n        slidesGrid,\n        enabled\n      } = swiper;\n      if (!enabled) return;\n      let e = event;\n      if (e.originalEvent) e = e.originalEvent;\n\n      if (data.allowTouchCallbacks) {\n        swiper.emit('touchEnd', e);\n      }\n\n      data.allowTouchCallbacks = false;\n\n      if (!data.isTouched) {\n        if (data.isMoved && params.grabCursor) {\n          swiper.setGrabCursor(false);\n        }\n\n        data.isMoved = false;\n        data.startMoving = false;\n        return;\n      } // Return Grab Cursor\n\n\n      if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n        swiper.setGrabCursor(false);\n      } // Time diff\n\n\n      const touchEndTime = now();\n      const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n      if (swiper.allowClick) {\n        const pathTree = e.path || e.composedPath && e.composedPath();\n        swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n        swiper.emit('tap click', e);\n\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 (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n        data.isTouched = false;\n        data.isMoved = false;\n        data.startMoving = false;\n        return;\n      }\n\n      data.isTouched = false;\n      data.isMoved = false;\n      data.startMoving = false;\n      let currentPos;\n\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({\n          currentPos\n        });\n        return;\n      } // Find current slide\n\n\n      let stopIndex = 0;\n      let groupSize = swiper.slidesSizesGrid[0];\n\n      for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n        const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\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      let rewindFirstIndex = null;\n      let rewindLastIndex = null;\n\n      if (params.rewind) {\n        if (swiper.isBeginning) {\n          rewindLastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n        } else if (swiper.isEnd) {\n          rewindFirstIndex = 0;\n        }\n      } // Find current slide size\n\n\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\n        if (swiper.swipeDirection === 'next') {\n          if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n        }\n\n        if (swiper.swipeDirection === 'prev') {\n          if (ratio > 1 - params.longSwipesRatio) {\n            swiper.slideTo(stopIndex + increment);\n          } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n            swiper.slideTo(rewindLastIndex);\n          } else {\n            swiper.slideTo(stopIndex);\n          }\n        }\n      } else {\n        // Short swipes\n        if (!params.shortSwipes) {\n          swiper.slideTo(swiper.activeIndex);\n          return;\n        }\n\n        const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n        if (!isNavButtonTarget) {\n          if (swiper.swipeDirection === 'next') {\n            swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n          }\n\n          if (swiper.swipeDirection === 'prev') {\n            swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : 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\n    function onResize() {\n      const swiper = this;\n      const {\n        params,\n        el\n      } = swiper;\n      if (el && el.offsetWidth === 0) return; // Breakpoints\n\n      if (params.breakpoints) {\n        swiper.setBreakpoint();\n      } // Save locks\n\n\n      const {\n        allowSlideNext,\n        allowSlidePrev,\n        snapGrid\n      } = swiper; // Disable locks on resize\n\n      swiper.allowSlideNext = true;\n      swiper.allowSlidePrev = true;\n      swiper.updateSize();\n      swiper.updateSlides();\n      swiper.updateSlidesClasses();\n\n      if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n        swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n      } else {\n        swiper.slideTo(swiper.activeIndex, 0, false, true);\n      }\n\n      if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n        swiper.autoplay.run();\n      } // Return locks after resize\n\n\n      swiper.allowSlidePrev = allowSlidePrev;\n      swiper.allowSlideNext = allowSlideNext;\n\n      if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n        swiper.checkOverflow();\n      }\n    }\n\n    function onClick(e) {\n      const swiper = this;\n      if (!swiper.enabled) return;\n\n      if (!swiper.allowClick) {\n        if (swiper.params.preventClicks) e.preventDefault();\n\n        if (swiper.params.preventClicksPropagation && swiper.animating) {\n          e.stopPropagation();\n          e.stopImmediatePropagation();\n        }\n      }\n    }\n\n    function onScroll() {\n      const swiper = this;\n      const {\n        wrapperEl,\n        rtlTranslate,\n        enabled\n      } = swiper;\n      if (!enabled) return;\n      swiper.previousTranslate = swiper.translate;\n\n      if (swiper.isHorizontal()) {\n        swiper.translate = -wrapperEl.scrollLeft;\n      } else {\n        swiper.translate = -wrapperEl.scrollTop;\n      } // eslint-disable-next-line\n\n\n      if (swiper.translate === 0) swiper.translate = 0;\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n      let newProgress;\n      const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n      if (translatesDiff === 0) {\n        newProgress = 0;\n      } else {\n        newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n      }\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\n    let dummyEventAttached = false;\n\n    function dummyEventListener() {}\n\n    const events = (swiper, method) => {\n      const document = getDocument();\n      const {\n        params,\n        touchEvents,\n        el,\n        wrapperEl,\n        device,\n        support\n      } = swiper;\n      const capture = !!params.nested;\n      const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n      const swiperMethod = method; // Touch Events\n\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 = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n          passive: true,\n          capture: false\n        } : false;\n        el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n        el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n          passive: false,\n          capture\n        } : capture);\n        el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n        if (touchEvents.cancel) {\n          el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n        }\n      } // Prevent Links Clicks\n\n\n      if (params.preventClicks || params.preventClicksPropagation) {\n        el[domMethod]('click', swiper.onClick, true);\n      }\n\n      if (params.cssMode) {\n        wrapperEl[domMethod]('scroll', swiper.onScroll);\n      } // Resize handler\n\n\n      if (params.updateOnWindowResize) {\n        swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n      } else {\n        swiper[swiperMethod]('observerUpdate', onResize, true);\n      }\n    };\n\n    function attachEvents() {\n      const swiper = this;\n      const document = getDocument();\n      const {\n        params,\n        support\n      } = swiper;\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\n    function detachEvents() {\n      const swiper = this;\n      events(swiper, 'off');\n    }\n\n    var events$1 = {\n      attachEvents,\n      detachEvents\n    };\n\n    const isGridEnabled = (swiper, params) => {\n      return swiper.grid && params.grid && params.grid.rows > 1;\n    };\n\n    function setBreakpoint() {\n      const swiper = this;\n      const {\n        activeIndex,\n        initialized,\n        loopedSlides = 0,\n        params,\n        $el\n      } = swiper;\n      const breakpoints = params.breakpoints;\n      if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n      const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n      if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\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      const wasEnabled = params.enabled;\n\n      if (wasMultiRow && !isMultiRow) {\n        $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`);\n        swiper.emitContainerClasses();\n      } else if (!wasMultiRow && isMultiRow) {\n        $el.addClass(`${params.containerModifierClass}grid`);\n\n        if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n          $el.addClass(`${params.containerModifierClass}grid-column`);\n        }\n\n        swiper.emitContainerClasses();\n      } // Toggle navigation, pagination, scrollbar\n\n\n      ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n        const wasModuleEnabled = params[prop] && params[prop].enabled;\n        const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n\n        if (wasModuleEnabled && !isModuleEnabled) {\n          swiper[prop].disable();\n        }\n\n        if (!wasModuleEnabled && isModuleEnabled) {\n          swiper[prop].enable();\n        }\n      });\n      const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n      const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n      if (directionChanged && initialized) {\n        swiper.changeDirection();\n      }\n\n      extend(swiper.params, breakpointParams);\n      const isEnabled = swiper.params.enabled;\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      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\n    function getBreakpoint(breakpoints, base, containerEl) {\n      if (base === void 0) {\n        base = 'window';\n      }\n\n      if (!breakpoints || base === 'container' && !containerEl) return undefined;\n      let breakpoint = false;\n      const window = getWindow();\n      const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\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 {\n            value,\n            point\n          };\n        }\n\n        return {\n          value: point,\n          point\n        };\n      });\n      points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n\n      for (let i = 0; i < points.length; i += 1) {\n        const {\n          point,\n          value\n        } = points[i];\n\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\n      return breakpoint || 'max';\n    }\n\n    var breakpoints = {\n      setBreakpoint,\n      getBreakpoint\n    };\n\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\n    function addClasses() {\n      const swiper = this;\n      const {\n        classNames,\n        params,\n        rtl,\n        $el,\n        device,\n        support\n      } = swiper; // prettier-ignore\n\n      const suffixes = prepareClasses(['initialized', params.direction, {\n        'pointer-events': !support.touch\n      }, {\n        'free-mode': swiper.params.freeMode && params.freeMode.enabled\n      }, {\n        'autoheight': params.autoHeight\n      }, {\n        'rtl': rtl\n      }, {\n        'grid': params.grid && params.grid.rows > 1\n      }, {\n        'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n      }, {\n        'android': device.android\n      }, {\n        'ios': device.ios\n      }, {\n        'css-mode': params.cssMode\n      }, {\n        'centered': params.cssMode && params.centeredSlides\n      }, {\n        'watch-progress': params.watchSlidesProgress\n      }], params.containerModifierClass);\n      classNames.push(...suffixes);\n      $el.addClass([...classNames].join(' '));\n      swiper.emitContainerClasses();\n    }\n\n    function removeClasses() {\n      const swiper = this;\n      const {\n        $el,\n        classNames\n      } = swiper;\n      $el.removeClass(classNames.join(' '));\n      swiper.emitContainerClasses();\n    }\n\n    var classes = {\n      addClasses,\n      removeClasses\n    };\n\n    function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n      const window = getWindow();\n      let image;\n\n      function onReady() {\n        if (callback) callback();\n      }\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\n          if (sizes) {\n            image.sizes = sizes;\n          }\n\n          if (srcset) {\n            image.srcset = srcset;\n          }\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\n    function preloadImages() {\n      const swiper = this;\n      swiper.imagesToLoad = swiper.$el.find('img');\n\n      function onReady() {\n        if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n        if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n        if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n          if (swiper.params.updateOnImagesReady) swiper.update();\n          swiper.emit('imagesReady');\n        }\n      }\n\n      for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n        const imageEl = swiper.imagesToLoad[i];\n        swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n      }\n    }\n\n    var images = {\n      loadImage,\n      preloadImages\n    };\n\n    function checkOverflow() {\n      const swiper = this;\n      const {\n        isLocked: wasLocked,\n        params\n      } = swiper;\n      const {\n        slidesOffsetBefore\n      } = params;\n\n      if (slidesOffsetBefore) {\n        const lastSlideIndex = swiper.slides.length - 1;\n        const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n        swiper.isLocked = swiper.size > lastSlideRightEdge;\n      } else {\n        swiper.isLocked = swiper.snapGrid.length === 1;\n      }\n\n      if (params.allowSlideNext === true) {\n        swiper.allowSlideNext = !swiper.isLocked;\n      }\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\n      if (wasLocked !== swiper.isLocked) {\n        swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n      }\n    }\n\n    var checkOverflow$1 = {\n      checkOverflow\n    };\n\n    var defaults = {\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      // Overrides\n      width: null,\n      height: null,\n      //\n      preventInteractionOnTransition: false,\n      // ssr\n      userAgent: null,\n      url: null,\n      // To support iOS's swipe-to-go-back gesture (when being used in-app).\n      edgeSwipeDetection: false,\n      edgeSwipeThreshold: 20,\n      // Autoheight\n      autoHeight: false,\n      // Set wrapper width\n      setWrapperSize: false,\n      // Virtual Translate\n      virtualTranslate: false,\n      // Effects\n      effect: 'slide',\n      // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n      // Breakpoints\n      breakpoints: undefined,\n      breakpointsBase: 'window',\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,\n      // in px\n      slidesOffsetAfter: 0,\n      // in px\n      normalizeSlideIndex: true,\n      centerInsufficientSlides: false,\n      // Disable swiper and hide navigation when container not overflow\n      watchOverflow: true,\n      // Round length\n      roundLengths: false,\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      // Unique Navigation Elements\n      uniqueNavElements: true,\n      // Resistance\n      resistance: true,\n      resistanceRatio: 0.85,\n      // Progress\n      watchSlidesProgress: false,\n      // Cursor\n      grabCursor: false,\n      // Clicks\n      preventClicks: true,\n      preventClicksPropagation: true,\n      slideToClickedSlide: false,\n      // Images\n      preloadImages: true,\n      updateOnImagesReady: true,\n      // loop\n      loop: false,\n      loopAdditionalSlides: 0,\n      loopedSlides: null,\n      loopedSlidesLimit: true,\n      loopFillGroupWithBlank: false,\n      loopPreventsSlide: true,\n      // rewind\n      rewind: false,\n      // Swiping/no swiping\n      allowSlidePrev: true,\n      allowSlideNext: true,\n      swipeHandler: null,\n      // '.swipe-handler',\n      noSwiping: true,\n      noSwipingClass: 'swiper-no-swiping',\n      noSwipingSelector: null,\n      // Passive Listeners\n      passiveListeners: true,\n      maxBackfaceHiddenSlides: 10,\n      // NS\n      containerModifierClass: 'swiper-',\n      // 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      // Callbacks\n      runCallbacksOnInit: true,\n      // Internals\n      _emitClasses: false\n    };\n\n    function moduleExtendParams(params, allModulesParams) {\n      return function extendParams(obj) {\n        if (obj === void 0) {\n          obj = {};\n        }\n\n        const moduleParamName = Object.keys(obj)[0];\n        const moduleParams = obj[moduleParamName];\n\n        if (typeof moduleParams !== 'object' || moduleParams === null) {\n          extend(allModulesParams, obj);\n          return;\n        }\n\n        if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n          params[moduleParamName] = {\n            auto: true\n          };\n        }\n\n        if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n          extend(allModulesParams, obj);\n          return;\n        }\n\n        if (params[moduleParamName] === true) {\n          params[moduleParamName] = {\n            enabled: true\n          };\n        }\n\n        if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n          params[moduleParamName].enabled = true;\n        }\n\n        if (!params[moduleParamName]) params[moduleParamName] = {\n          enabled: false\n        };\n        extend(allModulesParams, obj);\n      };\n    }\n\n    /* eslint no-param-reassign: \"off\" */\n    const prototypes = {\n      eventsEmitter,\n      update,\n      translate,\n      transition,\n      slide,\n      loop,\n      grabCursor,\n      events: events$1,\n      breakpoints,\n      checkOverflow: checkOverflow$1,\n      classes,\n      images\n    };\n    const extendedDefaults = {};\n\n    class Swiper {\n      constructor() {\n        let el;\n        let params;\n\n        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n          params = args[0];\n        } else {\n          [el, params] = args;\n        }\n\n        if (!params) params = {};\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, {\n              el: containerEl\n            });\n            swipers.push(new Swiper(newParams));\n          }); // eslint-disable-next-line no-constructor-return\n\n          return swipers;\n        } // Swiper Instance\n\n\n        const swiper = this;\n        swiper.__swiper__ = true;\n        swiper.support = getSupport();\n        swiper.device = getDevice({\n          userAgent: params.userAgent\n        });\n        swiper.browser = getBrowser();\n        swiper.eventsListeners = {};\n        swiper.eventsAnyListeners = [];\n        swiper.modules = [...swiper.__modules__];\n\n        if (params.modules && Array.isArray(params.modules)) {\n          swiper.modules.push(...params.modules);\n        }\n\n        const allModulesParams = {};\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        }); // Extend defaults with modules params\n\n        const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params\n\n        swiper.params = extend({}, swiperParams, extendedDefaults, params);\n        swiper.originalParams = extend({}, swiper.params);\n        swiper.passedParams = extend({}, params); // add event listeners\n\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\n        if (swiper.params && swiper.params.onAny) {\n          swiper.onAny(swiper.params.onAny);\n        } // Save Dom lib\n\n\n        swiper.$ = $; // Extend Swiper\n\n        Object.assign(swiper, {\n          enabled: swiper.params.enabled,\n          el,\n          // Classes\n          classNames: [],\n          // Slides\n          slides: $(),\n          slidesGrid: [],\n          snapGrid: [],\n          slidesSizesGrid: [],\n\n          // isDirection\n          isHorizontal() {\n            return swiper.params.direction === 'horizontal';\n          },\n\n          isVertical() {\n            return swiper.params.direction === 'vertical';\n          },\n\n          // Indexes\n          activeIndex: 0,\n          realIndex: 0,\n          //\n          isBeginning: true,\n          isEnd: false,\n          // Props\n          translate: 0,\n          previousTranslate: 0,\n          progress: 0,\n          velocity: 0,\n          animating: false,\n          // Locks\n          allowSlideNext: swiper.params.allowSlideNext,\n          allowSlidePrev: swiper.params.allowSlidePrev,\n          // Touch Events\n          touchEvents: function touchEvents() {\n            const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n            const desktop = ['pointerdown', 'pointermove', 'pointerup'];\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 ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n          }(),\n          touchEventsData: {\n            isTouched: undefined,\n            isMoved: undefined,\n            allowTouchCallbacks: undefined,\n            touchStartTime: undefined,\n            isScrolling: undefined,\n            currentTranslate: undefined,\n            startTranslate: undefined,\n            allowThresholdMove: undefined,\n            // Form elements to match\n            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          // Clicks\n          allowClick: true,\n          // Touches\n          allowTouchMove: swiper.params.allowTouchMove,\n          touches: {\n            startX: 0,\n            startY: 0,\n            currentX: 0,\n            currentY: 0,\n            diff: 0\n          },\n          // Images\n          imagesToLoad: [],\n          imagesLoaded: 0\n        });\n        swiper.emit('_swiper'); // Init\n\n        if (swiper.params.init) {\n          swiper.init();\n        } // Return app instance\n        // eslint-disable-next-line no-constructor-return\n\n\n        return swiper;\n      }\n\n      enable() {\n        const swiper = this;\n        if (swiper.enabled) return;\n        swiper.enabled = true;\n\n        if (swiper.params.grabCursor) {\n          swiper.setGrabCursor();\n        }\n\n        swiper.emit('enable');\n      }\n\n      disable() {\n        const swiper = this;\n        if (!swiper.enabled) return;\n        swiper.enabled = false;\n\n        if (swiper.params.grabCursor) {\n          swiper.unsetGrabCursor();\n        }\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 className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n        });\n        swiper.emit('_containerClasses', cls.join(' '));\n      }\n\n      getSlideClasses(slideEl) {\n        const swiper = this;\n        if (swiper.destroyed) return '';\n        return slideEl.className.split(' ').filter(className => {\n          return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\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({\n            slideEl,\n            classNames\n          });\n          swiper.emit('_slideClass', slideEl, classNames);\n        });\n        swiper.emit('_slideClasses', updates);\n      }\n\n      slidesPerViewDynamic(view, exact) {\n        if (view === void 0) {\n          view = 'current';\n        }\n\n        if (exact === void 0) {\n          exact = false;\n        }\n\n        const swiper = this;\n        const {\n          params,\n          slides,\n          slidesGrid,\n          slidesSizesGrid,\n          size: swiperSize,\n          activeIndex\n        } = swiper;\n        let spv = 1;\n\n        if (params.centeredSlides) {\n          let slideSize = slides[activeIndex].swiperSlideSize;\n          let breakLoop;\n\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\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 ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n\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\n              if (slideInView) {\n                spv += 1;\n              }\n            }\n          }\n        }\n\n        return spv;\n      }\n\n      update() {\n        const swiper = this;\n        if (!swiper || swiper.destroyed) return;\n        const {\n          snapGrid,\n          params\n        } = swiper; // Breakpoints\n\n        if (params.breakpoints) {\n          swiper.setBreakpoint();\n        }\n\n        swiper.updateSize();\n        swiper.updateSlides();\n        swiper.updateProgress();\n        swiper.updateSlidesClasses();\n\n        function setTranslate() {\n          const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n          const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n          swiper.setTranslate(newTranslate);\n          swiper.updateActiveIndex();\n          swiper.updateSlidesClasses();\n        }\n\n        let translated;\n\n        if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n          setTranslate();\n\n          if (swiper.params.autoHeight) {\n            swiper.updateAutoHeight();\n          }\n        } else {\n          if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n            translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n          } else {\n            translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n          }\n\n          if (!translated) {\n            setTranslate();\n          }\n        }\n\n        if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n          swiper.checkOverflow();\n        }\n\n        swiper.emit('update');\n      }\n\n      changeDirection(newDirection, needUpdate) {\n        if (needUpdate === void 0) {\n          needUpdate = true;\n        }\n\n        const swiper = this;\n        const currentDirection = swiper.params.direction;\n\n        if (!newDirection) {\n          // eslint-disable-next-line\n          newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n        }\n\n        if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n          return swiper;\n        }\n\n        swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n        swiper.emitContainerClasses();\n        swiper.params.direction = newDirection;\n        swiper.slides.each(slideEl => {\n          if (newDirection === 'vertical') {\n            slideEl.style.width = '';\n          } else {\n            slideEl.style.height = '';\n          }\n        });\n        swiper.emit('changeDirection');\n        if (needUpdate) swiper.update();\n        return swiper;\n      }\n\n      changeLanguageDirection(direction) {\n        const swiper = this;\n        if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n        swiper.rtl = direction === 'rtl';\n        swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n\n        if (swiper.rtl) {\n          swiper.$el.addClass(`${swiper.params.containerModifierClass}rtl`);\n          swiper.el.dir = 'rtl';\n        } else {\n          swiper.$el.removeClass(`${swiper.params.containerModifierClass}rtl`);\n          swiper.el.dir = 'ltr';\n        }\n\n        swiper.update();\n      }\n\n      mount(el) {\n        const swiper = this;\n        if (swiper.mounted) return true; // Find el\n\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())); // Children needs to return slot items\n\n            res.children = options => $el.children(options);\n\n            return res;\n          }\n\n          if (!$el.children) {\n            return $($el).children(getWrapperSelector());\n          }\n\n          return $el.children(getWrapperSelector());\n        }; // Find Wrapper\n\n\n        let $wrapperEl = getWrapper();\n\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          // RTL\n          rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n          rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n          wrongRTL: $wrapperEl.css('display') === '-webkit-box'\n        });\n        return true;\n      }\n\n      init(el) {\n        const swiper = this;\n        if (swiper.initialized) return swiper;\n        const mounted = swiper.mount(el);\n        if (mounted === false) return swiper;\n        swiper.emit('beforeInit'); // Set breakpoint\n\n        if (swiper.params.breakpoints) {\n          swiper.setBreakpoint();\n        } // Add Classes\n\n\n        swiper.addClasses(); // Create loop\n\n        if (swiper.params.loop) {\n          swiper.loopCreate();\n        } // Update size\n\n\n        swiper.updateSize(); // Update slides\n\n        swiper.updateSlides();\n\n        if (swiper.params.watchOverflow) {\n          swiper.checkOverflow();\n        } // Set Grab Cursor\n\n\n        if (swiper.params.grabCursor && swiper.enabled) {\n          swiper.setGrabCursor();\n        }\n\n        if (swiper.params.preloadImages) {\n          swiper.preloadImages();\n        } // Slide To Initial Slide\n\n\n        if (swiper.params.loop) {\n          swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n        } else {\n          swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n        } // Attach events\n\n\n        swiper.attachEvents(); // Init Flag\n\n        swiper.initialized = true; // Emit\n\n        swiper.emit('init');\n        swiper.emit('afterInit');\n        return swiper;\n      }\n\n      destroy(deleteInstance, cleanStyles) {\n        if (deleteInstance === void 0) {\n          deleteInstance = true;\n        }\n\n        if (cleanStyles === void 0) {\n          cleanStyles = true;\n        }\n\n        const swiper = this;\n        const {\n          params,\n          $el,\n          $wrapperEl,\n          slides\n        } = swiper;\n\n        if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n          return null;\n        }\n\n        swiper.emit('beforeDestroy'); // Init Flag\n\n        swiper.initialized = false; // Detach events\n\n        swiper.detachEvents(); // Destroy loop\n\n        if (params.loop) {\n          swiper.loopDestroy();\n        } // Cleanup styles\n\n\n        if (cleanStyles) {\n          swiper.removeClasses();\n          $el.removeAttr('style');\n          $wrapperEl.removeAttr('style');\n\n          if (slides && slides.length) {\n            slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n          }\n        }\n\n        swiper.emit('destroy'); // Detach emitter events\n\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\n        swiper.destroyed = true;\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\n        Swiper.installModule(module);\n        return Swiper;\n      }\n\n    }\n\n    Object.keys(prototypes).forEach(prototypeGroup => {\n      Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n        Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n      });\n    });\n    Swiper.use([Resize, Observer]);\n\n    function Virtual(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on,\n        emit\n      } = _ref;\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      let cssModeTimeout;\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\n        if (params.cache && swiper.virtual.cache[index]) {\n          return swiper.virtual.cache[index];\n        }\n\n        const $slideEl = params.renderSlide ? $(params.renderSlide.call(swiper, slide, index)) : $(`<div class=\"${swiper.params.slideClass}\" data-swiper-slide-index=\"${index}\">${slide}</div>`);\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 {\n          slidesPerView,\n          slidesPerGroup,\n          centeredSlides\n        } = swiper.params;\n        const {\n          addSlidesBefore,\n          addSlidesAfter\n        } = swiper.params.virtual;\n        const {\n          from: previousFrom,\n          to: previousTo,\n          slides,\n          slidesGrid: previousSlidesGrid,\n          offset: previousOffset\n        } = swiper.virtual;\n\n        if (!swiper.params.cssMode) {\n          swiper.updateActiveIndex();\n        }\n\n        const activeIndex = swiper.activeIndex || 0;\n        let offsetProp;\n        if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n        let slidesAfter;\n        let slidesBefore;\n\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\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        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\n          if (swiper.lazy && swiper.params.lazy.enabled) {\n            swiper.lazy.load();\n          }\n\n          emit('virtualUpdate');\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\n          swiper.updateProgress();\n          emit('virtualUpdate');\n          return;\n        }\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\n              for (let i = from; i <= to; i += 1) {\n                slidesToRender.push(slides[i]);\n              }\n\n              return slidesToRender;\n            }()\n          });\n\n          if (swiper.params.virtual.renderExternalUpdate) {\n            onRendered();\n          } else {\n            emit('virtualUpdate');\n          }\n\n          return;\n        }\n\n        const prependIndexes = [];\n        const appendIndexes = [];\n\n        if (force) {\n          swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();\n        } else {\n          for (let i = previousFrom; i <= previousTo; i += 1) {\n            if (i < from || i > to) {\n              swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${i}\"]`).remove();\n            }\n          }\n        }\n\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\n        appendIndexes.forEach(index => {\n          swiper.$wrapperEl.append(renderSlide(slides[index], index));\n        });\n        prependIndexes.sort((a, b) => b - a).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\n        update(true);\n      }\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\n          newActiveIndex = activeIndex + slides.length;\n          numberOfNewSlides = slides.length;\n        } else {\n          swiper.virtual.slides.unshift(slides);\n        }\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\n            if (cachedElIndex) {\n              $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides);\n            }\n\n            newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n          });\n          swiper.virtual.cache = newCache;\n        }\n\n        update(true);\n        swiper.slideTo(newActiveIndex, 0);\n      }\n\n      function removeSlide(slidesIndexes) {\n        if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n        let activeIndex = swiper.activeIndex;\n\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\n            if (swiper.params.virtual.cache) {\n              delete swiper.virtual.cache[slidesIndexes[i]];\n            }\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\n          if (swiper.params.virtual.cache) {\n            delete swiper.virtual.cache[slidesIndexes];\n          }\n\n          if (slidesIndexes < activeIndex) activeIndex -= 1;\n          activeIndex = Math.max(activeIndex, 0);\n        }\n\n        update(true);\n        swiper.slideTo(activeIndex, 0);\n      }\n\n      function removeAllSlides() {\n        swiper.virtual.slides = [];\n\n        if (swiper.params.virtual.cache) {\n          swiper.virtual.cache = {};\n        }\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        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\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\n        if (swiper.params.cssMode) {\n          setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);\n        }\n      });\n      Object.assign(swiper.virtual, {\n        appendSlide,\n        prependSlide,\n        removeSlide,\n        removeAllSlides,\n        update\n      });\n    }\n\n    /* eslint-disable consistent-return */\n    function Keyboard(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on,\n        emit\n      } = _ref;\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        const {\n          rtlTranslate: rtl\n        } = swiper;\n        let e = event;\n        if (e.originalEvent) e = e.originalEvent; // jquery fix\n\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; // Directions locks\n\n        if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n          return false;\n        }\n\n        if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n          return false;\n        }\n\n        if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n          return undefined;\n        }\n\n        if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n          return undefined;\n        }\n\n        if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n          let inView = false; // Check that swiper should be inside of visible area of window\n\n          if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {\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 = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n\n          for (let i = 0; i < swiperCoord.length; i += 1) {\n            const point = swiperCoord[i];\n\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\n              inView = true;\n            }\n          }\n\n          if (!inView) return undefined;\n        }\n\n        if (swiper.isHorizontal()) {\n          if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n            if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n          }\n\n          if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n          if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n        } else {\n          if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n            if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n          }\n\n          if (isPageDown || isArrowDown) swiper.slideNext();\n          if (isPageUp || isArrowUp) swiper.slidePrev();\n        }\n\n        emit('keyPress', kc);\n        return undefined;\n      }\n\n      function enable() {\n        if (swiper.keyboard.enabled) return;\n        $(document).on('keydown', handle);\n        swiper.keyboard.enabled = true;\n      }\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      Object.assign(swiper.keyboard, {\n        enable,\n        disable\n      });\n    }\n\n    /* eslint-disable consistent-return */\n    function Mousewheel(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on,\n        emit\n      } = _ref;\n      const window = getWindow();\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      swiper.mousewheel = {\n        enabled: false\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        let sX = 0;\n        let sY = 0; // spinX, spinY\n\n        let pX = 0;\n        let pY = 0; // pixelX, pixelY\n        // Legacy\n\n        if ('detail' in e) {\n          sY = e.detail;\n        }\n\n        if ('wheelDelta' in e) {\n          sY = -e.wheelDelta / 120;\n        }\n\n        if ('wheelDeltaY' in e) {\n          sY = -e.wheelDeltaY / 120;\n        }\n\n        if ('wheelDeltaX' in e) {\n          sX = -e.wheelDeltaX / 120;\n        } // side scrolling on FF with DOMMouseScroll\n\n\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\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        } // Fall-back if spin cannot be determined\n\n\n        if (pX && !sX) {\n          sX = pX < 1 ? -1 : 1;\n        }\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\n      function handleMouseEnter() {\n        if (!swiper.enabled) return;\n        swiper.mouseEntered = true;\n      }\n\n      function handleMouseLeave() {\n        if (!swiper.enabled) return;\n        swiper.mouseEntered = false;\n      }\n\n      function animateSlider(newEvent) {\n        if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {\n          // Prevent if delta of wheel scroll delta is below configured threshold\n          return false;\n        }\n\n        if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {\n          // Prevent if time between scrolls is below configured threshold\n          return false;\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\n\n        if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n          // Return false as a default\n          return true;\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\n\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        } // If you got here is because an animation has been triggered so store the current time\n\n\n        lastScrollTime = new window.Date().getTime(); // Return false as a default\n\n        return false;\n      }\n\n      function releaseScroll(newEvent) {\n        const params = swiper.params.mousewheel;\n\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\n        return false;\n      }\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\n        if (swiper.params.mousewheel.eventsTarget !== 'container') {\n          target = $(swiper.params.mousewheel.eventsTarget);\n        }\n\n        if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;\n        if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n        let delta = 0;\n        const rtlFactor = swiper.rtlTranslate ? -1 : 1;\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;else return true;\n          } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\n        } else {\n          delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n        }\n\n        if (delta === 0) return true;\n        if (params.invert) delta = -delta; // Get the scroll positions\n\n        let positions = swiper.getTranslate() + delta * params.sensitivity;\n        if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n        if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate(); // 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\n        disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\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          }; // Keep the most recent events\n\n          if (recentWheelEvents.length >= 2) {\n            recentWheelEvents.shift(); // only store the last N events\n          }\n\n          const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n          recentWheelEvents.push(newEvent); // 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\n          if (prevEvent) {\n            if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n              animateSlider(newEvent);\n            }\n          } else {\n            animateSlider(newEvent);\n          } // If it's time to release the scroll:\n          //   Return now so you don't hit the preventDefault.\n\n\n          if (releaseScroll(newEvent)) {\n            return true;\n          }\n        } else {\n          // Freemode or scrollContainer:\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 = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;\n\n          if (!ignoreWheelEvents) {\n            lastEventBeforeSnap = undefined;\n\n            if (swiper.params.loop) {\n              swiper.loopFix();\n            }\n\n            let position = swiper.getTranslate() + delta * params.sensitivity;\n            const wasBeginning = swiper.isBeginning;\n            const wasEnd = swiper.isEnd;\n            if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n            if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\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\n              if (recentWheelEvents.length >= 15) {\n                recentWheelEvents.shift(); // only store the last N events\n              }\n\n              const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n              const firstEvent = recentWheelEvents[0];\n              recentWheelEvents.push(newEvent);\n\n              if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n                // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n                recentWheelEvents.splice(0);\n              } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {\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\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            } // Emit event\n\n\n            if (!ignoreWheelEvents) emit('scroll', e); // Stop autoplay\n\n            if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); // Return page scroll on edge positions\n\n            if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n          }\n        }\n\n        if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n        return false;\n      }\n\n      function events(method) {\n        let target = swiper.$el;\n\n        if (swiper.params.mousewheel.eventsTarget !== 'container') {\n          target = $(swiper.params.mousewheel.eventsTarget);\n        }\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\n        if (swiper.mousewheel.enabled) return false;\n        events('on');\n        swiper.mousewheel.enabled = true;\n        return true;\n      }\n\n      function disable() {\n        if (swiper.params.cssMode) {\n          swiper.wrapperEl.addEventListener(event, handle);\n          return true;\n        }\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\n        if (swiper.params.mousewheel.enabled) enable();\n      });\n      on('destroy', () => {\n        if (swiper.params.cssMode) {\n          enable();\n        }\n\n        if (swiper.mousewheel.enabled) disable();\n      });\n      Object.assign(swiper.mousewheel, {\n        enable,\n        disable\n      });\n    }\n\n    function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n      const document = getDocument();\n\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\n            if (!element) {\n              element = document.createElement('div');\n              element.className = checkProps[key];\n              swiper.$el.append(element);\n            }\n\n            params[key] = element;\n            originalParams[key] = element;\n          }\n        });\n      }\n\n      return params;\n    }\n\n    function Navigation(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on,\n        emit\n      } = _ref;\n      extendParams({\n        navigation: {\n          nextEl: null,\n          prevEl: null,\n          hideOnClick: false,\n          disabledClass: 'swiper-button-disabled',\n          hiddenClass: 'swiper-button-hidden',\n          lockClass: 'swiper-button-lock',\n          navigationDisabledClass: 'swiper-navigation-disabled'\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\n        if (el) {\n          $el = $(el);\n\n          if (swiper.params.uniqueNavElements && typeof el === 'string' && $el.length > 1 && swiper.$el.find(el).length === 1) {\n            $el = swiper.$el.find(el);\n          }\n        }\n\n        return $el;\n      }\n\n      function toggleEl($el, disabled) {\n        const params = swiper.params.navigation;\n\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\n          if (swiper.params.watchOverflow && swiper.enabled) {\n            $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n          }\n        }\n      }\n\n      function update() {\n        // Update Navigation Buttons\n        if (swiper.params.loop) return;\n        const {\n          $nextEl,\n          $prevEl\n        } = swiper.navigation;\n        toggleEl($prevEl, swiper.isBeginning && !swiper.params.rewind);\n        toggleEl($nextEl, swiper.isEnd && !swiper.params.rewind);\n      }\n\n      function onPrevClick(e) {\n        e.preventDefault();\n        if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n        swiper.slidePrev();\n        emit('navigationPrev');\n      }\n\n      function onNextClick(e) {\n        e.preventDefault();\n        if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n        swiper.slideNext();\n        emit('navigationNext');\n      }\n\n      function init() {\n        const params = swiper.params.navigation;\n        swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n          nextEl: 'swiper-button-next',\n          prevEl: 'swiper-button-prev'\n        });\n        if (!(params.nextEl || params.prevEl)) return;\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\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\n      function destroy() {\n        const {\n          $nextEl,\n          $prevEl\n        } = swiper.navigation;\n\n        if ($nextEl && $nextEl.length) {\n          $nextEl.off('click', onNextClick);\n          $nextEl.removeClass(swiper.params.navigation.disabledClass);\n        }\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        if (swiper.params.navigation.enabled === false) {\n          // eslint-disable-next-line\n          disable();\n        } else {\n          init();\n          update();\n        }\n      });\n      on('toEdge fromEdge lock unlock', () => {\n        update();\n      });\n      on('destroy', () => {\n        destroy();\n      });\n      on('enable disable', () => {\n        const {\n          $nextEl,\n          $prevEl\n        } = swiper.navigation;\n\n        if ($nextEl) {\n          $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n        }\n\n        if ($prevEl) {\n          $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n        }\n      });\n      on('click', (_s, e) => {\n        const {\n          $nextEl,\n          $prevEl\n        } = swiper.navigation;\n        const targetEl = e.target;\n\n        if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {\n          if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n          let isHidden;\n\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\n          if (isHidden === true) {\n            emit('navigationShow');\n          } else {\n            emit('navigationHide');\n          }\n\n          if ($nextEl) {\n            $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n          }\n\n          if ($prevEl) {\n            $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n          }\n        }\n      });\n\n      const enable = () => {\n        swiper.$el.removeClass(swiper.params.navigation.navigationDisabledClass);\n        init();\n        update();\n      };\n\n      const disable = () => {\n        swiper.$el.addClass(swiper.params.navigation.navigationDisabledClass);\n        destroy();\n      };\n\n      Object.assign(swiper.navigation, {\n        enable,\n        disable,\n        update,\n        init,\n        destroy\n      });\n    }\n\n    function classesToSelector(classes) {\n      if (classes === void 0) {\n        classes = '';\n      }\n\n      return `.${classes.trim().replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n  .replace(/ /g, '.')}`;\n    }\n\n    function Pagination(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on,\n        emit\n      } = _ref;\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',\n          // '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          paginationDisabledClass: `${pfx}-disabled`\n        }\n      });\n      swiper.pagination = {\n        el: null,\n        $el: null,\n        bullets: []\n      };\n      let bulletSize;\n      let dynamicBulletIndex = 0;\n\n      function isPaginationDisabled() {\n        return !swiper.params.pagination.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0;\n      }\n\n      function setSideBullets($bulletEl, position) {\n        const {\n          bulletActiveClass\n        } = swiper.params.pagination;\n        $bulletEl[position]().addClass(`${bulletActiveClass}-${position}`)[position]().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 = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n        const $el = swiper.pagination.$el; // Current/Total\n\n        let current;\n        const total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n        if (swiper.params.loop) {\n          current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n\n          if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n            current -= slidesLength - swiper.loopedSlides * 2;\n          }\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        } // Types\n\n\n        if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n          const bullets = swiper.pagination.bullets;\n          let firstIndex;\n          let lastIndex;\n          let midIndex;\n\n          if (params.dynamicBullets) {\n            bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n            $el.css(swiper.isHorizontal() ? 'width' : 'height', `${bulletSize * (params.dynamicMainBullets + 4)}px`);\n\n            if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n              dynamicBulletIndex += current - (swiper.previousIndex - swiper.loopedSlides || 0);\n\n              if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n                dynamicBulletIndex = params.dynamicMainBullets - 1;\n              } else if (dynamicBulletIndex < 0) {\n                dynamicBulletIndex = 0;\n              }\n            }\n\n            firstIndex = Math.max(current - dynamicBulletIndex, 0);\n            lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n            midIndex = (lastIndex + firstIndex) / 2;\n          }\n\n          bullets.removeClass(['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`).join(' '));\n\n          if ($el.length > 1) {\n            bullets.each(bullet => {\n              const $bullet = $(bullet);\n              const bulletIndex = $bullet.index();\n\n              if (bulletIndex === current) {\n                $bullet.addClass(params.bulletActiveClass);\n              }\n\n              if (params.dynamicBullets) {\n                if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n                  $bullet.addClass(`${params.bulletActiveClass}-main`);\n                }\n\n                if (bulletIndex === firstIndex) {\n                  setSideBullets($bullet, 'prev');\n                }\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\n            if (params.dynamicBullets) {\n              const $firstDisplayedBullet = bullets.eq(firstIndex);\n              const $lastDisplayedBullet = bullets.eq(lastIndex);\n\n              for (let i = firstIndex; i <= lastIndex; i += 1) {\n                bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n              }\n\n              if (swiper.params.loop) {\n                if (bulletIndex >= bullets.length) {\n                  for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n                    bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n                  }\n\n                  bullets.eq(bullets.length - params.dynamicMainBullets - 1).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\n          if (params.dynamicBullets) {\n            const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n            const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n            const offsetProp = rtl ? 'right' : 'left';\n            bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n          }\n        }\n\n        if (params.type === 'fraction') {\n          $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1));\n          $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));\n        }\n\n        if (params.type === 'progressbar') {\n          let progressbarDirection;\n\n          if (params.progressbarOpposite) {\n            progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n          } else {\n            progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n          }\n\n          const scale = (current + 1) / total;\n          let scaleX = 1;\n          let scaleY = 1;\n\n          if (progressbarDirection === 'horizontal') {\n            scaleX = scale;\n          } else {\n            scaleY = scale;\n          }\n\n          $el.find(classesToSelector(params.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n        }\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\n        if (swiper.params.watchOverflow && swiper.enabled) {\n          $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n        }\n      }\n\n      function render() {\n        // Render Container\n        const params = swiper.params.pagination;\n        if (isPaginationDisabled()) return;\n        const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n        const $el = swiper.pagination.$el;\n        let paginationHTML = '';\n\n        if (params.type === 'bullets') {\n          let numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n          if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.loop && numberOfBullets > slidesLength) {\n            numberOfBullets = slidesLength;\n          }\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}\"></${params.bulletElement}>`;\n            }\n          }\n\n          $el.html(paginationHTML);\n          swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));\n        }\n\n        if (params.type === 'fraction') {\n          if (params.renderFraction) {\n            paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n          } else {\n            paginationHTML = `<span class=\"${params.currentClass}\"></span>` + ' / ' + `<span class=\"${params.totalClass}\"></span>`;\n          }\n\n          $el.html(paginationHTML);\n        }\n\n        if (params.type === 'progressbar') {\n          if (params.renderProgressbar) {\n            paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n          } else {\n            paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n          }\n\n          $el.html(paginationHTML);\n        }\n\n        if (params.type !== 'custom') {\n          emit('paginationRender', swiper.pagination.$el[0]);\n        }\n      }\n\n      function init() {\n        swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n          el: 'swiper-pagination'\n        });\n        const params = swiper.params.pagination;\n        if (!params.el) return;\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); // check if it belongs to another nested Swiper\n\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(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n\n        if (params.type === 'bullets' && params.dynamicBullets) {\n          $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n          dynamicBulletIndex = 0;\n\n          if (params.dynamicMainBullets < 1) {\n            params.dynamicMainBullets = 1;\n          }\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\n      function destroy() {\n        const params = swiper.params.pagination;\n        if (isPaginationDisabled()) return;\n        const $el = swiper.pagination.$el;\n        $el.removeClass(params.hiddenClass);\n        $el.removeClass(params.modifierClass + params.type);\n        $el.removeClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n        if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n\n        if (params.clickable) {\n          $el.off('click', classesToSelector(params.bulletClass));\n        }\n      }\n\n      on('init', () => {\n        if (swiper.params.pagination.enabled === false) {\n          // eslint-disable-next-line\n          disable();\n        } else {\n          init();\n          render();\n          update();\n        }\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 {\n          $el\n        } = swiper.pagination;\n\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 {\n          $el\n        } = swiper.pagination;\n\n        if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && $el && $el.length > 0 && !$(targetEl).hasClass(swiper.params.pagination.bulletClass)) {\n          if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n          const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass);\n\n          if (isHidden === true) {\n            emit('paginationShow');\n          } else {\n            emit('paginationHide');\n          }\n\n          $el.toggleClass(swiper.params.pagination.hiddenClass);\n        }\n      });\n\n      const enable = () => {\n        swiper.$el.removeClass(swiper.params.pagination.paginationDisabledClass);\n\n        if (swiper.pagination.$el) {\n          swiper.pagination.$el.removeClass(swiper.params.pagination.paginationDisabledClass);\n        }\n\n        init();\n        render();\n        update();\n      };\n\n      const disable = () => {\n        swiper.$el.addClass(swiper.params.pagination.paginationDisabledClass);\n\n        if (swiper.pagination.$el) {\n          swiper.pagination.$el.addClass(swiper.params.pagination.paginationDisabledClass);\n        }\n\n        destroy();\n      };\n\n      Object.assign(swiper.pagination, {\n        enable,\n        disable,\n        render,\n        update,\n        init,\n        destroy\n      });\n    }\n\n    function Scrollbar(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on,\n        emit\n      } = _ref;\n      const document = getDocument();\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      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          scrollbarDisabledClass: 'swiper-scrollbar-disabled',\n          horizontalClass: `swiper-scrollbar-horizontal`,\n          verticalClass: `swiper-scrollbar-vertical`\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 {\n          scrollbar,\n          rtlTranslate: rtl,\n          progress\n        } = swiper;\n        const {\n          $dragEl,\n          $el\n        } = scrollbar;\n        const params = swiper.params.scrollbar;\n        let newSize = dragSize;\n        let newPos = (trackSize - dragSize) * progress;\n\n        if (rtl) {\n          newPos = -newPos;\n\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\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\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\n      function setTransition(duration) {\n        if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n        swiper.scrollbar.$dragEl.transition(duration);\n      }\n\n      function updateSize() {\n        if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n        const {\n          scrollbar\n        } = swiper;\n        const {\n          $dragEl,\n          $el\n        } = scrollbar;\n        $dragEl[0].style.width = '';\n        $dragEl[0].style.height = '';\n        trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n        divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n\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\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'](swiper.params.scrollbar.lockClass);\n        }\n      }\n\n      function getPointerPosition(e) {\n        if (swiper.isHorizontal()) {\n          return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX;\n        }\n\n        return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY;\n      }\n\n      function setDragPosition(e) {\n        const {\n          scrollbar,\n          rtlTranslate: rtl\n        } = swiper;\n        const {\n          $el\n        } = scrollbar;\n        let positionRatio;\n        positionRatio = (getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n        positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n\n        if (rtl) {\n          positionRatio = 1 - positionRatio;\n        }\n\n        const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n        swiper.updateProgress(position);\n        swiper.setTranslate(position);\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n      }\n\n      function onDragStart(e) {\n        const params = swiper.params.scrollbar;\n        const {\n          scrollbar,\n          $wrapperEl\n        } = swiper;\n        const {\n          $el,\n          $dragEl\n        } = scrollbar;\n        isTouched = true;\n        dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n        e.preventDefault();\n        e.stopPropagation();\n        $wrapperEl.transition(100);\n        $dragEl.transition(100);\n        setDragPosition(e);\n        clearTimeout(dragTimeout);\n        $el.transition(0);\n\n        if (params.hide) {\n          $el.css('opacity', 1);\n        }\n\n        if (swiper.params.cssMode) {\n          swiper.$wrapperEl.css('scroll-snap-type', 'none');\n        }\n\n        emit('scrollbarDragStart', e);\n      }\n\n      function onDragMove(e) {\n        const {\n          scrollbar,\n          $wrapperEl\n        } = swiper;\n        const {\n          $el,\n          $dragEl\n        } = scrollbar;\n        if (!isTouched) return;\n        if (e.preventDefault) e.preventDefault();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\n      function onDragEnd(e) {\n        const params = swiper.params.scrollbar;\n        const {\n          scrollbar,\n          $wrapperEl\n        } = swiper;\n        const {\n          $el\n        } = scrollbar;\n        if (!isTouched) return;\n        isTouched = false;\n\n        if (swiper.params.cssMode) {\n          swiper.$wrapperEl.css('scroll-snap-type', '');\n          $wrapperEl.transition('');\n        }\n\n        if (params.hide) {\n          clearTimeout(dragTimeout);\n          dragTimeout = nextTick(() => {\n            $el.css('opacity', 0);\n            $el.transition(400);\n          }, 1000);\n        }\n\n        emit('scrollbarDragEnd', e);\n\n        if (params.snapOnRelease) {\n          swiper.slideToClosest();\n        }\n      }\n\n      function events(method) {\n        const {\n          scrollbar,\n          touchEventsTouch,\n          touchEventsDesktop,\n          params,\n          support\n        } = swiper;\n        const $el = scrollbar.$el;\n        if (!$el) return;\n        const target = $el[0];\n        const activeListener = support.passiveListener && params.passiveListeners ? {\n          passive: false,\n          capture: false\n        } : false;\n        const passiveListener = support.passiveListener && params.passiveListeners ? {\n          passive: true,\n          capture: false\n        } : false;\n        if (!target) return;\n        const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n\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 || !swiper.scrollbar.el) return;\n        events('on');\n      }\n\n      function disableDraggable() {\n        if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n        events('off');\n      }\n\n      function init() {\n        const {\n          scrollbar,\n          $el: $swiperEl\n        } = swiper;\n        swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n          el: 'swiper-scrollbar'\n        });\n        const params = swiper.params.scrollbar;\n        if (!params.el) return;\n        let $el = $(params.el);\n\n        if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n          $el = $swiperEl.find(params.el);\n        }\n\n        $el.addClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n        let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n\n        if ($dragEl.length === 0) {\n          $dragEl = $(`<div class=\"${swiper.params.scrollbar.dragClass}\"></div>`);\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\n      function destroy() {\n        const params = swiper.params.scrollbar;\n        const $el = swiper.scrollbar.$el;\n\n        if ($el) {\n          $el.removeClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n        }\n\n        disableDraggable();\n      }\n\n      on('init', () => {\n        if (swiper.params.scrollbar.enabled === false) {\n          // eslint-disable-next-line\n          disable();\n        } else {\n          init();\n          updateSize();\n          setTranslate();\n        }\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 {\n          $el\n        } = swiper.scrollbar;\n\n        if ($el) {\n          $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n        }\n      });\n      on('destroy', () => {\n        destroy();\n      });\n\n      const enable = () => {\n        swiper.$el.removeClass(swiper.params.scrollbar.scrollbarDisabledClass);\n\n        if (swiper.scrollbar.$el) {\n          swiper.scrollbar.$el.removeClass(swiper.params.scrollbar.scrollbarDisabledClass);\n        }\n\n        init();\n        updateSize();\n        setTranslate();\n      };\n\n      const disable = () => {\n        swiper.$el.addClass(swiper.params.scrollbar.scrollbarDisabledClass);\n\n        if (swiper.scrollbar.$el) {\n          swiper.scrollbar.$el.addClass(swiper.params.scrollbar.scrollbarDisabledClass);\n        }\n\n        destroy();\n      };\n\n      Object.assign(swiper.scrollbar, {\n        enable,\n        disable,\n        updateSize,\n        setTranslate,\n        init,\n        destroy\n      });\n    }\n\n    function Parallax(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on\n      } = _ref;\n      extendParams({\n        parallax: {\n          enabled: false\n        }\n      });\n\n      const setTransform = (el, progress) => {\n        const {\n          rtl\n        } = swiper;\n        const $el = $(el);\n        const rtlFactor = rtl ? -1 : 1;\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\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\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 {\n          $el,\n          slides,\n          progress,\n          snapGrid\n        } = swiper;\n        $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n          setTransform(el, progress);\n        });\n        slides.each((slideEl, slideIndex) => {\n          let slideProgress = slideEl.progress;\n\n          if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n            slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n          }\n\n          slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n          $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n            setTransform(el, slideProgress);\n          });\n        });\n      };\n\n      const setTransition = function (duration) {\n        if (duration === void 0) {\n          duration = swiper.params.speed;\n        }\n\n        const {\n          $el\n        } = swiper;\n        $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(parallaxEl => {\n          const $parallaxEl = $(parallaxEl);\n          let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n          if (duration === 0) parallaxDuration = 0;\n          $parallaxEl.transition(parallaxDuration);\n        });\n      };\n\n      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\n    function Zoom(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on,\n        emit\n      } = _ref;\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      swiper.zoom = {\n        enabled: false\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      let scale = 1;\n      Object.defineProperty(swiper.zoom, 'scale', {\n        get() {\n          return scale;\n        },\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\n          scale = value;\n        }\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      } // Events\n\n\n      function onGestureStart(e) {\n        const support = swiper.support;\n        const params = swiper.params.zoom;\n        fakeGestureTouched = false;\n        fakeGestureMoved = false;\n\n        if (!support.gestures) {\n          if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {\n            return;\n          }\n\n          fakeGestureTouched = true;\n          gesture.scaleStart = getDistanceBetweenTouches(e);\n        }\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.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n          gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n          gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n          if (gesture.$imageWrapEl.length === 0) {\n            gesture.$imageEl = undefined;\n            return;\n          }\n        }\n\n        if (gesture.$imageEl) {\n          gesture.$imageEl.transition(0);\n        }\n\n        isScaling = true;\n      }\n\n      function onGestureChange(e) {\n        const support = swiper.support;\n        const params = swiper.params.zoom;\n        const zoom = swiper.zoom;\n\n        if (!support.gestures) {\n          if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {\n            return;\n          }\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\n        if (support.gestures) {\n          zoom.scale = e.scale * currentScale;\n        } else {\n          zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n        }\n\n        if (zoom.scale > gesture.maxRatio) {\n          zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n        }\n\n        if (zoom.scale < params.minRatio) {\n          zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n        }\n\n        gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n      }\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\n        if (!support.gestures) {\n          if (!fakeGestureTouched || !fakeGestureMoved) {\n            return;\n          }\n\n          if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !device.android) {\n            return;\n          }\n\n          fakeGestureTouched = false;\n          fakeGestureMoved = false;\n        }\n\n        if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n        zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n        gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n        currentScale = zoom.scale;\n        isScaling = false;\n        if (zoom.scale === 1) gesture.$slideEl = undefined;\n      }\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\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        } // Define if we need image drag\n\n\n        const scaledWidth = image.width * zoom.scale;\n        const scaledHeight = image.height * zoom.scale;\n        if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\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.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 (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\n            image.isTouched = false;\n            return;\n          }\n\n          if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\n            image.isTouched = false;\n            return;\n          }\n        }\n\n        if (e.cancelable) {\n          e.preventDefault();\n        }\n\n        e.stopPropagation();\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\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\n        if (image.currentY > image.maxY) {\n          image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n        } // Velocity\n\n\n        if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n        if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n        if (!velocity.prevTime) velocity.prevTime = Date.now();\n        velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n        velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n        if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n        if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n        velocity.prevPositionX = image.touchesCurrent.x;\n        velocity.prevPositionY = image.touchesCurrent.y;\n        velocity.prevTime = Date.now();\n        gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n      }\n\n      function onTouchEnd() {\n        const zoom = swiper.zoom;\n        if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n        if (!image.isTouched || !image.isMoved) {\n          image.isTouched = false;\n          image.isMoved = false;\n          return;\n        }\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; // Fix duration\n\n        if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n        if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n        const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n        image.currentX = newPositionX;\n        image.currentY = newPositionY; // Define if we need image drag\n\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        gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n      }\n\n      function onTransitionEnd() {\n        const zoom = swiper.zoom;\n\n        if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n          if (gesture.$imageEl) {\n            gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n          }\n\n          if (gesture.$imageWrapEl) {\n            gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n          }\n\n          zoom.scale = 1;\n          currentScale = 1;\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\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.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n          gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n        }\n\n        if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n\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        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\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          imageWidth = gesture.$imageEl[0].offsetWidth;\n          imageHeight = gesture.$imageEl[0].offsetHeight;\n          scaledWidth = imageWidth * zoom.scale;\n          scaledHeight = imageHeight * zoom.scale;\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          translateX = diffX * zoom.scale;\n          translateY = diffY * zoom.scale;\n\n          if (translateX < translateMinX) {\n            translateX = translateMinX;\n          }\n\n          if (translateX > translateMaxX) {\n            translateX = translateMaxX;\n          }\n\n          if (translateY < translateMinY) {\n            translateY = translateMinY;\n          }\n\n          if (translateY > translateMaxY) {\n            translateY = translateMaxY;\n          }\n        } else {\n          translateX = 0;\n          translateY = 0;\n        }\n\n        gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);\n        gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n      }\n\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\n          gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n          gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n        }\n\n        if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n\n        if (swiper.params.cssMode) {\n          swiper.wrapperEl.style.overflow = '';\n          swiper.wrapperEl.style.touchAction = '';\n        }\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      } // Toggle Zoom\n\n\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 = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? {\n          passive: true,\n          capture: false\n        } : false;\n        const activeListenerWithCapture = support.passiveListener ? {\n          passive: false,\n          capture: true\n        } : true;\n        return {\n          passiveListener,\n          activeListenerWithCapture\n        };\n      }\n\n      function getSlideSelector() {\n        return `.${swiper.params.slideClass}`;\n      }\n\n      function toggleGestures(method) {\n        const {\n          passiveListener\n        } = 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\n      function enableGestures() {\n        if (gesturesEnabled) return;\n        gesturesEnabled = true;\n        toggleGestures('on');\n      }\n\n      function disableGestures() {\n        if (!gesturesEnabled) return;\n        gesturesEnabled = false;\n        toggleGestures('off');\n      } // Attach/Detach Events\n\n\n      function enable() {\n        const zoom = swiper.zoom;\n        if (zoom.enabled) return;\n        zoom.enabled = true;\n        const support = swiper.support;\n        const {\n          passiveListener,\n          activeListenerWithCapture\n        } = getListeners();\n        const slideSelector = getSlideSelector(); // Scale image\n\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(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener);\n          swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture);\n          swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n\n          if (swiper.touchEvents.cancel) {\n            swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener);\n          }\n        } // Move image\n\n\n        swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, 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        const {\n          passiveListener,\n          activeListenerWithCapture\n        } = getListeners();\n        const slideSelector = getSlideSelector(); // Scale image\n\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(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener);\n          swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture);\n          swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n\n          if (swiper.touchEvents.cancel) {\n            swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener);\n          }\n        } // Move image\n\n\n        swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture);\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();\n      });\n      on('doubleTap', (_s, e) => {\n        if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\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      Object.assign(swiper.zoom, {\n        enable,\n        disable,\n        in: zoomIn,\n        out: zoomOut,\n        toggle: zoomToggle\n      });\n    }\n\n    function Lazy(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on,\n        emit\n      } = _ref;\n      extendParams({\n        lazy: {\n          checkInView: false,\n          enabled: false,\n          loadPrevNext: false,\n          loadPrevNextAmount: 1,\n          loadOnTransitionStart: false,\n          scrollingElement: '',\n          elementClass: 'swiper-lazy',\n          loadingClass: 'swiper-lazy-loading',\n          loadedClass: 'swiper-lazy-loaded',\n          preloaderClass: 'swiper-lazy-preloader'\n        }\n      });\n      swiper.lazy = {};\n      let scrollHandlerAttached = false;\n      let initialImageLoaded = false;\n\n      function loadInSlide(index, loadInDuplicate) {\n        if (loadInDuplicate === void 0) {\n          loadInDuplicate = true;\n        }\n\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        const $slideEl = isVirtual ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${index}\"]`) : swiper.slides.eq(index);\n        const $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);\n\n        if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n          $images.push($slideEl[0]);\n        }\n\n        if ($images.length === 0) return;\n        $images.each(imageEl => {\n          const $imageEl = $(imageEl);\n          $imageEl.addClass(params.loadingClass);\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          swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, () => {\n            if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return;\n\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\n              if (sizes) {\n                $imageEl.attr('sizes', sizes);\n                $imageEl.removeAttr('data-sizes');\n              }\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\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\n            if (swiper.params.loop && loadInDuplicate) {\n              const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n\n              if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n                const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index=\"${slideOriginalIndex}\"]:not(.${swiper.params.slideDuplicateClass})`);\n                loadInSlide(originalSlide.index(), false);\n              } else {\n                const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index=\"${slideOriginalIndex}\"]`);\n                loadInSlide(duplicatedSlide.index(), false);\n              }\n            }\n\n            emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n\n            if (swiper.params.autoHeight) {\n              swiper.updateAutoHeight();\n            }\n          });\n          emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n        });\n      }\n\n      function load() {\n        const {\n          $wrapperEl,\n          params: swiperParams,\n          slides,\n          activeIndex\n        } = swiper;\n        const isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n        const params = swiperParams.lazy;\n        let slidesPerView = swiperParams.slidesPerView;\n\n        if (slidesPerView === 'auto') {\n          slidesPerView = 0;\n        }\n\n        function slideExist(index) {\n          if (isVirtual) {\n            if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index=\"${index}\"]`).length) {\n              return true;\n            }\n          } else if (slides[index]) return true;\n\n          return false;\n        }\n\n        function slideIndex(slideEl) {\n          if (isVirtual) {\n            return $(slideEl).attr('data-swiper-slide-index');\n          }\n\n          return $(slideEl).index();\n        }\n\n        if (!initialImageLoaded) initialImageLoaded = true;\n\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\n        if (params.loadPrevNext) {\n          if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) {\n            const amount = params.loadPrevNextAmount;\n            const spv = Math.ceil(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); // Next Slides\n\n            for (let i = activeIndex + spv; i < maxIndex; i += 1) {\n              if (slideExist(i)) loadInSlide(i);\n            } // Prev Slides\n\n\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            const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);\n            if (prevSlide.length > 0) loadInSlide(slideIndex(prevSlide));\n          }\n        }\n      }\n\n      function checkInViewOnLoad() {\n        const window = getWindow();\n        if (!swiper || swiper.destroyed) return;\n        const $scrollElement = swiper.params.lazy.scrollingElement ? $(swiper.params.lazy.scrollingElement) : $(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 {\n          rtlTranslate: rtl\n        } = swiper;\n        let inView = false;\n        if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n        const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]];\n\n        for (let i = 0; i < swiperCoord.length; i += 1) {\n          const point = swiperCoord[i];\n\n          if (point[0] >= 0 && point[0] <= scrollElementWidth && point[1] >= 0 && point[1] <= scrollElementHeight) {\n            if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n\n            inView = true;\n          }\n        }\n\n        const passiveListener = swiper.touchEvents.start === 'touchstart' && swiper.support.passiveListener && swiper.params.passiveListeners ? {\n          passive: true,\n          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 (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.freeMode.sticky) {\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 (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !initialImageLoaded) {\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 {\n          lazy,\n          cssMode,\n          watchSlidesProgress,\n          touchReleaseOnEdges,\n          resistanceRatio\n        } = swiper.params;\n\n        if (lazy.enabled && (cssMode || watchSlidesProgress && (touchReleaseOnEdges || resistanceRatio === 0))) {\n          load();\n        }\n      });\n      on('destroy', () => {\n        if (!swiper.$el) return;\n        swiper.$el.find(`.${swiper.params.lazy.loadingClass}`).removeClass(swiper.params.lazy.loadingClass);\n      });\n      Object.assign(swiper.lazy, {\n        load,\n        loadInSlide\n      });\n    }\n\n    /* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\n    function Controller(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on\n      } = _ref;\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\n            while (maxIndex - minIndex > 1) {\n              guess = maxIndex + minIndex >> 1;\n\n              if (array[guess] <= val) {\n                minIndex = guess;\n              } else {\n                maxIndex = guess;\n              }\n            }\n\n            return maxIndex;\n          };\n        }();\n\n        this.x = x;\n        this.y = y;\n        this.lastIndex = x.length - 1; // 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\n        let i1;\n        let i3;\n\n        this.interpolate = function interpolate(x2) {\n          if (!x2) return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n\n          i3 = binarySearch(this.x, x2);\n          i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already:\n          // y2 := ((x2竏遅1) テ� (y3竏馳1)) テキ (x3竏遅1) + y1\n\n          return (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      } // xxx: for now i will just save one spline function to to\n\n\n      function getInterpolateFunction(c) {\n        if (!swiper.controller.spline) {\n          swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);\n        }\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\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\n          if (swiper.params.controller.by === 'slide') {\n            getInterpolateFunction(c); // 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\n            controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n          }\n\n          if (!controlledTranslate || swiper.params.controller.by === 'container') {\n            multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n            controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n          }\n\n          if (swiper.params.controller.inverse) {\n            controlledTranslate = c.maxTranslate() - controlledTranslate;\n          }\n\n          c.updateProgress(controlledTranslate);\n          c.setTranslate(controlledTranslate, swiper);\n          c.updateActiveIndex();\n          c.updateSlidesClasses();\n        }\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\n      function setTransition(duration, byController) {\n        const Swiper = swiper.constructor;\n        const controlled = swiper.controller.control;\n        let i;\n\n        function setControlledTransition(c) {\n          c.setTransition(duration, swiper);\n\n          if (duration !== 0) {\n            c.transitionStart();\n\n            if (c.params.autoHeight) {\n              nextTick(() => {\n                c.updateAutoHeight();\n              });\n            }\n\n            c.$wrapperEl.transitionEnd(() => {\n              if (!controlled) return;\n\n              if (c.params.loop && swiper.params.controller.by === 'slide') {\n                c.loopFix();\n              }\n\n              c.transitionEnd();\n            });\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\n        if (swiper.controller.spline) {\n          swiper.controller.spline = undefined;\n          delete swiper.controller.spline;\n        }\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      Object.assign(swiper.controller, {\n        setTranslate,\n        setTransition\n      });\n    }\n\n    function A11y(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on\n      } = _ref;\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          id: null\n        }\n      });\n      swiper.a11y = {\n        clicked: false\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) {\n        if (size === void 0) {\n          size = 16;\n        }\n\n        const randomChar = () => Math.round(16 * Math.random()).toString(16);\n\n        return 'x'.repeat(size).replace(/x/g, randomChar);\n      }\n\n      function makeElFocusable($el) {\n        $el.attr('tabIndex', '0');\n      }\n\n      function makeElNotFocusable($el) {\n        $el.attr('tabIndex', '-1');\n      }\n\n      function addElRole($el, role) {\n        $el.attr('role', role);\n      }\n\n      function addElRoleDescription($el, description) {\n        $el.attr('aria-roledescription', description);\n      }\n\n      function addElControls($el, controls) {\n        $el.attr('aria-controls', controls);\n      }\n\n      function addElLabel($el, label) {\n        $el.attr('aria-label', label);\n      }\n\n      function addElId($el, id) {\n        $el.attr('id', id);\n      }\n\n      function addElLive($el, live) {\n        $el.attr('aria-live', live);\n      }\n\n      function disableEl($el) {\n        $el.attr('aria-disabled', true);\n      }\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\n        if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n          if (!(swiper.isEnd && !swiper.params.loop)) {\n            swiper.slideNext();\n          }\n\n          if (swiper.isEnd) {\n            notify(params.lastSlideMessage);\n          } else {\n            notify(params.nextSlideMessage);\n          }\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\n          if (swiper.isBeginning) {\n            notify(params.firstSlideMessage);\n          } else {\n            notify(params.prevSlideMessage);\n          }\n        }\n\n        if (swiper.pagination && $targetEl.is(classesToSelector(swiper.params.pagination.bulletClass))) {\n          $targetEl[0].click();\n        }\n      }\n\n      function updateNavigation() {\n        if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;\n        const {\n          $nextEl,\n          $prevEl\n        } = 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\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 swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;\n      }\n\n      function hasClickablePagination() {\n        return hasPagination() && swiper.params.pagination.clickable;\n      }\n\n      function updatePagination() {\n        const params = swiper.params.a11y;\n        if (!hasPagination()) return;\n        swiper.pagination.bullets.each(bulletEl => {\n          const $bulletEl = $(bulletEl);\n\n          if (swiper.params.pagination.clickable) {\n            makeElFocusable($bulletEl);\n\n            if (!swiper.params.pagination.renderBullet) {\n              addElRole($bulletEl, 'button');\n              addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n            }\n          }\n\n          if ($bulletEl.is(`.${swiper.params.pagination.bulletActiveClass}`)) {\n            $bulletEl.attr('aria-current', 'true');\n          } else {\n            $bulletEl.removeAttr('aria-current');\n          }\n        });\n      }\n\n      const initNavEl = ($el, wrapperId, message) => {\n        makeElFocusable($el);\n\n        if ($el[0].tagName !== 'BUTTON') {\n          addElRole($el, 'button');\n          $el.on('keydown', onEnterOrSpaceKey);\n        }\n\n        addElLabel($el, message);\n        addElControls($el, wrapperId);\n      };\n\n      const handlePointerDown = () => {\n        swiper.a11y.clicked = true;\n      };\n\n      const handlePointerUp = () => {\n        requestAnimationFrame(() => {\n          requestAnimationFrame(() => {\n            if (!swiper.destroyed) {\n              swiper.a11y.clicked = false;\n            }\n          });\n        });\n      };\n\n      const handleFocus = e => {\n        if (swiper.a11y.clicked) return;\n        const slideEl = e.target.closest(`.${swiper.params.slideClass}`);\n        if (!slideEl || !swiper.slides.includes(slideEl)) return;\n        const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;\n        const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl);\n        if (isActive || isVisible) return;\n        if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return;\n\n        if (swiper.isHorizontal()) {\n          swiper.el.scrollLeft = 0;\n        } else {\n          swiper.el.scrollTop = 0;\n        }\n\n        swiper.slideTo(swiper.slides.indexOf(slideEl), 0);\n      };\n\n      const initSlides = () => {\n        const params = swiper.params.a11y;\n\n        if (params.itemRoleDescriptionMessage) {\n          addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage);\n        }\n\n        if (params.slideRole) {\n          addElRole($(swiper.slides), params.slideRole);\n        }\n\n        const slidesLength = swiper.params.loop ? swiper.slides.filter(el => !el.classList.contains(swiper.params.slideDuplicateClass)).length : swiper.slides.length;\n\n        if (params.slideLabelMessage) {\n          swiper.slides.each((slideEl, index) => {\n            const $slideEl = $(slideEl);\n            const slideIndex = swiper.params.loop ? parseInt($slideEl.attr('data-swiper-slide-index'), 10) : index;\n            const ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n            addElLabel($slideEl, ariaLabelMessage);\n          });\n        }\n      };\n\n      const init = () => {\n        const params = swiper.params.a11y;\n        swiper.$el.append(liveRegion); // Container\n\n        const $containerEl = swiper.$el;\n\n        if (params.containerRoleDescriptionMessage) {\n          addElRoleDescription($containerEl, params.containerRoleDescriptionMessage);\n        }\n\n        if (params.containerMessage) {\n          addElLabel($containerEl, params.containerMessage);\n        } // Wrapper\n\n\n        const $wrapperEl = swiper.$wrapperEl;\n        const wrapperId = params.id || $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); // Slide\n\n        initSlides(); // Navigation\n\n        let $nextEl;\n        let $prevEl;\n\n        if (swiper.navigation && swiper.navigation.$nextEl) {\n          $nextEl = swiper.navigation.$nextEl;\n        }\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\n        if ($prevEl && $prevEl.length) {\n          initNavEl($prevEl, wrapperId, params.prevSlideMessage);\n        } // Pagination\n\n\n        if (hasClickablePagination()) {\n          swiper.pagination.$el.on('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n        } // Tab focus\n\n\n        swiper.$el.on('focus', handleFocus, true);\n        swiper.$el.on('pointerdown', handlePointerDown, true);\n        swiper.$el.on('pointerup', handlePointerUp, true);\n      };\n\n      function destroy() {\n        if (liveRegion && liveRegion.length > 0) liveRegion.remove();\n        let $nextEl;\n        let $prevEl;\n\n        if (swiper.navigation && swiper.navigation.$nextEl) {\n          $nextEl = swiper.navigation.$nextEl;\n        }\n\n        if (swiper.navigation && swiper.navigation.$prevEl) {\n          $prevEl = swiper.navigation.$prevEl;\n        }\n\n        if ($nextEl) {\n          $nextEl.off('keydown', onEnterOrSpaceKey);\n        }\n\n        if ($prevEl) {\n          $prevEl.off('keydown', onEnterOrSpaceKey);\n        } // Pagination\n\n\n        if (hasClickablePagination()) {\n          swiper.pagination.$el.off('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n        } // Tab focus\n\n\n        swiper.$el.off('focus', handleFocus, true);\n        swiper.$el.off('pointerdown', handlePointerDown, true);\n        swiper.$el.off('pointerup', handlePointerUp, true);\n      }\n\n      on('beforeInit', () => {\n        liveRegion = $(`<span class=\"${swiper.params.a11y.notificationClass}\" aria-live=\"assertive\" aria-atomic=\"true\"></span>`);\n      });\n      on('afterInit', () => {\n        if (!swiper.params.a11y.enabled) return;\n        init();\n      });\n      on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => {\n        if (!swiper.params.a11y.enabled) return;\n        initSlides();\n      });\n      on('fromEdge toEdge afterInit lock unlock', () => {\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\n    function History(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on\n      } = _ref;\n      extendParams({\n        history: {\n          enabled: false,\n          root: '',\n          replaceState: false,\n          key: 'slides',\n          keepQuery: false\n        }\n      });\n      let initialized = false;\n      let paths = {};\n\n      const slugify = text => {\n        return text.toString().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n      };\n\n      const getPathValues = urlOverride => {\n        const window = getWindow();\n        let location;\n\n        if (urlOverride) {\n          location = new URL(urlOverride);\n        } else {\n          location = window.location;\n        }\n\n        const pathArray = location.pathname.slice(1).split('/').filter(part => part !== '');\n        const total = pathArray.length;\n        const key = pathArray[total - 2];\n        const value = pathArray[total - 1];\n        return {\n          key,\n          value\n        };\n      };\n\n      const setHistory = (key, index) => {\n        const window = getWindow();\n        if (!initialized || !swiper.params.history.enabled) return;\n        let location;\n\n        if (swiper.params.url) {\n          location = new URL(swiper.params.url);\n        } else {\n          location = window.location;\n        }\n\n        const slide = swiper.slides.eq(index);\n        let value = slugify(slide.attr('data-history'));\n\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\n        if (swiper.params.history.keepQuery) {\n          value += location.search;\n        }\n\n        const currentState = window.history.state;\n\n        if (currentState && currentState.value === value) {\n          return;\n        }\n\n        if (swiper.params.history.replaceState) {\n          window.history.replaceState({\n            value\n          }, null, value);\n        } else {\n          window.history.pushState({\n            value\n          }, 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\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, paths.value, false);\n      };\n\n      const init = () => {\n        const window = getWindow();\n        if (!swiper.params.history) return;\n\n        if (!window.history || !window.history.pushState) {\n          swiper.params.history.enabled = false;\n          swiper.params.hashNavigation.enabled = true;\n          return;\n        }\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\n        if (!swiper.params.history.replaceState) {\n          window.addEventListener('popstate', setHistoryPopState);\n        }\n      };\n\n      const destroy = () => {\n        const window = getWindow();\n\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\n    function HashNavigation(_ref) {\n      let {\n        swiper,\n        extendParams,\n        emit,\n        on\n      } = _ref;\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\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\n        if (newHash !== activeSlideHash) {\n          const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash=\"${newHash}\"]`).index();\n          if (typeof newIndex === 'undefined') return;\n          swiper.slideTo(newIndex);\n        }\n      };\n\n      const setHash = () => {\n        if (!initialized || !swiper.params.hashNavigation.enabled) return;\n\n        if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n          window.history.replaceState(null, null, `#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || '');\n          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\n      const init = () => {\n        if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;\n        initialized = true;\n        const hash = document.location.hash.replace('#', '');\n\n        if (hash) {\n          const speed = 0;\n\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\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\n        if (swiper.params.hashNavigation.watchState) {\n          $(window).on('hashchange', onHashChange);\n        }\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\n    /* eslint no-underscore-dangle: \"off\" */\n    function Autoplay(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on,\n        emit\n      } = _ref;\n      let timeout;\n      swiper.autoplay = {\n        running: false,\n        paused: false\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        if (!swiper.size) {\n          swiper.autoplay.running = false;\n          swiper.autoplay.paused = false;\n          return;\n        }\n\n        const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n        let delay = swiper.params.autoplay.delay;\n\n        if ($activeSlideEl.attr('data-swiper-autoplay')) {\n          delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n        }\n\n        clearTimeout(timeout);\n        timeout = nextTick(() => {\n          let autoplayResult;\n\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(swiper.slides.length - 1, swiper.params.speed, true, true);\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\n          if (swiper.params.cssMode && swiper.autoplay.running) run();else if (autoplayResult === false) {\n            run();\n          }\n        }, delay);\n      }\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\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\n        swiper.autoplay.running = false;\n        emit('autoplayStop');\n        return true;\n      }\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\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\n      function onVisibilityChange() {\n        const document = getDocument();\n\n        if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n          pause();\n        }\n\n        if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n          run();\n          swiper.autoplay.paused = false;\n        }\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\n        if (!swiper.autoplay.running) {\n          stop();\n        } else {\n          run();\n        }\n      }\n\n      function onMouseEnter() {\n        if (swiper.params.autoplay.disableOnInteraction) {\n          stop();\n        } else {\n          emit('autoplayPause');\n          pause();\n        }\n\n        ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n          swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n        });\n      }\n\n      function onMouseLeave() {\n        if (swiper.params.autoplay.disableOnInteraction) {\n          return;\n        }\n\n        swiper.autoplay.paused = false;\n        emit('autoplayResume');\n        run();\n      }\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\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 (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n          run();\n        }\n      });\n      on('destroy', () => {\n        detachMouseEvents();\n\n        if (swiper.autoplay.running) {\n          stop();\n        }\n\n        const document = getDocument();\n        document.removeEventListener('visibilitychange', onVisibilityChange);\n      });\n      Object.assign(swiper.autoplay, {\n        pause,\n        run,\n        start,\n        stop\n      });\n    }\n\n    function Thumb(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on\n      } = _ref;\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      let initialized = false;\n      let swiperCreated = false;\n      swiper.thumbs = {\n        swiper: null\n      };\n\n      function onThumbClick() {\n        const thumbsSwiper = swiper.thumbs.swiper;\n        if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n        const clickedIndex = thumbsSwiper.clickedIndex;\n        const clickedSlide = thumbsSwiper.clickedSlide;\n        if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n        if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n        let slideToIndex;\n\n        if (thumbsSwiper.params.loop) {\n          slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n        } else {\n          slideToIndex = clickedIndex;\n        }\n\n        if (swiper.params.loop) {\n          let currentIndex = swiper.activeIndex;\n\n          if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n            swiper.loopFix(); // eslint-disable-next-line\n\n            swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n            currentIndex = swiper.activeIndex;\n          }\n\n          const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n          const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n          if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex;\n        }\n\n        swiper.slideTo(slideToIndex);\n      }\n\n      function init() {\n        const {\n          thumbs: thumbsParams\n        } = swiper.params;\n        if (initialized) return false;\n        initialized = true;\n        const SwiperClass = swiper.constructor;\n\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\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 || thumbsSwiper.destroyed) return;\n        const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView; // Activate thumbs\n\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        thumbsSwiper.slides.removeClass(thumbActiveClass);\n\n        if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n          for (let i = 0; i < thumbsToActivate; i += 1) {\n            thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).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        const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n        const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n\n        if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n          let currentThumbsIndex = thumbsSwiper.activeIndex;\n          let newThumbsIndex;\n          let direction;\n\n          if (thumbsSwiper.params.loop) {\n            if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n              thumbsSwiper.loopFix(); // eslint-disable-next-line\n\n              thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n              currentThumbsIndex = thumbsSwiper.activeIndex;\n            } // Find actual thumbs index to slide to\n\n\n            const prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n            const nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n\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 = thumbsSwiper.params.slidesPerGroup > 1 ? nextThumbsIndex : currentThumbsIndex;\n            } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) {\n              newThumbsIndex = nextThumbsIndex;\n            } else {\n              newThumbsIndex = prevThumbsIndex;\n            }\n\n            direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n          } else {\n            newThumbsIndex = swiper.realIndex;\n            direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n          }\n\n          if (useOffset) {\n            newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n          }\n\n          if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\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 (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) ;\n\n            thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n          }\n        }\n      }\n\n      on('beforeInit', () => {\n        const {\n          thumbs\n        } = swiper.params;\n        if (!thumbs || !thumbs.swiper) return;\n        init();\n        update(true);\n      });\n      on('slideChange update resize observerUpdate', () => {\n        update();\n      });\n      on('setTransition', (_s, duration) => {\n        const thumbsSwiper = swiper.thumbs.swiper;\n        if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n        thumbsSwiper.setTransition(duration);\n      });\n      on('beforeDestroy', () => {\n        const thumbsSwiper = swiper.thumbs.swiper;\n        if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n\n        if (swiperCreated) {\n          thumbsSwiper.destroy();\n        }\n      });\n      Object.assign(swiper.thumbs, {\n        init,\n        update\n      });\n    }\n\n    function freeMode(_ref) {\n      let {\n        swiper,\n        extendParams,\n        emit,\n        once\n      } = _ref;\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 onTouchStart() {\n        const translate = swiper.getTranslate();\n        swiper.setTranslate(translate);\n        swiper.setTransition(0);\n        swiper.touchEventsData.velocities.length = 0;\n        swiper.freeMode.onTouchEnd({\n          currentPos: swiper.rtl ? swiper.translate : -swiper.translate\n        });\n      }\n\n      function onTouchMove() {\n        const {\n          touchEventsData: data,\n          touches\n        } = swiper; // Velocity\n\n        if (data.velocities.length === 0) {\n          data.velocities.push({\n            position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n            time: data.touchStartTime\n          });\n        }\n\n        data.velocities.push({\n          position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n          time: now()\n        });\n      }\n\n      function onTouchEnd(_ref2) {\n        let {\n          currentPos\n        } = _ref2;\n        const {\n          params,\n          $wrapperEl,\n          rtlTranslate: rtl,\n          snapGrid,\n          touchEventsData: data\n        } = swiper; // Time diff\n\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\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\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            const distance = lastMoveEvent.position - velocityEvent.position;\n            const time = lastMoveEvent.time - velocityEvent.time;\n            swiper.velocity = distance / time;\n            swiper.velocity /= 2;\n\n            if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\n              swiper.velocity = 0;\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\n\n            if (time > 150 || now() - lastMoveEvent.time > 300) {\n              swiper.velocity = 0;\n            }\n          } else {\n            swiper.velocity = 0;\n          }\n\n          swiper.velocity *= params.freeMode.momentumVelocityRatio;\n          data.velocities.length = 0;\n          let momentumDuration = 1000 * params.freeMode.momentumRatio;\n          const momentumDistance = swiper.velocity * momentumDuration;\n          let newPosition = swiper.translate + momentumDistance;\n          if (rtl) newPosition = -newPosition;\n          let doBounce = false;\n          let afterBouncePosition;\n          const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\n          let needsLoopFix;\n\n          if (newPosition < swiper.maxTranslate()) {\n            if (params.freeMode.momentumBounce) {\n              if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n                newPosition = swiper.maxTranslate() - bounceAmount;\n              }\n\n              afterBouncePosition = swiper.maxTranslate();\n              doBounce = true;\n              data.allowMomentumBounce = true;\n            } else {\n              newPosition = swiper.maxTranslate();\n            }\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\n              afterBouncePosition = swiper.minTranslate();\n              doBounce = true;\n              data.allowMomentumBounce = true;\n            } else {\n              newPosition = swiper.minTranslate();\n            }\n\n            if (params.loop && params.centeredSlides) needsLoopFix = true;\n          } else if (params.freeMode.sticky) {\n            let nextSlide;\n\n            for (let j = 0; j < snapGrid.length; j += 1) {\n              if (snapGrid[j] > -newPosition) {\n                nextSlide = j;\n                break;\n              }\n            }\n\n            if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n              newPosition = snapGrid[nextSlide];\n            } else {\n              newPosition = snapGrid[nextSlide - 1];\n            }\n\n            newPosition = -newPosition;\n          }\n\n          if (needsLoopFix) {\n            once('transitionEnd', () => {\n              swiper.loopFix();\n            });\n          } // Fix duration\n\n\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\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\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\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          onTouchStart,\n          onTouchMove,\n          onTouchEnd\n        }\n      });\n    }\n\n    function Grid(_ref) {\n      let {\n        swiper,\n        extendParams\n      } = _ref;\n      extendParams({\n        grid: {\n          rows: 1,\n          fill: 'column'\n        }\n      });\n      let slidesNumberEvenToRows;\n      let slidesPerRow;\n      let numFullColumns;\n\n      const initSlides = slidesLength => {\n        const {\n          slidesPerView\n        } = swiper.params;\n        const {\n          rows,\n          fill\n        } = swiper.params.grid;\n        slidesPerRow = slidesNumberEvenToRows / rows;\n        numFullColumns = Math.floor(slidesLength / rows);\n\n        if (Math.floor(slidesLength / rows) === slidesLength / rows) {\n          slidesNumberEvenToRows = slidesLength;\n        } else {\n          slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;\n        }\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 {\n          slidesPerGroup,\n          spaceBetween\n        } = swiper.params;\n        const {\n          rows,\n          fill\n        } = swiper.params.grid; // Set slides order\n\n        let newSlideOrderIndex;\n        let column;\n        let row;\n\n        if (fill === 'row' && slidesPerGroup > 1) {\n          const groupIndex = Math.floor(i / (slidesPerGroup * rows));\n          const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;\n          const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup);\n          row = Math.floor(slideIndexInGroup / columnsInGroup);\n          column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;\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\n          if (column > numFullColumns || column === numFullColumns && row === rows - 1) {\n            row += 1;\n\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\n        slide.css(getDirectionLabel('margin-top'), row !== 0 ? spaceBetween && `${spaceBetween}px` : '');\n      };\n\n      const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => {\n        const {\n          spaceBetween,\n          centeredSlides,\n          roundLengths\n        } = swiper.params;\n        const {\n          rows\n        } = 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\n        if (centeredSlides) {\n          snapGrid.splice(0, snapGrid.length);\n          const newSlidesGrid = [];\n\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\n          snapGrid.push(...newSlidesGrid);\n        }\n      };\n\n      swiper.grid = {\n        initSlides,\n        updateSlide,\n        updateWrapperSize\n      };\n    }\n\n    function appendSlide(slides) {\n      const swiper = this;\n      const {\n        $wrapperEl,\n        params\n      } = swiper;\n\n      if (params.loop) {\n        swiper.loopDestroy();\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      } else {\n        $wrapperEl.append(slides);\n      }\n\n      if (params.loop) {\n        swiper.loopCreate();\n      }\n\n      if (!params.observer) {\n        swiper.update();\n      }\n    }\n\n    function prependSlide(slides) {\n      const swiper = this;\n      const {\n        params,\n        $wrapperEl,\n        activeIndex\n      } = swiper;\n\n      if (params.loop) {\n        swiper.loopDestroy();\n      }\n\n      let newActiveIndex = activeIndex + 1;\n\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\n        newActiveIndex = activeIndex + slides.length;\n      } else {\n        $wrapperEl.prepend(slides);\n      }\n\n      if (params.loop) {\n        swiper.loopCreate();\n      }\n\n      if (!params.observer) {\n        swiper.update();\n      }\n\n      swiper.slideTo(newActiveIndex, 0, false);\n    }\n\n    function addSlide(index, slides) {\n      const swiper = this;\n      const {\n        $wrapperEl,\n        params,\n        activeIndex\n      } = swiper;\n      let activeIndexBuffer = activeIndex;\n\n      if (params.loop) {\n        activeIndexBuffer -= swiper.loopedSlides;\n        swiper.loopDestroy();\n        swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n      }\n\n      const baseLength = swiper.slides.length;\n\n      if (index <= 0) {\n        swiper.prependSlide(slides);\n        return;\n      }\n\n      if (index >= baseLength) {\n        swiper.appendSlide(slides);\n        return;\n      }\n\n      let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n      const slidesBuffer = [];\n\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\n        newActiveIndex = 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\n      if (!params.observer) {\n        swiper.update();\n      }\n\n      if (params.loop) {\n        swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n      } else {\n        swiper.slideTo(newActiveIndex, 0, false);\n      }\n    }\n\n    function removeSlide(slidesIndexes) {\n      const swiper = this;\n      const {\n        params,\n        $wrapperEl,\n        activeIndex\n      } = swiper;\n      let activeIndexBuffer = activeIndex;\n\n      if (params.loop) {\n        activeIndexBuffer -= swiper.loopedSlides;\n        swiper.loopDestroy();\n        swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n      }\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\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\n      if (params.loop) {\n        swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n      } else {\n        swiper.slideTo(newActiveIndex, 0, false);\n      }\n    }\n\n    function removeAllSlides() {\n      const swiper = this;\n      const slidesIndexes = [];\n\n      for (let i = 0; i < swiper.slides.length; i += 1) {\n        slidesIndexes.push(i);\n      }\n\n      swiper.removeSlide(slidesIndexes);\n    }\n\n    function Manipulation(_ref) {\n      let {\n        swiper\n      } = _ref;\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\n    function effectInit(params) {\n      const {\n        effect,\n        swiper,\n        on,\n        setTranslate,\n        setTransition,\n        overwriteParams,\n        perspective,\n        recreateShadows,\n        getEffectParams\n      } = params;\n      on('beforeInit', () => {\n        if (swiper.params.effect !== effect) return;\n        swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n\n        if (perspective && perspective()) {\n          swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n        }\n\n        const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\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      on('transitionEnd', () => {\n        if (swiper.params.effect !== effect) return;\n\n        if (recreateShadows) {\n          if (!getEffectParams || !getEffectParams().slideShadows) return; // remove shadows\n\n          swiper.slides.each(slideEl => {\n            const $slideEl = swiper.$(slideEl);\n            $slideEl.find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').remove();\n          }); // create new one\n\n          recreateShadows();\n        }\n      });\n      let requireUpdateOnVirtual;\n      on('virtualUpdate', () => {\n        if (swiper.params.effect !== effect) return;\n\n        if (!swiper.slides.length) {\n          requireUpdateOnVirtual = true;\n        }\n\n        requestAnimationFrame(() => {\n          if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {\n            setTranslate();\n            requireUpdateOnVirtual = false;\n          }\n        });\n      });\n    }\n\n    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\n      return $slideEl;\n    }\n\n    function effectVirtualTransitionEnd(_ref) {\n      let {\n        swiper,\n        duration,\n        transformEl,\n        allSlides\n      } = _ref;\n      const {\n        slides,\n        activeIndex,\n        $wrapperEl\n      } = swiper;\n\n      if (swiper.params.virtualTranslate && duration !== 0) {\n        let eventTriggered = false;\n        let $transitionEndTarget;\n\n        if (allSlides) {\n          $transitionEndTarget = transformEl ? slides.find(transformEl) : slides;\n        } else {\n          $transitionEndTarget = transformEl ? slides.eq(activeIndex).find(transformEl) : slides.eq(activeIndex);\n        }\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\n          for (let i = 0; i < triggerEvents.length; i += 1) {\n            $wrapperEl.trigger(triggerEvents[i]);\n          }\n        });\n      }\n    }\n\n    function EffectFade(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on\n      } = _ref;\n      extendParams({\n        fadeEffect: {\n          crossFade: false,\n          transformEl: null\n        }\n      });\n\n      const setTranslate = () => {\n        const {\n          slides\n        } = swiper;\n        const params = swiper.params.fadeEffect;\n\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\n          if (!swiper.isHorizontal()) {\n            ty = tx;\n            tx = 0;\n          }\n\n          const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n          const $targetEl = effectTarget(params, $slideEl);\n          $targetEl.css({\n            opacity: slideOpacity\n          }).transform(`translate3d(${tx}px, ${ty}px, 0px)`);\n        }\n      };\n\n      const setTransition = duration => {\n        const {\n          transformEl\n        } = swiper.params.fadeEffect;\n        const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n        $transitionElements.transition(duration);\n        effectVirtualTransitionEnd({\n          swiper,\n          duration,\n          transformEl,\n          allSlides: true\n        });\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\n    function EffectCube(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on\n      } = _ref;\n      extendParams({\n        cubeEffect: {\n          slideShadows: true,\n          shadow: true,\n          shadowOffset: 20,\n          shadowScale: 0.94\n        }\n      });\n\n      const createSlideShadows = ($slideEl, progress, isHorizontal) => {\n        let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n        let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n        if (shadowBefore.length === 0) {\n          shadowBefore = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}\"></div>`);\n          $slideEl.append(shadowBefore);\n        }\n\n        if (shadowAfter.length === 0) {\n          shadowAfter = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}\"></div>`);\n          $slideEl.append(shadowAfter);\n        }\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      const recreateShadows = () => {\n        // create new ones\n        const isHorizontal = swiper.isHorizontal();\n        swiper.slides.each(slideEl => {\n          const progress = Math.max(Math.min(slideEl.progress, 1), -1);\n          createSlideShadows($(slideEl), progress, isHorizontal);\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\n        if (params.shadow) {\n          if (isHorizontal) {\n            $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n\n            if ($cubeShadowEl.length === 0) {\n              $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n              $wrapperEl.append($cubeShadowEl);\n            }\n\n            $cubeShadowEl.css({\n              height: `${swiperWidth}px`\n            });\n          } else {\n            $cubeShadowEl = $el.find('.swiper-cube-shadow');\n\n            if ($cubeShadowEl.length === 0) {\n              $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n              $el.append($cubeShadowEl);\n            }\n          }\n        }\n\n        for (let i = 0; i < slides.length; i += 1) {\n          const $slideEl = slides.eq(i);\n          let slideIndex = i;\n\n          if (isVirtual) {\n            slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n          }\n\n          let slideAngle = slideIndex * 90;\n          let round = Math.floor(slideAngle / 360);\n\n          if (rtl) {\n            slideAngle = -slideAngle;\n            round = Math.floor(-slideAngle / 360);\n          }\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\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\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(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n\n          if (progress <= 1 && progress > -1) {\n            wrapperRotate = slideIndex * 90 + progress * 90;\n            if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n          }\n\n          $slideEl.transform(transform);\n\n          if (params.slideShadows) {\n            createSlideShadows($slideEl, progress, isHorizontal);\n          }\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(`translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`);\n          } else {\n            const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n            const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + 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(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`);\n          }\n        }\n\n        const zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0;\n        $wrapperEl.transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`);\n        $wrapperEl[0].style.setProperty('--swiper-cube-translate-z', `${zFactor}px`);\n      };\n\n      const setTransition = duration => {\n        const {\n          $el,\n          slides\n        } = swiper;\n        slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n\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        recreateShadows,\n        getEffectParams: () => swiper.params.cubeEffect,\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\n    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 = $(`<div class=\"swiper-slide-shadow${side ? `-${side}` : ''}\"></div>`);\n        $shadowContainer.append($shadowEl);\n      }\n\n      return $shadowEl;\n    }\n\n    function EffectFlip(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on\n      } = _ref;\n      extendParams({\n        flipEffect: {\n          slideShadows: true,\n          limitRotation: true,\n          transformEl: null\n        }\n      });\n\n      const createSlideShadows = ($slideEl, progress, params) => {\n        let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n        let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n        if (shadowBefore.length === 0) {\n          shadowBefore = createShadow(params, $slideEl, swiper.isHorizontal() ? 'left' : 'top');\n        }\n\n        if (shadowAfter.length === 0) {\n          shadowAfter = createShadow(params, $slideEl, swiper.isHorizontal() ? 'right' : 'bottom');\n        }\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      const recreateShadows = () => {\n        // Set shadows\n        const params = swiper.params.flipEffect;\n        swiper.slides.each(slideEl => {\n          const $slideEl = $(slideEl);\n          let progress = $slideEl[0].progress;\n\n          if (swiper.params.flipEffect.limitRotation) {\n            progress = Math.max(Math.min(slideEl.progress, 1), -1);\n          }\n\n          createSlideShadows($slideEl, progress, params);\n        });\n      };\n\n      const setTranslate = () => {\n        const {\n          slides,\n          rtlTranslate: rtl\n        } = swiper;\n        const params = swiper.params.flipEffect;\n\n        for (let i = 0; i < slides.length; i += 1) {\n          const $slideEl = slides.eq(i);\n          let progress = $slideEl[0].progress;\n\n          if (swiper.params.flipEffect.limitRotation) {\n            progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n          }\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\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            createSlideShadows($slideEl, progress, params);\n          }\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 {\n          transformEl\n        } = swiper.params.flipEffect;\n        const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n        $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n        effectVirtualTransitionEnd({\n          swiper,\n          duration,\n          transformEl\n        });\n      };\n\n      effectInit({\n        effect: 'flip',\n        swiper,\n        on,\n        setTranslate,\n        setTransition,\n        recreateShadows,\n        getEffectParams: () => swiper.params.flipEffect,\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\n    function EffectCoverflow(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on\n      } = _ref;\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 {\n          width: swiperWidth,\n          height: swiperHeight,\n          slides,\n          slidesSizesGrid\n        } = 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; // Each slide offset from center\n\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 centerOffset = (center - slideOffset - slideSize / 2) / slideSize;\n          const offsetMultiplier = typeof params.modifier === 'function' ? params.modifier(centerOffset) : centerOffset * params.modifier;\n          let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n          let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; // var rotateZ = 0\n\n          let translateZ = -translate * Math.abs(offsetMultiplier);\n          let stretch = params.stretch; // Allow percentage to make a relative stretch for responsive sliders\n\n          if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n            stretch = parseFloat(params.stretch) / 100 * slideSize;\n          }\n\n          let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n          let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n          let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); // Fix for ultra small values\n\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          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          $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n\n          if (params.slideShadows) {\n            // Set shadows\n            let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n            let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n            if ($shadowBeforeEl.length === 0) {\n              $shadowBeforeEl = createShadow(params, $slideEl, isHorizontal ? 'left' : 'top');\n            }\n\n            if ($shadowAfterEl.length === 0) {\n              $shadowAfterEl = createShadow(params, $slideEl, isHorizontal ? 'right' : 'bottom');\n            }\n\n            if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n            if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n          }\n        }\n      };\n\n      const setTransition = duration => {\n        const {\n          transformEl\n        } = swiper.params.coverflowEffect;\n        const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n        $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').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\n    function EffectCreative(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on\n      } = _ref;\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 {\n          slides,\n          $wrapperEl,\n          slidesSizesGrid\n        } = swiper;\n        const params = swiper.params.creativeEffect;\n        const {\n          progressMultiplier: multiplier\n        } = params;\n        const isCenteredSlides = swiper.params.centeredSlides;\n\n        if (isCenteredSlides) {\n          const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0;\n          $wrapperEl.transform(`translateX(calc(50% - ${margin}px))`);\n        }\n\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($slideEl[0].progress, -params.limitProgress), params.limitProgress);\n          let originalProgress = progress;\n\n          if (!isCenteredSlides) {\n            originalProgress = Math.min(Math.max($slideEl[0].originalProgress, -params.limitProgress), params.limitProgress);\n          }\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\n          if (!swiper.isHorizontal()) {\n            t[1] = t[0];\n            t[0] = 0;\n          }\n\n          let data = {\n            translate: [0, 0, 0],\n            rotate: [0, 0, 0],\n            scale: 1,\n            opacity: 1\n          };\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          } // set translate\n\n\n          t.forEach((value, index) => {\n            t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`;\n          }); // set rotates\n\n          r.forEach((value, index) => {\n            r[index] = data.rotate[index] * Math.abs(progress * multiplier);\n          });\n          $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n          const translateString = t.join(', ');\n          const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`;\n          const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`;\n          const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier;\n          const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`; // Set shadows\n\n          if (custom && data.shadow || !custom) {\n            let $shadowEl = $slideEl.children('.swiper-slide-shadow');\n\n            if ($shadowEl.length === 0 && data.shadow) {\n              $shadowEl = createShadow(params, $slideEl);\n            }\n\n            if ($shadowEl.length) {\n              const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : 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({\n            opacity: opacityString\n          });\n\n          if (data.origin) {\n            $targetEl.css('transform-origin', data.origin);\n          }\n        }\n      };\n\n      const setTransition = duration => {\n        const {\n          transformEl\n        } = swiper.params.creativeEffect;\n        const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n        $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n        effectVirtualTransitionEnd({\n          swiper,\n          duration,\n          transformEl,\n          allSlides: true\n        });\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\n    function EffectCards(_ref) {\n      let {\n        swiper,\n        extendParams,\n        on\n      } = _ref;\n      extendParams({\n        cardsEffect: {\n          slideShadows: true,\n          transformEl: null,\n          rotate: true,\n          perSlideRotate: 2,\n          perSlideOffset: 8\n        }\n      });\n\n      const setTranslate = () => {\n        const {\n          slides,\n          activeIndex\n        } = swiper;\n        const params = swiper.params.cardsEffect;\n        const {\n          startTranslate,\n          isTouched\n        } = swiper.touchEventsData;\n        const currentTranslate = swiper.translate;\n\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\n          if (swiper.params.centeredSlides && !swiper.params.cssMode) {\n            swiper.$wrapperEl.transform(`translateX(${swiper.minTranslate()}px)`);\n          }\n\n          if (swiper.params.centeredSlides && swiper.params.cssMode) {\n            offset -= slides[0].swiperSlideOffset;\n          }\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 = -params.perSlideRotate * progress;\n          let tXAdd = params.perSlideOffset - Math.abs(progress) * 0.75;\n          const slideIndex = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i;\n          const isSwipeToNext = (slideIndex === activeIndex || slideIndex === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate;\n          const isSwipeToPrev = (slideIndex === activeIndex || slideIndex === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate;\n\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\n          if (!swiper.isHorizontal()) {\n            const prevY = tY;\n            tY = tX;\n            tX = prevY;\n          }\n\n          const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;\n          const transform = `\n        translate3d(${tX}, ${tY}, ${tZ}px)\n        rotateZ(${params.rotate ? rotate : 0}deg)\n        scale(${scaleString})\n      `;\n\n          if (params.slideShadows) {\n            // Set shadows\n            let $shadowEl = $slideEl.find('.swiper-slide-shadow');\n\n            if ($shadowEl.length === 0) {\n              $shadowEl = createShadow(params, $slideEl);\n            }\n\n            if ($shadowEl.length) $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 {\n          transformEl\n        } = swiper.params.cardsEffect;\n        const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n        $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n        effectVirtualTransitionEnd({\n          swiper,\n          duration,\n          transformEl\n        });\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\n    // Swiper Class\n    const modules = [Virtual, Keyboard, Mousewheel, Navigation, Pagination, Scrollbar, Parallax, Zoom, Lazy, Controller, A11y, History, HashNavigation, Autoplay, Thumb, freeMode, Grid, Manipulation, EffectFade, EffectCube, EffectFlip, EffectCoverflow, EffectCreative, EffectCards];\n    Swiper.use(modules);\n\n    return Swiper;\n\n}));\n//# sourceMappingURL=swiper-bundle.js.map\n","'use strict';\n\n/**\n * HTML迚ケ谿頑枚蟄励r繧ィ繝ウ繧ウ繝シ繝峨@縺ヲ霑斐☆縲�\n *\n * @param {string} str - 繧ィ繝ウ繧ウ繝シ繝峨@縺溘>譁�ュ怜�縲� 萓�: &lt;span class=\"foo\"&gt;hoge&lt;/span&gt;\n * @returns {string} 繧ィ繝ウ繧ウ繝シ繝画ク医∩縺ョ譁�ュ怜�縲� 萓�: &amp;lt;span class=&amp;quot;foo&amp;quot;&amp;gt;hoge&amp;lt;/span&amp;gt;\n */\nfunction encodeHtml(str) {\n    if (!str) {\n        return str;\n    }\n    const encoded = str.replace(/[<>&\"'`]/g, (match) => {\n        const encodeMap = {\n            '&': '&amp;',\n            '<': '&lt;',\n            '>': '&gt;',\n            '\"': '&quot;',\n            \"'\": '&#x27;',\n            '`': '&#x60;',\n        };\n        return encodeMap[match];\n    });\n    return encoded;\n}\n\n/**\n * 縲瑚ヲ九◆逶ョ縺後ワ繧、繝輔Φ縺ォ隕九∴繧区枚蟄怜�縲阪r蜊願ァ偵ワ繧、繝輔Φ/繝槭う繝翫せ(\\u002d)縺ォ螟画鋤縺励※霑斐☆縲�\n * 蠑墓焚縺ォ隕九◆逶ョ縺後ワ繧、繝輔Φ縺ォ隕九∴繧区枚蟄怜�縺悟性縺セ繧後↑縺��エ蜷医�縲∝シ墓焚縺ィ蜷後§譁�ュ怜�繧定ソ斐☆縲�\n *\n * 縺薙%縺ァ縲瑚ヲ九◆逶ョ縺後ワ繧、繝輔Φ縺ォ隕九∴繧区枚蟄怜�縲阪�莉・荳九→縺吶k縲�\n * - \\uff0d ... 蜈ィ隗偵ワ繧、繝輔Φ/繝槭う繝翫せ\n * - \\u30fc ... 蟒カ髟キ繧オ繧ヲ繝ウ繝峨�繝シ繧ッ(蜈ィ隗偵き繧ソ繧ォ繝�/蜈ィ隗偵�繧峨′縺ェ)\n * - \\u2010 ... 繝上う繝輔Φ\n * - \\u2011 ... 謾ケ陦後�縺ェ縺�ワ繧、繝輔Φ\n * - \\u2013 ... 繧「繝ウ繝€繝�す繝・\n * - \\u2014 ... 蜈ィ隗偵ム繝�す繝・\n * - \\u2015 ... 豌エ蟷ウ繝舌�/蠑慕畑隨ヲ繝€繝�す繝・\n * - \\u2212 ... 繝槭う繝翫せ險伜捷\n * - \\uff70 ... 蟒カ髟キ繧オ繧ヲ繝ウ繝峨�繝シ繧ッ(蜊願ァ偵き繧ソ繧ォ繝�)\n *\n * @param {string} str - 螟画鋤蟇セ雎。縺ョ譁�ュ怜�\n * @returns {string} 螟画鋤蠕後�譁�ュ怜�\n */\nfunction convertToHyphen(str) {\n    if (!str) {\n        return str;\n    }\n    const converted = str.replace(/[\\uff0d\\u30fc\\u2010\\u2011\\u2013\\u2014\\u2015\\u2212\\uff70]/g, '-');\n    return converted;\n}\n\n/**\n * 蜈ィ隗呈焚蟄励r蜊願ァ呈焚蟄励↓螟画鋤縺励※霑斐☆縲�\n * 蠑墓焚縺ォ蜈ィ隗呈焚蟄励′蜷ォ縺セ繧後↑縺��エ蜷医�縲∝シ墓焚縺ィ蜷後§譁�ュ怜�繧定ソ斐☆縲�\n *\n * @param {string} str - 螟画鋤蟇セ雎。縺ョ譁�ュ怜�\n * @returns {string} 螟画鋤蠕後�譁�ュ怜�\n */\nfunction convertToHalfWidthDigit(str) {\n    if (!str) {\n        return str;\n    }\n    const converted = str.replace(/[\\uff10-\\uff19]/g, (s) => {\n        return String.fromCharCode(s.charCodeAt(0) - 0xfee0);\n    });\n    return converted;\n}\n\n/**\n * 縲瑚ヲ九◆逶ョ縺悟�隗偵�蟒カ髟キ繧オ繧ヲ繝ウ繝峨�繝シ繧ッ縺ォ隕九∴繧区枚蟄怜�縲阪r蜈ィ隗偵�蟒カ髟キ繧オ繧ヲ繝ウ繝峨�繝シ繧ッ(\\u30fc)縺ォ螟画鋤縺励※霑斐☆縲�\n * 蠑墓焚縺ォ隕九◆逶ョ縺悟�隗偵�蟒カ髟キ繧オ繧ヲ繝ウ繝峨�繝シ繧ッ縺ォ隕九∴繧区枚蟄怜�縺悟性縺セ繧後↑縺��エ蜷医�縲∝シ墓焚縺ィ蜷後§譁�ュ怜�繧定ソ斐☆縲�\n * 縺ェ縺翫€√€訓SM縲阪�縲訓rolonged Sound Mark縲阪�逡・險倥〒縺ゅk縲�\n *\n * 縺薙%縺ァ縲瑚ヲ九◆逶ョ縺悟�隗偵�蟒カ髟キ繧オ繧ヲ繝ウ繝峨�繝シ繧ッ縺ォ隕九∴繧区枚蟄怜�縲阪�莉・荳九→縺吶k縲�\n * - \\u2010 ... 縲娯€舌€� (繝上う繝輔Φ)\n * - \\u2011 ... 縲娯€代€� (謾ケ陦後�縺ェ縺�ワ繧、繝輔Φ)\n * - \\u2013 ... 縲娯€薙€� (繧「繝ウ繝€繝�す繝・/繧ィ繝ウ繝€繝�す繝・)\n * - \\u2014 ... 縲娯€斐€� (蜈ィ隗偵ム繝�す繝・/繧ィ繝�繝€繝�す繝・)\n * - \\u2015 ... 縲娯€輔€� (豌エ蟷ウ繝舌�/蠑慕畑隨ヲ繝€繝�す繝・)\n * - \\u2212 ... 縲娯�縲� (繝槭う繝翫せ險伜捷)\n * - \\uff0d ... 縲鯉シ阪€� (蜈ィ隗偵ワ繧、繝輔Φ/蜈ィ隗偵�繧、繝翫せ)\n * - \\u002d ... 縲�-縲� (蜊願ァ偵ワ繧、繝輔Φ/繝上う繝輔Φ繝槭う繝翫せ)\n * - \\uff70 ... 縲鯉スー縲� (蟒カ髟キ繧オ繧ヲ繝ウ繝峨�繝シ繧ッ(蜊願ァ偵き繧ソ繧ォ繝�))\n *\n * @param {string} str - 螟画鋤蟇セ雎。縺ョ譁�ュ怜�\n * @returns {string} 螟画鋤蠕後�譁�ュ怜�\n */\nfunction convertToPSM(str) {\n    if (!str) {\n        return str;\n    }\n    const converted = str.replace(\n        /[\\u2010\\u2011\\u2013\\u2014\\u2015\\u2212\\uff0d\\u002d\\uff70]/g,\n        '繝シ'\n    );\n    return converted;\n}\n\n/**\n * 蜊願ァ呈枚蟄怜�繧貞�隗呈枚蟄怜�縺ォ螟画鋤縺励※霑斐☆縲�\n *\n * 縺ェ縺翫€∝、画鋤縺吶k蜊願ァ呈枚蟄怜�縺ッ谺。縺ョ騾壹j縺ァ縺ゅk縲ゅく繝シ繝懊�繝峨〒蜈・蜉帙&繧後k荳€闊ャ逧�↑蜊願ァ呈枚蟄怜�繧呈Φ螳壹@縺ヲ縺�k縲�\n * 縺薙l繧我サ・螟悶�蜊願ァ呈枚蟄怜�縺ッ螟画鋤縺輔l縺ェ縺�€�\n *\n * | 螟画鋤蜑�                             | 螟画鋤蠕�                                  | 蛯呵€�                                              |\n * |:-----------------------------------|:----------------------------------------|:--------------------------------------------------|\n * | 蜊願ァ偵き繝�                           | 蜈ィ隗偵き繝�                                | 縲渓atakanaMap縲阪↓遉コ縺吶�繝�ヴ繝ウ繧ー縺ォ蝓コ縺・縺�           |\n * | `\\u0021\\u0023-\\u0026\\u0028-\\u007E` | Unicode縺ョ繧「繝峨Ξ繧ケ繧�0xFEE0縺�縺醍ァサ蜍輔@縺溷€、 | -                                                 |\n * | `\\u0022`                           | `\\u201D`                                | `\\u0022`: `\"`, `\\u201D`: `窶拜                     |\n * | `\\u0027`                           | `\\u2019`                                | `\\u0027`: `'`, `\\u2019`: `窶兪                     |\n * | `\\u0020`                           | `\\u3000`                                | `\\u0020`: ` `(蜊願ァ堤ゥコ逋ス), `\\u3000`: `縲€`(蜈ィ隗堤ゥコ逋ス) |\n *\n * @param {string} str - 螟画鋤蟇セ雎。縺ョ譁�ュ怜�\n * @returns {string} 螟画鋤蠕後�譁�ュ怜�\n */\nfunction convertToFullWidth(str) {\n    if (!str) {\n        return str;\n    }\n    const katakanaMap = {\n        �カ��: '繧ャ',\n        �キ��: '繧ョ',\n        �ク��: '繧ー',\n        �ケ��: '繧イ',\n        �コ��: '繧エ',\n        �サ��: '繧カ',\n        �シ��: '繧ク',\n        �ス��: '繧コ',\n        �セ��: '繧シ',\n        �ソ��: '繧セ',\n        �€��: '繝€',\n        ��セ�: '繝�',\n        �ゑセ�: '繝�',\n        ��セ�: '繝�',\n        ��セ�: '繝�',\n        �奇セ�: '繝�',\n        �具セ�: '繝�',\n        �鯉セ�: '繝�',\n        �搾セ�: '繝�',\n        �趣セ�: '繝�',\n        �奇セ�: '繝�',\n        �具セ�: '繝�',\n        �鯉セ�: '繝�',\n        �搾セ�: '繝�',\n        �趣セ�: '繝�',\n        �ウ��: '繝エ',\n        �懶セ�: '繝キ',\n        �ヲ��: '繝コ',\n        �ア: '繧「',\n        �イ: '繧、',\n        �ウ: '繧ヲ',\n        �エ: '繧ィ',\n        �オ: '繧ェ',\n        �カ: '繧ォ',\n        �キ: '繧ュ',\n        �ク: '繧ッ',\n        �ケ: '繧ア',\n        �コ: '繧ウ',\n        �サ: '繧オ',\n        �シ: '繧キ',\n        �ス: '繧ケ',\n        �セ: '繧サ',\n        �ソ: '繧ス',\n        �€: '繧ソ',\n        ��: '繝�',\n        ��: '繝�',\n        ��: '繝�',\n        ��: '繝�',\n        ��: '繝�',\n        ��: '繝�',\n        ��: '繝�',\n        ��: '繝�',\n        ��: '繝�',\n        ��: '繝�',\n        ��: '繝�',\n        ��: '繝�',\n        ��: '繝�',\n        ��: '繝�',\n        ��: '繝�',\n        ��: '繝�',\n        ��: '繝�',\n        ��: '繝。',\n        ��: '繝「',\n        ��: '繝、',\n        ��: '繝ヲ',\n        ��: '繝ィ',\n        ��: '繝ゥ',\n        ��: '繝ェ',\n        ��: '繝ォ',\n        ��: '繝ャ',\n        ��: '繝ュ',\n        ��: '繝ッ',\n        �ヲ: '繝イ',\n        ��: '繝ウ',\n        �ァ: '繧。',\n        �ィ: '繧」',\n        �ゥ: '繧・',\n        �ェ: '繧ァ',\n        �ォ: '繧ゥ',\n        �ッ: '繝�',\n        �ャ: '繝」',\n        �ュ: '繝・',\n        �ョ: '繝ァ',\n        '�。': '縲�',\n        '�、': '縲�',\n        �ー: '繝シ',\n        '�「': '縲�',\n        '�」': '縲�',\n        '�・': '繝サ',\n        ��: '繧�',\n        ��: '繧�',\n    };\n    const katakanaRegExp = new RegExp(`(?:${Object.keys(katakanaMap).join('|')})`, 'g');\n    const fullWidth = str\n        .normalize()\n        .replace(katakanaRegExp, function (char) {\n            return katakanaMap[char] || char;\n        })\n        .replace(/[\\u0021\\u0023-\\u0026\\u0028-\\u007E]/g, function (char) {\n            return String.fromCharCode(char.charCodeAt(0) + 0xfee0);\n        })\n        .replace(/\\u0022/g, '\\u201D')\n        .replace(/\\u0027/g, '\\u2019')\n        .replace(/\\u0020/g, '\\u3000');\n    return fullWidth;\n}\n\n/**\n * 蜈ィ隗偵き繝頑枚蟄怜�繧貞濠隗偵き繝頑枚蟄怜�縺ォ螟画鋤縺励※霑斐☆縲�\n * 蜈ィ隗偵き繝贋サ・螟悶�譁�ュ怜�縺ッ螟画鋤縺輔l縺ェ縺�€�\n *\n * | 螟画鋤蜑�   | 螟画鋤蠕�   | 蛯呵€�                                    |\n * |:---------|:---------|:----------------------------------------|\n * | 蜈ィ隗偵き繝� | 蜊願ァ偵き繝� | 縲渓atakanaMap縲阪↓遉コ縺吶�繝�ヴ繝ウ繧ー縺ォ蝓コ縺・縺� |\n *\n * @param {string} str - 螟画鋤蟇セ雎。縺ョ譁�ュ怜�\n * @returns {string} 螟画鋤蠕後�譁�ュ怜�\n */\nfunction convertFullWidthKatakanaToHalfWidthKatakana(str) {\n    if (!str) {\n        return str;\n    }\n    const katakanaMap = {\n        繧ャ: '�カ��',\n        繧ョ: '�キ��',\n        繧ー: '�ク��',\n        繧イ: '�ケ��',\n        繧エ: '�コ��',\n        繧カ: '�サ��',\n        繧ク: '�シ��',\n        繧コ: '�ス��',\n        繧シ: '�セ��',\n        繧セ: '�ソ��',\n        繝€: '�€��',\n        繝�: '��セ�',\n        繝�: '�ゑセ�',\n        繝�: '��セ�',\n        繝�: '��セ�',\n        繝�: '�奇セ�',\n        繝�: '�具セ�',\n        繝�: '�鯉セ�',\n        繝�: '�搾セ�',\n        繝�: '�趣セ�',\n        繝�: '�奇セ�',\n        繝�: '�具セ�',\n        繝�: '�鯉セ�',\n        繝�: '�搾セ�',\n        繝�: '�趣セ�',\n        繝エ: '�ウ��',\n        繝キ: '�懶セ�',\n        繝コ: '�ヲ��',\n        繧「: '�ア',\n        繧、: '�イ',\n        繧ヲ: '�ウ',\n        繧ィ: '�エ',\n        繧ェ: '�オ',\n        繧ォ: '�カ',\n        繧ュ: '�キ',\n        繧ッ: '�ク',\n        繧ア: '�ケ',\n        繧ウ: '�コ',\n        繧オ: '�サ',\n        繧キ: '�シ',\n        繧ケ: '�ス',\n        繧サ: '�セ',\n        繧ス: '�ソ',\n        繧ソ: '�€',\n        繝�: '��',\n        繝�: '��',\n        繝�: '��',\n        繝�: '��',\n        繝�: '��',\n        繝�: '��',\n        繝�: '��',\n        繝�: '��',\n        繝�: '��',\n        繝�: '��',\n        繝�: '��',\n        繝�: '��',\n        繝�: '��',\n        繝�: '��',\n        繝�: '��',\n        繝�: '��',\n        繝�: '��',\n        繝。: '��',\n        繝「: '��',\n        繝、: '��',\n        繝ヲ: '��',\n        繝ィ: '��',\n        繝ゥ: '��',\n        繝ェ: '��',\n        繝ォ: '��',\n        繝ャ: '��',\n        繝ュ: '��',\n        繝ッ: '��',\n        繝イ: '�ヲ',\n        繝ウ: '��',\n        繧。: '�ァ',\n        繧」: '�ィ',\n        繧・: '�ゥ',\n        繧ァ: '�ェ',\n        繧ゥ: '�ォ',\n        繝�: '�ッ',\n        繝」: '�ャ',\n        繝・: '�ュ',\n        繝ァ: '�ョ',\n        '縲�': '�。',\n        '縲�': '�、',\n        繝シ: '�ー',\n        '縲�': '�「',\n        '縲�': '�」',\n        '繝サ': '�・',\n        '繧�': '��',\n        '繧�': '��',\n    };\n    const katakanaRegExp = new RegExp(`(?:${Object.keys(katakanaMap).join('|')})`, 'g');\n    const halfWidth = str.normalize().replace(katakanaRegExp, function (char) {\n        return katakanaMap[char] || char;\n    });\n    return halfWidth;\n}\n\nmodule.exports = {\n    encodeHtml,\n    convertToHyphen,\n    convertToHalfWidthDigit,\n    convertToPSM,\n    convertToFullWidth,\n    convertFullWidthKatakanaToHalfWidthKatakana,\n};\n","'use strict';\n\nconst clicklock = require('app_common/components/clicklock');\nconst updateDom = require('app_common/components/updateDom');\nconst {getCsrfObject} = require('app_common/components/security');\nconst {encodeHtml} = require('sswd_base/util/XStringUtils');\n\n/**\n * 繧ォ繝シ繝郁ソス蜉�縺ョURL繧貞叙蠕予n *\n * @returns {string} 繧ォ繝シ繝�URL\n */\nfunction getAddToCartUrl() {\n    return $('.add-to-cart-url').val();\n}\n\n/**\n * 繧ォ繝シ繝郁ソス蜉�逕ィ縺ョ繝。繝�そ繝シ繧ク繧貞性繧€繧ソ繧ー縺ョjQuery繧ェ繝悶ず繧ァ繧ッ繝医r蜿門セ励☆繧九€�\n * `app_custom/cartridge/templates/default/components/addition/addToMessagesAlert.isml`蜀��繧ォ繝シ繝育畑縺ョ繧ソ繧ー縺ォ蟇セ蠢懊☆繧九€�\n *\n * @returns {JQuery<Element>} 繧ォ繝シ繝郁ソス蜉�逕ィ縺ョ繝。繝�そ繝シ繧ク繧貞性繧€繧ソ繧ー縺ョjQuery繧ェ繝悶ず繧ァ繧ッ繝�\n */\nfunction getAddrToCartMessages() {\n    const $addrToCartMessages = $('.add-to-cart-messages-sample');\n    return $addrToCartMessages;\n}\n\n/**\n * 繧ォ繝シ繝郁ソス蜉�譎ゅ�繝昴ャ繝励い繝��繧定。ィ遉コ縺吶k縲�\n *\n * @param {object} data 繝溘ル繧ォ繝シ繝医↓貂。縺吶ョ繝シ繧ソ\n * - quantityTotal: �懊Α繝九き繝シ繝医〒陦ィ遉コ縺吶k繧ォ繝シ繝亥�縺ョ蝠�刀謨ー驥擾シ� 萓�: `2`\n * - minicartCountOfItems: �懊Α繝九き繝シ繝医�a繧ソ繧ー縺ョtitle螻樊€ァ縺ォ繧サ繝�ヨ縺吶k繝。繝�そ繝シ繧ク�� 萓�: `'Cart 2 Items'`\n */\nfunction clickAddToMessageAlert(data) {\n    $('.minicart').trigger('count:update', data);\n\n    // 繝。繝�そ繝シ繧ク繧ィ繝ェ繧「繧貞叙蠕励☆繧欺n    const $addrToCartMessages = getAddrToCartMessages();\n    const message = $('.add-to-basket-alert-sample', $addrToCartMessages).html();\n\n    // 陦ィ遉コ逕ィ縺ォ邨�∩遶九※繧欺n    const $body = $('body');\n    const $messages = $('<div class=\"add-to-cart-messages\"></div>');\n    const $alert = $(\n        `<div class=\"alert alert-success add-to-basket-alert text-center\" role=\"alert\">${message}</div>`\n    );\n    $messages.append($alert);\n    $body.append($messages);\n    setTimeout(function () {\n        $alert.remove();\n        $messages.remove();\n    }, 5e3);\n}\n\n/**\n * 繧ォ繝シ繝郁ソス蜉�螟ア謨玲凾縺ョ繝昴ャ繝励い繝��繧定。ィ遉コ縺吶k縲�\n *\n * @param {string[]} error - 繧ィ繝ゥ繝シ繝。繝�そ繝シ繧ク縺ョ驟榊�縲ゆセ�: `['繧ィ繝ゥ繝シ縺檎匱逕溘@縺セ縺励◆縲�']`\n * @returns {void}\n */\nfunction clickAddFalseToMessageAlert(error) {\n    // 繝。繝�そ繝シ繧ク繧ィ繝ェ繧「繧貞叙蠕励☆繧欺n    const $addrToCartMessages = getAddrToCartMessages();\n    const messageHtmlStr = $('.add-to-basket-alert-false', $addrToCartMessages).html();\n\n    // 譁�ュ怜�繧男Query繧ェ繝悶ず繧ァ繧ッ繝医↓螟画鋤\n    const $messageHtml = $(messageHtmlStr);\n    // 繝。繝�そ繝シ繧ク繧剃ス懈�縺吶k\n    let message;\n    if (Array.isArray(error) && error.length > 0) {\n        if (error.length === 1) {\n            message = `${encodeHtml(error[0])}`;\n        } else {\n            message = '<ul>';\n            error.forEach((e) => {\n                message += `<li>${encodeHtml(e)}</li>`;\n            });\n            message += '</ul>';\n        }\n    } else {\n        message = $addrToCartMessages.data('message-systemerror');\n    }\n    // 繝。繝�そ繝シ繧ク驛ィ蛻�r荳頑嶌縺阪☆繧欺n    $messageHtml.find('.pull-right.ml-2').html(message);\n\n    // 陦ィ遉コ逕ィ縺ォ邨�∩遶九※繧欺n    const $body = $('body');\n    const $messages = $('<div class=\"add-to-cart-messages\"></div>');\n    const $alert = $(\n        `<div class=\"alert alert-success add-to-basket-alert text-center\" role=\"alert\">${$messageHtml.prop(\n            'outerHTML'\n        )}</div>`\n    );\n    $messages.append($alert);\n    $body.append($messages);\n    setTimeout(function () {\n        $alert.remove();\n        $messages.remove();\n    }, 5e3);\n}\n\n/**\n * 繧ケ繧ッ繝ュ繝シ繝ォ繧「繝九Γ繝シ繧キ繝ァ繝ウ縺悟ョ御コ�☆繧九∪縺ァ蠕�▽髢「謨ー\n *\n * @returns {Promise<void>} 繧ケ繧ッ繝ュ繝シ繝ォ繧「繝九Γ繝シ繧キ繝ァ繝ウ縺悟ョ御コ�☆繧九→隗」豎コ縺輔l繧輝romise縲�\n */\nfunction waitForScroll() {\n    return new Promise((resolve) => {\n        require('base/components/scrollAnimate')();\n\n        // animate髢「謨ー縺悟ョ御コ�@縺溷セ後↓Promise繧定ァ」豎コ縺吶k\n        $('html, body').promise().done(resolve);\n    });\n}\n\n/**\n * 蟇セ雎。逕サ髱「繧貞�謠冗判縺吶k\n * 蝨ィ蠎ォ縺後↑縺�€∬イゥ螢イ譛滄俣螟悶�蝣エ蜷医�驛ィ蛻�峩譁ー縺ィ縺励€―n * 繧ェ繝輔Λ繧、繝ウ縺ョ蝣エ蜷医�縲√�繝シ繧ク縺瑚ヲ九▽縺九i縺ェ縺�◆繧∝�菴薙r蜀肴緒逕サ縺吶k\n *\n * @param {string} url - 蜀肴緒逕サ蟇セ雎。\n * @param {string} refreshArea - 譖エ譁ー驛ィ蛻�r謖�ョ壹☆繧九け繝ゥ繧ケ蜷構n */\nfunction refreshProductView(url, refreshArea) {\n    $.ajax({\n        url: url,\n        method: 'GET',\n        success: function (response) {\n            // 蝨ィ蠎ォ縺後↑縺�€∬イゥ螢イ譛滄俣螟悶�蝣エ蜷医�驛ィ蛻�峩譁ー\n            updateDom(response, refreshArea);\n        },\n        error: function () {\n            // TODO�壼膚蜩∬ゥウ邏ー繧ェ繝輔Λ繧、繝ウ迥カ諷九�譎ゅ�逕サ髱「驕キ遘サ\n            // 繝ェ繝€繧、繝ャ繧ッ繝医&縺�404繧ィ繝ゥ繝シ逕サ髱「繧定。ィ遉コ\n            window.location.href = url;\n        },\n    });\n}\n\n/**\n * (譛ャ髢「謨ー縺ッ縲ヾFRA縺ョ縲継roduct/base.js#miniCartReportingUrl縲阪r遘サ讀阪@縺溘b縺ョ)\n *\n * Makes a call to the server to report the event of adding an item to the cart\n *\n * @param {string} url - a string representing the end point to hit so that the event can be recorded\n */\nfunction miniCartReportingUrl(url) {\n    if (!url) {\n        return;\n    }\n    $.ajax({\n        url,\n        method: 'GET',\n        success: function () {\n            // reporting urls hit on the server\n        },\n        error: function () {\n            // no reporting urls hit on the server\n        },\n    });\n}\n\n/**\n * 繧ォ繝シ繝医↓霑ス蜉�\n * @param {object} e 繧、繝吶Φ繝�\n * @return {Promise<any>} postForm霑泌唆蛟、\n */\nasync function doAddToCart(e) {\n    if (!e) {\n        return;\n    }\n\n    // 蝠�刀ID縺ィ謨ー驥丞叙蠕予n    const $addCartButton = $(e.currentTarget);\n    const productId = $addCartButton.data('pid');\n    // 蝠�刀隧ウ邏ー逕サ髱「縺ォ縺ヲ蜈・蜉帙&繧後◆謨ー驥上r蜿門セ励☆繧欺n    // PC迚医→繝「繝舌う繝ォ迚医〒縺昴l縺槭l蜿門セ励☆繧欺n    const quantityElementDesktop = $addCartButton\n        .closest('.row')\n        .prev()\n        .find('.form-control[name=\"quantity\"]');\n    const quantityElementMobile = $addCartButton\n        .closest('.row')\n        .find('.form-control[name=\"quantity\"]');\n\n    let quantity;\n\n    if (quantityElementDesktop.length) {\n        quantity = quantityElementDesktop.val();\n    } else if (quantityElementMobile.length) {\n        quantity = quantityElementMobile.val();\n    }\n\n    // 縺頑ー励↓蜈・繧顔判髱「縺ェ縺ゥ謨ー驥剰ィュ螳壹′縺ェ縺��エ蜷医�繝�ヵ繧ゥ繝ォ繝医〒1繧定ィュ螳壹☆繧欺n    quantity = quantity || 1;\n\n    // 蜿門セ励@縺溷膚蜩!D縺ィ謨ー驥上r繝昴せ繝医ョ繝シ繧ソ繧ェ繝悶ず繧ァ繧ッ繝医↓螟画鋤\n    let postDataObj = {\n        productId: productId ? productId + '' : '',\n        quantity: parseInt(quantity, 10),\n    };\n\n    // 繧ウ繝ウ繝医Ο繝シ繝ゥ繝シ蜻シ縺ウ蜃コ縺礼畑URL蜿門セ予n    const addToCartUrl = getAddToCartUrl();\n\n    const csrfObject = getCsrfObject();\n    const csrfTokenName = csrfObject.tokenName;\n    const csrfTokenValue = csrfObject.token;\n\n    // 繝輔か繝シ繝�繝��繧ソ菴懈�\n    const formData = new FormData();\n    formData.append('pid', postDataObj.productId);\n    formData.append('quantity', postDataObj.quantity);\n    formData.append(csrfTokenName, csrfTokenValue);\n\n    const postForm = require('sswd_base/components/XPostForm');\n    const result = await postForm(addToCartUrl, formData);\n    return result;\n}\n\n/**\n * 繧ォ繝シ繝医↓霑ス蜉�\n * 霑ス蜉�蠕後�繝。繝�そ繝シ繧ク陦ィ遉コ繧貞、画峩縺吶k縺溘a縺ォ遘サ讀構n * 繧サ繝�ヨ蜩√d繝舌Φ繝峨Ν蜩√↓髢「縺吶k蜃ヲ逅�b蜑企勁\n */\nfunction addToCart() {\n    $('body').on('click', 'button.add-to-cart, button.add-to-cart-global', async (e) => {\n        // 繧ッ繝ェ繝�け繧、繝吶Φ繝医r繝ュ繝�け縺吶k\n        if (!clicklock.lock()) {\n            // 繝ュ繝�け縺ァ縺阪↑縺九▲縺溷�エ蜷医�菴輔b縺励↑縺Ыn            return;\n        }\n        try {\n            // 繧ケ繝斐リ繝シ繧帝幕蟋九☆繧欺n            $('body').trigger('product:beforeAddToCart', this);\n\n            // 繧ォ繝シ繝郁ソス蜉�蜃ヲ逅�\n            const result = await doAddToCart(e);\n\n            // 繝。繝�そ繝シ繧ク陦ィ遉コ\n            if (result.success) {\n                const data = result.data;\n                // 繧ォ繝シ繝郁ソス蜉�謌仙粥譎ゅ�縲√ョ繧カ繧、繝ウ縺輔l縺溘�繝��繧「繝��繧定。ィ遉コ縺吶k\n                clickAddToMessageAlert(data);\n                $('body').trigger('product:afterAddToCart', data);\n                const reportingURL = data.reportingURL;\n                miniCartReportingUrl(reportingURL);\n            } else {\n                // 逕サ髱「荳企Κ縺ク繧ケ繧ッ繝ュ繝シ繝ォ\n                await waitForScroll();\n                // 繧ィ繝ゥ繝シ繝。繝�そ繝シ繧ク縺ョ陦ィ遉コ\n                let error;\n                if (result.error) {\n                    error = result.error;\n                } else if (result.csrfError) {\n                    const $addrToCartMessages = getAddrToCartMessages();\n                    error = [$addrToCartMessages.data('message-csrferror')];\n                } else {\n                    const $addrToCartMessages = getAddrToCartMessages();\n                    error = [$addrToCartMessages.data('message-systemerror')];\n                }\n                clickAddFalseToMessageAlert(error);\n                // 繝ェ繝輔Ξ繝�す繝・URL縲√き繧ケ繧ソ繝�繧、繝吶Φ繝亥叙蠕予n                const $addCartButton = $(e.currentTarget);\n                const refreshUrl = $addCartButton.data('refresh-url');\n                const refreshArea = $addCartButton.data('refresh-area');\n\n                // 繧、繝吶Φ繝医r繝医Μ繧ャ繝シ縺怜他縺ウ蜃コ縺怜�縺ォ蠢懊§縺溷�逅�r陦後≧\n                refreshProductView(refreshUrl, refreshArea);\n            }\n        } catch (err) {\n            // 逕サ髱「荳企Κ縺ク繧ケ繧ッ繝ュ繝シ繝ォ\n            await waitForScroll();\n            // 繧ィ繝ゥ繝シ繝。繝�そ繝シ繧ク縺ョ陦ィ遉コ\n            const $addrToCartMessages = getAddrToCartMessages();\n            const error = [$addrToCartMessages.data('message-systemerror')];\n            clickAddFalseToMessageAlert(error);\n        } finally {\n            // 繧ケ繝斐リ繝シ繧貞●豁「縺吶k\n            $.spinner().stop();\n            // 繧ッ繝ェ繝�け繧、繝吶Φ繝医r繧「繝ウ繝ュ繝�け縺吶k\n            clicklock.unlock();\n        }\n    });\n}\n\n/**\n * 蝠�刀隧ウ邏ー縺翫h縺ウ縺頑ー励↓蜈・繧翫Μ繧ケ繝育判髱「縺ョ縲後☆縺占ウシ蜈・縲阪�繧ソ繝ウ縺ョ繧ッ繝ェ繝�け譎ゅ�蜃ヲ逅�r險ュ螳壹☆繧九€�\n *\n * @returns {void}\n */\nfunction handleBuyNow() {\n    // 縲悟膚蜩∬ソス蜉�縺ゅj縲阪�縲後☆縺占ウシ蜈・縲阪�繧ソ繝ウ縺後け繝ェ繝�け縺輔l縺滄圀縺ョ蜃ヲ逅�\n    $('.co-buy-now').on('click', async (event) => {\n        event.preventDefault();\n        if (!clicklock.lock()) {\n            return;\n        }\n        try {\n            // 蝠�刀ID縺ィ謨ー驥丞叙蠕予n            const $addCartButton = $(event.currentTarget);\n            const productId = $addCartButton.data('pid');\n            // 蝠�刀隧ウ邏ー逕サ髱「縺ォ縺ヲ蜈・蜉帙&繧後◆謨ー驥上r蜿門セ励☆繧欺n            // PC迚医→繝「繝舌う繝ォ迚医〒縺昴l縺槭l蜿門セ励☆繧欺n            const quantityElementDesktop = $addCartButton\n                .closest('.row')\n                .prev()\n                .find('.form-control[name=\"quantity\"]');\n            const quantityElementMobile = $addCartButton\n                .closest('.row')\n                .find('.form-control[name=\"quantity\"]');\n\n            let quantity;\n\n            if (quantityElementDesktop.length) {\n                quantity = quantityElementDesktop.val();\n            } else if (quantityElementMobile.length) {\n                quantity = quantityElementMobile.val();\n            }\n\n            // 縺頑ー励↓蜈・繧顔判髱「縺ェ縺ゥ謨ー驥剰ィュ螳壹′縺ェ縺��エ蜷医�繝�ヵ繧ゥ繝ォ繝医〒1繧定ィュ螳壹☆繧欺n            quantity = quantity || 1;\n\n            // 縲後☆縺占ウシ蜈・縲阪r螳溯。後☆繧欺n            const {getBuyNowObj} = require('../components/buyNow');\n            const {execBuyNow} = require('../co/coBuyNow');\n            const buyNowObj = getBuyNowObj(productId, quantity);\n            await execBuyNow(buyNowObj);\n        } finally {\n            clicklock.unlock();\n        }\n    });\n}\n\nmodule.exports = {\n    addToCart,\n    doAddToCart,\n    handleBuyNow,\n};\n","'use strict';\n\nmodule.exports = function (element) {\n    var position = element && element.length ? element.offset().top : 0;\n    $('html, body').animate({\n        scrollTop: position\n    }, 500);\n    if (!element) {\n        $('.logo-home').focus();\n    }\n};\n","'use strict';\n\n/*\n * 莠碁㍾騾∽ソ。髦イ豁「逕ィ縺ョ蜃ヲ逅�r謠蝉セ帙☆繧九€�\n *\n * ## 蛻ゥ逕ィ萓欺n *\n * const clicklock = require('app_common/components/clicklock');\n * ...\n *\n * function submit() {\n *     // 繧ッ繝ェ繝�け繧、繝吶Φ繝医r繝ュ繝�け縺吶k\n *     if (!clicklock.lock()) {\n *         // 繝ュ繝�け縺ァ縺阪↑縺九▲縺溷�エ蜷医�菴輔b縺励↑縺Ыn *         return;\n *     }\n *     try {\n *         ... 騾∽ソ。蜃ヲ逅�\n *     } finally {\n *         // 繧ッ繝ェ繝�け繧、繝吶Φ繝医r繧「繝ウ繝ュ繝�け縺吶k\n *         clicklock.unlock();\n *     }\n * }\n */\n\n/** @type {object} window繧ェ繝悶ず繧ァ繧ッ繝亥�縺ォ迥カ諷九r菫晄戟縺吶k縺溘a縺ョ繧ェ繝悶ず繧ァ繧ッ繝� */\nwindow.sswd = {\n    /** @type {object} clicklock蜷代¢縺ョ繧ェ繝悶ず繧ァ繧ッ繝� */\n    clicklock: {\n        /** @type {boolean} 繧ッ繝ェ繝�け繧、繝吶Φ繝医′繝ュ繝�け縺輔l縺ヲ縺�k縺句凄縺� */\n        locked: false,\n    },\n};\n\n/**\n * 繧ッ繝ェ繝�け繧、繝吶Φ繝医r繝ュ繝�け縺吶k縲�\n *\n * @returns {boolean} 繝ュ繝�け縺ォ謌仙粥縺励◆蝣エ蜷医�true縲∝、ア謨励@縺溷�エ蜷�(縺吶〒縺ォ繝ュ繝�け縺輔l縺ヲ縺�k蝣エ蜷�)縺ッfalse縲�\n */\nfunction lock() {\n    if (window.sswd.clicklock.locked) {\n        return false;\n    }\n    window.sswd.clicklock.locked = true;\n    return true;\n}\n\n/**\n * 繧ッ繝ェ繝�け繧、繝吶Φ繝医r繧「繝ウ繝ュ繝�け縺吶k縲�\n *\n * @returns {boolean} 蠢�★true繧定ソ斐☆縲�\n */\nfunction unlock() {\n    window.sswd.clicklock.locked = false;\n    return true;\n}\n\nmodule.exports = {\n    lock,\n    unlock,\n};\n"],"sourceRoot":""}