{ 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}">`; } } } 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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" }