{"version":3,"file":"free-mode-CIQFQQXv.js","sources":["../../../node_modules/swiper/modules/free-mode.mjs"],"sourcesContent":["import { d as now, k as elementTransitionEnd } from '../shared/utils.mjs';\n\nfunction freeMode(_ref) {\n let {\n swiper,\n extendParams,\n emit,\n once\n } = _ref;\n extendParams({\n freeMode: {\n enabled: false,\n momentum: true,\n momentumRatio: 1,\n momentumBounce: true,\n momentumBounceRatio: 1,\n momentumVelocityRatio: 1,\n sticky: false,\n minimumVelocity: 0.02\n }\n });\n function onTouchStart() {\n if (swiper.params.cssMode) return;\n const translate = swiper.getTranslate();\n swiper.setTranslate(translate);\n swiper.setTransition(0);\n swiper.touchEventsData.velocities.length = 0;\n swiper.freeMode.onTouchEnd({\n currentPos: swiper.rtl ? swiper.translate : -swiper.translate\n });\n }\n function onTouchMove() {\n if (swiper.params.cssMode) return;\n const {\n touchEventsData: data,\n touches\n } = swiper;\n // Velocity\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime\n });\n }\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: now()\n });\n }\n function onTouchEnd(_ref2) {\n let {\n currentPos\n } = _ref2;\n if (swiper.params.cssMode) return;\n const {\n params,\n wrapperEl,\n rtlTranslate: rtl,\n snapGrid,\n touchEventsData: data\n } = swiper;\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n return;\n }\n if (params.freeMode.momentum) {\n if (data.velocities.length > 1) {\n const lastMoveEvent = data.velocities.pop();\n const velocityEvent = data.velocities.pop();\n const distance = lastMoveEvent.position - velocityEvent.position;\n const time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\n swiper.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n swiper.velocity *= params.freeMode.momentumVelocityRatio;\n data.velocities.length = 0;\n let momentumDuration = 1000 * params.freeMode.momentumRatio;\n const momentumDistance = swiper.velocity * momentumDuration;\n let newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n let doBounce = false;\n let afterBouncePosition;\n const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\n let needsLoopFix;\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeMode.sticky) {\n let nextSlide;\n for (let j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n newPosition = -newPosition;\n }\n if (needsLoopFix) {\n once('transitionEnd', () => {\n swiper.loopFix();\n });\n }\n // Fix duration\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n if (params.freeMode.sticky) {\n // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n }\n if (params.freeMode.momentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(() => {\n swiper.setTranslate(afterBouncePosition);\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n emit('_freeModeNoMomentumRelease');\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n if (!swiper.animating) {\n swiper.animating = true;\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n } else if (params.freeMode) {\n emit('_freeModeNoMomentumRelease');\n }\n if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n emit('_freeModeStaticRelease');\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n }\n Object.assign(swiper, {\n freeMode: {\n onTouchStart,\n onTouchMove,\n onTouchEnd\n }\n });\n}\n\nexport { freeMode as default };\n"],"names":["freeMode","_ref","swiper","extendParams","emit","once","onTouchStart","translate","onTouchMove","data","touches","now","onTouchEnd","_ref2","currentPos","params","wrapperEl","rtl","snapGrid","timeDiff","lastMoveEvent","velocityEvent","distance","time","momentumDuration","momentumDistance","newPosition","doBounce","afterBouncePosition","bounceAmount","needsLoopFix","nextSlide","j","moveDistance","currentSlideSize","elementTransitionEnd"],"mappings":"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","x_google_ignoreList":[0]}