{
version: 3,
file: "swiper-bundle.min.js",
names: [
"isObject",
"obj",
"constructor",
"Object",
"extend",
"target",
"src",
"keys",
"forEach",
"key",
"length",
"ssrDocument",
"body",
"addEventListener",
"removeEventListener",
"activeElement",
"blur",
"nodeName",
"querySelector",
"querySelectorAll",
"getElementById",
"createEvent",
"initEvent",
"createElement",
"children",
"childNodes",
"style",
"setAttribute",
"getElementsByTagName",
"createElementNS",
"importNode",
"location",
"hash",
"host",
"hostname",
"href",
"origin",
"pathname",
"protocol",
"search",
"getDocument",
"doc",
"document",
"ssrWindow",
"navigator",
"userAgent",
"history",
"replaceState",
"pushState",
"go",
"back",
"CustomEvent",
"this",
"getComputedStyle",
"getPropertyValue",
"Image",
"Date",
"screen",
"setTimeout",
"clearTimeout",
"matchMedia",
"requestAnimationFrame",
"callback",
"cancelAnimationFrame",
"id",
"getWindow",
"win",
"window",
"nextTick",
"delay",
"now",
"getTranslate",
"el",
"axis",
"matrix",
"curTransform",
"transformMatrix",
"curStyle",
"currentStyle",
"WebKitCSSMatrix",
"transform",
"webkitTransform",
"split",
"map",
"a",
"replace",
"join",
"MozTransform",
"OTransform",
"MsTransform",
"msTransform",
"toString",
"m41",
"parseFloat",
"m42",
"o",
"prototype",
"call",
"slice",
"isNode",
"node",
"HTMLElement",
"nodeType",
"to",
"arguments",
"undefined",
"noExtend",
"i",
"nextSource",
"keysArray",
"filter",
"indexOf",
"nextIndex",
"len",
"nextKey",
"desc",
"getOwnPropertyDescriptor",
"enumerable",
"__swiper__",
"setCSSProperty",
"varName",
"varValue",
"setProperty",
"animateCSSModeScroll",
"_ref",
"swiper",
"targetPosition",
"side",
"startPosition",
"translate",
"time",
"startTime",
"duration",
"params",
"speed",
"wrapperEl",
"scrollSnapType",
"cssModeFrameID",
"dir",
"isOutOfBound",
"current",
"animate",
"getTime",
"progress",
"Math",
"max",
"min",
"easeProgress",
"cos",
"PI",
"currentPosition",
"scrollTo",
"overflow",
"getSlideTransformEl",
"slideEl",
"shadowEl",
"elementChildren",
"element",
"selector",
"matches",
"tag",
"classes",
"classList",
"add",
"Array",
"isArray",
"elementOffset",
"box",
"getBoundingClientRect",
"clientTop",
"clientLeft",
"scrollTop",
"scrollY",
"scrollLeft",
"scrollX",
"top",
"left",
"elementStyle",
"prop",
"elementIndex",
"child",
"previousSibling",
"elementParents",
"parents",
"parent",
"parentElement",
"push",
"elementTransitionEnd",
"fireCallBack",
"e",
"elementOuterSize",
"size",
"includeMargins",
"offsetWidth",
"support",
"deviceCached",
"browser",
"getSupport",
"smoothScroll",
"documentElement",
"touch",
"DocumentTouch",
"calcSupport",
"getDevice",
"overrides",
"_temp",
"platform",
"ua",
"device",
"ios",
"android",
"screenWidth",
"width",
"screenHeight",
"height",
"match",
"ipad",
"ipod",
"iphone",
"windows",
"macos",
"os",
"calcDevice",
"getBrowser",
"needPerspectiveFix",
"isSafari",
"toLowerCase",
"String",
"includes",
"major",
"minor",
"num",
"Number",
"isWebView",
"test",
"calcBrowser",
"eventsEmitter",
"on",
"events",
"handler",
"priority",
"self",
"eventsListeners",
"destroyed",
"method",
"event",
"once",
"onceHandler",
"off",
"__emitterProxy",
"_len",
"args",
"_key",
"apply",
"onAny",
"eventsAnyListeners",
"offAny",
"index",
"splice",
"eventHandler",
"emit",
"data",
"context",
"_len2",
"_key2",
"unshift",
"processLazyPreloader",
"imageEl",
"closest",
"isElement",
"slideClass",
"lazyEl",
"lazyPreloaderClass",
"remove",
"unlazy",
"slides",
"removeAttribute",
"preload",
"amount",
"lazyPreloadPrevNext",
"slidesPerView",
"slidesPerViewDynamic",
"ceil",
"activeIndex",
"slideIndexLastInView",
"rewind",
"realIndex",
"update",
"updateSize",
"clientWidth",
"clientHeight",
"isHorizontal",
"isVertical",
"parseInt",
"isNaN",
"assign",
"updateSlides",
"getDirectionLabel",
"property",
"marginRight",
"getDirectionPropertyValue",
"label",
"slidesEl",
"swiperSize",
"rtlTranslate",
"rtl",
"wrongRTL",
"isVirtual",
"virtual",
"enabled",
"previousSlidesLength",
"slidesLength",
"snapGrid",
"slidesGrid",
"slidesSizesGrid",
"offsetBefore",
"slidesOffsetBefore",
"offsetAfter",
"slidesOffsetAfter",
"previousSnapGridLength",
"previousSlidesGridLength",
"spaceBetween",
"slidePosition",
"prevSlideSize",
"virtualSize",
"marginLeft",
"marginBottom",
"marginTop",
"centeredSlides",
"cssMode",
"gridEnabled",
"grid",
"rows",
"slideSize",
"initSlides",
"shouldResetSlideSize",
"breakpoints",
"slide",
"updateSlide",
"slideStyles",
"currentTransform",
"currentWebKitTransform",
"roundLengths",
"paddingLeft",
"paddingRight",
"boxSizing",
"floor",
"swiperSlideSize",
"abs",
"slidesPerGroup",
"slidesPerGroupSkip",
"effect",
"setWrapperSize",
"updateWrapperSize",
"newSlidesGrid",
"slidesGridItem",
"loop",
"groups",
"slidesBefore",
"slidesAfter",
"groupSize",
"_",
"slideIndex",
"centeredSlidesBounds",
"allSlidesSize",
"slideSizeValue",
"maxSnap",
"snap",
"centerInsufficientSlides",
"allSlidesOffset",
"snapIndex",
"addToSnapGrid",
"addToSlidesGrid",
"v",
"watchOverflow",
"checkOverflow",
"watchSlidesProgress",
"updateSlidesOffset",
"backFaceHiddenClass",
"containerModifierClass",
"hasClassBackfaceClassAdded",
"contains",
"maxBackfaceHiddenSlides",
"updateAutoHeight",
"activeSlides",
"newHeight",
"setTransition",
"getSlideByIndex",
"getSlideIndexByData",
"visibleSlides",
"offsetHeight",
"minusOffset",
"offsetLeft",
"offsetTop",
"swiperSlideOffset",
"cssOverflowAdjustment",
"updateSlidesProgress",
"offsetCenter",
"slideVisibleClass",
"visibleSlidesIndexes",
"slideOffset",
"slideProgress",
"minTranslate",
"originalSlideProgress",
"slideBefore",
"slideAfter",
"originalProgress",
"updateProgress",
"multiplier",
"translatesDiff",
"maxTranslate",
"isBeginning",
"isEnd",
"progressLoop",
"wasBeginning",
"wasEnd",
"isBeginningRounded",
"isEndRounded",
"firstSlideIndex",
"lastSlideIndex",
"firstSlideTranslate",
"lastSlideTranslate",
"translateMax",
"translateAbs",
"autoHeight",
"updateSlidesClasses",
"getFilteredSlide",
"activeSlide",
"slideActiveClass",
"slideNextClass",
"slidePrevClass",
"nextSlide",
"nextEls",
"nextElementSibling",
"next",
"elementNextAll",
"prevSlide",
"prevEls",
"previousElementSibling",
"prev",
"elementPrevAll",
"emitSlidesClasses",
"updateActiveIndex",
"newActiveIndex",
"previousIndex",
"previousRealIndex",
"previousSnapIndex",
"getVirtualRealIndex",
"aIndex",
"normalizeSlideIndex",
"getActiveIndexByTranslate",
"skip",
"getAttribute",
"initialized",
"runCallbacksOnInit",
"updateClickedSlide",
"slideFound",
"clickedSlide",
"clickedIndex",
"slideToClickedSlide",
"virtualTranslate",
"currentTranslate",
"setTranslate",
"byController",
"newProgress",
"x",
"y",
"previousTranslate",
"translateTo",
"runCallbacks",
"translateBounds",
"internal",
"animating",
"preventInteractionOnTransition",
"newTranslate",
"isH",
"behavior",
"onTranslateToWrapperTransitionEnd",
"transitionEmit",
"direction",
"step",
"slideTo",
"initial",
"normalizedTranslate",
"normalizedGrid",
"normalizedGridNext",
"allowSlideNext",
"allowSlidePrev",
"transitionStart",
"transitionEnd",
"t",
"_immediateVirtual",
"_cssModeVirtualInitialSet",
"initialSlide",
"onSlideToWrapperTransitionEnd",
"slideToLoop",
"newIndex",
"slideNext",
"perGroup",
"slidesPerGroupAuto",
"increment",
"loopPreventsSliding",
"loopFix",
"_clientLeft",
"slidePrev",
"normalize",
"val",
"normalizedSnapGrid",
"prevSnap",
"prevSnapIndex",
"prevIndex",
"lastIndex",
"slideReset",
"slideToClosest",
"threshold",
"currentSnap",
"slideToIndex",
"slideSelector",
"loopedSlides",
"getSlideIndex",
"loopCreate",
"slideRealIndex",
"activeSlideIndex",
"byMousewheel",
"prependSlidesIndexes",
"appendSlidesIndexes",
"isNext",
"isPrev",
"slidesPrepended",
"slidesAppended",
"prepend",
"append",
"recalcSlides",
"currentSlideTranslate",
"diff",
"touches",
"controller",
"control",
"loopParams",
"c",
"loopDestroy",
"newSlidesOrder",
"swiperSlideIndex",
"onTouchStart",
"touchEventsData",
"evCache",
"simulateTouch",
"pointerType",
"originalEvent",
"targetEl",
"touchEventsTarget",
"which",
"button",
"isTouched",
"isMoved",
"swipingClassHasValue",
"noSwipingClass",
"eventPath",
"composedPath",
"path",
"shadowRoot",
"noSwipingSelector",
"isTargetShadow",
"noSwiping",
"base",
"__closestFrom",
"assignedSlot",
"found",
"getRootNode",
"closestElement",
"allowClick",
"swipeHandler",
"currentX",
"pageX",
"currentY",
"pageY",
"startX",
"startY",
"edgeSwipeDetection",
"iOSEdgeSwipeDetection",
"edgeSwipeThreshold",
"iOSEdgeSwipeThreshold",
"innerWidth",
"preventDefault",
"allowTouchCallbacks",
"isScrolling",
"startMoving",
"touchStartTime",
"swipeDirection",
"allowThresholdMove",
"focusableElements",
"shouldPreventDefault",
"allowTouchMove",
"touchStartPreventDefault",
"touchStartForcePreventDefault",
"isContentEditable",
"freeMode",
"onTouchMove",
"pointerIndex",
"findIndex",
"cachedEv",
"pointerId",
"targetTouch",
"preventedByNestedSwiper",
"prevX",
"prevY",
"touchReleaseOnEdges",
"targetTouches",
"diffX",
"diffY",
"sqrt",
"touchAngle",
"atan2",
"zoom",
"cancelable",
"touchMoveStopPropagation",
"nested",
"stopPropagation",
"touchesDiff",
"previousX",
"previousY",
"oneWayMovement",
"touchRatio",
"prevTouchesDirection",
"touchesDirection",
"isLoop",
"startTranslate",
"evt",
"bubbles",
"dispatchEvent",
"allowMomentumBounce",
"grabCursor",
"setGrabCursor",
"loopFixed",
"disableParentSwiper",
"resistanceRatio",
"resistance",
"followFinger",
"onTouchEnd",
"type",
"touchEndTime",
"timeDiff",
"pathTree",
"lastClickTime",
"currentPos",
"stopIndex",
"rewindFirstIndex",
"rewindLastIndex",
"ratio",
"longSwipesMs",
"longSwipes",
"longSwipesRatio",
"shortSwipes",
"navigation",
"nextEl",
"prevEl",
"onResize",
"setBreakpoint",
"isVirtualLoop",
"autoplay",
"running",
"paused",
"resizeTimeout",
"resume",
"onClick",
"preventClicks",
"preventClicksPropagation",
"stopImmediatePropagation",
"onScroll",
"onLoad",
"dummyEventAttached",
"dummyEventListener",
"capture",
"domMethod",
"swiperMethod",
"passive",
"updateOnWindowResize",
"isGridEnabled",
"defaults",
"init",
"resizeObserver",
"createElements",
"url",
"breakpointsBase",
"uniqueNavElements",
"passiveListeners",
"wrapperClass",
"_emitClasses",
"moduleExtendParams",
"allModulesParams",
"moduleParamName",
"moduleParams",
"auto",
"prototypes",
"transition",
"transitionDuration",
"moving",
"isLocked",
"__preventObserver__",
"cursor",
"unsetGrabCursor",
"attachEvents",
"bind",
"detachEvents",
"breakpoint",
"getBreakpoint",
"currentBreakpoint",
"breakpointParams",
"originalParams",
"wasMultiRow",
"isMultiRow",
"wasEnabled",
"emitContainerClasses",
"fill",
"wasModuleEnabled",
"isModuleEnabled",
"disable",
"enable",
"directionChanged",
"needsReLoop",
"changeDirection",
"isEnabled",
"containerEl",
"currentHeight",
"innerHeight",
"points",
"point",
"minRatio",
"substr",
"value",
"sort",
"b",
"wasLocked",
"lastSlideRightEdge",
"addClasses",
"classNames",
"suffixes",
"entries",
"prefix",
"resultClasses",
"item",
"prepareClasses",
"autoheight",
"centered",
"removeClasses",
"extendedDefaults",
"Swiper",
"swipers",
"newParams",
"modules",
"__modules__",
"mod",
"extendParams",
"swiperParams",
"passedParams",
"eventName",
"velocity",
"trunc",
"clickTimeout",
"velocities",
"imagesToLoad",
"imagesLoaded",
"setProgress",
"cls",
"className",
"getSlideClasses",
"updates",
"view",
"exact",
"spv",
"breakLoop",
"translateValue",
"translated",
"complete",
"newDirection",
"needUpdate",
"currentDirection",
"changeLanguageDirection",
"mount",
"mounted",
"getWrapperSelector",
"trim",
"getWrapper",
"destroy",
"deleteInstance",
"cleanStyles",
"object",
"deleteProps",
"static",
"newDefaults",
"module",
"m",
"installModule",
"createElementIfNotDefined",
"checkProps",
"classesToSelector",
"appendSlide",
"appendElement",
"tempDOM",
"innerHTML",
"observer",
"prependSlide",
"prependElement",
"addSlide",
"activeIndexBuffer",
"baseLength",
"slidesBuffer",
"currentSlide",
"removeSlide",
"slidesIndexes",
"indexToRemove",
"removeAllSlides",
"effectInit",
"overwriteParams",
"perspective",
"recreateShadows",
"getEffectParams",
"requireUpdateOnVirtual",
"overwriteParamsResult",
"_s",
"slideShadows",
"effectTarget",
"effectParams",
"transformEl",
"backfaceVisibility",
"effectVirtualTransitionEnd",
"transformElements",
"allSlides",
"transitionEndTarget",
"eventTriggered",
"parentNode",
"getSlide",
"createShadow",
"shadowClass",
"shadowContainer",
"prototypeGroup",
"protoMethod",
"use",
"animationFrame",
"resizeHandler",
"orientationChangeHandler",
"ResizeObserver",
"newWidth",
"_ref2",
"contentBoxSize",
"contentRect",
"inlineSize",
"blockSize",
"observe",
"unobserve",
"observers",
"attach",
"options",
"MutationObserver",
"WebkitMutationObserver",
"mutations",
"observerUpdate",
"attributes",
"childList",
"characterData",
"observeParents",
"observeSlideChildren",
"containerParents",
"disconnect",
"cssModeTimeout",
"cache",
"renderSlide",
"renderExternal",
"renderExternalUpdate",
"addSlidesBefore",
"addSlidesAfter",
"from",
"offset",
"force",
"previousFrom",
"previousTo",
"previousSlidesGrid",
"previousOffset",
"offsetProp",
"onRendered",
"slidesToRender",
"prependIndexes",
"appendIndexes",
"loopFrom",
"loopTo",
"domSlidesAssigned",
"numberOfNewSlides",
"newCache",
"cachedIndex",
"cachedEl",
"cachedElIndex",
"handle",
"kc",
"keyCode",
"charCode",
"pageUpDown",
"keyboard",
"isPageUp",
"isPageDown",
"isArrowLeft",
"isArrowRight",
"isArrowUp",
"isArrowDown",
"shiftKey",
"altKey",
"ctrlKey",
"metaKey",
"onlyInViewport",
"inView",
"swiperWidth",
"swiperHeight",
"windowWidth",
"windowHeight",
"swiperOffset",
"swiperCoord",
"returnValue",
"timeout",
"mousewheel",
"releaseOnEdges",
"invert",
"forceToAxis",
"sensitivity",
"eventsTarget",
"thresholdDelta",
"thresholdTime",
"lastEventBeforeSnap",
"lastScrollTime",
"recentWheelEvents",
"handleMouseEnter",
"mouseEntered",
"handleMouseLeave",
"animateSlider",
"newEvent",
"delta",
"raw",
"targetElContainsTarget",
"rtlFactor",
"sX",
"sY",
"pX",
"pY",
"detail",
"wheelDelta",
"wheelDeltaY",
"wheelDeltaX",
"HORIZONTAL_AXIS",
"deltaY",
"deltaX",
"deltaMode",
"spinX",
"spinY",
"pixelX",
"pixelY",
"positions",
"sign",
"ignoreWheelEvents",
"position",
"sticky",
"shift",
"prevEvent",
"firstEvent",
"snapToThreshold",
"autoplayDisableOnInteraction",
"stop",
"releaseScroll",
"hideOnClick",
"disabledClass",
"hiddenClass",
"lockClass",
"navigationDisabledClass",
"makeElementsArray",
"getEl",
"res",
"toggleEl",
"disabled",
"subEl",
"tagName",
"onPrevClick",
"onNextClick",
"initButton",
"destroyButton",
"pagination",
"clickable",
"isHidden",
"toggle",
"pfx",
"bulletSize",
"bulletElement",
"renderBullet",
"renderProgressbar",
"renderFraction",
"renderCustom",
"progressbarOpposite",
"dynamicBullets",
"dynamicMainBullets",
"formatFractionCurrent",
"number",
"formatFractionTotal",
"bulletClass",
"bulletActiveClass",
"modifierClass",
"currentClass",
"totalClass",
"progressbarFillClass",
"progressbarOppositeClass",
"clickableClass",
"horizontalClass",
"verticalClass",
"paginationDisabledClass",
"bullets",
"dynamicBulletIndex",
"isPaginationDisabled",
"setSideBullets",
"bulletEl",
"onBulletClick",
"newSlideIndex",
"currentSlideIndex",
"total",
"firstIndex",
"midIndex",
"classesToRemove",
"suffix",
"s",
"flat",
"bullet",
"bulletIndex",
"firstDisplayedBullet",
"lastDisplayedBullet",
"dynamicBulletsLength",
"bulletsOffset",
"subElIndex",
"fractionEl",
"textContent",
"totalEl",
"progressbarDirection",
"scale",
"scaleX",
"scaleY",
"progressEl",
"render",
"paginationHTML",
"numberOfBullets",
"dragStartPos",
"dragSize",
"trackSize",
"divider",
"dragTimeout",
"scrollbar",
"dragEl",
"newSize",
"newPos",
"hide",
"opacity",
"display",
"getPointerPosition",
"clientX",
"clientY",
"setDragPosition",
"positionRatio",
"onDragStart",
"onDragMove",
"onDragEnd",
"snapOnRelease",
"activeListener",
"passiveListener",
"eventMethod",
"swiperEl",
"dragClass",
"draggable",
"scrollbarDisabledClass",
"parallax",
"setTransform",
"p",
"rotate",
"currentOpacity",
"_swiper",
"parallaxEl",
"parallaxDuration",
"maxRatio",
"containerClass",
"zoomedSlideClass",
"fakeGestureTouched",
"fakeGestureMoved",
"currentScale",
"isScaling",
"gesture",
"originX",
"originY",
"slideWidth",
"slideHeight",
"imageWrapEl",
"image",
"minX",
"minY",
"maxX",
"maxY",
"touchesStart",
"touchesCurrent",
"prevPositionX",
"prevPositionY",
"prevTime",
"getDistanceBetweenTouches",
"x1",
"y1",
"x2",
"y2",
"eventWithinSlide",
"onGestureStart",
"scaleStart",
"getScaleOrigin",
"onGestureChange",
"scaleMove",
"onGestureEnd",
"eventWithinZoomContainer",
"scaledWidth",
"scaledHeight",
"scaleRatio",
"onTransitionEnd",
"zoomIn",
"touchX",
"touchY",
"offsetX",
"offsetY",
"translateX",
"translateY",
"imageWidth",
"imageHeight",
"translateMinX",
"translateMinY",
"translateMaxX",
"translateMaxY",
"touchAction",
"forceZoomRatio",
"zoomOut",
"zoomToggle",
"getListeners",
"activeListenerWithCapture",
"defineProperty",
"get",
"set",
"momentumDurationX",
"momentumDurationY",
"momentumDistanceX",
"newPositionX",
"momentumDistanceY",
"newPositionY",
"momentumDuration",
"in",
"out",
"LinearSpline",
"binarySearch",
"maxIndex",
"minIndex",
"guess",
"array",
"i1",
"i3",
"interpolate",
"removeSpline",
"spline",
"inverse",
"by",
"controlElement",
"onControllerSwiper",
"_t",
"controlled",
"controlledTranslate",
"setControlledTranslate",
"getInterpolateFunction",
"isFinite",
"setControlledTransition",
"a11y",
"notificationClass",
"prevSlideMessage",
"nextSlideMessage",
"firstSlideMessage",
"lastSlideMessage",
"paginationBulletMessage",
"slideLabelMessage",
"containerMessage",
"containerRoleDescriptionMessage",
"itemRoleDescriptionMessage",
"slideRole",
"clicked",
"liveRegion",
"notify",
"message",
"notification",
"makeElFocusable",
"makeElNotFocusable",
"addElRole",
"role",
"addElRoleDescription",
"description",
"addElLabel",
"disableEl",
"enableEl",
"onEnterOrSpaceKey",
"click",
"hasPagination",
"hasClickablePagination",
"initNavEl",
"wrapperId",
"controls",
"addElControls",
"handlePointerDown",
"handlePointerUp",
"handleFocus",
"isActive",
"isVisible",
"sourceCapabilities",
"firesTouchEvents",
"repeat",
"round",
"random",
"live",
"addElLive",
"updateNavigation",
"updatePagination",
"root",
"keepQuery",
"paths",
"slugify",
"text",
"getPathValues",
"urlOverride",
"URL",
"pathArray",
"part",
"setHistory",
"currentState",
"state",
"scrollToSlide",
"setHistoryPopState",
"hashNavigation",
"watchState",
"slideWithHash",
"onHashChange",
"newHash",
"activeSlideEl",
"console",
"log",
"setHash",
"activeSlideHash",
"raf",
"timeLeft",
"waitForTransition",
"disableOnInteraction",
"stopOnLastSlide",
"reverseDirection",
"pauseOnMouseEnter",
"autoplayTimeLeft",
"wasPaused",
"pausedByTouch",
"touchStartTimeout",
"slideChanged",
"pausedByInteraction",
"autoplayDelayTotal",
"autoplayDelayCurrent",
"autoplayStartTime",
"calcTimeLeft",
"run",
"delayForce",
"currentSlideDelay",
"getSlideDelay",
"proceed",
"start",
"pause",
"reset",
"onVisibilityChange",
"visibilityState",
"onPointerEnter",
"onPointerLeave",
"thumbs",
"multipleActiveThumbs",
"autoScrollOffset",
"slideThumbActiveClass",
"thumbsContainerClass",
"swiperCreated",
"onThumbClick",
"thumbsSwiper",
"thumbsParams",
"SwiperClass",
"thumbsSwiperParams",
"thumbsToActivate",
"thumbActiveClass",
"useOffset",
"currentThumbsIndex",
"newThumbsIndex",
"newThumbsSlide",
"getThumbsElementAndInit",
"thumbsElement",
"onThumbsSwiper",
"watchForThumbsToAppear",
"momentum",
"momentumRatio",
"momentumBounce",
"momentumBounceRatio",
"momentumVelocityRatio",
"minimumVelocity",
"lastMoveEvent",
"pop",
"velocityEvent",
"distance",
"momentumDistance",
"newPosition",
"afterBouncePosition",
"doBounce",
"bounceAmount",
"needsLoopFix",
"j",
"moveDistance",
"currentSlideSize",
"slidesNumberEvenToRows",
"slidesPerRow",
"numFullColumns",
"newSlideOrderIndex",
"column",
"row",
"groupIndex",
"slideIndexInGroup",
"columnsInGroup",
"order",
"fadeEffect",
"crossFade",
"tx",
"ty",
"slideOpacity",
"cubeEffect",
"shadow",
"shadowOffset",
"shadowScale",
"createSlideShadows",
"shadowBefore",
"shadowAfter",
"cubeShadowEl",
"wrapperRotate",
"slideAngle",
"tz",
"transformOrigin",
"shadowAngle",
"sin",
"scale1",
"scale2",
"zFactor",
"flipEffect",
"limitRotation",
"rotateY",
"rotateX",
"zIndex",
"coverflowEffect",
"stretch",
"depth",
"modifier",
"center",
"centerOffset",
"offsetMultiplier",
"translateZ",
"slideTransform",
"shadowBeforeEl",
"shadowAfterEl",
"creativeEffect",
"limitProgress",
"shadowPerProgress",
"progressMultiplier",
"getTranslateValue",
"isCenteredSlides",
"margin",
"r",
"custom",
"translateString",
"rotateString",
"scaleString",
"opacityString",
"shadowOpacity",
"cardsEffect",
"perSlideRotate",
"perSlideOffset",
"tX",
"tY",
"tZ",
"tXAdd",
"isSwipeToNext",
"isSwipeToPrev",
"subProgress"
],
sources: [
"../node_modules/ssr-window/ssr-window.esm.js",
"../src/shared/utils.js",
"../src/shared/get-support.js",
"../src/shared/get-device.js",
"../src/shared/get-browser.js",
"../src/core/events-emitter.js",
"../src/shared/process-lazy-preloader.js",
"../src/core/update/index.js",
"../src/core/update/updateSize.js",
"../src/core/update/updateSlides.js",
"../src/core/update/updateAutoHeight.js",
"../src/core/update/updateSlidesOffset.js",
"../src/core/update/updateSlidesProgress.js",
"../src/core/update/updateProgress.js",
"../src/core/update/updateSlidesClasses.js",
"../src/core/update/updateActiveIndex.js",
"../src/core/update/updateClickedSlide.js",
"../src/core/translate/index.js",
"../src/core/translate/getTranslate.js",
"../src/core/translate/setTranslate.js",
"../src/core/translate/minTranslate.js",
"../src/core/translate/maxTranslate.js",
"../src/core/translate/translateTo.js",
"../src/core/transition/transitionEmit.js",
"../src/core/slide/index.js",
"../src/core/slide/slideTo.js",
"../src/core/slide/slideToLoop.js",
"../src/core/slide/slideNext.js",
"../src/core/slide/slidePrev.js",
"../src/core/slide/slideReset.js",
"../src/core/slide/slideToClosest.js",
"../src/core/slide/slideToClickedSlide.js",
"../src/core/loop/index.js",
"../src/core/loop/loopCreate.js",
"../src/core/loop/loopFix.js",
"../src/core/loop/loopDestroy.js",
"../src/core/events/onTouchStart.js",
"../src/core/events/onTouchMove.js",
"../src/core/events/onTouchEnd.js",
"../src/core/events/onResize.js",
"../src/core/events/onClick.js",
"../src/core/events/onScroll.js",
"../src/core/events/onLoad.js",
"../src/core/events/index.js",
"../src/core/breakpoints/setBreakpoint.js",
"../src/core/check-overflow/index.js",
"../src/core/defaults.js",
"../src/core/moduleExtendParams.js",
"../src/core/core.js",
"../src/core/transition/index.js",
"../src/core/transition/setTransition.js",
"../src/core/transition/transitionStart.js",
"../src/core/transition/transitionEnd.js",
"../src/core/grab-cursor/index.js",
"../src/core/grab-cursor/setGrabCursor.js",
"../src/core/grab-cursor/unsetGrabCursor.js",
"../src/core/breakpoints/index.js",
"../src/core/breakpoints/getBreakpoint.js",
"../src/core/classes/index.js",
"../src/core/classes/addClasses.js",
"../src/core/classes/removeClasses.js",
"../src/shared/create-element-if-not-defined.js",
"../src/shared/classes-to-selector.js",
"../src/modules/manipulation/methods/appendSlide.js",
"../src/modules/manipulation/methods/prependSlide.js",
"../src/modules/manipulation/methods/addSlide.js",
"../src/modules/manipulation/methods/removeSlide.js",
"../src/modules/manipulation/methods/removeAllSlides.js",
"../src/shared/effect-init.js",
"../src/shared/effect-target.js",
"../src/shared/effect-virtual-transition-end.js",
"../src/shared/create-shadow.js",
"../src/core/modules/resize/resize.js",
"../src/core/modules/observer/observer.js",
"../src/swiper.js",
"../src/modules/virtual/virtual.js",
"../src/modules/keyboard/keyboard.js",
"../src/modules/mousewheel/mousewheel.js",
"../src/modules/navigation/navigation.js",
"../src/modules/pagination/pagination.js",
"../src/modules/scrollbar/scrollbar.js",
"../src/modules/parallax/parallax.js",
"../src/modules/zoom/zoom.js",
"../src/modules/controller/controller.js",
"../src/modules/a11y/a11y.js",
"../src/modules/history/history.js",
"../src/modules/hash-navigation/hash-navigation.js",
"../src/modules/autoplay/autoplay.js",
"../src/modules/thumbs/thumbs.js",
"../src/modules/free-mode/free-mode.js",
"../src/modules/grid/grid.js",
"../src/modules/manipulation/manipulation.js",
"../src/modules/effect-fade/effect-fade.js",
"../src/modules/effect-cube/effect-cube.js",
"../src/modules/effect-flip/effect-flip.js",
"../src/modules/effect-coverflow/effect-coverflow.js",
"../src/modules/effect-creative/effect-creative.js",
"../src/modules/effect-cards/effect-cards.js"
],
sourcesContent: [
"/**
* SSR Window 4.0.2
* Better handling for window object in SSR environment
* https://github.com/nolimits4web/ssr-window
*
* Copyright 2021, Vladimir Kharlampidi
*
* Licensed under MIT
*
* Released on: December 13, 2021
*/
/* eslint-disable no-param-reassign */
function isObject(obj) {
return (obj !== null &&
typeof obj === 'object' &&
'constructor' in obj &&
obj.constructor === Object);
}
function extend(target = {}, src = {}) {
Object.keys(src).forEach((key) => {
if (typeof target[key] === 'undefined')
target[key] = src[key];
else if (isObject(src[key]) &&
isObject(target[key]) &&
Object.keys(src[key]).length > 0) {
extend(target[key], src[key]);
}
});
}
const ssrDocument = {
body: {},
addEventListener() { },
removeEventListener() { },
activeElement: {
blur() { },
nodeName: '',
},
querySelector() {
return null;
},
querySelectorAll() {
return [];
},
getElementById() {
return null;
},
createEvent() {
return {
initEvent() { },
};
},
createElement() {
return {
children: [],
childNodes: [],
style: {},
setAttribute() { },
getElementsByTagName() {
return [];
},
};
},
createElementNS() {
return {};
},
importNode() {
return null;
},
location: {
hash: '',
host: '',
hostname: '',
href: '',
origin: '',
pathname: '',
protocol: '',
search: '',
},
};
function getDocument() {
const doc = typeof document !== 'undefined' ? document : {};
extend(doc, ssrDocument);
return doc;
}
const ssrWindow = {
document: ssrDocument,
navigator: {
userAgent: '',
},
location: {
hash: '',
host: '',
hostname: '',
href: '',
origin: '',
pathname: '',
protocol: '',
search: '',
},
history: {
replaceState() { },
pushState() { },
go() { },
back() { },
},
CustomEvent: function CustomEvent() {
return this;
},
addEventListener() { },
removeEventListener() { },
getComputedStyle() {
return {
getPropertyValue() {
return '';
},
};
},
Image() { },
Date() { },
screen: {},
setTimeout() { },
clearTimeout() { },
matchMedia() {
return {};
},
requestAnimationFrame(callback) {
if (typeof setTimeout === 'undefined') {
callback();
return null;
}
return setTimeout(callback, 0);
},
cancelAnimationFrame(id) {
if (typeof setTimeout === 'undefined') {
return;
}
clearTimeout(id);
},
};
function getWindow() {
const win = typeof window !== 'undefined' ? window : {};
extend(win, ssrWindow);
return win;
}
export { extend, getDocument, getWindow, ssrDocument, ssrWindow };
",
"import { getWindow, getDocument } from 'ssr-window';
function deleteProps(obj) {
const object = obj;
Object.keys(object).forEach((key) => {
try {
object[key] = null;
} catch (e) {
// no getter for object
}
try {
delete object[key];
} catch (e) {
// something got wrong
}
});
}
function nextTick(callback, delay = 0) {
return setTimeout(callback, delay);
}
function now() {
return Date.now();
}
function getComputedStyle(el) {
const window = getWindow();
let style;
if (window.getComputedStyle) {
style = window.getComputedStyle(el, null);
}
if (!style && el.currentStyle) {
style = el.currentStyle;
}
if (!style) {
style = el.style;
}
return style;
}
function getTranslate(el, axis = 'x') {
const window = getWindow();
let matrix;
let curTransform;
let transformMatrix;
const curStyle = getComputedStyle(el, null);
if (window.WebKitCSSMatrix) {
curTransform = curStyle.transform || curStyle.webkitTransform;
if (curTransform.split(',').length > 6) {
curTransform = curTransform
.split(', ')
.map((a) => a.replace(',', '.'))
.join(', ');
}
// Some old versions of Webkit choke when 'none' is passed; pass
// empty string instead in this case
transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
} else {
transformMatrix =
curStyle.MozTransform ||
curStyle.OTransform ||
curStyle.MsTransform ||
curStyle.msTransform ||
curStyle.transform ||
curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
matrix = transformMatrix.toString().split(',');
}
if (axis === 'x') {
// Latest Chrome and webkits Fix
if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;
// Crazy IE10 Matrix
else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);
// Normal Browsers
else curTransform = parseFloat(matrix[4]);
}
if (axis === 'y') {
// Latest Chrome and webkits Fix
if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;
// Crazy IE10 Matrix
else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);
// Normal Browsers
else curTransform = parseFloat(matrix[5]);
}
return curTransform || 0;
}
function isObject(o) {
return (
typeof o === 'object' &&
o !== null &&
o.constructor &&
Object.prototype.toString.call(o).slice(8, -1) === 'Object'
);
}
function isNode(node) {
// eslint-disable-next-line
if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {
return node instanceof HTMLElement;
}
return node && (node.nodeType === 1 || node.nodeType === 11);
}
function extend(...args) {
const to = Object(args[0]);
const noExtend = ['__proto__', 'constructor', 'prototype'];
for (let i = 1; i < args.length; i += 1) {
const nextSource = args[i];
if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {
const keysArray = Object.keys(Object(nextSource)).filter((key) => noExtend.indexOf(key) < 0);
for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
const nextKey = keysArray[nextIndex];
const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
if (desc !== undefined && desc.enumerable) {
if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {
if (nextSource[nextKey].__swiper__) {
to[nextKey] = nextSource[nextKey];
} else {
extend(to[nextKey], nextSource[nextKey]);
}
} else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {
to[nextKey] = {};
if (nextSource[nextKey].__swiper__) {
to[nextKey] = nextSource[nextKey];
} else {
extend(to[nextKey], nextSource[nextKey]);
}
} else {
to[nextKey] = nextSource[nextKey];
}
}
}
}
}
return to;
}
function setCSSProperty(el, varName, varValue) {
el.style.setProperty(varName, varValue);
}
function animateCSSModeScroll({ swiper, targetPosition, side }) {
const window = getWindow();
const startPosition = -swiper.translate;
let startTime = null;
let time;
const duration = swiper.params.speed;
swiper.wrapperEl.style.scrollSnapType = 'none';
window.cancelAnimationFrame(swiper.cssModeFrameID);
const dir = targetPosition > startPosition ? 'next' : 'prev';
const isOutOfBound = (current, target) => {
return (dir === 'next' && current >= target) || (dir === 'prev' && current <= target);
};
const animate = () => {
time = new Date().getTime();
if (startTime === null) {
startTime = time;
}
const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);
const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;
let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);
if (isOutOfBound(currentPosition, targetPosition)) {
currentPosition = targetPosition;
}
swiper.wrapperEl.scrollTo({
[side]: currentPosition,
});
if (isOutOfBound(currentPosition, targetPosition)) {
swiper.wrapperEl.style.overflow = 'hidden';
swiper.wrapperEl.style.scrollSnapType = '';
setTimeout(() => {
swiper.wrapperEl.style.overflow = '';
swiper.wrapperEl.scrollTo({
[side]: currentPosition,
});
});
window.cancelAnimationFrame(swiper.cssModeFrameID);
return;
}
swiper.cssModeFrameID = window.requestAnimationFrame(animate);
};
animate();
}
function getSlideTransformEl(slideEl) {
return (
slideEl.querySelector('.swiper-slide-transform') ||
(slideEl.shadowEl && slideEl.shadowEl.querySelector('.swiper-slide-transform')) ||
slideEl
);
}
function findElementsInElements(elements = [], selector = '') {
const found = [];
elements.forEach((el) => {
found.push(...el.querySelectorAll(selector));
});
return found;
}
function elementChildren(element, selector = '') {
return [...element.children].filter((el) => el.matches(selector));
}
function createElement(tag, classes = []) {
const el = document.createElement(tag);
el.classList.add(...(Array.isArray(classes) ? classes : [classes]));
return el;
}
function elementOffset(el) {
const window = getWindow();
const document = getDocument();
const box = el.getBoundingClientRect();
const body = document.body;
const clientTop = el.clientTop || body.clientTop || 0;
const clientLeft = el.clientLeft || body.clientLeft || 0;
const scrollTop = el === window ? window.scrollY : el.scrollTop;
const scrollLeft = el === window ? window.scrollX : el.scrollLeft;
return {
top: box.top + scrollTop - clientTop,
left: box.left + scrollLeft - clientLeft,
};
}
function elementPrevAll(el, selector) {
const prevEls = [];
while (el.previousElementSibling) {
const prev = el.previousElementSibling; // eslint-disable-line
if (selector) {
if (prev.matches(selector)) prevEls.push(prev);
} else prevEls.push(prev);
el = prev;
}
return prevEls;
}
function elementNextAll(el, selector) {
const nextEls = [];
while (el.nextElementSibling) {
const next = el.nextElementSibling; // eslint-disable-line
if (selector) {
if (next.matches(selector)) nextEls.push(next);
} else nextEls.push(next);
el = next;
}
return nextEls;
}
function elementStyle(el, prop) {
const window = getWindow();
return window.getComputedStyle(el, null).getPropertyValue(prop);
}
function elementIndex(el) {
let child = el;
let i;
if (child) {
i = 0;
// eslint-disable-next-line
while ((child = child.previousSibling) !== null) {
if (child.nodeType === 1) i += 1;
}
return i;
}
return undefined;
}
function elementParents(el, selector) {
const parents = []; // eslint-disable-line
let parent = el.parentElement; // eslint-disable-line
while (parent) {
if (selector) {
if (parent.matches(selector)) parents.push(parent);
} else {
parents.push(parent);
}
parent = parent.parentElement;
}
return parents;
}
function elementTransitionEnd(el, callback) {
function fireCallBack(e) {
if (e.target !== el) return;
callback.call(el, e);
el.removeEventListener('transitionend', fireCallBack);
}
if (callback) {
el.addEventListener('transitionend', fireCallBack);
}
}
function elementOuterSize(el, size, includeMargins) {
const window = getWindow();
if (includeMargins) {
return (
el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] +
parseFloat(
window
.getComputedStyle(el, null)
.getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top'),
) +
parseFloat(
window
.getComputedStyle(el, null)
.getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'),
)
);
}
return el.offsetWidth;
}
export {
animateCSSModeScroll,
deleteProps,
nextTick,
now,
getTranslate,
isObject,
extend,
getComputedStyle,
setCSSProperty,
getSlideTransformEl,
// dom
findElementsInElements,
createElement,
elementChildren,
elementOffset,
elementPrevAll,
elementNextAll,
elementStyle,
elementIndex,
elementParents,
elementTransitionEnd,
elementOuterSize,
};
",
"import { getWindow, getDocument } from 'ssr-window';
let support;
function calcSupport() {
const window = getWindow();
const document = getDocument();
return {
smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,
touch: !!(
'ontouchstart' in window ||
(window.DocumentTouch && document instanceof window.DocumentTouch)
),
};
}
function getSupport() {
if (!support) {
support = calcSupport();
}
return support;
}
export { getSupport };
",
"import { getWindow } from 'ssr-window';
import { getSupport } from './get-support.js';
let deviceCached;
function calcDevice({ userAgent } = {}) {
const support = getSupport();
const window = getWindow();
const platform = window.navigator.platform;
const ua = userAgent || window.navigator.userAgent;
const device = {
ios: false,
android: false,
};
const screenWidth = window.screen.width;
const screenHeight = window.screen.height;
const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line
let ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
const windows = platform === 'Win32';
let macos = platform === 'MacIntel';
// iPadOs 13 fix
const iPadScreens = [
'1024x1366',
'1366x1024',
'834x1194',
'1194x834',
'834x1112',
'1112x834',
'768x1024',
'1024x768',
'820x1180',
'1180x820',
'810x1080',
'1080x810',
];
if (
!ipad &&
macos &&
support.touch &&
iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0
) {
ipad = ua.match(/(Version)\/([\d.]+)/);
if (!ipad) ipad = [0, 1, '13_0_0'];
macos = false;
}
// Android
if (android && !windows) {
device.os = 'android';
device.android = true;
}
if (ipad || iphone || ipod) {
device.os = 'ios';
device.ios = true;
}
// Export object
return device;
}
function getDevice(overrides = {}) {
if (!deviceCached) {
deviceCached = calcDevice(overrides);
}
return deviceCached;
}
export { getDevice };
",
"import { getWindow } from 'ssr-window';
let browser;
function calcBrowser() {
const window = getWindow();
let needPerspectiveFix = false;
function isSafari() {
const ua = window.navigator.userAgent.toLowerCase();
return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;
}
if (isSafari()) {
const ua = String(window.navigator.userAgent);
if (ua.includes('Version/')) {
const [major, minor] = ua
.split('Version/')[1]
.split(' ')[0]
.split('.')
.map((num) => Number(num));
needPerspectiveFix = major < 16 || (major === 16 && minor < 2);
}
}
return {
isSafari: needPerspectiveFix || isSafari(),
needPerspectiveFix,
isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),
};
}
function getBrowser() {
if (!browser) {
browser = calcBrowser();
}
return browser;
}
export { getBrowser };
",
"/* eslint-disable no-underscore-dangle */
export default {
on(events, handler, priority) {
const self = this;
if (!self.eventsListeners || self.destroyed) return self;
if (typeof handler !== 'function') return self;
const method = priority ? 'unshift' : 'push';
events.split(' ').forEach((event) => {
if (!self.eventsListeners[event]) self.eventsListeners[event] = [];
self.eventsListeners[event][method](handler);
});
return self;
},
once(events, handler, priority) {
const self = this;
if (!self.eventsListeners || self.destroyed) return self;
if (typeof handler !== 'function') return self;
function onceHandler(...args) {
self.off(events, onceHandler);
if (onceHandler.__emitterProxy) {
delete onceHandler.__emitterProxy;
}
handler.apply(self, args);
}
onceHandler.__emitterProxy = handler;
return self.on(events, onceHandler, priority);
},
onAny(handler, priority) {
const self = this;
if (!self.eventsListeners || self.destroyed) return self;
if (typeof handler !== 'function') return self;
const method = priority ? 'unshift' : 'push';
if (self.eventsAnyListeners.indexOf(handler) < 0) {
self.eventsAnyListeners[method](handler);
}
return self;
},
offAny(handler) {
const self = this;
if (!self.eventsListeners || self.destroyed) return self;
if (!self.eventsAnyListeners) return self;
const index = self.eventsAnyListeners.indexOf(handler);
if (index >= 0) {
self.eventsAnyListeners.splice(index, 1);
}
return self;
},
off(events, handler) {
const self = this;
if (!self.eventsListeners || self.destroyed) return self;
if (!self.eventsListeners) return self;
events.split(' ').forEach((event) => {
if (typeof handler === 'undefined') {
self.eventsListeners[event] = [];
} else if (self.eventsListeners[event]) {
self.eventsListeners[event].forEach((eventHandler, index) => {
if (
eventHandler === handler ||
(eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler)
) {
self.eventsListeners[event].splice(index, 1);
}
});
}
});
return self;
},
emit(...args) {
const self = this;
if (!self.eventsListeners || self.destroyed) return self;
if (!self.eventsListeners) return self;
let events;
let data;
let context;
if (typeof args[0] === 'string' || Array.isArray(args[0])) {
events = args[0];
data = args.slice(1, args.length);
context = self;
} else {
events = args[0].events;
data = args[0].data;
context = args[0].context || self;
}
data.unshift(context);
const eventsArray = Array.isArray(events) ? events : events.split(' ');
eventsArray.forEach((event) => {
if (self.eventsAnyListeners && self.eventsAnyListeners.length) {
self.eventsAnyListeners.forEach((eventHandler) => {
eventHandler.apply(context, [event, ...data]);
});
}
if (self.eventsListeners && self.eventsListeners[event]) {
self.eventsListeners[event].forEach((eventHandler) => {
eventHandler.apply(context, data);
});
}
});
return self;
},
};
",
"export const processLazyPreloader = (swiper, imageEl) => {
if (!swiper || swiper.destroyed || !swiper.params) return;
const slideSelector = () => (swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`);
const slideEl = imageEl.closest(slideSelector());
if (slideEl) {
const lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);
if (lazyEl) lazyEl.remove();
}
};
const unlazy = (swiper, index) => {
if (!swiper.slides[index]) return;
const imageEl = swiper.slides[index].querySelector('[loading="lazy"]');
if (imageEl) imageEl.removeAttribute('loading');
};
export const preload = (swiper) => {
if (!swiper || swiper.destroyed || !swiper.params) return;
let amount = swiper.params.lazyPreloadPrevNext;
const len = swiper.slides.length;
if (!len || !amount || amount < 0) return;
amount = Math.min(amount, len);
const slidesPerView =
swiper.params.slidesPerView === 'auto'
? swiper.slidesPerViewDynamic()
: Math.ceil(swiper.params.slidesPerView);
const activeIndex = swiper.activeIndex;
const slideIndexLastInView = activeIndex + slidesPerView - 1;
if (swiper.params.rewind) {
for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {
const realIndex = ((i % len) + len) % len;
if (realIndex !== activeIndex && realIndex > slideIndexLastInView) unlazy(swiper, realIndex);
}
} else {
for (
let i = Math.max(slideIndexLastInView - amount, 0);
i <= Math.min(slideIndexLastInView + amount, len - 1);
i += 1
) {
if (i !== activeIndex && i > slideIndexLastInView) unlazy(swiper, i);
}
}
};
",
"import updateSize from './updateSize.js';
import updateSlides from './updateSlides.js';
import updateAutoHeight from './updateAutoHeight.js';
import updateSlidesOffset from './updateSlidesOffset.js';
import updateSlidesProgress from './updateSlidesProgress.js';
import updateProgress from './updateProgress.js';
import updateSlidesClasses from './updateSlidesClasses.js';
import updateActiveIndex from './updateActiveIndex.js';
import updateClickedSlide from './updateClickedSlide.js';
export default {
updateSize,
updateSlides,
updateAutoHeight,
updateSlidesOffset,
updateSlidesProgress,
updateProgress,
updateSlidesClasses,
updateActiveIndex,
updateClickedSlide,
};
",
"import { elementStyle } from '../../shared/utils.js';
export default function updateSize() {
const swiper = this;
let width;
let height;
const el = swiper.el;
if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {
width = swiper.params.width;
} else {
width = el.clientWidth;
}
if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {
height = swiper.params.height;
} else {
height = el.clientHeight;
}
if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {
return;
}
// Subtract paddings
width =
width -
parseInt(elementStyle(el, 'padding-left') || 0, 10) -
parseInt(elementStyle(el, 'padding-right') || 0, 10);
height =
height -
parseInt(elementStyle(el, 'padding-top') || 0, 10) -
parseInt(elementStyle(el, 'padding-bottom') || 0, 10);
if (Number.isNaN(width)) width = 0;
if (Number.isNaN(height)) height = 0;
Object.assign(swiper, {
width,
height,
size: swiper.isHorizontal() ? width : height,
});
}
",
"import {
elementChildren,
elementOuterSize,
elementStyle,
setCSSProperty,
} from '../../shared/utils.js';
export default function updateSlides() {
const swiper = this;
function getDirectionLabel(property) {
if (swiper.isHorizontal()) {
return property;
}
// prettier-ignore
return {
'width': 'height',
'margin-top': 'margin-left',
'margin-bottom ': 'margin-right',
'margin-left': 'margin-top',
'margin-right': 'margin-bottom',
'padding-left': 'padding-top',
'padding-right': 'padding-bottom',
'marginRight': 'marginBottom',
}[property];
}
function getDirectionPropertyValue(node, label) {
return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);
}
const params = swiper.params;
const { wrapperEl, slidesEl, size: swiperSize, rtlTranslate: rtl, wrongRTL } = swiper;
const isVirtual = swiper.virtual && params.virtual.enabled;
const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);
const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
let snapGrid = [];
const slidesGrid = [];
const slidesSizesGrid = [];
let offsetBefore = params.slidesOffsetBefore;
if (typeof offsetBefore === 'function') {
offsetBefore = params.slidesOffsetBefore.call(swiper);
}
let offsetAfter = params.slidesOffsetAfter;
if (typeof offsetAfter === 'function') {
offsetAfter = params.slidesOffsetAfter.call(swiper);
}
const previousSnapGridLength = swiper.snapGrid.length;
const previousSlidesGridLength = swiper.slidesGrid.length;
let spaceBetween = params.spaceBetween;
let slidePosition = -offsetBefore;
let prevSlideSize = 0;
let index = 0;
if (typeof swiperSize === 'undefined') {
return;
}
if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;
}
swiper.virtualSize = -spaceBetween;
// reset margins
slides.forEach((slideEl) => {
if (rtl) {
slideEl.style.marginLeft = '';
} else {
slideEl.style.marginRight = '';
}
slideEl.style.marginBottom = '';
slideEl.style.marginTop = '';
});
// reset cssMode offsets
if (params.centeredSlides && params.cssMode) {
setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');
setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');
}
const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;
if (gridEnabled) {
swiper.grid.initSlides(slidesLength);
}
// Calc slides
let slideSize;
const shouldResetSlideSize =
params.slidesPerView === 'auto' &&
params.breakpoints &&
Object.keys(params.breakpoints).filter((key) => {
return typeof params.breakpoints[key].slidesPerView !== 'undefined';
}).length > 0;
for (let i = 0; i < slidesLength; i += 1) {
slideSize = 0;
let slide;
if (slides[i]) slide = slides[i];
if (gridEnabled) {
swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);
}
if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line
if (params.slidesPerView === 'auto') {
if (shouldResetSlideSize) {
slides[i].style[getDirectionLabel('width')] = ``;
}
const slideStyles = getComputedStyle(slide);
const currentTransform = slide.style.transform;
const currentWebKitTransform = slide.style.webkitTransform;
if (currentTransform) {
slide.style.transform = 'none';
}
if (currentWebKitTransform) {
slide.style.webkitTransform = 'none';
}
if (params.roundLengths) {
slideSize = swiper.isHorizontal()
? elementOuterSize(slide, 'width', true)
: elementOuterSize(slide, 'height', true);
} else {
// eslint-disable-next-line
const width = getDirectionPropertyValue(slideStyles, 'width');
const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');
const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');
const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');
const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');
const boxSizing = slideStyles.getPropertyValue('box-sizing');
if (boxSizing && boxSizing === 'border-box') {
slideSize = width + marginLeft + marginRight;
} else {
const { clientWidth, offsetWidth } = slide;
slideSize =
width +
paddingLeft +
paddingRight +
marginLeft +
marginRight +
(offsetWidth - clientWidth);
}
}
if (currentTransform) {
slide.style.transform = currentTransform;
}
if (currentWebKitTransform) {
slide.style.webkitTransform = currentWebKitTransform;
}
if (params.roundLengths) slideSize = Math.floor(slideSize);
} else {
slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;
if (params.roundLengths) slideSize = Math.floor(slideSize);
if (slides[i]) {
slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;
}
}
if (slides[i]) {
slides[i].swiperSlideSize = slideSize;
}
slidesSizesGrid.push(slideSize);
if (params.centeredSlides) {
slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;
if (prevSlideSize === 0 && i !== 0)
slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;
if (params.roundLengths) slidePosition = Math.floor(slidePosition);
if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);
slidesGrid.push(slidePosition);
} else {
if (params.roundLengths) slidePosition = Math.floor(slidePosition);
if (
(index - Math.min(swiper.params.slidesPerGroupSkip, index)) %
swiper.params.slidesPerGroup ===
0
)
snapGrid.push(slidePosition);
slidesGrid.push(slidePosition);
slidePosition = slidePosition + slideSize + spaceBetween;
}
swiper.virtualSize += slideSize + spaceBetween;
prevSlideSize = slideSize;
index += 1;
}
swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {
wrapperEl.style.width = `${swiper.virtualSize + params.spaceBetween}px`;
}
if (params.setWrapperSize) {
wrapperEl.style[getDirectionLabel('width')] = `${swiper.virtualSize + params.spaceBetween}px`;
}
if (gridEnabled) {
swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);
}
// Remove last grid elements depending on width
if (!params.centeredSlides) {
const newSlidesGrid = [];
for (let i = 0; i < snapGrid.length; i += 1) {
let slidesGridItem = snapGrid[i];
if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
if (snapGrid[i] <= swiper.virtualSize - swiperSize) {
newSlidesGrid.push(slidesGridItem);
}
}
snapGrid = newSlidesGrid;
if (
Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) >
1
) {
snapGrid.push(swiper.virtualSize - swiperSize);
}
}
if (isVirtual && params.loop) {
const size = slidesSizesGrid[0] + spaceBetween;
if (params.slidesPerGroup > 1) {
const groups = Math.ceil(
(swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup,
);
const groupSize = size * params.slidesPerGroup;
for (let i = 0; i < groups; i += 1) {
snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);
}
}
for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {
if (params.slidesPerGroup === 1) {
snapGrid.push(snapGrid[snapGrid.length - 1] + size);
}
slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);
swiper.virtualSize += size;
}
}
if (snapGrid.length === 0) snapGrid = [0];
if (params.spaceBetween !== 0) {
const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');
slides
.filter((_, slideIndex) => {
if (!params.cssMode || params.loop) return true;
if (slideIndex === slides.length - 1) {
return false;
}
return true;
})
.forEach((slideEl) => {
slideEl.style[key] = `${spaceBetween}px`;
});
}
if (params.centeredSlides && params.centeredSlidesBounds) {
let allSlidesSize = 0;
slidesSizesGrid.forEach((slideSizeValue) => {
allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
});
allSlidesSize -= params.spaceBetween;
const maxSnap = allSlidesSize - swiperSize;
snapGrid = snapGrid.map((snap) => {
if (snap < 0) return -offsetBefore;
if (snap > maxSnap) return maxSnap + offsetAfter;
return snap;
});
}
if (params.centerInsufficientSlides) {
let allSlidesSize = 0;
slidesSizesGrid.forEach((slideSizeValue) => {
allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
});
allSlidesSize -= params.spaceBetween;
if (allSlidesSize < swiperSize) {
const allSlidesOffset = (swiperSize - allSlidesSize) / 2;
snapGrid.forEach((snap, snapIndex) => {
snapGrid[snapIndex] = snap - allSlidesOffset;
});
slidesGrid.forEach((snap, snapIndex) => {
slidesGrid[snapIndex] = snap + allSlidesOffset;
});
}
}
Object.assign(swiper, {
slides,
snapGrid,
slidesGrid,
slidesSizesGrid,
});
if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {
setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);
setCSSProperty(
wrapperEl,
'--swiper-centered-offset-after',
`${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`,
);
const addToSnapGrid = -swiper.snapGrid[0];
const addToSlidesGrid = -swiper.slidesGrid[0];
swiper.snapGrid = swiper.snapGrid.map((v) => v + addToSnapGrid);
swiper.slidesGrid = swiper.slidesGrid.map((v) => v + addToSlidesGrid);
}
if (slidesLength !== previousSlidesLength) {
swiper.emit('slidesLengthChange');
}
if (snapGrid.length !== previousSnapGridLength) {
if (swiper.params.watchOverflow) swiper.checkOverflow();
swiper.emit('snapGridLengthChange');
}
if (slidesGrid.length !== previousSlidesGridLength) {
swiper.emit('slidesGridLengthChange');
}
if (params.watchSlidesProgress) {
swiper.updateSlidesOffset();
}
if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {
const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;
const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);
if (slidesLength <= params.maxBackfaceHiddenSlides) {
if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);
} else if (hasClassBackfaceClassAdded) {
swiper.el.classList.remove(backFaceHiddenClass);
}
}
}
",
"export default function updateAutoHeight(speed) {
const swiper = this;
const activeSlides = [];
const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
let newHeight = 0;
let i;
if (typeof speed === 'number') {
swiper.setTransition(speed);
} else if (speed === true) {
swiper.setTransition(swiper.params.speed);
}
const getSlideByIndex = (index) => {
if (isVirtual) {
return swiper.slides[swiper.getSlideIndexByData(index)];
}
return swiper.slides[index];
};
// Find slides currently in view
if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {
if (swiper.params.centeredSlides) {
(swiper.visibleSlides || []).forEach((slide) => {
activeSlides.push(slide);
});
} else {
for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {
const index = swiper.activeIndex + i;
if (index > swiper.slides.length && !isVirtual) break;
activeSlides.push(getSlideByIndex(index));
}
}
} else {
activeSlides.push(getSlideByIndex(swiper.activeIndex));
}
// Find new height from highest slide in view
for (i = 0; i < activeSlides.length; i += 1) {
if (typeof activeSlides[i] !== 'undefined') {
const height = activeSlides[i].offsetHeight;
newHeight = height > newHeight ? height : newHeight;
}
}
// Update Height
if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;
}
",
"export default function updateSlidesOffset() {
const swiper = this;
const slides = swiper.slides;
// eslint-disable-next-line
const minusOffset = swiper.isElement
? swiper.isHorizontal()
? swiper.wrapperEl.offsetLeft
: swiper.wrapperEl.offsetTop
: 0;
for (let i = 0; i < slides.length; i += 1) {
slides[i].swiperSlideOffset =
(swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) -
minusOffset -
swiper.cssOverflowAdjustment();
}
}
",
"export default function updateSlidesProgress(translate = (this && this.translate) || 0) {
const swiper = this;
const params = swiper.params;
const { slides, rtlTranslate: rtl, snapGrid } = swiper;
if (slides.length === 0) return;
if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();
let offsetCenter = -translate;
if (rtl) offsetCenter = translate;
// Visible Slides
slides.forEach((slideEl) => {
slideEl.classList.remove(params.slideVisibleClass);
});
swiper.visibleSlidesIndexes = [];
swiper.visibleSlides = [];
for (let i = 0; i < slides.length; i += 1) {
const slide = slides[i];
let slideOffset = slide.swiperSlideOffset;
if (params.cssMode && params.centeredSlides) {
slideOffset -= slides[0].swiperSlideOffset;
}
const slideProgress =
(offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) /
(slide.swiperSlideSize + params.spaceBetween);
const originalSlideProgress =
(offsetCenter -
snapGrid[0] +
(params.centeredSlides ? swiper.minTranslate() : 0) -
slideOffset) /
(slide.swiperSlideSize + params.spaceBetween);
const slideBefore = -(offsetCenter - slideOffset);
const slideAfter = slideBefore + swiper.slidesSizesGrid[i];
const isVisible =
(slideBefore >= 0 && slideBefore < swiper.size - 1) ||
(slideAfter > 1 && slideAfter <= swiper.size) ||
(slideBefore <= 0 && slideAfter >= swiper.size);
if (isVisible) {
swiper.visibleSlides.push(slide);
swiper.visibleSlidesIndexes.push(i);
slides[i].classList.add(params.slideVisibleClass);
}
slide.progress = rtl ? -slideProgress : slideProgress;
slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;
}
}
",
"export default function updateProgress(translate) {
const swiper = this;
if (typeof translate === 'undefined') {
const multiplier = swiper.rtlTranslate ? -1 : 1;
// eslint-disable-next-line
translate = (swiper && swiper.translate && swiper.translate * multiplier) || 0;
}
const params = swiper.params;
const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
let { progress, isBeginning, isEnd, progressLoop } = swiper;
const wasBeginning = isBeginning;
const wasEnd = isEnd;
if (translatesDiff === 0) {
progress = 0;
isBeginning = true;
isEnd = true;
} else {
progress = (translate - swiper.minTranslate()) / translatesDiff;
const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;
const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;
isBeginning = isBeginningRounded || progress <= 0;
isEnd = isEndRounded || progress >= 1;
if (isBeginningRounded) progress = 0;
if (isEndRounded) progress = 1;
}
if (params.loop) {
const firstSlideIndex = swiper.getSlideIndexByData(0);
const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);
const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];
const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];
const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];
const translateAbs = Math.abs(translate);
if (translateAbs >= firstSlideTranslate) {
progressLoop = (translateAbs - firstSlideTranslate) / translateMax;
} else {
progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;
}
if (progressLoop > 1) progressLoop -= 1;
}
Object.assign(swiper, {
progress,
progressLoop,
isBeginning,
isEnd,
});
if (params.watchSlidesProgress || (params.centeredSlides && params.autoHeight))
swiper.updateSlidesProgress(translate);
if (isBeginning && !wasBeginning) {
swiper.emit('reachBeginning toEdge');
}
if (isEnd && !wasEnd) {
swiper.emit('reachEnd toEdge');
}
if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {
swiper.emit('fromEdge');
}
swiper.emit('progress', progress);
}
",
"import { elementChildren, elementNextAll, elementPrevAll } from '../../shared/utils.js';
export default function updateSlidesClasses() {
const swiper = this;
const { slides, params, slidesEl, activeIndex } = swiper;
const isVirtual = swiper.virtual && params.virtual.enabled;
const getFilteredSlide = (selector) => {
return elementChildren(
slidesEl,
`.${params.slideClass}${selector}, swiper-slide${selector}`,
)[0];
};
slides.forEach((slideEl) => {
slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass);
});
let activeSlide;
if (isVirtual) {
if (params.loop) {
let slideIndex = activeIndex - swiper.virtual.slidesBefore;
if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;
if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;
activeSlide = getFilteredSlide(`[data-swiper-slide-index="${slideIndex}"]`);
} else {
activeSlide = getFilteredSlide(`[data-swiper-slide-index="${activeIndex}"]`);
}
} else {
activeSlide = slides[activeIndex];
}
if (activeSlide) {
// Active classes
activeSlide.classList.add(params.slideActiveClass);
// Next Slide
let nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];
if (params.loop && !nextSlide) {
nextSlide = slides[0];
}
if (nextSlide) {
nextSlide.classList.add(params.slideNextClass);
}
// Prev Slide
let prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];
if (params.loop && !prevSlide === 0) {
prevSlide = slides[slides.length - 1];
}
if (prevSlide) {
prevSlide.classList.add(params.slidePrevClass);
}
}
swiper.emitSlidesClasses();
}
",
"import { preload } from '../../shared/process-lazy-preloader.js';
export function getActiveIndexByTranslate(swiper) {
const { slidesGrid, params } = swiper;
const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
let activeIndex;
for (let i = 0; i < slidesGrid.length; i += 1) {
if (typeof slidesGrid[i + 1] !== 'undefined') {
if (
translate >= slidesGrid[i] &&
translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2
) {
activeIndex = i;
} else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
activeIndex = i + 1;
}
} else if (translate >= slidesGrid[i]) {
activeIndex = i;
}
}
// Normalize slideIndex
if (params.normalizeSlideIndex) {
if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;
}
return activeIndex;
}
export default function updateActiveIndex(newActiveIndex) {
const swiper = this;
const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
const {
snapGrid,
params,
activeIndex: previousIndex,
realIndex: previousRealIndex,
snapIndex: previousSnapIndex,
} = swiper;
let activeIndex = newActiveIndex;
let snapIndex;
const getVirtualRealIndex = (aIndex) => {
let realIndex = aIndex - swiper.virtual.slidesBefore;
if (realIndex < 0) {
realIndex = swiper.virtual.slides.length + realIndex;
}
if (realIndex >= swiper.virtual.slides.length) {
realIndex -= swiper.virtual.slides.length;
}
return realIndex;
};
if (typeof activeIndex === 'undefined') {
activeIndex = getActiveIndexByTranslate(swiper);
}
if (snapGrid.indexOf(translate) >= 0) {
snapIndex = snapGrid.indexOf(translate);
} else {
const skip = Math.min(params.slidesPerGroupSkip, activeIndex);
snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);
}
if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
if (activeIndex === previousIndex) {
if (snapIndex !== previousSnapIndex) {
swiper.snapIndex = snapIndex;
swiper.emit('snapIndexChange');
}
if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {
swiper.realIndex = getVirtualRealIndex(activeIndex);
}
return;
}
// Get real index
let realIndex;
if (swiper.virtual && params.virtual.enabled && params.loop) {
realIndex = getVirtualRealIndex(activeIndex);
} else if (swiper.slides[activeIndex]) {
realIndex = parseInt(
swiper.slides[activeIndex].getAttribute('data-swiper-slide-index') || activeIndex,
10,
);
} else {
realIndex = activeIndex;
}
Object.assign(swiper, {
previousSnapIndex,
snapIndex,
previousRealIndex,
realIndex,
previousIndex,
activeIndex,
});
if (swiper.initialized) {
preload(swiper);
}
swiper.emit('activeIndexChange');
swiper.emit('snapIndexChange');
if (previousRealIndex !== realIndex) {
swiper.emit('realIndexChange');
}
if (swiper.initialized || swiper.params.runCallbacksOnInit) {
swiper.emit('slideChange');
}
}
",
"export default function updateClickedSlide(e) {
const swiper = this;
const params = swiper.params;
const slide = e.closest(`.${params.slideClass}, swiper-slide`);
let slideFound = false;
let slideIndex;
if (slide) {
for (let i = 0; i < swiper.slides.length; i += 1) {
if (swiper.slides[i] === slide) {
slideFound = true;
slideIndex = i;
break;
}
}
}
if (slide && slideFound) {
swiper.clickedSlide = slide;
if (swiper.virtual && swiper.params.virtual.enabled) {
swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);
} else {
swiper.clickedIndex = slideIndex;
}
} else {
swiper.clickedSlide = undefined;
swiper.clickedIndex = undefined;
return;
}
if (
params.slideToClickedSlide &&
swiper.clickedIndex !== undefined &&
swiper.clickedIndex !== swiper.activeIndex
) {
swiper.slideToClickedSlide();
}
}
",
"import getTranslate from './getTranslate.js';
import setTranslate from './setTranslate.js';
import minTranslate from './minTranslate.js';
import maxTranslate from './maxTranslate.js';
import translateTo from './translateTo.js';
export default {
getTranslate,
setTranslate,
minTranslate,
maxTranslate,
translateTo,
};
",
"import { getTranslate } from '../../shared/utils.js';
export default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {
const swiper = this;
const { params, rtlTranslate: rtl, translate, wrapperEl } = swiper;
if (params.virtualTranslate) {
return rtl ? -translate : translate;
}
if (params.cssMode) {
return translate;
}
let currentTranslate = getTranslate(wrapperEl, axis);
currentTranslate += swiper.cssOverflowAdjustment();
if (rtl) currentTranslate = -currentTranslate;
return currentTranslate || 0;
}
",
"export default function setTranslate(translate, byController) {
const swiper = this;
const { rtlTranslate: rtl, params, wrapperEl, progress } = swiper;
let x = 0;
let y = 0;
const z = 0;
if (swiper.isHorizontal()) {
x = rtl ? -translate : translate;
} else {
y = translate;
}
if (params.roundLengths) {
x = Math.floor(x);
y = Math.floor(y);
}
swiper.previousTranslate = swiper.translate;
swiper.translate = swiper.isHorizontal() ? x : y;
if (params.cssMode) {
wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;
} else if (!params.virtualTranslate) {
if (swiper.isHorizontal()) {
x -= swiper.cssOverflowAdjustment();
} else {
y -= swiper.cssOverflowAdjustment();
}
wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;
}
// Check if we need to update progress
let newProgress;
const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
if (translatesDiff === 0) {
newProgress = 0;
} else {
newProgress = (translate - swiper.minTranslate()) / translatesDiff;
}
if (newProgress !== progress) {
swiper.updateProgress(translate);
}
swiper.emit('setTranslate', swiper.translate, byController);
}
",
"export default function minTranslate() {
return -this.snapGrid[0];
}
",
"export default function maxTranslate() {
return -this.snapGrid[this.snapGrid.length - 1];
}
",
"import { animateCSSModeScroll } from '../../shared/utils.js';
export default function translateTo(
translate = 0,
speed = this.params.speed,
runCallbacks = true,
translateBounds = true,
internal,
) {
const swiper = this;
const { params, wrapperEl } = swiper;
if (swiper.animating && params.preventInteractionOnTransition) {
return false;
}
const minTranslate = swiper.minTranslate();
const maxTranslate = swiper.maxTranslate();
let newTranslate;
if (translateBounds && translate > minTranslate) newTranslate = minTranslate;
else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;
else newTranslate = translate;
// Update progress
swiper.updateProgress(newTranslate);
if (params.cssMode) {
const isH = swiper.isHorizontal();
if (speed === 0) {
wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
} else {
if (!swiper.support.smoothScroll) {
animateCSSModeScroll({ swiper, targetPosition: -newTranslate, side: isH ? 'left' : 'top' });
return true;
}
wrapperEl.scrollTo({
[isH ? 'left' : 'top']: -newTranslate,
behavior: 'smooth',
});
}
return true;
}
if (speed === 0) {
swiper.setTransition(0);
swiper.setTranslate(newTranslate);
if (runCallbacks) {
swiper.emit('beforeTransitionStart', speed, internal);
swiper.emit('transitionEnd');
}
} else {
swiper.setTransition(speed);
swiper.setTranslate(newTranslate);
if (runCallbacks) {
swiper.emit('beforeTransitionStart', speed, internal);
swiper.emit('transitionStart');
}
if (!swiper.animating) {
swiper.animating = true;
if (!swiper.onTranslateToWrapperTransitionEnd) {
swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {
if (!swiper || swiper.destroyed) return;
if (e.target !== this) return;
swiper.wrapperEl.removeEventListener(
'transitionend',
swiper.onTranslateToWrapperTransitionEnd,
);
swiper.onTranslateToWrapperTransitionEnd = null;
delete swiper.onTranslateToWrapperTransitionEnd;
if (runCallbacks) {
swiper.emit('transitionEnd');
}
};
}
swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
}
}
return true;
}
",
"export default function transitionEmit({ swiper, runCallbacks, direction, step }) {
const { activeIndex, previousIndex } = swiper;
let dir = direction;
if (!dir) {
if (activeIndex > previousIndex) dir = 'next';
else if (activeIndex < previousIndex) dir = 'prev';
else dir = 'reset';
}
swiper.emit(`transition${step}`);
if (runCallbacks && activeIndex !== previousIndex) {
if (dir === 'reset') {
swiper.emit(`slideResetTransition${step}`);
return;
}
swiper.emit(`slideChangeTransition${step}`);
if (dir === 'next') {
swiper.emit(`slideNextTransition${step}`);
} else {
swiper.emit(`slidePrevTransition${step}`);
}
}
}
",
"import slideTo from './slideTo.js';
import slideToLoop from './slideToLoop.js';
import slideNext from './slideNext.js';
import slidePrev from './slidePrev.js';
import slideReset from './slideReset.js';
import slideToClosest from './slideToClosest.js';
import slideToClickedSlide from './slideToClickedSlide.js';
export default {
slideTo,
slideToLoop,
slideNext,
slidePrev,
slideReset,
slideToClosest,
slideToClickedSlide,
};
",
"import { animateCSSModeScroll } from '../../shared/utils.js';
export default function slideTo(
index = 0,
speed = this.params.speed,
runCallbacks = true,
internal,
initial,
) {
if (typeof index === 'string') {
index = parseInt(index, 10);
}
const swiper = this;
let slideIndex = index;
if (slideIndex < 0) slideIndex = 0;
const {
params,
snapGrid,
slidesGrid,
previousIndex,
activeIndex,
rtlTranslate: rtl,
wrapperEl,
enabled,
} = swiper;
if (
(swiper.animating && params.preventInteractionOnTransition) ||
(!enabled && !internal && !initial)
) {
return false;
}
const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);
let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);
if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
const translate = -snapGrid[snapIndex];
// Normalize slideIndex
if (params.normalizeSlideIndex) {
for (let i = 0; i < slidesGrid.length; i += 1) {
const normalizedTranslate = -Math.floor(translate * 100);
const normalizedGrid = Math.floor(slidesGrid[i] * 100);
const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);
if (typeof slidesGrid[i + 1] !== 'undefined') {
if (
normalizedTranslate >= normalizedGrid &&
normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2
) {
slideIndex = i;
} else if (
normalizedTranslate >= normalizedGrid &&
normalizedTranslate < normalizedGridNext
) {
slideIndex = i + 1;
}
} else if (normalizedTranslate >= normalizedGrid) {
slideIndex = i;
}
}
}
// Directions locks
if (swiper.initialized && slideIndex !== activeIndex) {
if (
!swiper.allowSlideNext &&
translate < swiper.translate &&
translate < swiper.minTranslate()
) {
return false;
}
if (
!swiper.allowSlidePrev &&
translate > swiper.translate &&
translate > swiper.maxTranslate()
) {
if ((activeIndex || 0) !== slideIndex) {
return false;
}
}
}
if (slideIndex !== (previousIndex || 0) && runCallbacks) {
swiper.emit('beforeSlideChangeStart');
}
// Update progress
swiper.updateProgress(translate);
let direction;
if (slideIndex > activeIndex) direction = 'next';
else if (slideIndex < activeIndex) direction = 'prev';
else direction = 'reset';
// Update Index
if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {
swiper.updateActiveIndex(slideIndex);
// Update Height
if (params.autoHeight) {
swiper.updateAutoHeight();
}
swiper.updateSlidesClasses();
if (params.effect !== 'slide') {
swiper.setTranslate(translate);
}
if (direction !== 'reset') {
swiper.transitionStart(runCallbacks, direction);
swiper.transitionEnd(runCallbacks, direction);
}
return false;
}
if (params.cssMode) {
const isH = swiper.isHorizontal();
const t = rtl ? translate : -translate;
if (speed === 0) {
const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
if (isVirtual) {
swiper.wrapperEl.style.scrollSnapType = 'none';
swiper._immediateVirtual = true;
}
if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {
swiper._cssModeVirtualInitialSet = true;
requestAnimationFrame(() => {
wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
});
} else {
wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
}
if (isVirtual) {
requestAnimationFrame(() => {
swiper.wrapperEl.style.scrollSnapType = '';
swiper._immediateVirtual = false;
});
}
} else {
if (!swiper.support.smoothScroll) {
animateCSSModeScroll({ swiper, targetPosition: t, side: isH ? 'left' : 'top' });
return true;
}
wrapperEl.scrollTo({
[isH ? 'left' : 'top']: t,
behavior: 'smooth',
});
}
return true;
}
swiper.setTransition(speed);
swiper.setTranslate(translate);
swiper.updateActiveIndex(slideIndex);
swiper.updateSlidesClasses();
swiper.emit('beforeTransitionStart', speed, internal);
swiper.transitionStart(runCallbacks, direction);
if (speed === 0) {
swiper.transitionEnd(runCallbacks, direction);
} else if (!swiper.animating) {
swiper.animating = true;
if (!swiper.onSlideToWrapperTransitionEnd) {
swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {
if (!swiper || swiper.destroyed) return;
if (e.target !== this) return;
swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
swiper.onSlideToWrapperTransitionEnd = null;
delete swiper.onSlideToWrapperTransitionEnd;
swiper.transitionEnd(runCallbacks, direction);
};
}
swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
}
return true;
}
",
"export default function slideToLoop(
index = 0,
speed = this.params.speed,
runCallbacks = true,
internal,
) {
if (typeof index === 'string') {
const indexAsNumber = parseInt(index, 10);
index = indexAsNumber;
}
const swiper = this;
let newIndex = index;
if (swiper.params.loop) {
if (swiper.virtual && swiper.params.virtual.enabled) {
// eslint-disable-next-line
newIndex = newIndex + swiper.virtual.slidesBefore;
} else {
newIndex = swiper.getSlideIndexByData(newIndex);
}
}
return swiper.slideTo(newIndex, speed, runCallbacks, internal);
}
",
"/* eslint no-unused-vars: "off" */
export default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {
const swiper = this;
const { enabled, params, animating } = swiper;
if (!enabled) return swiper;
let perGroup = params.slidesPerGroup;
if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {
perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);
}
const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;
const isVirtual = swiper.virtual && params.virtual.enabled;
if (params.loop) {
if (animating && !isVirtual && params.loopPreventsSliding) return false;
swiper.loopFix({ direction: 'next' });
// eslint-disable-next-line
swiper._clientLeft = swiper.wrapperEl.clientLeft;
}
if (params.rewind && swiper.isEnd) {
return swiper.slideTo(0, speed, runCallbacks, internal);
}
return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
}
",
"/* eslint no-unused-vars: "off" */
export default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {
const swiper = this;
const { params, snapGrid, slidesGrid, rtlTranslate, enabled, animating } = swiper;
if (!enabled) return swiper;
const isVirtual = swiper.virtual && params.virtual.enabled;
if (params.loop) {
if (animating && !isVirtual && params.loopPreventsSliding) return false;
swiper.loopFix({ direction: 'prev' });
// eslint-disable-next-line
swiper._clientLeft = swiper.wrapperEl.clientLeft;
}
const translate = rtlTranslate ? swiper.translate : -swiper.translate;
function normalize(val) {
if (val < 0) return -Math.floor(Math.abs(val));
return Math.floor(val);
}
const normalizedTranslate = normalize(translate);
const normalizedSnapGrid = snapGrid.map((val) => normalize(val));
let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
if (typeof prevSnap === 'undefined' && params.cssMode) {
let prevSnapIndex;
snapGrid.forEach((snap, snapIndex) => {
if (normalizedTranslate >= snap) {
// prevSnap = snap;
prevSnapIndex = snapIndex;
}
});
if (typeof prevSnapIndex !== 'undefined') {
prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];
}
}
let prevIndex = 0;
if (typeof prevSnap !== 'undefined') {
prevIndex = slidesGrid.indexOf(prevSnap);
if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;
if (
params.slidesPerView === 'auto' &&
params.slidesPerGroup === 1 &&
params.slidesPerGroupAuto
) {
prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;
prevIndex = Math.max(prevIndex, 0);
}
}
if (params.rewind && swiper.isBeginning) {
const lastIndex =
swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual
? swiper.virtual.slides.length - 1
: swiper.slides.length - 1;
return swiper.slideTo(lastIndex, speed, runCallbacks, internal);
}
return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
}
",
"/* eslint no-unused-vars: "off" */
export default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {
const swiper = this;
return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);
}
",
"/* eslint no-unused-vars: "off" */
export default function slideToClosest(
speed = this.params.speed,
runCallbacks = true,
internal,
threshold = 0.5,
) {
const swiper = this;
let index = swiper.activeIndex;
const skip = Math.min(swiper.params.slidesPerGroupSkip, index);
const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);
const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
if (translate >= swiper.snapGrid[snapIndex]) {
// The current translate is on or after the current snap index, so the choice
// is between the current index and the one after it.
const currentSnap = swiper.snapGrid[snapIndex];
const nextSnap = swiper.snapGrid[snapIndex + 1];
if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {
index += swiper.params.slidesPerGroup;
}
} else {
// The current translate is before the current snap index, so the choice
// is between the current index and the one before it.
const prevSnap = swiper.snapGrid[snapIndex - 1];
const currentSnap = swiper.snapGrid[snapIndex];
if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {
index -= swiper.params.slidesPerGroup;
}
}
index = Math.max(index, 0);
index = Math.min(index, swiper.slidesGrid.length - 1);
return swiper.slideTo(index, speed, runCallbacks, internal);
}
",
"import { elementChildren, nextTick } from '../../shared/utils.js';
export default function slideToClickedSlide() {
const swiper = this;
const { params, slidesEl } = swiper;
const slidesPerView =
params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
let slideToIndex = swiper.clickedIndex;
let realIndex;
const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;
if (params.loop) {
if (swiper.animating) return;
realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);
if (params.centeredSlides) {
if (
slideToIndex < swiper.loopedSlides - slidesPerView / 2 ||
slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2
) {
swiper.loopFix();
slideToIndex = swiper.getSlideIndex(
elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0],
);
nextTick(() => {
swiper.slideTo(slideToIndex);
});
} else {
swiper.slideTo(slideToIndex);
}
} else if (slideToIndex > swiper.slides.length - slidesPerView) {
swiper.loopFix();
slideToIndex = swiper.getSlideIndex(
elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0],
);
nextTick(() => {
swiper.slideTo(slideToIndex);
});
} else {
swiper.slideTo(slideToIndex);
}
} else {
swiper.slideTo(slideToIndex);
}
}
",
"import loopCreate from './loopCreate.js';
import loopFix from './loopFix.js';
import loopDestroy from './loopDestroy.js';
export default {
loopCreate,
loopFix,
loopDestroy,
};
",
"import { elementChildren } from '../../shared/utils.js';
export default function loopCreate(slideRealIndex) {
const swiper = this;
const { params, slidesEl } = swiper;
if (!params.loop || (swiper.virtual && swiper.params.virtual.enabled)) return;
const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);
slides.forEach((el, index) => {
el.setAttribute('data-swiper-slide-index', index);
});
swiper.loopFix({ slideRealIndex, direction: params.centeredSlides ? undefined : 'next' });
}
",
"export default function loopFix({
slideRealIndex,
slideTo = true,
direction,
setTranslate,
activeSlideIndex,
byController,
byMousewheel,
} = {}) {
const swiper = this;
if (!swiper.params.loop) return;
swiper.emit('beforeLoopFix');
const { slides, allowSlidePrev, allowSlideNext, slidesEl, params } = swiper;
swiper.allowSlidePrev = true;
swiper.allowSlideNext = true;
if (swiper.virtual && params.virtual.enabled) {
if (slideTo) {
if (!params.centeredSlides && swiper.snapIndex === 0) {
swiper.slideTo(swiper.virtual.slides.length, 0, false, true);
} else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {
swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);
} else if (swiper.snapIndex === swiper.snapGrid.length - 1) {
swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);
}
}
swiper.allowSlidePrev = allowSlidePrev;
swiper.allowSlideNext = allowSlideNext;
swiper.emit('loopFix');
return;
}
const slidesPerView =
params.slidesPerView === 'auto'
? swiper.slidesPerViewDynamic()
: Math.ceil(parseFloat(params.slidesPerView, 10));
let loopedSlides = params.loopedSlides || slidesPerView;
if (loopedSlides % params.slidesPerGroup !== 0) {
loopedSlides += params.slidesPerGroup - (loopedSlides % params.slidesPerGroup);
}
swiper.loopedSlides = loopedSlides;
const prependSlidesIndexes = [];
const appendSlidesIndexes = [];
let activeIndex = swiper.activeIndex;
if (typeof activeSlideIndex === 'undefined') {
activeSlideIndex = swiper.getSlideIndex(
swiper.slides.filter((el) => el.classList.contains(params.slideActiveClass))[0],
);
} else {
activeIndex = activeSlideIndex;
}
const isNext = direction === 'next' || !direction;
const isPrev = direction === 'prev' || !direction;
let slidesPrepended = 0;
let slidesAppended = 0;
// prepend last slides before start
if (activeSlideIndex < loopedSlides) {
slidesPrepended = Math.max(loopedSlides - activeSlideIndex, params.slidesPerGroup);
for (let i = 0; i < loopedSlides - activeSlideIndex; i += 1) {
const index = i - Math.floor(i / slides.length) * slides.length;
prependSlidesIndexes.push(slides.length - index - 1);
}
} else if (activeSlideIndex /* + slidesPerView */ > swiper.slides.length - loopedSlides * 2) {
slidesAppended = Math.max(
activeSlideIndex - (swiper.slides.length - loopedSlides * 2),
params.slidesPerGroup,
);
for (let i = 0; i < slidesAppended; i += 1) {
const index = i - Math.floor(i / slides.length) * slides.length;
appendSlidesIndexes.push(index);
}
}
if (isPrev) {
prependSlidesIndexes.forEach((index) => {
slidesEl.prepend(swiper.slides[index]);
});
}
if (isNext) {
appendSlidesIndexes.forEach((index) => {
slidesEl.append(swiper.slides[index]);
});
}
swiper.recalcSlides();
if (params.slidesPerView === 'auto') {
swiper.updateSlides();
}
if (params.watchSlidesProgress) {
swiper.updateSlidesOffset();
}
if (slideTo) {
if (prependSlidesIndexes.length > 0 && isPrev) {
if (typeof slideRealIndex === 'undefined') {
const currentSlideTranslate = swiper.slidesGrid[activeIndex];
const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];
const diff = newSlideTranslate - currentSlideTranslate;
if (byMousewheel) {
swiper.setTranslate(swiper.translate - diff);
} else {
swiper.slideTo(activeIndex + slidesPrepended, 0, false, true);
if (setTranslate) {
swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;
}
}
} else {
if (setTranslate) {
swiper.slideToLoop(slideRealIndex, 0, false, true);
}
}
} else if (appendSlidesIndexes.length > 0 && isNext) {
if (typeof slideRealIndex === 'undefined') {
const currentSlideTranslate = swiper.slidesGrid[activeIndex];
const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];
const diff = newSlideTranslate - currentSlideTranslate;
if (byMousewheel) {
swiper.setTranslate(swiper.translate - diff);
} else {
swiper.slideTo(activeIndex - slidesAppended, 0, false, true);
if (setTranslate) {
swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;
}
}
} else {
swiper.slideToLoop(slideRealIndex, 0, false, true);
}
}
}
swiper.allowSlidePrev = allowSlidePrev;
swiper.allowSlideNext = allowSlideNext;
if (swiper.controller && swiper.controller.control && !byController) {
const loopParams = {
slideRealIndex,
slideTo: false,
direction,
setTranslate,
activeSlideIndex,
byController: true,
};
if (Array.isArray(swiper.controller.control)) {
swiper.controller.control.forEach((c) => {
if (!c.destroyed && c.params.loop) c.loopFix(loopParams);
});
} else if (
swiper.controller.control instanceof swiper.constructor &&
swiper.controller.control.params.loop
) {
swiper.controller.control.loopFix(loopParams);
}
}
swiper.emit('loopFix');
}
",
"export default function loopDestroy() {
const swiper = this;
const { params, slidesEl } = swiper;
if (!params.loop || (swiper.virtual && swiper.params.virtual.enabled)) return;
swiper.recalcSlides();
const newSlidesOrder = [];
swiper.slides.forEach((slideEl) => {
const index =
typeof slideEl.swiperSlideIndex === 'undefined'
? slideEl.getAttribute('data-swiper-slide-index') * 1
: slideEl.swiperSlideIndex;
newSlidesOrder[index] = slideEl;
});
swiper.slides.forEach((slideEl) => {
slideEl.removeAttribute('data-swiper-slide-index');
});
newSlidesOrder.forEach((slideEl) => {
slidesEl.append(slideEl);
});
swiper.recalcSlides();
swiper.slideTo(swiper.realIndex, 0);
}
",
"import { getWindow, getDocument } from 'ssr-window';
import { now } from '../../shared/utils.js';
// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd
function closestElement(selector, base = this) {
function __closestFrom(el) {
if (!el || el === getDocument() || el === getWindow()) return null;
if (el.assignedSlot) el = el.assignedSlot;
const found = el.closest(selector);
if (!found && !el.getRootNode) {
return null;
}
return found || __closestFrom(el.getRootNode().host);
}
return __closestFrom(base);
}
export default function onTouchStart(event) {
const swiper = this;
const document = getDocument();
const window = getWindow();
const data = swiper.touchEventsData;
data.evCache.push(event);
const { params, touches, enabled } = swiper;
if (!enabled) return;
if (!params.simulateTouch && event.pointerType === 'mouse') return;
if (swiper.animating && params.preventInteractionOnTransition) {
return;
}
if (!swiper.animating && params.cssMode && params.loop) {
swiper.loopFix();
}
let e = event;
if (e.originalEvent) e = e.originalEvent;
let targetEl = e.target;
if (params.touchEventsTarget === 'wrapper') {
if (!swiper.wrapperEl.contains(targetEl)) return;
}
if ('which' in e && e.which === 3) return;
if ('button' in e && e.button > 0) return;
if (data.isTouched && data.isMoved) return;
// change target el for shadow root component
const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';
// eslint-disable-next-line
const eventPath = event.composedPath ? event.composedPath() : event.path;
if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {
targetEl = eventPath[0];
}
const noSwipingSelector = params.noSwipingSelector
? params.noSwipingSelector
: `.${params.noSwipingClass}`;
const isTargetShadow = !!(e.target && e.target.shadowRoot);
// use closestElement for shadow root element to get the actual closest for nested shadow root element
if (
params.noSwiping &&
(isTargetShadow
? closestElement(noSwipingSelector, targetEl)
: targetEl.closest(noSwipingSelector))
) {
swiper.allowClick = true;
return;
}
if (params.swipeHandler) {
if (!targetEl.closest(params.swipeHandler)) return;
}
touches.currentX = e.pageX;
touches.currentY = e.pageY;
const startX = touches.currentX;
const startY = touches.currentY;
// Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore
const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;
const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;
if (
edgeSwipeDetection &&
(startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)
) {
if (edgeSwipeDetection === 'prevent') {
event.preventDefault();
} else {
return;
}
}
Object.assign(data, {
isTouched: true,
isMoved: false,
allowTouchCallbacks: true,
isScrolling: undefined,
startMoving: undefined,
});
touches.startX = startX;
touches.startY = startY;
data.touchStartTime = now();
swiper.allowClick = true;
swiper.updateSize();
swiper.swipeDirection = undefined;
if (params.threshold > 0) data.allowThresholdMove = false;
let preventDefault = true;
if (targetEl.matches(data.focusableElements)) {
preventDefault = false;
if (targetEl.nodeName === 'SELECT') {
data.isTouched = false;
}
}
if (
document.activeElement &&
document.activeElement.matches(data.focusableElements) &&
document.activeElement !== targetEl
) {
document.activeElement.blur();
}
const shouldPreventDefault =
preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;
if (
(params.touchStartForcePreventDefault || shouldPreventDefault) &&
!targetEl.isContentEditable
) {
e.preventDefault();
}
if (
swiper.params.freeMode &&
swiper.params.freeMode.enabled &&
swiper.freeMode &&
swiper.animating &&
!params.cssMode
) {
swiper.freeMode.onTouchStart();
}
swiper.emit('touchStart', e);
}
",
"import { getDocument } from 'ssr-window';
import { now } from '../../shared/utils.js';
export default function onTouchMove(event) {
const document = getDocument();
const swiper = this;
const data = swiper.touchEventsData;
const { params, touches, rtlTranslate: rtl, enabled } = swiper;
if (!enabled) return;
if (!params.simulateTouch && event.pointerType === 'mouse') return;
let e = event;
if (e.originalEvent) e = e.originalEvent;
if (!data.isTouched) {
if (data.startMoving && data.isScrolling) {
swiper.emit('touchMoveOpposite', e);
}
return;
}
const pointerIndex = data.evCache.findIndex((cachedEv) => cachedEv.pointerId === e.pointerId);
if (pointerIndex >= 0) data.evCache[pointerIndex] = e;
const targetTouch = data.evCache.length > 1 ? data.evCache[0] : e;
const pageX = targetTouch.pageX;
const pageY = targetTouch.pageY;
if (e.preventedByNestedSwiper) {
touches.startX = pageX;
touches.startY = pageY;
return;
}
if (!swiper.allowTouchMove) {
if (!e.target.matches(data.focusableElements)) {
swiper.allowClick = false;
}
if (data.isTouched) {
Object.assign(touches, {
startX: pageX,
startY: pageY,
prevX: swiper.touches.currentX,
prevY: swiper.touches.currentY,
currentX: pageX,
currentY: pageY,
});
data.touchStartTime = now();
}
return;
}
if (params.touchReleaseOnEdges && !params.loop) {
if (swiper.isVertical()) {
// Vertical
if (
(pageY < touches.startY && swiper.translate <= swiper.maxTranslate()) ||
(pageY > touches.startY && swiper.translate >= swiper.minTranslate())
) {
data.isTouched = false;
data.isMoved = false;
return;
}
} else if (
(pageX < touches.startX && swiper.translate <= swiper.maxTranslate()) ||
(pageX > touches.startX && swiper.translate >= swiper.minTranslate())
) {
return;
}
}
if (document.activeElement) {
if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {
data.isMoved = true;
swiper.allowClick = false;
return;
}
}
if (data.allowTouchCallbacks) {
swiper.emit('touchMove', e);
}
if (e.targetTouches && e.targetTouches.length > 1) return;
touches.currentX = pageX;
touches.currentY = pageY;
const diffX = touches.currentX - touches.startX;
const diffY = touches.currentY - touches.startY;
if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold)
return;
if (typeof data.isScrolling === 'undefined') {
let touchAngle;
if (
(swiper.isHorizontal() && touches.currentY === touches.startY) ||
(swiper.isVertical() && touches.currentX === touches.startX)
) {
data.isScrolling = false;
} else {
// eslint-disable-next-line
if (diffX * diffX + diffY * diffY >= 25) {
touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;
data.isScrolling = swiper.isHorizontal()
? touchAngle > params.touchAngle
: 90 - touchAngle > params.touchAngle;
}
}
}
if (data.isScrolling) {
swiper.emit('touchMoveOpposite', e);
}
if (typeof data.startMoving === 'undefined') {
if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
data.startMoving = true;
}
}
if (
data.isScrolling ||
(swiper.zoom && swiper.params.zoom && swiper.params.zoom.enabled && data.evCache.length > 1)
) {
data.isTouched = false;
return;
}
if (!data.startMoving) {
return;
}
swiper.allowClick = false;
if (!params.cssMode && e.cancelable) {
e.preventDefault();
}
if (params.touchMoveStopPropagation && !params.nested) {
e.stopPropagation();
}
let diff = swiper.isHorizontal() ? diffX : diffY;
let touchesDiff = swiper.isHorizontal()
? touches.currentX - touches.previousX
: touches.currentY - touches.previousY;
if (params.oneWayMovement) {
diff = Math.abs(diff) * (rtl ? 1 : -1);
touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);
}
touches.diff = diff;
diff *= params.touchRatio;
if (rtl) {
diff = -diff;
touchesDiff = -touchesDiff;
}
const prevTouchesDirection = swiper.touchesDirection;
swiper.swipeDirection = diff > 0 ? 'prev' : 'next';
swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';
const isLoop = swiper.params.loop && !params.cssMode;
if (!data.isMoved) {
if (isLoop) {
swiper.loopFix({ direction: swiper.swipeDirection });
}
data.startTranslate = swiper.getTranslate();
swiper.setTransition(0);
if (swiper.animating) {
const evt = new window.CustomEvent('transitionend', {
bubbles: true,
cancelable: true,
});
swiper.wrapperEl.dispatchEvent(evt);
}
data.allowMomentumBounce = false;
// Grab Cursor
if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
swiper.setGrabCursor(true);
}
swiper.emit('sliderFirstMove', e);
}
let loopFixed;
if (
data.isMoved &&
prevTouchesDirection !== swiper.touchesDirection &&
isLoop &&
Math.abs(diff) >= 1
) {
// need another loop fix
swiper.loopFix({ direction: swiper.swipeDirection, setTranslate: true });
loopFixed = true;
}
swiper.emit('sliderMove', e);
data.isMoved = true;
data.currentTranslate = diff + data.startTranslate;
let disableParentSwiper = true;
let resistanceRatio = params.resistanceRatio;
if (params.touchReleaseOnEdges) {
resistanceRatio = 0;
}
if (diff > 0) {
if (
isLoop &&
!loopFixed &&
data.currentTranslate >
(params.centeredSlides ? swiper.minTranslate() - swiper.size / 2 : swiper.minTranslate())
) {
swiper.loopFix({ direction: 'prev', setTranslate: true, activeSlideIndex: 0 });
}
if (data.currentTranslate > swiper.minTranslate()) {
disableParentSwiper = false;
if (params.resistance) {
data.currentTranslate =
swiper.minTranslate() -
1 +
(-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;
}
}
} else if (diff < 0) {
if (
isLoop &&
!loopFixed &&
data.currentTranslate <
(params.centeredSlides ? swiper.maxTranslate() + swiper.size / 2 : swiper.maxTranslate())
) {
swiper.loopFix({
direction: 'next',
setTranslate: true,
activeSlideIndex:
swiper.slides.length -
(params.slidesPerView === 'auto'
? swiper.slidesPerViewDynamic()
: Math.ceil(parseFloat(params.slidesPerView, 10))),
});
}
if (data.currentTranslate < swiper.maxTranslate()) {
disableParentSwiper = false;
if (params.resistance) {
data.currentTranslate =
swiper.maxTranslate() +
1 -
(swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;
}
}
}
if (disableParentSwiper) {
e.preventedByNestedSwiper = true;
}
// Directions locks
if (
!swiper.allowSlideNext &&
swiper.swipeDirection === 'next' &&
data.currentTranslate < data.startTranslate
) {
data.currentTranslate = data.startTranslate;
}
if (
!swiper.allowSlidePrev &&
swiper.swipeDirection === 'prev' &&
data.currentTranslate > data.startTranslate
) {
data.currentTranslate = data.startTranslate;
}
if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {
data.currentTranslate = data.startTranslate;
}
// Threshold
if (params.threshold > 0) {
if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
if (!data.allowThresholdMove) {
data.allowThresholdMove = true;
touches.startX = touches.currentX;
touches.startY = touches.currentY;
data.currentTranslate = data.startTranslate;
touches.diff = swiper.isHorizontal()
? touches.currentX - touches.startX
: touches.currentY - touches.startY;
return;
}
} else {
data.currentTranslate = data.startTranslate;
return;
}
}
if (!params.followFinger || params.cssMode) return;
// Update active index in free mode
if (
(params.freeMode && params.freeMode.enabled && swiper.freeMode) ||
params.watchSlidesProgress
) {
swiper.updateActiveIndex();
swiper.updateSlidesClasses();
}
if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {
swiper.freeMode.onTouchMove();
}
// Update progress
swiper.updateProgress(data.currentTranslate);
// Update translate
swiper.setTranslate(data.currentTranslate);
}
",
"import { now, nextTick } from '../../shared/utils.js';
export default function onTouchEnd(event) {
const swiper = this;
const data = swiper.touchEventsData;
const pointerIndex = data.evCache.findIndex((cachedEv) => cachedEv.pointerId === event.pointerId);
if (pointerIndex >= 0) {
data.evCache.splice(pointerIndex, 1);
}
if (['pointercancel', 'pointerout', 'pointerleave'].includes(event.type)) {
const proceed =
event.type === 'pointercancel' && (swiper.browser.isSafari || swiper.browser.isWebView);
if (!proceed) {
return;
}
}
const { params, touches, rtlTranslate: rtl, slidesGrid, enabled } = swiper;
if (!enabled) return;
if (!params.simulateTouch && event.pointerType === 'mouse') return;
let e = event;
if (e.originalEvent) e = e.originalEvent;
if (data.allowTouchCallbacks) {
swiper.emit('touchEnd', e);
}
data.allowTouchCallbacks = false;
if (!data.isTouched) {
if (data.isMoved && params.grabCursor) {
swiper.setGrabCursor(false);
}
data.isMoved = false;
data.startMoving = false;
return;
}
// Return Grab Cursor
if (
params.grabCursor &&
data.isMoved &&
data.isTouched &&
(swiper.allowSlideNext === true || swiper.allowSlidePrev === true)
) {
swiper.setGrabCursor(false);
}
// Time diff
const touchEndTime = now();
const timeDiff = touchEndTime - data.touchStartTime;
// Tap, doubleTap, Click
if (swiper.allowClick) {
const pathTree = e.path || (e.composedPath && e.composedPath());
swiper.updateClickedSlide((pathTree && pathTree[0]) || e.target);
swiper.emit('tap click', e);
if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {
swiper.emit('doubleTap doubleClick', e);
}
}
data.lastClickTime = now();
nextTick(() => {
if (!swiper.destroyed) swiper.allowClick = true;
});
if (
!data.isTouched ||
!data.isMoved ||
!swiper.swipeDirection ||
touches.diff === 0 ||
data.currentTranslate === data.startTranslate
) {
data.isTouched = false;
data.isMoved = false;
data.startMoving = false;
return;
}
data.isTouched = false;
data.isMoved = false;
data.startMoving = false;
let currentPos;
if (params.followFinger) {
currentPos = rtl ? swiper.translate : -swiper.translate;
} else {
currentPos = -data.currentTranslate;
}
if (params.cssMode) {
return;
}
if (swiper.params.freeMode && params.freeMode.enabled) {
swiper.freeMode.onTouchEnd({ currentPos });
return;
}
// Find current slide
let stopIndex = 0;
let groupSize = swiper.slidesSizesGrid[0];
for (
let i = 0;
i < slidesGrid.length;
i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup
) {
const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
if (typeof slidesGrid[i + increment] !== 'undefined') {
if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {
stopIndex = i;
groupSize = slidesGrid[i + increment] - slidesGrid[i];
}
} else if (currentPos >= slidesGrid[i]) {
stopIndex = i;
groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];
}
}
let rewindFirstIndex = null;
let rewindLastIndex = null;
if (params.rewind) {
if (swiper.isBeginning) {
rewindLastIndex =
swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual
? swiper.virtual.slides.length - 1
: swiper.slides.length - 1;
} else if (swiper.isEnd) {
rewindFirstIndex = 0;
}
}
// Find current slide size
const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
if (timeDiff > params.longSwipesMs) {
// Long touches
if (!params.longSwipes) {
swiper.slideTo(swiper.activeIndex);
return;
}
if (swiper.swipeDirection === 'next') {
if (ratio >= params.longSwipesRatio)
swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);
else swiper.slideTo(stopIndex);
}
if (swiper.swipeDirection === 'prev') {
if (ratio > 1 - params.longSwipesRatio) {
swiper.slideTo(stopIndex + increment);
} else if (
rewindLastIndex !== null &&
ratio < 0 &&
Math.abs(ratio) > params.longSwipesRatio
) {
swiper.slideTo(rewindLastIndex);
} else {
swiper.slideTo(stopIndex);
}
}
} else {
// Short swipes
if (!params.shortSwipes) {
swiper.slideTo(swiper.activeIndex);
return;
}
const isNavButtonTarget =
swiper.navigation &&
(e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);
if (!isNavButtonTarget) {
if (swiper.swipeDirection === 'next') {
swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);
}
if (swiper.swipeDirection === 'prev') {
swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);
}
} else if (e.target === swiper.navigation.nextEl) {
swiper.slideTo(stopIndex + increment);
} else {
swiper.slideTo(stopIndex);
}
}
}
",
"export default function onResize() {
const swiper = this;
const { params, el } = swiper;
if (el && el.offsetWidth === 0) return;
// Breakpoints
if (params.breakpoints) {
swiper.setBreakpoint();
}
// Save locks
const { allowSlideNext, allowSlidePrev, snapGrid } = swiper;
const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
// Disable locks on resize
swiper.allowSlideNext = true;
swiper.allowSlidePrev = true;
swiper.updateSize();
swiper.updateSlides();
swiper.updateSlidesClasses();
const isVirtualLoop = isVirtual && params.loop;
if (
(params.slidesPerView === 'auto' || params.slidesPerView > 1) &&
swiper.isEnd &&
!swiper.isBeginning &&
!swiper.params.centeredSlides &&
!isVirtualLoop
) {
swiper.slideTo(swiper.slides.length - 1, 0, false, true);
} else {
if (swiper.params.loop && !isVirtual) {
swiper.slideToLoop(swiper.realIndex, 0, false, true);
} else {
swiper.slideTo(swiper.activeIndex, 0, false, true);
}
}
if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
clearTimeout(swiper.autoplay.resizeTimeout);
swiper.autoplay.resizeTimeout = setTimeout(() => {
if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
swiper.autoplay.resume();
}
}, 500);
}
// Return locks after resize
swiper.allowSlidePrev = allowSlidePrev;
swiper.allowSlideNext = allowSlideNext;
if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
swiper.checkOverflow();
}
}
",
"export default function onClick(e) {
const swiper = this;
if (!swiper.enabled) return;
if (!swiper.allowClick) {
if (swiper.params.preventClicks) e.preventDefault();
if (swiper.params.preventClicksPropagation && swiper.animating) {
e.stopPropagation();
e.stopImmediatePropagation();
}
}
}
",
"export default function onScroll() {
const swiper = this;
const { wrapperEl, rtlTranslate, enabled } = swiper;
if (!enabled) return;
swiper.previousTranslate = swiper.translate;
if (swiper.isHorizontal()) {
swiper.translate = -wrapperEl.scrollLeft;
} else {
swiper.translate = -wrapperEl.scrollTop;
}
// eslint-disable-next-line
if (swiper.translate === 0) swiper.translate = 0;
swiper.updateActiveIndex();
swiper.updateSlidesClasses();
let newProgress;
const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
if (translatesDiff === 0) {
newProgress = 0;
} else {
newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;
}
if (newProgress !== swiper.progress) {
swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);
}
swiper.emit('setTranslate', swiper.translate, false);
}
",
"import { processLazyPreloader } from '../../shared/process-lazy-preloader.js';
export default function onLoad(e) {
const swiper = this;
processLazyPreloader(swiper, e.target);
swiper.update();
}
",
"import { getDocument } from 'ssr-window';
import onTouchStart from './onTouchStart.js';
import onTouchMove from './onTouchMove.js';
import onTouchEnd from './onTouchEnd.js';
import onResize from './onResize.js';
import onClick from './onClick.js';
import onScroll from './onScroll.js';
import onLoad from './onLoad.js';
let dummyEventAttached = false;
function dummyEventListener() {}
const events = (swiper, method) => {
const document = getDocument();
const { params, el, wrapperEl, device } = swiper;
const capture = !!params.nested;
const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';
const swiperMethod = method;
// Touch Events
el[domMethod]('pointerdown', swiper.onTouchStart, { passive: false });
document[domMethod]('pointermove', swiper.onTouchMove, { passive: false, capture });
document[domMethod]('pointerup', swiper.onTouchEnd, { passive: true });
document[domMethod]('pointercancel', swiper.onTouchEnd, { passive: true });
document[domMethod]('pointerout', swiper.onTouchEnd, { passive: true });
document[domMethod]('pointerleave', swiper.onTouchEnd, { passive: true });
// Prevent Links Clicks
if (params.preventClicks || params.preventClicksPropagation) {
el[domMethod]('click', swiper.onClick, true);
}
if (params.cssMode) {
wrapperEl[domMethod]('scroll', swiper.onScroll);
}
// Resize handler
if (params.updateOnWindowResize) {
swiper[swiperMethod](
device.ios || device.android
? 'resize orientationchange observerUpdate'
: 'resize observerUpdate',
onResize,
true,
);
} else {
swiper[swiperMethod]('observerUpdate', onResize, true);
}
// Images loader
el[domMethod]('load', swiper.onLoad, { capture: true });
};
function attachEvents() {
const swiper = this;
const document = getDocument();
const { params } = swiper;
swiper.onTouchStart = onTouchStart.bind(swiper);
swiper.onTouchMove = onTouchMove.bind(swiper);
swiper.onTouchEnd = onTouchEnd.bind(swiper);
if (params.cssMode) {
swiper.onScroll = onScroll.bind(swiper);
}
swiper.onClick = onClick.bind(swiper);
swiper.onLoad = onLoad.bind(swiper);
if (!dummyEventAttached) {
document.addEventListener('touchstart', dummyEventListener);
dummyEventAttached = true;
}
events(swiper, 'on');
}
function detachEvents() {
const swiper = this;
events(swiper, 'off');
}
export default {
attachEvents,
detachEvents,
};
",
"import { extend } from '../../shared/utils.js';
const isGridEnabled = (swiper, params) => {
return swiper.grid && params.grid && params.grid.rows > 1;
};
export default function setBreakpoint() {
const swiper = this;
const { realIndex, initialized, params, el } = swiper;
const breakpoints = params.breakpoints;
if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) return;
// Get breakpoint for window width and update parameters
const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);
if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;
const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;
const breakpointParams = breakpointOnlyParams || swiper.originalParams;
const wasMultiRow = isGridEnabled(swiper, params);
const isMultiRow = isGridEnabled(swiper, breakpointParams);
const wasEnabled = params.enabled;
if (wasMultiRow && !isMultiRow) {
el.classList.remove(
`${params.containerModifierClass}grid`,
`${params.containerModifierClass}grid-column`,
);
swiper.emitContainerClasses();
} else if (!wasMultiRow && isMultiRow) {
el.classList.add(`${params.containerModifierClass}grid`);
if (
(breakpointParams.grid.fill && breakpointParams.grid.fill === 'column') ||
(!breakpointParams.grid.fill && params.grid.fill === 'column')
) {
el.classList.add(`${params.containerModifierClass}grid-column`);
}
swiper.emitContainerClasses();
}
// Toggle navigation, pagination, scrollbar
['navigation', 'pagination', 'scrollbar'].forEach((prop) => {
const wasModuleEnabled = params[prop] && params[prop].enabled;
const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;
if (wasModuleEnabled && !isModuleEnabled) {
swiper[prop].disable();
}
if (!wasModuleEnabled && isModuleEnabled) {
swiper[prop].enable();
}
});
const directionChanged =
breakpointParams.direction && breakpointParams.direction !== params.direction;
const needsReLoop =
params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);
if (directionChanged && initialized) {
swiper.changeDirection();
}
extend(swiper.params, breakpointParams);
const isEnabled = swiper.params.enabled;
Object.assign(swiper, {
allowTouchMove: swiper.params.allowTouchMove,
allowSlideNext: swiper.params.allowSlideNext,
allowSlidePrev: swiper.params.allowSlidePrev,
});
if (wasEnabled && !isEnabled) {
swiper.disable();
} else if (!wasEnabled && isEnabled) {
swiper.enable();
}
swiper.currentBreakpoint = breakpoint;
swiper.emit('_beforeBreakpoint', breakpointParams);
if (needsReLoop && initialized) {
swiper.loopDestroy();
swiper.loopCreate(realIndex);
swiper.updateSlides();
}
swiper.emit('breakpoint', breakpointParams);
}
",
"function checkOverflow() {
const swiper = this;
const { isLocked: wasLocked, params } = swiper;
const { slidesOffsetBefore } = params;
if (slidesOffsetBefore) {
const lastSlideIndex = swiper.slides.length - 1;
const lastSlideRightEdge =
swiper.slidesGrid[lastSlideIndex] +
swiper.slidesSizesGrid[lastSlideIndex] +
slidesOffsetBefore * 2;
swiper.isLocked = swiper.size > lastSlideRightEdge;
} else {
swiper.isLocked = swiper.snapGrid.length === 1;
}
if (params.allowSlideNext === true) {
swiper.allowSlideNext = !swiper.isLocked;
}
if (params.allowSlidePrev === true) {
swiper.allowSlidePrev = !swiper.isLocked;
}
if (wasLocked && wasLocked !== swiper.isLocked) {
swiper.isEnd = false;
}
if (wasLocked !== swiper.isLocked) {
swiper.emit(swiper.isLocked ? 'lock' : 'unlock');
}
}
export default { checkOverflow };
",
"export default {
init: true,
direction: 'horizontal',
oneWayMovement: false,
touchEventsTarget: 'wrapper',
initialSlide: 0,
speed: 300,
cssMode: false,
updateOnWindowResize: true,
resizeObserver: true,
nested: false,
createElements: false,
enabled: true,
focusableElements: 'input, select, option, textarea, button, video, label',
// Overrides
width: null,
height: null,
//
preventInteractionOnTransition: false,
// ssr
userAgent: null,
url: null,
// To support iOS's swipe-to-go-back gesture (when being used in-app).
edgeSwipeDetection: false,
edgeSwipeThreshold: 20,
// Autoheight
autoHeight: false,
// Set wrapper width
setWrapperSize: false,
// Virtual Translate
virtualTranslate: false,
// Effects
effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
// Breakpoints
breakpoints: undefined,
breakpointsBase: 'window',
// Slides grid
spaceBetween: 0,
slidesPerView: 1,
slidesPerGroup: 1,
slidesPerGroupSkip: 0,
slidesPerGroupAuto: false,
centeredSlides: false,
centeredSlidesBounds: false,
slidesOffsetBefore: 0, // in px
slidesOffsetAfter: 0, // in px
normalizeSlideIndex: true,
centerInsufficientSlides: false,
// Disable swiper and hide navigation when container not overflow
watchOverflow: true,
// Round length
roundLengths: false,
// Touches
touchRatio: 1,
touchAngle: 45,
simulateTouch: true,
shortSwipes: true,
longSwipes: true,
longSwipesRatio: 0.5,
longSwipesMs: 300,
followFinger: true,
allowTouchMove: true,
threshold: 5,
touchMoveStopPropagation: false,
touchStartPreventDefault: true,
touchStartForcePreventDefault: false,
touchReleaseOnEdges: false,
// Unique Navigation Elements
uniqueNavElements: true,
// Resistance
resistance: true,
resistanceRatio: 0.85,
// Progress
watchSlidesProgress: false,
// Cursor
grabCursor: false,
// Clicks
preventClicks: true,
preventClicksPropagation: true,
slideToClickedSlide: false,
// loop
loop: false,
loopedSlides: null,
loopPreventsSliding: true,
// rewind
rewind: false,
// Swiping/no swiping
allowSlidePrev: true,
allowSlideNext: true,
swipeHandler: null, // '.swipe-handler',
noSwiping: true,
noSwipingClass: 'swiper-no-swiping',
noSwipingSelector: null,
// Passive Listeners
passiveListeners: true,
maxBackfaceHiddenSlides: 10,
// NS
containerModifierClass: 'swiper-', // NEW
slideClass: 'swiper-slide',
slideActiveClass: 'swiper-slide-active',
slideVisibleClass: 'swiper-slide-visible',
slideNextClass: 'swiper-slide-next',
slidePrevClass: 'swiper-slide-prev',
wrapperClass: 'swiper-wrapper',
lazyPreloaderClass: 'swiper-lazy-preloader',
lazyPreloadPrevNext: 0,
// Callbacks
runCallbacksOnInit: true,
// Internals
_emitClasses: false,
};
",
"import { extend } from '../shared/utils.js';
export default function moduleExtendParams(params, allModulesParams) {
return function extendParams(obj = {}) {
const moduleParamName = Object.keys(obj)[0];
const moduleParams = obj[moduleParamName];
if (typeof moduleParams !== 'object' || moduleParams === null) {
extend(allModulesParams, obj);
return;
}
if (
['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 &&
params[moduleParamName] === true
) {
params[moduleParamName] = { auto: true };
}
if (!(moduleParamName in params && 'enabled' in moduleParams)) {
extend(allModulesParams, obj);
return;
}
if (params[moduleParamName] === true) {
params[moduleParamName] = { enabled: true };
}
if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {
params[moduleParamName].enabled = true;
}
if (!params[moduleParamName]) params[moduleParamName] = { enabled: false };
extend(allModulesParams, obj);
};
}
",
"/* eslint no-param-reassign: "off" */
import { getDocument } from 'ssr-window';
import {
extend,
deleteProps,
createElement,
elementChildren,
elementStyle,
elementIndex,
} from '../shared/utils.js';
import { getSupport } from '../shared/get-support.js';
import { getDevice } from '../shared/get-device.js';
import { getBrowser } from '../shared/get-browser.js';
import Resize from './modules/resize/resize.js';
import Observer from './modules/observer/observer.js';
import eventsEmitter from './events-emitter.js';
import update from './update/index.js';
import translate from './translate/index.js';
import transition from './transition/index.js';
import slide from './slide/index.js';
import loop from './loop/index.js';
import grabCursor from './grab-cursor/index.js';
import events from './events/index.js';
import breakpoints from './breakpoints/index.js';
import classes from './classes/index.js';
import checkOverflow from './check-overflow/index.js';
import defaults from './defaults.js';
import moduleExtendParams from './moduleExtendParams.js';
import { processLazyPreloader, preload } from '../shared/process-lazy-preloader.js';
const prototypes = {
eventsEmitter,
update,
translate,
transition,
slide,
loop,
grabCursor,
events,
breakpoints,
checkOverflow,
classes,
};
const extendedDefaults = {};
class Swiper {
constructor(...args) {
let el;
let params;
if (
args.length === 1 &&
args[0].constructor &&
Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object'
) {
params = args[0];
} else {
[el, params] = args;
}
if (!params) params = {};
params = extend({}, params);
if (el && !params.el) params.el = el;
const document = getDocument();
if (
params.el &&
typeof params.el === 'string' &&
document.querySelectorAll(params.el).length > 1
) {
const swipers = [];
document.querySelectorAll(params.el).forEach((containerEl) => {
const newParams = extend({}, params, { el: containerEl });
swipers.push(new Swiper(newParams));
});
// eslint-disable-next-line no-constructor-return
return swipers;
}
// Swiper Instance
const swiper = this;
swiper.__swiper__ = true;
swiper.support = getSupport();
swiper.device = getDevice({ userAgent: params.userAgent });
swiper.browser = getBrowser();
swiper.eventsListeners = {};
swiper.eventsAnyListeners = [];
swiper.modules = [...swiper.__modules__];
if (params.modules && Array.isArray(params.modules)) {
swiper.modules.push(...params.modules);
}
const allModulesParams = {};
swiper.modules.forEach((mod) => {
mod({
params,
swiper,
extendParams: moduleExtendParams(params, allModulesParams),
on: swiper.on.bind(swiper),
once: swiper.once.bind(swiper),
off: swiper.off.bind(swiper),
emit: swiper.emit.bind(swiper),
});
});
// Extend defaults with modules params
const swiperParams = extend({}, defaults, allModulesParams);
// Extend defaults with passed params
swiper.params = extend({}, swiperParams, extendedDefaults, params);
swiper.originalParams = extend({}, swiper.params);
swiper.passedParams = extend({}, params);
// add event listeners
if (swiper.params && swiper.params.on) {
Object.keys(swiper.params.on).forEach((eventName) => {
swiper.on(eventName, swiper.params.on[eventName]);
});
}
if (swiper.params && swiper.params.onAny) {
swiper.onAny(swiper.params.onAny);
}
// Extend Swiper
Object.assign(swiper, {
enabled: swiper.params.enabled,
el,
// Classes
classNames: [],
// Slides
slides: [],
slidesGrid: [],
snapGrid: [],
slidesSizesGrid: [],
// isDirection
isHorizontal() {
return swiper.params.direction === 'horizontal';
},
isVertical() {
return swiper.params.direction === 'vertical';
},
// Indexes
activeIndex: 0,
realIndex: 0,
//
isBeginning: true,
isEnd: false,
// Props
translate: 0,
previousTranslate: 0,
progress: 0,
velocity: 0,
animating: false,
cssOverflowAdjustment() {
// Returns 0 unless `translate` is > 2**23
// Should be subtracted from css values to prevent overflow
return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;
},
// Locks
allowSlideNext: swiper.params.allowSlideNext,
allowSlidePrev: swiper.params.allowSlidePrev,
// Touch Events
touchEventsData: {
isTouched: undefined,
isMoved: undefined,
allowTouchCallbacks: undefined,
touchStartTime: undefined,
isScrolling: undefined,
currentTranslate: undefined,
startTranslate: undefined,
allowThresholdMove: undefined,
// Form elements to match
focusableElements: swiper.params.focusableElements,
// Last click time
lastClickTime: 0,
clickTimeout: undefined,
// Velocities
velocities: [],
allowMomentumBounce: undefined,
startMoving: undefined,
evCache: [],
},
// Clicks
allowClick: true,
// Touches
allowTouchMove: swiper.params.allowTouchMove,
touches: {
startX: 0,
startY: 0,
currentX: 0,
currentY: 0,
diff: 0,
},
// Images
imagesToLoad: [],
imagesLoaded: 0,
});
swiper.emit('_swiper');
// Init
if (swiper.params.init) {
swiper.init();
}
// Return app instance
// eslint-disable-next-line no-constructor-return
return swiper;
}
getSlideIndex(slideEl) {
const { slidesEl, params } = this;
const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);
const firstSlideIndex = elementIndex(slides[0]);
return elementIndex(slideEl) - firstSlideIndex;
}
getSlideIndexByData(index) {
return this.getSlideIndex(
this.slides.filter(
(slideEl) => slideEl.getAttribute('data-swiper-slide-index') * 1 === index,
)[0],
);
}
recalcSlides() {
const swiper = this;
const { slidesEl, params } = swiper;
swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);
}
enable() {
const swiper = this;
if (swiper.enabled) return;
swiper.enabled = true;
if (swiper.params.grabCursor) {
swiper.setGrabCursor();
}
swiper.emit('enable');
}
disable() {
const swiper = this;
if (!swiper.enabled) return;
swiper.enabled = false;
if (swiper.params.grabCursor) {
swiper.unsetGrabCursor();
}
swiper.emit('disable');
}
setProgress(progress, speed) {
const swiper = this;
progress = Math.min(Math.max(progress, 0), 1);
const min = swiper.minTranslate();
const max = swiper.maxTranslate();
const current = (max - min) * progress + min;
swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);
swiper.updateActiveIndex();
swiper.updateSlidesClasses();
}
emitContainerClasses() {
const swiper = this;
if (!swiper.params._emitClasses || !swiper.el) return;
const cls = swiper.el.className.split(' ').filter((className) => {
return (
className.indexOf('swiper') === 0 ||
className.indexOf(swiper.params.containerModifierClass) === 0
);
});
swiper.emit('_containerClasses', cls.join(' '));
}
getSlideClasses(slideEl) {
const swiper = this;
if (swiper.destroyed) return '';
return slideEl.className
.split(' ')
.filter((className) => {
return (
className.indexOf('swiper-slide') === 0 ||
className.indexOf(swiper.params.slideClass) === 0
);
})
.join(' ');
}
emitSlidesClasses() {
const swiper = this;
if (!swiper.params._emitClasses || !swiper.el) return;
const updates = [];
swiper.slides.forEach((slideEl) => {
const classNames = swiper.getSlideClasses(slideEl);
updates.push({ slideEl, classNames });
swiper.emit('_slideClass', slideEl, classNames);
});
swiper.emit('_slideClasses', updates);
}
slidesPerViewDynamic(view = 'current', exact = false) {
const swiper = this;
const { params, slides, slidesGrid, slidesSizesGrid, size: swiperSize, activeIndex } = swiper;
let spv = 1;
if (params.centeredSlides) {
let slideSize = slides[activeIndex].swiperSlideSize;
let breakLoop;
for (let i = activeIndex + 1; i < slides.length; i += 1) {
if (slides[i] && !breakLoop) {
slideSize += slides[i].swiperSlideSize;
spv += 1;
if (slideSize > swiperSize) breakLoop = true;
}
}
for (let i = activeIndex - 1; i >= 0; i -= 1) {
if (slides[i] && !breakLoop) {
slideSize += slides[i].swiperSlideSize;
spv += 1;
if (slideSize > swiperSize) breakLoop = true;
}
}
} else {
// eslint-disable-next-line
if (view === 'current') {
for (let i = activeIndex + 1; i < slides.length; i += 1) {
const slideInView = exact
? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize
: slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;
if (slideInView) {
spv += 1;
}
}
} else {
// previous
for (let i = activeIndex - 1; i >= 0; i -= 1) {
const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;
if (slideInView) {
spv += 1;
}
}
}
}
return spv;
}
update() {
const swiper = this;
if (!swiper || swiper.destroyed) return;
const { snapGrid, params } = swiper;
// Breakpoints
if (params.breakpoints) {
swiper.setBreakpoint();
}
[...swiper.el.querySelectorAll('[loading="lazy"]')].forEach((imageEl) => {
if (imageEl.complete) {
processLazyPreloader(swiper, imageEl);
}
});
swiper.updateSize();
swiper.updateSlides();
swiper.updateProgress();
swiper.updateSlidesClasses();
function setTranslate() {
const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
const newTranslate = Math.min(
Math.max(translateValue, swiper.maxTranslate()),
swiper.minTranslate(),
);
swiper.setTranslate(newTranslate);
swiper.updateActiveIndex();
swiper.updateSlidesClasses();
}
let translated;
if (swiper.params.freeMode && swiper.params.freeMode.enabled) {
setTranslate();
if (swiper.params.autoHeight) {
swiper.updateAutoHeight();
}
} else {
if (
(swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) &&
swiper.isEnd &&
!swiper.params.centeredSlides
) {
const slides =
swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides : swiper.slides;
translated = swiper.slideTo(slides.length - 1, 0, false, true);
} else {
translated = swiper.slideTo(swiper.activeIndex, 0, false, true);
}
if (!translated) {
setTranslate();
}
}
if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
swiper.checkOverflow();
}
swiper.emit('update');
}
changeDirection(newDirection, needUpdate = true) {
const swiper = this;
const currentDirection = swiper.params.direction;
if (!newDirection) {
// eslint-disable-next-line
newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';
}
if (
newDirection === currentDirection ||
(newDirection !== 'horizontal' && newDirection !== 'vertical')
) {
return swiper;
}
swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);
swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);
swiper.emitContainerClasses();
swiper.params.direction = newDirection;
swiper.slides.forEach((slideEl) => {
if (newDirection === 'vertical') {
slideEl.style.width = '';
} else {
slideEl.style.height = '';
}
});
swiper.emit('changeDirection');
if (needUpdate) swiper.update();
return swiper;
}
changeLanguageDirection(direction) {
const swiper = this;
if ((swiper.rtl && direction === 'rtl') || (!swiper.rtl && direction === 'ltr')) return;
swiper.rtl = direction === 'rtl';
swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;
if (swiper.rtl) {
swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);
swiper.el.dir = 'rtl';
} else {
swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);
swiper.el.dir = 'ltr';
}
swiper.update();
}
mount(element) {
const swiper = this;
if (swiper.mounted) return true;
// Find el
let el = element || swiper.params.el;
if (typeof el === 'string') {
el = document.querySelector(el);
}
if (!el) {
return false;
}
el.swiper = swiper;
if (el.shadowEl) {
swiper.isElement = true;
}
const getWrapperSelector = () => {
return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;
};
const getWrapper = () => {
if (el && el.shadowRoot && el.shadowRoot.querySelector) {
const res = el.shadowRoot.querySelector(getWrapperSelector());
// Children needs to return slot items
return res;
}
return elementChildren(el, getWrapperSelector())[0];
};
// Find Wrapper
let wrapperEl = getWrapper();
if (!wrapperEl && swiper.params.createElements) {
wrapperEl = createElement('div', swiper.params.wrapperClass);
el.append(wrapperEl);
elementChildren(el, `.${swiper.params.slideClass}`).forEach((slideEl) => {
wrapperEl.append(slideEl);
});
}
Object.assign(swiper, {
el,
wrapperEl,
slidesEl: swiper.isElement ? el : wrapperEl,
mounted: true,
// RTL
rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',
rtlTranslate:
swiper.params.direction === 'horizontal' &&
(el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),
wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box',
});
return true;
}
init(el) {
const swiper = this;
if (swiper.initialized) return swiper;
const mounted = swiper.mount(el);
if (mounted === false) return swiper;
swiper.emit('beforeInit');
// Set breakpoint
if (swiper.params.breakpoints) {
swiper.setBreakpoint();
}
// Add Classes
swiper.addClasses();
// Update size
swiper.updateSize();
// Update slides
swiper.updateSlides();
if (swiper.params.watchOverflow) {
swiper.checkOverflow();
}
// Set Grab Cursor
if (swiper.params.grabCursor && swiper.enabled) {
swiper.setGrabCursor();
}
// Slide To Initial Slide
if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {
swiper.slideTo(
swiper.params.initialSlide + swiper.virtual.slidesBefore,
0,
swiper.params.runCallbacksOnInit,
false,
true,
);
} else {
swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);
}
// Create loop
if (swiper.params.loop) {
swiper.loopCreate();
}
// Attach events
swiper.attachEvents();
[...swiper.el.querySelectorAll('[loading="lazy"]')].forEach((imageEl) => {
if (imageEl.complete) {
processLazyPreloader(swiper, imageEl);
} else {
imageEl.addEventListener('load', (e) => {
processLazyPreloader(swiper, e.target);
});
}
});
preload(swiper);
// Init Flag
swiper.initialized = true;
preload(swiper);
// Emit
swiper.emit('init');
swiper.emit('afterInit');
return swiper;
}
destroy(deleteInstance = true, cleanStyles = true) {
const swiper = this;
const { params, el, wrapperEl, slides } = swiper;
if (typeof swiper.params === 'undefined' || swiper.destroyed) {
return null;
}
swiper.emit('beforeDestroy');
// Init Flag
swiper.initialized = false;
// Detach events
swiper.detachEvents();
// Destroy loop
if (params.loop) {
swiper.loopDestroy();
}
// Cleanup styles
if (cleanStyles) {
swiper.removeClasses();
el.removeAttribute('style');
wrapperEl.removeAttribute('style');
if (slides && slides.length) {
slides.forEach((slideEl) => {
slideEl.classList.remove(
params.slideVisibleClass,
params.slideActiveClass,
params.slideNextClass,
params.slidePrevClass,
);
slideEl.removeAttribute('style');
slideEl.removeAttribute('data-swiper-slide-index');
});
}
}
swiper.emit('destroy');
// Detach emitter events
Object.keys(swiper.eventsListeners).forEach((eventName) => {
swiper.off(eventName);
});
if (deleteInstance !== false) {
swiper.el.swiper = null;
deleteProps(swiper);
}
swiper.destroyed = true;
return null;
}
static extendDefaults(newDefaults) {
extend(extendedDefaults, newDefaults);
}
static get extendedDefaults() {
return extendedDefaults;
}
static get defaults() {
return defaults;
}
static installModule(mod) {
if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];
const modules = Swiper.prototype.__modules__;
if (typeof mod === 'function' && modules.indexOf(mod) < 0) {
modules.push(mod);
}
}
static use(module) {
if (Array.isArray(module)) {
module.forEach((m) => Swiper.installModule(m));
return Swiper;
}
Swiper.installModule(module);
return Swiper;
}
}
Object.keys(prototypes).forEach((prototypeGroup) => {
Object.keys(prototypes[prototypeGroup]).forEach((protoMethod) => {
Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];
});
});
Swiper.use([Resize, Observer]);
export default Swiper;
",
"import setTransition from './setTransition.js';
import transitionStart from './transitionStart.js';
import transitionEnd from './transitionEnd.js';
export default {
setTransition,
transitionStart,
transitionEnd,
};
",
"export default function setTransition(duration, byController) {
const swiper = this;
if (!swiper.params.cssMode) {
swiper.wrapperEl.style.transitionDuration = `${duration}ms`;
}
swiper.emit('setTransition', duration, byController);
}
",
"import transitionEmit from './transitionEmit.js';
export default function transitionStart(runCallbacks = true, direction) {
const swiper = this;
const { params } = swiper;
if (params.cssMode) return;
if (params.autoHeight) {
swiper.updateAutoHeight();
}
transitionEmit({ swiper, runCallbacks, direction, step: 'Start' });
}
",
"import transitionEmit from './transitionEmit.js';
export default function transitionEnd(runCallbacks = true, direction) {
const swiper = this;
const { params } = swiper;
swiper.animating = false;
if (params.cssMode) return;
swiper.setTransition(0);
transitionEmit({ swiper, runCallbacks, direction, step: 'End' });
}
",
"import setGrabCursor from './setGrabCursor.js';
import unsetGrabCursor from './unsetGrabCursor.js';
export default {
setGrabCursor,
unsetGrabCursor,
};
",
"export default function setGrabCursor(moving) {
const swiper = this;
if (
!swiper.params.simulateTouch ||
(swiper.params.watchOverflow && swiper.isLocked) ||
swiper.params.cssMode
)
return;
const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;
if (swiper.isElement) {
swiper.__preventObserver__ = true;
}
el.style.cursor = 'move';
el.style.cursor = moving ? 'grabbing' : 'grab';
if (swiper.isElement) {
requestAnimationFrame(() => {
swiper.__preventObserver__ = false;
});
}
}
",
"export default function unsetGrabCursor() {
const swiper = this;
if ((swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) {
return;
}
if (swiper.isElement) {
swiper.__preventObserver__ = true;
}
swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';
if (swiper.isElement) {
requestAnimationFrame(() => {
swiper.__preventObserver__ = false;
});
}
}
",
"import setBreakpoint from './setBreakpoint.js';
import getBreakpoint from './getBreakpoint.js';
export default { setBreakpoint, getBreakpoint };
",
"import { getWindow } from 'ssr-window';
export default function getBreakpoint(breakpoints, base = 'window', containerEl) {
if (!breakpoints || (base === 'container' && !containerEl)) return undefined;
let breakpoint = false;
const window = getWindow();
const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;
const points = Object.keys(breakpoints).map((point) => {
if (typeof point === 'string' && point.indexOf('@') === 0) {
const minRatio = parseFloat(point.substr(1));
const value = currentHeight * minRatio;
return { value, point };
}
return { value: point, point };
});
points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));
for (let i = 0; i < points.length; i += 1) {
const { point, value } = points[i];
if (base === 'window') {
if (window.matchMedia(`(min-width: ${value}px)`).matches) {
breakpoint = point;
}
} else if (value <= containerEl.clientWidth) {
breakpoint = point;
}
}
return breakpoint || 'max';
}
",
"import addClasses from './addClasses.js';
import removeClasses from './removeClasses.js';
export default { addClasses, removeClasses };
",
"function prepareClasses(entries, prefix) {
const resultClasses = [];
entries.forEach((item) => {
if (typeof item === 'object') {
Object.keys(item).forEach((classNames) => {
if (item[classNames]) {
resultClasses.push(prefix + classNames);
}
});
} else if (typeof item === 'string') {
resultClasses.push(prefix + item);
}
});
return resultClasses;
}
export default function addClasses() {
const swiper = this;
const { classNames, params, rtl, el, device } = swiper;
// prettier-ignore
const suffixes = prepareClasses([
'initialized',
params.direction,
{ 'free-mode': swiper.params.freeMode && params.freeMode.enabled },
{ 'autoheight': params.autoHeight },
{ 'rtl': rtl },
{ 'grid': params.grid && params.grid.rows > 1 },
{ 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column' },
{ 'android': device.android },
{ 'ios': device.ios },
{ 'css-mode': params.cssMode },
{ 'centered': params.cssMode && params.centeredSlides },
{ 'watch-progress': params.watchSlidesProgress },
], params.containerModifierClass);
classNames.push(...suffixes);
el.classList.add(...classNames);
swiper.emitContainerClasses();
}
",
"export default function removeClasses() {
const swiper = this;
const { el, classNames } = swiper;
el.classList.remove(...classNames);
swiper.emitContainerClasses();
}
",
"import { createElement, elementChildren } from './utils.js';
export default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {
if (swiper.params.createElements) {
Object.keys(checkProps).forEach((key) => {
if (!params[key] && params.auto === true) {
let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];
if (!element) {
element = createElement('div', checkProps[key]);
element.className = checkProps[key];
swiper.el.append(element);
}
params[key] = element;
originalParams[key] = element;
}
});
}
return params;
}
",
"export default function classesToSelector(classes = '') {
return `.${classes
.trim()
.replace(/([\.:!+\/])/g, '\\$1') // eslint-disable-line
.replace(/ /g, '.')}`;
}
",
"export default function appendSlide(slides) {
const swiper = this;
const { params, slidesEl } = swiper;
if (params.loop) {
swiper.loopDestroy();
}
const appendElement = (slideEl) => {
if (typeof slideEl === 'string') {
const tempDOM = document.createElement('div');
tempDOM.innerHTML = slideEl;
slidesEl.append(tempDOM.children[0]);
tempDOM.innerHTML = '';
} else {
slidesEl.append(slideEl);
}
};
if (typeof slides === 'object' && 'length' in slides) {
for (let i = 0; i < slides.length; i += 1) {
if (slides[i]) appendElement(slides[i]);
}
} else {
appendElement(slides);
}
swiper.recalcSlides();
if (params.loop) {
swiper.loopCreate();
}
if (!params.observer || swiper.isElement) {
swiper.update();
}
}
",
"export default function prependSlide(slides) {
const swiper = this;
const { params, activeIndex, slidesEl } = swiper;
if (params.loop) {
swiper.loopDestroy();
}
let newActiveIndex = activeIndex + 1;
const prependElement = (slideEl) => {
if (typeof slideEl === 'string') {
const tempDOM = document.createElement('div');
tempDOM.innerHTML = slideEl;
slidesEl.prepend(tempDOM.children[0]);
tempDOM.innerHTML = '';
} else {
slidesEl.prepend(slideEl);
}
};
if (typeof slides === 'object' && 'length' in slides) {
for (let i = 0; i < slides.length; i += 1) {
if (slides[i]) prependElement(slides[i]);
}
newActiveIndex = activeIndex + slides.length;
} else {
prependElement(slides);
}
swiper.recalcSlides();
if (params.loop) {
swiper.loopCreate();
}
if (!params.observer || swiper.isElement) {
swiper.update();
}
swiper.slideTo(newActiveIndex, 0, false);
}
",
"export default function addSlide(index, slides) {
const swiper = this;
const { params, activeIndex, slidesEl } = swiper;
let activeIndexBuffer = activeIndex;
if (params.loop) {
activeIndexBuffer -= swiper.loopedSlides;
swiper.loopDestroy();
swiper.recalcSlides();
}
const baseLength = swiper.slides.length;
if (index <= 0) {
swiper.prependSlide(slides);
return;
}
if (index >= baseLength) {
swiper.appendSlide(slides);
return;
}
let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
const slidesBuffer = [];
for (let i = baseLength - 1; i >= index; i -= 1) {
const currentSlide = swiper.slides[i];
currentSlide.remove();
slidesBuffer.unshift(currentSlide);
}
if (typeof slides === 'object' && 'length' in slides) {
for (let i = 0; i < slides.length; i += 1) {
if (slides[i]) slidesEl.append(slides[i]);
}
newActiveIndex =
activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
} else {
slidesEl.append(slides);
}
for (let i = 0; i < slidesBuffer.length; i += 1) {
slidesEl.append(slidesBuffer[i]);
}
swiper.recalcSlides();
if (params.loop) {
swiper.loopCreate();
}
if (!params.observer || swiper.isElement) {
swiper.update();
}
if (params.loop) {
swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
} else {
swiper.slideTo(newActiveIndex, 0, false);
}
}
",
"export default function removeSlide(slidesIndexes) {
const swiper = this;
const { params, activeIndex } = swiper;
let activeIndexBuffer = activeIndex;
if (params.loop) {
activeIndexBuffer -= swiper.loopedSlides;
swiper.loopDestroy();
}
let newActiveIndex = activeIndexBuffer;
let indexToRemove;
if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {
for (let i = 0; i < slidesIndexes.length; i += 1) {
indexToRemove = slidesIndexes[i];
if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();
if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
}
newActiveIndex = Math.max(newActiveIndex, 0);
} else {
indexToRemove = slidesIndexes;
if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();
if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
newActiveIndex = Math.max(newActiveIndex, 0);
}
swiper.recalcSlides();
if (params.loop) {
swiper.loopCreate();
}
if (!params.observer || swiper.isElement) {
swiper.update();
}
if (params.loop) {
swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
} else {
swiper.slideTo(newActiveIndex, 0, false);
}
}
",
"export default function removeAllSlides() {
const swiper = this;
const slidesIndexes = [];
for (let i = 0; i < swiper.slides.length; i += 1) {
slidesIndexes.push(i);
}
swiper.removeSlide(slidesIndexes);
}
",
"export default function effectInit(params) {
const {
effect,
swiper,
on,
setTranslate,
setTransition,
overwriteParams,
perspective,
recreateShadows,
getEffectParams,
} = params;
on('beforeInit', () => {
if (swiper.params.effect !== effect) return;
swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);
if (perspective && perspective()) {
swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
}
const overwriteParamsResult = overwriteParams ? overwriteParams() : {};
Object.assign(swiper.params, overwriteParamsResult);
Object.assign(swiper.originalParams, overwriteParamsResult);
});
on('setTranslate', () => {
if (swiper.params.effect !== effect) return;
setTranslate();
});
on('setTransition', (_s, duration) => {
if (swiper.params.effect !== effect) return;
setTransition(duration);
});
on('transitionEnd', () => {
if (swiper.params.effect !== effect) return;
if (recreateShadows) {
if (!getEffectParams || !getEffectParams().slideShadows) return;
// remove shadows
swiper.slides.forEach((slideEl) => {
slideEl
.querySelectorAll(
'.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left',
)
.forEach((shadowEl) => shadowEl.remove());
});
// create new one
recreateShadows();
}
});
let requireUpdateOnVirtual;
on('virtualUpdate', () => {
if (swiper.params.effect !== effect) return;
if (!swiper.slides.length) {
requireUpdateOnVirtual = true;
}
requestAnimationFrame(() => {
if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {
setTranslate();
requireUpdateOnVirtual = false;
}
});
});
}
",
"import { getSlideTransformEl } from './utils.js';
export default function effectTarget(effectParams, slideEl) {
const transformEl = getSlideTransformEl(slideEl);
if (transformEl !== slideEl) {
transformEl.style.backfaceVisibility = 'hidden';
transformEl.style['-webkit-backface-visibility'] = 'hidden';
}
return transformEl;
}
",
"import { elementTransitionEnd } from './utils.js';
export default function effectVirtualTransitionEnd({
swiper,
duration,
transformElements,
allSlides,
}) {
const { activeIndex } = swiper;
const getSlide = (el) => {
if (!el.parentElement) {
// assume shadow root
const slide = swiper.slides.filter(
(slideEl) => slideEl.shadowEl && slideEl.shadowEl === el.parentNode,
)[0];
return slide;
}
return el.parentElement;
};
if (swiper.params.virtualTranslate && duration !== 0) {
let eventTriggered = false;
let transitionEndTarget;
if (allSlides) {
transitionEndTarget = transformElements;
} else {
transitionEndTarget = transformElements.filter((transformEl) => {
const el = transformEl.classList.contains('swiper-slide-transform')
? getSlide(transformEl)
: transformEl;
return swiper.getSlideIndex(el) === activeIndex;
});
}
transitionEndTarget.forEach((el) => {
elementTransitionEnd(el, () => {
if (eventTriggered) return;
if (!swiper || swiper.destroyed) return;
eventTriggered = true;
swiper.animating = false;
const evt = new window.CustomEvent('transitionend', {
bubbles: true,
cancelable: true,
});
swiper.wrapperEl.dispatchEvent(evt);
});
});
}
}
",
"import { createElement, getSlideTransformEl } from './utils.js';
export default function createShadow(params, slideEl, side) {
const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}`;
const shadowContainer = getSlideTransformEl(slideEl);
let shadowEl = shadowContainer.querySelector(`.${shadowClass}`);
if (!shadowEl) {
shadowEl = createElement('div', `swiper-slide-shadow${side ? `-${side}` : ''}`);
shadowContainer.append(shadowEl);
}
return shadowEl;
}
",
"import { getWindow } from 'ssr-window';
export default function Resize({ swiper, on, emit }) {
const window = getWindow();
let observer = null;
let animationFrame = null;
const resizeHandler = () => {
if (!swiper || swiper.destroyed || !swiper.initialized) return;
emit('beforeResize');
emit('resize');
};
const createObserver = () => {
if (!swiper || swiper.destroyed || !swiper.initialized) return;
observer = new ResizeObserver((entries) => {
animationFrame = window.requestAnimationFrame(() => {
const { width, height } = swiper;
let newWidth = width;
let newHeight = height;
entries.forEach(({ contentBoxSize, contentRect, target }) => {
if (target && target !== swiper.el) return;
newWidth = contentRect
? contentRect.width
: (contentBoxSize[0] || contentBoxSize).inlineSize;
newHeight = contentRect
? contentRect.height
: (contentBoxSize[0] || contentBoxSize).blockSize;
});
if (newWidth !== width || newHeight !== height) {
resizeHandler();
}
});
});
observer.observe(swiper.el);
};
const removeObserver = () => {
if (animationFrame) {
window.cancelAnimationFrame(animationFrame);
}
if (observer && observer.unobserve && swiper.el) {
observer.unobserve(swiper.el);
observer = null;
}
};
const orientationChangeHandler = () => {
if (!swiper || swiper.destroyed || !swiper.initialized) return;
emit('orientationchange');
};
on('init', () => {
if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {
createObserver();
return;
}
window.addEventListener('resize', resizeHandler);
window.addEventListener('orientationchange', orientationChangeHandler);
});
on('destroy', () => {
removeObserver();
window.removeEventListener('resize', resizeHandler);
window.removeEventListener('orientationchange', orientationChangeHandler);
});
}
",
"import { getWindow } from 'ssr-window';
import { elementParents } from '../../../shared/utils.js';
export default function Observer({ swiper, extendParams, on, emit }) {
const observers = [];
const window = getWindow();
const attach = (target, options = {}) => {
const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;
const observer = new ObserverFunc((mutations) => {
// The observerUpdate event should only be triggered
// once despite the number of mutations. Additional
// triggers are redundant and are very costly
if (swiper.__preventObserver__) return;
if (mutations.length === 1) {
emit('observerUpdate', mutations[0]);
return;
}
const observerUpdate = function observerUpdate() {
emit('observerUpdate', mutations[0]);
};
if (window.requestAnimationFrame) {
window.requestAnimationFrame(observerUpdate);
} else {
window.setTimeout(observerUpdate, 0);
}
});
observer.observe(target, {
attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
childList: typeof options.childList === 'undefined' ? true : options.childList,
characterData: typeof options.characterData === 'undefined' ? true : options.characterData,
});
observers.push(observer);
};
const init = () => {
if (!swiper.params.observer) return;
if (swiper.params.observeParents) {
const containerParents = elementParents(swiper.el);
for (let i = 0; i < containerParents.length; i += 1) {
attach(containerParents[i]);
}
}
// Observe container
attach(swiper.el, {
childList: swiper.params.observeSlideChildren,
});
// Observe wrapper
attach(swiper.wrapperEl, { attributes: false });
};
const destroy = () => {
observers.forEach((observer) => {
observer.disconnect();
});
observers.splice(0, observers.length);
};
extendParams({
observer: false,
observeParents: false,
observeSlideChildren: false,
});
on('init', init);
on('destroy', destroy);
}
",
"// Swiper Class
import Swiper from './core/core.js';
//IMPORT_MODULES
const modules = [
//INSTALL_MODULES
];
Swiper.use(modules);
//EXPORT
",
"import { getDocument } from 'ssr-window';
import { createElement, elementChildren, setCSSProperty } from '../../shared/utils.js';
export default function Virtual({ swiper, extendParams, on, emit }) {
extendParams({
virtual: {
enabled: false,
slides: [],
cache: true,
renderSlide: null,
renderExternal: null,
renderExternalUpdate: true,
addSlidesBefore: 0,
addSlidesAfter: 0,
},
});
let cssModeTimeout;
const document = getDocument();
swiper.virtual = {
cache: {},
from: undefined,
to: undefined,
slides: [],
offset: 0,
slidesGrid: [],
};
const tempDOM = document.createElement('div');
function renderSlide(slide, index) {
const params = swiper.params.virtual;
if (params.cache && swiper.virtual.cache[index]) {
return swiper.virtual.cache[index];
}
// eslint-disable-next-line
let slideEl;
if (params.renderSlide) {
slideEl = params.renderSlide.call(swiper, slide, index);
if (typeof slideEl === 'string') {
tempDOM.innerHTML = slideEl;
slideEl = tempDOM.children[0];
}
} else if (swiper.isElement) {
slideEl = createElement('swiper-slide');
} else {
slideEl = createElement('div', swiper.params.slideClass);
}
slideEl.setAttribute('data-swiper-slide-index', index);
if (!params.renderSlide) {
slideEl.innerHTML = slide;
}
if (params.cache) swiper.virtual.cache[index] = slideEl;
return slideEl;
}
function update(force) {
const { slidesPerView, slidesPerGroup, centeredSlides, loop: isLoop } = swiper.params;
const { addSlidesBefore, addSlidesAfter } = swiper.params.virtual;
const {
from: previousFrom,
to: previousTo,
slides,
slidesGrid: previousSlidesGrid,
offset: previousOffset,
} = swiper.virtual;
if (!swiper.params.cssMode) {
swiper.updateActiveIndex();
}
const activeIndex = swiper.activeIndex || 0;
let offsetProp;
if (swiper.rtlTranslate) offsetProp = 'right';
else offsetProp = swiper.isHorizontal() ? 'left' : 'top';
let slidesAfter;
let slidesBefore;
if (centeredSlides) {
slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;
slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;
} else {
slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;
slidesBefore = (isLoop ? slidesPerView : slidesPerGroup) + addSlidesBefore;
}
let from = activeIndex - slidesBefore;
let to = activeIndex + slidesAfter;
if (!isLoop) {
from = Math.max(from, 0);
to = Math.min(to, slides.length - 1);
}
let offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);
if (isLoop && activeIndex >= slidesBefore) {
from -= slidesBefore;
if (!centeredSlides) offset += swiper.slidesGrid[0];
} else if (isLoop && activeIndex < slidesBefore) {
from = -slidesBefore;
if (centeredSlides) offset += swiper.slidesGrid[0];
}
Object.assign(swiper.virtual, {
from,
to,
offset,
slidesGrid: swiper.slidesGrid,
slidesBefore,
slidesAfter,
});
function onRendered() {
swiper.updateSlides();
swiper.updateProgress();
swiper.updateSlidesClasses();
emit('virtualUpdate');
}
if (previousFrom === from && previousTo === to && !force) {
if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {
swiper.slides.forEach((slideEl) => {
slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;
});
}
swiper.updateProgress();
emit('virtualUpdate');
return;
}
if (swiper.params.virtual.renderExternal) {
swiper.params.virtual.renderExternal.call(swiper, {
offset,
from,
to,
slides: (function getSlides() {
const slidesToRender = [];
for (let i = from; i <= to; i += 1) {
slidesToRender.push(slides[i]);
}
return slidesToRender;
})(),
});
if (swiper.params.virtual.renderExternalUpdate) {
onRendered();
} else {
emit('virtualUpdate');
}
return;
}
const prependIndexes = [];
const appendIndexes = [];
const getSlideIndex = (index) => {
let slideIndex = index;
if (index < 0) {
slideIndex = slides.length + index;
} else if (slideIndex >= slides.length) {
// eslint-disable-next-line
slideIndex = slideIndex - slides.length;
}
return slideIndex;
};
if (force) {
swiper.slidesEl
.querySelectorAll(`.${swiper.params.slideClass}, swiper-slide`)
.forEach((slideEl) => {
slideEl.remove();
});
} else {
for (let i = previousFrom; i <= previousTo; i += 1) {
if (i < from || i > to) {
const slideIndex = getSlideIndex(i);
swiper.slidesEl
.querySelectorAll(
`.${swiper.params.slideClass}[data-swiper-slide-index="${slideIndex}"], swiper-slide[data-swiper-slide-index="${slideIndex}"]`,
)
.forEach((slideEl) => {
slideEl.remove();
});
}
}
}
const loopFrom = isLoop ? -slides.length : 0;
const loopTo = isLoop ? slides.length * 2 : slides.length;
for (let i = loopFrom; i < loopTo; i += 1) {
if (i >= from && i <= to) {
const slideIndex = getSlideIndex(i);
if (typeof previousTo === 'undefined' || force) {
appendIndexes.push(slideIndex);
} else {
if (i > previousTo) appendIndexes.push(slideIndex);
if (i < previousFrom) prependIndexes.push(slideIndex);
}
}
}
appendIndexes.forEach((index) => {
swiper.slidesEl.append(renderSlide(slides[index], index));
});
if (isLoop) {
for (let i = prependIndexes.length - 1; i >= 0; i -= 1) {
const index = prependIndexes[i];
swiper.slidesEl.prepend(renderSlide(slides[index], index));
}
} else {
prependIndexes.sort((a, b) => b - a);
prependIndexes.forEach((index) => {
swiper.slidesEl.prepend(renderSlide(slides[index], index));
});
}
elementChildren(swiper.slidesEl, '.swiper-slide, swiper-slide').forEach((slideEl) => {
slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;
});
onRendered();
}
function appendSlide(slides) {
if (typeof slides === 'object' && 'length' in slides) {
for (let i = 0; i < slides.length; i += 1) {
if (slides[i]) swiper.virtual.slides.push(slides[i]);
}
} else {
swiper.virtual.slides.push(slides);
}
update(true);
}
function prependSlide(slides) {
const activeIndex = swiper.activeIndex;
let newActiveIndex = activeIndex + 1;
let numberOfNewSlides = 1;
if (Array.isArray(slides)) {
for (let i = 0; i < slides.length; i += 1) {
if (slides[i]) swiper.virtual.slides.unshift(slides[i]);
}
newActiveIndex = activeIndex + slides.length;
numberOfNewSlides = slides.length;
} else {
swiper.virtual.slides.unshift(slides);
}
if (swiper.params.virtual.cache) {
const cache = swiper.virtual.cache;
const newCache = {};
Object.keys(cache).forEach((cachedIndex) => {
const cachedEl = cache[cachedIndex];
const cachedElIndex = cachedEl.getAttribute('data-swiper-slide-index');
if (cachedElIndex) {
cachedEl.setAttribute(
'data-swiper-slide-index',
parseInt(cachedElIndex, 10) + numberOfNewSlides,
);
}
newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cachedEl;
});
swiper.virtual.cache = newCache;
}
update(true);
swiper.slideTo(newActiveIndex, 0);
}
function removeSlide(slidesIndexes) {
if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;
let activeIndex = swiper.activeIndex;
if (Array.isArray(slidesIndexes)) {
for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {
swiper.virtual.slides.splice(slidesIndexes[i], 1);
if (swiper.params.virtual.cache) {
delete swiper.virtual.cache[slidesIndexes[i]];
}
if (slidesIndexes[i] < activeIndex) activeIndex -= 1;
activeIndex = Math.max(activeIndex, 0);
}
} else {
swiper.virtual.slides.splice(slidesIndexes, 1);
if (swiper.params.virtual.cache) {
delete swiper.virtual.cache[slidesIndexes];
}
if (slidesIndexes < activeIndex) activeIndex -= 1;
activeIndex = Math.max(activeIndex, 0);
}
update(true);
swiper.slideTo(activeIndex, 0);
}
function removeAllSlides() {
swiper.virtual.slides = [];
if (swiper.params.virtual.cache) {
swiper.virtual.cache = {};
}
update(true);
swiper.slideTo(0, 0);
}
on('beforeInit', () => {
if (!swiper.params.virtual.enabled) return;
let domSlidesAssigned;
if (typeof swiper.passedParams.virtual.slides === 'undefined') {
const slides = [...swiper.slidesEl.children].filter((el) =>
el.matches(`.${swiper.params.slideClass}, swiper-slide`),
);
if (slides && slides.length) {
swiper.virtual.slides = [...slides];
domSlidesAssigned = true;
slides.forEach((slideEl, slideIndex) => {
slideEl.setAttribute('data-swiper-slide-index', slideIndex);
swiper.virtual.cache[slideIndex] = slideEl;
slideEl.remove();
});
}
}
if (!domSlidesAssigned) {
swiper.virtual.slides = swiper.params.virtual.slides;
}
swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);
swiper.params.watchSlidesProgress = true;
swiper.originalParams.watchSlidesProgress = true;
if (!swiper.params.initialSlide) {
update();
}
});
on('setTranslate', () => {
if (!swiper.params.virtual.enabled) return;
if (swiper.params.cssMode && !swiper._immediateVirtual) {
clearTimeout(cssModeTimeout);
cssModeTimeout = setTimeout(() => {
update();
}, 100);
} else {
update();
}
});
on('init update resize', () => {
if (!swiper.params.virtual.enabled) return;
if (swiper.params.cssMode) {
setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);
}
});
Object.assign(swiper.virtual, {
appendSlide,
prependSlide,
removeSlide,
removeAllSlides,
update,
});
}
",
"/* eslint-disable consistent-return */
import { getWindow, getDocument } from 'ssr-window';
import { elementOffset, elementParents } from '../../shared/utils.js';
export default function Keyboard({ swiper, extendParams, on, emit }) {
const document = getDocument();
const window = getWindow();
swiper.keyboard = {
enabled: false,
};
extendParams({
keyboard: {
enabled: false,
onlyInViewport: true,
pageUpDown: true,
},
});
function handle(event) {
if (!swiper.enabled) return;
const { rtlTranslate: rtl } = swiper;
let e = event;
if (e.originalEvent) e = e.originalEvent; // jquery fix
const kc = e.keyCode || e.charCode;
const pageUpDown = swiper.params.keyboard.pageUpDown;
const isPageUp = pageUpDown && kc === 33;
const isPageDown = pageUpDown && kc === 34;
const isArrowLeft = kc === 37;
const isArrowRight = kc === 39;
const isArrowUp = kc === 38;
const isArrowDown = kc === 40;
// Directions locks
if (
!swiper.allowSlideNext &&
((swiper.isHorizontal() && isArrowRight) ||
(swiper.isVertical() && isArrowDown) ||
isPageDown)
) {
return false;
}
if (
!swiper.allowSlidePrev &&
((swiper.isHorizontal() && isArrowLeft) || (swiper.isVertical() && isArrowUp) || isPageUp)
) {
return false;
}
if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
return undefined;
}
if (
document.activeElement &&
document.activeElement.nodeName &&
(document.activeElement.nodeName.toLowerCase() === 'input' ||
document.activeElement.nodeName.toLowerCase() === 'textarea')
) {
return undefined;
}
if (
swiper.params.keyboard.onlyInViewport &&
(isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)
) {
let inView = false;
// Check that swiper should be inside of visible area of window
if (
elementParents(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 &&
elementParents(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0
) {
return undefined;
}
const el = swiper.el;
const swiperWidth = el.clientWidth;
const swiperHeight = el.clientHeight;
const windowWidth = window.innerWidth;
const windowHeight = window.innerHeight;
const swiperOffset = elementOffset(el);
if (rtl) swiperOffset.left -= el.scrollLeft;
const swiperCoord = [
[swiperOffset.left, swiperOffset.top],
[swiperOffset.left + swiperWidth, swiperOffset.top],
[swiperOffset.left, swiperOffset.top + swiperHeight],
[swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight],
];
for (let i = 0; i < swiperCoord.length; i += 1) {
const point = swiperCoord[i];
if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {
if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line
inView = true;
}
}
if (!inView) return undefined;
}
if (swiper.isHorizontal()) {
if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {
if (e.preventDefault) e.preventDefault();
else e.returnValue = false;
}
if (((isPageDown || isArrowRight) && !rtl) || ((isPageUp || isArrowLeft) && rtl))
swiper.slideNext();
if (((isPageUp || isArrowLeft) && !rtl) || ((isPageDown || isArrowRight) && rtl))
swiper.slidePrev();
} else {
if (isPageUp || isPageDown || isArrowUp || isArrowDown) {
if (e.preventDefault) e.preventDefault();
else e.returnValue = false;
}
if (isPageDown || isArrowDown) swiper.slideNext();
if (isPageUp || isArrowUp) swiper.slidePrev();
}
emit('keyPress', kc);
return undefined;
}
function enable() {
if (swiper.keyboard.enabled) return;
document.addEventListener('keydown', handle);
swiper.keyboard.enabled = true;
}
function disable() {
if (!swiper.keyboard.enabled) return;
document.removeEventListener('keydown', handle);
swiper.keyboard.enabled = false;
}
on('init', () => {
if (swiper.params.keyboard.enabled) {
enable();
}
});
on('destroy', () => {
if (swiper.keyboard.enabled) {
disable();
}
});
Object.assign(swiper.keyboard, {
enable,
disable,
});
}
",
"/* eslint-disable consistent-return */
import { getWindow } from 'ssr-window';
import { now, nextTick } from '../../shared/utils.js';
export default function Mousewheel({ swiper, extendParams, on, emit }) {
const window = getWindow();
extendParams({
mousewheel: {
enabled: false,
releaseOnEdges: false,
invert: false,
forceToAxis: false,
sensitivity: 1,
eventsTarget: 'container',
thresholdDelta: null,
thresholdTime: null,
},
});
swiper.mousewheel = {
enabled: false,
};
let timeout;
let lastScrollTime = now();
let lastEventBeforeSnap;
const recentWheelEvents = [];
function normalize(e) {
// Reasonable defaults
const PIXEL_STEP = 10;
const LINE_HEIGHT = 40;
const PAGE_HEIGHT = 800;
let sX = 0;
let sY = 0; // spinX, spinY
let pX = 0;
let pY = 0; // pixelX, pixelY
// Legacy
if ('detail' in e) {
sY = e.detail;
}
if ('wheelDelta' in e) {
sY = -e.wheelDelta / 120;
}
if ('wheelDeltaY' in e) {
sY = -e.wheelDeltaY / 120;
}
if ('wheelDeltaX' in e) {
sX = -e.wheelDeltaX / 120;
}
// side scrolling on FF with DOMMouseScroll
if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {
sX = sY;
sY = 0;
}
pX = sX * PIXEL_STEP;
pY = sY * PIXEL_STEP;
if ('deltaY' in e) {
pY = e.deltaY;
}
if ('deltaX' in e) {
pX = e.deltaX;
}
if (e.shiftKey && !pX) {
// if user scrolls with shift he wants horizontal scroll
pX = pY;
pY = 0;
}
if ((pX || pY) && e.deltaMode) {
if (e.deltaMode === 1) {
// delta in LINE units
pX *= LINE_HEIGHT;
pY *= LINE_HEIGHT;
} else {
// delta in PAGE units
pX *= PAGE_HEIGHT;
pY *= PAGE_HEIGHT;
}
}
// Fall-back if spin cannot be determined
if (pX && !sX) {
sX = pX < 1 ? -1 : 1;
}
if (pY && !sY) {
sY = pY < 1 ? -1 : 1;
}
return {
spinX: sX,
spinY: sY,
pixelX: pX,
pixelY: pY,
};
}
function handleMouseEnter() {
if (!swiper.enabled) return;
swiper.mouseEntered = true;
}
function handleMouseLeave() {
if (!swiper.enabled) return;
swiper.mouseEntered = false;
}
function animateSlider(newEvent) {
if (
swiper.params.mousewheel.thresholdDelta &&
newEvent.delta < swiper.params.mousewheel.thresholdDelta
) {
// Prevent if delta of wheel scroll delta is below configured threshold
return false;
}
if (
swiper.params.mousewheel.thresholdTime &&
now() - lastScrollTime < swiper.params.mousewheel.thresholdTime
) {
// Prevent if time between scrolls is below configured threshold
return false;
}
// If the movement is NOT big enough and
// if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):
// Don't go any further (avoid insignificant scroll movement).
if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {
// Return false as a default
return true;
}
// If user is scrolling towards the end:
// If the slider hasn't hit the latest slide or
// if the slider is a loop and
// if the slider isn't moving right now:
// Go to next slide and
// emit a scroll event.
// Else (the user is scrolling towards the beginning) and
// if the slider hasn't hit the first slide or
// if the slider is a loop and
// if the slider isn't moving right now:
// Go to prev slide and
// emit a scroll event.
if (newEvent.direction < 0) {
if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {
swiper.slideNext();
emit('scroll', newEvent.raw);
}
} else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {
swiper.slidePrev();
emit('scroll', newEvent.raw);
}
// If you got here is because an animation has been triggered so store the current time
lastScrollTime = new window.Date().getTime();
// Return false as a default
return false;
}
function releaseScroll(newEvent) {
const params = swiper.params.mousewheel;
if (newEvent.direction < 0) {
if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {
// Return true to animate scroll on edges
return true;
}
} else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {
// Return true to animate scroll on edges
return true;
}
return false;
}
function handle(event) {
let e = event;
let disableParentSwiper = true;
if (!swiper.enabled) return;
const params = swiper.params.mousewheel;
if (swiper.params.cssMode) {
e.preventDefault();
}
let targetEl = swiper.el;
if (swiper.params.mousewheel.eventsTarget !== 'container') {
targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);
}
const targetElContainsTarget = targetEl && targetEl.contains(e.target);
if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true;
if (e.originalEvent) e = e.originalEvent; // jquery fix
let delta = 0;
const rtlFactor = swiper.rtlTranslate ? -1 : 1;
const data = normalize(e);
if (params.forceToAxis) {
if (swiper.isHorizontal()) {
if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;
else return true;
} else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;
else return true;
} else {
delta =
Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;
}
if (delta === 0) return true;
if (params.invert) delta = -delta;
// Get the scroll positions
let positions = swiper.getTranslate() + delta * params.sensitivity;
if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();
if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();
// When loop is true:
// the disableParentSwiper will be true.
// When loop is false:
// if the scroll positions is not on edge,
// then the disableParentSwiper will be true.
// if the scroll on edge positions,
// then the disableParentSwiper will be false.
disableParentSwiper = swiper.params.loop
? true
: !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());
if (disableParentSwiper && swiper.params.nested) e.stopPropagation();
if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {
// Register the new event in a variable which stores the relevant data
const newEvent = {
time: now(),
delta: Math.abs(delta),
direction: Math.sign(delta),
raw: event,
};
// Keep the most recent events
if (recentWheelEvents.length >= 2) {
recentWheelEvents.shift(); // only store the last N events
}
const prevEvent = recentWheelEvents.length
? recentWheelEvents[recentWheelEvents.length - 1]
: undefined;
recentWheelEvents.push(newEvent);
// If there is at least one previous recorded event:
// If direction has changed or
// if the scroll is quicker than the previous one:
// Animate the slider.
// Else (this is the first time the wheel is moved):
// Animate the slider.
if (prevEvent) {
if (
newEvent.direction !== prevEvent.direction ||
newEvent.delta > prevEvent.delta ||
newEvent.time > prevEvent.time + 150
) {
animateSlider(newEvent);
}
} else {
animateSlider(newEvent);
}
// If it's time to release the scroll:
// Return now so you don't hit the preventDefault.
if (releaseScroll(newEvent)) {
return true;
}
} else {
// Freemode or scrollContainer:
// If we recently snapped after a momentum scroll, then ignore wheel events
// to give time for the deceleration to finish. Stop ignoring after 500 msecs
// or if it's a new scroll (larger delta or inverse sign as last event before
// an end-of-momentum snap).
const newEvent = {
time: now(),
delta: Math.abs(delta),
direction: Math.sign(delta),
};
const ignoreWheelEvents =
lastEventBeforeSnap &&
newEvent.time < lastEventBeforeSnap.time + 500 &&
newEvent.delta <= lastEventBeforeSnap.delta &&
newEvent.direction === lastEventBeforeSnap.direction;
if (!ignoreWheelEvents) {
lastEventBeforeSnap = undefined;
let position = swiper.getTranslate() + delta * params.sensitivity;
const wasBeginning = swiper.isBeginning;
const wasEnd = swiper.isEnd;
if (position >= swiper.minTranslate()) position = swiper.minTranslate();
if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();
swiper.setTransition(0);
swiper.setTranslate(position);
swiper.updateProgress();
swiper.updateActiveIndex();
swiper.updateSlidesClasses();
if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {
swiper.updateSlidesClasses();
}
if (swiper.params.loop) {
swiper.loopFix({
direction: newEvent.direction < 0 ? 'next' : 'prev',
byMousewheel: true,
});
}
if (swiper.params.freeMode.sticky) {
// When wheel scrolling starts with sticky (aka snap) enabled, then detect
// the end of a momentum scroll by storing recent (N=15?) wheel events.
// 1. do all N events have decreasing or same (absolute value) delta?
// 2. did all N events arrive in the last M (M=500?) msecs?
// 3. does the earliest event have an (absolute value) delta that's
// at least P (P=1?) larger than the most recent event's delta?
// 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?
// If 1-4 are "yes" then we're near the end of a momentum scroll deceleration.
// Snap immediately and ignore remaining wheel events in this scroll.
// See comment above for "remaining wheel events in this scroll" determination.
// If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.
clearTimeout(timeout);
timeout = undefined;
if (recentWheelEvents.length >= 15) {
recentWheelEvents.shift(); // only store the last N events
}
const prevEvent = recentWheelEvents.length
? recentWheelEvents[recentWheelEvents.length - 1]
: undefined;
const firstEvent = recentWheelEvents[0];
recentWheelEvents.push(newEvent);
if (
prevEvent &&
(newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)
) {
// Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.
recentWheelEvents.splice(0);
} else if (
recentWheelEvents.length >= 15 &&
newEvent.time - firstEvent.time < 500 &&
firstEvent.delta - newEvent.delta >= 1 &&
newEvent.delta <= 6
) {
// We're at the end of the deceleration of a momentum scroll, so there's no need
// to wait for more events. Snap ASAP on the next tick.
// Also, because there's some remaining momentum we'll bias the snap in the
// direction of the ongoing scroll because it's better UX for the scroll to snap
// in the same direction as the scroll instead of reversing to snap. Therefore,
// if it's already scrolled more than 20% in the current direction, keep going.
const snapToThreshold = delta > 0 ? 0.8 : 0.2;
lastEventBeforeSnap = newEvent;
recentWheelEvents.splice(0);
timeout = nextTick(() => {
swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
}, 0); // no delay; move on next tick
}
if (!timeout) {
// if we get here, then we haven't detected the end of a momentum scroll, so
// we'll consider a scroll "complete" when there haven't been any wheel events
// for 500ms.
timeout = nextTick(() => {
const snapToThreshold = 0.5;
lastEventBeforeSnap = newEvent;
recentWheelEvents.splice(0);
swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
}, 500);
}
}
// Emit event
if (!ignoreWheelEvents) emit('scroll', e);
// Stop autoplay
if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction)
swiper.autoplay.stop();
// Return page scroll on edge positions
if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;
}
}
if (e.preventDefault) e.preventDefault();
else e.returnValue = false;
return false;
}
function events(method) {
let targetEl = swiper.el;
if (swiper.params.mousewheel.eventsTarget !== 'container') {
targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);
}
targetEl[method]('mouseenter', handleMouseEnter);
targetEl[method]('mouseleave', handleMouseLeave);
targetEl[method]('wheel', handle);
}
function enable() {
if (swiper.params.cssMode) {
swiper.wrapperEl.removeEventListener('wheel', handle);
return true;
}
if (swiper.mousewheel.enabled) return false;
events('addEventListener');
swiper.mousewheel.enabled = true;
return true;
}
function disable() {
if (swiper.params.cssMode) {
swiper.wrapperEl.addEventListener(event, handle);
return true;
}
if (!swiper.mousewheel.enabled) return false;
events('removeEventListener');
swiper.mousewheel.enabled = false;
return true;
}
on('init', () => {
if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {
disable();
}
if (swiper.params.mousewheel.enabled) enable();
});
on('destroy', () => {
if (swiper.params.cssMode) {
enable();
}
if (swiper.mousewheel.enabled) disable();
});
Object.assign(swiper.mousewheel, {
enable,
disable,
});
}
",
"import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';
export default function Navigation({ swiper, extendParams, on, emit }) {
extendParams({
navigation: {
nextEl: null,
prevEl: null,
hideOnClick: false,
disabledClass: 'swiper-button-disabled',
hiddenClass: 'swiper-button-hidden',
lockClass: 'swiper-button-lock',
navigationDisabledClass: 'swiper-navigation-disabled',
},
});
swiper.navigation = {
nextEl: null,
prevEl: null,
};
const makeElementsArray = (el) => {
if (!Array.isArray(el)) el = [el].filter((e) => !!e);
return el;
};
function getEl(el) {
let res;
if (el && typeof el === 'string' && swiper.isElement) {
res = swiper.el.shadowRoot.querySelector(el);
if (res) return res;
}
if (el) {
if (typeof el === 'string') res = [...document.querySelectorAll(el)];
if (
swiper.params.uniqueNavElements &&
typeof el === 'string' &&
res.length > 1 &&
swiper.el.querySelectorAll(el).length === 1
) {
res = swiper.el.querySelector(el);
}
}
if (el && !res) return el;
// if (Array.isArray(res) && res.length === 1) res = res[0];
return res;
}
function toggleEl(el, disabled) {
const params = swiper.params.navigation;
el = makeElementsArray(el);
el.forEach((subEl) => {
if (subEl) {
subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));
if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;
if (swiper.params.watchOverflow && swiper.enabled) {
subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);
}
}
});
}
function update() {
// Update Navigation Buttons
const { nextEl, prevEl } = swiper.navigation;
if (swiper.params.loop) {
toggleEl(prevEl, false);
toggleEl(nextEl, false);
return;
}
toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);
toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);
}
function onPrevClick(e) {
e.preventDefault();
if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;
swiper.slidePrev();
emit('navigationPrev');
}
function onNextClick(e) {
e.preventDefault();
if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;
swiper.slideNext();
emit('navigationNext');
}
function init() {
const params = swiper.params.navigation;
swiper.params.navigation = createElementIfNotDefined(
swiper,
swiper.originalParams.navigation,
swiper.params.navigation,
{
nextEl: 'swiper-button-next',
prevEl: 'swiper-button-prev',
},
);
if (!(params.nextEl || params.prevEl)) return;
let nextEl = getEl(params.nextEl);
let prevEl = getEl(params.prevEl);
Object.assign(swiper.navigation, {
nextEl,
prevEl,
});
nextEl = makeElementsArray(nextEl);
prevEl = makeElementsArray(prevEl);
const initButton = (el, dir) => {
if (el) {
el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);
}
if (!swiper.enabled && el) {
el.classList.add(...params.lockClass.split(' '));
}
};
nextEl.forEach((el) => initButton(el, 'next'));
prevEl.forEach((el) => initButton(el, 'prev'));
}
function destroy() {
let { nextEl, prevEl } = swiper.navigation;
nextEl = makeElementsArray(nextEl);
prevEl = makeElementsArray(prevEl);
const destroyButton = (el, dir) => {
el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);
el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));
};
nextEl.forEach((el) => destroyButton(el, 'next'));
prevEl.forEach((el) => destroyButton(el, 'prev'));
}
on('init', () => {
if (swiper.params.navigation.enabled === false) {
// eslint-disable-next-line
disable();
} else {
init();
update();
}
});
on('toEdge fromEdge lock unlock', () => {
update();
});
on('destroy', () => {
destroy();
});
on('enable disable', () => {
let { nextEl, prevEl } = swiper.navigation;
nextEl = makeElementsArray(nextEl);
prevEl = makeElementsArray(prevEl);
[...nextEl, ...prevEl]
.filter((el) => !!el)
.forEach((el) =>
el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.navigation.lockClass),
);
});
on('click', (_s, e) => {
let { nextEl, prevEl } = swiper.navigation;
nextEl = makeElementsArray(nextEl);
prevEl = makeElementsArray(prevEl);
const targetEl = e.target;
if (
swiper.params.navigation.hideOnClick &&
!prevEl.includes(targetEl) &&
!nextEl.includes(targetEl)
) {
if (
swiper.pagination &&
swiper.params.pagination &&
swiper.params.pagination.clickable &&
(swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))
)
return;
let isHidden;
if (nextEl.length) {
isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);
} else if (prevEl.length) {
isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);
}
if (isHidden === true) {
emit('navigationShow');
} else {
emit('navigationHide');
}
[...nextEl, ...prevEl]
.filter((el) => !!el)
.forEach((el) => el.classList.toggle(swiper.params.navigation.hiddenClass));
}
});
const enable = () => {
swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));
init();
update();
};
const disable = () => {
swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));
destroy();
};
Object.assign(swiper.navigation, {
enable,
disable,
update,
init,
destroy,
});
}
",
"import classesToSelector from '../../shared/classes-to-selector.js';
import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';
import { elementIndex, elementOuterSize, elementParents } from '../../shared/utils.js';
export default function Pagination({ swiper, extendParams, on, emit }) {
const pfx = 'swiper-pagination';
extendParams({
pagination: {
el: null,
bulletElement: 'span',
clickable: false,
hideOnClick: false,
renderBullet: null,
renderProgressbar: null,
renderFraction: null,
renderCustom: null,
progressbarOpposite: false,
type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'
dynamicBullets: false,
dynamicMainBullets: 1,
formatFractionCurrent: (number) => number,
formatFractionTotal: (number) => number,
bulletClass: `${pfx}-bullet`,
bulletActiveClass: `${pfx}-bullet-active`,
modifierClass: `${pfx}-`,
currentClass: `${pfx}-current`,
totalClass: `${pfx}-total`,
hiddenClass: `${pfx}-hidden`,
progressbarFillClass: `${pfx}-progressbar-fill`,
progressbarOppositeClass: `${pfx}-progressbar-opposite`,
clickableClass: `${pfx}-clickable`,
lockClass: `${pfx}-lock`,
horizontalClass: `${pfx}-horizontal`,
verticalClass: `${pfx}-vertical`,
paginationDisabledClass: `${pfx}-disabled`,
},
});
swiper.pagination = {
el: null,
bullets: [],
};
let bulletSize;
let dynamicBulletIndex = 0;
const makeElementsArray = (el) => {
if (!Array.isArray(el)) el = [el].filter((e) => !!e);
return el;
};
function isPaginationDisabled() {
return (
!swiper.params.pagination.el ||
!swiper.pagination.el ||
(Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0)
);
}
function setSideBullets(bulletEl, position) {
const { bulletActiveClass } = swiper.params.pagination;
if (!bulletEl) return;
bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];
if (bulletEl) {
bulletEl.classList.add(`${bulletActiveClass}-${position}`);
bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];
if (bulletEl) {
bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);
}
}
}
function onBulletClick(e) {
const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));
if (!bulletEl) {
return;
}
e.preventDefault();
const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;
if (swiper.params.loop) {
if (swiper.realIndex === index) return;
const newSlideIndex = swiper.getSlideIndexByData(index);
const currentSlideIndex = swiper.getSlideIndexByData(swiper.realIndex);
if (newSlideIndex > swiper.slides.length - swiper.loopedSlides) {
swiper.loopFix({
direction: newSlideIndex > currentSlideIndex ? 'next' : 'prev',
activeSlideIndex: newSlideIndex,
slideTo: false,
});
}
swiper.slideToLoop(index);
} else {
swiper.slideTo(index);
}
}
function update() {
// Render || Update Pagination bullets/items
const rtl = swiper.rtl;
const params = swiper.params.pagination;
if (isPaginationDisabled()) return;
let el = swiper.pagination.el;
el = makeElementsArray(el);
// Current/Total
let current;
let previousIndex;
const slidesLength =
swiper.virtual && swiper.params.virtual.enabled
? swiper.virtual.slides.length
: swiper.slides.length;
const total = swiper.params.loop
? Math.ceil(slidesLength / swiper.params.slidesPerGroup)
: swiper.snapGrid.length;
if (swiper.params.loop) {
previousIndex = swiper.previousRealIndex || 0;
current =
swiper.params.slidesPerGroup > 1
? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup)
: swiper.realIndex;
} else if (typeof swiper.snapIndex !== 'undefined') {
current = swiper.snapIndex;
previousIndex = swiper.previousSnapIndex;
} else {
previousIndex = swiper.previousIndex || 0;
current = swiper.activeIndex || 0;
}
// Types
if (
params.type === 'bullets' &&
swiper.pagination.bullets &&
swiper.pagination.bullets.length > 0
) {
const bullets = swiper.pagination.bullets;
let firstIndex;
let lastIndex;
let midIndex;
if (params.dynamicBullets) {
bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);
el.forEach((subEl) => {
subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${
bulletSize * (params.dynamicMainBullets + 4)
}px`;
});
if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {
dynamicBulletIndex += current - (previousIndex || 0);
if (dynamicBulletIndex > params.dynamicMainBullets - 1) {
dynamicBulletIndex = params.dynamicMainBullets - 1;
} else if (dynamicBulletIndex < 0) {
dynamicBulletIndex = 0;
}
}
firstIndex = Math.max(current - dynamicBulletIndex, 0);
lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);
midIndex = (lastIndex + firstIndex) / 2;
}
bullets.forEach((bulletEl) => {
const classesToRemove = [
...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(
(suffix) => `${params.bulletActiveClass}${suffix}`,
),
]
.map((s) => (typeof s === 'string' && s.includes(' ') ? s.split(' ') : s))
.flat();
bulletEl.classList.remove(...classesToRemove);
});
if (el.length > 1) {
bullets.forEach((bullet) => {
const bulletIndex = elementIndex(bullet);
if (bulletIndex === current) {
bullet.classList.add(...params.bulletActiveClass.split(' '));
}
if (params.dynamicBullets) {
if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {
bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));
}
if (bulletIndex === firstIndex) {
setSideBullets(bullet, 'prev');
}
if (bulletIndex === lastIndex) {
setSideBullets(bullet, 'next');
}
}
});
} else {
const bullet = bullets[current];
if (bullet) {
bullet.classList.add(...params.bulletActiveClass.split(' '));
}
if (params.dynamicBullets) {
const firstDisplayedBullet = bullets[firstIndex];
const lastDisplayedBullet = bullets[lastIndex];
for (let i = firstIndex; i <= lastIndex; i += 1) {
if (bullets[i]) {
bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));
}
}
setSideBullets(firstDisplayedBullet, 'prev');
setSideBullets(lastDisplayedBullet, 'next');
}
}
if (params.dynamicBullets) {
const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);
const bulletsOffset =
(bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;
const offsetProp = rtl ? 'right' : 'left';
bullets.forEach((bullet) => {
bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;
});
}
}
el.forEach((subEl, subElIndex) => {
if (params.type === 'fraction') {
subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach((fractionEl) => {
fractionEl.textContent = params.formatFractionCurrent(current + 1);
});
subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach((totalEl) => {
totalEl.textContent = params.formatFractionTotal(total);
});
}
if (params.type === 'progressbar') {
let progressbarDirection;
if (params.progressbarOpposite) {
progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';
} else {
progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';
}
const scale = (current + 1) / total;
let scaleX = 1;
let scaleY = 1;
if (progressbarDirection === 'horizontal') {
scaleX = scale;
} else {
scaleY = scale;
}
subEl
.querySelectorAll(classesToSelector(params.progressbarFillClass))
.forEach((progressEl) => {
progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;
progressEl.style.transitionDuration = `${swiper.params.speed}ms`;
});
}
if (params.type === 'custom' && params.renderCustom) {
subEl.innerHTML = params.renderCustom(swiper, current + 1, total);
if (subElIndex === 0) emit('paginationRender', subEl);
} else {
if (subElIndex === 0) emit('paginationRender', subEl);
emit('paginationUpdate', subEl);
}
if (swiper.params.watchOverflow && swiper.enabled) {
subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);
}
});
}
function render() {
// Render Container
const params = swiper.params.pagination;
if (isPaginationDisabled()) return;
const slidesLength =
swiper.virtual && swiper.params.virtual.enabled
? swiper.virtual.slides.length
: swiper.slides.length;
let el = swiper.pagination.el;
el = makeElementsArray(el);
let paginationHTML = '';
if (params.type === 'bullets') {
let numberOfBullets = swiper.params.loop
? Math.ceil(slidesLength / swiper.params.slidesPerGroup)
: swiper.snapGrid.length;
if (
swiper.params.freeMode &&
swiper.params.freeMode.enabled &&
numberOfBullets > slidesLength
) {
numberOfBullets = slidesLength;
}
for (let i = 0; i < numberOfBullets; i += 1) {
if (params.renderBullet) {
paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);
} else {
paginationHTML += `<${params.bulletElement} class="${params.bulletClass}">${params.bulletElement}>`;
}
}
}
if (params.type === 'fraction') {
if (params.renderFraction) {
paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);
} else {
paginationHTML =
`` +
' / ' +
``;
}
}
if (params.type === 'progressbar') {
if (params.renderProgressbar) {
paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);
} else {
paginationHTML = ``;
}
}
swiper.pagination.bullets = [];
el.forEach((subEl) => {
if (params.type !== 'custom') {
subEl.innerHTML = paginationHTML || '';
}
if (params.type === 'bullets') {
swiper.pagination.bullets.push(
...subEl.querySelectorAll(classesToSelector(params.bulletClass)),
);
}
});
if (params.type !== 'custom') {
emit('paginationRender', el[0]);
}
}
function init() {
swiper.params.pagination = createElementIfNotDefined(
swiper,
swiper.originalParams.pagination,
swiper.params.pagination,
{ el: 'swiper-pagination' },
);
const params = swiper.params.pagination;
if (!params.el) return;
let el;
if (typeof params.el === 'string' && swiper.isElement) {
el = swiper.el.shadowRoot.querySelector(params.el);
}
if (!el && typeof params.el === 'string') {
el = [...document.querySelectorAll(params.el)];
}
if (!el) {
el = params.el;
}
if (!el || el.length === 0) return;
if (
swiper.params.uniqueNavElements &&
typeof params.el === 'string' &&
Array.isArray(el) &&
el.length > 1
) {
el = [...swiper.el.querySelectorAll(params.el)];
// check if it belongs to another nested Swiper
if (el.length > 1) {
el = el.filter((subEl) => {
if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;
return true;
})[0];
}
}
if (Array.isArray(el) && el.length === 1) el = el[0];
Object.assign(swiper.pagination, {
el,
});
el = makeElementsArray(el);
el.forEach((subEl) => {
if (params.type === 'bullets' && params.clickable) {
subEl.classList.add(params.clickableClass);
}
subEl.classList.add(params.modifierClass + params.type);
subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
if (params.type === 'bullets' && params.dynamicBullets) {
subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);
dynamicBulletIndex = 0;
if (params.dynamicMainBullets < 1) {
params.dynamicMainBullets = 1;
}
}
if (params.type === 'progressbar' && params.progressbarOpposite) {
subEl.classList.add(params.progressbarOppositeClass);
}
if (params.clickable) {
subEl.addEventListener('click', onBulletClick);
}
if (!swiper.enabled) {
subEl.classList.add(params.lockClass);
}
});
}
function destroy() {
const params = swiper.params.pagination;
if (isPaginationDisabled()) return;
let el = swiper.pagination.el;
if (el) {
el = makeElementsArray(el);
el.forEach((subEl) => {
subEl.classList.remove(params.hiddenClass);
subEl.classList.remove(params.modifierClass + params.type);
subEl.classList.remove(
swiper.isHorizontal() ? params.horizontalClass : params.verticalClass,
);
if (params.clickable) {
subEl.removeEventListener('click', onBulletClick);
}
});
}
if (swiper.pagination.bullets)
swiper.pagination.bullets.forEach((subEl) =>
subEl.classList.remove(...params.bulletActiveClass.split(' ')),
);
}
on('changeDirection', () => {
if (!swiper.pagination || !swiper.pagination.el) return;
const params = swiper.params.pagination;
let { el } = swiper.pagination;
el = makeElementsArray(el);
el.forEach((subEl) => {
subEl.classList.remove(params.horizontalClass, params.verticalClass);
subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
});
});
on('init', () => {
if (swiper.params.pagination.enabled === false) {
// eslint-disable-next-line
disable();
} else {
init();
render();
update();
}
});
on('activeIndexChange', () => {
if (typeof swiper.snapIndex === 'undefined') {
update();
}
});
on('snapIndexChange', () => {
update();
});
on('snapGridLengthChange', () => {
render();
update();
});
on('destroy', () => {
destroy();
});
on('enable disable', () => {
let { el } = swiper.pagination;
if (el) {
el = makeElementsArray(el);
el.forEach((subEl) =>
subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass),
);
}
});
on('lock unlock', () => {
update();
});
on('click', (_s, e) => {
const targetEl = e.target;
let { el } = swiper.pagination;
if (!Array.isArray(el)) el = [el].filter((element) => !!element);
if (
swiper.params.pagination.el &&
swiper.params.pagination.hideOnClick &&
el &&
el.length > 0 &&
!targetEl.classList.contains(swiper.params.pagination.bulletClass)
) {
if (
swiper.navigation &&
((swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl) ||
(swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl))
)
return;
const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);
if (isHidden === true) {
emit('paginationShow');
} else {
emit('paginationHide');
}
el.forEach((subEl) => subEl.classList.toggle(swiper.params.pagination.hiddenClass));
}
});
const enable = () => {
swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);
let { el } = swiper.pagination;
if (el) {
el = makeElementsArray(el);
el.forEach((subEl) =>
subEl.classList.remove(swiper.params.pagination.paginationDisabledClass),
);
}
init();
render();
update();
};
const disable = () => {
swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);
let { el } = swiper.pagination;
if (el) {
el = makeElementsArray(el);
el.forEach((subEl) => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));
}
destroy();
};
Object.assign(swiper.pagination, {
enable,
disable,
render,
update,
init,
destroy,
});
}
",
"import { getDocument } from 'ssr-window';
import { createElement, elementOffset, nextTick } from '../../shared/utils.js';
import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';
export default function Scrollbar({ swiper, extendParams, on, emit }) {
const document = getDocument();
let isTouched = false;
let timeout = null;
let dragTimeout = null;
let dragStartPos;
let dragSize;
let trackSize;
let divider;
extendParams({
scrollbar: {
el: null,
dragSize: 'auto',
hide: false,
draggable: false,
snapOnRelease: true,
lockClass: 'swiper-scrollbar-lock',
dragClass: 'swiper-scrollbar-drag',
scrollbarDisabledClass: 'swiper-scrollbar-disabled',
horizontalClass: `swiper-scrollbar-horizontal`,
verticalClass: `swiper-scrollbar-vertical`,
},
});
swiper.scrollbar = {
el: null,
dragEl: null,
};
function setTranslate() {
if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
const { scrollbar, rtlTranslate: rtl } = swiper;
const { dragEl, el } = scrollbar;
const params = swiper.params.scrollbar;
const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress;
let newSize = dragSize;
let newPos = (trackSize - dragSize) * progress;
if (rtl) {
newPos = -newPos;
if (newPos > 0) {
newSize = dragSize - newPos;
newPos = 0;
} else if (-newPos + dragSize > trackSize) {
newSize = trackSize + newPos;
}
} else if (newPos < 0) {
newSize = dragSize + newPos;
newPos = 0;
} else if (newPos + dragSize > trackSize) {
newSize = trackSize - newPos;
}
if (swiper.isHorizontal()) {
dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`;
dragEl.style.width = `${newSize}px`;
} else {
dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`;
dragEl.style.height = `${newSize}px`;
}
if (params.hide) {
clearTimeout(timeout);
el.style.opacity = 1;
timeout = setTimeout(() => {
el.style.opacity = 0;
el.style.transitionDuration = '400ms';
}, 1000);
}
}
function setTransition(duration) {
if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`;
}
function updateSize() {
if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
const { scrollbar } = swiper;
const { dragEl, el } = scrollbar;
dragEl.style.width = '';
dragEl.style.height = '';
trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight;
divider =
swiper.size /
(swiper.virtualSize +
swiper.params.slidesOffsetBefore -
(swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));
if (swiper.params.scrollbar.dragSize === 'auto') {
dragSize = trackSize * divider;
} else {
dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);
}
if (swiper.isHorizontal()) {
dragEl.style.width = `${dragSize}px`;
} else {
dragEl.style.height = `${dragSize}px`;
}
if (divider >= 1) {
el.style.display = 'none';
} else {
el.style.display = '';
}
if (swiper.params.scrollbar.hide) {
el.style.opacity = 0;
}
if (swiper.params.watchOverflow && swiper.enabled) {
scrollbar.el.classList[swiper.isLocked ? 'add' : 'remove'](swiper.params.scrollbar.lockClass);
}
}
function getPointerPosition(e) {
return swiper.isHorizontal() ? e.clientX : e.clientY;
}
function setDragPosition(e) {
const { scrollbar, rtlTranslate: rtl } = swiper;
const { el } = scrollbar;
let positionRatio;
positionRatio =
(getPointerPosition(e) -
elementOffset(el)[swiper.isHorizontal() ? 'left' : 'top'] -
(dragStartPos !== null ? dragStartPos : dragSize / 2)) /
(trackSize - dragSize);
positionRatio = Math.max(Math.min(positionRatio, 1), 0);
if (rtl) {
positionRatio = 1 - positionRatio;
}
const position =
swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;
swiper.updateProgress(position);
swiper.setTranslate(position);
swiper.updateActiveIndex();
swiper.updateSlidesClasses();
}
function onDragStart(e) {
const params = swiper.params.scrollbar;
const { scrollbar, wrapperEl } = swiper;
const { el, dragEl } = scrollbar;
isTouched = true;
dragStartPos =
e.target === dragEl
? getPointerPosition(e) -
e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top']
: null;
e.preventDefault();
e.stopPropagation();
wrapperEl.style.transitionDuration = '100ms';
dragEl.style.transitionDuration = '100ms';
setDragPosition(e);
clearTimeout(dragTimeout);
el.style.transitionDuration = '0ms';
if (params.hide) {
el.style.opacity = 1;
}
if (swiper.params.cssMode) {
swiper.wrapperEl.style['scroll-snap-type'] = 'none';
}
emit('scrollbarDragStart', e);
}
function onDragMove(e) {
const { scrollbar, wrapperEl } = swiper;
const { el, dragEl } = scrollbar;
if (!isTouched) return;
if (e.preventDefault) e.preventDefault();
else e.returnValue = false;
setDragPosition(e);
wrapperEl.style.transitionDuration = '0ms';
el.style.transitionDuration = '0ms';
dragEl.style.transitionDuration = '0ms';
emit('scrollbarDragMove', e);
}
function onDragEnd(e) {
const params = swiper.params.scrollbar;
const { scrollbar, wrapperEl } = swiper;
const { el } = scrollbar;
if (!isTouched) return;
isTouched = false;
if (swiper.params.cssMode) {
swiper.wrapperEl.style['scroll-snap-type'] = '';
wrapperEl.style.transitionDuration = '';
}
if (params.hide) {
clearTimeout(dragTimeout);
dragTimeout = nextTick(() => {
el.style.opacity = 0;
el.style.transitionDuration = '400ms';
}, 1000);
}
emit('scrollbarDragEnd', e);
if (params.snapOnRelease) {
swiper.slideToClosest();
}
}
function events(method) {
const { scrollbar, params } = swiper;
const el = scrollbar.el;
if (!el) return;
const target = el;
const activeListener = params.passiveListeners ? { passive: false, capture: false } : false;
const passiveListener = params.passiveListeners ? { passive: true, capture: false } : false;
if (!target) return;
const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';
target[eventMethod]('pointerdown', onDragStart, activeListener);
document[eventMethod]('pointermove', onDragMove, activeListener);
document[eventMethod]('pointerup', onDragEnd, passiveListener);
}
function enableDraggable() {
if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
events('on');
}
function disableDraggable() {
if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
events('off');
}
function init() {
const { scrollbar, el: swiperEl } = swiper;
swiper.params.scrollbar = createElementIfNotDefined(
swiper,
swiper.originalParams.scrollbar,
swiper.params.scrollbar,
{ el: 'swiper-scrollbar' },
);
const params = swiper.params.scrollbar;
if (!params.el) return;
let el;
if (typeof params.el === 'string' && swiper.isElement) {
el = swiper.el.shadowRoot.querySelector(params.el);
}
if (!el && typeof params.el === 'string') {
el = document.querySelectorAll(params.el);
} else if (!el) {
el = params.el;
}
if (
swiper.params.uniqueNavElements &&
typeof params.el === 'string' &&
el.length > 1 &&
swiperEl.querySelectorAll(params.el).length === 1
) {
el = swiperEl.querySelector(params.el);
}
if (el.length > 0) el = el[0];
el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
let dragEl;
if (el) {
dragEl = el.querySelector(`.${swiper.params.scrollbar.dragClass}`);
if (!dragEl) {
dragEl = createElement('div', swiper.params.scrollbar.dragClass);
el.append(dragEl);
}
}
Object.assign(scrollbar, {
el,
dragEl,
});
if (params.draggable) {
enableDraggable();
}
if (el) {
el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.scrollbar.lockClass);
}
}
function destroy() {
const params = swiper.params.scrollbar;
const el = swiper.scrollbar.el;
if (el) {
el.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
}
disableDraggable();
}
on('init', () => {
if (swiper.params.scrollbar.enabled === false) {
// eslint-disable-next-line
disable();
} else {
init();
updateSize();
setTranslate();
}
});
on('update resize observerUpdate lock unlock', () => {
updateSize();
});
on('setTranslate', () => {
setTranslate();
});
on('setTransition', (_s, duration) => {
setTransition(duration);
});
on('enable disable', () => {
const { el } = swiper.scrollbar;
if (el) {
el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.scrollbar.lockClass);
}
});
on('destroy', () => {
destroy();
});
const enable = () => {
swiper.el.classList.remove(swiper.params.scrollbar.scrollbarDisabledClass);
if (swiper.scrollbar.el) {
swiper.scrollbar.el.classList.remove(swiper.params.scrollbar.scrollbarDisabledClass);
}
init();
updateSize();
setTranslate();
};
const disable = () => {
swiper.el.classList.add(swiper.params.scrollbar.scrollbarDisabledClass);
if (swiper.scrollbar.el) {
swiper.scrollbar.el.classList.add(swiper.params.scrollbar.scrollbarDisabledClass);
}
destroy();
};
Object.assign(swiper.scrollbar, {
enable,
disable,
updateSize,
setTranslate,
init,
destroy,
});
}
",
"import { elementChildren } from '../../shared/utils.js';
export default function Parallax({ swiper, extendParams, on }) {
extendParams({
parallax: {
enabled: false,
},
});
const setTransform = (el, progress) => {
const { rtl } = swiper;
const rtlFactor = rtl ? -1 : 1;
const p = el.getAttribute('data-swiper-parallax') || '0';
let x = el.getAttribute('data-swiper-parallax-x');
let y = el.getAttribute('data-swiper-parallax-y');
const scale = el.getAttribute('data-swiper-parallax-scale');
const opacity = el.getAttribute('data-swiper-parallax-opacity');
const rotate = el.getAttribute('data-swiper-parallax-rotate');
if (x || y) {
x = x || '0';
y = y || '0';
} else if (swiper.isHorizontal()) {
x = p;
y = '0';
} else {
y = p;
x = '0';
}
if (x.indexOf('%') >= 0) {
x = `${parseInt(x, 10) * progress * rtlFactor}%`;
} else {
x = `${x * progress * rtlFactor}px`;
}
if (y.indexOf('%') >= 0) {
y = `${parseInt(y, 10) * progress}%`;
} else {
y = `${y * progress}px`;
}
if (typeof opacity !== 'undefined' && opacity !== null) {
const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));
el.style.opacity = currentOpacity;
}
let transform = `translate3d(${x}, ${y}, 0px)`;
if (typeof scale !== 'undefined' && scale !== null) {
const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));
transform += ` scale(${currentScale})`;
}
if (rotate && typeof rotate !== 'undefined' && rotate !== null) {
const currentRotate = rotate * progress * -1;
transform += ` rotate(${currentRotate}deg)`;
}
el.style.transform = transform;
};
const setTranslate = () => {
const { el, slides, progress, snapGrid } = swiper;
elementChildren(
el,
'[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]',
).forEach((subEl) => {
setTransform(subEl, progress);
});
slides.forEach((slideEl, slideIndex) => {
let slideProgress = slideEl.progress;
if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {
slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);
}
slideProgress = Math.min(Math.max(slideProgress, -1), 1);
slideEl
.querySelectorAll(
'[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale], [data-swiper-parallax-rotate]',
)
.forEach((subEl) => {
setTransform(subEl, slideProgress);
});
});
};
const setTransition = (duration = swiper.params.speed) => {
const { el } = swiper;
el.querySelectorAll(
'[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]',
).forEach((parallaxEl) => {
let parallaxDuration =
parseInt(parallaxEl.getAttribute('data-swiper-parallax-duration'), 10) || duration;
if (duration === 0) parallaxDuration = 0;
parallaxEl.style.transitionDuration = `${parallaxDuration}ms`;
});
};
on('beforeInit', () => {
if (!swiper.params.parallax.enabled) return;
swiper.params.watchSlidesProgress = true;
swiper.originalParams.watchSlidesProgress = true;
});
on('init', () => {
if (!swiper.params.parallax.enabled) return;
setTranslate();
});
on('setTranslate', () => {
if (!swiper.params.parallax.enabled) return;
setTranslate();
});
on('setTransition', (_swiper, duration) => {
if (!swiper.params.parallax.enabled) return;
setTransition(duration);
});
}
",
"import { getWindow } from 'ssr-window';
import {
elementChildren,
elementOffset,
elementParents,
getTranslate,
} from '../../shared/utils.js';
export default function Zoom({ swiper, extendParams, on, emit }) {
const window = getWindow();
extendParams({
zoom: {
enabled: false,
maxRatio: 3,
minRatio: 1,
toggle: true,
containerClass: 'swiper-zoom-container',
zoomedSlideClass: 'swiper-slide-zoomed',
},
});
swiper.zoom = {
enabled: false,
};
let currentScale = 1;
let isScaling = false;
let fakeGestureTouched;
let fakeGestureMoved;
const evCache = [];
const gesture = {
originX: 0,
originY: 0,
slideEl: undefined,
slideWidth: undefined,
slideHeight: undefined,
imageEl: undefined,
imageWrapEl: undefined,
maxRatio: 3,
};
const image = {
isTouched: undefined,
isMoved: undefined,
currentX: undefined,
currentY: undefined,
minX: undefined,
minY: undefined,
maxX: undefined,
maxY: undefined,
width: undefined,
height: undefined,
startX: undefined,
startY: undefined,
touchesStart: {},
touchesCurrent: {},
};
const velocity = {
x: undefined,
y: undefined,
prevPositionX: undefined,
prevPositionY: undefined,
prevTime: undefined,
};
let scale = 1;
Object.defineProperty(swiper.zoom, 'scale', {
get() {
return scale;
},
set(value) {
if (scale !== value) {
const imageEl = gesture.imageEl;
const slideEl = gesture.slideEl;
emit('zoomChange', value, imageEl, slideEl);
}
scale = value;
},
});
function getDistanceBetweenTouches() {
if (evCache.length < 2) return 1;
const x1 = evCache[0].pageX;
const y1 = evCache[0].pageY;
const x2 = evCache[1].pageX;
const y2 = evCache[1].pageY;
const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);
return distance;
}
function getScaleOrigin() {
if (evCache.length < 2) return { x: null, y: null };
const box = gesture.imageEl.getBoundingClientRect();
return [
(evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x) / currentScale,
(evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y) / currentScale,
];
}
function getSlideSelector() {
return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;
}
function eventWithinSlide(e) {
const slideSelector = getSlideSelector();
if (e.target.matches(slideSelector)) return true;
if (swiper.slides.filter((slideEl) => slideEl.contains(e.target)).length > 0) return true;
return false;
}
function eventWithinZoomContainer(e) {
const selector = `.${swiper.params.zoom.containerClass}`;
if (e.target.matches(selector)) return true;
if (
[...swiper.el.querySelectorAll(selector)].filter((containerEl) =>
containerEl.contains(e.target),
).length > 0
)
return true;
return false;
}
// Events
function onGestureStart(e) {
if (e.pointerType === 'mouse') {
evCache.splice(0, evCache.length);
}
if (!eventWithinSlide(e)) return;
const params = swiper.params.zoom;
fakeGestureTouched = false;
fakeGestureMoved = false;
evCache.push(e);
if (evCache.length < 2) {
return;
}
fakeGestureTouched = true;
gesture.scaleStart = getDistanceBetweenTouches();
if (!gesture.slideEl) {
gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);
if (!gesture.slideEl) gesture.slideEl = swiper.slides[swiper.activeIndex];
let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);
if (imageEl) {
imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];
}
gesture.imageEl = imageEl;
if (imageEl) {
gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];
} else {
gesture.imageWrapEl = undefined;
}
if (!gesture.imageWrapEl) {
gesture.imageEl = undefined;
return;
}
gesture.maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;
}
if (gesture.imageEl) {
const [originX, originY] = getScaleOrigin();
gesture.originX = originX;
gesture.originY = originY;
gesture.imageEl.style.transitionDuration = '0ms';
}
isScaling = true;
}
function onGestureChange(e) {
if (!eventWithinSlide(e)) return;
const params = swiper.params.zoom;
const zoom = swiper.zoom;
const pointerIndex = evCache.findIndex((cachedEv) => cachedEv.pointerId === e.pointerId);
if (pointerIndex >= 0) evCache[pointerIndex] = e;
if (evCache.length < 2) {
return;
}
fakeGestureMoved = true;
gesture.scaleMove = getDistanceBetweenTouches();
if (!gesture.imageEl) {
return;
}
zoom.scale = (gesture.scaleMove / gesture.scaleStart) * currentScale;
if (zoom.scale > gesture.maxRatio) {
zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;
}
if (zoom.scale < params.minRatio) {
zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;
}
gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;
}
function onGestureEnd(e) {
if (!eventWithinSlide(e)) return;
if (e.pointerType === 'mouse' && e.type === 'pointerout') return;
const params = swiper.params.zoom;
const zoom = swiper.zoom;
const pointerIndex = evCache.findIndex((cachedEv) => cachedEv.pointerId === e.pointerId);
if (pointerIndex >= 0) evCache.splice(pointerIndex, 1);
if (!fakeGestureTouched || !fakeGestureMoved) {
return;
}
fakeGestureTouched = false;
fakeGestureMoved = false;
if (!gesture.imageEl) return;
zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);
gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`;
gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;
currentScale = zoom.scale;
isScaling = false;
if (zoom.scale > 1 && gesture.slideEl) {
gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);
} else if (zoom.scale <= 1 && gesture.slideEl) {
gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);
}
if (zoom.scale === 1) {
gesture.originX = 0;
gesture.originY = 0;
gesture.slideEl = undefined;
}
}
function onTouchStart(e) {
const device = swiper.device;
if (!gesture.imageEl) return;
if (image.isTouched) return;
if (device.android && e.cancelable) e.preventDefault();
image.isTouched = true;
const event = evCache.length > 0 ? evCache[0] : e;
image.touchesStart.x = event.pageX;
image.touchesStart.y = event.pageY;
}
function onTouchMove(e) {
if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return;
const zoom = swiper.zoom;
if (!gesture.imageEl) return;
if (!image.isTouched || !gesture.slideEl) return;
if (!image.isMoved) {
image.width = gesture.imageEl.offsetWidth;
image.height = gesture.imageEl.offsetHeight;
image.startX = getTranslate(gesture.imageWrapEl, 'x') || 0;
image.startY = getTranslate(gesture.imageWrapEl, 'y') || 0;
gesture.slideWidth = gesture.slideEl.offsetWidth;
gesture.slideHeight = gesture.slideEl.offsetHeight;
gesture.imageWrapEl.style.transitionDuration = '0ms';
}
// Define if we need image drag
const scaledWidth = image.width * zoom.scale;
const scaledHeight = image.height * zoom.scale;
if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;
image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);
image.maxX = -image.minX;
image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);
image.maxY = -image.minY;
image.touchesCurrent.x = evCache.length > 0 ? evCache[0].pageX : e.pageX;
image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY;
const touchesDiff = Math.max(
Math.abs(image.touchesCurrent.x - image.touchesStart.x),
Math.abs(image.touchesCurrent.y - image.touchesStart.y),
);
if (touchesDiff > 5) {
swiper.allowClick = false;
}
if (!image.isMoved && !isScaling) {
if (
swiper.isHorizontal() &&
((Math.floor(image.minX) === Math.floor(image.startX) &&
image.touchesCurrent.x < image.touchesStart.x) ||
(Math.floor(image.maxX) === Math.floor(image.startX) &&
image.touchesCurrent.x > image.touchesStart.x))
) {
image.isTouched = false;
return;
}
if (
!swiper.isHorizontal() &&
((Math.floor(image.minY) === Math.floor(image.startY) &&
image.touchesCurrent.y < image.touchesStart.y) ||
(Math.floor(image.maxY) === Math.floor(image.startY) &&
image.touchesCurrent.y > image.touchesStart.y))
) {
image.isTouched = false;
return;
}
}
if (e.cancelable) {
e.preventDefault();
}
e.stopPropagation();
image.isMoved = true;
const scaleRatio =
(zoom.scale - currentScale) / (gesture.maxRatio - swiper.params.zoom.minRatio);
const { originX, originY } = gesture;
image.currentX =
image.touchesCurrent.x -
image.touchesStart.x +
image.startX +
scaleRatio * (image.width - originX * 2);
image.currentY =
image.touchesCurrent.y -
image.touchesStart.y +
image.startY +
scaleRatio * (image.height - originY * 2);
if (image.currentX < image.minX) {
image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;
}
if (image.currentX > image.maxX) {
image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;
}
if (image.currentY < image.minY) {
image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;
}
if (image.currentY > image.maxY) {
image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;
}
// Velocity
if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;
if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;
if (!velocity.prevTime) velocity.prevTime = Date.now();
velocity.x =
(image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;
velocity.y =
(image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;
if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;
if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;
velocity.prevPositionX = image.touchesCurrent.x;
velocity.prevPositionY = image.touchesCurrent.y;
velocity.prevTime = Date.now();
gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;
}
function onTouchEnd() {
const zoom = swiper.zoom;
if (!gesture.imageEl) return;
if (!image.isTouched || !image.isMoved) {
image.isTouched = false;
image.isMoved = false;
return;
}
image.isTouched = false;
image.isMoved = false;
let momentumDurationX = 300;
let momentumDurationY = 300;
const momentumDistanceX = velocity.x * momentumDurationX;
const newPositionX = image.currentX + momentumDistanceX;
const momentumDistanceY = velocity.y * momentumDurationY;
const newPositionY = image.currentY + momentumDistanceY;
// Fix duration
if (velocity.x !== 0)
momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);
if (velocity.y !== 0)
momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);
const momentumDuration = Math.max(momentumDurationX, momentumDurationY);
image.currentX = newPositionX;
image.currentY = newPositionY;
// Define if we need image drag
const scaledWidth = image.width * zoom.scale;
const scaledHeight = image.height * zoom.scale;
image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);
image.maxX = -image.minX;
image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);
image.maxY = -image.minY;
image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);
image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);
gesture.imageWrapEl.style.transitionDuration = `${momentumDuration}ms`;
gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;
}
function onTransitionEnd() {
const zoom = swiper.zoom;
if (gesture.slideEl && swiper.activeIndex !== swiper.slides.indexOf(gesture.slideEl)) {
if (gesture.imageEl) {
gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';
}
if (gesture.imageWrapEl) {
gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';
}
gesture.slideEl.classList.remove(`${swiper.params.zoom.zoomedSlideClass}`);
zoom.scale = 1;
currentScale = 1;
gesture.slideEl = undefined;
gesture.imageEl = undefined;
gesture.imageWrapEl = undefined;
gesture.originX = 0;
gesture.originY = 0;
}
}
function zoomIn(e) {
const zoom = swiper.zoom;
const params = swiper.params.zoom;
if (!gesture.slideEl) {
if (e && e.target) {
gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);
}
if (!gesture.slideEl) {
if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
gesture.slideEl = elementChildren(
swiper.slidesEl,
`.${swiper.params.slideActiveClass}`,
)[0];
} else {
gesture.slideEl = swiper.slides[swiper.activeIndex];
}
}
let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);
if (imageEl) {
imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];
}
gesture.imageEl = imageEl;
if (imageEl) {
gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];
} else {
gesture.imageWrapEl = undefined;
}
}
if (!gesture.imageEl || !gesture.imageWrapEl) return;
if (swiper.params.cssMode) {
swiper.wrapperEl.style.overflow = 'hidden';
swiper.wrapperEl.style.touchAction = 'none';
}
gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);
let touchX;
let touchY;
let offsetX;
let offsetY;
let diffX;
let diffY;
let translateX;
let translateY;
let imageWidth;
let imageHeight;
let scaledWidth;
let scaledHeight;
let translateMinX;
let translateMinY;
let translateMaxX;
let translateMaxY;
let slideWidth;
let slideHeight;
if (typeof image.touchesStart.x === 'undefined' && e) {
touchX = e.pageX;
touchY = e.pageY;
} else {
touchX = image.touchesStart.x;
touchY = image.touchesStart.y;
}
const forceZoomRatio = typeof e === 'number' ? e : null;
if (currentScale === 1 && forceZoomRatio) {
touchX = undefined;
touchY = undefined;
}
zoom.scale =
forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;
currentScale =
forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;
if (e && !(currentScale === 1 && forceZoomRatio)) {
slideWidth = gesture.slideEl.offsetWidth;
slideHeight = gesture.slideEl.offsetHeight;
offsetX = elementOffset(gesture.slideEl).left + window.scrollX;
offsetY = elementOffset(gesture.slideEl).top + window.scrollY;
diffX = offsetX + slideWidth / 2 - touchX;
diffY = offsetY + slideHeight / 2 - touchY;
imageWidth = gesture.imageEl.offsetWidth;
imageHeight = gesture.imageEl.offsetHeight;
scaledWidth = imageWidth * zoom.scale;
scaledHeight = imageHeight * zoom.scale;
translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);
translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);
translateMaxX = -translateMinX;
translateMaxY = -translateMinY;
translateX = diffX * zoom.scale;
translateY = diffY * zoom.scale;
if (translateX < translateMinX) {
translateX = translateMinX;
}
if (translateX > translateMaxX) {
translateX = translateMaxX;
}
if (translateY < translateMinY) {
translateY = translateMinY;
}
if (translateY > translateMaxY) {
translateY = translateMaxY;
}
} else {
translateX = 0;
translateY = 0;
}
if (forceZoomRatio && zoom.scale === 1) {
gesture.originX = 0;
gesture.originY = 0;
}
gesture.imageWrapEl.style.transitionDuration = '300ms';
gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`;
gesture.imageEl.style.transitionDuration = '300ms';
gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;
}
function zoomOut() {
const zoom = swiper.zoom;
const params = swiper.params.zoom;
if (!gesture.slideEl) {
if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];
} else {
gesture.slideEl = swiper.slides[swiper.activeIndex];
}
let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);
if (imageEl) {
imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];
}
gesture.imageEl = imageEl;
if (imageEl) {
gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];
} else {
gesture.imageWrapEl = undefined;
}
}
if (!gesture.imageEl || !gesture.imageWrapEl) return;
if (swiper.params.cssMode) {
swiper.wrapperEl.style.overflow = '';
swiper.wrapperEl.style.touchAction = '';
}
zoom.scale = 1;
currentScale = 1;
gesture.imageWrapEl.style.transitionDuration = '300ms';
gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';
gesture.imageEl.style.transitionDuration = '300ms';
gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';
gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);
gesture.slideEl = undefined;
gesture.originX = 0;
gesture.originY = 0;
}
// Toggle Zoom
function zoomToggle(e) {
const zoom = swiper.zoom;
if (zoom.scale && zoom.scale !== 1) {
// Zoom Out
zoomOut();
} else {
// Zoom In
zoomIn(e);
}
}
function getListeners() {
const passiveListener = swiper.params.passiveListeners
? { passive: true, capture: false }
: false;
const activeListenerWithCapture = swiper.params.passiveListeners
? { passive: false, capture: true }
: true;
return { passiveListener, activeListenerWithCapture };
}
// Attach/Detach Events
function enable() {
const zoom = swiper.zoom;
if (zoom.enabled) return;
zoom.enabled = true;
const { passiveListener, activeListenerWithCapture } = getListeners();
// Scale image
swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener);
swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture);
['pointerup', 'pointercancel', 'pointerout'].forEach((eventName) => {
swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener);
});
// Move image
swiper.wrapperEl.addEventListener('pointermove', onTouchMove, activeListenerWithCapture);
}
function disable() {
const zoom = swiper.zoom;
if (!zoom.enabled) return;
zoom.enabled = false;
const { passiveListener, activeListenerWithCapture } = getListeners();
// Scale image
swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener);
swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture);
['pointerup', 'pointercancel', 'pointerout'].forEach((eventName) => {
swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener);
});
// Move image
swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture);
}
on('init', () => {
if (swiper.params.zoom.enabled) {
enable();
}
});
on('destroy', () => {
disable();
});
on('touchStart', (_s, e) => {
if (!swiper.zoom.enabled) return;
onTouchStart(e);
});
on('touchEnd', (_s, e) => {
if (!swiper.zoom.enabled) return;
onTouchEnd(e);
});
on('doubleTap', (_s, e) => {
if (
!swiper.animating &&
swiper.params.zoom.enabled &&
swiper.zoom.enabled &&
swiper.params.zoom.toggle
) {
zoomToggle(e);
}
});
on('transitionEnd', () => {
if (swiper.zoom.enabled && swiper.params.zoom.enabled) {
onTransitionEnd();
}
});
on('slideChange', () => {
if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {
onTransitionEnd();
}
});
Object.assign(swiper.zoom, {
enable,
disable,
in: zoomIn,
out: zoomOut,
toggle: zoomToggle,
});
}
",
"/* eslint no-bitwise: ["error", { "allow": [">>"] }] */
import { elementTransitionEnd, nextTick } from '../../shared/utils.js';
export default function Controller({ swiper, extendParams, on }) {
extendParams({
controller: {
control: undefined,
inverse: false,
by: 'slide', // or 'container'
},
});
swiper.controller = {
control: undefined,
};
function LinearSpline(x, y) {
const binarySearch = (function search() {
let maxIndex;
let minIndex;
let guess;
return (array, val) => {
minIndex = -1;
maxIndex = array.length;
while (maxIndex - minIndex > 1) {
guess = (maxIndex + minIndex) >> 1;
if (array[guess] <= val) {
minIndex = guess;
} else {
maxIndex = guess;
}
}
return maxIndex;
};
})();
this.x = x;
this.y = y;
this.lastIndex = x.length - 1;
// Given an x value (x2), return the expected y2 value:
// (x1,y1) is the known point before given value,
// (x3,y3) is the known point after given value.
let i1;
let i3;
this.interpolate = function interpolate(x2) {
if (!x2) return 0;
// Get the indexes of x1 and x3 (the array indexes before and after given x2):
i3 = binarySearch(this.x, x2);
i1 = i3 - 1;
// We have our indexes i1 & i3, so we can calculate already:
// y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1
return (
((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1]
);
};
return this;
}
function getInterpolateFunction(c) {
swiper.controller.spline = swiper.params.loop
? new LinearSpline(swiper.slidesGrid, c.slidesGrid)
: new LinearSpline(swiper.snapGrid, c.snapGrid);
}
function setTranslate(_t, byController) {
const controlled = swiper.controller.control;
let multiplier;
let controlledTranslate;
const Swiper = swiper.constructor;
function setControlledTranslate(c) {
if (c.destroyed) return;
// this will create an Interpolate function based on the snapGrids
// x is the Grid of the scrolled scroller and y will be the controlled scroller
// it makes sense to create this only once and recall it for the interpolation
// the function does a lot of value caching for performance
const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;
if (swiper.params.controller.by === 'slide') {
getInterpolateFunction(c);
// i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid
// but it did not work out
controlledTranslate = -swiper.controller.spline.interpolate(-translate);
}
if (!controlledTranslate || swiper.params.controller.by === 'container') {
multiplier =
(c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());
if (Number.isNaN(multiplier) || !Number.isFinite(multiplier)) {
multiplier = 1;
}
controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();
}
if (swiper.params.controller.inverse) {
controlledTranslate = c.maxTranslate() - controlledTranslate;
}
c.updateProgress(controlledTranslate);
c.setTranslate(controlledTranslate, swiper);
c.updateActiveIndex();
c.updateSlidesClasses();
}
if (Array.isArray(controlled)) {
for (let i = 0; i < controlled.length; i += 1) {
if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
setControlledTranslate(controlled[i]);
}
}
} else if (controlled instanceof Swiper && byController !== controlled) {
setControlledTranslate(controlled);
}
}
function setTransition(duration, byController) {
const Swiper = swiper.constructor;
const controlled = swiper.controller.control;
let i;
function setControlledTransition(c) {
if (c.destroyed) return;
c.setTransition(duration, swiper);
if (duration !== 0) {
c.transitionStart();
if (c.params.autoHeight) {
nextTick(() => {
c.updateAutoHeight();
});
}
elementTransitionEnd(c.wrapperEl, () => {
if (!controlled) return;
c.transitionEnd();
});
}
}
if (Array.isArray(controlled)) {
for (i = 0; i < controlled.length; i += 1) {
if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
setControlledTransition(controlled[i]);
}
}
} else if (controlled instanceof Swiper && byController !== controlled) {
setControlledTransition(controlled);
}
}
function removeSpline() {
if (!swiper.controller.control) return;
if (swiper.controller.spline) {
swiper.controller.spline = undefined;
delete swiper.controller.spline;
}
}
on('beforeInit', () => {
if (
typeof window !== 'undefined' && // eslint-disable-line
(typeof swiper.params.controller.control === 'string' ||
swiper.params.controller.control instanceof HTMLElement)
) {
const controlElement = document.querySelector(swiper.params.controller.control);
if (controlElement && controlElement.swiper) {
swiper.controller.control = controlElement.swiper;
} else if (controlElement) {
const onControllerSwiper = (e) => {
swiper.controller.control = e.detail[0];
swiper.update();
controlElement.removeEventListener('init', onControllerSwiper);
};
controlElement.addEventListener('init', onControllerSwiper);
}
return;
}
swiper.controller.control = swiper.params.controller.control;
});
on('update', () => {
removeSpline();
});
on('resize', () => {
removeSpline();
});
on('observerUpdate', () => {
removeSpline();
});
on('setTranslate', (_s, translate, byController) => {
if (!swiper.controller.control || swiper.controller.control.destroyed) return;
swiper.controller.setTranslate(translate, byController);
});
on('setTransition', (_s, duration, byController) => {
if (!swiper.controller.control || swiper.controller.control.destroyed) return;
swiper.controller.setTransition(duration, byController);
});
Object.assign(swiper.controller, {
setTranslate,
setTransition,
});
}
",
"import classesToSelector from '../../shared/classes-to-selector.js';
import { createElement, elementIndex } from '../../shared/utils.js';
export default function A11y({ swiper, extendParams, on }) {
extendParams({
a11y: {
enabled: true,
notificationClass: 'swiper-notification',
prevSlideMessage: 'Previous slide',
nextSlideMessage: 'Next slide',
firstSlideMessage: 'This is the first slide',
lastSlideMessage: 'This is the last slide',
paginationBulletMessage: 'Go to slide {{index}}',
slideLabelMessage: '{{index}} / {{slidesLength}}',
containerMessage: null,
containerRoleDescriptionMessage: null,
itemRoleDescriptionMessage: null,
slideRole: 'group',
id: null,
},
});
swiper.a11y = {
clicked: false,
};
let liveRegion = null;
function notify(message) {
const notification = liveRegion;
if (notification.length === 0) return;
notification.innerHTML = '';
notification.innerHTML = message;
}
const makeElementsArray = (el) => {
if (!Array.isArray(el)) el = [el].filter((e) => !!e);
return el;
};
function getRandomNumber(size = 16) {
const randomChar = () => Math.round(16 * Math.random()).toString(16);
return 'x'.repeat(size).replace(/x/g, randomChar);
}
function makeElFocusable(el) {
el = makeElementsArray(el);
el.forEach((subEl) => {
subEl.setAttribute('tabIndex', '0');
});
}
function makeElNotFocusable(el) {
el = makeElementsArray(el);
el.forEach((subEl) => {
subEl.setAttribute('tabIndex', '-1');
});
}
function addElRole(el, role) {
el = makeElementsArray(el);
el.forEach((subEl) => {
subEl.setAttribute('role', role);
});
}
function addElRoleDescription(el, description) {
el = makeElementsArray(el);
el.forEach((subEl) => {
subEl.setAttribute('aria-roledescription', description);
});
}
function addElControls(el, controls) {
el = makeElementsArray(el);
el.forEach((subEl) => {
subEl.setAttribute('aria-controls', controls);
});
}
function addElLabel(el, label) {
el = makeElementsArray(el);
el.forEach((subEl) => {
subEl.setAttribute('aria-label', label);
});
}
function addElId(el, id) {
el = makeElementsArray(el);
el.forEach((subEl) => {
subEl.setAttribute('id', id);
});
}
function addElLive(el, live) {
el = makeElementsArray(el);
el.forEach((subEl) => {
subEl.setAttribute('aria-live', live);
});
}
function disableEl(el) {
el = makeElementsArray(el);
el.forEach((subEl) => {
subEl.setAttribute('aria-disabled', true);
});
}
function enableEl(el) {
el = makeElementsArray(el);
el.forEach((subEl) => {
subEl.setAttribute('aria-disabled', false);
});
}
function onEnterOrSpaceKey(e) {
if (e.keyCode !== 13 && e.keyCode !== 32) return;
const params = swiper.params.a11y;
const targetEl = e.target;
if (
swiper.pagination &&
swiper.pagination.el &&
(targetEl === swiper.pagination.el || swiper.pagination.el.contains(e.target))
) {
if (!e.target.matches(classesToSelector(swiper.params.pagination.bulletClass))) return;
}
if (swiper.navigation && swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl) {
if (!(swiper.isEnd && !swiper.params.loop)) {
swiper.slideNext();
}
if (swiper.isEnd) {
notify(params.lastSlideMessage);
} else {
notify(params.nextSlideMessage);
}
}
if (swiper.navigation && swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl) {
if (!(swiper.isBeginning && !swiper.params.loop)) {
swiper.slidePrev();
}
if (swiper.isBeginning) {
notify(params.firstSlideMessage);
} else {
notify(params.prevSlideMessage);
}
}
if (
swiper.pagination &&
targetEl.matches(classesToSelector(swiper.params.pagination.bulletClass))
) {
targetEl.click();
}
}
function updateNavigation() {
if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;
const { nextEl, prevEl } = swiper.navigation;
if (prevEl) {
if (swiper.isBeginning) {
disableEl(prevEl);
makeElNotFocusable(prevEl);
} else {
enableEl(prevEl);
makeElFocusable(prevEl);
}
}
if (nextEl) {
if (swiper.isEnd) {
disableEl(nextEl);
makeElNotFocusable(nextEl);
} else {
enableEl(nextEl);
makeElFocusable(nextEl);
}
}
}
function hasPagination() {
return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;
}
function hasClickablePagination() {
return hasPagination() && swiper.params.pagination.clickable;
}
function updatePagination() {
const params = swiper.params.a11y;
if (!hasPagination()) return;
swiper.pagination.bullets.forEach((bulletEl) => {
if (swiper.params.pagination.clickable) {
makeElFocusable(bulletEl);
if (!swiper.params.pagination.renderBullet) {
addElRole(bulletEl, 'button');
addElLabel(
bulletEl,
params.paginationBulletMessage.replace(/\{\{index\}\}/, elementIndex(bulletEl) + 1),
);
}
}
if (bulletEl.matches(classesToSelector(swiper.params.pagination.bulletActiveClass))) {
bulletEl.setAttribute('aria-current', 'true');
} else {
bulletEl.removeAttribute('aria-current');
}
});
}
const initNavEl = (el, wrapperId, message) => {
makeElFocusable(el);
if (el.tagName !== 'BUTTON') {
addElRole(el, 'button');
el.addEventListener('keydown', onEnterOrSpaceKey);
}
addElLabel(el, message);
addElControls(el, wrapperId);
};
const handlePointerDown = () => {
swiper.a11y.clicked = true;
};
const handlePointerUp = () => {
requestAnimationFrame(() => {
requestAnimationFrame(() => {
if (!swiper.destroyed) {
swiper.a11y.clicked = false;
}
});
});
};
const handleFocus = (e) => {
if (swiper.a11y.clicked) return;
const slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);
if (!slideEl || !swiper.slides.includes(slideEl)) return;
const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;
const isVisible =
swiper.params.watchSlidesProgress &&
swiper.visibleSlides &&
swiper.visibleSlides.includes(slideEl);
if (isActive || isVisible) return;
if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return;
if (swiper.isHorizontal()) {
swiper.el.scrollLeft = 0;
} else {
swiper.el.scrollTop = 0;
}
swiper.slideTo(swiper.slides.indexOf(slideEl), 0);
};
const initSlides = () => {
const params = swiper.params.a11y;
if (params.itemRoleDescriptionMessage) {
addElRoleDescription(swiper.slides, params.itemRoleDescriptionMessage);
}
if (params.slideRole) {
addElRole(swiper.slides, params.slideRole);
}
const slidesLength = swiper.slides.length;
if (params.slideLabelMessage) {
swiper.slides.forEach((slideEl, index) => {
const slideIndex = swiper.params.loop
? parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10)
: index;
const ariaLabelMessage = params.slideLabelMessage
.replace(/\{\{index\}\}/, slideIndex + 1)
.replace(/\{\{slidesLength\}\}/, slidesLength);
addElLabel(slideEl, ariaLabelMessage);
});
}
};
const init = () => {
const params = swiper.params.a11y;
swiper.el.append(liveRegion);
// Container
const containerEl = swiper.el;
if (params.containerRoleDescriptionMessage) {
addElRoleDescription(containerEl, params.containerRoleDescriptionMessage);
}
if (params.containerMessage) {
addElLabel(containerEl, params.containerMessage);
}
// Wrapper
const wrapperEl = swiper.wrapperEl;
const wrapperId =
params.id || wrapperEl.getAttribute('id') || `swiper-wrapper-${getRandomNumber(16)}`;
const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';
addElId(wrapperEl, wrapperId);
addElLive(wrapperEl, live);
// Slide
initSlides();
// Navigation
let { nextEl, prevEl } = swiper.navigation ? swiper.navigation : {};
nextEl = makeElementsArray(nextEl);
prevEl = makeElementsArray(prevEl);
if (nextEl) {
nextEl.forEach((el) => initNavEl(el, wrapperId, params.nextSlideMessage));
}
if (prevEl) {
prevEl.forEach((el) => initNavEl(el, wrapperId, params.prevSlideMessage));
}
// Pagination
if (hasClickablePagination()) {
const paginationEl = Array.isArray(swiper.pagination.el)
? swiper.pagination.el
: [swiper.pagination.el];
paginationEl.forEach((el) => {
el.addEventListener('keydown', onEnterOrSpaceKey);
});
}
// Tab focus
swiper.el.addEventListener('focus', handleFocus, true);
swiper.el.addEventListener('pointerdown', handlePointerDown, true);
swiper.el.addEventListener('pointerup', handlePointerUp, true);
};
function destroy() {
if (liveRegion && liveRegion.length > 0) liveRegion.remove();
let { nextEl, prevEl } = swiper.navigation ? swiper.navigation : {};
nextEl = makeElementsArray(nextEl);
prevEl = makeElementsArray(prevEl);
if (nextEl) {
nextEl.forEach((el) => el.removeEventListener('keydown', onEnterOrSpaceKey));
}
if (prevEl) {
prevEl.forEach((el) => el.removeEventListener('keydown', onEnterOrSpaceKey));
}
// Pagination
if (hasClickablePagination()) {
const paginationEl = Array.isArray(swiper.pagination.el)
? swiper.pagination.el
: [swiper.pagination.el];
paginationEl.forEach((el) => {
el.removeEventListener('keydown', onEnterOrSpaceKey);
});
}
// Tab focus
swiper.el.removeEventListener('focus', handleFocus, true);
swiper.el.removeEventListener('pointerdown', handlePointerDown, true);
swiper.el.removeEventListener('pointerup', handlePointerUp, true);
}
on('beforeInit', () => {
liveRegion = createElement('span', swiper.params.a11y.notificationClass);
liveRegion.setAttribute('aria-live', 'assertive');
liveRegion.setAttribute('aria-atomic', 'true');
if (swiper.isElement) {
liveRegion.setAttribute('slot', 'container-end');
}
});
on('afterInit', () => {
if (!swiper.params.a11y.enabled) return;
init();
});
on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => {
if (!swiper.params.a11y.enabled) return;
initSlides();
});
on('fromEdge toEdge afterInit lock unlock', () => {
if (!swiper.params.a11y.enabled) return;
updateNavigation();
});
on('paginationUpdate', () => {
if (!swiper.params.a11y.enabled) return;
updatePagination();
});
on('destroy', () => {
if (!swiper.params.a11y.enabled) return;
destroy();
});
}
",
"import { getWindow } from 'ssr-window';
export default function History({ swiper, extendParams, on }) {
extendParams({
history: {
enabled: false,
root: '',
replaceState: false,
key: 'slides',
keepQuery: false,
},
});
let initialized = false;
let paths = {};
const slugify = (text) => {
return text
.toString()
.replace(/\s+/g, '-')
.replace(/[^\w-]+/g, '')
.replace(/--+/g, '-')
.replace(/^-+/, '')
.replace(/-+$/, '');
};
const getPathValues = (urlOverride) => {
const window = getWindow();
let location;
if (urlOverride) {
location = new URL(urlOverride);
} else {
location = window.location;
}
const pathArray = location.pathname
.slice(1)
.split('/')
.filter((part) => part !== '');
const total = pathArray.length;
const key = pathArray[total - 2];
const value = pathArray[total - 1];
return { key, value };
};
const setHistory = (key, index) => {
const window = getWindow();
if (!initialized || !swiper.params.history.enabled) return;
let location;
if (swiper.params.url) {
location = new URL(swiper.params.url);
} else {
location = window.location;
}
const slide = swiper.slides[index];
let value = slugify(slide.getAttribute('data-history'));
if (swiper.params.history.root.length > 0) {
let root = swiper.params.history.root;
if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);
value = `${root}/${key ? `${key}/` : ''}${value}`;
} else if (!location.pathname.includes(key)) {
value = `${key ? `${key}/` : ''}${value}`;
}
if (swiper.params.history.keepQuery) {
value += location.search;
}
const currentState = window.history.state;
if (currentState && currentState.value === value) {
return;
}
if (swiper.params.history.replaceState) {
window.history.replaceState({ value }, null, value);
} else {
window.history.pushState({ value }, null, value);
}
};
const scrollToSlide = (speed, value, runCallbacks) => {
if (value) {
for (let i = 0, length = swiper.slides.length; i < length; i += 1) {
const slide = swiper.slides[i];
const slideHistory = slugify(slide.getAttribute('data-history'));
if (slideHistory === value) {
const index = swiper.getSlideIndex(slide);
swiper.slideTo(index, speed, runCallbacks);
}
}
} else {
swiper.slideTo(0, speed, runCallbacks);
}
};
const setHistoryPopState = () => {
paths = getPathValues(swiper.params.url);
scrollToSlide(swiper.params.speed, paths.value, false);
};
const init = () => {
const window = getWindow();
if (!swiper.params.history) return;
if (!window.history || !window.history.pushState) {
swiper.params.history.enabled = false;
swiper.params.hashNavigation.enabled = true;
return;
}
initialized = true;
paths = getPathValues(swiper.params.url);
if (!paths.key && !paths.value) {
if (!swiper.params.history.replaceState) {
window.addEventListener('popstate', setHistoryPopState);
}
return;
}
scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);
if (!swiper.params.history.replaceState) {
window.addEventListener('popstate', setHistoryPopState);
}
};
const destroy = () => {
const window = getWindow();
if (!swiper.params.history.replaceState) {
window.removeEventListener('popstate', setHistoryPopState);
}
};
on('init', () => {
if (swiper.params.history.enabled) {
init();
}
});
on('destroy', () => {
if (swiper.params.history.enabled) {
destroy();
}
});
on('transitionEnd _freeModeNoMomentumRelease', () => {
if (initialized) {
setHistory(swiper.params.history.key, swiper.activeIndex);
}
});
on('slideChange', () => {
if (initialized && swiper.params.cssMode) {
setHistory(swiper.params.history.key, swiper.activeIndex);
}
});
}
",
"import { getWindow, getDocument } from 'ssr-window';
import { elementChildren } from '../../shared/utils.js';
export default function HashNavigation({ swiper, extendParams, emit, on }) {
let initialized = false;
const document = getDocument();
const window = getWindow();
extendParams({
hashNavigation: {
enabled: false,
replaceState: false,
watchState: false,
getSlideIndex(_s, hash) {
if (swiper.virtual && swiper.params.virtual.enabled) {
const slideWithHash = swiper.slides.filter(
(slideEl) => slideEl.getAttribute('data-hash') === hash,
)[0];
if (!slideWithHash) return 0;
const index = parseInt(slideWithHash.getAttribute('data-swiper-slide-index'), 10);
return index;
}
return swiper.getSlideIndex(
elementChildren(
swiper.slidesEl,
`.${swiper.params.slideClass}[data-hash="${hash}"], swiper-slide[data-hash="${hash}"]`,
)[0],
);
},
},
});
const onHashChange = () => {
emit('hashChange');
const newHash = document.location.hash.replace('#', '');
const activeSlideEl = swiper.slidesEl.querySelector(
`[data-swiper-slide-index="${swiper.activeIndex}"]`,
);
const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') : '';
if (newHash !== activeSlideHash) {
const newIndex = swiper.params.hashNavigation.getSlideIndex(swiper, newHash);
console.log(newIndex);
if (typeof newIndex === 'undefined') return;
swiper.slideTo(newIndex);
}
};
const setHash = () => {
if (!initialized || !swiper.params.hashNavigation.enabled) return;
const activeSlideEl = swiper.slidesEl.querySelector(
`[data-swiper-slide-index="${swiper.activeIndex}"]`,
);
const activeSlideHash = activeSlideEl
? activeSlideEl.getAttribute('data-hash') || activeSlideEl.getAttribute('data-history')
: '';
if (
swiper.params.hashNavigation.replaceState &&
window.history &&
window.history.replaceState
) {
window.history.replaceState(null, null, `#${activeSlideHash}` || '');
emit('hashSet');
} else {
document.location.hash = activeSlideHash || '';
emit('hashSet');
}
};
const init = () => {
if (
!swiper.params.hashNavigation.enabled ||
(swiper.params.history && swiper.params.history.enabled)
)
return;
initialized = true;
const hash = document.location.hash.replace('#', '');
if (hash) {
const speed = 0;
const index = swiper.params.hashNavigation.getSlideIndex(swiper, hash);
swiper.slideTo(index || 0, speed, swiper.params.runCallbacksOnInit, true);
}
if (swiper.params.hashNavigation.watchState) {
window.addEventListener('hashchange', onHashChange);
}
};
const destroy = () => {
if (swiper.params.hashNavigation.watchState) {
window.removeEventListener('hashchange', onHashChange);
}
};
on('init', () => {
if (swiper.params.hashNavigation.enabled) {
init();
}
});
on('destroy', () => {
if (swiper.params.hashNavigation.enabled) {
destroy();
}
});
on('transitionEnd _freeModeNoMomentumRelease', () => {
if (initialized) {
setHash();
}
});
on('slideChange', () => {
if (initialized && swiper.params.cssMode) {
setHash();
}
});
}
",
"/* eslint no-underscore-dangle: "off" */
/* eslint no-use-before-define: "off" */
import { getDocument } from 'ssr-window';
export default function Autoplay({ swiper, extendParams, on, emit, params }) {
swiper.autoplay = {
running: false,
paused: false,
timeLeft: 0,
};
extendParams({
autoplay: {
enabled: false,
delay: 3000,
waitForTransition: true,
disableOnInteraction: true,
stopOnLastSlide: false,
reverseDirection: false,
pauseOnMouseEnter: false,
},
});
let timeout;
let raf;
let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000;
let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000;
let autoplayTimeLeft;
let autoplayStartTime = new Date().getTime;
let wasPaused;
let isTouched;
let pausedByTouch;
let touchStartTimeout;
let slideChanged;
let pausedByInteraction;
function onTransitionEnd(e) {
if (!swiper || swiper.destroyed || !swiper.wrapperEl) return;
if (e.target !== swiper.wrapperEl) return;
swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd);
resume();
}
const calcTimeLeft = () => {
if (swiper.destroyed || !swiper.autoplay.running) return;
if (swiper.autoplay.paused) {
wasPaused = true;
} else if (wasPaused) {
autoplayDelayCurrent = autoplayTimeLeft;
wasPaused = false;
}
const timeLeft = swiper.autoplay.paused
? autoplayTimeLeft
: autoplayStartTime + autoplayDelayCurrent - new Date().getTime();
swiper.autoplay.timeLeft = timeLeft;
emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal);
raf = requestAnimationFrame(() => {
calcTimeLeft();
});
};
const getSlideDelay = () => {
let activeSlideEl;
if (swiper.virtual && swiper.params.virtual.enabled) {
activeSlideEl = swiper.slides.filter((slideEl) =>
slideEl.classList.contains('swiper-slide-active'),
)[0];
} else {
activeSlideEl = swiper.slides[swiper.activeIndex];
}
if (!activeSlideEl) return undefined;
const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10);
return currentSlideDelay;
};
const run = (delayForce) => {
if (swiper.destroyed || !swiper.autoplay.running) return;
cancelAnimationFrame(raf);
calcTimeLeft();
let delay = typeof delayForce === 'undefined' ? swiper.params.autoplay.delay : delayForce;
autoplayDelayTotal = swiper.params.autoplay.delay;
autoplayDelayCurrent = swiper.params.autoplay.delay;
const currentSlideDelay = getSlideDelay();
if (
!Number.isNaN(currentSlideDelay) &&
currentSlideDelay > 0 &&
typeof delayForce === 'undefined'
) {
delay = currentSlideDelay;
autoplayDelayTotal = currentSlideDelay;
autoplayDelayCurrent = currentSlideDelay;
}
autoplayTimeLeft = delay;
const speed = swiper.params.speed;
const proceed = () => {
if (!swiper || swiper.destroyed) return;
if (swiper.params.autoplay.reverseDirection) {
if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) {
swiper.slidePrev(speed, true, true);
emit('autoplay');
} else if (!swiper.params.autoplay.stopOnLastSlide) {
swiper.slideTo(swiper.slides.length - 1, speed, true, true);
emit('autoplay');
}
} else {
if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) {
swiper.slideNext(speed, true, true);
emit('autoplay');
} else if (!swiper.params.autoplay.stopOnLastSlide) {
swiper.slideTo(0, speed, true, true);
emit('autoplay');
}
}
if (swiper.params.cssMode) {
autoplayStartTime = new Date().getTime();
requestAnimationFrame(() => {
run();
});
}
};
if (delay > 0) {
clearTimeout(timeout);
timeout = setTimeout(() => {
proceed();
}, delay);
} else {
requestAnimationFrame(() => {
proceed();
});
}
// eslint-disable-next-line
return delay;
};
const start = () => {
swiper.autoplay.running = true;
run();
emit('autoplayStart');
};
const stop = () => {
swiper.autoplay.running = false;
clearTimeout(timeout);
cancelAnimationFrame(raf);
emit('autoplayStop');
};
const pause = (internal, reset) => {
if (swiper.destroyed || !swiper.autoplay.running) return;
clearTimeout(timeout);
if (!internal) {
pausedByInteraction = true;
}
const proceed = () => {
emit('autoplayPause');
if (swiper.params.autoplay.waitForTransition) {
swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd);
} else {
resume();
}
};
swiper.autoplay.paused = true;
if (reset) {
if (slideChanged) {
autoplayTimeLeft = swiper.params.autoplay.delay;
}
slideChanged = false;
proceed();
return;
}
const delay = autoplayTimeLeft || swiper.params.autoplay.delay;
autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime);
if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return;
if (autoplayTimeLeft < 0) autoplayTimeLeft = 0;
proceed();
};
const resume = () => {
if (
(swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) ||
swiper.destroyed ||
!swiper.autoplay.running
)
return;
autoplayStartTime = new Date().getTime();
if (pausedByInteraction) {
pausedByInteraction = false;
run(autoplayTimeLeft);
} else {
run();
}
swiper.autoplay.paused = false;
emit('autoplayResume');
};
const onVisibilityChange = () => {
if (swiper.destroyed || !swiper.autoplay.running) return;
const document = getDocument();
if (document.visibilityState === 'hidden') {
pausedByInteraction = true;
pause(true);
}
if (document.visibilityState === 'visible') {
resume();
}
};
const onPointerEnter = (e) => {
if (e.pointerType !== 'mouse') return;
pausedByInteraction = true;
pause(true);
};
const onPointerLeave = (e) => {
if (e.pointerType !== 'mouse') return;
if (swiper.autoplay.paused) {
resume();
}
};
const attachMouseEvents = () => {
if (swiper.params.autoplay.pauseOnMouseEnter) {
swiper.el.addEventListener('pointerenter', onPointerEnter);
swiper.el.addEventListener('pointerleave', onPointerLeave);
}
};
const detachMouseEvents = () => {
swiper.el.removeEventListener('pointerenter', onPointerEnter);
swiper.el.removeEventListener('pointerleave', onPointerLeave);
};
const attachDocumentEvents = () => {
const document = getDocument();
document.addEventListener('visibilitychange', onVisibilityChange);
};
const detachDocumentEvents = () => {
const document = getDocument();
document.removeEventListener('visibilitychange', onVisibilityChange);
};
on('init', () => {
if (swiper.params.autoplay.enabled) {
attachMouseEvents();
attachDocumentEvents();
autoplayStartTime = new Date().getTime();
start();
}
});
on('destroy', () => {
detachMouseEvents();
detachDocumentEvents();
if (swiper.autoplay.running) {
stop();
}
});
on('beforeTransitionStart', (_s, speed, internal) => {
if (swiper.destroyed || !swiper.autoplay.running) return;
if (internal || !swiper.params.autoplay.disableOnInteraction) {
pause(true, true);
} else {
stop();
}
});
on('sliderFirstMove', () => {
if (swiper.destroyed || !swiper.autoplay.running) return;
if (swiper.params.autoplay.disableOnInteraction) {
stop();
return;
}
isTouched = true;
pausedByTouch = false;
pausedByInteraction = false;
touchStartTimeout = setTimeout(() => {
pausedByInteraction = true;
pausedByTouch = true;
pause(true);
}, 200);
});
on('touchEnd', () => {
if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return;
clearTimeout(touchStartTimeout);
clearTimeout(timeout);
if (swiper.params.autoplay.disableOnInteraction) {
pausedByTouch = false;
isTouched = false;
return;
}
if (pausedByTouch && swiper.params.cssMode) resume();
pausedByTouch = false;
isTouched = false;
});
on('slideChange', () => {
if (swiper.destroyed || !swiper.autoplay.running) return;
slideChanged = true;
});
Object.assign(swiper.autoplay, {
start,
stop,
pause,
resume,
});
}
",
"import { getDocument } from 'ssr-window';
import { elementChildren, isObject } from '../../shared/utils.js';
export default function Thumb({ swiper, extendParams, on }) {
extendParams({
thumbs: {
swiper: null,
multipleActiveThumbs: true,
autoScrollOffset: 0,
slideThumbActiveClass: 'swiper-slide-thumb-active',
thumbsContainerClass: 'swiper-thumbs',
},
});
let initialized = false;
let swiperCreated = false;
swiper.thumbs = {
swiper: null,
};
function onThumbClick() {
const thumbsSwiper = swiper.thumbs.swiper;
if (!thumbsSwiper || thumbsSwiper.destroyed) return;
const clickedIndex = thumbsSwiper.clickedIndex;
const clickedSlide = thumbsSwiper.clickedSlide;
if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass))
return;
if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;
let slideToIndex;
if (thumbsSwiper.params.loop) {
slideToIndex = parseInt(
thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'),
10,
);
} else {
slideToIndex = clickedIndex;
}
if (swiper.params.loop) {
swiper.slideToLoop(slideToIndex);
} else {
swiper.slideTo(slideToIndex);
}
}
function init() {
const { thumbs: thumbsParams } = swiper.params;
if (initialized) return false;
initialized = true;
const SwiperClass = swiper.constructor;
if (thumbsParams.swiper instanceof SwiperClass) {
swiper.thumbs.swiper = thumbsParams.swiper;
Object.assign(swiper.thumbs.swiper.originalParams, {
watchSlidesProgress: true,
slideToClickedSlide: false,
});
Object.assign(swiper.thumbs.swiper.params, {
watchSlidesProgress: true,
slideToClickedSlide: false,
});
swiper.thumbs.swiper.update();
} else if (isObject(thumbsParams.swiper)) {
const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);
Object.assign(thumbsSwiperParams, {
watchSlidesProgress: true,
slideToClickedSlide: false,
});
swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);
swiperCreated = true;
}
swiper.thumbs.swiper.el.classList.add(swiper.params.thumbs.thumbsContainerClass);
swiper.thumbs.swiper.on('tap', onThumbClick);
return true;
}
function update(initial) {
const thumbsSwiper = swiper.thumbs.swiper;
if (!thumbsSwiper || thumbsSwiper.destroyed) return;
const slidesPerView =
thumbsSwiper.params.slidesPerView === 'auto'
? thumbsSwiper.slidesPerViewDynamic()
: thumbsSwiper.params.slidesPerView;
// Activate thumbs
let thumbsToActivate = 1;
const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;
if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {
thumbsToActivate = swiper.params.slidesPerView;
}
if (!swiper.params.thumbs.multipleActiveThumbs) {
thumbsToActivate = 1;
}
thumbsToActivate = Math.floor(thumbsToActivate);
thumbsSwiper.slides.forEach((slideEl) => slideEl.classList.remove(thumbActiveClass));
if (
thumbsSwiper.params.loop ||
(thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled)
) {
for (let i = 0; i < thumbsToActivate; i += 1) {
elementChildren(
thumbsSwiper.slidesEl,
`[data-swiper-slide-index="${swiper.realIndex + i}"]`,
).forEach((slideEl) => {
slideEl.classList.add(thumbActiveClass);
});
}
} else {
for (let i = 0; i < thumbsToActivate; i += 1) {
if (thumbsSwiper.slides[swiper.realIndex + i]) {
thumbsSwiper.slides[swiper.realIndex + i].classList.add(thumbActiveClass);
}
}
}
const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;
const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;
if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {
const currentThumbsIndex = thumbsSwiper.activeIndex;
let newThumbsIndex;
let direction;
if (thumbsSwiper.params.loop) {
const newThumbsSlide = thumbsSwiper.slides.filter(
(slideEl) => slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`,
)[0];
newThumbsIndex = thumbsSwiper.slides.indexOf(newThumbsSlide);
direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';
} else {
newThumbsIndex = swiper.realIndex;
direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';
}
if (useOffset) {
newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;
}
if (
thumbsSwiper.visibleSlidesIndexes &&
thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0
) {
if (thumbsSwiper.params.centeredSlides) {
if (newThumbsIndex > currentThumbsIndex) {
newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;
} else {
newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;
}
} else if (
newThumbsIndex > currentThumbsIndex &&
thumbsSwiper.params.slidesPerGroup === 1
) {
// newThumbsIndex = newThumbsIndex - slidesPerView + 1;
}
thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);
}
}
}
on('beforeInit', () => {
const { thumbs } = swiper.params;
if (!thumbs || !thumbs.swiper) return;
if (typeof thumbs.swiper === 'string' || thumbs.swiper instanceof HTMLElement) {
const document = getDocument();
const getThumbsElementAndInit = () => {
const thumbsElement =
typeof thumbs.swiper === 'string' ? document.querySelector(thumbs.swiper) : thumbs.swiper;
if (thumbsElement && thumbsElement.swiper) {
thumbs.swiper = thumbsElement.swiper;
init();
update(true);
} else if (thumbsElement) {
const onThumbsSwiper = (e) => {
thumbs.swiper = e.detail[0];
thumbsElement.removeEventListener('init', onThumbsSwiper);
init();
update(true);
thumbs.swiper.update();
swiper.update();
};
thumbsElement.addEventListener('init', onThumbsSwiper);
}
return thumbsElement;
};
const watchForThumbsToAppear = () => {
if (swiper.destroyed) return;
const thumbsElement = getThumbsElementAndInit();
if (!thumbsElement) {
requestAnimationFrame(watchForThumbsToAppear);
}
};
requestAnimationFrame(watchForThumbsToAppear);
} else {
init();
update(true);
}
});
on('slideChange update resize observerUpdate', () => {
update();
});
on('setTransition', (_s, duration) => {
const thumbsSwiper = swiper.thumbs.swiper;
if (!thumbsSwiper || thumbsSwiper.destroyed) return;
thumbsSwiper.setTransition(duration);
});
on('beforeDestroy', () => {
const thumbsSwiper = swiper.thumbs.swiper;
if (!thumbsSwiper || thumbsSwiper.destroyed) return;
if (swiperCreated) {
thumbsSwiper.destroy();
}
});
Object.assign(swiper.thumbs, {
init,
update,
});
}
",
"import { elementTransitionEnd, now } from '../../shared/utils.js';
export default function freeMode({ swiper, extendParams, emit, once }) {
extendParams({
freeMode: {
enabled: false,
momentum: true,
momentumRatio: 1,
momentumBounce: true,
momentumBounceRatio: 1,
momentumVelocityRatio: 1,
sticky: false,
minimumVelocity: 0.02,
},
});
function onTouchStart() {
const translate = swiper.getTranslate();
swiper.setTranslate(translate);
swiper.setTransition(0);
swiper.touchEventsData.velocities.length = 0;
swiper.freeMode.onTouchEnd({ currentPos: swiper.rtl ? swiper.translate : -swiper.translate });
}
function onTouchMove() {
const { touchEventsData: data, touches } = swiper;
// Velocity
if (data.velocities.length === 0) {
data.velocities.push({
position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],
time: data.touchStartTime,
});
}
data.velocities.push({
position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],
time: now(),
});
}
function onTouchEnd({ currentPos }) {
const { params, wrapperEl, rtlTranslate: rtl, snapGrid, touchEventsData: data } = swiper;
// Time diff
const touchEndTime = now();
const timeDiff = touchEndTime - data.touchStartTime;
if (currentPos < -swiper.minTranslate()) {
swiper.slideTo(swiper.activeIndex);
return;
}
if (currentPos > -swiper.maxTranslate()) {
if (swiper.slides.length < snapGrid.length) {
swiper.slideTo(snapGrid.length - 1);
} else {
swiper.slideTo(swiper.slides.length - 1);
}
return;
}
if (params.freeMode.momentum) {
if (data.velocities.length > 1) {
const lastMoveEvent = data.velocities.pop();
const velocityEvent = data.velocities.pop();
const distance = lastMoveEvent.position - velocityEvent.position;
const time = lastMoveEvent.time - velocityEvent.time;
swiper.velocity = distance / time;
swiper.velocity /= 2;
if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {
swiper.velocity = 0;
}
// this implies that the user stopped moving a finger then released.
// There would be no events with distance zero, so the last event is stale.
if (time > 150 || now() - lastMoveEvent.time > 300) {
swiper.velocity = 0;
}
} else {
swiper.velocity = 0;
}
swiper.velocity *= params.freeMode.momentumVelocityRatio;
data.velocities.length = 0;
let momentumDuration = 1000 * params.freeMode.momentumRatio;
const momentumDistance = swiper.velocity * momentumDuration;
let newPosition = swiper.translate + momentumDistance;
if (rtl) newPosition = -newPosition;
let doBounce = false;
let afterBouncePosition;
const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;
let needsLoopFix;
if (newPosition < swiper.maxTranslate()) {
if (params.freeMode.momentumBounce) {
if (newPosition + swiper.maxTranslate() < -bounceAmount) {
newPosition = swiper.maxTranslate() - bounceAmount;
}
afterBouncePosition = swiper.maxTranslate();
doBounce = true;
data.allowMomentumBounce = true;
} else {
newPosition = swiper.maxTranslate();
}
if (params.loop && params.centeredSlides) needsLoopFix = true;
} else if (newPosition > swiper.minTranslate()) {
if (params.freeMode.momentumBounce) {
if (newPosition - swiper.minTranslate() > bounceAmount) {
newPosition = swiper.minTranslate() + bounceAmount;
}
afterBouncePosition = swiper.minTranslate();
doBounce = true;
data.allowMomentumBounce = true;
} else {
newPosition = swiper.minTranslate();
}
if (params.loop && params.centeredSlides) needsLoopFix = true;
} else if (params.freeMode.sticky) {
let nextSlide;
for (let j = 0; j < snapGrid.length; j += 1) {
if (snapGrid[j] > -newPosition) {
nextSlide = j;
break;
}
}
if (
Math.abs(snapGrid[nextSlide] - newPosition) <
Math.abs(snapGrid[nextSlide - 1] - newPosition) ||
swiper.swipeDirection === 'next'
) {
newPosition = snapGrid[nextSlide];
} else {
newPosition = snapGrid[nextSlide - 1];
}
newPosition = -newPosition;
}
if (needsLoopFix) {
once('transitionEnd', () => {
swiper.loopFix();
});
}
// Fix duration
if (swiper.velocity !== 0) {
if (rtl) {
momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);
} else {
momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);
}
if (params.freeMode.sticky) {
// If freeMode.sticky is active and the user ends a swipe with a slow-velocity
// event, then durations can be 20+ seconds to slide one (or zero!) slides.
// It's easy to see this when simulating touch with mouse events. To fix this,
// limit single-slide swipes to the default slide duration. This also has the
// nice side effect of matching slide speed if the user stopped moving before
// lifting finger or mouse vs. moving slowly before lifting the finger/mouse.
// For faster swipes, also apply limits (albeit higher ones).
const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);
const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];
if (moveDistance < currentSlideSize) {
momentumDuration = params.speed;
} else if (moveDistance < 2 * currentSlideSize) {
momentumDuration = params.speed * 1.5;
} else {
momentumDuration = params.speed * 2.5;
}
}
} else if (params.freeMode.sticky) {
swiper.slideToClosest();
return;
}
if (params.freeMode.momentumBounce && doBounce) {
swiper.updateProgress(afterBouncePosition);
swiper.setTransition(momentumDuration);
swiper.setTranslate(newPosition);
swiper.transitionStart(true, swiper.swipeDirection);
swiper.animating = true;
elementTransitionEnd(wrapperEl, () => {
if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;
emit('momentumBounce');
swiper.setTransition(params.speed);
setTimeout(() => {
swiper.setTranslate(afterBouncePosition);
elementTransitionEnd(wrapperEl, () => {
if (!swiper || swiper.destroyed) return;
swiper.transitionEnd();
});
}, 0);
});
} else if (swiper.velocity) {
emit('_freeModeNoMomentumRelease');
swiper.updateProgress(newPosition);
swiper.setTransition(momentumDuration);
swiper.setTranslate(newPosition);
swiper.transitionStart(true, swiper.swipeDirection);
if (!swiper.animating) {
swiper.animating = true;
elementTransitionEnd(wrapperEl, () => {
if (!swiper || swiper.destroyed) return;
swiper.transitionEnd();
});
}
} else {
swiper.updateProgress(newPosition);
}
swiper.updateActiveIndex();
swiper.updateSlidesClasses();
} else if (params.freeMode.sticky) {
swiper.slideToClosest();
return;
} else if (params.freeMode) {
emit('_freeModeNoMomentumRelease');
}
if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {
swiper.updateProgress();
swiper.updateActiveIndex();
swiper.updateSlidesClasses();
}
}
Object.assign(swiper, {
freeMode: {
onTouchStart,
onTouchMove,
onTouchEnd,
},
});
}
",
"export default function Grid({ swiper, extendParams }) {
extendParams({
grid: {
rows: 1,
fill: 'column',
},
});
let slidesNumberEvenToRows;
let slidesPerRow;
let numFullColumns;
const initSlides = (slidesLength) => {
const { slidesPerView } = swiper.params;
const { rows, fill } = swiper.params.grid;
slidesPerRow = slidesNumberEvenToRows / rows;
numFullColumns = Math.floor(slidesLength / rows);
if (Math.floor(slidesLength / rows) === slidesLength / rows) {
slidesNumberEvenToRows = slidesLength;
} else {
slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;
}
if (slidesPerView !== 'auto' && fill === 'row') {
slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);
}
};
const updateSlide = (i, slide, slidesLength, getDirectionLabel) => {
const { slidesPerGroup, spaceBetween } = swiper.params;
const { rows, fill } = swiper.params.grid;
// Set slides order
let newSlideOrderIndex;
let column;
let row;
if (fill === 'row' && slidesPerGroup > 1) {
const groupIndex = Math.floor(i / (slidesPerGroup * rows));
const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;
const columnsInGroup =
groupIndex === 0
? slidesPerGroup
: Math.min(
Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows),
slidesPerGroup,
);
row = Math.floor(slideIndexInGroup / columnsInGroup);
column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;
newSlideOrderIndex = column + (row * slidesNumberEvenToRows) / rows;
slide.style.order = newSlideOrderIndex;
} else if (fill === 'column') {
column = Math.floor(i / rows);
row = i - column * rows;
if (column > numFullColumns || (column === numFullColumns && row === rows - 1)) {
row += 1;
if (row >= rows) {
row = 0;
column += 1;
}
}
} else {
row = Math.floor(i / slidesPerRow);
column = i - row * slidesPerRow;
}
slide.style[getDirectionLabel('margin-top')] =
row !== 0 ? spaceBetween && `${spaceBetween}px` : '';
};
const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => {
const { spaceBetween, centeredSlides, roundLengths } = swiper.params;
const { rows } = swiper.params.grid;
swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;
swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;
swiper.wrapperEl.style[getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;
if (centeredSlides) {
const newSlidesGrid = [];
for (let i = 0; i < snapGrid.length; i += 1) {
let slidesGridItem = snapGrid[i];
if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);
if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);
}
snapGrid.splice(0, snapGrid.length);
snapGrid.push(...newSlidesGrid);
}
};
swiper.grid = {
initSlides,
updateSlide,
updateWrapperSize,
};
}
",
"import appendSlide from './methods/appendSlide.js';
import prependSlide from './methods/prependSlide.js';
import addSlide from './methods/addSlide.js';
import removeSlide from './methods/removeSlide.js';
import removeAllSlides from './methods/removeAllSlides.js';
export default function Manipulation({ swiper }) {
Object.assign(swiper, {
appendSlide: appendSlide.bind(swiper),
prependSlide: prependSlide.bind(swiper),
addSlide: addSlide.bind(swiper),
removeSlide: removeSlide.bind(swiper),
removeAllSlides: removeAllSlides.bind(swiper),
});
}
",
"import effectInit from '../../shared/effect-init.js';
import effectTarget from '../../shared/effect-target.js';
import effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';
import { getSlideTransformEl } from '../../shared/utils.js';
export default function EffectFade({ swiper, extendParams, on }) {
extendParams({
fadeEffect: {
crossFade: false,
},
});
const setTranslate = () => {
const { slides } = swiper;
const params = swiper.params.fadeEffect;
for (let i = 0; i < slides.length; i += 1) {
const slideEl = swiper.slides[i];
const offset = slideEl.swiperSlideOffset;
let tx = -offset;
if (!swiper.params.virtualTranslate) tx -= swiper.translate;
let ty = 0;
if (!swiper.isHorizontal()) {
ty = tx;
tx = 0;
}
const slideOpacity = swiper.params.fadeEffect.crossFade
? Math.max(1 - Math.abs(slideEl.progress), 0)
: 1 + Math.min(Math.max(slideEl.progress, -1), 0);
const targetEl = effectTarget(params, slideEl);
targetEl.style.opacity = slideOpacity;
targetEl.style.transform = `translate3d(${tx}px, ${ty}px, 0px)`;
}
};
const setTransition = (duration) => {
const transformElements = swiper.slides.map((slideEl) => getSlideTransformEl(slideEl));
transformElements.forEach((el) => {
el.style.transitionDuration = `${duration}ms`;
});
effectVirtualTransitionEnd({ swiper, duration, transformElements, allSlides: true });
};
effectInit({
effect: 'fade',
swiper,
on,
setTranslate,
setTransition,
overwriteParams: () => ({
slidesPerView: 1,
slidesPerGroup: 1,
watchSlidesProgress: true,
spaceBetween: 0,
virtualTranslate: !swiper.params.cssMode,
}),
});
}
",
"import effectInit from '../../shared/effect-init.js';
import { createElement } from '../../shared/utils.js';
export default function EffectCube({ swiper, extendParams, on }) {
extendParams({
cubeEffect: {
slideShadows: true,
shadow: true,
shadowOffset: 20,
shadowScale: 0.94,
},
});
const createSlideShadows = (slideEl, progress, isHorizontal) => {
let shadowBefore = isHorizontal
? slideEl.querySelector('.swiper-slide-shadow-left')
: slideEl.querySelector('.swiper-slide-shadow-top');
let shadowAfter = isHorizontal
? slideEl.querySelector('.swiper-slide-shadow-right')
: slideEl.querySelector('.swiper-slide-shadow-bottom');
if (!shadowBefore) {
shadowBefore = createElement('div', `swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}`);
slideEl.append(shadowBefore);
}
if (!shadowAfter) {
shadowAfter = createElement(
'div',
`swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}`,
);
slideEl.append(shadowAfter);
}
if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);
if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);
};
const recreateShadows = () => {
// create new ones
const isHorizontal = swiper.isHorizontal();
swiper.slides.forEach((slideEl) => {
const progress = Math.max(Math.min(slideEl.progress, 1), -1);
createSlideShadows(slideEl, progress, isHorizontal);
});
};
const setTranslate = () => {
const {
el,
wrapperEl,
slides,
width: swiperWidth,
height: swiperHeight,
rtlTranslate: rtl,
size: swiperSize,
browser,
} = swiper;
const params = swiper.params.cubeEffect;
const isHorizontal = swiper.isHorizontal();
const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
let wrapperRotate = 0;
let cubeShadowEl;
if (params.shadow) {
if (isHorizontal) {
cubeShadowEl = swiper.slidesEl.querySelector('.swiper-cube-shadow');
if (!cubeShadowEl) {
cubeShadowEl = createElement('div', 'swiper-cube-shadow');
swiper.slidesEl.append(cubeShadowEl);
}
cubeShadowEl.style.height = `${swiperWidth}px`;
} else {
cubeShadowEl = el.querySelector('.swiper-cube-shadow');
if (!cubeShadowEl) {
cubeShadowEl = createElement('div', 'swiper-cube-shadow');
el.append(cubeShadowEl);
}
}
}
for (let i = 0; i < slides.length; i += 1) {
const slideEl = slides[i];
let slideIndex = i;
if (isVirtual) {
slideIndex = parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10);
}
let slideAngle = slideIndex * 90;
let round = Math.floor(slideAngle / 360);
if (rtl) {
slideAngle = -slideAngle;
round = Math.floor(-slideAngle / 360);
}
const progress = Math.max(Math.min(slideEl.progress, 1), -1);
let tx = 0;
let ty = 0;
let tz = 0;
if (slideIndex % 4 === 0) {
tx = -round * 4 * swiperSize;
tz = 0;
} else if ((slideIndex - 1) % 4 === 0) {
tx = 0;
tz = -round * 4 * swiperSize;
} else if ((slideIndex - 2) % 4 === 0) {
tx = swiperSize + round * 4 * swiperSize;
tz = swiperSize;
} else if ((slideIndex - 3) % 4 === 0) {
tx = -swiperSize;
tz = 3 * swiperSize + swiperSize * 4 * round;
}
if (rtl) {
tx = -tx;
}
if (!isHorizontal) {
ty = tx;
tx = 0;
}
const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${
isHorizontal ? slideAngle : 0
}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;
if (progress <= 1 && progress > -1) {
wrapperRotate = slideIndex * 90 + progress * 90;
if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;
}
slideEl.style.transform = transform;
if (params.slideShadows) {
createSlideShadows(slideEl, progress, isHorizontal);
}
}
wrapperEl.style.transformOrigin = `50% 50% -${swiperSize / 2}px`;
wrapperEl.style['-webkit-transform-origin'] = `50% 50% -${swiperSize / 2}px`;
if (params.shadow) {
if (isHorizontal) {
cubeShadowEl.style.transform = `translate3d(0px, ${
swiperWidth / 2 + params.shadowOffset
}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`;
} else {
const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;
const multiplier =
1.5 -
(Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2 +
Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2);
const scale1 = params.shadowScale;
const scale2 = params.shadowScale / multiplier;
const offset = params.shadowOffset;
cubeShadowEl.style.transform = `scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${
swiperHeight / 2 + offset
}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`;
}
}
const zFactor =
(browser.isSafari || browser.isWebView) && browser.needPerspectiveFix ? -swiperSize / 2 : 0;
wrapperEl.style.transform = `translate3d(0px,0,${zFactor}px) rotateX(${
swiper.isHorizontal() ? 0 : wrapperRotate
}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`;
wrapperEl.style.setProperty('--swiper-cube-translate-z', `${zFactor}px`);
};
const setTransition = (duration) => {
const { el, slides } = swiper;
slides.forEach((slideEl) => {
slideEl.style.transitionDuration = `${duration}ms`;
slideEl
.querySelectorAll(
'.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left',
)
.forEach((subEl) => {
subEl.style.transitionDuration = `${duration}ms`;
});
});
if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {
const shadowEl = el.querySelector('.swiper-cube-shadow');
if (shadowEl) shadowEl.style.transitionDuration = `${duration}ms`;
}
};
effectInit({
effect: 'cube',
swiper,
on,
setTranslate,
setTransition,
recreateShadows,
getEffectParams: () => swiper.params.cubeEffect,
perspective: () => true,
overwriteParams: () => ({
slidesPerView: 1,
slidesPerGroup: 1,
watchSlidesProgress: true,
resistanceRatio: 0,
spaceBetween: 0,
centeredSlides: false,
virtualTranslate: true,
}),
});
}
",
"import createShadow from '../../shared/create-shadow.js';
import effectInit from '../../shared/effect-init.js';
import effectTarget from '../../shared/effect-target.js';
import effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';
import { getSlideTransformEl } from '../../shared/utils.js';
export default function EffectFlip({ swiper, extendParams, on }) {
extendParams({
flipEffect: {
slideShadows: true,
limitRotation: true,
},
});
const createSlideShadows = (slideEl, progress, params) => {
let shadowBefore = swiper.isHorizontal()
? slideEl.querySelector('.swiper-slide-shadow-left')
: slideEl.querySelector('.swiper-slide-shadow-top');
let shadowAfter = swiper.isHorizontal()
? slideEl.querySelector('.swiper-slide-shadow-right')
: slideEl.querySelector('.swiper-slide-shadow-bottom');
if (!shadowBefore) {
shadowBefore = createShadow(params, slideEl, swiper.isHorizontal() ? 'left' : 'top');
}
if (!shadowAfter) {
shadowAfter = createShadow(params, slideEl, swiper.isHorizontal() ? 'right' : 'bottom');
}
if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);
if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);
};
const recreateShadows = () => {
// Set shadows
const params = swiper.params.flipEffect;
swiper.slides.forEach((slideEl) => {
let progress = slideEl.progress;
if (swiper.params.flipEffect.limitRotation) {
progress = Math.max(Math.min(slideEl.progress, 1), -1);
}
createSlideShadows(slideEl, progress, params);
});
};
const setTranslate = () => {
const { slides, rtlTranslate: rtl } = swiper;
const params = swiper.params.flipEffect;
for (let i = 0; i < slides.length; i += 1) {
const slideEl = slides[i];
let progress = slideEl.progress;
if (swiper.params.flipEffect.limitRotation) {
progress = Math.max(Math.min(slideEl.progress, 1), -1);
}
const offset = slideEl.swiperSlideOffset;
const rotate = -180 * progress;
let rotateY = rotate;
let rotateX = 0;
let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;
let ty = 0;
if (!swiper.isHorizontal()) {
ty = tx;
tx = 0;
rotateX = -rotateY;
rotateY = 0;
} else if (rtl) {
rotateY = -rotateY;
}
slideEl.style.zIndex = -Math.abs(Math.round(progress)) + slides.length;
if (params.slideShadows) {
createSlideShadows(slideEl, progress, params);
}
const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;
const targetEl = effectTarget(params, slideEl);
targetEl.style.transform = transform;
}
};
const setTransition = (duration) => {
const transformElements = swiper.slides.map((slideEl) => getSlideTransformEl(slideEl));
transformElements.forEach((el) => {
el.style.transitionDuration = `${duration}ms`;
el.querySelectorAll(
'.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left',
).forEach((shadowEl) => {
shadowEl.style.transitionDuration = `${duration}ms`;
});
});
effectVirtualTransitionEnd({ swiper, duration, transformElements });
};
effectInit({
effect: 'flip',
swiper,
on,
setTranslate,
setTransition,
recreateShadows,
getEffectParams: () => swiper.params.flipEffect,
perspective: () => true,
overwriteParams: () => ({
slidesPerView: 1,
slidesPerGroup: 1,
watchSlidesProgress: true,
spaceBetween: 0,
virtualTranslate: !swiper.params.cssMode,
}),
});
}
",
"import createShadow from '../../shared/create-shadow.js';
import effectInit from '../../shared/effect-init.js';
import effectTarget from '../../shared/effect-target.js';
import { getSlideTransformEl } from '../../shared/utils.js';
export default function EffectCoverflow({ swiper, extendParams, on }) {
extendParams({
coverflowEffect: {
rotate: 50,
stretch: 0,
depth: 100,
scale: 1,
modifier: 1,
slideShadows: true,
},
});
const setTranslate = () => {
const { width: swiperWidth, height: swiperHeight, slides, slidesSizesGrid } = swiper;
const params = swiper.params.coverflowEffect;
const isHorizontal = swiper.isHorizontal();
const transform = swiper.translate;
const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;
const rotate = isHorizontal ? params.rotate : -params.rotate;
const translate = params.depth;
// Each slide offset from center
for (let i = 0, length = slides.length; i < length; i += 1) {
const slideEl = slides[i];
const slideSize = slidesSizesGrid[i];
const slideOffset = slideEl.swiperSlideOffset;
const centerOffset = (center - slideOffset - slideSize / 2) / slideSize;
const offsetMultiplier =
typeof params.modifier === 'function'
? params.modifier(centerOffset)
: centerOffset * params.modifier;
let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;
let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;
// var rotateZ = 0
let translateZ = -translate * Math.abs(offsetMultiplier);
let stretch = params.stretch;
// Allow percentage to make a relative stretch for responsive sliders
if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {
stretch = (parseFloat(params.stretch) / 100) * slideSize;
}
let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;
let translateX = isHorizontal ? stretch * offsetMultiplier : 0;
let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);
// Fix for ultra small values
if (Math.abs(translateX) < 0.001) translateX = 0;
if (Math.abs(translateY) < 0.001) translateY = 0;
if (Math.abs(translateZ) < 0.001) translateZ = 0;
if (Math.abs(rotateY) < 0.001) rotateY = 0;
if (Math.abs(rotateX) < 0.001) rotateX = 0;
if (Math.abs(scale) < 0.001) scale = 0;
const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;
const targetEl = effectTarget(params, slideEl);
targetEl.style.transform = slideTransform;
slideEl.style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
if (params.slideShadows) {
// Set shadows
let shadowBeforeEl = isHorizontal
? slideEl.querySelector('.swiper-slide-shadow-left')
: slideEl.querySelector('.swiper-slide-shadow-top');
let shadowAfterEl = isHorizontal
? slideEl.querySelector('.swiper-slide-shadow-right')
: slideEl.querySelector('.swiper-slide-shadow-bottom');
if (!shadowBeforeEl) {
shadowBeforeEl = createShadow(params, slideEl, isHorizontal ? 'left' : 'top');
}
if (!shadowAfterEl) {
shadowAfterEl = createShadow(params, slideEl, isHorizontal ? 'right' : 'bottom');
}
if (shadowBeforeEl)
shadowBeforeEl.style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;
if (shadowAfterEl)
shadowAfterEl.style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;
}
}
};
const setTransition = (duration) => {
const transformElements = swiper.slides.map((slideEl) => getSlideTransformEl(slideEl));
transformElements.forEach((el) => {
el.style.transitionDuration = `${duration}ms`;
el.querySelectorAll(
'.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left',
).forEach((shadowEl) => {
shadowEl.style.transitionDuration = `${duration}ms`;
});
});
};
effectInit({
effect: 'coverflow',
swiper,
on,
setTranslate,
setTransition,
perspective: () => true,
overwriteParams: () => ({
watchSlidesProgress: true,
}),
});
}
",
"import createShadow from '../../shared/create-shadow.js';
import effectInit from '../../shared/effect-init.js';
import effectTarget from '../../shared/effect-target.js';
import effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';
import { getSlideTransformEl } from '../../shared/utils.js';
export default function EffectCreative({ swiper, extendParams, on }) {
extendParams({
creativeEffect: {
limitProgress: 1,
shadowPerProgress: false,
progressMultiplier: 1,
perspective: true,
prev: {
translate: [0, 0, 0],
rotate: [0, 0, 0],
opacity: 1,
scale: 1,
},
next: {
translate: [0, 0, 0],
rotate: [0, 0, 0],
opacity: 1,
scale: 1,
},
},
});
const getTranslateValue = (value) => {
if (typeof value === 'string') return value;
return `${value}px`;
};
const setTranslate = () => {
const { slides, wrapperEl, slidesSizesGrid } = swiper;
const params = swiper.params.creativeEffect;
const { progressMultiplier: multiplier } = params;
const isCenteredSlides = swiper.params.centeredSlides;
if (isCenteredSlides) {
const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0;
wrapperEl.style.transform = `translateX(calc(50% - ${margin}px))`;
}
for (let i = 0; i < slides.length; i += 1) {
const slideEl = slides[i];
const slideProgress = slideEl.progress;
const progress = Math.min(
Math.max(slideEl.progress, -params.limitProgress),
params.limitProgress,
);
let originalProgress = progress;
if (!isCenteredSlides) {
originalProgress = Math.min(
Math.max(slideEl.originalProgress, -params.limitProgress),
params.limitProgress,
);
}
const offset = slideEl.swiperSlideOffset;
const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];
const r = [0, 0, 0];
let custom = false;
if (!swiper.isHorizontal()) {
t[1] = t[0];
t[0] = 0;
}
let data = {
translate: [0, 0, 0],
rotate: [0, 0, 0],
scale: 1,
opacity: 1,
};
if (progress < 0) {
data = params.next;
custom = true;
} else if (progress > 0) {
data = params.prev;
custom = true;
}
// set translate
t.forEach((value, index) => {
t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(
progress * multiplier,
)}))`;
});
// set rotates
r.forEach((value, index) => {
r[index] = data.rotate[index] * Math.abs(progress * multiplier);
});
slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;
const translateString = t.join(', ');
const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`;
const scaleString =
originalProgress < 0
? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})`
: `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`;
const opacityString =
originalProgress < 0
? 1 + (1 - data.opacity) * originalProgress * multiplier
: 1 - (1 - data.opacity) * originalProgress * multiplier;
const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`;
// Set shadows
if ((custom && data.shadow) || !custom) {
let shadowEl = slideEl.querySelector('.swiper-slide-shadow');
if (!shadowEl && data.shadow) {
shadowEl = createShadow(params, slideEl);
}
if (shadowEl) {
const shadowOpacity = params.shadowPerProgress
? progress * (1 / params.limitProgress)
: progress;
shadowEl.style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);
}
}
const targetEl = effectTarget(params, slideEl);
targetEl.style.transform = transform;
targetEl.style.opacity = opacityString;
if (data.origin) {
targetEl.style.transformOrigin = data.origin;
}
}
};
const setTransition = (duration) => {
const transformElements = swiper.slides.map((slideEl) => getSlideTransformEl(slideEl));
transformElements.forEach((el) => {
el.style.transitionDuration = `${duration}ms`;
el.querySelectorAll('.swiper-slide-shadow').forEach((shadowEl) => {
shadowEl.style.transitionDuration = `${duration}ms`;
});
});
effectVirtualTransitionEnd({ swiper, duration, transformElements, allSlides: true });
};
effectInit({
effect: 'creative',
swiper,
on,
setTranslate,
setTransition,
perspective: () => swiper.params.creativeEffect.perspective,
overwriteParams: () => ({
watchSlidesProgress: true,
virtualTranslate: !swiper.params.cssMode,
}),
});
}
",
"import createShadow from '../../shared/create-shadow.js';
import effectInit from '../../shared/effect-init.js';
import effectTarget from '../../shared/effect-target.js';
import effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';
import { getSlideTransformEl } from '../../shared/utils.js';
export default function EffectCards({ swiper, extendParams, on }) {
extendParams({
cardsEffect: {
slideShadows: true,
rotate: true,
perSlideRotate: 2,
perSlideOffset: 8,
},
});
const setTranslate = () => {
const { slides, activeIndex } = swiper;
const params = swiper.params.cardsEffect;
const { startTranslate, isTouched } = swiper.touchEventsData;
const currentTranslate = swiper.translate;
for (let i = 0; i < slides.length; i += 1) {
const slideEl = slides[i];
const slideProgress = slideEl.progress;
const progress = Math.min(Math.max(slideProgress, -4), 4);
let offset = slideEl.swiperSlideOffset;
if (swiper.params.centeredSlides && !swiper.params.cssMode) {
swiper.wrapperEl.style.transform = `translateX(${swiper.minTranslate()}px)`;
}
if (swiper.params.centeredSlides && swiper.params.cssMode) {
offset -= slides[0].swiperSlideOffset;
}
let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;
let tY = 0;
const tZ = -100 * Math.abs(progress);
let scale = 1;
let rotate = -params.perSlideRotate * progress;
let tXAdd = params.perSlideOffset - Math.abs(progress) * 0.75;
const slideIndex =
swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i;
const isSwipeToNext =
(slideIndex === activeIndex || slideIndex === activeIndex - 1) &&
progress > 0 &&
progress < 1 &&
(isTouched || swiper.params.cssMode) &&
currentTranslate < startTranslate;
const isSwipeToPrev =
(slideIndex === activeIndex || slideIndex === activeIndex + 1) &&
progress < 0 &&
progress > -1 &&
(isTouched || swiper.params.cssMode) &&
currentTranslate > startTranslate;
if (isSwipeToNext || isSwipeToPrev) {
const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;
rotate += -28 * progress * subProgress;
scale += -0.5 * subProgress;
tXAdd += 96 * subProgress;
tY = `${-25 * subProgress * Math.abs(progress)}%`;
}
if (progress < 0) {
// next
tX = `calc(${tX}px + (${tXAdd * Math.abs(progress)}%))`;
} else if (progress > 0) {
// prev
tX = `calc(${tX}px + (-${tXAdd * Math.abs(progress)}%))`;
} else {
tX = `${tX}px`;
}
if (!swiper.isHorizontal()) {
const prevY = tY;
tY = tX;
tX = prevY;
}
const scaleString =
progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;
const transform = `
translate3d(${tX}, ${tY}, ${tZ}px)
rotateZ(${params.rotate ? rotate : 0}deg)
scale(${scaleString})
`;
if (params.slideShadows) {
// Set shadows
let shadowEl = slideEl.querySelector('.swiper-slide-shadow');
if (!shadowEl) {
shadowEl = createShadow(params, slideEl);
}
if (shadowEl)
shadowEl.style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);
}
slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;
const targetEl = effectTarget(params, slideEl);
targetEl.style.transform = transform;
}
};
const setTransition = (duration) => {
const transformElements = swiper.slides.map((slideEl) => getSlideTransformEl(slideEl));
transformElements.forEach((el) => {
el.style.transitionDuration = `${duration}ms`;
el.querySelectorAll('.swiper-slide-shadow').forEach((shadowEl) => {
shadowEl.style.transitionDuration = `${duration}ms`;
});
});
effectVirtualTransitionEnd({ swiper, duration, transformElements });
};
effectInit({
effect: 'cards',
swiper,
on,
setTranslate,
setTransition,
perspective: () => true,
overwriteParams: () => ({
watchSlidesProgress: true,
virtualTranslate: !swiper.params.cssMode,
}),
});
}
"
],
mappings: "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"
}