{"version":3,"sources":["webpack:///./src/Teaser.vue?3b54","webpack:///./src/Teaser.vue?817f","webpack:///./src/components/TeaserCard.vue?7893","webpack:///./src/Teaser.vue?944e","webpack:///./node_modules/swiper/css/swiper.css","webpack:///./node_modules/vue-awesome-swiper/dist/vue-awesome-swiper.js","webpack:///./src/lib/api-search.js","webpack:///./src/components/ClassificationsList.vue?a2a5","webpack:///./node_modules/swiper/css/swiper.css?3dde","webpack:///./node_modules/ssr-window/dist/ssr-window.esm.js","webpack:///./node_modules/dom7/dist/dom7.modular.js","webpack:///./node_modules/swiper/js/swiper.esm.bundle.js","webpack:///./src/components/TeaserCard.vue?86f3","webpack:///./src/components/ClassificationsList.vue?db80","webpack:///./src/components/TeaserCard.vue?4c1d","webpack:///./src/Teaser.vue","webpack:///./src/components/TeaserCard.vue","webpack:///src/components/TeaserCard.vue","webpack:///./src/components/TeaserCard.vue?7e31","webpack:///./src/components/TeaserCard.vue?90c4","webpack:///src/Teaser.vue","webpack:///./src/Teaser.vue?aec7","webpack:///./src/Teaser.vue?9e40","webpack:///./src/components/ClassificationsList.vue?f4cd","webpack:///./src/components/ClassificationFromTo.vue","webpack:///./src/components/ClassificationsList.vue","webpack:///src/components/ClassificationsList.vue","webpack:///./src/components/ClassificationsList.vue?a94f","webpack:///./src/components/ClassificationsList.vue?a5ee","webpack:///src/components/ClassificationFromTo.vue","webpack:///./src/components/ClassificationFromTo.vue?a33e","webpack:///./src/components/ClassificationFromTo.vue?81c2"],"names":["content","__esModule","default","module","i","locals","exports","add","___CSS_LOADER_API_IMPORT___","push","g","f","this","SwiperClass","Vue","CoreNames","Object","prototype","hasOwnProperty","call","ComponentEvents","ComponentPropNames","DEFAULT_CLASSES","freeze","containerClass","wrapperClass","slideClass","SWIPER_EVENTS","__spreadArrays","s","il","arguments","length","r","Array","k","a","j","jl","SlotNames","kebabcase","string","replace","toLowerCase","handleClickSlideEvent","swiper","event","emit","_a","_b","_c","eventPath","composedPath","path","target","slides_1","from","slides","paths","includes","some","item","clickedIndex","reallyIndex","Number","clickedSlide","dataset","swiperSlideIndex","reallyIndexValue","isInteger","ClickSlide","bindSwiperEvents","forEach","eventName","on","arguments$1","args","_i","apply","kebabcaseName","INSTANCE_NAME_KEY","getDirective","globalOptions","getStandardisedOptionByAttrs","vnode","key","_d","value","data","attrs","undefined","getSwiperInstanceName","element","binding","arg","id","SwiperInstance","getSwiperInstance","instanceName","context","getSwipeOptions","getBooleanValueByInput","input","getEventEmiter","handlers","componentOptions","listeners","name","handle","fns","bind","className","indexOf","addEventListener","emitEvent","inserted","swiperOptions","vueContext","destroyed","Ready","componentUpdated","_e","_f","_g","_h","_j","_k","_l","_m","autoUpdate","AutoUpdate","isLoop","loop","loopDestroy","update","navigation","pagination","render","loopCreate","unbind","autoDestroy","AutoDestroy","initialized","destroy","DeleteInstanceOnDestroy","CleanupStylesOnDestroy","getSwiperComponent","extend","SwiperComponent","props","defaultOptions","type","required","options","Boolean","computed","swiperInstance","cache","set","get","methods","handleSwiperClick","$emit","autoReLoopSwiper","updateSwiper","destroySwiper","initSwiper","$el","mounted","activated","updated","beforeDestroy","$nextTick","createElement","staticClass","click","$slots","ParallaxBg","class","Pagination","PrevButton","NextButton","Scrollbar","SwiperSlideComponent","$parent","parent","getInstaller","install","installed","component","directive","SwiperDirective","exporter","version","VueAwesomeSwiper","Swiper","SwiperSlide","defineProperty","apiSearch","apiUrl","apiKey","config","Promise","resolve","reject","params","keys","map","encodeURIComponent","join","fetch","then","json","catch","reason","isObject","obj","constructor","src","doc","document","ssrDocument","body","removeEventListener","activeElement","blur","nodeName","querySelector","querySelectorAll","getElementById","createEvent","initEvent","children","childNodes","style","setAttribute","getElementsByTagName","createElementNS","importNode","location","hash","host","hostname","href","origin","pathname","protocol","search","win","window","ssrWindow","navigator","userAgent","history","replaceState","pushState","go","back","CustomEvent","getComputedStyle","getPropertyValue","Image","Date","screen","setTimeout","clearTimeout","matchMedia","Dom7","arr","self","$","selector","els","tempParent","html","trim","toCreate","innerHTML","match","split","nodeType","unique","uniqueArray","addClass","classes","classList","removeClass","remove","hasClass","contains","toggleClass","toggle","attr","getAttribute","attrName","removeAttr","removeAttribute","el","dom7ElementDataStorage","dataKey","transform","elStyle","webkitTransform","transition","duration","webkitTransitionDuration","transitionDuration","eventType","targetSelector","listener","capture","handleLiveEvent","e","eventData","dom7EventData","unshift","is","parents","handleEvent","events","dom7LiveListeners","proxyListener","dom7Listeners","off","handler","dom7proxy","splice","trigger","evt","detail","bubbles","cancelable","filter","dataIndex","dispatchEvent","transitionEnd","callback","dom","fireCallBack","includeMargins","styles","offsetWidth","parseFloat","offsetHeight","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","top","left","css","prop","each","matchedItems","text","textContent","compareWith","matches","webkitMatchesSelector","msMatchesSelector","child","previousSibling","eq","index","returnIndex","append","newChild","tempDiv","firstChild","appendChild","prepend","insertBefore","next","nextElementSibling","nextAll","nextEls","prev","previousElementSibling","prevAll","prevEls","parentNode","closest","find","foundElements","found","removeChild","toAdd","fn","Class","Methods","outerWidth","outerHeight","offset","methodName","Utils","object","delay","now","axis","matrix","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","MozTransform","OTransform","MsTransform","msTransform","toString","m41","m42","url","query","param","urlToParse","paramsPart","decodeURIComponent","o","to","nextSource","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","enumerable","touch","DocumentTouch","pointerEvents","PointerEvent","maxTouchPoints","observer","passiveListener","supportsPassive","opts","gestures","eventsListeners","priority","method","onceHandler","f7proxy","eventHandler","isArray","slice","eventsArray","instanceParams","instance","modules","moduleName","modulesParams","moduleParams","modulePropName","moduleProp","moduleEventName","create","components","use","proto","static","m","installModule","updateSize","width","height","clientWidth","clientHeight","isHorizontal","isVertical","parseInt","size","updateSlides","$wrapperEl","swiperSize","rtlTranslate","rtl","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","slidesForMargin","slideIndex","cssMode","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","slidesNumberEvenToRows","slideSize","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesPerColumn","Math","floor","ceil","slidesPerView","slidesPerColumnFill","max","slidesPerRow","numFullColumns","slide","newSlideOrderIndex","column","row","slidesPerGroup","groupIndex","slideIndexInGroup","columnsInGroup","min","order","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","paddingTop","paddingBottom","swiperSlideSize","centeredSlides","abs","slidesPerGroupSkip","newSlidesGrid","effect","setWrapperSize","slidesGridItem","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","watchOverflow","checkOverflow","watchSlidesProgress","watchSlidesVisibility","updateSlidesOffset","updateAutoHeight","speed","activeSlides","newHeight","setTransition","visibleSlides","activeIndex","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","translate","offsetCenter","slideVisibleClass","visibleSlidesIndexes","slideProgress","minTranslate","autoHeight","slideBefore","slideAfter","isVisible","progress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","updateSlidesClasses","realIndex","activeSlide","slideActiveClass","slideNextClass","slidePrevClass","slideDuplicateActiveClass","slideDuplicateNextClass","slideDuplicatePrevClass","slideDuplicateClass","nextSlide","prevSlide","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","skip","runCallbacksOnInit","updateClickedSlide","slideFound","slideToClickedSlide","getTranslate","virtualTranslate","currentTranslate","setTranslate","byController","wrapperEl","x","y","z","newProgress","previousTranslate","translateTo","runCallbacks","translateBounds","internal","animating","preventInteractionOnTransition","newTranslate","isH","scrollTo","behavior","onTranslateToWrapperTransitionEnd","transitionStart","direction","dir","slideTo","initialSlide","allowSlideNext","allowSlidePrev","t","scrollWidth","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","loopedSlides","slideNext","increment","loopFix","_clientLeft","slidePrev","normalize","val","normalizedTranslate","normalizedSnapGrid","prevIndex","prevSnap","slideReset","slideToClosest","threshold","currentSnap","nextSnap","slidesPerViewDynamic","slideToIndex","nextTick","loopFillGroupWithBlank","blankSlidesNum","blankNode","slideBlankClass","loopAdditionalSlides","prependSlides","appendSlides","cloneNode","snapTranslate","diff","slideChanged","setGrabCursor","moving","simulateTouch","isLocked","cursor","unsetGrabCursor","grabCursor","appendSlide","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","manipulation","platform","ua","device","ios","android","androidChrome","desktop","iphone","ipod","ipad","edge","ie","firefox","macos","windows","cordova","phonegap","electron","screenWidth","screenHeight","os","osVersion","webView","standalone","webview","pixelRatio","devicePixelRatio","onTouchStart","touchEventsData","touches","originalEvent","$targetEl","touchEventsTarget","isTouchEvent","which","button","isTouched","isMoved","noSwiping","noSwipingSelector","noSwipingClass","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","preventDefault","formElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","sqrt","touchAngle","atan2","PI","touchMoveStopPropagation","nested","stopPropagation","startTranslate","allowMomentumBounce","touchRatio","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","velocities","position","time","onTouchEnd","touchEndTime","timeDiff","lastClickTime","currentPos","freeModeMomentum","lastMoveEvent","pop","velocityEvent","distance","velocity","freeModeMinimumVelocity","freeModeMomentumVelocityRatio","momentumDuration","freeModeMomentumRatio","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","freeModeMomentumBounceRatio","needsLoopFix","freeModeMomentumBounce","freeModeSticky","once","moveDistance","currentSlideSize","longSwipesMs","stopIndex","groupSize","ratio","longSwipes","longSwipesRatio","shortSwipes","isNavButtonTarget","nextEl","prevEl","onResize","breakpoints","setBreakpoint","autoplay","running","paused","run","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","dummyEventAttached","dummyEventListener","attachEvents","touchEvents","onClick","start","move","end","passiveListeners","passive","cancel","updateOnWindowResize","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointOnlyParams","paramValue","breakpointParams","originalParams","wasMultiRow","isMultiRow","containerModifierClass","directionChanged","needsReLoop","changeDirection","points","point","minRatio","substr","innerHeight","sort","b","innerWidth","addClasses","classNames","suffixes","suffix","removeClasses","loadImage","imageEl","srcset","sizes","checkForComplete","image","onReady","isPicture","complete","onload","onerror","preloadImages","imagesLoaded","imagesToLoad","updateOnImagesReady","currentSrc","wasLocked","lastSlidePosition","checkOverflow$1","defaults","init","uniqueNavElements","prototypes","images","extendedDefaults","super","prototypeGroup","protoMethod","moduleParamName","swiperParams","useModulesParams","passedParams","swipers","containerEl","newParams","shadowRoot","touchEventsTouch","touchEventsDesktop","clickTimeout","useModules","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","slideEl","deleteInstance","cleanStyles","deleteProps","newDefaults","Device$1","Support$1","support","isSafari","isEdge","isWebView","test","Browser$1","browser","Resize","resize","resizeHandler","orientationChangeHandler","Observer","func","MutationObserver","WebkitMutationObserver","ObserverFunc","mutations","observerUpdate","requestAnimationFrame","observe","attributes","childList","characterData","observers","observeParents","containerParents","attach","observeSlideChildren","disconnect","Observer$1","Virtual","force","addSlidesBefore","addSlidesAfter","previousFrom","previousTo","previousSlidesGrid","renderSlide","previousOffset","offsetProp","slidesAfter","slidesBefore","onRendered","lazy","load","renderExternal","slidesToRender","prependIndexes","appendIndexes","$slideEl","numberOfNewSlides","newCache","cachedIndex","$cachedEl","cachedElIndex","Virtual$1","overwriteParams","Keyboard","kc","keyCode","charCode","pageUpDown","keyboard","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","shiftKey","altKey","ctrlKey","metaKey","onlyInViewport","inView","windowWidth","windowHeight","swiperOffset","swiperCoord","returnValue","Keyboard$1","enable","disable","isEventSupported","isSupported","implementation","hasFeature","Mousewheel","lastScrollTime","lastEventBeforeSnap","recentWheelEvents","PIXEL_STEP","LINE_HEIGHT","PAGE_HEIGHT","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","mouseEntered","mousewheel","eventsTarged","releaseOnEdges","delta","rtlFactor","forceToAxis","invert","newEvent","sign","ignoreWheelEvents","sensitivity","timeout","shift","prevEvent","firstEvent","snapToThreshold","autoplayDisableOnInteraction","stop","raw","animateSlider","releaseScroll","getTime","handleMouseEnter","handleMouseLeave","Mousewheel$1","Navigation","$nextEl","$prevEl","disabledClass","lockClass","onNextClick","onPrevClick","Navigation$1","hideOnClick","hiddenClass","isHidden","current","total","paginationType","bullets","firstIndex","lastIndex","midIndex","dynamicBullets","bulletSize","dynamicMainBullets","dynamicBulletIndex","bulletActiveClass","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","currentClass","formatFractionCurrent","totalClass","formatFractionTotal","progressbarDirection","progressbarOpposite","scale","scaleX","scaleY","progressbarFillClass","renderCustom","paginationHTML","numberOfBullets","renderBullet","bulletClass","bulletElement","renderFraction","renderProgressbar","clickable","clickableClass","modifierClass","progressbarOppositeClass","Pagination$1","number","scrollbar","dragSize","trackSize","$dragEl","newSize","newPos","hide","opacity","divider","moveDivider","display","clientX","clientY","dragStartPos","positionRatio","getPointerPosition","setDragPosition","dragTimeout","snapOnRelease","activeListener","onDragStart","onDragMove","onDragEnd","$swiperEl","dragClass","dragEl","draggable","enableDraggable","disableDraggable","Scrollbar$1","Parallax","p","currentOpacity","currentScale","parallax","setTransform","parallaxEl","$parallaxEl","parallaxDuration","Parallax$1","Zoom","x1","y1","x2","y2","zoom","gesture","fakeGestureTouched","fakeGestureMoved","scaleStart","getDistanceBetweenTouches","$imageEl","$imageWrapEl","maxRatio","isScaling","scaleMove","touchesStart","slideWidth","slideHeight","scaledWidth","scaledHeight","minX","maxX","minY","maxY","touchesCurrent","prevPositionX","prevPositionY","prevTime","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","out","in","touchX","touchY","offsetX","offsetY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","zoomedSlideClass","activeListenerWithCapture","slideSelector","onGestureStart","onGestureChange","onGestureEnd","Zoom$1","onTransitionEnd","Lazy","loadInDuplicate","$images","elementClass","loadedClass","loadingClass","imageIndex","background","$pictureEl","sourceIndex","sourceEl","$source","preloaderClass","slideOriginalIndex","originalSlide","loadInSlide","duplicatedSlide","slideExist","initialImageLoaded","elIndex","loadPrevNext","loadPrevNextAmount","amount","maxIndex","minIndex","Lazy$1","loadOnTransitionStart","Controller","LinearSpline","binarySearch","guess","array","i1","i3","interpolate","c","controller","spline","controlled","control","controlledTranslate","setControlledTranslate","by","getInterpolateFunction","inverse","setControlledTransition","Controller$1","a11y","role","label","notify","lastSlideMessage","nextSlideMessage","firstSlideMessage","prevSlideMessage","message","notification","liveRegion","disableEl","makeElNotFocusable","enableEl","makeElFocusable","bulletEl","$bulletEl","addElRole","addElLabel","paginationBulletMessage","onEnterKey","A11y","notificationClass","updateNavigation","updatePagination","History","hashNavigation","getPathValues","scrollToSlide","setHistoryPopState","pathArray","part","slugify","currentState","state","slideHistory","History$1","setHistory","HashNavigation","newHash","activeSlideHash","slideHash","watchState","onHashCange","HashNavigation$1","setHash","Autoplay","$activeSlideEl","reverseDirection","stopOnLastSlide","waitForTransition","Autoplay$1","disableOnInteraction","pause","visibilityState","onVisibilityChange","Fade","tx","ty","slideOpacity","fadeEffect","crossFade","eventTriggered","triggerEvents","EffectFade","Cube","swiperWidth","swiperHeight","cubeEffect","$cubeShadowEl","wrapperRotate","shadow","slideAngle","round","tz","slideShadows","shadowBefore","shadowAfter","shadowOffset","shadowScale","shadowAngle","sin","cos","scale1","scale2","zFactor","EffectCube","Flip","flipEffect","limitRotation","rotate","rotateY","rotateX","zIndex","EffectFlip","Coverflow","coverflowEffect","center","depth","slideOffset","offsetMultiplier","modifier","translateZ","stretch","slideTransform","$shadowBeforeEl","$shadowAfterEl","prefixedPointerEvents","ws","perspectiveOrigin","EffectCoverflow","Thumbs","thumbs","thumbsParams","swiperCreated","thumbsContainerClass","onThumbClick","thumbsSwiper","slideThumbActiveClass","currentIndex","initial","autoScrollOffset","useOffset","newThumbsIndex","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","thumbsToActivate","thumbActiveClass","multipleActiveThumbs","Thumbs$1","directives","_vm","expression","modifiers","ref","listEntries","swiperNavigationRandomClass","slot","listEntry","tomasId","idx","_s","$t","_v","staticRenderFns","error","staticStyle","galleryPicture","galleryPictureDesc","topLabel","companyName","trustYouId","price","serviceProvider","EoClassificationFromTo","EoFeatureIcons","mixins","layoutDataMixin","logMixin","String","isLoading","loadData","$store","dispatch","loadTrustYouRating","address","companyName1","configIsLoaded","layout","getters","getLayout","getLayoutText","primeColor","topIcon","pictures","pics","pic","Gallery","Preview","getSizedPictureUrl","pictures_desc","detailViewURL","addApiUrlToUrl","detailUri","replaceAll","primaryColor","$vuetify","theme","currentTheme","primary","trustYouAPIKey","VueI18n","i18n","createLang","EoTeaserCard","locale","widgetWidth","settings","mdiArrowLeft","mdiChevronLeftCircle","mdiArrowRight","mdiChevronRightCircle","swiperKey","isMobile","slideStyle","randomString","random","swiperOption","watch","$refs","theWidget","lang","$i18n","substring","getSearchConfig","results","slideChangeTransitionStart","$swiper","_self","serviceClassificationList","stars","classification","blumen","showPopup","scopedSlots","showClassificationTooltip","mdiInformation","classificationsWithCount","EoClassification","entry","count","classificationsWithOutCount","EoClassificationsList","EoStars","_this$serviceClassifi","classification_count","serviceClassificationFilter","classificationSettings","classifications","filterKey","isNaN","myClassification","classificationList","serviceProviderClassification","classificationId"],"mappings":"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","file":"eobuchung-lib-routed-teaser.js?h=c256cacfcf72bf3cddd3","sourcesContent":["export * from \"-!../node_modules/vue-style-loader/index.js??ref--10-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-3!../node_modules/sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./Teaser.vue?vue&type=style&index=0&id=57983d55&prod&lang=sass\"","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-3!../node_modules/sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./Teaser.vue?vue&type=style&index=0&id=57983d55&prod&lang=sass\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"14f65eb0\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","export * from \"-!../../node_modules/vue-style-loader/index.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-3!../../node_modules/sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TeaserCard.vue?vue&type=style&index=0&id=0149a63a&prod&lang=sass\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".eobuchung-teaser .v-application{background:transparent!important}.eobuchung-teaser.eobuchung-widget{overflow:inherit}.eobuchung-teaser.eobuchung-widget [class*=col-]{float:none}.eobuchung-teaser.eobuchung-widget .v-label{width:unset}.eobuchung-teaser.eobuchung-widget .v-application--wrap{display:block;flex:inherit;min-height:auto;min-width:inherit;width:100%}.eobuchung-teaser a.v-btn{border:inherit}.eobuchung-teaser .swiper-slide{display:flex}.eobuchung-teaser .swiper-button-next,.eobuchung-teaser .swiper-button-prev{position:absolute;top:0;bottom:0;width:52px;z-index:333;justify-content:normal!important}.eobuchung-teaser .swiper-button-next:after,.eobuchung-teaser .swiper-button-prev:after{content:\\\"\\\"!important}.eobuchung-teaser .swiper-button-next svg,.eobuchung-teaser .swiper-button-prev svg{transform:scale(1.75)}.eobuchung-teaser .swiper-button-prev{left:-35px}.eobuchung-teaser .swiper-button-next{right:-63px}.eobuchung-teaser .is-mobile .swiper-button-prev{left:5px}.eobuchung-teaser .is-mobile .swiper-button-next{right:-22px}.eobuchung-teaser-container.is-mobile{padding:0!important;max-width:100%;overflow:hidden}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"@font-face{font-family:swiper-icons;src:url(\\\"data:application/font-woff;charset=utf-8;base64, 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\\\") format(\\\"woff\\\");font-weight:400;font-style:normal}.eobuchung-widget :root{--swiper-theme-color:#007aff}.eobuchung-widget .swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.eobuchung-widget .swiper-container-vertical>.swiper-wrapper{flex-direction:column}.eobuchung-widget .swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;box-sizing:content-box}.eobuchung-widget .swiper-container-android .swiper-slide,.eobuchung-widget .swiper-wrapper{transform:translateZ(0)}.eobuchung-widget .swiper-container-multirow>.swiper-wrapper{flex-wrap:wrap}.eobuchung-widget .swiper-container-multirow-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.eobuchung-widget .swiper-container-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.eobuchung-widget .swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform}.eobuchung-widget .swiper-slide-invisible-blank{visibility:hidden}.eobuchung-widget .swiper-container-autoheight,.eobuchung-widget .swiper-container-autoheight .swiper-slide{height:auto}.eobuchung-widget .swiper-container-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.eobuchung-widget .swiper-container-3d{perspective:1200px}.eobuchung-widget .swiper-container-3d .swiper-cube-shadow,.eobuchung-widget .swiper-container-3d .swiper-slide,.eobuchung-widget .swiper-container-3d .swiper-slide-shadow-bottom,.eobuchung-widget .swiper-container-3d .swiper-slide-shadow-left,.eobuchung-widget .swiper-container-3d .swiper-slide-shadow-right,.eobuchung-widget .swiper-container-3d .swiper-slide-shadow-top,.eobuchung-widget .swiper-container-3d .swiper-wrapper{transform-style:preserve-3d}.eobuchung-widget .swiper-container-3d .swiper-slide-shadow-bottom,.eobuchung-widget .swiper-container-3d .swiper-slide-shadow-left,.eobuchung-widget .swiper-container-3d .swiper-slide-shadow-right,.eobuchung-widget .swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.eobuchung-widget .swiper-container-3d .swiper-slide-shadow-left{background-image:linear-gradient(270deg,rgba(0,0,0,.5),transparent)}.eobuchung-widget .swiper-container-3d .swiper-slide-shadow-right{background-image:linear-gradient(90deg,rgba(0,0,0,.5),transparent)}.eobuchung-widget .swiper-container-3d .swiper-slide-shadow-top{background-image:linear-gradient(0deg,rgba(0,0,0,.5),transparent)}.eobuchung-widget .swiper-container-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(180deg,rgba(0,0,0,.5),transparent)}.eobuchung-widget .swiper-container-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.eobuchung-widget .swiper-container-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.eobuchung-widget .swiper-container-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.eobuchung-widget .swiper-container-horizontal.swiper-container-css-mode>.swiper-wrapper{scroll-snap-type:x mandatory}.eobuchung-widget .swiper-container-vertical.swiper-container-css-mode>.swiper-wrapper{scroll-snap-type:y mandatory}.eobuchung-widget :root{--swiper-navigation-size:44px}.eobuchung-widget .swiper-button-next,.eobuchung-widget .swiper-button-prev{position:absolute;top:50%;width:calc(var(--swiper-navigation-size)/44*27);height:var(--swiper-navigation-size);margin-top:calc(var(--swiper-navigation-size)*-1/2);z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.eobuchung-widget .swiper-button-next.swiper-button-disabled,.eobuchung-widget .swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.eobuchung-widget .swiper-button-next:after,.eobuchung-widget .swiper-button-prev:after{font-family:swiper-icons;font-size:var(--swiper-navigation-size);text-transform:none!important;letter-spacing:0;text-transform:none;font-variant:normal;line-height:1}.eobuchung-widget .swiper-button-prev,.eobuchung-widget .swiper-container-rtl .swiper-button-next{left:10px;right:auto}.eobuchung-widget .swiper-button-prev:after,.eobuchung-widget .swiper-container-rtl .swiper-button-next:after{content:\\\"prev\\\"}.eobuchung-widget .swiper-button-next,.eobuchung-widget .swiper-container-rtl .swiper-button-prev{right:10px;left:auto}.eobuchung-widget .swiper-button-next:after,.eobuchung-widget .swiper-container-rtl .swiper-button-prev:after{content:\\\"next\\\"}.eobuchung-widget .swiper-button-next.swiper-button-white,.eobuchung-widget .swiper-button-prev.swiper-button-white{--swiper-navigation-color:#fff}.eobuchung-widget .swiper-button-next.swiper-button-black,.eobuchung-widget .swiper-button-prev.swiper-button-black{--swiper-navigation-color:#000}.eobuchung-widget .swiper-button-lock{display:none}.eobuchung-widget .swiper-pagination{position:absolute;text-align:center;transition:opacity .3s;transform:translateZ(0);z-index:10}.eobuchung-widget .swiper-pagination.swiper-pagination-hidden{opacity:0}.eobuchung-widget .swiper-container-horizontal>.swiper-pagination-bullets,.eobuchung-widget .swiper-pagination-custom,.eobuchung-widget .swiper-pagination-fraction{bottom:10px;left:0;width:100%}.eobuchung-widget .swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.eobuchung-widget .swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.eobuchung-widget .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active,.eobuchung-widget .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.eobuchung-widget .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.eobuchung-widget .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.eobuchung-widget .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.eobuchung-widget .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.eobuchung-widget .swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}.eobuchung-widget button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.eobuchung-widget .swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.eobuchung-widget .swiper-pagination-bullet-active{opacity:1;background:var(--swiper-pagination-color,var(--swiper-theme-color))}.eobuchung-widget .swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;transform:translate3d(0,-50%,0)}.eobuchung-widget .swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:6px 0;display:block}.eobuchung-widget .swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.eobuchung-widget .swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:transform .2s,top .2s}.eobuchung-widget .swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 4px}.eobuchung-widget .swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap}.eobuchung-widget .swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:transform .2s,left .2s}.eobuchung-widget .swiper-container-horizontal.swiper-container-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:transform .2s,right .2s}.eobuchung-widget .swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.eobuchung-widget .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.eobuchung-widget .swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.eobuchung-widget .swiper-container-horizontal>.swiper-pagination-progressbar,.eobuchung-widget .swiper-container-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.eobuchung-widget .swiper-container-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.eobuchung-widget .swiper-container-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.eobuchung-widget .swiper-pagination-white{--swiper-pagination-color:#fff}.eobuchung-widget .swiper-pagination-black{--swiper-pagination-color:#000}.eobuchung-widget .swiper-pagination-lock{display:none}.eobuchung-widget .swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.eobuchung-widget .swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.eobuchung-widget .swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.eobuchung-widget .swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.eobuchung-widget .swiper-scrollbar-cursor-drag{cursor:move}.eobuchung-widget .swiper-scrollbar-lock{display:none}.eobuchung-widget .swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.eobuchung-widget .swiper-zoom-container>canvas,.eobuchung-widget .swiper-zoom-container>img,.eobuchung-widget .swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.eobuchung-widget .swiper-slide-zoomed{cursor:move}.eobuchung-widget .swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;animation:swiper-preloader-spin 1s linear infinite;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}.eobuchung-widget .swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.eobuchung-widget .swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{to{transform:rotate(1turn)}}.eobuchung-widget .swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.eobuchung-widget .swiper-container-fade.swiper-container-free-mode .swiper-slide{transition-timing-function:ease-out}.eobuchung-widget .swiper-container-fade .swiper-slide{pointer-events:none;transition-property:opacity}.eobuchung-widget .swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.eobuchung-widget .swiper-container-fade .swiper-slide-active,.eobuchung-widget .swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.eobuchung-widget .swiper-container-cube{overflow:visible}.eobuchung-widget .swiper-container-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.eobuchung-widget .swiper-container-cube .swiper-slide .swiper-slide{pointer-events:none}.eobuchung-widget .swiper-container-cube.swiper-container-rtl .swiper-slide{transform-origin:100% 0}.eobuchung-widget .swiper-container-cube .swiper-slide-active,.eobuchung-widget .swiper-container-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.eobuchung-widget .swiper-container-cube .swiper-slide-active,.eobuchung-widget .swiper-container-cube .swiper-slide-next,.eobuchung-widget .swiper-container-cube .swiper-slide-next+.swiper-slide,.eobuchung-widget .swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.eobuchung-widget .swiper-container-cube .swiper-slide-shadow-bottom,.eobuchung-widget .swiper-container-cube .swiper-slide-shadow-left,.eobuchung-widget .swiper-container-cube .swiper-slide-shadow-right,.eobuchung-widget .swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.eobuchung-widget .swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.eobuchung-widget .swiper-container-flip{overflow:visible}.eobuchung-widget .swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.eobuchung-widget .swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.eobuchung-widget .swiper-container-flip .swiper-slide-active,.eobuchung-widget .swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.eobuchung-widget .swiper-container-flip .swiper-slide-shadow-bottom,.eobuchung-widget .swiper-container-flip .swiper-slide-shadow-left,.eobuchung-widget .swiper-container-flip .swiper-slide-shadow-right,.eobuchung-widget .swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","\n/*!\n * vue-awesome-swiper v4.1.1\n * Copyright (c) Surmon. All rights reserved.\n * Released under the MIT License.\n * Surmon <https://github.com/surmon-china>\n */\n\n(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports,require('swiper'),require('vue')):typeof define==='function'&&define.amd?define(['exports','swiper','vue'],f):(g=g||self,f(g.VueAwesomeSwiper={},g.Swiper,g.Vue));}(this,(function(exports, SwiperClass, Vue){'use strict';SwiperClass=SwiperClass&&Object.prototype.hasOwnProperty.call(SwiperClass,'default')?SwiperClass['default']:SwiperClass;Vue=Vue&&Object.prototype.hasOwnProperty.call(Vue,'default')?Vue['default']:Vue;/**\r\n * @file vue-awesome-swiper\r\n * @module constants\r\n * @author Surmon <https://github.com/surmon-china>\r\n */\r\nvar CoreNames;\r\n(function (CoreNames) {\r\n    CoreNames[\"SwiperComponent\"] = \"Swiper\";\r\n    CoreNames[\"SwiperSlideComponent\"] = \"SwiperSlide\";\r\n    CoreNames[\"SwiperDirective\"] = \"swiper\";\r\n    CoreNames[\"SwiperInstance\"] = \"$swiper\";\r\n})(CoreNames || (CoreNames = {}));\r\nvar DEFAULT_CLASSES = Object.freeze({\r\n    containerClass: 'swiper-container',\r\n    wrapperClass: 'swiper-wrapper',\r\n    slideClass: 'swiper-slide'\r\n});\r\nvar ComponentEvents;\r\n(function (ComponentEvents) {\r\n    ComponentEvents[\"Ready\"] = \"ready\";\r\n    ComponentEvents[\"ClickSlide\"] = \"clickSlide\";\r\n})(ComponentEvents || (ComponentEvents = {}));\r\nvar ComponentPropNames;\r\n(function (ComponentPropNames) {\r\n    ComponentPropNames[\"AutoUpdate\"] = \"autoUpdate\";\r\n    ComponentPropNames[\"AutoDestroy\"] = \"autoDestroy\";\r\n    ComponentPropNames[\"DeleteInstanceOnDestroy\"] = \"deleteInstanceOnDestroy\";\r\n    ComponentPropNames[\"CleanupStylesOnDestroy\"] = \"cleanupStylesOnDestroy\";\r\n})(ComponentPropNames || (ComponentPropNames = {}));\r\n// https://swiperjs.com/api/#events\r\nvar SWIPER_EVENTS = [\r\n    'init',\r\n    'beforeDestroy',\r\n    'slideChange',\r\n    'slideChangeTransitionStart',\r\n    'slideChangeTransitionEnd',\r\n    'slideNextTransitionStart',\r\n    'slideNextTransitionEnd',\r\n    'slidePrevTransitionStart',\r\n    'slidePrevTransitionEnd',\r\n    'transitionStart',\r\n    'transitionEnd',\r\n    'touchStart',\r\n    'touchMove',\r\n    'touchMoveOpposite',\r\n    'sliderMove',\r\n    'touchEnd',\r\n    'click',\r\n    'tap',\r\n    'doubleTap',\r\n    'imagesReady',\r\n    'progress',\r\n    'reachBeginning',\r\n    'reachEnd',\r\n    'fromEdge',\r\n    'setTranslate',\r\n    'setTransition',\r\n    'resize',\r\n    'observerUpdate',\r\n    'beforeLoopFix',\r\n    'loopFix'\r\n];/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nfunction __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}/**\r\n * @file vue-awesome-swiper\r\n * @module utils\r\n * @author Surmon <https://github.com/surmon-china>\r\n */\r\nvar kebabcase = function (string) {\r\n    return string\r\n        .replace(/([a-z])([A-Z])/g, '$1-$2')\r\n        .replace(/\\s+/g, '-')\r\n        .toLowerCase();\r\n};/**\r\n * @file vue-awesome-swiper\r\n * @module event\r\n * @author Surmon <https://github.com/surmon-china>\r\n */\r\nvar handleClickSlideEvent = function (swiper, event, emit) {\r\n    var _a, _b, _c;\r\n    if (swiper && !(swiper.destroyed)) {\r\n        var eventPath = ((_a = event.composedPath) === null || _a === void 0 ? void 0 : _a.call(event)) || event.path;\r\n        if ((event === null || event === void 0 ? void 0 : event.target) && eventPath) {\r\n            var slides_1 = Array.from(swiper.slides);\r\n            var paths = Array.from(eventPath);\r\n            // Click slide || slide[children]\r\n            if (slides_1.includes(event.target) || paths.some(function (item) { return slides_1.includes(item); })) {\r\n                var clickedIndex = swiper.clickedIndex;\r\n                var reallyIndex = Number((_c = (_b = swiper.clickedSlide) === null || _b === void 0 ? void 0 : _b.dataset) === null || _c === void 0 ? void 0 : _c.swiperSlideIndex);\r\n                var reallyIndexValue = Number.isInteger(reallyIndex) ? reallyIndex : null;\r\n                emit(ComponentEvents.ClickSlide, clickedIndex, reallyIndexValue);\r\n                emit(kebabcase(ComponentEvents.ClickSlide), clickedIndex, reallyIndexValue);\r\n            }\r\n        }\r\n    }\r\n};\r\nvar bindSwiperEvents = function (swiper, emit) {\r\n    SWIPER_EVENTS.forEach(function (eventName) {\r\n        swiper.on(eventName, function () {\n            var arguments$1 = arguments;\n\r\n            var args = [];\r\n            for (var _i = 0; _i < arguments.length; _i++) {\r\n                args[_i] = arguments$1[_i];\r\n            }\r\n            emit.apply(void 0, __spreadArrays([eventName], args));\r\n            var kebabcaseName = kebabcase(eventName);\r\n            if (kebabcaseName !== eventName) {\r\n                emit.apply(void 0, __spreadArrays([kebabcaseName], args));\r\n            }\r\n        });\r\n    });\r\n};/**\r\n * @file vue-awesome-swiper\r\n * @module directive\r\n * @author Surmon <https://github.com/surmon-china>\r\n */\r\nvar INSTANCE_NAME_KEY = 'instanceName';\r\nfunction getDirective(SwiperClass, globalOptions) {\r\n    var getStandardisedOptionByAttrs = function (vnode, key) {\r\n        var _a, _b, _c, _d;\r\n        var value = (_b = (_a = vnode.data) === null || _a === void 0 ? void 0 : _a.attrs) === null || _b === void 0 ? void 0 : _b[key];\r\n        return value !== undefined\r\n            ? value\r\n            : (_d = (_c = vnode.data) === null || _c === void 0 ? void 0 : _c.attrs) === null || _d === void 0 ? void 0 : _d[kebabcase(key)];\r\n    };\r\n    // Get swiper instace name in directive\r\n    var getSwiperInstanceName = function (element, binding, vnode) {\r\n        return (binding.arg ||\r\n            getStandardisedOptionByAttrs(vnode, INSTANCE_NAME_KEY) ||\r\n            element.id ||\r\n            CoreNames.SwiperInstance);\r\n    };\r\n    var getSwiperInstance = function (element, binding, vnode) {\r\n        var instanceName = getSwiperInstanceName(element, binding, vnode);\r\n        return vnode.context[instanceName] || null;\r\n    };\r\n    var getSwipeOptions = function (binding) {\r\n        return binding.value || globalOptions;\r\n    };\r\n    var getBooleanValueByInput = function (input) {\r\n        return [true, undefined, null, ''].includes(input);\r\n    };\r\n    // Emit event in Vue directive\r\n    var getEventEmiter = function (vnode) {\r\n        var _a, _b;\r\n        var handlers = ((_a = vnode.data) === null || _a === void 0 ? void 0 : _a.on) || ((_b = vnode.componentOptions) === null || _b === void 0 ? void 0 : _b.listeners);\r\n        return function (name) {\n            var arguments$1 = arguments;\n\r\n            var args = [];\r\n            for (var _i = 1; _i < arguments.length; _i++) {\r\n                args[_i - 1] = arguments$1[_i];\r\n            }\r\n            var _a;\r\n            var handle = (_a = handlers) === null || _a === void 0 ? void 0 : _a[name];\r\n            if (handle) {\r\n                handle.fns.apply(handle, args);\r\n            }\r\n        };\r\n    };\r\n    return {\r\n        // Init\r\n        bind: function (element, binding, vnode) {\r\n            // auto class name\r\n            if (element.className.indexOf(DEFAULT_CLASSES.containerClass) === -1) {\r\n                element.className += ((element.className ? ' ' : '') + DEFAULT_CLASSES.containerClass);\r\n            }\r\n            // bind click event\r\n            element.addEventListener('click', function (event) {\r\n                var emitEvent = getEventEmiter(vnode);\r\n                var swiper = getSwiperInstance(element, binding, vnode);\r\n                handleClickSlideEvent(swiper, event, emitEvent);\r\n            });\r\n        },\r\n        // DOM inserted\r\n        inserted: function (element, binding, vnode) {\r\n            var context = vnode.context;\r\n            var swiperOptions = getSwipeOptions(binding);\r\n            var instanceName = getSwiperInstanceName(element, binding, vnode);\r\n            var emitEvent = getEventEmiter(vnode);\r\n            var vueContext = context;\r\n            var swiper = vueContext === null || vueContext === void 0 ? void 0 : vueContext[instanceName];\r\n            // Swiper will destroy but not delete instance, when used <keep-alive>\r\n            if (!swiper || swiper.destroyed) {\r\n                swiper = new SwiperClass(element, swiperOptions);\r\n                vueContext[instanceName] = swiper;\r\n                bindSwiperEvents(swiper, emitEvent);\r\n                emitEvent(ComponentEvents.Ready, swiper);\r\n                // MARK: Reinstance when the nexttick with <keep-alive>\r\n                // Vue.nextTick(instancing) | setTimeout(instancing)\r\n            }\r\n        },\r\n        // On options changed or DOM updated\r\n        componentUpdated: function (element, binding, vnode) {\r\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\r\n            var autoUpdate = getStandardisedOptionByAttrs(vnode, ComponentPropNames.AutoUpdate);\r\n            if (getBooleanValueByInput(autoUpdate)) {\r\n                var swiper = getSwiperInstance(element, binding, vnode);\r\n                if (swiper) {\r\n                    var swiperOptions = getSwipeOptions(binding);\r\n                    var isLoop = swiperOptions.loop;\r\n                    if (isLoop) {\r\n                        (_b = (_a = swiper) === null || _a === void 0 ? void 0 : _a.loopDestroy) === null || _b === void 0 ? void 0 : _b.call(_a);\r\n                    }\r\n                    (_c = swiper === null || swiper === void 0 ? void 0 : swiper.update) === null || _c === void 0 ? void 0 : _c.call(swiper);\r\n                    (_e = (_d = swiper.navigation) === null || _d === void 0 ? void 0 : _d.update) === null || _e === void 0 ? void 0 : _e.call(_d);\r\n                    (_g = (_f = swiper.pagination) === null || _f === void 0 ? void 0 : _f.render) === null || _g === void 0 ? void 0 : _g.call(_f);\r\n                    (_j = (_h = swiper.pagination) === null || _h === void 0 ? void 0 : _h.update) === null || _j === void 0 ? void 0 : _j.call(_h);\r\n                    if (isLoop) {\r\n                        (_l = (_k = swiper) === null || _k === void 0 ? void 0 : _k.loopCreate) === null || _l === void 0 ? void 0 : _l.call(_k);\r\n                        (_m = swiper === null || swiper === void 0 ? void 0 : swiper.update) === null || _m === void 0 ? void 0 : _m.call(swiper);\r\n                    }\r\n                }\r\n            }\r\n        },\r\n        // Destroy this directive\r\n        unbind: function (element, binding, vnode) {\r\n            var _a;\r\n            var autoDestroy = getStandardisedOptionByAttrs(vnode, ComponentPropNames.AutoDestroy);\r\n            if (getBooleanValueByInput(autoDestroy)) {\r\n                var swiper = getSwiperInstance(element, binding, vnode);\r\n                if (swiper && swiper.initialized) {\r\n                    (_a = swiper === null || swiper === void 0 ? void 0 : swiper.destroy) === null || _a === void 0 ? void 0 : _a.call(swiper, getBooleanValueByInput(getStandardisedOptionByAttrs(vnode, ComponentPropNames.DeleteInstanceOnDestroy)), getBooleanValueByInput(getStandardisedOptionByAttrs(vnode, ComponentPropNames.CleanupStylesOnDestroy)));\r\n                }\r\n            }\r\n        }\r\n    };\r\n}/**\r\n * @file vue-awesome-swiper\r\n * @module SwiperComponent\r\n * @author Surmon <https://github.com/surmon-china>\r\n */\r\nvar SlotNames;\r\n(function (SlotNames) {\r\n    SlotNames[\"ParallaxBg\"] = \"parallax-bg\";\r\n    SlotNames[\"Pagination\"] = \"pagination\";\r\n    SlotNames[\"Scrollbar\"] = \"scrollbar\";\r\n    SlotNames[\"PrevButton\"] = \"button-prev\";\r\n    SlotNames[\"NextButton\"] = \"button-next\";\r\n})(SlotNames || (SlotNames = {}));\r\nfunction getSwiperComponent(SwiperClass) {\r\n    var _a;\r\n    return Vue.extend({\r\n        name: CoreNames.SwiperComponent,\r\n        props: (_a = {\r\n                defaultOptions: {\r\n                    type: Object,\r\n                    required: false,\r\n                    default: function () { return ({}); }\r\n                },\r\n                // eslint-disable-next-line vue/require-default-prop\r\n                options: {\r\n                    type: Object,\r\n                    required: false\r\n                }\r\n            },\r\n            _a[ComponentPropNames.AutoUpdate] = {\r\n                type: Boolean,\r\n                default: true\r\n            },\r\n            // https://github.com/surmon-china/vue-awesome-swiper/pull/550/files\r\n            _a[ComponentPropNames.AutoDestroy] = {\r\n                type: Boolean,\r\n                default: true\r\n            },\r\n            // https://github.com/surmon-china/vue-awesome-swiper/pull/388\r\n            _a[ComponentPropNames.DeleteInstanceOnDestroy] = {\r\n                type: Boolean,\r\n                required: false,\r\n                default: true\r\n            },\r\n            _a[ComponentPropNames.CleanupStylesOnDestroy] = {\r\n                type: Boolean,\r\n                required: false,\r\n                default: true\r\n            },\r\n            _a),\r\n        data: function () {\r\n            var _a;\r\n            return _a = {},\r\n                _a[CoreNames.SwiperInstance] = null,\r\n                _a;\r\n        },\r\n        computed: {\r\n            swiperInstance: {\r\n                cache: false,\r\n                set: function (swiper) {\r\n                    this[CoreNames.SwiperInstance] = swiper;\r\n                },\r\n                get: function () {\r\n                    return this[CoreNames.SwiperInstance];\r\n                }\r\n            },\r\n            swiperOptions: function () {\r\n                return this.options || this.defaultOptions;\r\n            },\r\n            wrapperClass: function () {\r\n                return this.swiperOptions.wrapperClass || DEFAULT_CLASSES.wrapperClass;\r\n            }\r\n        },\r\n        methods: {\r\n            // Feature: click event\r\n            handleSwiperClick: function (event) {\r\n                handleClickSlideEvent(this.swiperInstance, event, this.$emit.bind(this));\r\n            },\r\n            autoReLoopSwiper: function () {\r\n                var _a, _b;\r\n                if (this.swiperInstance && this.swiperOptions.loop) {\r\n                    // https://github.com/surmon-china/vue-awesome-swiper/issues/593\r\n                    // https://github.com/surmon-china/vue-awesome-swiper/issues/544\r\n                    // https://github.com/surmon-china/vue-awesome-swiper/pull/545/files\r\n                    var swiper = this.swiperInstance;\r\n                    (_a = swiper === null || swiper === void 0 ? void 0 : swiper.loopDestroy) === null || _a === void 0 ? void 0 : _a.call(swiper);\r\n                    (_b = swiper === null || swiper === void 0 ? void 0 : swiper.loopCreate) === null || _b === void 0 ? void 0 : _b.call(swiper);\r\n                }\r\n            },\r\n            updateSwiper: function () {\r\n                var _a, _b, _c, _d, _e, _f, _g, _h;\r\n                if (this[ComponentPropNames.AutoUpdate] && this.swiperInstance) {\r\n                    this.autoReLoopSwiper();\r\n                    (_b = (_a = this.swiperInstance) === null || _a === void 0 ? void 0 : _a.update) === null || _b === void 0 ? void 0 : _b.call(_a);\r\n                    (_d = (_c = this.swiperInstance.navigation) === null || _c === void 0 ? void 0 : _c.update) === null || _d === void 0 ? void 0 : _d.call(_c);\r\n                    (_f = (_e = this.swiperInstance.pagination) === null || _e === void 0 ? void 0 : _e.render) === null || _f === void 0 ? void 0 : _f.call(_e);\r\n                    (_h = (_g = this.swiperInstance.pagination) === null || _g === void 0 ? void 0 : _g.update) === null || _h === void 0 ? void 0 : _h.call(_g);\r\n                }\r\n            },\r\n            destroySwiper: function () {\r\n                var _a, _b;\r\n                if (this[ComponentPropNames.AutoDestroy] && this.swiperInstance) {\r\n                    // https://github.com/surmon-china/vue-awesome-swiper/pull/341\r\n                    // https://github.com/surmon-china/vue-awesome-swiper/issues/340\r\n                    if (this.swiperInstance.initialized) {\r\n                        (_b = (_a = this.swiperInstance) === null || _a === void 0 ? void 0 : _a.destroy) === null || _b === void 0 ? void 0 : _b.call(_a, this[ComponentPropNames.DeleteInstanceOnDestroy], this[ComponentPropNames.CleanupStylesOnDestroy]);\r\n                    }\r\n                }\r\n            },\r\n            initSwiper: function () {\r\n                this.swiperInstance = new SwiperClass(this.$el, this.swiperOptions);\r\n                bindSwiperEvents(this.swiperInstance, this.$emit.bind(this));\r\n                this.$emit(ComponentEvents.Ready, this.swiperInstance);\r\n            }\r\n        },\r\n        mounted: function () {\r\n            if (!this.swiperInstance) {\r\n                this.initSwiper();\r\n            }\r\n        },\r\n        // Update swiper when the parent component activated with `keep-alive`.\r\n        activated: function () {\r\n            this.updateSwiper();\r\n        },\r\n        updated: function () {\r\n            this.updateSwiper();\r\n        },\r\n        beforeDestroy: function () {\r\n            // https://github.com/surmon-china/vue-awesome-swiper/commit/2924a9d4d3d1cf51c0d46076410b1f804b2b8a43#diff-7f4e0261ac562c0f354cb91a1ca8864f\r\n            this.$nextTick(this.destroySwiper);\r\n        },\r\n        render: function (createElement) {\r\n            return createElement('div', {\r\n                staticClass: DEFAULT_CLASSES.containerClass,\r\n                on: {\r\n                    click: this.handleSwiperClick\r\n                }\r\n            }, [\r\n                this.$slots[SlotNames.ParallaxBg],\r\n                createElement('div', {\r\n                    class: this.wrapperClass\r\n                }, this.$slots.default),\r\n                this.$slots[SlotNames.Pagination],\r\n                this.$slots[SlotNames.PrevButton],\r\n                this.$slots[SlotNames.NextButton],\r\n                this.$slots[SlotNames.Scrollbar]\r\n            ]);\r\n        }\r\n    });\r\n}/**\r\n * @file vue-awesome-swiper\r\n * @module SwiperSlideComponent\r\n * @author Surmon <https://github.com/surmon-china>\r\n */\r\nvar SwiperSlideComponent = Vue.extend({\r\n    name: CoreNames.SwiperSlideComponent,\r\n    computed: {\r\n        slideClass: function () {\r\n            var _a, _b;\r\n            return ((_b = (_a = this.$parent) === null || _a === void 0 ? void 0 : _a.swiperOptions) === null || _b === void 0 ? void 0 : _b.slideClass) || DEFAULT_CLASSES.slideClass;\r\n        }\r\n    },\r\n    methods: {\r\n        update: function () {\r\n            var _a;\r\n            var parent = this.$parent;\r\n            // https://github.com/surmon-china/vue-awesome-swiper/issues/632\r\n            if (parent[ComponentPropNames.AutoUpdate]) {\r\n                (_a = parent === null || parent === void 0 ? void 0 : parent.swiperInstance) === null || _a === void 0 ? void 0 : _a.update();\r\n            }\r\n        }\r\n    },\r\n    mounted: function () {\r\n        this.update();\r\n    },\r\n    updated: function () {\r\n        this.update();\r\n    },\r\n    render: function (createElement) {\r\n        return createElement('div', {\r\n            class: this.slideClass\r\n        }, this.$slots.default);\r\n    }\r\n});/**\r\n * @file vue-awesome-swiper\r\n * @module exporter\r\n * @author Surmon <https://github.com/surmon-china>\r\n */\r\nvar getInstaller = function (SwiperClass) {\r\n    var install = function (Vue, globalOptions) {\r\n        if (install.installed)\r\n            { return; }\r\n        var SwiperComponent = getSwiperComponent(SwiperClass);\r\n        if (globalOptions) {\r\n            SwiperComponent.options.props.defaultOptions.default = function () { return globalOptions; };\r\n        }\r\n        Vue.component(CoreNames.SwiperComponent, SwiperComponent);\r\n        Vue.component(CoreNames.SwiperSlideComponent, SwiperSlideComponent);\r\n        Vue.directive(CoreNames.SwiperDirective, getDirective(SwiperClass, globalOptions));\r\n        install.installed = true;\r\n    };\r\n    return install;\r\n};\r\nfunction exporter(SwiperClass) {\r\n    var _a;\r\n    return _a = {\r\n            version: '4.1.1',\r\n            install: getInstaller(SwiperClass),\r\n            directive: getDirective(SwiperClass)\r\n        },\r\n        _a[CoreNames.SwiperComponent] = getSwiperComponent(SwiperClass),\r\n        _a[CoreNames.SwiperSlideComponent] = SwiperSlideComponent,\r\n        _a;\r\n}/**\r\n * @file vue-awesome-swiper\r\n * @module default-export\r\n * @author Surmon <https://github.com/surmon-china>\r\n */\r\nvar VueAwesomeSwiper = exporter(SwiperClass);\r\nvar version = VueAwesomeSwiper.version;\r\nvar install = VueAwesomeSwiper.install;\r\nvar directive = VueAwesomeSwiper.directive;\r\nvar Swiper = VueAwesomeSwiper.Swiper;\r\nvar SwiperSlide = VueAwesomeSwiper.SwiperSlide;exports.Swiper=Swiper;exports.SwiperSlide=SwiperSlide;exports.default=VueAwesomeSwiper;exports.directive=directive;exports.install=install;exports.version=version;Object.defineProperty(exports,'__esModule',{value:true});})));","import 'unfetch/polyfill';\n\n/**\n * dispatch search from api\n * @param apiUrl\n * @param apiKey\n * @param config\n * @returns {Promise<unknown>}\n */\nexport default function apiSearch(apiUrl, apiKey, config = {}) {\n    return new Promise(function (resolve, reject) {\n        const params = Object.keys(config).map(function(k) {\n            return encodeURIComponent(k) + \"=\" + encodeURIComponent(config[k]);\n        }).join('&');\n\n        fetch(apiUrl + 'etb_search.json?' + params + '&apiKey=' + apiKey)\n            .then(r => r.json())\n            .then(data => {\n                resolve(data);\n            }).catch((reason) => {\n            reject(reason);\n        });\n    });\n}","export * from \"-!../../node_modules/vue-style-loader/index.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-3!../../node_modules/sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClassificationsList.vue?vue&type=style&index=0&id=0c6932f0&prod&lang=sass\"","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../postcss-loader/src/index.js??ref--7-oneOf-3-3!./swiper.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"146e0d01\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","/**\n * SSR Window 2.0.0\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2020, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: May 12, 2020\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n    return (obj !== null &&\n        typeof obj === 'object' &&\n        'constructor' in obj &&\n        obj.constructor === Object);\n}\nfunction extend(target, src) {\n    if (target === void 0) { target = {}; }\n    if (src === void 0) { src = {}; }\n    Object.keys(src).forEach(function (key) {\n        if (typeof target[key] === 'undefined')\n            target[key] = src[key];\n        else if (isObject(src[key]) &&\n            isObject(target[key]) &&\n            Object.keys(src[key]).length > 0) {\n            extend(target[key], src[key]);\n        }\n    });\n}\n\nvar doc = typeof document !== 'undefined' ? document : {};\nvar ssrDocument = {\n    body: {},\n    addEventListener: function () { },\n    removeEventListener: function () { },\n    activeElement: {\n        blur: function () { },\n        nodeName: '',\n    },\n    querySelector: function () {\n        return null;\n    },\n    querySelectorAll: function () {\n        return [];\n    },\n    getElementById: function () {\n        return null;\n    },\n    createEvent: function () {\n        return {\n            initEvent: function () { },\n        };\n    },\n    createElement: function () {\n        return {\n            children: [],\n            childNodes: [],\n            style: {},\n            setAttribute: function () { },\n            getElementsByTagName: function () {\n                return [];\n            },\n        };\n    },\n    createElementNS: function () {\n        return {};\n    },\n    importNode: function () {\n        return null;\n    },\n    location: {\n        hash: '',\n        host: '',\n        hostname: '',\n        href: '',\n        origin: '',\n        pathname: '',\n        protocol: '',\n        search: '',\n    },\n};\nextend(doc, ssrDocument);\n\nvar win = typeof window !== 'undefined' ? window : {};\nvar 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: function () { },\n        pushState: function () { },\n        go: function () { },\n        back: function () { },\n    },\n    CustomEvent: function CustomEvent() {\n        return this;\n    },\n    addEventListener: function () { },\n    removeEventListener: function () { },\n    getComputedStyle: function () {\n        return {\n            getPropertyValue: function () {\n                return '';\n            },\n        };\n    },\n    Image: function () { },\n    Date: function () { },\n    screen: {},\n    setTimeout: function () { },\n    clearTimeout: function () { },\n    matchMedia: function () {\n        return {};\n    },\n};\nextend(win, ssrWindow);\n\nexport { doc as document, extend, win as window };\n","/**\n * Dom7 2.1.5\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * http://framework7.io/docs/dom.html\n *\n * Copyright 2020, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n *\n * Licensed under MIT\n *\n * Released on: May 15, 2020\n */\nimport { document, window } from 'ssr-window';\n\nclass Dom7 {\n  constructor(arr) {\n    const self = this;\n    // Create array-like object\n    for (let i = 0; i < arr.length; i += 1) {\n      self[i] = arr[i];\n    }\n    self.length = arr.length;\n    // Return collection with methods\n    return this;\n  }\n}\n\nfunction $(selector, context) {\n  const arr = [];\n  let i = 0;\n  if (selector && !context) {\n    if (selector instanceof Dom7) {\n      return selector;\n    }\n  }\n  if (selector) {\n      // String\n    if (typeof selector === 'string') {\n      let els;\n      let tempParent;\n      const html = selector.trim();\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        tempParent = document.createElement(toCreate);\n        tempParent.innerHTML = html;\n        for (i = 0; i < tempParent.childNodes.length; i += 1) {\n          arr.push(tempParent.childNodes[i]);\n        }\n      } else {\n        if (!context && selector[0] === '#' && !selector.match(/[ .<>:~]/)) {\n          // Pure ID selector\n          els = [document.getElementById(selector.trim().split('#')[1])];\n        } else {\n          // Other selectors\n          els = (context || document).querySelectorAll(selector.trim());\n        }\n        for (i = 0; i < els.length; i += 1) {\n          if (els[i]) arr.push(els[i]);\n        }\n      }\n    } else if (selector.nodeType || selector === window || selector === document) {\n      // Node/element\n      arr.push(selector);\n    } else if (selector.length > 0 && selector[0].nodeType) {\n      // Array of elements or instance of Dom\n      for (i = 0; i < selector.length; i += 1) {\n        arr.push(selector[i]);\n      }\n    }\n  }\n  return new Dom7(arr);\n}\n\n$.fn = Dom7.prototype;\n$.Class = Dom7;\n$.Dom7 = Dom7;\n\nfunction unique(arr) {\n  const uniqueArray = [];\n  for (let i = 0; i < arr.length; i += 1) {\n    if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n  }\n  return uniqueArray;\n}\nfunction toCamelCase(string) {\n  return string.toLowerCase().replace(/-(.)/g, (match, group1) => group1.toUpperCase());\n}\n\nfunction requestAnimationFrame(callback) {\n  if (window.requestAnimationFrame) return window.requestAnimationFrame(callback);\n  else if (window.webkitRequestAnimationFrame) return window.webkitRequestAnimationFrame(callback);\n  return window.setTimeout(callback, 1000 / 60);\n}\nfunction cancelAnimationFrame(id) {\n  if (window.cancelAnimationFrame) return window.cancelAnimationFrame(id);\n  else if (window.webkitCancelAnimationFrame) return window.webkitCancelAnimationFrame(id);\n  return window.clearTimeout(id);\n}\n\n// Classes and attributes\nfunction addClass(className) {\n  if (typeof className === 'undefined') {\n    return this;\n  }\n  const classes = className.split(' ');\n  for (let i = 0; i < classes.length; i += 1) {\n    for (let j = 0; j < this.length; j += 1) {\n      if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.add(classes[i]);\n    }\n  }\n  return this;\n}\nfunction removeClass(className) {\n  const classes = className.split(' ');\n  for (let i = 0; i < classes.length; i += 1) {\n    for (let j = 0; j < this.length; j += 1) {\n      if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.remove(classes[i]);\n    }\n  }\n  return this;\n}\nfunction hasClass(className) {\n  if (!this[0]) return false;\n  return this[0].classList.contains(className);\n}\nfunction toggleClass(className) {\n  const classes = className.split(' ');\n  for (let i = 0; i < classes.length; i += 1) {\n    for (let j = 0; j < this.length; j += 1) {\n      if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.toggle(classes[i]);\n    }\n  }\n  return this;\n}\nfunction attr(attrs, value) {\n  if (arguments.length === 1 && typeof attrs === 'string') {\n    // Get attr\n    if (this[0]) return this[0].getAttribute(attrs);\n    return undefined;\n  }\n\n  // Set attrs\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      // eslint-disable-next-line\n      for (const attrName in attrs) {\n        this[i][attrName] = attrs[attrName];\n        this[i].setAttribute(attrName, attrs[attrName]);\n      }\n    }\n  }\n  return this;\n}\n// eslint-disable-next-line\nfunction removeAttr(attr) {\n  for (let i = 0; i < this.length; i += 1) {\n    this[i].removeAttribute(attr);\n  }\n  return this;\n}\n// eslint-disable-next-line\nfunction prop(props, value) {\n  if (arguments.length === 1 && typeof props === 'string') {\n    // Get prop\n    if (this[0]) return this[0][props];\n  } else {\n    // Set props\n    for (let i = 0; i < this.length; i += 1) {\n      if (arguments.length === 2) {\n        // String\n        this[i][props] = value;\n      } else {\n        // Object\n        // eslint-disable-next-line\n        for (const propName in props) {\n          this[i][propName] = props[propName];\n        }\n      }\n    }\n    return this;\n  }\n}\nfunction data(key, value) {\n  let el;\n  if (typeof value === 'undefined') {\n    el = this[0];\n    // Get value\n    if (el) {\n      if (el.dom7ElementDataStorage && (key in el.dom7ElementDataStorage)) {\n        return el.dom7ElementDataStorage[key];\n      }\n\n      const dataKey = el.getAttribute(`data-${key}`);\n      if (dataKey) {\n        return dataKey;\n      }\n      return undefined;\n    }\n    return undefined;\n  }\n\n  // Set value\n  for (let i = 0; i < this.length; i += 1) {\n    el = this[i];\n    if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n    el.dom7ElementDataStorage[key] = value;\n  }\n  return this;\n}\nfunction removeData(key) {\n  for (let i = 0; i < this.length; i += 1) {\n    const el = this[i];\n    if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n      el.dom7ElementDataStorage[key] = null;\n      delete el.dom7ElementDataStorage[key];\n    }\n  }\n}\nfunction dataset() {\n  const el = this[0];\n  if (!el) return undefined;\n  const dataset = {}; // eslint-disable-line\n  if (el.dataset) {\n    // eslint-disable-next-line\n    for (const dataKey in el.dataset) {\n      dataset[dataKey] = el.dataset[dataKey];\n    }\n  } else {\n    for (let i = 0; i < el.attributes.length; i += 1) {\n      // eslint-disable-next-line\n      const attr = el.attributes[i];\n      if (attr.name.indexOf('data-') >= 0) {\n        dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n      }\n    }\n  }\n  // eslint-disable-next-line\n  for (const key in dataset) {\n    if (dataset[key] === 'false') dataset[key] = false;\n    else if (dataset[key] === 'true') dataset[key] = true;\n    else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n  }\n  return dataset;\n}\nfunction val(value) {\n  const dom = this;\n  if (typeof value === 'undefined') {\n    if (dom[0]) {\n      if (dom[0].multiple && dom[0].nodeName.toLowerCase() === 'select') {\n        const values = [];\n        for (let i = 0; i < dom[0].selectedOptions.length; i += 1) {\n          values.push(dom[0].selectedOptions[i].value);\n        }\n        return values;\n      }\n      return dom[0].value;\n    }\n    return undefined;\n  }\n\n  for (let i = 0; i < dom.length; i += 1) {\n    const el = dom[i];\n    if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n      for (let j = 0; j < el.options.length; j += 1) {\n        el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n      }\n    } else {\n      el.value = value;\n    }\n  }\n  return dom;\n}\n// Transforms\n// eslint-disable-next-line\nfunction transform(transform) {\n  for (let i = 0; i < this.length; i += 1) {\n    const elStyle = this[i].style;\n    elStyle.webkitTransform = transform;\n    elStyle.transform = transform;\n  }\n  return this;\n}\nfunction transition(duration) {\n  if (typeof duration !== 'string') {\n    duration = `${duration}ms`; // eslint-disable-line\n  }\n  for (let i = 0; i < this.length; i += 1) {\n    const elStyle = this[i].style;\n    elStyle.webkitTransitionDuration = duration;\n    elStyle.transitionDuration = duration;\n  }\n  return this;\n}\n// Events\nfunction on(...args) {\n  let [eventType, targetSelector, listener, capture] = args;\n  if (typeof args[1] === 'function') {\n    [eventType, listener, capture] = args;\n    targetSelector = undefined;\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    if (eventData.indexOf(e) < 0) {\n      eventData.unshift(e);\n    }\n    if ($(target).is(targetSelector)) listener.apply(target, eventData);\n    else {\n      const parents = $(target).parents(); // eslint-disable-line\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  function handleEvent(e) {\n    const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n    if (eventData.indexOf(e) < 0) {\n      eventData.unshift(e);\n    }\n    listener.apply(this, eventData);\n  }\n  const events = eventType.split(' ');\n  let j;\n  for (let i = 0; i < this.length; i += 1) {\n    const el = this[i];\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  return this;\n}\nfunction off(...args) {\n  let [eventType, targetSelector, listener, capture] = args;\n  if (typeof args[1] === 'function') {\n    [eventType, listener, capture] = args;\n    targetSelector = undefined;\n  }\n  if (!capture) capture = false;\n\n  const events = eventType.split(' ');\n  for (let i = 0; i < events.length; i += 1) {\n    const event = events[i];\n    for (let j = 0; j < this.length; j += 1) {\n      const el = this[j];\n      let handlers;\n      if (!targetSelector && el.dom7Listeners) {\n        handlers = el.dom7Listeners[event];\n      } else if (targetSelector && el.dom7LiveListeners) {\n        handlers = el.dom7LiveListeners[event];\n      }\n      if (handlers && handlers.length) {\n        for (let k = handlers.length - 1; k >= 0; k -= 1) {\n          const handler = handlers[k];\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  return this;\n}\nfunction once(...args) {\n  const dom = this;\n  let [eventName, targetSelector, listener, capture] = args;\n  if (typeof args[1] === 'function') {\n    [eventName, listener, capture] = args;\n    targetSelector = undefined;\n  }\n  function onceHandler(...eventArgs) {\n    listener.apply(this, eventArgs);\n    dom.off(eventName, targetSelector, onceHandler, capture);\n    if (onceHandler.dom7proxy) {\n      delete onceHandler.dom7proxy;\n    }\n  }\n  onceHandler.dom7proxy = listener;\n  return dom.on(eventName, targetSelector, onceHandler, capture);\n}\nfunction trigger(...args) {\n  const events = args[0].split(' ');\n  const eventData = args[1];\n  for (let i = 0; i < events.length; i += 1) {\n    const event = events[i];\n    for (let j = 0; j < this.length; j += 1) {\n      const el = this[j];\n      let evt;\n      try {\n        evt = new window.CustomEvent(event, {\n          detail: eventData,\n          bubbles: true,\n          cancelable: true,\n        });\n      } catch (e) {\n        evt = document.createEvent('Event');\n        evt.initEvent(event, true, true);\n        evt.detail = eventData;\n      }\n      // eslint-disable-next-line\n      el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n      el.dispatchEvent(evt);\n      el.dom7EventData = [];\n      delete el.dom7EventData;\n    }\n  }\n  return this;\n}\nfunction transitionEnd(callback) {\n  const events = ['webkitTransitionEnd', 'transitionend'];\n  const dom = this;\n  let i;\n  function fireCallBack(e) {\n    /* jshint validthis:true */\n    if (e.target !== this) return;\n    callback.call(this, e);\n    for (i = 0; i < events.length; i += 1) {\n      dom.off(events[i], fireCallBack);\n    }\n  }\n  if (callback) {\n    for (i = 0; i < events.length; i += 1) {\n      dom.on(events[i], fireCallBack);\n    }\n  }\n  return this;\n}\nfunction animationEnd(callback) {\n  const events = ['webkitAnimationEnd', 'animationend'];\n  const dom = this;\n  let i;\n  function fireCallBack(e) {\n    if (e.target !== this) return;\n    callback.call(this, e);\n    for (i = 0; i < events.length; i += 1) {\n      dom.off(events[i], fireCallBack);\n    }\n  }\n  if (callback) {\n    for (i = 0; i < events.length; i += 1) {\n      dom.on(events[i], fireCallBack);\n    }\n  }\n  return this;\n}\n// Sizing/Styles\nfunction width() {\n  if (this[0] === window) {\n    return window.innerWidth;\n  }\n\n  if (this.length > 0) {\n    return parseFloat(this.css('width'));\n  }\n\n  return null;\n}\nfunction outerWidth(includeMargins) {\n  if (this.length > 0) {\n    if (includeMargins) {\n      // eslint-disable-next-line\n      const styles = this.styles();\n      return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n    }\n    return this[0].offsetWidth;\n  }\n  return null;\n}\nfunction height() {\n  if (this[0] === window) {\n    return window.innerHeight;\n  }\n\n  if (this.length > 0) {\n    return parseFloat(this.css('height'));\n  }\n\n  return null;\n}\nfunction outerHeight(includeMargins) {\n  if (this.length > 0) {\n    if (includeMargins) {\n      // eslint-disable-next-line\n      const styles = this.styles();\n      return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n    }\n    return this[0].offsetHeight;\n  }\n  return null;\n}\nfunction offset() {\n  if (this.length > 0) {\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}\nfunction hide() {\n  for (let i = 0; i < this.length; i += 1) {\n    this[i].style.display = 'none';\n  }\n  return this;\n}\nfunction show() {\n  for (let i = 0; i < this.length; i += 1) {\n    const el = this[i];\n    if (el.style.display === 'none') {\n      el.style.display = '';\n    }\n    if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n      // Still not visible\n      el.style.display = 'block';\n    }\n  }\n  return this;\n}\nfunction styles() {\n  if (this[0]) return window.getComputedStyle(this[0], null);\n  return {};\n}\nfunction css(props, value) {\n  let i;\n  if (arguments.length === 1) {\n    if (typeof props === 'string') {\n      if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n    } else {\n      for (i = 0; i < this.length; i += 1) {\n        // eslint-disable-next-line\n        for (let prop in props) {\n          this[i].style[prop] = props[prop];\n        }\n      }\n      return this;\n    }\n  }\n  if (arguments.length === 2 && typeof props === 'string') {\n    for (i = 0; i < this.length; i += 1) {\n      this[i].style[props] = value;\n    }\n    return this;\n  }\n  return this;\n}\n\n// Dom manipulation\nfunction toArray() {\n  const arr = [];\n  for (let i = 0; i < this.length; i += 1) {\n    arr.push(this[i]);\n  }\n  return arr;\n}\n// Iterate over the collection passing elements to `callback`\nfunction each(callback) {\n  // Don't bother continuing without a callback\n  if (!callback) return this;\n  // Iterate over the current collection\n  for (let i = 0; i < this.length; i += 1) {\n    // If the callback returns false\n    if (callback.call(this[i], i, this[i]) === false) {\n      // End the loop early\n      return this;\n    }\n  }\n  // Return `this` to allow chained DOM operations\n  return this;\n}\nfunction forEach(callback) {\n  // Don't bother continuing without a callback\n  if (!callback) return this;\n  // Iterate over the current collection\n  for (let i = 0; i < this.length; i += 1) {\n    // If the callback returns false\n    if (callback.call(this[i], this[i], i) === false) {\n      // End the loop early\n      return this;\n    }\n  }\n  // Return `this` to allow chained DOM operations\n  return this;\n}\nfunction filter(callback) {\n  const matchedItems = [];\n  const dom = this;\n  for (let i = 0; i < dom.length; i += 1) {\n    if (callback.call(dom[i], i, dom[i])) matchedItems.push(dom[i]);\n  }\n  return new Dom7(matchedItems);\n}\nfunction map(callback) {\n  const modifiedItems = [];\n  const dom = this;\n  for (let i = 0; i < dom.length; i += 1) {\n    modifiedItems.push(callback.call(dom[i], i, dom[i]));\n  }\n  return new Dom7(modifiedItems);\n}\n// eslint-disable-next-line\nfunction html(html) {\n  if (typeof html === 'undefined') {\n    return this[0] ? this[0].innerHTML : undefined;\n  }\n\n  for (let i = 0; i < this.length; i += 1) {\n    this[i].innerHTML = html;\n  }\n  return this;\n}\n// eslint-disable-next-line\nfunction text(text) {\n  if (typeof text === 'undefined') {\n    if (this[0]) {\n      return this[0].textContent.trim();\n    }\n    return null;\n  }\n\n  for (let i = 0; i < this.length; i += 1) {\n    this[i].textContent = text;\n  }\n  return this;\n}\nfunction is(selector) {\n  const el = this[0];\n  let compareWith;\n  let i;\n  if (!el || typeof selector === 'undefined') return false;\n  if (typeof selector === 'string') {\n    if (el.matches) return el.matches(selector);\n    else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n    else if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n\n    compareWith = $(selector);\n    for (i = 0; i < compareWith.length; i += 1) {\n      if (compareWith[i] === el) return true;\n    }\n    return false;\n  } else if (selector === document) return el === document;\n  else if (selector === window) return el === window;\n\n  if (selector.nodeType || selector instanceof Dom7) {\n    compareWith = selector.nodeType ? [selector] : selector;\n    for (i = 0; i < compareWith.length; i += 1) {\n      if (compareWith[i] === el) return true;\n    }\n    return false;\n  }\n  return false;\n}\nfunction indexOf(el) {\n  for (let i = 0; i < this.length; i += 1) {\n    if (this[i] === el) return i;\n  }\n  return -1;\n}\nfunction index() {\n  let child = this[0];\n  let i;\n  if (child) {\n    i = 0;\n    // eslint-disable-next-line\n    while ((child = child.previousSibling) !== null) {\n      if (child.nodeType === 1) i += 1;\n    }\n    return i;\n  }\n  return undefined;\n}\n// eslint-disable-next-line\nfunction eq(index) {\n  if (typeof index === 'undefined') return this;\n  const length = this.length;\n  let returnIndex;\n  if (index > length - 1) {\n    return new Dom7([]);\n  }\n  if (index < 0) {\n    returnIndex = length + index;\n    if (returnIndex < 0) return new Dom7([]);\n    return new Dom7([this[returnIndex]]);\n  }\n  return new Dom7([this[index]]);\n}\nfunction append(...args) {\n  let newChild;\n\n  for (let k = 0; k < args.length; k += 1) {\n    newChild = args[k];\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        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// eslint-disable-next-line\nfunction appendTo(parent) {\n  $(parent).append(this);\n  return this;\n}\nfunction prepend(newChild) {\n  let i;\n  let j;\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      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  return this;\n}\n// eslint-disable-next-line\nfunction prependTo(parent) {\n  $(parent).prepend(this);\n  return this;\n}\nfunction insertBefore(selector) {\n  const before = $(selector);\n  for (let i = 0; i < this.length; i += 1) {\n    if (before.length === 1) {\n      before[0].parentNode.insertBefore(this[i], before[0]);\n    } else if (before.length > 1) {\n      for (let j = 0; j < before.length; j += 1) {\n        before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n      }\n    }\n  }\n}\nfunction insertAfter(selector) {\n  const after = $(selector);\n  for (let i = 0; i < this.length; i += 1) {\n    if (after.length === 1) {\n      after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n    } else if (after.length > 1) {\n      for (let j = 0; j < after.length; j += 1) {\n        after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n      }\n    }\n  }\n}\nfunction next(selector) {\n  if (this.length > 0) {\n    if (selector) {\n      if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n        return new Dom7([this[0].nextElementSibling]);\n      }\n      return new Dom7([]);\n    }\n\n    if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]);\n    return new Dom7([]);\n  }\n  return new Dom7([]);\n}\nfunction nextAll(selector) {\n  const nextEls = [];\n  let el = this[0];\n  if (!el) return new Dom7([]);\n  while (el.nextElementSibling) {\n    const next = el.nextElementSibling; // eslint-disable-line\n    if (selector) {\n      if ($(next).is(selector)) nextEls.push(next);\n    } else nextEls.push(next);\n    el = next;\n  }\n  return new Dom7(nextEls);\n}\nfunction prev(selector) {\n  if (this.length > 0) {\n    const el = this[0];\n    if (selector) {\n      if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n        return new Dom7([el.previousElementSibling]);\n      }\n      return new Dom7([]);\n    }\n\n    if (el.previousElementSibling) return new Dom7([el.previousElementSibling]);\n    return new Dom7([]);\n  }\n  return new Dom7([]);\n}\nfunction prevAll(selector) {\n  const prevEls = [];\n  let el = this[0];\n  if (!el) return new Dom7([]);\n  while (el.previousElementSibling) {\n    const prev = el.previousElementSibling; // eslint-disable-line\n    if (selector) {\n      if ($(prev).is(selector)) prevEls.push(prev);\n    } else prevEls.push(prev);\n    el = prev;\n  }\n  return new Dom7(prevEls);\n}\nfunction siblings(selector) {\n  return this.nextAll(selector).add(this.prevAll(selector));\n}\nfunction parent(selector) {\n  const parents = []; // eslint-disable-line\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  return $(unique(parents));\n}\nfunction parents(selector) {\n  const parents = []; // eslint-disable-line\n  for (let i = 0; i < this.length; i += 1) {\n    let parent = this[i].parentNode; // eslint-disable-line\n    while (parent) {\n      if (selector) {\n        if ($(parent).is(selector)) parents.push(parent);\n      } else {\n        parents.push(parent);\n      }\n      parent = parent.parentNode;\n    }\n  }\n  return $(unique(parents));\n}\nfunction closest(selector) {\n  let closest = this; // eslint-disable-line\n  if (typeof selector === 'undefined') {\n    return new Dom7([]);\n  }\n  if (!closest.is(selector)) {\n    closest = closest.parents(selector).eq(0);\n  }\n  return closest;\n}\nfunction find(selector) {\n  const foundElements = [];\n  for (let i = 0; i < this.length; i += 1) {\n    const found = this[i].querySelectorAll(selector);\n    for (let j = 0; j < found.length; j += 1) {\n      foundElements.push(found[j]);\n    }\n  }\n  return new Dom7(foundElements);\n}\nfunction children(selector) {\n  const children = []; // eslint-disable-line\n  for (let i = 0; i < this.length; i += 1) {\n    const childNodes = this[i].childNodes;\n\n    for (let j = 0; j < childNodes.length; j += 1) {\n      if (!selector) {\n        if (childNodes[j].nodeType === 1) children.push(childNodes[j]);\n      } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {\n        children.push(childNodes[j]);\n      }\n    }\n  }\n  return new Dom7(unique(children));\n}\nfunction remove() {\n  for (let i = 0; i < this.length; i += 1) {\n    if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n  }\n  return this;\n}\nfunction detach() {\n  return this.remove();\n}\nfunction add(...args) {\n  const dom = this;\n  let i;\n  let j;\n  for (i = 0; i < args.length; i += 1) {\n    const toAdd = $(args[i]);\n    for (j = 0; j < toAdd.length; j += 1) {\n      dom[dom.length] = toAdd[j];\n      dom.length += 1;\n    }\n  }\n  return dom;\n}\nfunction empty() {\n  for (let i = 0; i < this.length; i += 1) {\n    const el = this[i];\n    if (el.nodeType === 1) {\n      for (let j = 0; j < el.childNodes.length; j += 1) {\n        if (el.childNodes[j].parentNode) {\n          el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n        }\n      }\n      el.textContent = '';\n    }\n  }\n  return this;\n}\n\nfunction scrollTo(...args) {\n  let [left, top, duration, easing, callback] = args;\n  if (args.length === 4 && typeof easing === 'function') {\n    callback = easing;\n    [left, top, duration, callback, easing] = args;\n  }\n  if (typeof easing === 'undefined') easing = 'swing';\n\n  return this.each(function animate() {\n    const el = this;\n    let currentTop;\n    let currentLeft;\n    let maxTop;\n    let maxLeft;\n    let newTop;\n    let newLeft;\n    let scrollTop; // eslint-disable-line\n    let scrollLeft; // eslint-disable-line\n    let animateTop = top > 0 || top === 0;\n    let animateLeft = left > 0 || left === 0;\n    if (typeof easing === 'undefined') {\n      easing = 'swing';\n    }\n    if (animateTop) {\n      currentTop = el.scrollTop;\n      if (!duration) {\n        el.scrollTop = top;\n      }\n    }\n    if (animateLeft) {\n      currentLeft = el.scrollLeft;\n      if (!duration) {\n        el.scrollLeft = left;\n      }\n    }\n    if (!duration) return;\n    if (animateTop) {\n      maxTop = el.scrollHeight - el.offsetHeight;\n      newTop = Math.max(Math.min(top, maxTop), 0);\n    }\n    if (animateLeft) {\n      maxLeft = el.scrollWidth - el.offsetWidth;\n      newLeft = Math.max(Math.min(left, maxLeft), 0);\n    }\n    let startTime = null;\n    if (animateTop && newTop === currentTop) animateTop = false;\n    if (animateLeft && newLeft === currentLeft) animateLeft = false;\n    function render(time = new Date().getTime()) {\n      if (startTime === null) {\n        startTime = time;\n      }\n      const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n      const easeProgress = easing === 'linear' ? progress : (0.5 - (Math.cos(progress * Math.PI) / 2));\n      let done;\n      if (animateTop) scrollTop = currentTop + (easeProgress * (newTop - currentTop));\n      if (animateLeft) scrollLeft = currentLeft + (easeProgress * (newLeft - currentLeft));\n      if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n        el.scrollTop = newTop;\n        done = true;\n      }\n      if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n        el.scrollTop = newTop;\n        done = true;\n      }\n      if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n        el.scrollLeft = newLeft;\n        done = true;\n      }\n      if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n        el.scrollLeft = newLeft;\n        done = true;\n      }\n\n      if (done) {\n        if (callback) callback();\n        return;\n      }\n      if (animateTop) el.scrollTop = scrollTop;\n      if (animateLeft) el.scrollLeft = scrollLeft;\n      requestAnimationFrame(render);\n    }\n    requestAnimationFrame(render);\n  });\n}\n// scrollTop(top, duration, easing, callback) {\nfunction scrollTop(...args) {\n  let [top, duration, easing, callback] = args;\n  if (args.length === 3 && typeof easing === 'function') {\n    [top, duration, callback, easing] = args;\n  }\n  const dom = this;\n  if (typeof top === 'undefined') {\n    if (dom.length > 0) return dom[0].scrollTop;\n    return null;\n  }\n  return dom.scrollTo(undefined, top, duration, easing, callback);\n}\nfunction scrollLeft(...args) {\n  let [left, duration, easing, callback] = args;\n  if (args.length === 3 && typeof easing === 'function') {\n    [left, duration, callback, easing] = args;\n  }\n  const dom = this;\n  if (typeof left === 'undefined') {\n    if (dom.length > 0) return dom[0].scrollLeft;\n    return null;\n  }\n  return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\nfunction animate(initialProps, initialParams) {\n  const els = this;\n  const a = {\n    props: Object.assign({}, initialProps),\n    params: Object.assign({\n      duration: 300,\n      easing: 'swing', // or 'linear'\n      /* Callbacks\n      begin(elements)\n      complete(elements)\n      progress(elements, complete, remaining, start, tweenValue)\n      */\n    }, initialParams),\n\n    elements: els,\n    animating: false,\n    que: [],\n\n    easingProgress(easing, progress) {\n      if (easing === 'swing') {\n        return 0.5 - (Math.cos(progress * Math.PI) / 2);\n      }\n      if (typeof easing === 'function') {\n        return easing(progress);\n      }\n      return progress;\n    },\n    stop() {\n      if (a.frameId) {\n        cancelAnimationFrame(a.frameId);\n      }\n      a.animating = false;\n      a.elements.each((index, el) => {\n        const element = el;\n        delete element.dom7AnimateInstance;\n      });\n      a.que = [];\n    },\n    done(complete) {\n      a.animating = false;\n      a.elements.each((index, el) => {\n        const element = el;\n        delete element.dom7AnimateInstance;\n      });\n      if (complete) complete(els);\n      if (a.que.length > 0) {\n        const que = a.que.shift();\n        a.animate(que[0], que[1]);\n      }\n    },\n    animate(props, params) {\n      if (a.animating) {\n        a.que.push([props, params]);\n        return a;\n      }\n      const elements = [];\n\n      // Define & Cache Initials & Units\n      a.elements.each((index, el) => {\n        let initialFullValue;\n        let initialValue;\n        let unit;\n        let finalValue;\n        let finalFullValue;\n\n        if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n\n        elements[index] = {\n          container: el,\n        };\n        Object.keys(props).forEach((prop) => {\n          initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n          initialValue = parseFloat(initialFullValue);\n          unit = initialFullValue.replace(initialValue, '');\n          finalValue = parseFloat(props[prop]);\n          finalFullValue = props[prop] + unit;\n          elements[index][prop] = {\n            initialFullValue,\n            initialValue,\n            unit,\n            finalValue,\n            finalFullValue,\n            currentValue: initialValue,\n          };\n        });\n      });\n\n      let startTime = null;\n      let time;\n      let elementsDone = 0;\n      let propsDone = 0;\n      let done;\n      let began = false;\n\n      a.animating = true;\n\n      function render() {\n        time = new Date().getTime();\n        let progress;\n        let easeProgress;\n        // let el;\n        if (!began) {\n          began = true;\n          if (params.begin) params.begin(els);\n        }\n        if (startTime === null) {\n          startTime = time;\n        }\n        if (params.progress) {\n          // eslint-disable-next-line\n          params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), ((startTime + params.duration) - time < 0 ? 0 : (startTime + params.duration) - time), startTime);\n        }\n\n        elements.forEach((element) => {\n          const el = element;\n          if (done || el.done) return;\n          Object.keys(props).forEach((prop) => {\n            if (done || el.done) return;\n            progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n            easeProgress = a.easingProgress(params.easing, progress);\n            const { initialValue, finalValue, unit } = el[prop];\n            el[prop].currentValue = initialValue + (easeProgress * (finalValue - initialValue));\n            const currentValue = el[prop].currentValue;\n\n            if (\n              (finalValue > initialValue && currentValue >= finalValue) ||\n              (finalValue < initialValue && currentValue <= finalValue)) {\n              el.container.style[prop] = finalValue + unit;\n              propsDone += 1;\n              if (propsDone === Object.keys(props).length) {\n                el.done = true;\n                elementsDone += 1;\n              }\n              if (elementsDone === elements.length) {\n                done = true;\n              }\n            }\n            if (done) {\n              a.done(params.complete);\n              return;\n            }\n            el.container.style[prop] = currentValue + unit;\n          });\n        });\n        if (done) return;\n        // Then call\n        a.frameId = requestAnimationFrame(render);\n      }\n      a.frameId = requestAnimationFrame(render);\n      return a;\n    },\n  };\n\n  if (a.elements.length === 0) {\n    return els;\n  }\n\n  let animateInstance;\n  for (let i = 0; i < a.elements.length; i += 1) {\n    if (a.elements[i].dom7AnimateInstance) {\n      animateInstance = a.elements[i].dom7AnimateInstance;\n    } else a.elements[i].dom7AnimateInstance = a;\n  }\n  if (!animateInstance) {\n    animateInstance = a;\n  }\n\n  if (initialProps === 'stop') {\n    animateInstance.stop();\n  } else {\n    animateInstance.animate(a.props, a.params);\n  }\n\n  return els;\n}\n\nfunction stop() {\n  const els = this;\n  for (let i = 0; i < els.length; i += 1) {\n    if (els[i].dom7AnimateInstance) {\n      els[i].dom7AnimateInstance.stop();\n    }\n  }\n}\n\nconst noTrigger = ('resize scroll').split(' ');\nfunction eventShortcut(name, ...args) {\n  if (typeof args[0] === 'undefined') {\n    for (let i = 0; i < this.length; i += 1) {\n      if (noTrigger.indexOf(name) < 0) {\n        if (name in this[i]) this[i][name]();\n        else {\n          $(this[i]).trigger(name);\n        }\n      }\n    }\n    return this;\n  }\n  return this.on(name, ...args);\n}\n\nfunction click(...args) {\n  return eventShortcut.bind(this)('click', ...args);\n}\nfunction blur(...args) {\n  return eventShortcut.bind(this)('blur', ...args);\n}\nfunction focus(...args) {\n  return eventShortcut.bind(this)('focus', ...args);\n}\nfunction focusin(...args) {\n  return eventShortcut.bind(this)('focusin', ...args);\n}\nfunction focusout(...args) {\n  return eventShortcut.bind(this)('focusout', ...args);\n}\nfunction keyup(...args) {\n  return eventShortcut.bind(this)('keyup', ...args);\n}\nfunction keydown(...args) {\n  return eventShortcut.bind(this)('keydown', ...args);\n}\nfunction keypress(...args) {\n  return eventShortcut.bind(this)('keypress', ...args);\n}\nfunction submit(...args) {\n  return eventShortcut.bind(this)('submit', ...args);\n}\nfunction change(...args) {\n  return eventShortcut.bind(this)('change', ...args);\n}\nfunction mousedown(...args) {\n  return eventShortcut.bind(this)('mousedown', ...args);\n}\nfunction mousemove(...args) {\n  return eventShortcut.bind(this)('mousemove', ...args);\n}\nfunction mouseup(...args) {\n  return eventShortcut.bind(this)('mouseup', ...args);\n}\nfunction mouseenter(...args) {\n  return eventShortcut.bind(this)('mouseenter', ...args);\n}\nfunction mouseleave(...args) {\n  return eventShortcut.bind(this)('mouseleave', ...args);\n}\nfunction mouseout(...args) {\n  return eventShortcut.bind(this)('mouseout', ...args);\n}\nfunction mouseover(...args) {\n  return eventShortcut.bind(this)('mouseover', ...args);\n}\nfunction touchstart(...args) {\n  return eventShortcut.bind(this)('touchstart', ...args);\n}\nfunction touchend(...args) {\n  return eventShortcut.bind(this)('touchend', ...args);\n}\nfunction touchmove(...args) {\n  return eventShortcut.bind(this)('touchmove', ...args);\n}\nfunction resize(...args) {\n  return eventShortcut.bind(this)('resize', ...args);\n}\nfunction scroll(...args) {\n  return eventShortcut.bind(this)('scroll', ...args);\n}\n\nexport { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, prop, data, removeData, dataset, val, transform, transition, on, off, once, trigger, transitionEnd, animationEnd, width, outerWidth, height, outerHeight, offset, hide, show, styles, css, toArray, each, forEach, filter, map, html, text, is, indexOf, index, eq, append, appendTo, prepend, prependTo, insertBefore, insertAfter, next, nextAll, prev, prevAll, siblings, parent, parents, closest, find, children, remove, detach, add, empty, scrollTo, scrollTop, scrollLeft, animate, stop, click, blur, focus, focusin, focusout, keyup, keydown, keypress, submit, change, mousedown, mousemove, mouseup, mouseenter, mouseleave, mouseout, mouseover, touchstart, touchend, touchmove, resize, scroll };\n","/**\n * Swiper 5.4.5\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * http://swiperjs.com\n *\n * Copyright 2014-2020 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: June 16, 2020\n */\n\nimport { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, data, transform, transition as transition$1, on, off, trigger, transitionEnd as transitionEnd$1, outerWidth, outerHeight, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove, add, styles } from 'dom7/dist/dom7.modular';\nimport { window, document as document$1 } from 'ssr-window';\n\nconst Methods = {\n  addClass,\n  removeClass,\n  hasClass,\n  toggleClass,\n  attr,\n  removeAttr,\n  data,\n  transform,\n  transition: transition$1,\n  on,\n  off,\n  trigger,\n  transitionEnd: transitionEnd$1,\n  outerWidth,\n  outerHeight,\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  add,\n  styles,\n};\n\nObject.keys(Methods).forEach((methodName) => {\n  $.fn[methodName] = $.fn[methodName] || Methods[methodName];\n});\n\nconst Utils = {\n  deleteProps(obj) {\n    const object = obj;\n    Object.keys(object).forEach((key) => {\n      try {\n        object[key] = null;\n      } catch (e) {\n        // no getter for object\n      }\n      try {\n        delete object[key];\n      } catch (e) {\n        // something got wrong\n      }\n    });\n  },\n  nextTick(callback, delay = 0) {\n    return setTimeout(callback, delay);\n  },\n  now() {\n    return Date.now();\n  },\n  getTranslate(el, axis = 'x') {\n    let matrix;\n    let curTransform;\n    let transformMatrix;\n\n    const curStyle = window.getComputedStyle(el, null);\n\n    if (window.WebKitCSSMatrix) {\n      curTransform = curStyle.transform || curStyle.webkitTransform;\n      if (curTransform.split(',').length > 6) {\n        curTransform = curTransform.split(', ').map((a) => a.replace(',', '.')).join(', ');\n      }\n      // Some old versions of Webkit choke when 'none' is passed; pass\n      // empty string instead in this case\n      transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n    } else {\n      transformMatrix = 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;\n      // Crazy IE10 Matrix\n      else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n      // Normal Browsers\n      else curTransform = parseFloat(matrix[4]);\n    }\n    if (axis === 'y') {\n      // Latest Chrome and webkits Fix\n      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n      // Crazy IE10 Matrix\n      else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n      // Normal Browsers\n      else curTransform = parseFloat(matrix[5]);\n    }\n    return curTransform || 0;\n  },\n  parseUrlQuery(url) {\n    const query = {};\n    let urlToParse = url || window.location.href;\n    let i;\n    let params;\n    let param;\n    let length;\n    if (typeof urlToParse === 'string' && urlToParse.length) {\n      urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\\S*\\?/, '') : '';\n      params = urlToParse.split('&').filter((paramsPart) => paramsPart !== '');\n      length = params.length;\n\n      for (i = 0; i < length; i += 1) {\n        param = params[i].replace(/#\\S+/g, '').split('=');\n        query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';\n      }\n    }\n    return query;\n  },\n  isObject(o) {\n    return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n  },\n  extend(...args) {\n    const to = Object(args[0]);\n    for (let i = 1; i < args.length; i += 1) {\n      const nextSource = args[i];\n      if (nextSource !== undefined && nextSource !== null) {\n        const keysArray = Object.keys(Object(nextSource));\n        for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n          const nextKey = keysArray[nextIndex];\n          const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n          if (desc !== undefined && desc.enumerable) {\n            if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n              Utils.extend(to[nextKey], nextSource[nextKey]);\n            } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n              to[nextKey] = {};\n              Utils.extend(to[nextKey], nextSource[nextKey]);\n            } else {\n              to[nextKey] = nextSource[nextKey];\n            }\n          }\n        }\n      }\n    }\n    return to;\n  },\n};\n\nconst Support = (function Support() {\n  return {\n    touch: !!(('ontouchstart' in window) || (window.DocumentTouch && document$1 instanceof window.DocumentTouch)),\n\n    pointerEvents: !!window.PointerEvent && ('maxTouchPoints' in window.navigator) && window.navigator.maxTouchPoints >= 0,\n\n    observer: (function checkObserver() {\n      return ('MutationObserver' in window || 'WebkitMutationObserver' in window);\n    }()),\n\n    passiveListener: (function checkPassiveListener() {\n      let supportsPassive = false;\n      try {\n        const opts = Object.defineProperty({}, 'passive', {\n          // eslint-disable-next-line\n          get() {\n            supportsPassive = true;\n          },\n        });\n        window.addEventListener('testPassiveListener', null, opts);\n      } catch (e) {\n        // No support\n      }\n      return supportsPassive;\n    }()),\n\n    gestures: (function checkGestures() {\n      return 'ongesturestart' in window;\n    }()),\n  };\n}());\n\nclass SwiperClass {\n  constructor(params = {}) {\n    const self = this;\n    self.params = params;\n\n    // Events\n    self.eventsListeners = {};\n\n    if (self.params && self.params.on) {\n      Object.keys(self.params.on).forEach((eventName) => {\n        self.on(eventName, self.params.on[eventName]);\n      });\n    }\n  }\n\n  on(events, handler, priority) {\n    const self = this;\n    if (typeof handler !== 'function') return self;\n    const method = priority ? 'unshift' : 'push';\n    events.split(' ').forEach((event) => {\n      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n      self.eventsListeners[event][method](handler);\n    });\n    return self;\n  }\n\n  once(events, handler, priority) {\n    const self = this;\n    if (typeof handler !== 'function') return self;\n    function onceHandler(...args) {\n      self.off(events, onceHandler);\n      if (onceHandler.f7proxy) {\n        delete onceHandler.f7proxy;\n      }\n      handler.apply(self, args);\n    }\n    onceHandler.f7proxy = handler;\n    return self.on(events, onceHandler, priority);\n  }\n\n  off(events, handler) {\n    const self = this;\n    if (!self.eventsListeners) return self;\n    events.split(' ').forEach((event) => {\n      if (typeof handler === 'undefined') {\n        self.eventsListeners[event] = [];\n      } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {\n        self.eventsListeners[event].forEach((eventHandler, index) => {\n          if (eventHandler === handler || (eventHandler.f7proxy && eventHandler.f7proxy === handler)) {\n            self.eventsListeners[event].splice(index, 1);\n          }\n        });\n      }\n    });\n    return self;\n  }\n\n  emit(...args) {\n    const self = this;\n    if (!self.eventsListeners) return self;\n    let events;\n    let data;\n    let context;\n    if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n      events = args[0];\n      data = args.slice(1, args.length);\n      context = self;\n    } else {\n      events = args[0].events;\n      data = args[0].data;\n      context = args[0].context || self;\n    }\n    const eventsArray = Array.isArray(events) ? events : events.split(' ');\n    eventsArray.forEach((event) => {\n      if (self.eventsListeners && self.eventsListeners[event]) {\n        const handlers = [];\n        self.eventsListeners[event].forEach((eventHandler) => {\n          handlers.push(eventHandler);\n        });\n        handlers.forEach((eventHandler) => {\n          eventHandler.apply(context, data);\n        });\n      }\n    });\n    return self;\n  }\n\n  useModulesParams(instanceParams) {\n    const instance = this;\n    if (!instance.modules) return;\n    Object.keys(instance.modules).forEach((moduleName) => {\n      const module = instance.modules[moduleName];\n      // Extend params\n      if (module.params) {\n        Utils.extend(instanceParams, module.params);\n      }\n    });\n  }\n\n  useModules(modulesParams = {}) {\n    const instance = this;\n    if (!instance.modules) return;\n    Object.keys(instance.modules).forEach((moduleName) => {\n      const module = instance.modules[moduleName];\n      const moduleParams = modulesParams[moduleName] || {};\n      // Extend instance methods and props\n      if (module.instance) {\n        Object.keys(module.instance).forEach((modulePropName) => {\n          const moduleProp = module.instance[modulePropName];\n          if (typeof moduleProp === 'function') {\n            instance[modulePropName] = moduleProp.bind(instance);\n          } else {\n            instance[modulePropName] = moduleProp;\n          }\n        });\n      }\n      // Add event listeners\n      if (module.on && instance.on) {\n        Object.keys(module.on).forEach((moduleEventName) => {\n          instance.on(moduleEventName, module.on[moduleEventName]);\n        });\n      }\n\n      // Module create callback\n      if (module.create) {\n        module.create.bind(instance)(moduleParams);\n      }\n    });\n  }\n\n  static set components(components) {\n    const Class = this;\n    if (!Class.use) return;\n    Class.use(components);\n  }\n\n  static installModule(module, ...params) {\n    const Class = this;\n    if (!Class.prototype.modules) Class.prototype.modules = {};\n    const name = module.name || (`${Object.keys(Class.prototype.modules).length}_${Utils.now()}`);\n    Class.prototype.modules[name] = module;\n    // Prototype\n    if (module.proto) {\n      Object.keys(module.proto).forEach((key) => {\n        Class.prototype[key] = module.proto[key];\n      });\n    }\n    // Class\n    if (module.static) {\n      Object.keys(module.static).forEach((key) => {\n        Class[key] = module.static[key];\n      });\n    }\n    // Callback\n    if (module.install) {\n      module.install.apply(Class, params);\n    }\n    return Class;\n  }\n\n  static use(module, ...params) {\n    const Class = this;\n    if (Array.isArray(module)) {\n      module.forEach((m) => Class.installModule(m));\n      return Class;\n    }\n    return Class.installModule(module, ...params);\n  }\n}\n\nfunction updateSize () {\n  const swiper = this;\n  let width;\n  let height;\n  const $el = swiper.$el;\n  if (typeof swiper.params.width !== 'undefined') {\n    width = swiper.params.width;\n  } else {\n    width = $el[0].clientWidth;\n  }\n  if (typeof swiper.params.height !== 'undefined') {\n    height = swiper.params.height;\n  } else {\n    height = $el[0].clientHeight;\n  }\n  if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {\n    return;\n  }\n\n  // Subtract paddings\n  width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);\n  height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);\n\n  Utils.extend(swiper, {\n    width,\n    height,\n    size: swiper.isHorizontal() ? width : height,\n  });\n}\n\nfunction updateSlides () {\n  const swiper = this;\n  const params = swiper.params;\n\n  const {\n    $wrapperEl, size: swiperSize, rtlTranslate: rtl, 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\n  function slidesForMargin(slideIndex) {\n    if (!params.cssMode) return true;\n    if (slideIndex === slides.length - 1) {\n      return false;\n    }\n    return true;\n  }\n\n  let offsetBefore = params.slidesOffsetBefore;\n  if (typeof offsetBefore === 'function') {\n    offsetBefore = params.slidesOffsetBefore.call(swiper);\n  }\n\n  let offsetAfter = params.slidesOffsetAfter;\n  if (typeof offsetAfter === 'function') {\n    offsetAfter = params.slidesOffsetAfter.call(swiper);\n  }\n\n  const previousSnapGridLength = swiper.snapGrid.length;\n  const previousSlidesGridLength = swiper.snapGrid.length;\n\n  let spaceBetween = params.spaceBetween;\n  let slidePosition = -offsetBefore;\n  let prevSlideSize = 0;\n  let index = 0;\n  if (typeof swiperSize === 'undefined') {\n    return;\n  }\n  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n    spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;\n  }\n\n  swiper.virtualSize = -spaceBetween;\n\n  // reset margins\n  if (rtl) slides.css({ marginLeft: '', marginTop: '' });\n  else slides.css({ marginRight: '', marginBottom: '' });\n\n  let slidesNumberEvenToRows;\n  if (params.slidesPerColumn > 1) {\n    if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {\n      slidesNumberEvenToRows = slidesLength;\n    } else {\n      slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n    }\n    if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {\n      slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);\n    }\n  }\n\n  // Calc slides\n  let slideSize;\n  const slidesPerColumn = params.slidesPerColumn;\n  const slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n  const numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);\n  for (let i = 0; i < slidesLength; i += 1) {\n    slideSize = 0;\n    const slide = slides.eq(i);\n    if (params.slidesPerColumn > 1) {\n      // Set slides order\n      let newSlideOrderIndex;\n      let column;\n      let row;\n      if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {\n        const groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));\n        const slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;\n        const columnsInGroup = groupIndex === 0\n          ? params.slidesPerGroup\n          : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);\n        row = Math.floor(slideIndexInGroup / columnsInGroup);\n        column = (slideIndexInGroup - row * columnsInGroup) + groupIndex * params.slidesPerGroup;\n\n        newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);\n        slide\n          .css({\n            '-webkit-box-ordinal-group': newSlideOrderIndex,\n            '-moz-box-ordinal-group': newSlideOrderIndex,\n            '-ms-flex-order': newSlideOrderIndex,\n            '-webkit-order': newSlideOrderIndex,\n            order: newSlideOrderIndex,\n          });\n      } else if (params.slidesPerColumnFill === 'column') {\n        column = Math.floor(i / slidesPerColumn);\n        row = i - (column * slidesPerColumn);\n        if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {\n          row += 1;\n          if (row >= slidesPerColumn) {\n            row = 0;\n            column += 1;\n          }\n        }\n      } else {\n        row = Math.floor(i / slidesPerRow);\n        column = i - (row * slidesPerRow);\n      }\n      slide.css(\n        `margin-${swiper.isHorizontal() ? 'top' : 'left'}`,\n        (row !== 0 && params.spaceBetween) && (`${params.spaceBetween}px`)\n      );\n    }\n    if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n    if (params.slidesPerView === 'auto') {\n      const slideStyles = window.getComputedStyle(slide[0], null);\n      const currentTransform = slide[0].style.transform;\n      const currentWebKitTransform = slide[0].style.webkitTransform;\n      if (currentTransform) {\n        slide[0].style.transform = 'none';\n      }\n      if (currentWebKitTransform) {\n        slide[0].style.webkitTransform = 'none';\n      }\n      if (params.roundLengths) {\n        slideSize = swiper.isHorizontal()\n          ? slide.outerWidth(true)\n          : slide.outerHeight(true);\n      } else {\n        // eslint-disable-next-line\n        if (swiper.isHorizontal()) {\n          const width = parseFloat(slideStyles.getPropertyValue('width'));\n          const paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));\n          const paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));\n          const marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));\n          const marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));\n          const boxSizing = slideStyles.getPropertyValue('box-sizing');\n          if (boxSizing && boxSizing === 'border-box') {\n            slideSize = width + marginLeft + marginRight;\n          } else {\n            slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;\n          }\n        } else {\n          const height = parseFloat(slideStyles.getPropertyValue('height'));\n          const paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));\n          const paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));\n          const marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));\n          const marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));\n          const boxSizing = slideStyles.getPropertyValue('box-sizing');\n          if (boxSizing && boxSizing === 'border-box') {\n            slideSize = height + marginTop + marginBottom;\n          } else {\n            slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;\n          }\n        }\n      }\n      if (currentTransform) {\n        slide[0].style.transform = currentTransform;\n      }\n      if (currentWebKitTransform) {\n        slide[0].style.webkitTransform = currentWebKitTransform;\n      }\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n    } else {\n      slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n      if (slides[i]) {\n        if (swiper.isHorizontal()) {\n          slides[i].style.width = `${slideSize}px`;\n        } else {\n          slides[i].style.height = `${slideSize}px`;\n        }\n      }\n    }\n    if (slides[i]) {\n      slides[i].swiperSlideSize = slideSize;\n    }\n    slidesSizesGrid.push(slideSize);\n\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\n    prevSlideSize = slideSize;\n\n    index += 1;\n  }\n  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n  let newSlidesGrid;\n\n  if (\n    rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n    $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n  }\n  if (params.setWrapperSize) {\n    if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n    else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });\n  }\n\n  if (params.slidesPerColumn > 1) {\n    swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n    swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n    if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n    else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });\n    if (params.centeredSlides) {\n      newSlidesGrid = [];\n      for (let i = 0; i < snapGrid.length; i += 1) {\n        let slidesGridItem = snapGrid[i];\n        if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n        if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n      }\n      snapGrid = newSlidesGrid;\n    }\n  }\n\n  // Remove last grid elements depending on width\n  if (!params.centeredSlides) {\n    newSlidesGrid = [];\n    for (let i = 0; i < snapGrid.length; i += 1) {\n      let slidesGridItem = snapGrid[i];\n      if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n      if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n        newSlidesGrid.push(slidesGridItem);\n      }\n    }\n    snapGrid = newSlidesGrid;\n    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n      snapGrid.push(swiper.virtualSize - swiperSize);\n    }\n  }\n  if (snapGrid.length === 0) snapGrid = [0];\n\n  if (params.spaceBetween !== 0) {\n    if (swiper.isHorizontal()) {\n      if (rtl) slides.filter(slidesForMargin).css({ marginLeft: `${spaceBetween}px` });\n      else slides.filter(slidesForMargin).css({ marginRight: `${spaceBetween}px` });\n    } else slides.filter(slidesForMargin).css({ marginBottom: `${spaceBetween}px` });\n  }\n\n  if (params.centeredSlides && params.centeredSlidesBounds) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach((slideSizeValue) => {\n      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n    });\n    allSlidesSize -= params.spaceBetween;\n    const maxSnap = allSlidesSize - swiperSize;\n    snapGrid = snapGrid.map((snap) => {\n      if (snap < 0) return -offsetBefore;\n      if (snap > maxSnap) return maxSnap + offsetAfter;\n      return snap;\n    });\n  }\n\n  if (params.centerInsufficientSlides) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach((slideSizeValue) => {\n      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n    });\n    allSlidesSize -= params.spaceBetween;\n    if (allSlidesSize < swiperSize) {\n      const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n      snapGrid.forEach((snap, snapIndex) => {\n        snapGrid[snapIndex] = snap - allSlidesOffset;\n      });\n      slidesGrid.forEach((snap, snapIndex) => {\n        slidesGrid[snapIndex] = snap + allSlidesOffset;\n      });\n    }\n  }\n\n  Utils.extend(swiper, {\n    slides,\n    snapGrid,\n    slidesGrid,\n    slidesSizesGrid,\n  });\n\n  if (slidesLength !== previousSlidesLength) {\n    swiper.emit('slidesLengthChange');\n  }\n  if (snapGrid.length !== previousSnapGridLength) {\n    if (swiper.params.watchOverflow) swiper.checkOverflow();\n    swiper.emit('snapGridLengthChange');\n  }\n  if (slidesGrid.length !== previousSlidesGridLength) {\n    swiper.emit('slidesGridLengthChange');\n  }\n\n  if (params.watchSlidesProgress || params.watchSlidesVisibility) {\n    swiper.updateSlidesOffset();\n  }\n}\n\nfunction updateAutoHeight (speed) {\n  const swiper = this;\n  const activeSlides = [];\n  let newHeight = 0;\n  let i;\n  if (typeof speed === 'number') {\n    swiper.setTransition(speed);\n  } else if (speed === true) {\n    swiper.setTransition(swiper.params.speed);\n  }\n  // Find slides currently in view\n  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n    if (swiper.params.centeredSlides) {\n      swiper.visibleSlides.each((index, 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) break;\n        activeSlides.push(swiper.slides.eq(index)[0]);\n      }\n    }\n  } else {\n    activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);\n  }\n\n  // Find new height from highest slide in view\n  for (i = 0; i < activeSlides.length; i += 1) {\n    if (typeof activeSlides[i] !== 'undefined') {\n      const height = activeSlides[i].offsetHeight;\n      newHeight = height > newHeight ? height : newHeight;\n    }\n  }\n\n  // Update Height\n  if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}\n\nfunction updateSlidesOffset () {\n  const swiper = this;\n  const slides = swiper.slides;\n  for (let i = 0; i < slides.length; i += 1) {\n    slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n  }\n}\n\nfunction updateSlidesProgress (translate = (this && this.translate) || 0) {\n  const swiper = this;\n  const params = swiper.params;\n\n  const { slides, rtlTranslate: rtl } = swiper;\n\n  if (slides.length === 0) return;\n  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n\n  let offsetCenter = -translate;\n  if (rtl) offsetCenter = translate;\n\n  // Visible Slides\n  slides.removeClass(params.slideVisibleClass);\n\n  swiper.visibleSlidesIndexes = [];\n  swiper.visibleSlides = [];\n\n  for (let i = 0; i < slides.length; i += 1) {\n    const slide = slides[i];\n    const slideProgress = (\n      (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset\n    ) / (slide.swiperSlideSize + params.spaceBetween);\n    if (params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) {\n      const slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n      const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n      const isVisible = (slideBefore >= 0 && slideBefore < swiper.size - 1)\n                || (slideAfter > 1 && slideAfter <= swiper.size)\n                || (slideBefore <= 0 && slideAfter >= swiper.size);\n      if (isVisible) {\n        swiper.visibleSlides.push(slide);\n        swiper.visibleSlidesIndexes.push(i);\n        slides.eq(i).addClass(params.slideVisibleClass);\n      }\n    }\n    slide.progress = rtl ? -slideProgress : slideProgress;\n  }\n  swiper.visibleSlides = $(swiper.visibleSlides);\n}\n\nfunction updateProgress (translate) {\n  const swiper = this;\n  if (typeof translate === 'undefined') {\n    const multiplier = swiper.rtlTranslate ? -1 : 1;\n    // eslint-disable-next-line\n    translate = (swiper && swiper.translate && (swiper.translate * multiplier)) || 0;\n  }\n  const params = swiper.params;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  let { progress, isBeginning, isEnd } = swiper;\n  const wasBeginning = isBeginning;\n  const wasEnd = isEnd;\n  if (translatesDiff === 0) {\n    progress = 0;\n    isBeginning = true;\n    isEnd = true;\n  } else {\n    progress = (translate - swiper.minTranslate()) / (translatesDiff);\n    isBeginning = progress <= 0;\n    isEnd = progress >= 1;\n  }\n  Utils.extend(swiper, {\n    progress,\n    isBeginning,\n    isEnd,\n  });\n\n  if (params.watchSlidesProgress || params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) swiper.updateSlidesProgress(translate);\n\n  if (isBeginning && !wasBeginning) {\n    swiper.emit('reachBeginning toEdge');\n  }\n  if (isEnd && !wasEnd) {\n    swiper.emit('reachEnd toEdge');\n  }\n  if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {\n    swiper.emit('fromEdge');\n  }\n\n  swiper.emit('progress', progress);\n}\n\nfunction updateSlidesClasses () {\n  const swiper = this;\n\n  const {\n    slides, params, $wrapperEl, activeIndex, realIndex,\n  } = swiper;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n\n  slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n\n  let activeSlide;\n  if (isVirtual) {\n    activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n  } else {\n    activeSlide = slides.eq(activeIndex);\n  }\n\n  // Active classes\n  activeSlide.addClass(params.slideActiveClass);\n\n  if (params.loop) {\n    // Duplicate to all looped slides\n    if (activeSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl\n        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`)\n        .addClass(params.slideDuplicateActiveClass);\n    } else {\n      $wrapperEl\n        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`)\n        .addClass(params.slideDuplicateActiveClass);\n    }\n  }\n  // Next Slide\n  let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n  if (params.loop && nextSlide.length === 0) {\n    nextSlide = slides.eq(0);\n    nextSlide.addClass(params.slideNextClass);\n  }\n  // Prev Slide\n  let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n  if (params.loop && prevSlide.length === 0) {\n    prevSlide = slides.eq(-1);\n    prevSlide.addClass(params.slidePrevClass);\n  }\n  if (params.loop) {\n    // Duplicate to all looped slides\n    if (nextSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl\n        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`)\n        .addClass(params.slideDuplicateNextClass);\n    } else {\n      $wrapperEl\n        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`)\n        .addClass(params.slideDuplicateNextClass);\n    }\n    if (prevSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl\n        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`)\n        .addClass(params.slideDuplicatePrevClass);\n    } else {\n      $wrapperEl\n        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`)\n        .addClass(params.slideDuplicatePrevClass);\n    }\n  }\n}\n\nfunction updateActiveIndex (newActiveIndex) {\n  const swiper = this;\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  const {\n    slidesGrid, snapGrid, params, activeIndex: previousIndex, realIndex: previousRealIndex, snapIndex: previousSnapIndex,\n  } = swiper;\n  let activeIndex = newActiveIndex;\n  let snapIndex;\n  if (typeof activeIndex === 'undefined') {\n    for (let i = 0; i < slidesGrid.length; i += 1) {\n      if (typeof slidesGrid[i + 1] !== 'undefined') {\n        if (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    }\n    // Normalize slideIndex\n    if (params.normalizeSlideIndex) {\n      if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n    }\n  }\n  if (snapGrid.indexOf(translate) >= 0) {\n    snapIndex = snapGrid.indexOf(translate);\n  } else {\n    const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n  }\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n  if (activeIndex === previousIndex) {\n    if (snapIndex !== previousSnapIndex) {\n      swiper.snapIndex = snapIndex;\n      swiper.emit('snapIndexChange');\n    }\n    return;\n  }\n\n  // Get real index\n  const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n\n  Utils.extend(swiper, {\n    snapIndex,\n    realIndex,\n    previousIndex,\n    activeIndex,\n  });\n  swiper.emit('activeIndexChange');\n  swiper.emit('snapIndexChange');\n  if (previousRealIndex !== realIndex) {\n    swiper.emit('realIndexChange');\n  }\n  if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n    swiper.emit('slideChange');\n  }\n}\n\nfunction updateClickedSlide (e) {\n  const swiper = this;\n  const params = swiper.params;\n  const slide = $(e.target).closest(`.${params.slideClass}`)[0];\n  let slideFound = false;\n  if (slide) {\n    for (let i = 0; i < swiper.slides.length; i += 1) {\n      if (swiper.slides[i] === slide) slideFound = true;\n    }\n  }\n\n  if (slide && slideFound) {\n    swiper.clickedSlide = slide;\n    if (swiper.virtual && swiper.params.virtual.enabled) {\n      swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n    } else {\n      swiper.clickedIndex = $(slide).index();\n    }\n  } else {\n    swiper.clickedSlide = undefined;\n    swiper.clickedIndex = undefined;\n    return;\n  }\n  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n    swiper.slideToClickedSlide();\n  }\n}\n\nvar update = {\n  updateSize,\n  updateSlides,\n  updateAutoHeight,\n  updateSlidesOffset,\n  updateSlidesProgress,\n  updateProgress,\n  updateSlidesClasses,\n  updateActiveIndex,\n  updateClickedSlide,\n};\n\nfunction getTranslate (axis = this.isHorizontal() ? 'x' : 'y') {\n  const swiper = this;\n\n  const {\n    params, rtlTranslate: rtl, translate, $wrapperEl,\n  } = swiper;\n\n  if (params.virtualTranslate) {\n    return rtl ? -translate : translate;\n  }\n  if (params.cssMode) {\n    return translate;\n  }\n\n  let currentTranslate = Utils.getTranslate($wrapperEl[0], axis);\n  if (rtl) currentTranslate = -currentTranslate;\n\n  return currentTranslate || 0;\n}\n\nfunction setTranslate (translate, byController) {\n  const swiper = this;\n  const {\n    rtlTranslate: rtl, params, $wrapperEl, wrapperEl, 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  swiper.previousTranslate = swiper.translate;\n  swiper.translate = swiper.isHorizontal() ? x : y;\n\n  // Check if we need to update progress\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (translate - swiper.minTranslate()) / (translatesDiff);\n  }\n  if (newProgress !== progress) {\n    swiper.updateProgress(translate);\n  }\n\n  swiper.emit('setTranslate', swiper.translate, byController);\n}\n\nfunction minTranslate () {\n  return (-this.snapGrid[0]);\n}\n\nfunction maxTranslate () {\n  return (-this.snapGrid[this.snapGrid.length - 1]);\n}\n\nfunction translateTo (translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n  const swiper = this;\n\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;\n  else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;\n  else newTranslate = translate;\n\n  // Update progress\n  swiper.updateProgress(newTranslate);\n\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    if (speed === 0) {\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n    } else {\n      // eslint-disable-next-line\n      if (wrapperEl.scrollTo) {\n        wrapperEl.scrollTo({\n          [isH ? 'left' : 'top']: -newTranslate,\n          behavior: 'smooth',\n        });\n      } else {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n      }\n    }\n    return true;\n  }\n\n  if (speed === 0) {\n    swiper.setTransition(0);\n    swiper.setTranslate(newTranslate);\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionEnd');\n    }\n  } else {\n    swiper.setTransition(speed);\n    swiper.setTranslate(newTranslate);\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionStart');\n    }\n    if (!swiper.animating) {\n      swiper.animating = true;\n      if (!swiper.onTranslateToWrapperTransitionEnd) {\n        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n          if (!swiper || swiper.destroyed) return;\n          if (e.target !== this) return;\n          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.onTranslateToWrapperTransitionEnd = null;\n          delete swiper.onTranslateToWrapperTransitionEnd;\n          if (runCallbacks) {\n            swiper.emit('transitionEnd');\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\nvar translate = {\n  getTranslate,\n  setTranslate,\n  minTranslate,\n  maxTranslate,\n  translateTo,\n};\n\nfunction 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\nfunction transitionStart (runCallbacks = true, direction) {\n  const swiper = this;\n  const { activeIndex, params, previousIndex } = swiper;\n  if (params.cssMode) return;\n  if (params.autoHeight) {\n    swiper.updateAutoHeight();\n  }\n\n  let dir = direction;\n  if (!dir) {\n    if (activeIndex > previousIndex) dir = 'next';\n    else if (activeIndex < previousIndex) dir = 'prev';\n    else dir = 'reset';\n  }\n\n  swiper.emit('transitionStart');\n\n  if (runCallbacks && activeIndex !== previousIndex) {\n    if (dir === 'reset') {\n      swiper.emit('slideResetTransitionStart');\n      return;\n    }\n    swiper.emit('slideChangeTransitionStart');\n    if (dir === 'next') {\n      swiper.emit('slideNextTransitionStart');\n    } else {\n      swiper.emit('slidePrevTransitionStart');\n    }\n  }\n}\n\nfunction transitionEnd (runCallbacks = true, direction) {\n  const swiper = this;\n  const { activeIndex, previousIndex, params } = swiper;\n  swiper.animating = false;\n  if (params.cssMode) return;\n  swiper.setTransition(0);\n\n  let dir = direction;\n  if (!dir) {\n    if (activeIndex > previousIndex) dir = 'next';\n    else if (activeIndex < previousIndex) dir = 'prev';\n    else dir = 'reset';\n  }\n\n  swiper.emit('transitionEnd');\n\n  if (runCallbacks && activeIndex !== previousIndex) {\n    if (dir === 'reset') {\n      swiper.emit('slideResetTransitionEnd');\n      return;\n    }\n    swiper.emit('slideChangeTransitionEnd');\n    if (dir === 'next') {\n      swiper.emit('slideNextTransitionEnd');\n    } else {\n      swiper.emit('slidePrevTransitionEnd');\n    }\n  }\n}\n\nvar transition = {\n  setTransition,\n  transitionStart,\n  transitionEnd,\n};\n\nfunction slideTo (index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  let slideIndex = index;\n  if (slideIndex < 0) slideIndex = 0;\n\n  const {\n    params, snapGrid, slidesGrid, previousIndex, activeIndex, rtlTranslate: rtl, wrapperEl,\n  } = swiper;\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n  let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n  if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n    swiper.emit('beforeSlideChangeStart');\n  }\n\n  const translate = -snapGrid[snapIndex];\n\n  // Update progress\n  swiper.updateProgress(translate);\n\n  // Normalize slideIndex\n  if (params.normalizeSlideIndex) {\n    for (let i = 0; i < slidesGrid.length; i += 1) {\n      if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {\n        slideIndex = i;\n      }\n    }\n  }\n  // Directions locks\n  if (swiper.initialized && slideIndex !== activeIndex) {\n    if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n      return false;\n    }\n    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n      if ((activeIndex || 0) !== slideIndex) return false;\n    }\n  }\n\n  let direction;\n  if (slideIndex > activeIndex) direction = 'next';\n  else if (slideIndex < activeIndex) direction = 'prev';\n  else direction = 'reset';\n\n\n  // Update Index\n  if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {\n    swiper.updateActiveIndex(slideIndex);\n    // Update Height\n    if (params.autoHeight) {\n      swiper.updateAutoHeight();\n    }\n    swiper.updateSlidesClasses();\n    if (params.effect !== 'slide') {\n      swiper.setTranslate(translate);\n    }\n    if (direction !== 'reset') {\n      swiper.transitionStart(runCallbacks, direction);\n      swiper.transitionEnd(runCallbacks, direction);\n    }\n    return false;\n  }\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    let t = -translate;\n    if (rtl) {\n      t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;\n    }\n    if (speed === 0) {\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n    } else {\n      // eslint-disable-next-line\n      if (wrapperEl.scrollTo) {\n        wrapperEl.scrollTo({\n          [isH ? 'left' : 'top']: t,\n          behavior: 'smooth',\n        });\n      } else {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n      }\n    }\n    return true;\n  }\n\n  if (speed === 0) {\n    swiper.setTransition(0);\n    swiper.setTranslate(translate);\n    swiper.updateActiveIndex(slideIndex);\n    swiper.updateSlidesClasses();\n    swiper.emit('beforeTransitionStart', speed, internal);\n    swiper.transitionStart(runCallbacks, direction);\n    swiper.transitionEnd(runCallbacks, direction);\n  } else {\n    swiper.setTransition(speed);\n    swiper.setTranslate(translate);\n    swiper.updateActiveIndex(slideIndex);\n    swiper.updateSlidesClasses();\n    swiper.emit('beforeTransitionStart', speed, internal);\n    swiper.transitionStart(runCallbacks, direction);\n    if (!swiper.animating) {\n      swiper.animating = true;\n      if (!swiper.onSlideToWrapperTransitionEnd) {\n        swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n          if (!swiper || swiper.destroyed) return;\n          if (e.target !== this) return;\n          swiper.$wrapperEl[0].removeEventListener('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      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n    }\n  }\n\n  return true;\n}\n\nfunction slideToLoop (index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  let newIndex = index;\n  if (swiper.params.loop) {\n    newIndex += swiper.loopedSlides;\n  }\n\n  return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext (speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  const { params, animating } = swiper;\n  const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;\n  if (params.loop) {\n    if (animating) return false;\n    swiper.loopFix();\n    // eslint-disable-next-line\n    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n  }\n  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev (speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  const {\n    params, animating, snapGrid, slidesGrid, rtlTranslate,\n  } = swiper;\n\n  if (params.loop) {\n    if (animating) return false;\n    swiper.loopFix();\n    // eslint-disable-next-line\n    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n  }\n  const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n  function normalize(val) {\n    if (val < 0) return -Math.floor(Math.abs(val));\n    return Math.floor(val);\n  }\n  const normalizedTranslate = normalize(translate);\n  const normalizedSnapGrid = snapGrid.map((val) => normalize(val));\n  const normalizedSlidesGrid = slidesGrid.map((val) => normalize(val));\n\n  const currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];\n  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n  if (typeof prevSnap === 'undefined' && params.cssMode) {\n    snapGrid.forEach((snap) => {\n      if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap;\n    });\n  }\n  let prevIndex;\n  if (typeof prevSnap !== 'undefined') {\n    prevIndex = slidesGrid.indexOf(prevSnap);\n    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n  }\n  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset (speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest (speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n  const swiper = this;\n  let index = swiper.activeIndex;\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n  const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n  if (translate >= swiper.snapGrid[snapIndex]) {\n    // The current translate is on or after the current snap index, so the choice\n    // is between the current index and the one after it.\n    const currentSnap = swiper.snapGrid[snapIndex];\n    const nextSnap = swiper.snapGrid[snapIndex + 1];\n    if ((translate - currentSnap) > (nextSnap - currentSnap) * threshold) {\n      index += swiper.params.slidesPerGroup;\n    }\n  } else {\n    // The current translate is before the current snap index, so the choice\n    // is between the current index and the one before it.\n    const prevSnap = swiper.snapGrid[snapIndex - 1];\n    const currentSnap = swiper.snapGrid[snapIndex];\n    if ((translate - prevSnap) <= (currentSnap - prevSnap) * threshold) {\n      index -= swiper.params.slidesPerGroup;\n    }\n  }\n  index = Math.max(index, 0);\n  index = Math.min(index, swiper.slidesGrid.length - 1);\n\n  return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n\nfunction slideToClickedSlide () {\n  const swiper = this;\n  const { params, $wrapperEl } = swiper;\n\n  const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n  let slideToIndex = swiper.clickedIndex;\n  let realIndex;\n  if (params.loop) {\n    if (swiper.animating) return;\n    realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n    if (params.centeredSlides) {\n      if (\n        (slideToIndex < swiper.loopedSlides - (slidesPerView / 2))\n        || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))\n      ) {\n        swiper.loopFix();\n        slideToIndex = $wrapperEl\n          .children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`)\n          .eq(0)\n          .index();\n\n        Utils.nextTick(() => {\n          swiper.slideTo(slideToIndex);\n        });\n      } else {\n        swiper.slideTo(slideToIndex);\n      }\n    } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n      swiper.loopFix();\n      slideToIndex = $wrapperEl\n        .children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`)\n        .eq(0)\n        .index();\n\n      Utils.nextTick(() => {\n        swiper.slideTo(slideToIndex);\n      });\n    } else {\n      swiper.slideTo(slideToIndex);\n    }\n  } else {\n    swiper.slideTo(slideToIndex);\n  }\n}\n\nvar slide = {\n  slideTo,\n  slideToLoop,\n  slideNext,\n  slidePrev,\n  slideReset,\n  slideToClosest,\n  slideToClickedSlide,\n};\n\nfunction loopCreate () {\n  const swiper = this;\n  const { params, $wrapperEl } = swiper;\n  // Remove duplicated slides\n  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n\n  let slides = $wrapperEl.children(`.${params.slideClass}`);\n\n  if (params.loopFillGroupWithBlank) {\n    const blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);\n    if (blankSlidesNum !== params.slidesPerGroup) {\n      for (let i = 0; i < blankSlidesNum; i += 1) {\n        const blankNode = $(document$1.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n        $wrapperEl.append(blankNode);\n      }\n      slides = $wrapperEl.children(`.${params.slideClass}`);\n    }\n  }\n\n  if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n\n  swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n  swiper.loopedSlides += params.loopAdditionalSlides;\n  if (swiper.loopedSlides > slides.length) {\n    swiper.loopedSlides = slides.length;\n  }\n\n  const prependSlides = [];\n  const appendSlides = [];\n  slides.each((index, el) => {\n    const slide = $(el);\n    if (index < swiper.loopedSlides) appendSlides.push(el);\n    if (index < slides.length && index >= slides.length - swiper.loopedSlides) prependSlides.push(el);\n    slide.attr('data-swiper-slide-index', index);\n  });\n  for (let i = 0; i < appendSlides.length; i += 1) {\n    $wrapperEl.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n  }\n  for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n    $wrapperEl.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n  }\n}\n\nfunction loopFix () {\n  const swiper = this;\n\n  swiper.emit('beforeLoopFix');\n\n  const {\n    activeIndex, slides, loopedSlides, allowSlidePrev, allowSlideNext, snapGrid, rtlTranslate: rtl,\n  } = swiper;\n  let newIndex;\n  swiper.allowSlidePrev = true;\n  swiper.allowSlideNext = true;\n\n  const snapTranslate = -snapGrid[activeIndex];\n  const diff = snapTranslate - swiper.getTranslate();\n\n  // Fix For Negative Oversliding\n  if (activeIndex < loopedSlides) {\n    newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;\n    newIndex += loopedSlides;\n    const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n    if (slideChanged && diff !== 0) {\n      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n    }\n  } else if (activeIndex >= slides.length - loopedSlides) {\n    // Fix For Positive Oversliding\n    newIndex = -slides.length + activeIndex + loopedSlides;\n    newIndex += loopedSlides;\n    const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n    if (slideChanged && diff !== 0) {\n      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n    }\n  }\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n\n  swiper.emit('loopFix');\n}\n\nfunction loopDestroy () {\n  const swiper = this;\n  const { $wrapperEl, params, slides } = swiper;\n  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n  slides.removeAttr('data-swiper-slide-index');\n}\n\nvar loop = {\n  loopCreate,\n  loopFix,\n  loopDestroy,\n};\n\nfunction setGrabCursor (moving) {\n  const swiper = this;\n  if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;\n  const el = swiper.el;\n  el.style.cursor = 'move';\n  el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n  el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n  el.style.cursor = moving ? 'grabbing' : 'grab';\n}\n\nfunction unsetGrabCursor () {\n  const swiper = this;\n  if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;\n  swiper.el.style.cursor = '';\n}\n\nvar grabCursor = {\n  setGrabCursor,\n  unsetGrabCursor,\n};\n\nfunction appendSlide (slides) {\n  const swiper = this;\n  const { $wrapperEl, params } = swiper;\n  if (params.loop) {\n    swiper.loopDestroy();\n  }\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (let i = 0; i < slides.length; i += 1) {\n      if (slides[i]) $wrapperEl.append(slides[i]);\n    }\n  } else {\n    $wrapperEl.append(slides);\n  }\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n  if (!(params.observer && Support.observer)) {\n    swiper.update();\n  }\n}\n\nfunction prependSlide (slides) {\n  const swiper = this;\n  const { params, $wrapperEl, activeIndex } = swiper;\n\n  if (params.loop) {\n    swiper.loopDestroy();\n  }\n  let newActiveIndex = activeIndex + 1;\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (let i = 0; i < slides.length; i += 1) {\n      if (slides[i]) $wrapperEl.prepend(slides[i]);\n    }\n    newActiveIndex = activeIndex + slides.length;\n  } else {\n    $wrapperEl.prepend(slides);\n  }\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n  if (!(params.observer && Support.observer)) {\n    swiper.update();\n  }\n  swiper.slideTo(newActiveIndex, 0, false);\n}\n\nfunction addSlide (index, slides) {\n  const swiper = this;\n  const { $wrapperEl, params, activeIndex } = swiper;\n  let activeIndexBuffer = activeIndex;\n  if (params.loop) {\n    activeIndexBuffer -= swiper.loopedSlides;\n    swiper.loopDestroy();\n    swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n  }\n  const baseLength = swiper.slides.length;\n  if (index <= 0) {\n    swiper.prependSlide(slides);\n    return;\n  }\n  if (index >= baseLength) {\n    swiper.appendSlide(slides);\n    return;\n  }\n  let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n\n  const slidesBuffer = [];\n  for (let i = baseLength - 1; i >= index; i -= 1) {\n    const currentSlide = swiper.slides.eq(i);\n    currentSlide.remove();\n    slidesBuffer.unshift(currentSlide);\n  }\n\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (let i = 0; i < slides.length; i += 1) {\n      if (slides[i]) $wrapperEl.append(slides[i]);\n    }\n    newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n  } else {\n    $wrapperEl.append(slides);\n  }\n\n  for (let i = 0; i < slidesBuffer.length; i += 1) {\n    $wrapperEl.append(slidesBuffer[i]);\n  }\n\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n  if (!(params.observer && Support.observer)) {\n    swiper.update();\n  }\n  if (params.loop) {\n    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n  } else {\n    swiper.slideTo(newActiveIndex, 0, false);\n  }\n}\n\nfunction removeSlide (slidesIndexes) {\n  const swiper = this;\n  const { params, $wrapperEl, activeIndex } = swiper;\n\n  let activeIndexBuffer = activeIndex;\n  if (params.loop) {\n    activeIndexBuffer -= swiper.loopedSlides;\n    swiper.loopDestroy();\n    swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n  }\n  let newActiveIndex = activeIndexBuffer;\n  let indexToRemove;\n\n  if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n    for (let i = 0; i < slidesIndexes.length; i += 1) {\n      indexToRemove = slidesIndexes[i];\n      if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n      if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n    }\n    newActiveIndex = Math.max(newActiveIndex, 0);\n  } else {\n    indexToRemove = slidesIndexes;\n    if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n    if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n    newActiveIndex = Math.max(newActiveIndex, 0);\n  }\n\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n\n  if (!(params.observer && Support.observer)) {\n    swiper.update();\n  }\n  if (params.loop) {\n    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n  } else {\n    swiper.slideTo(newActiveIndex, 0, false);\n  }\n}\n\nfunction removeAllSlides () {\n  const swiper = this;\n\n  const slidesIndexes = [];\n  for (let i = 0; i < swiper.slides.length; i += 1) {\n    slidesIndexes.push(i);\n  }\n  swiper.removeSlide(slidesIndexes);\n}\n\nvar manipulation = {\n  appendSlide,\n  prependSlide,\n  addSlide,\n  removeSlide,\n  removeAllSlides,\n};\n\nconst Device = (function Device() {\n  const platform = window.navigator.platform;\n  const ua = window.navigator.userAgent;\n\n  const device = {\n    ios: false,\n    android: false,\n    androidChrome: false,\n    desktop: false,\n    iphone: false,\n    ipod: false,\n    ipad: false,\n    edge: false,\n    ie: false,\n    firefox: false,\n    macos: false,\n    windows: false,\n    cordova: !!(window.cordova || window.phonegap),\n    phonegap: !!(window.cordova || window.phonegap),\n    electron: false,\n  };\n\n  const screenWidth = window.screen.width;\n  const screenHeight = window.screen.height;\n\n  const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n  let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n  const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n  const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n  const ie = ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\n  const edge = ua.indexOf('Edge/') >= 0;\n  const firefox = ua.indexOf('Gecko/') >= 0 && ua.indexOf('Firefox/') >= 0;\n  const windows = platform === 'Win32';\n  const electron = ua.toLowerCase().indexOf('electron') >= 0;\n  let macos = platform === 'MacIntel';\n\n  // iPadOs 13 fix\n  if (!ipad\n    && macos\n    && Support.touch\n    && (\n      (screenWidth === 1024 && screenHeight === 1366) // Pro 12.9\n      || (screenWidth === 834 && screenHeight === 1194) // Pro 11\n      || (screenWidth === 834 && screenHeight === 1112) // Pro 10.5\n      || (screenWidth === 768 && screenHeight === 1024) // other\n    )\n  ) {\n    ipad = ua.match(/(Version)\\/([\\d.]+)/);\n    macos = false;\n  }\n\n  device.ie = ie;\n  device.edge = edge;\n  device.firefox = firefox;\n\n  // Android\n  if (android && !windows) {\n    device.os = 'android';\n    device.osVersion = android[2];\n    device.android = true;\n    device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\n  }\n  if (ipad || iphone || ipod) {\n    device.os = 'ios';\n    device.ios = true;\n  }\n  // iOS\n  if (iphone && !ipod) {\n    device.osVersion = iphone[2].replace(/_/g, '.');\n    device.iphone = true;\n  }\n  if (ipad) {\n    device.osVersion = ipad[2].replace(/_/g, '.');\n    device.ipad = true;\n  }\n  if (ipod) {\n    device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n    device.ipod = true;\n  }\n  // iOS 8+ changed UA\n  if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\n    if (device.osVersion.split('.')[0] === '10') {\n      device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\n    }\n  }\n\n  // Webview\n  device.webView = !!((iphone || ipad || ipod) && (ua.match(/.*AppleWebKit(?!.*Safari)/i) || window.navigator.standalone))\n    || (window.matchMedia && window.matchMedia('(display-mode: standalone)').matches);\n  device.webview = device.webView;\n  device.standalone = device.webView;\n\n  // Desktop\n  device.desktop = !(device.ios || device.android) || electron;\n  if (device.desktop) {\n    device.electron = electron;\n    device.macos = macos;\n    device.windows = windows;\n    if (device.macos) {\n      device.os = 'macos';\n    }\n    if (device.windows) {\n      device.os = 'windows';\n    }\n  }\n\n  // Pixel Ratio\n  device.pixelRatio = window.devicePixelRatio || 1;\n\n  // Export object\n  return device;\n}());\n\nfunction onTouchStart (event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  const { params, touches } = swiper;\n\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return;\n  }\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  const $targetEl = $(e.target);\n\n  if (params.touchEventsTarget === 'wrapper') {\n    if (!$targetEl.closest(swiper.wrapperEl).length) return;\n  }\n  data.isTouchEvent = e.type === 'touchstart';\n  if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n  if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n  if (data.isTouched && data.isMoved) return;\n  if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`)[0]) {\n    swiper.allowClick = true;\n    return;\n  }\n  if (params.swipeHandler) {\n    if (!$targetEl.closest(params.swipeHandler)[0]) return;\n  }\n\n  touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n  touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n  const startX = touches.currentX;\n  const startY = touches.currentY;\n\n  // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n  const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n  const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n  if (\n    edgeSwipeDetection\n    && ((startX <= edgeSwipeThreshold)\n    || (startX >= window.screen.width - edgeSwipeThreshold))\n  ) {\n    return;\n  }\n\n  Utils.extend(data, {\n    isTouched: true,\n    isMoved: false,\n    allowTouchCallbacks: true,\n    isScrolling: undefined,\n    startMoving: undefined,\n  });\n\n  touches.startX = startX;\n  touches.startY = startY;\n  data.touchStartTime = Utils.now();\n  swiper.allowClick = true;\n  swiper.updateSize();\n  swiper.swipeDirection = undefined;\n  if (params.threshold > 0) data.allowThresholdMove = false;\n  if (e.type !== 'touchstart') {\n    let preventDefault = true;\n    if ($targetEl.is(data.formElements)) preventDefault = false;\n    if (\n      document$1.activeElement\n      && $(document$1.activeElement).is(data.formElements)\n      && document$1.activeElement !== $targetEl[0]\n    ) {\n      document$1.activeElement.blur();\n    }\n\n    const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n    if (params.touchStartForcePreventDefault || shouldPreventDefault) {\n      e.preventDefault();\n    }\n  }\n  swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove (event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  const { params, touches, rtlTranslate: rtl } = swiper;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  if (!data.isTouched) {\n    if (data.startMoving && data.isScrolling) {\n      swiper.emit('touchMoveOpposite', e);\n    }\n    return;\n  }\n  if (data.isTouchEvent && e.type !== 'touchmove') return;\n  const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n  const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n  const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n  if (e.preventedByNestedSwiper) {\n    touches.startX = pageX;\n    touches.startY = pageY;\n    return;\n  }\n  if (!swiper.allowTouchMove) {\n    // isMoved = true;\n    swiper.allowClick = false;\n    if (data.isTouched) {\n      Utils.extend(touches, {\n        startX: pageX,\n        startY: pageY,\n        currentX: pageX,\n        currentY: pageY,\n      });\n      data.touchStartTime = Utils.now();\n    }\n    return;\n  }\n  if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n    if (swiper.isVertical()) {\n      // Vertical\n      if (\n        (pageY < touches.startY && swiper.translate <= swiper.maxTranslate())\n        || (pageY > touches.startY && swiper.translate >= swiper.minTranslate())\n      ) {\n        data.isTouched = false;\n        data.isMoved = false;\n        return;\n      }\n    } else if (\n      (pageX < touches.startX && swiper.translate <= swiper.maxTranslate())\n      || (pageX > touches.startX && swiper.translate >= swiper.minTranslate())\n    ) {\n      return;\n    }\n  }\n  if (data.isTouchEvent && document$1.activeElement) {\n    if (e.target === document$1.activeElement && $(e.target).is(data.formElements)) {\n      data.isMoved = true;\n      swiper.allowClick = false;\n      return;\n    }\n  }\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchMove', e);\n  }\n  if (e.targetTouches && e.targetTouches.length > 1) return;\n\n  touches.currentX = pageX;\n  touches.currentY = pageY;\n\n  const diffX = touches.currentX - touches.startX;\n  const diffY = touches.currentY - touches.startY;\n  if (swiper.params.threshold && Math.sqrt((diffX ** 2) + (diffY ** 2)) < swiper.params.threshold) return;\n\n  if (typeof data.isScrolling === 'undefined') {\n    let touchAngle;\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  if (data.isScrolling) {\n    swiper.emit('touchMoveOpposite', e);\n  }\n  if (typeof data.startMoving === 'undefined') {\n    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n      data.startMoving = true;\n    }\n  }\n  if (data.isScrolling) {\n    data.isTouched = false;\n    return;\n  }\n  if (!data.startMoving) {\n    return;\n  }\n  swiper.allowClick = false;\n  if (!params.cssMode && e.cancelable) {\n    e.preventDefault();\n  }\n  if (params.touchMoveStopPropagation && !params.nested) {\n    e.stopPropagation();\n  }\n\n  if (!data.isMoved) {\n    if (params.loop) {\n      swiper.loopFix();\n    }\n    data.startTranslate = swiper.getTranslate();\n    swiper.setTransition(0);\n    if (swiper.animating) {\n      swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n    }\n    data.allowMomentumBounce = false;\n    // Grab Cursor\n    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n      swiper.setGrabCursor(true);\n    }\n    swiper.emit('sliderFirstMove', e);\n  }\n  swiper.emit('sliderMove', e);\n  data.isMoved = true;\n\n  let diff = swiper.isHorizontal() ? diffX : diffY;\n  touches.diff = diff;\n\n  diff *= params.touchRatio;\n  if (rtl) diff = -diff;\n\n  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n  data.currentTranslate = diff + data.startTranslate;\n\n  let disableParentSwiper = true;\n  let resistanceRatio = params.resistanceRatio;\n  if (params.touchReleaseOnEdges) {\n    resistanceRatio = 0;\n  }\n  if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {\n    disableParentSwiper = false;\n    if (params.resistance) 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  }\n\n  // Directions locks\n  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n\n\n  // Threshold\n  if (params.threshold > 0) {\n    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n      if (!data.allowThresholdMove) {\n        data.allowThresholdMove = true;\n        touches.startX = touches.currentX;\n        touches.startY = touches.currentY;\n        data.currentTranslate = data.startTranslate;\n        touches.diff = swiper.isHorizontal() ? 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;\n\n  // Update active index in free mode\n  if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n  if (params.freeMode) {\n    // Velocity\n    if (data.velocities.length === 0) {\n      data.velocities.push({\n        position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n        time: data.touchStartTime,\n      });\n    }\n    data.velocities.push({\n      position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n      time: Utils.now(),\n    });\n  }\n  // Update progress\n  swiper.updateProgress(data.currentTranslate);\n  // Update translate\n  swiper.setTranslate(data.currentTranslate);\n}\n\nfunction onTouchEnd (event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n\n  const {\n    params, touches, rtlTranslate: rtl, $wrapperEl, slidesGrid, snapGrid,\n  } = swiper;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchEnd', e);\n  }\n  data.allowTouchCallbacks = false;\n  if (!data.isTouched) {\n    if (data.isMoved && params.grabCursor) {\n      swiper.setGrabCursor(false);\n    }\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n  // Return Grab Cursor\n  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n    swiper.setGrabCursor(false);\n  }\n\n  // Time diff\n  const touchEndTime = Utils.now();\n  const timeDiff = touchEndTime - data.touchStartTime;\n\n  // Tap, doubleTap, Click\n  if (swiper.allowClick) {\n    swiper.updateClickedSlide(e);\n    swiper.emit('tap click', e);\n    if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {\n      swiper.emit('doubleTap doubleClick', e);\n    }\n  }\n\n  data.lastClickTime = Utils.now();\n  Utils.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  data.isTouched = false;\n  data.isMoved = false;\n  data.startMoving = false;\n\n  let currentPos;\n  if (params.followFinger) {\n    currentPos = rtl ? swiper.translate : -swiper.translate;\n  } else {\n    currentPos = -data.currentTranslate;\n  }\n\n  if (params.cssMode) {\n    return;\n  }\n\n  if (params.freeMode) {\n    if (currentPos < -swiper.minTranslate()) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    if (currentPos > -swiper.maxTranslate()) {\n      if (swiper.slides.length < snapGrid.length) {\n        swiper.slideTo(snapGrid.length - 1);\n      } else {\n        swiper.slideTo(swiper.slides.length - 1);\n      }\n      return;\n    }\n\n    if (params.freeModeMomentum) {\n      if (data.velocities.length > 1) {\n        const lastMoveEvent = data.velocities.pop();\n        const velocityEvent = data.velocities.pop();\n\n        const distance = lastMoveEvent.position - velocityEvent.position;\n        const time = lastMoveEvent.time - velocityEvent.time;\n        swiper.velocity = distance / time;\n        swiper.velocity /= 2;\n        if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {\n          swiper.velocity = 0;\n        }\n        // this implies that the user stopped moving a finger then released.\n        // There would be no events with distance zero, so the last event is stale.\n        if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {\n          swiper.velocity = 0;\n        }\n      } else {\n        swiper.velocity = 0;\n      }\n      swiper.velocity *= params.freeModeMomentumVelocityRatio;\n\n      data.velocities.length = 0;\n      let momentumDuration = 1000 * params.freeModeMomentumRatio;\n      const momentumDistance = swiper.velocity * momentumDuration;\n\n      let newPosition = swiper.translate + momentumDistance;\n      if (rtl) newPosition = -newPosition;\n\n      let doBounce = false;\n      let afterBouncePosition;\n      const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n      let needsLoopFix;\n      if (newPosition < swiper.maxTranslate()) {\n        if (params.freeModeMomentumBounce) {\n          if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n            newPosition = swiper.maxTranslate() - bounceAmount;\n          }\n          afterBouncePosition = swiper.maxTranslate();\n          doBounce = true;\n          data.allowMomentumBounce = true;\n        } else {\n          newPosition = swiper.maxTranslate();\n        }\n        if (params.loop && params.centeredSlides) needsLoopFix = true;\n      } else if (newPosition > swiper.minTranslate()) {\n        if (params.freeModeMomentumBounce) {\n          if (newPosition - swiper.minTranslate() > bounceAmount) {\n            newPosition = swiper.minTranslate() + bounceAmount;\n          }\n          afterBouncePosition = swiper.minTranslate();\n          doBounce = true;\n          data.allowMomentumBounce = true;\n        } else {\n          newPosition = swiper.minTranslate();\n        }\n        if (params.loop && params.centeredSlides) needsLoopFix = true;\n      } else if (params.freeModeSticky) {\n        let nextSlide;\n        for (let j = 0; j < snapGrid.length; j += 1) {\n          if (snapGrid[j] > -newPosition) {\n            nextSlide = j;\n            break;\n          }\n        }\n\n        if (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        newPosition = -newPosition;\n      }\n      if (needsLoopFix) {\n        swiper.once('transitionEnd', () => {\n          swiper.loopFix();\n        });\n      }\n      // Fix duration\n      if (swiper.velocity !== 0) {\n        if (rtl) {\n          momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n        } else {\n          momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n        }\n        if (params.freeModeSticky) {\n          // If freeModeSticky is active and the user ends a swipe with a slow-velocity\n          // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n          // It's easy to see this when simulating touch with mouse events. To fix this,\n          // limit single-slide swipes to the default slide duration. This also has the\n          // nice side effect of matching slide speed if the user stopped moving before\n          // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n          // For faster swipes, also apply limits (albeit higher ones).\n          const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n          const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n          if (moveDistance < currentSlideSize) {\n            momentumDuration = params.speed;\n          } else if (moveDistance < 2 * currentSlideSize) {\n            momentumDuration = params.speed * 1.5;\n          } else {\n            momentumDuration = params.speed * 2.5;\n          }\n        }\n      } else if (params.freeModeSticky) {\n        swiper.slideToClosest();\n        return;\n      }\n\n      if (params.freeModeMomentumBounce && 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          swiper.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        swiper.updateProgress(newPosition);\n        swiper.setTransition(momentumDuration);\n        swiper.setTranslate(newPosition);\n        swiper.transitionStart(true, swiper.swipeDirection);\n        if (!swiper.animating) {\n          swiper.animating = true;\n          $wrapperEl.transitionEnd(() => {\n            if (!swiper || swiper.destroyed) return;\n            swiper.transitionEnd();\n          });\n        }\n      } else {\n        swiper.updateProgress(newPosition);\n      }\n\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    } else if (params.freeModeSticky) {\n      swiper.slideToClosest();\n      return;\n    }\n\n    if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {\n      swiper.updateProgress();\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n    return;\n  }\n\n  // Find current slide\n  let stopIndex = 0;\n  let groupSize = swiper.slidesSizesGrid[0];\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    if (typeof slidesGrid[i + increment] !== 'undefined') {\n      if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n        stopIndex = i;\n        groupSize = slidesGrid[i + increment] - slidesGrid[i];\n      }\n    } else if (currentPos >= slidesGrid[i]) {\n      stopIndex = i;\n      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n    }\n  }\n\n  // Find current slide size\n  const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n  const increment = (stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);\n\n  if (timeDiff > params.longSwipesMs) {\n    // Long touches\n    if (!params.longSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    if (swiper.swipeDirection === 'next') {\n      if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);\n      else swiper.slideTo(stopIndex);\n    }\n    if (swiper.swipeDirection === 'prev') {\n      if (ratio > (1 - params.longSwipesRatio)) swiper.slideTo(stopIndex + increment);\n      else swiper.slideTo(stopIndex);\n    }\n  } else {\n    // Short swipes\n    if (!params.shortSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n    if (!isNavButtonTarget) {\n      if (swiper.swipeDirection === 'next') {\n        swiper.slideTo(stopIndex + increment);\n      }\n      if (swiper.swipeDirection === 'prev') {\n        swiper.slideTo(stopIndex);\n      }\n    } else if (e.target === swiper.navigation.nextEl) {\n      swiper.slideTo(stopIndex + increment);\n    } else {\n      swiper.slideTo(stopIndex);\n    }\n  }\n}\n\nfunction onResize () {\n  const swiper = this;\n\n  const { params, el } = swiper;\n\n  if (el && el.offsetWidth === 0) return;\n\n  // Breakpoints\n  if (params.breakpoints) {\n    swiper.setBreakpoint();\n  }\n\n  // Save locks\n  const { allowSlideNext, allowSlidePrev, snapGrid } = swiper;\n\n  // Disable locks on resize\n  swiper.allowSlideNext = true;\n  swiper.allowSlidePrev = true;\n\n  swiper.updateSize();\n  swiper.updateSlides();\n\n  swiper.updateSlidesClasses();\n  if ((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  }\n  // Return locks after resize\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n\n  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n    swiper.checkOverflow();\n  }\n}\n\nfunction onClick (e) {\n  const swiper = this;\n  if (!swiper.allowClick) {\n    if (swiper.params.preventClicks) e.preventDefault();\n    if (swiper.params.preventClicksPropagation && swiper.animating) {\n      e.stopPropagation();\n      e.stopImmediatePropagation();\n    }\n  }\n}\n\nfunction onScroll () {\n  const swiper = this;\n  const { wrapperEl, rtlTranslate } = swiper;\n  swiper.previousTranslate = swiper.translate;\n  if (swiper.isHorizontal()) {\n    if (rtlTranslate) {\n      swiper.translate = ((wrapperEl.scrollWidth - wrapperEl.offsetWidth) - wrapperEl.scrollLeft);\n    } else {\n      swiper.translate = -wrapperEl.scrollLeft;\n    }\n  } else {\n    swiper.translate = -wrapperEl.scrollTop;\n  }\n  // eslint-disable-next-line\n  if (swiper.translate === -0) swiper.translate = 0;\n\n  swiper.updateActiveIndex();\n  swiper.updateSlidesClasses();\n\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (swiper.translate - swiper.minTranslate()) / (translatesDiff);\n  }\n  if (newProgress !== swiper.progress) {\n    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n  }\n\n  swiper.emit('setTranslate', swiper.translate, false);\n}\n\nlet dummyEventAttached = false;\nfunction dummyEventListener() {}\n\nfunction attachEvents() {\n  const swiper = this;\n  const {\n    params, touchEvents, el, wrapperEl,\n  } = swiper;\n\n  swiper.onTouchStart = onTouchStart.bind(swiper);\n  swiper.onTouchMove = onTouchMove.bind(swiper);\n  swiper.onTouchEnd = onTouchEnd.bind(swiper);\n  if (params.cssMode) {\n    swiper.onScroll = onScroll.bind(swiper);\n  }\n\n  swiper.onClick = onClick.bind(swiper);\n\n  const capture = !!params.nested;\n\n  // Touch Events\n  if (!Support.touch && Support.pointerEvents) {\n    el.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n    document$1.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n    document$1.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n  } else {\n    if (Support.touch) {\n      const passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n      el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n      el.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture } : capture);\n      el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n      if (touchEvents.cancel) {\n        el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n      }\n      if (!dummyEventAttached) {\n        document$1.addEventListener('touchstart', dummyEventListener);\n        dummyEventAttached = true;\n      }\n    }\n    if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n      el.addEventListener('mousedown', swiper.onTouchStart, false);\n      document$1.addEventListener('mousemove', swiper.onTouchMove, capture);\n      document$1.addEventListener('mouseup', swiper.onTouchEnd, false);\n    }\n  }\n  // Prevent Links Clicks\n  if (params.preventClicks || params.preventClicksPropagation) {\n    el.addEventListener('click', swiper.onClick, true);\n  }\n  if (params.cssMode) {\n    wrapperEl.addEventListener('scroll', swiper.onScroll);\n  }\n\n  // Resize handler\n  if (params.updateOnWindowResize) {\n    swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);\n  } else {\n    swiper.on('observerUpdate', onResize, true);\n  }\n}\n\nfunction detachEvents() {\n  const swiper = this;\n\n  const {\n    params, touchEvents, el, wrapperEl,\n  } = swiper;\n\n  const capture = !!params.nested;\n\n  // Touch Events\n  if (!Support.touch && Support.pointerEvents) {\n    el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n    document$1.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n    document$1.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n  } else {\n    if (Support.touch) {\n      const passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n      el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n      el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n      el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n      if (touchEvents.cancel) {\n        el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n      }\n    }\n    if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n      el.removeEventListener('mousedown', swiper.onTouchStart, false);\n      document$1.removeEventListener('mousemove', swiper.onTouchMove, capture);\n      document$1.removeEventListener('mouseup', swiper.onTouchEnd, false);\n    }\n  }\n  // Prevent Links Clicks\n  if (params.preventClicks || params.preventClicksPropagation) {\n    el.removeEventListener('click', swiper.onClick, true);\n  }\n\n  if (params.cssMode) {\n    wrapperEl.removeEventListener('scroll', swiper.onScroll);\n  }\n\n  // Resize handler\n  swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);\n}\n\nvar events = {\n  attachEvents,\n  detachEvents,\n};\n\nfunction setBreakpoint () {\n  const swiper = this;\n  const {\n    activeIndex, initialized, loopedSlides = 0, params, $el,\n  } = swiper;\n  const breakpoints = params.breakpoints;\n  if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) return;\n\n  // Get breakpoint for window width and update parameters\n  const breakpoint = swiper.getBreakpoint(breakpoints);\n\n  if (breakpoint && swiper.currentBreakpoint !== breakpoint) {\n    const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n    if (breakpointOnlyParams) {\n      ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach((param) => {\n        const paramValue = breakpointOnlyParams[param];\n        if (typeof paramValue === 'undefined') return;\n        if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {\n          breakpointOnlyParams[param] = 'auto';\n        } else if (param === 'slidesPerView') {\n          breakpointOnlyParams[param] = parseFloat(paramValue);\n        } else {\n          breakpointOnlyParams[param] = parseInt(paramValue, 10);\n        }\n      });\n    }\n\n    const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n    const wasMultiRow = params.slidesPerColumn > 1;\n    const isMultiRow = breakpointParams.slidesPerColumn > 1;\n    if (wasMultiRow && !isMultiRow) {\n      $el.removeClass(`${params.containerModifierClass}multirow ${params.containerModifierClass}multirow-column`);\n    } else if (!wasMultiRow && isMultiRow) {\n      $el.addClass(`${params.containerModifierClass}multirow`);\n      if (breakpointParams.slidesPerColumnFill === 'column') {\n        $el.addClass(`${params.containerModifierClass}multirow-column`);\n      }\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    Utils.extend(swiper.params, breakpointParams);\n\n    Utils.extend(swiper, {\n      allowTouchMove: swiper.params.allowTouchMove,\n      allowSlideNext: swiper.params.allowSlideNext,\n      allowSlidePrev: swiper.params.allowSlidePrev,\n    });\n\n    swiper.currentBreakpoint = breakpoint;\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\nfunction getBreakpoint (breakpoints) {\n  // Get breakpoint for window width\n  if (!breakpoints) return undefined;\n  let breakpoint = false;\n\n  const points = Object.keys(breakpoints).map((point) => {\n    if (typeof point === 'string' && point.indexOf('@') === 0) {\n      const minRatio = parseFloat(point.substr(1));\n      const value = window.innerHeight * minRatio;\n      return { value, point };\n    }\n    return { value: point, point };\n  });\n\n  points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n  for (let i = 0; i < points.length; i += 1) {\n    const { point, value } = points[i];\n    if (value <= window.innerWidth) {\n      breakpoint = point;\n    }\n  }\n  return breakpoint || 'max';\n}\n\nvar breakpoints = { setBreakpoint, getBreakpoint };\n\nfunction addClasses () {\n  const swiper = this;\n  const {\n    classNames, params, rtl, $el,\n  } = swiper;\n  const suffixes = [];\n\n  suffixes.push('initialized');\n  suffixes.push(params.direction);\n\n  if (params.freeMode) {\n    suffixes.push('free-mode');\n  }\n  if (params.autoHeight) {\n    suffixes.push('autoheight');\n  }\n  if (rtl) {\n    suffixes.push('rtl');\n  }\n  if (params.slidesPerColumn > 1) {\n    suffixes.push('multirow');\n    if (params.slidesPerColumnFill === 'column') {\n      suffixes.push('multirow-column');\n    }\n  }\n  if (Device.android) {\n    suffixes.push('android');\n  }\n  if (Device.ios) {\n    suffixes.push('ios');\n  }\n\n  if (params.cssMode) {\n    suffixes.push('css-mode');\n  }\n\n  suffixes.forEach((suffix) => {\n    classNames.push(params.containerModifierClass + suffix);\n  });\n\n  $el.addClass(classNames.join(' '));\n}\n\nfunction removeClasses () {\n  const swiper = this;\n  const { $el, classNames } = swiper;\n\n  $el.removeClass(classNames.join(' '));\n}\n\nvar classes = { addClasses, removeClasses };\n\nfunction loadImage (imageEl, src, srcset, sizes, checkForComplete, callback) {\n  let image;\n  function onReady() {\n    if (callback) callback();\n  }\n  const isPicture = $(imageEl).parent('picture')[0];\n\n  if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n    if (src) {\n      image = new window.Image();\n      image.onload = onReady;\n      image.onerror = onReady;\n      if (sizes) {\n        image.sizes = sizes;\n      }\n      if (srcset) {\n        image.srcset = srcset;\n      }\n      if (src) {\n        image.src = src;\n      }\n    } else {\n      onReady();\n    }\n  } else {\n    // image already loaded...\n    onReady();\n  }\n}\n\nfunction preloadImages () {\n  const swiper = this;\n  swiper.imagesToLoad = swiper.$el.find('img');\n  function onReady() {\n    if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n    if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n    if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n      if (swiper.params.updateOnImagesReady) swiper.update();\n      swiper.emit('imagesReady');\n    }\n  }\n  for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n    const imageEl = swiper.imagesToLoad[i];\n    swiper.loadImage(\n      imageEl,\n      imageEl.currentSrc || imageEl.getAttribute('src'),\n      imageEl.srcset || imageEl.getAttribute('srcset'),\n      imageEl.sizes || imageEl.getAttribute('sizes'),\n      true,\n      onReady\n    );\n  }\n}\n\nvar images = {\n  loadImage,\n  preloadImages,\n};\n\nfunction checkOverflow() {\n  const swiper = this;\n  const params = swiper.params;\n  const wasLocked = swiper.isLocked;\n  const lastSlidePosition = swiper.slides.length > 0 && (params.slidesOffsetBefore + (params.spaceBetween * (swiper.slides.length - 1)) + ((swiper.slides[0]).offsetWidth) * swiper.slides.length);\n\n  if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {\n    swiper.isLocked = lastSlidePosition <= swiper.size;\n  } else {\n    swiper.isLocked = swiper.snapGrid.length === 1;\n  }\n\n  swiper.allowSlideNext = !swiper.isLocked;\n  swiper.allowSlidePrev = !swiper.isLocked;\n\n  // events\n  if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n\n  if (wasLocked && wasLocked !== swiper.isLocked) {\n    swiper.isEnd = false;\n    if (swiper.navigation) swiper.navigation.update();\n  }\n}\n\nvar checkOverflow$1 = { checkOverflow };\n\nvar defaults = {\n  init: true,\n  direction: 'horizontal',\n  touchEventsTarget: 'container',\n  initialSlide: 0,\n  speed: 300,\n  cssMode: false,\n  updateOnWindowResize: true,\n  //\n  preventInteractionOnTransition: false,\n\n  // To support iOS's swipe-to-go-back gesture (when being used in-app).\n  edgeSwipeDetection: false,\n  edgeSwipeThreshold: 20,\n\n  // Free mode\n  freeMode: false,\n  freeModeMomentum: true,\n  freeModeMomentumRatio: 1,\n  freeModeMomentumBounce: true,\n  freeModeMomentumBounceRatio: 1,\n  freeModeMomentumVelocityRatio: 1,\n  freeModeSticky: false,\n  freeModeMinimumVelocity: 0.02,\n\n  // Autoheight\n  autoHeight: false,\n\n  // Set wrapper width\n  setWrapperSize: false,\n\n  // Virtual Translate\n  virtualTranslate: false,\n\n  // Effects\n  effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n  // Breakpoints\n  breakpoints: undefined,\n\n  // Slides grid\n  spaceBetween: 0,\n  slidesPerView: 1,\n  slidesPerColumn: 1,\n  slidesPerColumnFill: 'column',\n  slidesPerGroup: 1,\n  slidesPerGroupSkip: 0,\n  centeredSlides: false,\n  centeredSlidesBounds: false,\n  slidesOffsetBefore: 0, // in px\n  slidesOffsetAfter: 0, // in px\n  normalizeSlideIndex: true,\n  centerInsufficientSlides: false,\n\n  // Disable swiper and hide navigation when container not overflow\n  watchOverflow: false,\n\n  // Round length\n  roundLengths: false,\n\n  // Touches\n  touchRatio: 1,\n  touchAngle: 45,\n  simulateTouch: true,\n  shortSwipes: true,\n  longSwipes: true,\n  longSwipesRatio: 0.5,\n  longSwipesMs: 300,\n  followFinger: true,\n  allowTouchMove: true,\n  threshold: 0,\n  touchMoveStopPropagation: false,\n  touchStartPreventDefault: true,\n  touchStartForcePreventDefault: false,\n  touchReleaseOnEdges: false,\n\n  // Unique Navigation Elements\n  uniqueNavElements: true,\n\n  // Resistance\n  resistance: true,\n  resistanceRatio: 0.85,\n\n  // Progress\n  watchSlidesProgress: false,\n  watchSlidesVisibility: false,\n\n  // Cursor\n  grabCursor: false,\n\n  // Clicks\n  preventClicks: true,\n  preventClicksPropagation: true,\n  slideToClickedSlide: false,\n\n  // Images\n  preloadImages: true,\n  updateOnImagesReady: true,\n\n  // loop\n  loop: false,\n  loopAdditionalSlides: 0,\n  loopedSlides: null,\n  loopFillGroupWithBlank: false,\n\n  // Swiping/no swiping\n  allowSlidePrev: true,\n  allowSlideNext: true,\n  swipeHandler: null, // '.swipe-handler',\n  noSwiping: true,\n  noSwipingClass: 'swiper-no-swiping',\n  noSwipingSelector: null,\n\n  // Passive Listeners\n  passiveListeners: true,\n\n  // NS\n  containerModifierClass: 'swiper-container-', // NEW\n  slideClass: 'swiper-slide',\n  slideBlankClass: 'swiper-slide-invisible-blank',\n  slideActiveClass: 'swiper-slide-active',\n  slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n  slideVisibleClass: 'swiper-slide-visible',\n  slideDuplicateClass: 'swiper-slide-duplicate',\n  slideNextClass: 'swiper-slide-next',\n  slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n  slidePrevClass: 'swiper-slide-prev',\n  slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n  wrapperClass: 'swiper-wrapper',\n\n  // Callbacks\n  runCallbacksOnInit: true,\n};\n\n/* eslint no-param-reassign: \"off\" */\n\nconst prototypes = {\n  update,\n  translate,\n  transition,\n  slide,\n  loop,\n  grabCursor,\n  manipulation,\n  events,\n  breakpoints,\n  checkOverflow: checkOverflow$1,\n  classes,\n  images,\n};\n\nconst extendedDefaults = {};\n\nclass Swiper extends SwiperClass {\n  constructor(...args) {\n    let el;\n    let params;\n    if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {\n      params = args[0];\n    } else {\n      [el, params] = args;\n    }\n    if (!params) params = {};\n\n    params = Utils.extend({}, params);\n    if (el && !params.el) params.el = el;\n\n    super(params);\n\n    Object.keys(prototypes).forEach((prototypeGroup) => {\n      Object.keys(prototypes[prototypeGroup]).forEach((protoMethod) => {\n        if (!Swiper.prototype[protoMethod]) {\n          Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n        }\n      });\n    });\n\n    // Swiper Instance\n    const swiper = this;\n    if (typeof swiper.modules === 'undefined') {\n      swiper.modules = {};\n    }\n    Object.keys(swiper.modules).forEach((moduleName) => {\n      const module = swiper.modules[moduleName];\n      if (module.params) {\n        const moduleParamName = Object.keys(module.params)[0];\n        const moduleParams = module.params[moduleParamName];\n        if (typeof moduleParams !== 'object' || moduleParams === null) return;\n        if (!(moduleParamName in params && 'enabled' in moduleParams)) return;\n        if (params[moduleParamName] === true) {\n          params[moduleParamName] = { enabled: true };\n        }\n        if (\n          typeof params[moduleParamName] === 'object'\n          && !('enabled' in params[moduleParamName])\n        ) {\n          params[moduleParamName].enabled = true;\n        }\n        if (!params[moduleParamName]) params[moduleParamName] = { enabled: false };\n      }\n    });\n\n    // Extend defaults with modules params\n    const swiperParams = Utils.extend({}, defaults);\n    swiper.useModulesParams(swiperParams);\n\n    // Extend defaults with passed params\n    swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);\n    swiper.originalParams = Utils.extend({}, swiper.params);\n    swiper.passedParams = Utils.extend({}, params);\n\n    // Save Dom lib\n    swiper.$ = $;\n\n    // Find el\n    const $el = $(swiper.params.el);\n    el = $el[0];\n\n    if (!el) {\n      return undefined;\n    }\n\n    if ($el.length > 1) {\n      const swipers = [];\n      $el.each((index, containerEl) => {\n        const newParams = Utils.extend({}, params, { el: containerEl });\n        swipers.push(new Swiper(newParams));\n      });\n      return swipers;\n    }\n\n    el.swiper = swiper;\n    $el.data('swiper', swiper);\n\n    // Find Wrapper\n    let $wrapperEl;\n    if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n      $wrapperEl = $(el.shadowRoot.querySelector(`.${swiper.params.wrapperClass}`));\n      // Children needs to return slot items\n      $wrapperEl.children = (options) => $el.children(options);\n    } else {\n      $wrapperEl = $el.children(`.${swiper.params.wrapperClass}`);\n    }\n    // Extend Swiper\n    Utils.extend(swiper, {\n      $el,\n      el,\n      $wrapperEl,\n      wrapperEl: $wrapperEl[0],\n\n      // Classes\n      classNames: [],\n\n      // Slides\n      slides: $(),\n      slidesGrid: [],\n      snapGrid: [],\n      slidesSizesGrid: [],\n\n      // isDirection\n      isHorizontal() {\n        return swiper.params.direction === 'horizontal';\n      },\n      isVertical() {\n        return swiper.params.direction === 'vertical';\n      },\n      // 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      // Indexes\n      activeIndex: 0,\n      realIndex: 0,\n\n      //\n      isBeginning: true,\n      isEnd: false,\n\n      // Props\n      translate: 0,\n      previousTranslate: 0,\n      progress: 0,\n      velocity: 0,\n      animating: false,\n\n      // Locks\n      allowSlideNext: swiper.params.allowSlideNext,\n      allowSlidePrev: swiper.params.allowSlidePrev,\n\n      // Touch Events\n      touchEvents: (function touchEvents() {\n        const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n        let desktop = ['mousedown', 'mousemove', 'mouseup'];\n        if (Support.pointerEvents) {\n          desktop = ['pointerdown', 'pointermove', 'pointerup'];\n        }\n        swiper.touchEventsTouch = {\n          start: touch[0],\n          move: touch[1],\n          end: touch[2],\n          cancel: touch[3],\n        };\n        swiper.touchEventsDesktop = {\n          start: desktop[0],\n          move: desktop[1],\n          end: desktop[2],\n        };\n        return 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        formElements: 'input, select, option, textarea, button, video, label',\n        // Last click time\n        lastClickTime: Utils.now(),\n        clickTimeout: undefined,\n        // Velocities\n        velocities: [],\n        allowMomentumBounce: undefined,\n        isTouchEvent: undefined,\n        startMoving: undefined,\n      },\n\n      // Clicks\n      allowClick: true,\n\n      // Touches\n      allowTouchMove: swiper.params.allowTouchMove,\n\n      touches: {\n        startX: 0,\n        startY: 0,\n        currentX: 0,\n        currentY: 0,\n        diff: 0,\n      },\n\n      // Images\n      imagesToLoad: [],\n      imagesLoaded: 0,\n\n    });\n\n    // Install Modules\n    swiper.useModules();\n\n    // Init\n    if (swiper.params.init) {\n      swiper.init();\n    }\n\n    // Return app instance\n    return swiper;\n  }\n\n  slidesPerViewDynamic() {\n    const swiper = this;\n    const {\n      params, slides, slidesGrid, size: swiperSize, activeIndex,\n    } = swiper;\n    let spv = 1;\n    if (params.centeredSlides) {\n      let slideSize = slides[activeIndex].swiperSlideSize;\n      let breakLoop;\n      for (let i = activeIndex + 1; i < slides.length; i += 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += slides[i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n      for (let i = activeIndex - 1; i >= 0; i -= 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += slides[i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n    } else {\n      for (let i = activeIndex + 1; i < slides.length; i += 1) {\n        if (slidesGrid[i] - slidesGrid[activeIndex] < swiperSize) {\n          spv += 1;\n        }\n      }\n    }\n    return spv;\n  }\n\n  update() {\n    const swiper = this;\n    if (!swiper || swiper.destroyed) return;\n    const { snapGrid, params } = swiper;\n    // Breakpoints\n    if (params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n    swiper.updateSize();\n    swiper.updateSlides();\n    swiper.updateProgress();\n    swiper.updateSlidesClasses();\n\n    function setTranslate() {\n      const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n      const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n      swiper.setTranslate(newTranslate);\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n    let translated;\n    if (swiper.params.freeMode) {\n      setTranslate();\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      if (!translated) {\n        setTranslate();\n      }\n    }\n    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n      swiper.checkOverflow();\n    }\n    swiper.emit('update');\n  }\n\n  changeDirection(newDirection, needUpdate = true) {\n    const swiper = this;\n    const currentDirection = swiper.params.direction;\n    if (!newDirection) {\n      // eslint-disable-next-line\n      newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n    }\n    if ((newDirection === currentDirection) || (newDirection !== 'horizontal' && newDirection !== 'vertical')) {\n      return swiper;\n    }\n\n    swiper.$el\n      .removeClass(`${swiper.params.containerModifierClass}${currentDirection}`)\n      .addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n\n    swiper.params.direction = newDirection;\n\n    swiper.slides.each((slideIndex, slideEl) => {\n      if (newDirection === 'vertical') {\n        slideEl.style.width = '';\n      } else {\n        slideEl.style.height = '';\n      }\n    });\n\n    swiper.emit('changeDirection');\n    if (needUpdate) swiper.update();\n\n    return swiper;\n  }\n\n  init() {\n    const swiper = this;\n    if (swiper.initialized) return;\n\n    swiper.emit('beforeInit');\n\n    // Set breakpoint\n    if (swiper.params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n\n    // Add Classes\n    swiper.addClasses();\n\n    // Create loop\n    if (swiper.params.loop) {\n      swiper.loopCreate();\n    }\n\n    // Update size\n    swiper.updateSize();\n\n    // Update slides\n    swiper.updateSlides();\n\n    if (swiper.params.watchOverflow) {\n      swiper.checkOverflow();\n    }\n\n    // Set Grab Cursor\n    if (swiper.params.grabCursor) {\n      swiper.setGrabCursor();\n    }\n\n    if (swiper.params.preloadImages) {\n      swiper.preloadImages();\n    }\n\n    // Slide To Initial Slide\n    if (swiper.params.loop) {\n      swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);\n    } else {\n      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);\n    }\n\n    // Attach events\n    swiper.attachEvents();\n\n    // Init Flag\n    swiper.initialized = true;\n\n    // Emit\n    swiper.emit('init');\n  }\n\n  destroy(deleteInstance = true, cleanStyles = true) {\n    const swiper = this;\n    const {\n      params, $el, $wrapperEl, slides,\n    } = swiper;\n\n    if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n      return null;\n    }\n\n    swiper.emit('beforeDestroy');\n\n    // Init Flag\n    swiper.initialized = false;\n\n    // Detach events\n    swiper.detachEvents();\n\n    // Destroy loop\n    if (params.loop) {\n      swiper.loopDestroy();\n    }\n\n    // Cleanup styles\n    if (cleanStyles) {\n      swiper.removeClasses();\n      $el.removeAttr('style');\n      $wrapperEl.removeAttr('style');\n      if (slides && slides.length) {\n        slides\n          .removeClass([\n            params.slideVisibleClass,\n            params.slideActiveClass,\n            params.slideNextClass,\n            params.slidePrevClass,\n          ].join(' '))\n          .removeAttr('style')\n          .removeAttr('data-swiper-slide-index');\n      }\n    }\n\n    swiper.emit('destroy');\n\n    // Detach emitter events\n    Object.keys(swiper.eventsListeners).forEach((eventName) => {\n      swiper.off(eventName);\n    });\n\n    if (deleteInstance !== false) {\n      swiper.$el[0].swiper = null;\n      swiper.$el.data('swiper', null);\n      Utils.deleteProps(swiper);\n    }\n    swiper.destroyed = true;\n\n    return null;\n  }\n\n  static extendDefaults(newDefaults) {\n    Utils.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 get Class() {\n    return SwiperClass;\n  }\n\n  static get $() {\n    return $;\n  }\n}\n\nvar Device$1 = {\n  name: 'device',\n  proto: {\n    device: Device,\n  },\n  static: {\n    device: Device,\n  },\n};\n\nvar Support$1 = {\n  name: 'support',\n  proto: {\n    support: Support,\n  },\n  static: {\n    support: Support,\n  },\n};\n\nconst Browser = (function Browser() {\n  function isSafari() {\n    const ua = window.navigator.userAgent.toLowerCase();\n    return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n  }\n  return {\n    isEdge: !!window.navigator.userAgent.match(/Edge/g),\n    isSafari: isSafari(),\n    isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),\n  };\n}());\n\nvar Browser$1 = {\n  name: 'browser',\n  proto: {\n    browser: Browser,\n  },\n  static: {\n    browser: Browser,\n  },\n};\n\nvar Resize = {\n  name: 'resize',\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      resize: {\n        resizeHandler() {\n          if (!swiper || swiper.destroyed || !swiper.initialized) return;\n          swiper.emit('beforeResize');\n          swiper.emit('resize');\n        },\n        orientationChangeHandler() {\n          if (!swiper || swiper.destroyed || !swiper.initialized) return;\n          swiper.emit('orientationchange');\n        },\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      // Emit resize\n      window.addEventListener('resize', swiper.resize.resizeHandler);\n\n      // Emit orientationchange\n      window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n    },\n    destroy() {\n      const swiper = this;\n      window.removeEventListener('resize', swiper.resize.resizeHandler);\n      window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n    },\n  },\n};\n\nconst Observer = {\n  func: window.MutationObserver || window.WebkitMutationObserver,\n  attach(target, options = {}) {\n    const swiper = this;\n\n    const ObserverFunc = Observer.func;\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        swiper.emit('observerUpdate', mutations[0]);\n        return;\n      }\n      const observerUpdate = function observerUpdate() {\n        swiper.emit('observerUpdate', mutations[0]);\n      };\n\n      if (window.requestAnimationFrame) {\n        window.requestAnimationFrame(observerUpdate);\n      } else {\n        window.setTimeout(observerUpdate, 0);\n      }\n    });\n\n    observer.observe(target, {\n      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n      childList: typeof options.childList === 'undefined' ? true : options.childList,\n      characterData: typeof options.characterData === 'undefined' ? true : options.characterData,\n    });\n\n    swiper.observer.observers.push(observer);\n  },\n  init() {\n    const swiper = this;\n    if (!Support.observer || !swiper.params.observer) return;\n    if (swiper.params.observeParents) {\n      const containerParents = swiper.$el.parents();\n      for (let i = 0; i < containerParents.length; i += 1) {\n        swiper.observer.attach(containerParents[i]);\n      }\n    }\n    // Observe container\n    swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren });\n\n    // Observe wrapper\n    swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });\n  },\n  destroy() {\n    const swiper = this;\n    swiper.observer.observers.forEach((observer) => {\n      observer.disconnect();\n    });\n    swiper.observer.observers = [];\n  },\n};\n\nvar Observer$1 = {\n  name: 'observer',\n  params: {\n    observer: false,\n    observeParents: false,\n    observeSlideChildren: false,\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      observer: {\n        init: Observer.init.bind(swiper),\n        attach: Observer.attach.bind(swiper),\n        destroy: Observer.destroy.bind(swiper),\n        observers: [],\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      swiper.observer.init();\n    },\n    destroy() {\n      const swiper = this;\n      swiper.observer.destroy();\n    },\n  },\n};\n\nconst Virtual = {\n  update(force) {\n    const swiper = this;\n    const { slidesPerView, slidesPerGroup, centeredSlides } = swiper.params;\n    const { addSlidesBefore, addSlidesAfter } = swiper.params.virtual;\n    const {\n      from: previousFrom,\n      to: previousTo,\n      slides,\n      slidesGrid: previousSlidesGrid,\n      renderSlide,\n      offset: previousOffset,\n    } = swiper.virtual;\n    swiper.updateActiveIndex();\n    const activeIndex = swiper.activeIndex || 0;\n\n    let offsetProp;\n    if (swiper.rtlTranslate) offsetProp = 'right';\n    else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n\n    let slidesAfter;\n    let slidesBefore;\n    if (centeredSlides) {\n      slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n      slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n    } else {\n      slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore;\n      slidesBefore = slidesPerGroup + addSlidesAfter;\n    }\n    const from = Math.max((activeIndex || 0) - slidesBefore, 0);\n    const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n    const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n\n    Utils.extend(swiper.virtual, {\n      from,\n      to,\n      offset,\n      slidesGrid: swiper.slidesGrid,\n    });\n\n    function onRendered() {\n      swiper.updateSlides();\n      swiper.updateProgress();\n      swiper.updateSlidesClasses();\n      if (swiper.lazy && swiper.params.lazy.enabled) {\n        swiper.lazy.load();\n      }\n    }\n\n    if (previousFrom === from && previousTo === to && !force) {\n      if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n        swiper.slides.css(offsetProp, `${offset}px`);\n      }\n      swiper.updateProgress();\n      return;\n    }\n    if (swiper.params.virtual.renderExternal) {\n      swiper.params.virtual.renderExternal.call(swiper, {\n        offset,\n        from,\n        to,\n        slides: (function getSlides() {\n          const slidesToRender = [];\n          for (let i = from; i <= to; i += 1) {\n            slidesToRender.push(slides[i]);\n          }\n          return slidesToRender;\n        }()),\n      });\n      onRendered();\n      return;\n    }\n    const prependIndexes = [];\n    const appendIndexes = [];\n    if (force) {\n      swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();\n    } else {\n      for (let i = previousFrom; i <= previousTo; i += 1) {\n        if (i < from || i > to) {\n          swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${i}\"]`).remove();\n        }\n      }\n    }\n    for (let i = 0; i < slides.length; i += 1) {\n      if (i >= from && i <= to) {\n        if (typeof previousTo === 'undefined' || force) {\n          appendIndexes.push(i);\n        } else {\n          if (i > previousTo) appendIndexes.push(i);\n          if (i < previousFrom) prependIndexes.push(i);\n        }\n      }\n    }\n    appendIndexes.forEach((index) => {\n      swiper.$wrapperEl.append(renderSlide(slides[index], index));\n    });\n    prependIndexes.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  renderSlide(slide, index) {\n    const swiper = this;\n    const params = swiper.params.virtual;\n    if (params.cache && swiper.virtual.cache[index]) {\n      return swiper.virtual.cache[index];\n    }\n    const $slideEl = params.renderSlide\n      ? $(params.renderSlide.call(swiper, slide, index))\n      : $(`<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  appendSlide(slides) {\n    const swiper = this;\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    swiper.virtual.update(true);\n  },\n  prependSlide(slides) {\n    const swiper = this;\n    const activeIndex = swiper.activeIndex;\n    let newActiveIndex = activeIndex + 1;\n    let numberOfNewSlides = 1;\n\n    if (Array.isArray(slides)) {\n      for (let i = 0; i < slides.length; i += 1) {\n        if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n      }\n      newActiveIndex = activeIndex + slides.length;\n      numberOfNewSlides = slides.length;\n    } else {\n      swiper.virtual.slides.unshift(slides);\n    }\n    if (swiper.params.virtual.cache) {\n      const cache = swiper.virtual.cache;\n      const newCache = {};\n      Object.keys(cache).forEach((cachedIndex) => {\n        const $cachedEl = cache[cachedIndex];\n        const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');\n        if (cachedElIndex) {\n          $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);\n        }\n        newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n      });\n      swiper.virtual.cache = newCache;\n    }\n    swiper.virtual.update(true);\n    swiper.slideTo(newActiveIndex, 0);\n  },\n  removeSlide(slidesIndexes) {\n    const swiper = this;\n    if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n    let activeIndex = swiper.activeIndex;\n    if (Array.isArray(slidesIndexes)) {\n      for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n        swiper.virtual.slides.splice(slidesIndexes[i], 1);\n        if (swiper.params.virtual.cache) {\n          delete swiper.virtual.cache[slidesIndexes[i]];\n        }\n        if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n        activeIndex = Math.max(activeIndex, 0);\n      }\n    } else {\n      swiper.virtual.slides.splice(slidesIndexes, 1);\n      if (swiper.params.virtual.cache) {\n        delete swiper.virtual.cache[slidesIndexes];\n      }\n      if (slidesIndexes < activeIndex) activeIndex -= 1;\n      activeIndex = Math.max(activeIndex, 0);\n    }\n    swiper.virtual.update(true);\n    swiper.slideTo(activeIndex, 0);\n  },\n  removeAllSlides() {\n    const swiper = this;\n    swiper.virtual.slides = [];\n    if (swiper.params.virtual.cache) {\n      swiper.virtual.cache = {};\n    }\n    swiper.virtual.update(true);\n    swiper.slideTo(0, 0);\n  },\n};\n\nvar Virtual$1 = {\n  name: 'virtual',\n  params: {\n    virtual: {\n      enabled: false,\n      slides: [],\n      cache: true,\n      renderSlide: null,\n      renderExternal: null,\n      addSlidesBefore: 0,\n      addSlidesAfter: 0,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      virtual: {\n        update: Virtual.update.bind(swiper),\n        appendSlide: Virtual.appendSlide.bind(swiper),\n        prependSlide: Virtual.prependSlide.bind(swiper),\n        removeSlide: Virtual.removeSlide.bind(swiper),\n        removeAllSlides: Virtual.removeAllSlides.bind(swiper),\n        renderSlide: Virtual.renderSlide.bind(swiper),\n        slides: swiper.params.virtual.slides,\n        cache: {},\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (!swiper.params.virtual.enabled) return;\n      swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n      const overwriteParams = {\n        watchSlidesProgress: true,\n      };\n      Utils.extend(swiper.params, overwriteParams);\n      Utils.extend(swiper.originalParams, overwriteParams);\n\n      if (!swiper.params.initialSlide) {\n        swiper.virtual.update();\n      }\n    },\n    setTranslate() {\n      const swiper = this;\n      if (!swiper.params.virtual.enabled) return;\n      swiper.virtual.update();\n    },\n  },\n};\n\nconst Keyboard = {\n  handle(event) {\n    const swiper = this;\n    const { rtlTranslate: rtl } = swiper;\n    let e = event;\n    if (e.originalEvent) e = e.originalEvent; // jquery fix\n    const kc = e.keyCode || e.charCode;\n    const pageUpDown = swiper.params.keyboard.pageUpDown;\n    const isPageUp = pageUpDown && kc === 33;\n    const isPageDown = pageUpDown && kc === 34;\n    const isArrowLeft = kc === 37;\n    const isArrowRight = kc === 39;\n    const isArrowUp = kc === 38;\n    const isArrowDown = kc === 40;\n    // Directions locks\n    if (!swiper.allowSlideNext && ((swiper.isHorizontal() && isArrowRight) || (swiper.isVertical() && isArrowDown) || isPageDown)) {\n      return false;\n    }\n    if (!swiper.allowSlidePrev && ((swiper.isHorizontal() && isArrowLeft) || (swiper.isVertical() && isArrowUp) || isPageUp)) {\n      return false;\n    }\n    if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n      return undefined;\n    }\n    if (document$1.activeElement && document$1.activeElement.nodeName && (document$1.activeElement.nodeName.toLowerCase() === 'input' || document$1.activeElement.nodeName.toLowerCase() === 'textarea')) {\n      return undefined;\n    }\n    if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n      let inView = false;\n      // Check that swiper should be inside of visible area of window\n      if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {\n        return undefined;\n      }\n      const windowWidth = window.innerWidth;\n      const windowHeight = window.innerHeight;\n      const swiperOffset = swiper.$el.offset();\n      if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n      const swiperCoord = [\n        [swiperOffset.left, swiperOffset.top],\n        [swiperOffset.left + swiper.width, swiperOffset.top],\n        [swiperOffset.left, swiperOffset.top + swiper.height],\n        [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height],\n      ];\n      for (let i = 0; i < swiperCoord.length; i += 1) {\n        const point = swiperCoord[i];\n        if (\n          point[0] >= 0 && point[0] <= windowWidth\n          && point[1] >= 0 && point[1] <= windowHeight\n        ) {\n          inView = true;\n        }\n      }\n      if (!inView) return undefined;\n    }\n    if (swiper.isHorizontal()) {\n      if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n        if (e.preventDefault) e.preventDefault();\n        else e.returnValue = false;\n      }\n      if (((isPageDown || isArrowRight) && !rtl) || ((isPageUp || isArrowLeft) && rtl)) 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();\n        else e.returnValue = false;\n      }\n      if (isPageDown || isArrowDown) swiper.slideNext();\n      if (isPageUp || isArrowUp) swiper.slidePrev();\n    }\n    swiper.emit('keyPress', kc);\n    return undefined;\n  },\n  enable() {\n    const swiper = this;\n    if (swiper.keyboard.enabled) return;\n    $(document$1).on('keydown', swiper.keyboard.handle);\n    swiper.keyboard.enabled = true;\n  },\n  disable() {\n    const swiper = this;\n    if (!swiper.keyboard.enabled) return;\n    $(document$1).off('keydown', swiper.keyboard.handle);\n    swiper.keyboard.enabled = false;\n  },\n};\n\nvar Keyboard$1 = {\n  name: 'keyboard',\n  params: {\n    keyboard: {\n      enabled: false,\n      onlyInViewport: true,\n      pageUpDown: true,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      keyboard: {\n        enabled: false,\n        enable: Keyboard.enable.bind(swiper),\n        disable: Keyboard.disable.bind(swiper),\n        handle: Keyboard.handle.bind(swiper),\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.keyboard.enabled) {\n        swiper.keyboard.enable();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.keyboard.enabled) {\n        swiper.keyboard.disable();\n      }\n    },\n  },\n};\n\nfunction isEventSupported() {\n  const eventName = 'onwheel';\n  let isSupported = eventName in document$1;\n\n  if (!isSupported) {\n    const element = document$1.createElement('div');\n    element.setAttribute(eventName, 'return;');\n    isSupported = typeof element[eventName] === 'function';\n  }\n\n  if (!isSupported\n    && document$1.implementation\n    && document$1.implementation.hasFeature\n    // always returns true in newer browsers as per the standard.\n    // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n    && document$1.implementation.hasFeature('', '') !== true\n  ) {\n    // This is the only way to test support for the `wheel` event in IE9+.\n    isSupported = document$1.implementation.hasFeature('Events.wheel', '3.0');\n  }\n\n  return isSupported;\n}\nconst Mousewheel = {\n  lastScrollTime: Utils.now(),\n  lastEventBeforeSnap: undefined,\n  recentWheelEvents: [],\n  event() {\n    if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';\n    return isEventSupported() ? 'wheel' : 'mousewheel';\n  },\n  normalize(e) {\n    // Reasonable defaults\n    const PIXEL_STEP = 10;\n    const LINE_HEIGHT = 40;\n    const PAGE_HEIGHT = 800;\n\n    let sX = 0;\n    let sY = 0; // spinX, spinY\n    let pX = 0;\n    let pY = 0; // pixelX, pixelY\n\n    // Legacy\n    if ('detail' in e) {\n      sY = e.detail;\n    }\n    if ('wheelDelta' in e) {\n      sY = -e.wheelDelta / 120;\n    }\n    if ('wheelDeltaY' in e) {\n      sY = -e.wheelDeltaY / 120;\n    }\n    if ('wheelDeltaX' in e) {\n      sX = -e.wheelDeltaX / 120;\n    }\n\n    // side scrolling on FF with DOMMouseScroll\n    if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n      sX = sY;\n      sY = 0;\n    }\n\n    pX = sX * PIXEL_STEP;\n    pY = sY * PIXEL_STEP;\n\n    if ('deltaY' in e) {\n      pY = e.deltaY;\n    }\n    if ('deltaX' in e) {\n      pX = e.deltaX;\n    }\n\n    if (e.shiftKey && !pX) { // 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) { // delta in LINE units\n        pX *= LINE_HEIGHT;\n        pY *= LINE_HEIGHT;\n      } else { // delta in PAGE units\n        pX *= PAGE_HEIGHT;\n        pY *= PAGE_HEIGHT;\n      }\n    }\n\n    // Fall-back if spin cannot be determined\n    if (pX && !sX) {\n      sX = (pX < 1) ? -1 : 1;\n    }\n    if (pY && !sY) {\n      sY = (pY < 1) ? -1 : 1;\n    }\n\n    return {\n      spinX: sX,\n      spinY: sY,\n      pixelX: pX,\n      pixelY: pY,\n    };\n  },\n  handleMouseEnter() {\n    const swiper = this;\n    swiper.mouseEntered = true;\n  },\n  handleMouseLeave() {\n    const swiper = this;\n    swiper.mouseEntered = false;\n  },\n  handle(event) {\n    let e = event;\n    const swiper = this;\n    const params = swiper.params.mousewheel;\n\n    if (swiper.params.cssMode) {\n      e.preventDefault();\n    }\n\n    let target = swiper.$el;\n    if (swiper.params.mousewheel.eventsTarged !== 'container') {\n      target = $(swiper.params.mousewheel.eventsTarged);\n    }\n    if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;\n\n    if (e.originalEvent) e = e.originalEvent; // jquery fix\n    let delta = 0;\n    const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n\n    const data = Mousewheel.normalize(e);\n\n    if (params.forceToAxis) {\n      if (swiper.isHorizontal()) {\n        if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;\n        else return true;\n      } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;\n      else return true;\n    } else {\n      delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n    }\n\n    if (delta === 0) return true;\n\n    if (params.invert) delta = -delta;\n\n    if (!swiper.params.freeMode) {\n      // Register the new event in a variable which stores the relevant data\n      const newEvent = {\n        time: Utils.now(),\n        delta: Math.abs(delta),\n        direction: Math.sign(delta),\n        raw: event,\n      };\n\n      // Keep the most recent events\n      const recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n      if (recentWheelEvents.length >= 2) {\n        recentWheelEvents.shift(); // only store the last N events\n      }\n      const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n      recentWheelEvents.push(newEvent);\n\n      // If there is at least one previous recorded event:\n      //   If direction has changed or\n      //   if the scroll is quicker than the previous one:\n      //     Animate the slider.\n      // Else (this is the first time the wheel is moved):\n      //     Animate the slider.\n      if (prevEvent) {\n        if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n          swiper.mousewheel.animateSlider(newEvent);\n        }\n      } else {\n        swiper.mousewheel.animateSlider(newEvent);\n      }\n\n      // If it's time to release the scroll:\n      //   Return now so you don't hit the preventDefault.\n      if (swiper.mousewheel.releaseScroll(newEvent)) {\n        return true;\n      }\n    } else {\n      // Freemode or scrollContainer:\n\n      // If we recently snapped after a momentum scroll, then ignore wheel events\n      // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n      // or if it's a new scroll (larger delta or inverse sign as last event before\n      // an end-of-momentum snap).\n      const newEvent = { time: Utils.now(), delta: Math.abs(delta), direction: Math.sign(delta) };\n      const { lastEventBeforeSnap } = swiper.mousewheel;\n      const ignoreWheelEvents = lastEventBeforeSnap\n        && newEvent.time < lastEventBeforeSnap.time + 500\n        && newEvent.delta <= lastEventBeforeSnap.delta\n        && newEvent.direction === lastEventBeforeSnap.direction;\n      if (!ignoreWheelEvents) {\n        swiper.mousewheel.lastEventBeforeSnap = undefined;\n\n        if (swiper.params.loop) {\n          swiper.loopFix();\n        }\n        let position = swiper.getTranslate() + (delta * params.sensitivity);\n        const wasBeginning = swiper.isBeginning;\n        const wasEnd = swiper.isEnd;\n\n        if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n        if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n\n        swiper.setTransition(0);\n        swiper.setTranslate(position);\n        swiper.updateProgress();\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n\n        if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {\n          swiper.updateSlidesClasses();\n        }\n\n        if (swiper.params.freeModeSticky) {\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 momuntum 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(swiper.mousewheel.timeout);\n          swiper.mousewheel.timeout = undefined;\n          const recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n          if (recentWheelEvents.length >= 15) {\n            recentWheelEvents.shift(); // only store the last N events\n          }\n          const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n          const firstEvent = recentWheelEvents[0];\n          recentWheelEvents.push(newEvent);\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\n              && newEvent.time - firstEvent.time < 500\n              && firstEvent.delta - newEvent.delta >= 1\n              && newEvent.delta <= 6\n          ) {\n            // We're at the end of the deceleration of a momentum scroll, so there's no need\n            // to wait for more events. Snap ASAP on the next tick.\n            // Also, because there's some remaining momentum we'll bias the snap in the\n            // direction of the ongoing scroll because it's better UX for the scroll to snap\n            // in the same direction as the scroll instead of reversing to snap.  Therefore,\n            // if it's already scrolled more than 20% in the current direction, keep going.\n            const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n            swiper.mousewheel.lastEventBeforeSnap = newEvent;\n            recentWheelEvents.splice(0);\n            swiper.mousewheel.timeout = Utils.nextTick(() => {\n              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n            }, 0); // no delay; move on next tick\n          }\n          if (!swiper.mousewheel.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            swiper.mousewheel.timeout = Utils.nextTick(() => {\n              const snapToThreshold = 0.5;\n              swiper.mousewheel.lastEventBeforeSnap = newEvent;\n              recentWheelEvents.splice(0);\n              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n            }, 500);\n          }\n        }\n\n        // Emit event\n        if (!ignoreWheelEvents) swiper.emit('scroll', e);\n\n        // Stop autoplay\n        if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();\n        // Return page scroll on edge positions\n        if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n      }\n    }\n\n    if (e.preventDefault) e.preventDefault();\n    else e.returnValue = false;\n    return false;\n  },\n  animateSlider(newEvent) {\n    const swiper = this;\n    // If the movement is NOT big enough and\n    // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n    //   Don't go any further (avoid insignificant scroll movement).\n    if (newEvent.delta >= 6 && Utils.now() - swiper.mousewheel.lastScrollTime < 60) {\n      // Return false as a default\n      return true;\n    }\n    // If user is scrolling towards the end:\n    //   If the slider hasn't hit the latest slide or\n    //   if the slider is a loop and\n    //   if the slider isn't moving right now:\n    //     Go to next slide and\n    //     emit a scroll event.\n    // Else (the user is scrolling towards the beginning) and\n    // if the slider hasn't hit the first slide or\n    // if the slider is a loop and\n    // if the slider isn't moving right now:\n    //   Go to prev slide and\n    //   emit a scroll event.\n    if (newEvent.direction < 0) {\n      if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n        swiper.slideNext();\n        swiper.emit('scroll', newEvent.raw);\n      }\n    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n      swiper.slidePrev();\n      swiper.emit('scroll', newEvent.raw);\n    }\n    // If you got here is because an animation has been triggered so store the current time\n    swiper.mousewheel.lastScrollTime = (new window.Date()).getTime();\n    // Return false as a default\n    return false;\n  },\n  releaseScroll(newEvent) {\n    const swiper = this;\n    const params = swiper.params.mousewheel;\n    if (newEvent.direction < 0) {\n      if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n        // Return true to animate scroll on edges\n        return true;\n      }\n    } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n      // Return true to animate scroll on edges\n      return true;\n    }\n    return false;\n  },\n  enable() {\n    const swiper = this;\n    const event = Mousewheel.event();\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);\n      return true;\n    }\n    if (!event) return false;\n    if (swiper.mousewheel.enabled) return false;\n    let target = swiper.$el;\n    if (swiper.params.mousewheel.eventsTarged !== 'container') {\n      target = $(swiper.params.mousewheel.eventsTarged);\n    }\n    target.on('mouseenter', swiper.mousewheel.handleMouseEnter);\n    target.on('mouseleave', swiper.mousewheel.handleMouseLeave);\n    target.on(event, swiper.mousewheel.handle);\n    swiper.mousewheel.enabled = true;\n    return true;\n  },\n  disable() {\n    const swiper = this;\n    const event = Mousewheel.event();\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);\n      return true;\n    }\n    if (!event) return false;\n    if (!swiper.mousewheel.enabled) return false;\n    let target = swiper.$el;\n    if (swiper.params.mousewheel.eventsTarged !== 'container') {\n      target = $(swiper.params.mousewheel.eventsTarged);\n    }\n    target.off(event, swiper.mousewheel.handle);\n    swiper.mousewheel.enabled = false;\n    return true;\n  },\n};\n\nvar Mousewheel$1 = {\n  name: 'mousewheel',\n  params: {\n    mousewheel: {\n      enabled: false,\n      releaseOnEdges: false,\n      invert: false,\n      forceToAxis: false,\n      sensitivity: 1,\n      eventsTarged: 'container',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      mousewheel: {\n        enabled: false,\n        enable: Mousewheel.enable.bind(swiper),\n        disable: Mousewheel.disable.bind(swiper),\n        handle: Mousewheel.handle.bind(swiper),\n        handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),\n        handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),\n        animateSlider: Mousewheel.animateSlider.bind(swiper),\n        releaseScroll: Mousewheel.releaseScroll.bind(swiper),\n        lastScrollTime: Utils.now(),\n        lastEventBeforeSnap: undefined,\n        recentWheelEvents: [],\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n        swiper.mousewheel.disable();\n      }\n      if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.params.cssMode) {\n        swiper.mousewheel.enable();\n      }\n      if (swiper.mousewheel.enabled) swiper.mousewheel.disable();\n    },\n  },\n};\n\nconst Navigation = {\n  update() {\n    // Update Navigation Buttons\n    const swiper = this;\n    const params = swiper.params.navigation;\n\n    if (swiper.params.loop) return;\n    const { $nextEl, $prevEl } = swiper.navigation;\n\n    if ($prevEl && $prevEl.length > 0) {\n      if (swiper.isBeginning) {\n        $prevEl.addClass(params.disabledClass);\n      } else {\n        $prevEl.removeClass(params.disabledClass);\n      }\n      $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n    }\n    if ($nextEl && $nextEl.length > 0) {\n      if (swiper.isEnd) {\n        $nextEl.addClass(params.disabledClass);\n      } else {\n        $nextEl.removeClass(params.disabledClass);\n      }\n      $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n    }\n  },\n  onPrevClick(e) {\n    const swiper = this;\n    e.preventDefault();\n    if (swiper.isBeginning && !swiper.params.loop) return;\n    swiper.slidePrev();\n  },\n  onNextClick(e) {\n    const swiper = this;\n    e.preventDefault();\n    if (swiper.isEnd && !swiper.params.loop) return;\n    swiper.slideNext();\n  },\n  init() {\n    const swiper = this;\n    const params = swiper.params.navigation;\n    if (!(params.nextEl || params.prevEl)) return;\n\n    let $nextEl;\n    let $prevEl;\n    if (params.nextEl) {\n      $nextEl = $(params.nextEl);\n      if (\n        swiper.params.uniqueNavElements\n        && typeof params.nextEl === 'string'\n        && $nextEl.length > 1\n        && swiper.$el.find(params.nextEl).length === 1\n      ) {\n        $nextEl = swiper.$el.find(params.nextEl);\n      }\n    }\n    if (params.prevEl) {\n      $prevEl = $(params.prevEl);\n      if (\n        swiper.params.uniqueNavElements\n        && typeof params.prevEl === 'string'\n        && $prevEl.length > 1\n        && swiper.$el.find(params.prevEl).length === 1\n      ) {\n        $prevEl = swiper.$el.find(params.prevEl);\n      }\n    }\n\n    if ($nextEl && $nextEl.length > 0) {\n      $nextEl.on('click', swiper.navigation.onNextClick);\n    }\n    if ($prevEl && $prevEl.length > 0) {\n      $prevEl.on('click', swiper.navigation.onPrevClick);\n    }\n\n    Utils.extend(swiper.navigation, {\n      $nextEl,\n      nextEl: $nextEl && $nextEl[0],\n      $prevEl,\n      prevEl: $prevEl && $prevEl[0],\n    });\n  },\n  destroy() {\n    const swiper = this;\n    const { $nextEl, $prevEl } = swiper.navigation;\n    if ($nextEl && $nextEl.length) {\n      $nextEl.off('click', swiper.navigation.onNextClick);\n      $nextEl.removeClass(swiper.params.navigation.disabledClass);\n    }\n    if ($prevEl && $prevEl.length) {\n      $prevEl.off('click', swiper.navigation.onPrevClick);\n      $prevEl.removeClass(swiper.params.navigation.disabledClass);\n    }\n  },\n};\n\nvar Navigation$1 = {\n  name: 'navigation',\n  params: {\n    navigation: {\n      nextEl: null,\n      prevEl: null,\n\n      hideOnClick: false,\n      disabledClass: 'swiper-button-disabled',\n      hiddenClass: 'swiper-button-hidden',\n      lockClass: 'swiper-button-lock',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      navigation: {\n        init: Navigation.init.bind(swiper),\n        update: Navigation.update.bind(swiper),\n        destroy: Navigation.destroy.bind(swiper),\n        onNextClick: Navigation.onNextClick.bind(swiper),\n        onPrevClick: Navigation.onPrevClick.bind(swiper),\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      swiper.navigation.init();\n      swiper.navigation.update();\n    },\n    toEdge() {\n      const swiper = this;\n      swiper.navigation.update();\n    },\n    fromEdge() {\n      const swiper = this;\n      swiper.navigation.update();\n    },\n    destroy() {\n      const swiper = this;\n      swiper.navigation.destroy();\n    },\n    click(e) {\n      const swiper = this;\n      const { $nextEl, $prevEl } = swiper.navigation;\n      if (\n        swiper.params.navigation.hideOnClick\n        && !$(e.target).is($prevEl)\n        && !$(e.target).is($nextEl)\n      ) {\n        let isHidden;\n        if ($nextEl) {\n          isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n        } else if ($prevEl) {\n          isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n        }\n        if (isHidden === true) {\n          swiper.emit('navigationShow', swiper);\n        } else {\n          swiper.emit('navigationHide', swiper);\n        }\n        if ($nextEl) {\n          $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n        }\n        if ($prevEl) {\n          $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n        }\n      }\n    },\n  },\n};\n\nconst Pagination = {\n  update() {\n    // Render || Update Pagination bullets/items\n    const swiper = this;\n    const rtl = swiper.rtl;\n    const params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n    const $el = swiper.pagination.$el;\n    // Current/Total\n    let current;\n    const total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n    if (swiper.params.loop) {\n      current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n      if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {\n        current -= (slidesLength - (swiper.loopedSlides * 2));\n      }\n      if (current > total - 1) current -= total;\n      if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n    } else if (typeof swiper.snapIndex !== 'undefined') {\n      current = swiper.snapIndex;\n    } else {\n      current = swiper.activeIndex || 0;\n    }\n    // Types\n    if (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      if (params.dynamicBullets) {\n        swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n        $el.css(swiper.isHorizontal() ? 'width' : 'height', `${swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)}px`);\n        if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n          swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);\n          if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {\n            swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;\n          } else if (swiper.pagination.dynamicBulletIndex < 0) {\n            swiper.pagination.dynamicBulletIndex = 0;\n          }\n        }\n        firstIndex = current - swiper.pagination.dynamicBulletIndex;\n        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n        midIndex = (lastIndex + firstIndex) / 2;\n      }\n      bullets.removeClass(`${params.bulletActiveClass} ${params.bulletActiveClass}-next ${params.bulletActiveClass}-next-next ${params.bulletActiveClass}-prev ${params.bulletActiveClass}-prev-prev ${params.bulletActiveClass}-main`);\n      if ($el.length > 1) {\n        bullets.each((index, bullet) => {\n          const $bullet = $(bullet);\n          const bulletIndex = $bullet.index();\n          if (bulletIndex === current) {\n            $bullet.addClass(params.bulletActiveClass);\n          }\n          if (params.dynamicBullets) {\n            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n              $bullet.addClass(`${params.bulletActiveClass}-main`);\n            }\n            if (bulletIndex === firstIndex) {\n              $bullet\n                .prev()\n                .addClass(`${params.bulletActiveClass}-prev`)\n                .prev()\n                .addClass(`${params.bulletActiveClass}-prev-prev`);\n            }\n            if (bulletIndex === lastIndex) {\n              $bullet\n                .next()\n                .addClass(`${params.bulletActiveClass}-next`)\n                .next()\n                .addClass(`${params.bulletActiveClass}-next-next`);\n            }\n          }\n        });\n      } else {\n        const $bullet = bullets.eq(current);\n        const bulletIndex = $bullet.index();\n        $bullet.addClass(params.bulletActiveClass);\n        if (params.dynamicBullets) {\n          const $firstDisplayedBullet = bullets.eq(firstIndex);\n          const $lastDisplayedBullet = bullets.eq(lastIndex);\n          for (let i = firstIndex; i <= lastIndex; i += 1) {\n            bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n          }\n          if (swiper.params.loop) {\n            if (bulletIndex >= bullets.length - params.dynamicMainBullets) {\n              for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n                bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n              }\n              bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n            } else {\n              $firstDisplayedBullet\n                .prev()\n                .addClass(`${params.bulletActiveClass}-prev`)\n                .prev()\n                .addClass(`${params.bulletActiveClass}-prev-prev`);\n              $lastDisplayedBullet\n                .next()\n                .addClass(`${params.bulletActiveClass}-next`)\n                .next()\n                .addClass(`${params.bulletActiveClass}-next-next`);\n            }\n          } else {\n            $firstDisplayedBullet\n              .prev()\n              .addClass(`${params.bulletActiveClass}-prev`)\n              .prev()\n              .addClass(`${params.bulletActiveClass}-prev-prev`);\n            $lastDisplayedBullet\n              .next()\n              .addClass(`${params.bulletActiveClass}-next`)\n              .next()\n              .addClass(`${params.bulletActiveClass}-next-next`);\n          }\n        }\n      }\n      if (params.dynamicBullets) {\n        const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n        const bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);\n        const offsetProp = rtl ? 'right' : 'left';\n        bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n      }\n    }\n    if (params.type === 'fraction') {\n      $el.find(`.${params.currentClass}`).text(params.formatFractionCurrent(current + 1));\n      $el.find(`.${params.totalClass}`).text(params.formatFractionTotal(total));\n    }\n    if (params.type === 'progressbar') {\n      let progressbarDirection;\n      if (params.progressbarOpposite) {\n        progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n      } else {\n        progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n      }\n      const scale = (current + 1) / total;\n      let scaleX = 1;\n      let scaleY = 1;\n      if (progressbarDirection === 'horizontal') {\n        scaleX = scale;\n      } else {\n        scaleY = scale;\n      }\n      $el.find(`.${params.progressbarFillClass}`).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n    }\n    if (params.type === 'custom' && params.renderCustom) {\n      $el.html(params.renderCustom(swiper, current + 1, total));\n      swiper.emit('paginationRender', swiper, $el[0]);\n    } else {\n      swiper.emit('paginationUpdate', swiper, $el[0]);\n    }\n    $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n  },\n  render() {\n    // Render Container\n    const swiper = this;\n    const params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n\n    const $el = swiper.pagination.$el;\n    let paginationHTML = '';\n    if (params.type === 'bullets') {\n      const numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\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      $el.html(paginationHTML);\n      swiper.pagination.bullets = $el.find(`.${params.bulletClass}`);\n    }\n    if (params.type === 'fraction') {\n      if (params.renderFraction) {\n        paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n      } else {\n        paginationHTML = `<span class=\"${params.currentClass}\"></span>`\n        + ' / '\n        + `<span class=\"${params.totalClass}\"></span>`;\n      }\n      $el.html(paginationHTML);\n    }\n    if (params.type === 'progressbar') {\n      if (params.renderProgressbar) {\n        paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n      } else {\n        paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n      }\n      $el.html(paginationHTML);\n    }\n    if (params.type !== 'custom') {\n      swiper.emit('paginationRender', swiper.pagination.$el[0]);\n    }\n  },\n  init() {\n    const swiper = this;\n    const params = swiper.params.pagination;\n    if (!params.el) return;\n\n    let $el = $(params.el);\n    if ($el.length === 0) return;\n\n    if (\n      swiper.params.uniqueNavElements\n      && typeof params.el === 'string'\n      && $el.length > 1\n    ) {\n      $el = swiper.$el.find(params.el);\n    }\n\n    if (params.type === 'bullets' && params.clickable) {\n      $el.addClass(params.clickableClass);\n    }\n\n    $el.addClass(params.modifierClass + params.type);\n\n    if (params.type === 'bullets' && params.dynamicBullets) {\n      $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n      swiper.pagination.dynamicBulletIndex = 0;\n      if (params.dynamicMainBullets < 1) {\n        params.dynamicMainBullets = 1;\n      }\n    }\n    if (params.type === 'progressbar' && params.progressbarOpposite) {\n      $el.addClass(params.progressbarOppositeClass);\n    }\n\n    if (params.clickable) {\n      $el.on('click', `.${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    Utils.extend(swiper.pagination, {\n      $el,\n      el: $el[0],\n    });\n  },\n  destroy() {\n    const swiper = this;\n    const params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    const $el = swiper.pagination.$el;\n\n    $el.removeClass(params.hiddenClass);\n    $el.removeClass(params.modifierClass + params.type);\n    if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n    if (params.clickable) {\n      $el.off('click', `.${params.bulletClass}`);\n    }\n  },\n};\n\nvar Pagination$1 = {\n  name: 'pagination',\n  params: {\n    pagination: {\n      el: null,\n      bulletElement: 'span',\n      clickable: false,\n      hideOnClick: false,\n      renderBullet: null,\n      renderProgressbar: null,\n      renderFraction: null,\n      renderCustom: null,\n      progressbarOpposite: false,\n      type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n      dynamicBullets: false,\n      dynamicMainBullets: 1,\n      formatFractionCurrent: (number) => number,\n      formatFractionTotal: (number) => number,\n      bulletClass: 'swiper-pagination-bullet',\n      bulletActiveClass: 'swiper-pagination-bullet-active',\n      modifierClass: 'swiper-pagination-', // NEW\n      currentClass: 'swiper-pagination-current',\n      totalClass: 'swiper-pagination-total',\n      hiddenClass: 'swiper-pagination-hidden',\n      progressbarFillClass: 'swiper-pagination-progressbar-fill',\n      progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',\n      clickableClass: 'swiper-pagination-clickable', // NEW\n      lockClass: 'swiper-pagination-lock',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      pagination: {\n        init: Pagination.init.bind(swiper),\n        render: Pagination.render.bind(swiper),\n        update: Pagination.update.bind(swiper),\n        destroy: Pagination.destroy.bind(swiper),\n        dynamicBulletIndex: 0,\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      swiper.pagination.init();\n      swiper.pagination.render();\n      swiper.pagination.update();\n    },\n    activeIndexChange() {\n      const swiper = this;\n      if (swiper.params.loop) {\n        swiper.pagination.update();\n      } else if (typeof swiper.snapIndex === 'undefined') {\n        swiper.pagination.update();\n      }\n    },\n    snapIndexChange() {\n      const swiper = this;\n      if (!swiper.params.loop) {\n        swiper.pagination.update();\n      }\n    },\n    slidesLengthChange() {\n      const swiper = this;\n      if (swiper.params.loop) {\n        swiper.pagination.render();\n        swiper.pagination.update();\n      }\n    },\n    snapGridLengthChange() {\n      const swiper = this;\n      if (!swiper.params.loop) {\n        swiper.pagination.render();\n        swiper.pagination.update();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      swiper.pagination.destroy();\n    },\n    click(e) {\n      const swiper = this;\n      if (\n        swiper.params.pagination.el\n        && swiper.params.pagination.hideOnClick\n        && swiper.pagination.$el.length > 0\n        && !$(e.target).hasClass(swiper.params.pagination.bulletClass)\n      ) {\n        const isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);\n        if (isHidden === true) {\n          swiper.emit('paginationShow', swiper);\n        } else {\n          swiper.emit('paginationHide', swiper);\n        }\n        swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);\n      }\n    },\n  },\n};\n\nconst Scrollbar = {\n  setTranslate() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    const { scrollbar, rtlTranslate: rtl, progress } = swiper;\n    const {\n      dragSize, trackSize, $dragEl, $el,\n    } = scrollbar;\n    const params = swiper.params.scrollbar;\n\n    let newSize = dragSize;\n    let newPos = (trackSize - dragSize) * progress;\n    if (rtl) {\n      newPos = -newPos;\n      if (newPos > 0) {\n        newSize = dragSize - newPos;\n        newPos = 0;\n      } else if (-newPos + dragSize > trackSize) {\n        newSize = trackSize + newPos;\n      }\n    } else if (newPos < 0) {\n      newSize = dragSize + newPos;\n      newPos = 0;\n    } else if (newPos + dragSize > trackSize) {\n      newSize = trackSize - newPos;\n    }\n    if (swiper.isHorizontal()) {\n      $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n      $dragEl[0].style.width = `${newSize}px`;\n    } else {\n      $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n      $dragEl[0].style.height = `${newSize}px`;\n    }\n    if (params.hide) {\n      clearTimeout(swiper.scrollbar.timeout);\n      $el[0].style.opacity = 1;\n      swiper.scrollbar.timeout = setTimeout(() => {\n        $el[0].style.opacity = 0;\n        $el.transition(400);\n      }, 1000);\n    }\n  },\n  setTransition(duration) {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    swiper.scrollbar.$dragEl.transition(duration);\n  },\n  updateSize() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n\n    const { scrollbar } = swiper;\n    const { $dragEl, $el } = scrollbar;\n\n    $dragEl[0].style.width = '';\n    $dragEl[0].style.height = '';\n    const trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n\n    const divider = swiper.size / swiper.virtualSize;\n    const moveDivider = divider * (trackSize / swiper.size);\n    let dragSize;\n    if (swiper.params.scrollbar.dragSize === 'auto') {\n      dragSize = trackSize * divider;\n    } else {\n      dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n    }\n\n    if (swiper.isHorizontal()) {\n      $dragEl[0].style.width = `${dragSize}px`;\n    } else {\n      $dragEl[0].style.height = `${dragSize}px`;\n    }\n\n    if (divider >= 1) {\n      $el[0].style.display = 'none';\n    } else {\n      $el[0].style.display = '';\n    }\n    if (swiper.params.scrollbar.hide) {\n      $el[0].style.opacity = 0;\n    }\n    Utils.extend(scrollbar, {\n      trackSize,\n      divider,\n      moveDivider,\n      dragSize,\n    });\n    scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n  },\n  getPointerPosition(e) {\n    const swiper = this;\n    if (swiper.isHorizontal()) {\n      return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientX : e.clientX);\n    }\n    return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientY : e.clientY);\n  },\n  setDragPosition(e) {\n    const swiper = this;\n    const { scrollbar, rtlTranslate: rtl } = swiper;\n    const {\n      $el,\n      dragSize,\n      trackSize,\n      dragStartPos,\n    } = scrollbar;\n\n    let positionRatio;\n    positionRatio = ((scrollbar.getPointerPosition(e)) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top']\n      - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n    positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n    if (rtl) {\n      positionRatio = 1 - positionRatio;\n    }\n\n    const position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio);\n\n    swiper.updateProgress(position);\n    swiper.setTranslate(position);\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  },\n  onDragStart(e) {\n    const swiper = this;\n    const params = swiper.params.scrollbar;\n    const { scrollbar, $wrapperEl } = swiper;\n    const { $el, $dragEl } = scrollbar;\n    swiper.scrollbar.isTouched = true;\n    swiper.scrollbar.dragStartPos = (e.target === $dragEl[0] || e.target === $dragEl)\n      ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n    e.preventDefault();\n    e.stopPropagation();\n\n    $wrapperEl.transition(100);\n    $dragEl.transition(100);\n    scrollbar.setDragPosition(e);\n\n    clearTimeout(swiper.scrollbar.dragTimeout);\n\n    $el.transition(0);\n    if (params.hide) {\n      $el.css('opacity', 1);\n    }\n    if (swiper.params.cssMode) {\n      swiper.$wrapperEl.css('scroll-snap-type', 'none');\n    }\n    swiper.emit('scrollbarDragStart', e);\n  },\n  onDragMove(e) {\n    const swiper = this;\n    const { scrollbar, $wrapperEl } = swiper;\n    const { $el, $dragEl } = scrollbar;\n\n    if (!swiper.scrollbar.isTouched) return;\n    if (e.preventDefault) e.preventDefault();\n    else e.returnValue = false;\n    scrollbar.setDragPosition(e);\n    $wrapperEl.transition(0);\n    $el.transition(0);\n    $dragEl.transition(0);\n    swiper.emit('scrollbarDragMove', e);\n  },\n  onDragEnd(e) {\n    const swiper = this;\n\n    const params = swiper.params.scrollbar;\n    const { scrollbar, $wrapperEl } = swiper;\n    const { $el } = scrollbar;\n\n    if (!swiper.scrollbar.isTouched) return;\n    swiper.scrollbar.isTouched = false;\n    if (swiper.params.cssMode) {\n      swiper.$wrapperEl.css('scroll-snap-type', '');\n      $wrapperEl.transition('');\n    }\n    if (params.hide) {\n      clearTimeout(swiper.scrollbar.dragTimeout);\n      swiper.scrollbar.dragTimeout = Utils.nextTick(() => {\n        $el.css('opacity', 0);\n        $el.transition(400);\n      }, 1000);\n    }\n    swiper.emit('scrollbarDragEnd', e);\n    if (params.snapOnRelease) {\n      swiper.slideToClosest();\n    }\n  },\n  enableDraggable() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el) return;\n    const {\n      scrollbar, touchEventsTouch, touchEventsDesktop, params,\n    } = swiper;\n    const $el = scrollbar.$el;\n    const target = $el[0];\n    const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;\n    const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n    if (!Support.touch) {\n      target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n      document$1.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n      document$1.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n    } else {\n      target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n      target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n      target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n    }\n  },\n  disableDraggable() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el) return;\n    const {\n      scrollbar, touchEventsTouch, touchEventsDesktop, params,\n    } = swiper;\n    const $el = scrollbar.$el;\n    const target = $el[0];\n    const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;\n    const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n    if (!Support.touch) {\n      target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n      document$1.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n      document$1.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n    } else {\n      target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n      target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n      target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n    }\n  },\n  init() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el) return;\n    const { scrollbar, $el: $swiperEl } = swiper;\n    const params = swiper.params.scrollbar;\n\n    let $el = $(params.el);\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    let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n    if ($dragEl.length === 0) {\n      $dragEl = $(`<div class=\"${swiper.params.scrollbar.dragClass}\"></div>`);\n      $el.append($dragEl);\n    }\n\n    Utils.extend(scrollbar, {\n      $el,\n      el: $el[0],\n      $dragEl,\n      dragEl: $dragEl[0],\n    });\n\n    if (params.draggable) {\n      scrollbar.enableDraggable();\n    }\n  },\n  destroy() {\n    const swiper = this;\n    swiper.scrollbar.disableDraggable();\n  },\n};\n\nvar Scrollbar$1 = {\n  name: 'scrollbar',\n  params: {\n    scrollbar: {\n      el: null,\n      dragSize: 'auto',\n      hide: false,\n      draggable: false,\n      snapOnRelease: true,\n      lockClass: 'swiper-scrollbar-lock',\n      dragClass: 'swiper-scrollbar-drag',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      scrollbar: {\n        init: Scrollbar.init.bind(swiper),\n        destroy: Scrollbar.destroy.bind(swiper),\n        updateSize: Scrollbar.updateSize.bind(swiper),\n        setTranslate: Scrollbar.setTranslate.bind(swiper),\n        setTransition: Scrollbar.setTransition.bind(swiper),\n        enableDraggable: Scrollbar.enableDraggable.bind(swiper),\n        disableDraggable: Scrollbar.disableDraggable.bind(swiper),\n        setDragPosition: Scrollbar.setDragPosition.bind(swiper),\n        getPointerPosition: Scrollbar.getPointerPosition.bind(swiper),\n        onDragStart: Scrollbar.onDragStart.bind(swiper),\n        onDragMove: Scrollbar.onDragMove.bind(swiper),\n        onDragEnd: Scrollbar.onDragEnd.bind(swiper),\n        isTouched: false,\n        timeout: null,\n        dragTimeout: null,\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      swiper.scrollbar.init();\n      swiper.scrollbar.updateSize();\n      swiper.scrollbar.setTranslate();\n    },\n    update() {\n      const swiper = this;\n      swiper.scrollbar.updateSize();\n    },\n    resize() {\n      const swiper = this;\n      swiper.scrollbar.updateSize();\n    },\n    observerUpdate() {\n      const swiper = this;\n      swiper.scrollbar.updateSize();\n    },\n    setTranslate() {\n      const swiper = this;\n      swiper.scrollbar.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      swiper.scrollbar.setTransition(duration);\n    },\n    destroy() {\n      const swiper = this;\n      swiper.scrollbar.destroy();\n    },\n  },\n};\n\nconst Parallax = {\n  setTransform(el, progress) {\n    const swiper = this;\n    const { rtl } = swiper;\n\n    const $el = $(el);\n    const rtlFactor = rtl ? -1 : 1;\n\n    const p = $el.attr('data-swiper-parallax') || '0';\n    let x = $el.attr('data-swiper-parallax-x');\n    let y = $el.attr('data-swiper-parallax-y');\n    const scale = $el.attr('data-swiper-parallax-scale');\n    const opacity = $el.attr('data-swiper-parallax-opacity');\n\n    if (x || y) {\n      x = x || '0';\n      y = y || '0';\n    } else if (swiper.isHorizontal()) {\n      x = p;\n      y = '0';\n    } else {\n      y = p;\n      x = '0';\n    }\n\n    if ((x).indexOf('%') >= 0) {\n      x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n    } else {\n      x = `${x * progress * rtlFactor}px`;\n    }\n    if ((y).indexOf('%') >= 0) {\n      y = `${parseInt(y, 10) * progress}%`;\n    } else {\n      y = `${y * progress}px`;\n    }\n\n    if (typeof opacity !== 'undefined' && opacity !== null) {\n      const currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress)));\n      $el[0].style.opacity = currentOpacity;\n    }\n    if (typeof scale === 'undefined' || scale === null) {\n      $el.transform(`translate3d(${x}, ${y}, 0px)`);\n    } else {\n      const currentScale = scale - ((scale - 1) * (1 - Math.abs(progress)));\n      $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);\n    }\n  },\n  setTranslate() {\n    const swiper = this;\n    const {\n      $el, slides, progress, 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]')\n      .each((index, el) => {\n        swiper.parallax.setTransform(el, progress);\n      });\n    slides.each((slideIndex, slideEl) => {\n      let slideProgress = slideEl.progress;\n      if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n        slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1));\n      }\n      slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n      $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n        .each((index, el) => {\n          swiper.parallax.setTransform(el, slideProgress);\n        });\n    });\n  },\n  setTransition(duration = this.params.speed) {\n    const swiper = this;\n    const { $el } = swiper;\n    $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n      .each((index, 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\nvar Parallax$1 = {\n  name: 'parallax',\n  params: {\n    parallax: {\n      enabled: false,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      parallax: {\n        setTransform: Parallax.setTransform.bind(swiper),\n        setTranslate: Parallax.setTranslate.bind(swiper),\n        setTransition: Parallax.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (!swiper.params.parallax.enabled) return;\n      swiper.params.watchSlidesProgress = true;\n      swiper.originalParams.watchSlidesProgress = true;\n    },\n    init() {\n      const swiper = this;\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTranslate();\n    },\n    setTranslate() {\n      const swiper = this;\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTransition(duration);\n    },\n  },\n};\n\nconst Zoom = {\n  // Calc Scale From Multi-touches\n  getDistanceBetweenTouches(e) {\n    if (e.targetTouches.length < 2) return 1;\n    const x1 = e.targetTouches[0].pageX;\n    const y1 = e.targetTouches[0].pageY;\n    const x2 = e.targetTouches[1].pageX;\n    const y2 = e.targetTouches[1].pageY;\n    const distance = Math.sqrt(((x2 - x1) ** 2) + ((y2 - y1) ** 2));\n    return distance;\n  },\n  // Events\n  onGestureStart(e) {\n    const swiper = this;\n    const params = swiper.params.zoom;\n    const zoom = swiper.zoom;\n    const { gesture } = zoom;\n    zoom.fakeGestureTouched = false;\n    zoom.fakeGestureMoved = false;\n    if (!Support.gestures) {\n      if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {\n        return;\n      }\n      zoom.fakeGestureTouched = true;\n      gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);\n    }\n    if (!gesture.$slideEl || !gesture.$slideEl.length) {\n      gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n      if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n      gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n      if (gesture.$imageWrapEl.length === 0) {\n        gesture.$imageEl = undefined;\n        return;\n      }\n    }\n    if (gesture.$imageEl) {\n      gesture.$imageEl.transition(0);\n    }\n    swiper.zoom.isScaling = true;\n  },\n  onGestureChange(e) {\n    const swiper = this;\n    const params = swiper.params.zoom;\n    const zoom = swiper.zoom;\n    const { gesture } = zoom;\n    if (!Support.gestures) {\n      if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {\n        return;\n      }\n      zoom.fakeGestureMoved = true;\n      gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);\n    }\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    if (Support.gestures) {\n      zoom.scale = e.scale * zoom.currentScale;\n    } else {\n      zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale;\n    }\n    if (zoom.scale > gesture.maxRatio) {\n      zoom.scale = (gesture.maxRatio - 1) + (((zoom.scale - gesture.maxRatio) + 1) ** 0.5);\n    }\n    if (zoom.scale < params.minRatio) {\n      zoom.scale = (params.minRatio + 1) - (((params.minRatio - zoom.scale) + 1) ** 0.5);\n    }\n    gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n  },\n  onGestureEnd(e) {\n    const swiper = this;\n    const params = swiper.params.zoom;\n    const zoom = swiper.zoom;\n    const { gesture } = zoom;\n    if (!Support.gestures) {\n      if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {\n        return;\n      }\n      if (e.type !== 'touchend' || (e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android)) {\n        return;\n      }\n      zoom.fakeGestureTouched = false;\n      zoom.fakeGestureMoved = false;\n    }\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n    gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n    zoom.currentScale = zoom.scale;\n    zoom.isScaling = false;\n    if (zoom.scale === 1) gesture.$slideEl = undefined;\n  },\n  onTouchStart(e) {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    const { gesture, image } = zoom;\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  onTouchMove(e) {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    const { gesture, image, velocity } = 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 = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n      image.startY = Utils.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      if (swiper.rtl) {\n        image.startX = -image.startX;\n        image.startY = -image.startY;\n      }\n    }\n    // Define if we need image drag\n    const scaledWidth = image.width * zoom.scale;\n    const scaledHeight = image.height * zoom.scale;\n\n    if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n\n    image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n    image.maxX = -image.minX;\n    image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n    image.maxY = -image.minY;\n\n    image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n    image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n    if (!image.isMoved && !zoom.isScaling) {\n      if (\n        swiper.isHorizontal()\n        && (\n          (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x)\n          || (Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)\n        )\n      ) {\n        image.isTouched = false;\n        return;\n      } if (\n        !swiper.isHorizontal()\n        && (\n          (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y)\n          || (Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)\n        )\n      ) {\n        image.isTouched = false;\n        return;\n      }\n    }\n    if (e.cancelable) {\n      e.preventDefault();\n    }\n    e.stopPropagation();\n\n    image.isMoved = true;\n    image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX;\n    image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY;\n\n    if (image.currentX < image.minX) {\n      image.currentX = (image.minX + 1) - (((image.minX - image.currentX) + 1) ** 0.8);\n    }\n    if (image.currentX > image.maxX) {\n      image.currentX = (image.maxX - 1) + (((image.currentX - image.maxX) + 1) ** 0.8);\n    }\n\n    if (image.currentY < image.minY) {\n      image.currentY = (image.minY + 1) - (((image.minY - image.currentY) + 1) ** 0.8);\n    }\n    if (image.currentY > image.maxY) {\n      image.currentY = (image.maxY - 1) + (((image.currentY - image.maxY) + 1) ** 0.8);\n    }\n\n    // Velocity\n    if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n    if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n    if (!velocity.prevTime) velocity.prevTime = Date.now();\n    velocity.x = (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\n    gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n  },\n  onTouchEnd() {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    const { gesture, image, velocity } = zoom;\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    if (!image.isTouched || !image.isMoved) {\n      image.isTouched = false;\n      image.isMoved = false;\n      return;\n    }\n    image.isTouched = false;\n    image.isMoved = false;\n    let momentumDurationX = 300;\n    let momentumDurationY = 300;\n    const momentumDistanceX = velocity.x * momentumDurationX;\n    const newPositionX = image.currentX + momentumDistanceX;\n    const momentumDistanceY = velocity.y * momentumDurationY;\n    const newPositionY = image.currentY + momentumDistanceY;\n\n    // Fix duration\n    if (velocity.x !== 0) 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\n    image.currentX = newPositionX;\n    image.currentY = newPositionY;\n\n    // Define if we need image drag\n    const scaledWidth = image.width * zoom.scale;\n    const scaledHeight = image.height * zoom.scale;\n    image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n    image.maxX = -image.minX;\n    image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n    image.maxY = -image.minY;\n    image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n    image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n\n    gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n  },\n  onTransitionEnd() {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    const { gesture } = zoom;\n    if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n      if (gesture.$imageEl) {\n        gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n      }\n      if (gesture.$imageWrapEl) {\n        gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n      }\n\n      zoom.scale = 1;\n      zoom.currentScale = 1;\n\n      gesture.$slideEl = undefined;\n      gesture.$imageEl = undefined;\n      gesture.$imageWrapEl = undefined;\n    }\n  },\n  // Toggle Zoom\n  toggle(e) {\n    const swiper = this;\n    const zoom = swiper.zoom;\n\n    if (zoom.scale && zoom.scale !== 1) {\n      // Zoom Out\n      zoom.out();\n    } else {\n      // Zoom In\n      zoom.in(e);\n    }\n  },\n  in(e) {\n    const swiper = this;\n\n    const zoom = swiper.zoom;\n    const params = swiper.params.zoom;\n    const { gesture, image } = zoom;\n\n    if (!gesture.$slideEl) {\n      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n        gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n      } else {\n        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n      }\n      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n    }\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n    gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);\n\n    let touchX;\n    let touchY;\n    let offsetX;\n    let offsetY;\n    let diffX;\n    let diffY;\n    let translateX;\n    let translateY;\n    let imageWidth;\n    let imageHeight;\n    let scaledWidth;\n    let scaledHeight;\n    let translateMinX;\n    let translateMinY;\n    let translateMaxX;\n    let translateMaxY;\n    let slideWidth;\n    let slideHeight;\n\n    if (typeof image.touchesStart.x === 'undefined' && e) {\n      touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n      touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n    } else {\n      touchX = image.touchesStart.x;\n      touchY = image.touchesStart.y;\n    }\n\n    zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n    zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n    if (e) {\n      slideWidth = gesture.$slideEl[0].offsetWidth;\n      slideHeight = gesture.$slideEl[0].offsetHeight;\n      offsetX = gesture.$slideEl.offset().left;\n      offsetY = gesture.$slideEl.offset().top;\n      diffX = (offsetX + (slideWidth / 2)) - touchX;\n      diffY = (offsetY + (slideHeight / 2)) - touchY;\n\n      imageWidth = gesture.$imageEl[0].offsetWidth;\n      imageHeight = gesture.$imageEl[0].offsetHeight;\n      scaledWidth = imageWidth * zoom.scale;\n      scaledHeight = imageHeight * zoom.scale;\n\n      translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0);\n      translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0);\n      translateMaxX = -translateMinX;\n      translateMaxY = -translateMinY;\n\n      translateX = diffX * zoom.scale;\n      translateY = diffY * zoom.scale;\n\n      if (translateX < translateMinX) {\n        translateX = translateMinX;\n      }\n      if (translateX > translateMaxX) {\n        translateX = translateMaxX;\n      }\n\n      if (translateY < translateMinY) {\n        translateY = translateMinY;\n      }\n      if (translateY > translateMaxY) {\n        translateY = translateMaxY;\n      }\n    } else {\n      translateX = 0;\n      translateY = 0;\n    }\n    gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);\n    gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n  },\n  out() {\n    const swiper = this;\n\n    const zoom = swiper.zoom;\n    const params = swiper.params.zoom;\n    const { gesture } = zoom;\n\n    if (!gesture.$slideEl) {\n      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n        gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n      } else {\n        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n      }\n      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n    }\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n    zoom.scale = 1;\n    zoom.currentScale = 1;\n    gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n    gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n    gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);\n    gesture.$slideEl = undefined;\n  },\n  // Attach/Detach Events\n  enable() {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    if (zoom.enabled) return;\n    zoom.enabled = true;\n\n    const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n    const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;\n\n    const slideSelector = `.${swiper.params.slideClass}`;\n\n    // Scale image\n    if (Support.gestures) {\n      swiper.$wrapperEl.on('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.on('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);\n      swiper.$wrapperEl.on('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);\n    } else if (swiper.touchEvents.start === 'touchstart') {\n      swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);\n      swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);\n      if (swiper.touchEvents.cancel) {\n        swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);\n      }\n    }\n\n    // Move image\n    swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);\n  },\n  disable() {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    if (!zoom.enabled) return;\n\n    swiper.zoom.enabled = false;\n\n    const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n    const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;\n\n    const slideSelector = `.${swiper.params.slideClass}`;\n\n    // Scale image\n    if (Support.gestures) {\n      swiper.$wrapperEl.off('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.off('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);\n      swiper.$wrapperEl.off('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);\n    } else if (swiper.touchEvents.start === 'touchstart') {\n      swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);\n      swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);\n      if (swiper.touchEvents.cancel) {\n        swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);\n      }\n    }\n\n    // Move image\n    swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);\n  },\n};\n\nvar Zoom$1 = {\n  name: 'zoom',\n  params: {\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  create() {\n    const swiper = this;\n    const zoom = {\n      enabled: false,\n      scale: 1,\n      currentScale: 1,\n      isScaling: false,\n      gesture: {\n        $slideEl: undefined,\n        slideWidth: undefined,\n        slideHeight: undefined,\n        $imageEl: undefined,\n        $imageWrapEl: undefined,\n        maxRatio: 3,\n      },\n      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      velocity: {\n        x: undefined,\n        y: undefined,\n        prevPositionX: undefined,\n        prevPositionY: undefined,\n        prevTime: undefined,\n      },\n    };\n\n    ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach((methodName) => {\n      zoom[methodName] = Zoom[methodName].bind(swiper);\n    });\n    Utils.extend(swiper, {\n      zoom,\n    });\n\n    let scale = 1;\n    Object.defineProperty(swiper.zoom, 'scale', {\n      get() {\n        return scale;\n      },\n      set(value) {\n        if (scale !== value) {\n          const imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;\n          const slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;\n          swiper.emit('zoomChange', value, imageEl, slideEl);\n        }\n        scale = value;\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.zoom.enabled) {\n        swiper.zoom.enable();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      swiper.zoom.disable();\n    },\n    touchStart(e) {\n      const swiper = this;\n      if (!swiper.zoom.enabled) return;\n      swiper.zoom.onTouchStart(e);\n    },\n    touchEnd(e) {\n      const swiper = this;\n      if (!swiper.zoom.enabled) return;\n      swiper.zoom.onTouchEnd(e);\n    },\n    doubleTap(e) {\n      const swiper = this;\n      if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n        swiper.zoom.toggle(e);\n      }\n    },\n    transitionEnd() {\n      const swiper = this;\n      if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n        swiper.zoom.onTransitionEnd();\n      }\n    },\n    slideChange() {\n      const swiper = this;\n      if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n        swiper.zoom.onTransitionEnd();\n      }\n    },\n  },\n};\n\nconst Lazy = {\n  loadInSlide(index, loadInDuplicate = true) {\n    const swiper = this;\n    const params = swiper.params.lazy;\n    if (typeof index === 'undefined') return;\n    if (swiper.slides.length === 0) return;\n    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n    const $slideEl = isVirtual\n      ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${index}\"]`)\n      : swiper.slides.eq(index);\n\n    let $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);\n    if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n      $images = $images.add($slideEl[0]);\n    }\n    if ($images.length === 0) return;\n\n    $images.each((imageIndex, imageEl) => {\n      const $imageEl = $(imageEl);\n      $imageEl.addClass(params.loadingClass);\n\n      const background = $imageEl.attr('data-background');\n      const src = $imageEl.attr('data-src');\n      const srcset = $imageEl.attr('data-srcset');\n      const sizes = $imageEl.attr('data-sizes');\n      const $pictureEl = $imageEl.parent('picture');\n\n      swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, () => {\n        if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) return;\n        if (background) {\n          $imageEl.css('background-image', `url(\"${background}\")`);\n          $imageEl.removeAttr('data-background');\n        } else {\n          if (srcset) {\n            $imageEl.attr('srcset', srcset);\n            $imageEl.removeAttr('data-srcset');\n          }\n          if (sizes) {\n            $imageEl.attr('sizes', sizes);\n            $imageEl.removeAttr('data-sizes');\n          }\n          if ($pictureEl.length) {\n            $pictureEl.children('source').each((sourceIndex, sourceEl) => {\n              const $source = $(sourceEl);\n\n              if ($source.attr('data-srcset')) {\n                $source.attr('srcset', $source.attr('data-srcset'));\n                $source.removeAttr('data-srcset');\n              }\n            });\n          }\n          if (src) {\n            $imageEl.attr('src', src);\n            $imageEl.removeAttr('data-src');\n          }\n        }\n\n        $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n        $slideEl.find(`.${params.preloaderClass}`).remove();\n        if (swiper.params.loop && loadInDuplicate) {\n          const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n          if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n            const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index=\"${slideOriginalIndex}\"]:not(.${swiper.params.slideDuplicateClass})`);\n            swiper.lazy.loadInSlide(originalSlide.index(), false);\n          } else {\n            const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index=\"${slideOriginalIndex}\"]`);\n            swiper.lazy.loadInSlide(duplicatedSlide.index(), false);\n          }\n        }\n        swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n        if (swiper.params.autoHeight) {\n          swiper.updateAutoHeight();\n        }\n      });\n\n      swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n    });\n  },\n  load() {\n    const swiper = this;\n    const {\n      $wrapperEl, params: swiperParams, slides, activeIndex,\n    } = swiper;\n    const isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n    const params = swiperParams.lazy;\n\n    let slidesPerView = swiperParams.slidesPerView;\n    if (slidesPerView === 'auto') {\n      slidesPerView = 0;\n    }\n\n    function slideExist(index) {\n      if (isVirtual) {\n        if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index=\"${index}\"]`).length) {\n          return true;\n        }\n      } else if (slides[index]) return true;\n      return false;\n    }\n\n    function slideIndex(slideEl) {\n      if (isVirtual) {\n        return $(slideEl).attr('data-swiper-slide-index');\n      }\n      return $(slideEl).index();\n    }\n\n    if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;\n    if (swiper.params.watchSlidesVisibility) {\n      $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each((elIndex, slideEl) => {\n        const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n        swiper.lazy.loadInSlide(index);\n      });\n    } else if (slidesPerView > 1) {\n      for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n        if (slideExist(i)) swiper.lazy.loadInSlide(i);\n      }\n    } else {\n      swiper.lazy.loadInSlide(activeIndex);\n    }\n    if (params.loadPrevNext) {\n      if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {\n        const amount = params.loadPrevNextAmount;\n        const spv = slidesPerView;\n        const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n        const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);\n        // Next Slides\n        for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) {\n          if (slideExist(i)) swiper.lazy.loadInSlide(i);\n        }\n        // Prev Slides\n        for (let i = minIndex; i < activeIndex; i += 1) {\n          if (slideExist(i)) swiper.lazy.loadInSlide(i);\n        }\n      } else {\n        const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);\n        if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));\n\n        const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);\n        if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));\n      }\n    }\n  },\n};\n\nvar Lazy$1 = {\n  name: 'lazy',\n  params: {\n    lazy: {\n      enabled: false,\n      loadPrevNext: false,\n      loadPrevNextAmount: 1,\n      loadOnTransitionStart: false,\n\n      elementClass: 'swiper-lazy',\n      loadingClass: 'swiper-lazy-loading',\n      loadedClass: 'swiper-lazy-loaded',\n      preloaderClass: 'swiper-lazy-preloader',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      lazy: {\n        initialImageLoaded: false,\n        load: Lazy.load.bind(swiper),\n        loadInSlide: Lazy.loadInSlide.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n        swiper.params.preloadImages = false;\n      }\n    },\n    init() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {\n        swiper.lazy.load();\n      }\n    },\n    scroll() {\n      const swiper = this;\n      if (swiper.params.freeMode && !swiper.params.freeModeSticky) {\n        swiper.lazy.load();\n      }\n    },\n    resize() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled) {\n        swiper.lazy.load();\n      }\n    },\n    scrollbarDragMove() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled) {\n        swiper.lazy.load();\n      }\n    },\n    transitionStart() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled) {\n        if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) {\n          swiper.lazy.load();\n        }\n      }\n    },\n    transitionEnd() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n        swiper.lazy.load();\n      }\n    },\n    slideChange() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled && swiper.params.cssMode) {\n        swiper.lazy.load();\n      }\n    },\n  },\n};\n\n/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\n\nconst Controller = {\n  LinearSpline: function LinearSpline(x, y) {\n    const binarySearch = (function search() {\n      let maxIndex;\n      let minIndex;\n      let guess;\n      return (array, val) => {\n        minIndex = -1;\n        maxIndex = array.length;\n        while (maxIndex - minIndex > 1) {\n          guess = maxIndex + minIndex >> 1;\n          if (array[guess] <= val) {\n            minIndex = guess;\n          } else {\n            maxIndex = guess;\n          }\n        }\n        return maxIndex;\n      };\n    }());\n    this.x = x;\n    this.y = y;\n    this.lastIndex = x.length - 1;\n    // Given an x value (x2), return the expected y2 value:\n    // (x1,y1) is the known point before given value,\n    // (x3,y3) is the known point after given value.\n    let i1;\n    let i3;\n\n    this.interpolate = function interpolate(x2) {\n      if (!x2) return 0;\n\n      // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n      i3 = binarySearch(this.x, x2);\n      i1 = i3 - 1;\n\n      // We have our indexes i1 & i3, so we can calculate already:\n      // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n      return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];\n    };\n    return this;\n  },\n  // xxx: for now i will just save one spline function to to\n  getInterpolateFunction(c) {\n    const swiper = this;\n    if (!swiper.controller.spline) {\n      swiper.controller.spline = swiper.params.loop\n        ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)\n        : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);\n    }\n  },\n  setTranslate(setTranslate, byController) {\n    const swiper = this;\n    const controlled = swiper.controller.control;\n    let multiplier;\n    let controlledTranslate;\n    function setControlledTranslate(c) {\n      // this will create an Interpolate function based on the snapGrids\n      // x is the Grid of the scrolled scroller and y will be the controlled scroller\n      // it makes sense to create this only once and recall it for the interpolation\n      // the function does a lot of value caching for performance\n      const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n      if (swiper.params.controller.by === 'slide') {\n        swiper.controller.getInterpolateFunction(c);\n        // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n        // but it did not work out\n        controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n      }\n\n      if (!controlledTranslate || swiper.params.controller.by === 'container') {\n        multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n        controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();\n      }\n\n      if (swiper.params.controller.inverse) {\n        controlledTranslate = c.maxTranslate() - controlledTranslate;\n      }\n      c.updateProgress(controlledTranslate);\n      c.setTranslate(controlledTranslate, swiper);\n      c.updateActiveIndex();\n      c.updateSlidesClasses();\n    }\n    if (Array.isArray(controlled)) {\n      for (let i = 0; i < controlled.length; i += 1) {\n        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n          setControlledTranslate(controlled[i]);\n        }\n      }\n    } else if (controlled instanceof Swiper && byController !== controlled) {\n      setControlledTranslate(controlled);\n    }\n  },\n  setTransition(duration, byController) {\n    const swiper = this;\n    const controlled = swiper.controller.control;\n    let i;\n    function setControlledTransition(c) {\n      c.setTransition(duration, swiper);\n      if (duration !== 0) {\n        c.transitionStart();\n        if (c.params.autoHeight) {\n          Utils.nextTick(() => {\n            c.updateAutoHeight();\n          });\n        }\n        c.$wrapperEl.transitionEnd(() => {\n          if (!controlled) return;\n          if (c.params.loop && swiper.params.controller.by === 'slide') {\n            c.loopFix();\n          }\n          c.transitionEnd();\n        });\n      }\n    }\n    if (Array.isArray(controlled)) {\n      for (i = 0; i < controlled.length; i += 1) {\n        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n          setControlledTransition(controlled[i]);\n        }\n      }\n    } else if (controlled instanceof Swiper && byController !== controlled) {\n      setControlledTransition(controlled);\n    }\n  },\n};\nvar Controller$1 = {\n  name: 'controller',\n  params: {\n    controller: {\n      control: undefined,\n      inverse: false,\n      by: 'slide', // or 'container'\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      controller: {\n        control: swiper.params.controller.control,\n        getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),\n        setTranslate: Controller.setTranslate.bind(swiper),\n        setTransition: Controller.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    update() {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      if (swiper.controller.spline) {\n        swiper.controller.spline = undefined;\n        delete swiper.controller.spline;\n      }\n    },\n    resize() {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      if (swiper.controller.spline) {\n        swiper.controller.spline = undefined;\n        delete swiper.controller.spline;\n      }\n    },\n    observerUpdate() {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      if (swiper.controller.spline) {\n        swiper.controller.spline = undefined;\n        delete swiper.controller.spline;\n      }\n    },\n    setTranslate(translate, byController) {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      swiper.controller.setTranslate(translate, byController);\n    },\n    setTransition(duration, byController) {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      swiper.controller.setTransition(duration, byController);\n    },\n  },\n};\n\nconst a11y = {\n  makeElFocusable($el) {\n    $el.attr('tabIndex', '0');\n    return $el;\n  },\n  makeElNotFocusable($el) {\n    $el.attr('tabIndex', '-1');\n    return $el;\n  },\n  addElRole($el, role) {\n    $el.attr('role', role);\n    return $el;\n  },\n  addElLabel($el, label) {\n    $el.attr('aria-label', label);\n    return $el;\n  },\n  disableEl($el) {\n    $el.attr('aria-disabled', true);\n    return $el;\n  },\n  enableEl($el) {\n    $el.attr('aria-disabled', false);\n    return $el;\n  },\n  onEnterKey(e) {\n    const swiper = this;\n    const params = swiper.params.a11y;\n    if (e.keyCode !== 13) return;\n    const $targetEl = $(e.target);\n    if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n      if (!(swiper.isEnd && !swiper.params.loop)) {\n        swiper.slideNext();\n      }\n      if (swiper.isEnd) {\n        swiper.a11y.notify(params.lastSlideMessage);\n      } else {\n        swiper.a11y.notify(params.nextSlideMessage);\n      }\n    }\n    if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n      if (!(swiper.isBeginning && !swiper.params.loop)) {\n        swiper.slidePrev();\n      }\n      if (swiper.isBeginning) {\n        swiper.a11y.notify(params.firstSlideMessage);\n      } else {\n        swiper.a11y.notify(params.prevSlideMessage);\n      }\n    }\n    if (swiper.pagination && $targetEl.is(`.${swiper.params.pagination.bulletClass}`)) {\n      $targetEl[0].click();\n    }\n  },\n  notify(message) {\n    const swiper = this;\n    const notification = swiper.a11y.liveRegion;\n    if (notification.length === 0) return;\n    notification.html('');\n    notification.html(message);\n  },\n  updateNavigation() {\n    const swiper = this;\n\n    if (swiper.params.loop || !swiper.navigation) return;\n    const { $nextEl, $prevEl } = swiper.navigation;\n\n    if ($prevEl && $prevEl.length > 0) {\n      if (swiper.isBeginning) {\n        swiper.a11y.disableEl($prevEl);\n        swiper.a11y.makeElNotFocusable($prevEl);\n      } else {\n        swiper.a11y.enableEl($prevEl);\n        swiper.a11y.makeElFocusable($prevEl);\n      }\n    }\n    if ($nextEl && $nextEl.length > 0) {\n      if (swiper.isEnd) {\n        swiper.a11y.disableEl($nextEl);\n        swiper.a11y.makeElNotFocusable($nextEl);\n      } else {\n        swiper.a11y.enableEl($nextEl);\n        swiper.a11y.makeElFocusable($nextEl);\n      }\n    }\n  },\n  updatePagination() {\n    const swiper = this;\n    const params = swiper.params.a11y;\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.bullets.each((bulletIndex, bulletEl) => {\n        const $bulletEl = $(bulletEl);\n        swiper.a11y.makeElFocusable($bulletEl);\n        swiper.a11y.addElRole($bulletEl, 'button');\n        swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n      });\n    }\n  },\n  init() {\n    const swiper = this;\n\n    swiper.$el.append(swiper.a11y.liveRegion);\n\n    // Navigation\n    const params = swiper.params.a11y;\n    let $nextEl;\n    let $prevEl;\n    if (swiper.navigation && swiper.navigation.$nextEl) {\n      $nextEl = swiper.navigation.$nextEl;\n    }\n    if (swiper.navigation && swiper.navigation.$prevEl) {\n      $prevEl = swiper.navigation.$prevEl;\n    }\n    if ($nextEl) {\n      swiper.a11y.makeElFocusable($nextEl);\n      swiper.a11y.addElRole($nextEl, 'button');\n      swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);\n      $nextEl.on('keydown', swiper.a11y.onEnterKey);\n    }\n    if ($prevEl) {\n      swiper.a11y.makeElFocusable($prevEl);\n      swiper.a11y.addElRole($prevEl, 'button');\n      swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);\n      $prevEl.on('keydown', swiper.a11y.onEnterKey);\n    }\n\n    // Pagination\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.$el.on('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);\n    }\n  },\n  destroy() {\n    const swiper = this;\n    if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove();\n\n    let $nextEl;\n    let $prevEl;\n    if (swiper.navigation && swiper.navigation.$nextEl) {\n      $nextEl = swiper.navigation.$nextEl;\n    }\n    if (swiper.navigation && swiper.navigation.$prevEl) {\n      $prevEl = swiper.navigation.$prevEl;\n    }\n    if ($nextEl) {\n      $nextEl.off('keydown', swiper.a11y.onEnterKey);\n    }\n    if ($prevEl) {\n      $prevEl.off('keydown', swiper.a11y.onEnterKey);\n    }\n\n    // Pagination\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.$el.off('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);\n    }\n  },\n};\nvar A11y = {\n  name: 'a11y',\n  params: {\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    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      a11y: {\n        liveRegion: $(`<span class=\"${swiper.params.a11y.notificationClass}\" aria-live=\"assertive\" aria-atomic=\"true\"></span>`),\n      },\n    });\n    Object.keys(a11y).forEach((methodName) => {\n      swiper.a11y[methodName] = a11y[methodName].bind(swiper);\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.init();\n      swiper.a11y.updateNavigation();\n    },\n    toEdge() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updateNavigation();\n    },\n    fromEdge() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updateNavigation();\n    },\n    paginationUpdate() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updatePagination();\n    },\n    destroy() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.destroy();\n    },\n  },\n};\n\nconst History = {\n  init() {\n    const swiper = this;\n    if (!swiper.params.history) return;\n    if (!window.history || !window.history.pushState) {\n      swiper.params.history.enabled = false;\n      swiper.params.hashNavigation.enabled = true;\n      return;\n    }\n    const history = swiper.history;\n    history.initialized = true;\n    history.paths = History.getPathValues();\n    if (!history.paths.key && !history.paths.value) return;\n    history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);\n    if (!swiper.params.history.replaceState) {\n      window.addEventListener('popstate', swiper.history.setHistoryPopState);\n    }\n  },\n  destroy() {\n    const swiper = this;\n    if (!swiper.params.history.replaceState) {\n      window.removeEventListener('popstate', swiper.history.setHistoryPopState);\n    }\n  },\n  setHistoryPopState() {\n    const swiper = this;\n    swiper.history.paths = History.getPathValues();\n    swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);\n  },\n  getPathValues() {\n    const pathArray = window.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 { key, value };\n  },\n  setHistory(key, index) {\n    const swiper = this;\n    if (!swiper.history.initialized || !swiper.params.history.enabled) return;\n    const slide = swiper.slides.eq(index);\n    let value = History.slugify(slide.attr('data-history'));\n    if (!window.location.pathname.includes(key)) {\n      value = `${key}/${value}`;\n    }\n    const currentState = window.history.state;\n    if (currentState && currentState.value === value) {\n      return;\n    }\n    if (swiper.params.history.replaceState) {\n      window.history.replaceState({ value }, null, value);\n    } else {\n      window.history.pushState({ value }, null, value);\n    }\n  },\n  slugify(text) {\n    return text.toString()\n      .replace(/\\s+/g, '-')\n      .replace(/[^\\w-]+/g, '')\n      .replace(/--+/g, '-')\n      .replace(/^-+/, '')\n      .replace(/-+$/, '');\n  },\n  scrollToSlide(speed, value, runCallbacks) {\n    const swiper = this;\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 = History.slugify(slide.attr('data-history'));\n        if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n          const index = slide.index();\n          swiper.slideTo(index, speed, runCallbacks);\n        }\n      }\n    } else {\n      swiper.slideTo(0, speed, runCallbacks);\n    }\n  },\n};\n\nvar History$1 = {\n  name: 'history',\n  params: {\n    history: {\n      enabled: false,\n      replaceState: false,\n      key: 'slides',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      history: {\n        init: History.init.bind(swiper),\n        setHistory: History.setHistory.bind(swiper),\n        setHistoryPopState: History.setHistoryPopState.bind(swiper),\n        scrollToSlide: History.scrollToSlide.bind(swiper),\n        destroy: History.destroy.bind(swiper),\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.history.enabled) {\n        swiper.history.init();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.params.history.enabled) {\n        swiper.history.destroy();\n      }\n    },\n    transitionEnd() {\n      const swiper = this;\n      if (swiper.history.initialized) {\n        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n      }\n    },\n    slideChange() {\n      const swiper = this;\n      if (swiper.history.initialized && swiper.params.cssMode) {\n        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n      }\n    },\n  },\n};\n\nconst HashNavigation = {\n  onHashCange() {\n    const swiper = this;\n    swiper.emit('hashChange');\n    const newHash = document$1.location.hash.replace('#', '');\n    const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\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  setHash() {\n    const swiper = this;\n    if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return;\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      swiper.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$1.location.hash = hash || '';\n      swiper.emit('hashSet');\n    }\n  },\n  init() {\n    const swiper = this;\n    if (!swiper.params.hashNavigation.enabled || (swiper.params.history && swiper.params.history.enabled)) return;\n    swiper.hashNavigation.initialized = true;\n    const hash = document$1.location.hash.replace('#', '');\n    if (hash) {\n      const speed = 0;\n      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n        const slide = swiper.slides.eq(i);\n        const slideHash = slide.attr('data-hash') || slide.attr('data-history');\n        if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n          const index = slide.index();\n          swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n        }\n      }\n    }\n    if (swiper.params.hashNavigation.watchState) {\n      $(window).on('hashchange', swiper.hashNavigation.onHashCange);\n    }\n  },\n  destroy() {\n    const swiper = this;\n    if (swiper.params.hashNavigation.watchState) {\n      $(window).off('hashchange', swiper.hashNavigation.onHashCange);\n    }\n  },\n};\nvar HashNavigation$1 = {\n  name: 'hash-navigation',\n  params: {\n    hashNavigation: {\n      enabled: false,\n      replaceState: false,\n      watchState: false,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      hashNavigation: {\n        initialized: false,\n        init: HashNavigation.init.bind(swiper),\n        destroy: HashNavigation.destroy.bind(swiper),\n        setHash: HashNavigation.setHash.bind(swiper),\n        onHashCange: HashNavigation.onHashCange.bind(swiper),\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.hashNavigation.enabled) {\n        swiper.hashNavigation.init();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.params.hashNavigation.enabled) {\n        swiper.hashNavigation.destroy();\n      }\n    },\n    transitionEnd() {\n      const swiper = this;\n      if (swiper.hashNavigation.initialized) {\n        swiper.hashNavigation.setHash();\n      }\n    },\n    slideChange() {\n      const swiper = this;\n      if (swiper.hashNavigation.initialized && swiper.params.cssMode) {\n        swiper.hashNavigation.setHash();\n      }\n    },\n  },\n};\n\n/* eslint no-underscore-dangle: \"off\" */\n\nconst Autoplay = {\n  run() {\n    const swiper = this;\n    const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n    let delay = swiper.params.autoplay.delay;\n    if ($activeSlideEl.attr('data-swiper-autoplay')) {\n      delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n    }\n    clearTimeout(swiper.autoplay.timeout);\n    swiper.autoplay.timeout = Utils.nextTick(() => {\n      if (swiper.params.autoplay.reverseDirection) {\n        if (swiper.params.loop) {\n          swiper.loopFix();\n          swiper.slidePrev(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.isBeginning) {\n          swiper.slidePrev(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.params.autoplay.stopOnLastSlide) {\n          swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else {\n          swiper.autoplay.stop();\n        }\n      } else if (swiper.params.loop) {\n        swiper.loopFix();\n        swiper.slideNext(swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else if (!swiper.isEnd) {\n        swiper.slideNext(swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else if (!swiper.params.autoplay.stopOnLastSlide) {\n        swiper.slideTo(0, swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else {\n        swiper.autoplay.stop();\n      }\n      if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run();\n    }, delay);\n  },\n  start() {\n    const swiper = this;\n    if (typeof swiper.autoplay.timeout !== 'undefined') return false;\n    if (swiper.autoplay.running) return false;\n    swiper.autoplay.running = true;\n    swiper.emit('autoplayStart');\n    swiper.autoplay.run();\n    return true;\n  },\n  stop() {\n    const swiper = this;\n    if (!swiper.autoplay.running) return false;\n    if (typeof swiper.autoplay.timeout === 'undefined') return false;\n\n    if (swiper.autoplay.timeout) {\n      clearTimeout(swiper.autoplay.timeout);\n      swiper.autoplay.timeout = undefined;\n    }\n    swiper.autoplay.running = false;\n    swiper.emit('autoplayStop');\n    return true;\n  },\n  pause(speed) {\n    const swiper = this;\n    if (!swiper.autoplay.running) return;\n    if (swiper.autoplay.paused) return;\n    if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);\n    swiper.autoplay.paused = true;\n    if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n      swiper.autoplay.paused = false;\n      swiper.autoplay.run();\n    } else {\n      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n    }\n  },\n};\n\nvar Autoplay$1 = {\n  name: 'autoplay',\n  params: {\n    autoplay: {\n      enabled: false,\n      delay: 3000,\n      waitForTransition: true,\n      disableOnInteraction: true,\n      stopOnLastSlide: false,\n      reverseDirection: false,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      autoplay: {\n        running: false,\n        paused: false,\n        run: Autoplay.run.bind(swiper),\n        start: Autoplay.start.bind(swiper),\n        stop: Autoplay.stop.bind(swiper),\n        pause: Autoplay.pause.bind(swiper),\n        onVisibilityChange() {\n          if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n            swiper.autoplay.pause();\n          }\n          if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n            swiper.autoplay.run();\n            swiper.autoplay.paused = false;\n          }\n        },\n        onTransitionEnd(e) {\n          if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n          if (e.target !== this) return;\n          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n          swiper.autoplay.paused = false;\n          if (!swiper.autoplay.running) {\n            swiper.autoplay.stop();\n          } else {\n            swiper.autoplay.run();\n          }\n        },\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.autoplay.enabled) {\n        swiper.autoplay.start();\n        document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n      }\n    },\n    beforeTransitionStart(speed, internal) {\n      const swiper = this;\n      if (swiper.autoplay.running) {\n        if (internal || !swiper.params.autoplay.disableOnInteraction) {\n          swiper.autoplay.pause(speed);\n        } else {\n          swiper.autoplay.stop();\n        }\n      }\n    },\n    sliderFirstMove() {\n      const swiper = this;\n      if (swiper.autoplay.running) {\n        if (swiper.params.autoplay.disableOnInteraction) {\n          swiper.autoplay.stop();\n        } else {\n          swiper.autoplay.pause();\n        }\n      }\n    },\n    touchEnd() {\n      const swiper = this;\n      if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n        swiper.autoplay.run();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.autoplay.running) {\n        swiper.autoplay.stop();\n      }\n      document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n    },\n  },\n};\n\nconst Fade = {\n  setTranslate() {\n    const swiper = this;\n    const { slides } = swiper;\n    for (let i = 0; i < slides.length; i += 1) {\n      const $slideEl = swiper.slides.eq(i);\n      const offset = $slideEl[0].swiperSlideOffset;\n      let tx = -offset;\n      if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n      let ty = 0;\n      if (!swiper.isHorizontal()) {\n        ty = tx;\n        tx = 0;\n      }\n      const slideOpacity = swiper.params.fadeEffect.crossFade\n        ? Math.max(1 - Math.abs($slideEl[0].progress), 0)\n        : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n      $slideEl\n        .css({\n          opacity: slideOpacity,\n        })\n        .transform(`translate3d(${tx}px, ${ty}px, 0px)`);\n    }\n  },\n  setTransition(duration) {\n    const swiper = this;\n    const { slides, $wrapperEl } = swiper;\n    slides.transition(duration);\n    if (swiper.params.virtualTranslate && duration !== 0) {\n      let eventTriggered = false;\n      slides.transitionEnd(() => {\n        if (eventTriggered) return;\n        if (!swiper || swiper.destroyed) return;\n        eventTriggered = true;\n        swiper.animating = false;\n        const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n        for (let i = 0; i < triggerEvents.length; i += 1) {\n          $wrapperEl.trigger(triggerEvents[i]);\n        }\n      });\n    }\n  },\n};\n\nvar EffectFade = {\n  name: 'effect-fade',\n  params: {\n    fadeEffect: {\n      crossFade: false,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      fadeEffect: {\n        setTranslate: Fade.setTranslate.bind(swiper),\n        setTransition: Fade.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.effect !== 'fade') return;\n      swiper.classNames.push(`${swiper.params.containerModifierClass}fade`);\n      const overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        spaceBetween: 0,\n        virtualTranslate: true,\n      };\n      Utils.extend(swiper.params, overwriteParams);\n      Utils.extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate() {\n      const swiper = this;\n      if (swiper.params.effect !== 'fade') return;\n      swiper.fadeEffect.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (swiper.params.effect !== 'fade') return;\n      swiper.fadeEffect.setTransition(duration);\n    },\n  },\n};\n\nconst Cube = {\n  setTranslate() {\n    const swiper = this;\n    const {\n      $el, $wrapperEl, slides, width: swiperWidth, height: swiperHeight, rtlTranslate: rtl, size: swiperSize,\n    } = swiper;\n    const params = swiper.params.cubeEffect;\n    const isHorizontal = swiper.isHorizontal();\n    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n    let wrapperRotate = 0;\n    let $cubeShadowEl;\n    if (params.shadow) {\n      if (isHorizontal) {\n        $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n        if ($cubeShadowEl.length === 0) {\n          $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n          $wrapperEl.append($cubeShadowEl);\n        }\n        $cubeShadowEl.css({ height: `${swiperWidth}px` });\n      } else {\n        $cubeShadowEl = $el.find('.swiper-cube-shadow');\n        if ($cubeShadowEl.length === 0) {\n          $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n          $el.append($cubeShadowEl);\n        }\n      }\n    }\n    for (let i = 0; i < slides.length; i += 1) {\n      const $slideEl = slides.eq(i);\n      let slideIndex = i;\n      if (isVirtual) {\n        slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n      }\n      let slideAngle = slideIndex * 90;\n      let round = Math.floor(slideAngle / 360);\n      if (rtl) {\n        slideAngle = -slideAngle;\n        round = Math.floor(-slideAngle / 360);\n      }\n      const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n      let tx = 0;\n      let ty = 0;\n      let tz = 0;\n      if (slideIndex % 4 === 0) {\n        tx = -round * 4 * swiperSize;\n        tz = 0;\n      } else if ((slideIndex - 1) % 4 === 0) {\n        tx = 0;\n        tz = -round * 4 * swiperSize;\n      } else if ((slideIndex - 2) % 4 === 0) {\n        tx = swiperSize + (round * 4 * swiperSize);\n        tz = swiperSize;\n      } else if ((slideIndex - 3) % 4 === 0) {\n        tx = -swiperSize;\n        tz = (3 * swiperSize) + (swiperSize * 4 * round);\n      }\n      if (rtl) {\n        tx = -tx;\n      }\n\n      if (!isHorizontal) {\n        ty = tx;\n        tx = 0;\n      }\n\n      const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n      if (progress <= 1 && progress > -1) {\n        wrapperRotate = (slideIndex * 90) + (progress * 90);\n        if (rtl) wrapperRotate = (-slideIndex * 90) - (progress * 90);\n      }\n      $slideEl.transform(transform);\n      if (params.slideShadows) {\n        // Set shadows\n        let shadowBefore = isHorizontal ? $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        if (shadowBefore.length === 0) {\n          shadowBefore = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}\"></div>`);\n          $slideEl.append(shadowBefore);\n        }\n        if (shadowAfter.length === 0) {\n          shadowAfter = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}\"></div>`);\n          $slideEl.append(shadowAfter);\n        }\n        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n      }\n    }\n    $wrapperEl.css({\n      '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,\n      '-moz-transform-origin': `50% 50% -${swiperSize / 2}px`,\n      '-ms-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 - (\n          (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2)\n          + (Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2)\n        );\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    const zFactor = (Browser.isSafari || Browser.isWebView) ? (-swiperSize / 2) : 0;\n    $wrapperEl\n      .transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`);\n  },\n  setTransition(duration) {\n    const swiper = this;\n    const { $el, slides } = swiper;\n    slides\n      .transition(duration)\n      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n      .transition(duration);\n    if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n      $el.find('.swiper-cube-shadow').transition(duration);\n    }\n  },\n};\n\nvar EffectCube = {\n  name: 'effect-cube',\n  params: {\n    cubeEffect: {\n      slideShadows: true,\n      shadow: true,\n      shadowOffset: 20,\n      shadowScale: 0.94,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      cubeEffect: {\n        setTranslate: Cube.setTranslate.bind(swiper),\n        setTransition: Cube.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.effect !== 'cube') return;\n      swiper.classNames.push(`${swiper.params.containerModifierClass}cube`);\n      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n      const overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        resistanceRatio: 0,\n        spaceBetween: 0,\n        centeredSlides: false,\n        virtualTranslate: true,\n      };\n      Utils.extend(swiper.params, overwriteParams);\n      Utils.extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate() {\n      const swiper = this;\n      if (swiper.params.effect !== 'cube') return;\n      swiper.cubeEffect.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (swiper.params.effect !== 'cube') return;\n      swiper.cubeEffect.setTransition(duration);\n    },\n  },\n};\n\nconst Flip = {\n  setTranslate() {\n    const swiper = this;\n    const { slides, rtlTranslate: rtl } = swiper;\n    for (let i = 0; i < slides.length; i += 1) {\n      const $slideEl = slides.eq(i);\n      let progress = $slideEl[0].progress;\n      if (swiper.params.flipEffect.limitRotation) {\n        progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n      }\n      const offset = $slideEl[0].swiperSlideOffset;\n      const rotate = -180 * progress;\n      let rotateY = rotate;\n      let rotateX = 0;\n      let tx = -offset;\n      let ty = 0;\n      if (!swiper.isHorizontal()) {\n        ty = tx;\n        tx = 0;\n        rotateX = -rotateY;\n        rotateY = 0;\n      } else if (rtl) {\n        rotateY = -rotateY;\n      }\n\n      $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n      if (swiper.params.flipEffect.slideShadows) {\n        // Set shadows\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        if (shadowBefore.length === 0) {\n          shadowBefore = $(`<div class=\"swiper-slide-shadow-${swiper.isHorizontal() ? 'left' : 'top'}\"></div>`);\n          $slideEl.append(shadowBefore);\n        }\n        if (shadowAfter.length === 0) {\n          shadowAfter = $(`<div class=\"swiper-slide-shadow-${swiper.isHorizontal() ? 'right' : 'bottom'}\"></div>`);\n          $slideEl.append(shadowAfter);\n        }\n        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n      }\n      $slideEl\n        .transform(`translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`);\n    }\n  },\n  setTransition(duration) {\n    const swiper = this;\n    const { slides, activeIndex, $wrapperEl } = swiper;\n    slides\n      .transition(duration)\n      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n      .transition(duration);\n    if (swiper.params.virtualTranslate && duration !== 0) {\n      let eventTriggered = false;\n      // eslint-disable-next-line\n      slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {\n        if (eventTriggered) return;\n        if (!swiper || swiper.destroyed) return;\n        // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;\n        eventTriggered = true;\n        swiper.animating = false;\n        const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n        for (let i = 0; i < triggerEvents.length; i += 1) {\n          $wrapperEl.trigger(triggerEvents[i]);\n        }\n      });\n    }\n  },\n};\n\nvar EffectFlip = {\n  name: 'effect-flip',\n  params: {\n    flipEffect: {\n      slideShadows: true,\n      limitRotation: true,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      flipEffect: {\n        setTranslate: Flip.setTranslate.bind(swiper),\n        setTransition: Flip.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.effect !== 'flip') return;\n      swiper.classNames.push(`${swiper.params.containerModifierClass}flip`);\n      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n      const overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        spaceBetween: 0,\n        virtualTranslate: true,\n      };\n      Utils.extend(swiper.params, overwriteParams);\n      Utils.extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate() {\n      const swiper = this;\n      if (swiper.params.effect !== 'flip') return;\n      swiper.flipEffect.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (swiper.params.effect !== 'flip') return;\n      swiper.flipEffect.setTransition(duration);\n    },\n  },\n};\n\nconst Coverflow = {\n  setTranslate() {\n    const swiper = this;\n    const {\n      width: swiperWidth, height: swiperHeight, slides, $wrapperEl, 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;\n    // Each slide offset from center\n    for (let i = 0, length = slides.length; i < length; i += 1) {\n      const $slideEl = slides.eq(i);\n      const slideSize = slidesSizesGrid[i];\n      const slideOffset = $slideEl[0].swiperSlideOffset;\n      const offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier;\n\n      let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n      let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n      // var rotateZ = 0\n      let translateZ = -translate * Math.abs(offsetMultiplier);\n\n      let stretch = params.stretch;\n      // Allow percentage to make a relative stretch for responsive sliders\n      if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n        stretch = ((parseFloat(params.stretch) / 100) * slideSize);\n      }\n      let translateY = isHorizontal ? 0 : stretch * (offsetMultiplier);\n      let translateX = isHorizontal ? stretch * (offsetMultiplier) : 0;\n\n      let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);\n\n      // Fix for ultra small values\n      if (Math.abs(translateX) < 0.001) translateX = 0;\n      if (Math.abs(translateY) < 0.001) translateY = 0;\n      if (Math.abs(translateZ) < 0.001) translateZ = 0;\n      if (Math.abs(rotateY) < 0.001) rotateY = 0;\n      if (Math.abs(rotateX) < 0.001) rotateX = 0;\n      if (Math.abs(scale) < 0.001) scale = 0;\n\n      const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px)  rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;\n\n      $slideEl.transform(slideTransform);\n      $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\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        if ($shadowBeforeEl.length === 0) {\n          $shadowBeforeEl = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}\"></div>`);\n          $slideEl.append($shadowBeforeEl);\n        }\n        if ($shadowAfterEl.length === 0) {\n          $shadowAfterEl = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}\"></div>`);\n          $slideEl.append($shadowAfterEl);\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    // Set correct perspective for IE10\n    if (Support.pointerEvents || Support.prefixedPointerEvents) {\n      const ws = $wrapperEl[0].style;\n      ws.perspectiveOrigin = `${center}px 50%`;\n    }\n  },\n  setTransition(duration) {\n    const swiper = this;\n    swiper.slides\n      .transition(duration)\n      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n      .transition(duration);\n  },\n};\n\nvar EffectCoverflow = {\n  name: 'effect-coverflow',\n  params: {\n    coverflowEffect: {\n      rotate: 50,\n      stretch: 0,\n      depth: 100,\n      scale: 1,\n      modifier: 1,\n      slideShadows: true,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      coverflowEffect: {\n        setTranslate: Coverflow.setTranslate.bind(swiper),\n        setTransition: Coverflow.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.effect !== 'coverflow') return;\n\n      swiper.classNames.push(`${swiper.params.containerModifierClass}coverflow`);\n      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n\n      swiper.params.watchSlidesProgress = true;\n      swiper.originalParams.watchSlidesProgress = true;\n    },\n    setTranslate() {\n      const swiper = this;\n      if (swiper.params.effect !== 'coverflow') return;\n      swiper.coverflowEffect.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (swiper.params.effect !== 'coverflow') return;\n      swiper.coverflowEffect.setTransition(duration);\n    },\n  },\n};\n\nconst Thumbs = {\n  init() {\n    const swiper = this;\n    const { thumbs: thumbsParams } = swiper.params;\n    const SwiperClass = swiper.constructor;\n    if (thumbsParams.swiper instanceof SwiperClass) {\n      swiper.thumbs.swiper = thumbsParams.swiper;\n      Utils.extend(swiper.thumbs.swiper.originalParams, {\n        watchSlidesProgress: true,\n        slideToClickedSlide: false,\n      });\n      Utils.extend(swiper.thumbs.swiper.params, {\n        watchSlidesProgress: true,\n        slideToClickedSlide: false,\n      });\n    } else if (Utils.isObject(thumbsParams.swiper)) {\n      swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, {\n        watchSlidesVisibility: true,\n        watchSlidesProgress: true,\n        slideToClickedSlide: false,\n      }));\n      swiper.thumbs.swiperCreated = true;\n    }\n    swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n    swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);\n  },\n  onThumbClick() {\n    const swiper = this;\n    const thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper) return;\n    const clickedIndex = thumbsSwiper.clickedIndex;\n    const clickedSlide = thumbsSwiper.clickedSlide;\n    if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n    if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n    let slideToIndex;\n    if (thumbsSwiper.params.loop) {\n      slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n    } else {\n      slideToIndex = clickedIndex;\n    }\n    if (swiper.params.loop) {\n      let currentIndex = swiper.activeIndex;\n      if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n        swiper.loopFix();\n        // eslint-disable-next-line\n        swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n        currentIndex = swiper.activeIndex;\n      }\n      const prevIndex = swiper.slides.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;\n      else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;\n      else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;\n      else slideToIndex = prevIndex;\n    }\n    swiper.slideTo(slideToIndex);\n  },\n  update(initial) {\n    const swiper = this;\n    const thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper) return;\n\n    const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto'\n      ? thumbsSwiper.slidesPerViewDynamic()\n      : thumbsSwiper.params.slidesPerView;\n\n    const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n    const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n    if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n      let currentThumbsIndex = thumbsSwiper.activeIndex;\n      let newThumbsIndex;\n      let direction;\n      if (thumbsSwiper.params.loop) {\n        if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n          thumbsSwiper.loopFix();\n          // eslint-disable-next-line\n          thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n          currentThumbsIndex = thumbsSwiper.activeIndex;\n        }\n        // Find actual thumbs index to slide to\n        const prevThumbsIndex = thumbsSwiper.slides\n          .eq(currentThumbsIndex)\n          .prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0)\n          .index();\n        const nextThumbsIndex = thumbsSwiper.slides\n          .eq(currentThumbsIndex)\n          .nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0)\n          .index();\n        if (typeof prevThumbsIndex === 'undefined') newThumbsIndex = nextThumbsIndex;\n        else if (typeof nextThumbsIndex === 'undefined') newThumbsIndex = prevThumbsIndex;\n        else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) newThumbsIndex = currentThumbsIndex;\n        else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) newThumbsIndex = nextThumbsIndex;\n        else newThumbsIndex = prevThumbsIndex;\n        direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n      } else {\n        newThumbsIndex = swiper.realIndex;\n        direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n      }\n      if (useOffset) {\n        newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n      }\n\n      if (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) {\n          newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n        }\n        thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n      }\n    }\n\n    // Activate thumbs\n    let thumbsToActivate = 1;\n    const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n    if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n      thumbsToActivate = swiper.params.slidesPerView;\n    }\n\n    if (!swiper.params.thumbs.multipleActiveThumbs) {\n      thumbsToActivate = 1;\n    }\n\n    thumbsToActivate = Math.floor(thumbsToActivate);\n\n    thumbsSwiper.slides.removeClass(thumbActiveClass);\n    if (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};\nvar Thumbs$1 = {\n  name: 'thumbs',\n  params: {\n    thumbs: {\n      swiper: null,\n      multipleActiveThumbs: true,\n      autoScrollOffset: 0,\n      slideThumbActiveClass: 'swiper-slide-thumb-active',\n      thumbsContainerClass: 'swiper-container-thumbs',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      thumbs: {\n        swiper: null,\n        init: Thumbs.init.bind(swiper),\n        update: Thumbs.update.bind(swiper),\n        onThumbClick: Thumbs.onThumbClick.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      const { thumbs } = swiper.params;\n      if (!thumbs || !thumbs.swiper) return;\n      swiper.thumbs.init();\n      swiper.thumbs.update(true);\n    },\n    slideChange() {\n      const swiper = this;\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    update() {\n      const swiper = this;\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    resize() {\n      const swiper = this;\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    observerUpdate() {\n      const swiper = this;\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      const thumbsSwiper = swiper.thumbs.swiper;\n      if (!thumbsSwiper) return;\n      thumbsSwiper.setTransition(duration);\n    },\n    beforeDestroy() {\n      const swiper = this;\n      const thumbsSwiper = swiper.thumbs.swiper;\n      if (!thumbsSwiper) return;\n      if (swiper.thumbs.swiperCreated && thumbsSwiper) {\n        thumbsSwiper.destroy();\n      }\n    },\n  },\n};\n\n// Swiper Class\n\nconst components = [\n  Device$1,\n  Support$1,\n  Browser$1,\n  Resize,\n  Observer$1,\n  Virtual$1,\n  Keyboard$1,\n  Mousewheel$1,\n  Navigation$1,\n  Pagination$1,\n  Scrollbar$1,\n  Parallax$1,\n  Zoom$1,\n  Lazy$1,\n  Controller$1,\n  A11y,\n  History$1,\n  HashNavigation$1,\n  Autoplay$1,\n  EffectFade,\n  EffectCube,\n  EffectFlip,\n  EffectCoverflow,\n  Thumbs$1\n];\n\nif (typeof Swiper.use === 'undefined') {\n  Swiper.use = Swiper.Class.use;\n  Swiper.installModule = Swiper.Class.installModule;\n}\n\nSwiper.use(components);\n\nexport default Swiper;\n//# sourceMappingURL=swiper.esm.bundle.js.map\n","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-3!../../node_modules/sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TeaserCard.vue?vue&type=style&index=0&id=0149a63a&prod&lang=sass\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"44fdc221\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".eobuchung-dv-classification-list{background:#fff!important;border:1px solid #000;opacity:1!important;font-size:19px!important}.eobuchung-dv-classification-list-item{display:block}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".eobuchung-teaser-card{padding-bottom:44px;margin-top:0!important}.eobuchung-teaser-card-pointer{cursor:pointer}.eobuchung-teaser-card-top-icon{position:absolute;top:-2px;left:-2px}.eobuchung-teaser-card-top-label{position:absolute;top:.5em;left:10px}.eobuchung-teaser-card-top-label div{padding:3px 15px}.eobuchung-teaser-card-actions{position:absolute;bottom:12px;right:12px}.eobuchung-teaser-card-picture-container{display:flex;flex-direction:column;justify-content:center;align-items:center;width:calc(100% + 24px);height:auto;aspect-ratio:16/9}.eobuchung-teaser-card-picture-container img{width:auto;height:100%}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"eobuchung-teaser eobuchung-widget\"},[_c('v-app',{attrs:{\"id\":_vm.id}},[_c('div',{directives:[{name:\"resize\",rawName:\"v-resize.quiet\",value:(_vm.onResize),expression:\"onResize\",modifiers:{\"quiet\":true}}],ref:\"theWidget\",staticClass:\"eobuchung-teaser-container\",class:{'is-mobile': _vm.isMobile}},[(_vm.listEntries && _vm.listEntries.length)?_c('v-row',[_c('v-col',{staticClass:\"d-flex\",attrs:{\"cols\":\"12\"}},[_c('div',{staticClass:\"swiper-button-prev\",class:_vm.swiperNavigationRandomClass,attrs:{\"slot\":\"button-prev\"},slot:\"button-prev\"},[_c('v-icon',[_vm._v(_vm._s(_vm.mdiArrowLeft))])],1),_c('swiper',{key:_vm.swiperKey,ref:\"swiper\",attrs:{\"options\":_vm.swiperOption},on:{\"~slideChangeTransitionStart\":function($event){return _vm.slideChangeTransitionStart.apply(null, arguments)}}},_vm._l((_vm.listEntries),function(listEntry,idx){return _c('swiper-slide',{key:listEntry.tomasId},[_c('eo-teaser-card',{style:(_vm.slideStyle),attrs:{\"index\":idx,\"tomas-id\":listEntry.tomasId}})],1)}),1),_c('div',{staticClass:\"swiper-button-next\",class:_vm.swiperNavigationRandomClass,attrs:{\"slot\":\"button-next\"},slot:\"button-next\"},[_c('v-icon',[_vm._v(_vm._s(_vm.mdiArrowRight))])],1)],1)],1):(_vm.isLoading)?_c('v-alert',{attrs:{\"color\":\"primary\",\"dark\":\"\"}},[_c('v-progress-circular',{attrs:{\"indeterminate\":\"\"}}),_vm._v(\" \"+_vm._s(_vm.$t(\"message.loading\"))+\" \")],1):_c('v-alert',{attrs:{\"type\":\"info\",\"prominent\":\"\"}},[_vm._v(_vm._s(_vm.$t(\"message.noHits\")))]),(_vm.error)?_c('v-alert',{attrs:{\"color\":\"error\",\"dark\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.error)+\" \")]):_vm._e()],1)])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-card',{staticClass:\"eobuchung-teaser-card\",staticStyle:{\"margin-top\":\"0 !important\"},attrs:{\"id\":'eo-card-' + _vm.index,\"data-id\":_vm.tomasId,\"elevation\":\"8\",\"loading\":_vm.isLoading,\"href\":_vm.detailViewURL,\"target\":\"_blank\"}},[(_vm.error)?_c('v-alert',{attrs:{\"color\":\"error\",\"dark\":\"\"}},[_c('v-card-text',[_vm._v(\" \"+_vm._s(_vm.error)+\" \")])],1):_vm._e(),(_vm.isLoading)?_c('div',{staticClass:\"d-md-flex flex-no-wrap justify-start\"},[_c('div',{staticClass:\"ma-3\",staticStyle:{\"width\":\"100%\"}},[_c('v-skeleton-loader',{attrs:{\"type\":\"image\"}})],1),_c('div',{staticClass:\"mr-4 mt-3 flex-grow-1\"},[_c('v-skeleton-loader',{attrs:{\"type\":\"article, actions\"}})],1)]):_vm._e(),(!_vm.error && _vm.serviceProvider)?_c('div',{staticClass:\"justify-start\"},[_c('v-avatar',{staticClass:\"ma-3\",attrs:{\"height\":\"260\",\"width\":\"calc(100% - 24px)\",\"tile\":\"\"}},[(_vm.galleryPicture)?_c('img',{staticStyle:{\"width\":\"100%\",\"object-fit\":\"cover\"},attrs:{\"src\":_vm.galleryPicture,\"alt\":_vm.galleryPictureDesc,\"title\":_vm.galleryPictureDesc}}):_vm._e(),(_vm.topIcon)?_c('div',{staticClass:\"eobuchung-teaser-card-top-icon\",domProps:{\"innerHTML\":_vm._s(_vm.topIcon)}}):_vm._e(),(_vm.topLabel)?_c('div',{staticClass:\"eobuchung-teaser-card-top-label\",domProps:{\"innerHTML\":_vm._s(_vm.topLabel)}}):_vm._e()]),_c('v-card-title',{staticClass:\"font-weight-bold text-h6 pt-0 pb-0\",domProps:{\"textContent\":_vm._s(_vm.companyName)}}),_c('v-card-text',{staticStyle:{\"width\":\"auto\"}},[_c('div',{staticClass:\"mb-1\"},[_vm._v(_vm._s(_vm.location))]),_c('eo-classification-from-to',{attrs:{\"service-provider\":_vm.serviceProvider}}),(_vm.trustYouId)?_c('div',[_c('iframe',{staticClass:\"mt-2\",staticStyle:{\"pointer-events\":\"none\"},attrs:{\"title\":\"TrustYou Rating\",\"id\":'trustyou-teaser-' + _vm.trustYouId,\"src\":'https://api.trustyou.com/hotels/' + _vm.trustYouId + '/seal.html?size=s&key=' + _vm.trustYouAPIKey + '&lang=' + _vm.$i18n.locale,\"allowtransparency\":\"true\",\"frameborder\":\"0\",\"height\":42,\"width\":\"215\",\"scrolling\":\"no\"}})]):_vm._e(),_c('eo-feature-icons',{attrs:{\"service-provider\":_vm.serviceProvider,\"x-small\":\"\",\"space\":\"\",\"is-teaser-icon\":\"\"}}),_c('div',{staticClass:\"eobuchung-teaser-card-actions\"},[_c('v-btn',{attrs:{\"color\":\"primary\",\"tile\":\"\"}},[(_vm.serviceProvider.base_price)?_c('span',{staticClass:\"text-center text-caption\"},[_vm._v(\" \"+_vm._s(_vm.$t('message.priceXPerUnitNight', { price: _vm.serviceProvider.base_price }))+\" \")]):_c('span',[_vm._v(_vm._s(_vm.$t(\"message.showOffer\")))])])],1)],1)],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <v-card class=\"eobuchung-teaser-card\" :id=\"'eo-card-' + index\" :data-id=\"tomasId\" elevation=\"8\" :loading=\"isLoading\" :href=\"detailViewURL\" target=\"_blank\" style=\"margin-top: 0 !important\">\n    <v-alert v-if=\"error\" color=\"error\" dark>\n      <v-card-text>\n        {{ error }}\n      </v-card-text>\n    </v-alert>\n    <div class=\"d-md-flex flex-no-wrap justify-start\" v-if=\"isLoading\">\n      <div class=\"ma-3\" style=\"width: 100%\">\n        <v-skeleton-loader type=\"image\" />\n      </div>\n      <div class=\"mr-4 mt-3 flex-grow-1\">\n        <v-skeleton-loader type=\"article, actions\" />\n      </div>\n    </div>\n    <div class=\"justify-start\" v-if=\"!error && serviceProvider\">\n      <v-avatar class=\"ma-3\" height=\"260\" width=\"calc(100% - 24px)\" tile>\n        <img v-if=\"galleryPicture\" style=\"width:100%;object-fit: cover\" :src=\"galleryPicture\" :alt=\"galleryPictureDesc\" :title=\"galleryPictureDesc\"/>\n        <div v-if=\"topIcon\" class=\"eobuchung-teaser-card-top-icon\" v-html=\"topIcon\"></div>\n        <div v-if=\"topLabel\" class=\"eobuchung-teaser-card-top-label\" v-html=\"topLabel\"></div>\n      </v-avatar>\n\n      <v-card-title class=\"font-weight-bold text-h6 pt-0 pb-0\" v-text=\"companyName\"></v-card-title>\n\n      <v-card-text style=\"width: auto;\">\n        <div class=\"mb-1\">{{ location }}</div>\n\n        <eo-classification-from-to :service-provider=\"serviceProvider\" />\n\n        <div v-if=\"trustYouId\">\n          <iframe class=\"mt-2\"\n                  title=\"TrustYou Rating\"\n                  :id=\"'trustyou-teaser-' + trustYouId\"\n                  :src=\"'https://api.trustyou.com/hotels/' + trustYouId + '/seal.html?size=s&key=' + trustYouAPIKey + '&lang=' + $i18n.locale\"\n                  allowtransparency=\"true\" frameborder=\"0\" :height=\"42\" width=\"215\" scrolling=\"no\"\n                  style=\"pointer-events: none\"\n          ></iframe>\n        </div>\n\n        <eo-feature-icons :service-provider=\"serviceProvider\" x-small space is-teaser-icon />\n\n        <div class=\"eobuchung-teaser-card-actions\">\n          <v-btn color=\"primary\" tile>\n            <span v-if=\"serviceProvider.base_price\" class=\"text-center text-caption\">\n              {{ $t('message.priceXPerUnitNight', { price: serviceProvider.base_price })}}\n            </span>\n            <span v-else>{{ $t(\"message.showOffer\") }}</span>\n          </v-btn>\n        </div>\n      </v-card-text>\n    </div>\n  </v-card>\n</template>\n\n<script>\nimport {layoutDataMixin} from \"../mixins/layout-data-mixin\";\nimport EoFeatureIcons from \"./FeatureIcons\";\nimport {logMixin} from \"../mixins/log-mixin.js\";\nimport EoClassificationFromTo from \"./ClassificationFromTo.vue\";\nimport {addApiUrlToUrl} from \"@/lib/getApiUrl\";\nimport {getSizedPictureUrl} from \"@/lib/get-sized-picture-url\";\n\nexport default {\n  name: 'eo-teaser-card',\n  components: {EoClassificationFromTo, EoFeatureIcons},\n  mixins: [layoutDataMixin, logMixin],\n  props: {\n    index: null,\n    tomasId: {\n      type: String,\n      required: true,\n    },\n  },\n  data: () => ({\n    isLoading: true,\n    error: '',\n    serviceProvider: undefined, // service provider to show\n  }),\n  async created() {\n    // load data\n    await this.loadData();\n  },\n  methods: {\n    /**\n     * Load data\n     * @returns {Promise<void>}\n     */\n    async loadData() {\n      // loading finished\n      this.isLoading = true;\n\n      if (!this.tomasId) {\n        this.error = 'data-id-or-name attribute missing!';\n        return;\n      }\n\n      try {\n        this.serviceProvider = await this.$store.dispatch('getServiceProvider', this.tomasId);\n        if (this.serviceProvider == null || this.serviceProvider.error !== undefined) {\n          this.error = this.serviceProvider.error + (this.serviceProvider.message ? ' ' + this.serviceProvider.message : '');\n          this.isLoading = false;\n          //return;\n        }\n      } catch (e) {\n        this.error = e;\n      } finally {\n        // loading finished\n        this.isLoading = false;\n      }\n\n      // load trust you rating\n      this.loadTrustYouRating();\n    },\n  },\n  computed: {\n    // return correct company name\n    companyName() {\n      return this.serviceProvider && this.serviceProvider.address && this.serviceProvider.address.companyName1.trim();\n    },\n    /**\n     * computes location settings\n     * @returns {string}\n     */\n    location() {\n      if (this.serviceProvider && this.$store.state.configIsLoaded) {\n        const layout = this.$store.getters.getLayout('listCardLocation');\n        if (layout) {\n          return this.getLayoutText(layout, this.serviceProvider);\n        }\n      }\n      return '';\n    },\n    primeColor() {\n      if (this.serviceProvider && this.$store.state.configIsLoaded) {\n        const layout = this.$store.getters.getLayout('listCardPrimeColor');\n        if (layout) {\n          return this.getLayoutText(layout, this.serviceProvider);\n        }\n      }\n      return '';\n    },\n    topIcon() {\n      if (this.serviceProvider && this.$store.state.configIsLoaded) {\n        const layout = this.$store.getters.getLayout('listCardTopIcon');\n        if (layout) {\n          return this.getLayoutText(layout, this.serviceProvider);\n        }\n      }\n      return '';\n    },\n    topLabel() {\n      if (this.serviceProvider && this.$store.state.configIsLoaded) {\n        const layout = this.$store.getters.getLayout('listCardTopLabel');\n        if (layout) {\n          return this.getLayoutText(layout, this.serviceProvider);\n        }\n      }\n      return '';\n    },\n    galleryPicture() {\n      if (this.serviceProvider && this.serviceProvider.pictures) {\n        const pics = this.serviceProvider.pictures;\n        let pic = undefined;\n        if (pics.Gallery && pics.Gallery.length) {\n          pic = pics.Gallery[0];\n        } else if (pics.Preview && pics.Preview.length) {\n          pic = pics.Preview[0];\n        }\n\n        if (pic) {\n          return getSizedPictureUrl(pic, 0, 300);\n        }\n      }\n      return null;\n    },\n    galleryPictureDesc() {\n      if (this.serviceProvider && this.serviceProvider.pictures_desc) {\n        const pics = this.serviceProvider.pictures_desc;\n        let pic = undefined;\n        if (pics.Gallery && pics.Gallery.length) {\n          pic = pics.Gallery[0];\n        } else if (pics.Preview && pics.Preview.length) {\n          pic = pics.Preview[0];\n        }\n\n        if (pic) {\n          return pic;\n        }\n      }\n      return null;\n    },\n    detailViewURL() {\n      if (this.serviceProvider) {\n        return addApiUrlToUrl(\n          this.$store.state.detailUri.replaceAll('xxxSLUGxxx', this.serviceProvider.url).replaceAll(/&cHash=[0-9a-fA-F]+/g, '')\n        );\n      }\n      return '';\n    },\n    primaryColor () {\n      return this.$vuetify.theme.currentTheme.primary;\n    },\n    trustYouAPIKey() {\n      return this.$store.state.configIsLoaded && this.$store.state.config.trustYouAPIKey;\n    }\n  },\n};\n</script>\n\n<style lang=\"sass\">\n.eobuchung-teaser-card\n  padding-bottom: 44px // 36 px for button height + 8 for padding\n  margin-top: 0 !important\n\n  &-pointer\n    cursor: pointer\n\n  &-top-icon\n    position: absolute\n    top: -2px\n    left: -2px\n\n  &-top-label\n    position: absolute\n    top: 0.5em\n    left: 10px\n\n    div\n      padding: 3px 15px\n\n  &-actions\n    position: absolute\n    bottom: 12px\n    right: 12px\n\n  &-picture-container\n    display: flex\n    flex-direction: column\n    justify-content: center\n    align-items: center\n    width: calc( 100% + 24px )\n    height: auto\n    aspect-ratio: 16/9\n\n    img\n      width: auto\n      height: 100%\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TeaserCard.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TeaserCard.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./TeaserCard.vue?vue&type=template&id=0149a63a\"\nimport script from \"./TeaserCard.vue?vue&type=script&lang=js\"\nexport * from \"./TeaserCard.vue?vue&type=script&lang=js\"\nimport style0 from \"./TeaserCard.vue?vue&type=style&index=0&id=0149a63a&prod&lang=sass\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","<template>\n  <div class=\"eobuchung-teaser eobuchung-widget\">\n    <v-app :id=\"id\">\n      <div\n          ref=\"theWidget\"\n          v-resize.quiet=\"onResize\"\n          class=\"eobuchung-teaser-container\"\n          :class=\"{'is-mobile': isMobile}\"\n      >\n        <v-row v-if=\"listEntries && listEntries.length\">\n          <v-col cols=\"12\" class=\"d-flex\">\n            <div class=\"swiper-button-prev\" :class=\"swiperNavigationRandomClass\" slot=\"button-prev\">\n              <v-icon >{{ mdiArrowLeft }}</v-icon>\n            </div>\n            <swiper ref=\"swiper\" :options=\"swiperOption\" :key=\"swiperKey\" @slideChangeTransitionStart.once=\"slideChangeTransitionStart\" >\n              <swiper-slide v-for=\"(listEntry, idx) in listEntries\" :key=\"listEntry.tomasId\">\n                <eo-teaser-card :index=\"idx\" :tomas-id=\"listEntry.tomasId\" :style=\"slideStyle\" />\n              </swiper-slide>\n            </swiper>\n            <div class=\"swiper-button-next\" :class=\"swiperNavigationRandomClass\" slot=\"button-next\">\n              <v-icon>{{ mdiArrowRight }}</v-icon>\n            </div>\n          </v-col>\n        </v-row>\n        <v-alert v-else-if=\"isLoading\" color=\"primary\" dark>\n          <v-progress-circular indeterminate /> {{ $t(\"message.loading\") }}\n        </v-alert>\n        <v-alert v-else type=\"info\" prominent>{{ $t(\"message.noHits\") }}</v-alert>\n\n        <v-alert v-if=\"error\" color=\"error\" dark>\n          {{ error }}\n        </v-alert>\n      </div>\n    </v-app>\n  </div>\n</template>\n\n<script>\nimport Vue from \"vue\";\nimport VueI18n from \"vue-i18n\";\nimport createLang from \"./lib/lang\";\nimport apiSearch from \"./lib/api-search\";\nimport EoTeaserCard from \"./components/TeaserCard\";\nimport {mdiChevronLeftCircle, mdiChevronRightCircle} from \"@mdi/js\";\nimport \"swiper/css/swiper.css\";\nimport {Swiper, SwiperSlide} from \"vue-awesome-swiper\";\n\nVue.use(VueI18n);\nconst i18n = createLang();\n\nexport default {\n  name: \"teaser\",\n  components: {EoTeaserCard, Swiper, SwiperSlide},\n  props: {\n    id: {\n      type: String,\n      default: \"eobuchung-teaser\"\n    },\n    locale: {\n      type: String,\n      default: \"de-DE\"\n    },\n  },\n  data: () => ({\n    isLoading: true, // initial load?\n    widgetWidth: 0, // width of complete element\n    error: '',\n    listEntries: [], // list of list entries\n    settings: {},\n    // icons\n    mdiArrowLeft: mdiChevronLeftCircle,\n    mdiArrowRight: mdiChevronRightCircle,\n    swiperKey: 1\n  }),\n  computed: {\n    isMobile() {\n      return this.widgetWidth < 600; // => https://vuetifyjs.com/de-DE/customization/breakpoints/\n    },\n    slideStyle() {\n      if (this.widgetWidth < 600) {\n        return {\n          width: (this.widgetWidth - 32) + 'px',\n          'margin': '16px'\n        };\n      }\n      return {\n        width: (this.widgetWidth / 3 - 16) + 'px',\n        'margin': '16px 8px'\n      };\n    },\n    swiperNavigationRandomClass(){\n      const randomString = Math.random().toString(16).slice(2);\n      return 'swiper-button--' + randomString;\n    },\n    swiperOption(){\n      const swiperOption = {\n        slidesPerView: 1,\n        spaceBetween: 0,\n        loop: true,\n        navigation: {\n          nextEl: '.swiper-button-next.' + this.swiperNavigationRandomClass,\n          prevEl: '.swiper-button-prev.' + this.swiperNavigationRandomClass,\n        }\n      };\n      if (!this.isMobile) {\n        swiperOption.breakpoints = {\n          600: {\n            slidesPerView: 3\n          }\n        };\n      }\n      return swiperOption;\n    }\n  },\n  watch: {\n    isMobile(){\n      this.swiperKey++;\n    }\n  },\n  mounted() {\n    this.widgetWidth = this.$refs.theWidget.offsetWidth;\n\n    // localization\n    this.$vuetify.lang.current = this.$store.state && this.$store.state.locale || this.locale;\n    this.$i18n.locale = this.$vuetify.lang.current.substring(0, 2);\n  },\n  async created() {\n    // load config\n    await this.$store.dispatch('loadConfig');\n\n    // load matching service providers - settings will be defined in teaser.js loader (and passed to the store)\n    await this.loadData();\n\n    // loading finished\n    this.isLoading = false;\n  },\n  methods: {\n    async loadData() {\n      try {\n        const config = this.$store.getters.getSearchConfig();\n\n        const data = await apiSearch(this.$store.state.apiUrl, this.$store.state.apiKey, config);\n\n        // do not set tomas session in teaser, even if we might have one\n\n        this.listEntries = data.results;\n      } catch (e) {\n        this.error = e.message;\n      }\n    },\n    onResize() {\n      this.widgetWidth = this.$refs.theWidget.offsetWidth;\n    },\n    // See thread https://github.com/nolimits4web/swiper/issues/2629#issuecomment-486519172\n    // Content for duplicate slides is not loading if this event handler is omitted.\n    slideChangeTransitionStart(){\n      const swiper = this.$refs.swiper.$swiper;\n      swiper.loopDestroy();\n      swiper.loopCreate();\n    }\n  },\n  i18n\n};\n</script>\n\n<style lang=\"sass\">\n.eobuchung-teaser\n  .v-application\n    background: transparent !important\n\n  // reset full view - no scroll bars, no full view\n  &.eobuchung-widget\n    overflow: inherit\n\n    // reset from outside CSS\n    [class*=col-]\n      float: none\n\n    .v-label\n      width: unset\n\n    .v-application--wrap\n      display: block\n      flex: inherit\n      min-height: auto\n      min-width: inherit\n      width: 100%\n      //overflow-x: hidden\n\n  a.v-btn\n    border: inherit\n\n  .swiper-slide\n    display: flex\n\n  .swiper-button-prev, .swiper-button-next\n    position: absolute\n    top: 0\n    bottom: 0\n    width: 52px\n    z-index: 333\n    justify-content: normal !important\n    &::after\n      content: '' !important\n\n    svg\n      transform: scale(1.75)\n\n  .swiper-button-prev\n    left: -35px\n\n  .swiper-button-next\n    right: -63px\n\n  .is-mobile\n    .swiper-button-prev\n      left: 5px\n\n    .swiper-button-next\n      right: -22px\n\n.eobuchung-teaser-container\n  &.is-mobile\n    padding: 0 !important\n    max-width: 100%\n    overflow: hidden\n</style>\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./Teaser.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./Teaser.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Teaser.vue?vue&type=template&id=57983d55\"\nimport script from \"./Teaser.vue?vue&type=script&lang=js\"\nexport * from \"./Teaser.vue?vue&type=script&lang=js\"\nimport style0 from \"./Teaser.vue?vue&type=style&index=0&id=57983d55&prod&lang=sass\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-3!../../node_modules/sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClassificationsList.vue?vue&type=style&index=0&id=0c6932f0&prod&lang=sass\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"4ff9a62e\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.serviceClassificationList && _vm.serviceClassificationList.length)?_c('div',[(_vm.serviceClassificationList.length > 1 && _vm.serviceClassificationList[0].stars !== _vm.serviceClassificationList[_vm.serviceClassificationList.length-1].stars)?_c('span',[_c('eo-stars',{attrs:{\"stars\":_vm.serviceClassificationList[_vm.serviceClassificationList.length - 1].stars}}),_vm._v(\" \"+_vm._s(_vm.$t('message.to'))+\" \"),_c('eo-stars',{attrs:{\"stars\":_vm.serviceClassificationList[0].stars}})],1):_c('span',[_c('eo-stars',{attrs:{\"classificationId\":_vm.serviceProvider.classification,\"stars\":_vm.serviceClassificationList[0].stars,\"blumen\":_vm.blumen}})],1),(_vm.showPopup)?_c('eo-classifications-list',{attrs:{\"service-classification-list\":_vm.serviceClassificationList}}):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-tooltip',{attrs:{\"right\":\"\",\"content-class\":\"eobuchung-dv-classification-list\",\"tag\":\"div\",\"transition\":\"scale-transition\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ attrs }){return [_c('v-btn',_vm._b({attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.showClassificationTooltip = !_vm.showClassificationTooltip}}},'v-btn',attrs,false),[_c('v-icon',{attrs:{\"color\":\"grey lighten-1\"}},[_vm._v(\" \"+_vm._s(_vm.mdiInformation)+\" \")])],1)]}}]),model:{value:(_vm.showClassificationTooltip),callback:function ($$v) {_vm.showClassificationTooltip=$$v},expression:\"showClassificationTooltip\"}},[_c('div',[_vm._l((_vm.classificationsWithCount),function(classification,idx){return _c('span',{key:'c' + idx,staticClass:\"eobuchung-dv-classification-list-item primary--text\"},[_vm._v(_vm._s(classification.count)+\"x \"),_c('eo-classification',{attrs:{\"classification\":classification.classification}})],1)}),_vm._l((_vm.classificationsWithOutCount),function(classification,idx){return _c('span',{key:'p' + idx,staticClass:\"eobuchung-dv-classification-list-item primary--text\"},[_c('eo-classification',{attrs:{\"classification\":classification.classification,\"classificationId\":classification.classificationId}})],1)})],2)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <v-tooltip right content-class=\"eobuchung-dv-classification-list\" tag=\"div\" transition=\"scale-transition\" v-model=\"showClassificationTooltip\">\n    <template v-slot:activator=\"{ attrs }\">\n      <v-btn\n          icon\n          v-bind=\"attrs\"\n          @click=\"showClassificationTooltip = !showClassificationTooltip\"\n      >\n        <v-icon color=\"grey lighten-1\">\n          {{ mdiInformation }}\n        </v-icon>\n      </v-btn>\n    </template>\n    <div>\n      <span class=\"eobuchung-dv-classification-list-item primary--text\" v-for=\"(classification, idx) in classificationsWithCount\" :key=\"'c' + idx\">{{ classification.count }}x <eo-classification :classification=\"classification.classification\" /></span>\n      <span class=\"eobuchung-dv-classification-list-item primary--text\" v-for=\"(classification, idx) in classificationsWithOutCount\" :key=\"'p' + idx\"><eo-classification :classification=\"classification.classification\" :classificationId=\"classification.classificationId\" /></span>\n    </div>\n  </v-tooltip>\n</template>\n\n<script>\nimport {mdiInformation} from '@mdi/js';\nimport EoClassification from \"./Classification\";\n\nexport default {\n  name: 'eo-classifications-list',\n  components: {EoClassification},\n  props: {\n    serviceClassificationList: {\n      type: Array,\n      required: true,\n    }\n  },\n  data: () => ({\n    showClassificationTooltip: false,\n    // icons\n    mdiInformation: mdiInformation,\n  }),\n  computed: {\n    classificationsWithCount() {\n      if (this.serviceClassificationList && this.serviceClassificationList.length) {\n        return this.serviceClassificationList.filter(entry => entry.count > 0);\n      }\n      return [];\n    },\n    classificationsWithOutCount() {\n      if (this.serviceClassificationList && this.serviceClassificationList.length) {\n        return this.serviceClassificationList.filter(entry => !entry.count);\n      }\n      return [];\n    }\n  }\n};\n</script>\n\n<style lang=\"sass\">\n.eobuchung-dv-classification-list\n  background: #fff !important\n  border: 1px solid #000\n  opacity: 1 !important\n  font-size: 19px !important\n\n  &-item\n    display: block\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClassificationsList.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClassificationsList.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ClassificationsList.vue?vue&type=template&id=0c6932f0\"\nimport script from \"./ClassificationsList.vue?vue&type=script&lang=js\"\nexport * from \"./ClassificationsList.vue?vue&type=script&lang=js\"\nimport style0 from \"./ClassificationsList.vue?vue&type=style&index=0&id=0c6932f0&prod&lang=sass\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","<template>\n  <div v-if=\"serviceClassificationList && serviceClassificationList.length\">\n    <span v-if=\"serviceClassificationList.length > 1 && serviceClassificationList[0].stars !== serviceClassificationList[serviceClassificationList.length-1].stars\">\n      <eo-stars :stars=\"serviceClassificationList[serviceClassificationList.length - 1].stars\" /> {{ $t('message.to') }} <eo-stars :stars=\"serviceClassificationList[0].stars\" />\n    </span>\n    <span v-else>\n      <eo-stars :classificationId=\"serviceProvider.classification\" :stars=\"serviceClassificationList[0].stars\" :blumen=\"blumen\" />\n    </span>\n\n    <eo-classifications-list v-if=\"showPopup\" :service-classification-list=\"serviceClassificationList\"/>\n  </div>\n</template>\n\n<script>\nimport EoStars from \"./Stars.vue\";\nimport EoClassificationsList from \"./ClassificationsList.vue\";\n\nexport default {\n  name: \"eo-classification-from-to\",\n  components: {EoClassificationsList, EoStars},\n  props: {\n    serviceProvider: {\n      type: Object,\n      required: true,\n    },\n    showPopup: {\n      type: Boolean\n    }\n  },\n  computed: {\n    blumen() {\n      return this.serviceClassificationList?.[0]?.classification?.includes('B');\n    },\n    /**\n     * will return a sorted list of classification information on service provider e.g.:\n     * [\n     *     {\n     *         \"classification\": \"F*****\",\n     *         \"stars\": 5,\n     *         \"count\": 8\n     *     },\n     *     {\n     *         \"classification\": \"F****\",\n     *         \"stars\": 4,\n     *         \"count\": 2\n     *     },\n     *     {\n     *         \"classification\": \"F***\",\n     *         \"stars\": 3,\n     *         \"count\": 1\n     *     }\n     * ]\n     * @return {*[]}\n     */\n    serviceClassificationList() {\n      if (typeof this.serviceProvider.classification_count === 'object' && this.$store.state.configIsLoaded) {\n        const serviceClassificationFilter = this.$store.state.config.serviceClassificationFilter;\n        const classificationSettings = this.$store.state.config && this.$store.state.config.classifications;\n\n        const map = {};\n\n        // we will take the classification count of the service provider and see what we can get from the settings (star numbers)\n        for (const key of Object.keys(this.serviceProvider.classification_count)) {\n          for (const filterKey of Object.keys(serviceClassificationFilter)) {\n            if (serviceClassificationFilter[filterKey].includes(key)) { // mapped to specific filter key\n              const count = parseInt(this.serviceProvider.classification_count[key]);\n              if (!isNaN(count)) {\n                // what type of Entry do we have?\n                const myClassification = classificationSettings[filterKey];\n\n                if (myClassification) {\n                  if (map[myClassification]) map[myClassification] += count;\n                  else map[myClassification] = count;\n                }\n              }\n              break;\n            }\n          }\n        }\n\n        // transform map to classification list\n        const classificationList = [];\n        for (const key of Object.keys(map)) {\n          classificationList.push({classification: key, stars: (key.match(/\\*/g) || []).length, count: map[key]});\n        }\n\n        // add service provider classification in any case\n        if (this.serviceProviderClassification) {\n          classificationList.push({classificationId: this.serviceProvider.classification, classification: this.serviceProviderClassification, stars: (this.serviceProviderClassification.match(/\\*/g) || []).length, count: 0});\n        }\n\n        // sort list (descending)\n        classificationList.sort((a, b) => {\n          return b.stars - a.stars;\n        });\n\n        return classificationList;\n      }\n      return [];\n    },\n    serviceProviderClassification() {\n      const classificationSettings = this.$store.state.config && this.$store.state.config.classifications;\n      if (classificationSettings && classificationSettings[this.serviceProvider.classification]) {\n        return classificationSettings[this.serviceProvider.classification];\n      }\n      return '';\n    },\n  }\n};\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClassificationFromTo.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClassificationFromTo.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ClassificationFromTo.vue?vue&type=template&id=6364aa3e\"\nimport script from \"./ClassificationFromTo.vue?vue&type=script&lang=js\"\nexport * from \"./ClassificationFromTo.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports"],"sourceRoot":""}