{"version":3,"file":"free-mode.min-fcecb3a6.js","sources":["../../../../node_modules/swiper/modules/free-mode/free-mode.js"],"sourcesContent":["import { elementTransitionEnd, now } from '../../shared/utils.js';\nexport default function freeMode({\n  swiper,\n  extendParams,\n  emit,\n  once\n}) {\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    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    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({\n    currentPos\n  }) {\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      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}"],"names":["freeMode","swiper","extendParams","emit","once","onTouchStart","translate","onTouchMove","data","touches","now","onTouchEnd","currentPos","params","wrapperEl","rtl","snapGrid","timeDiff","lastMoveEvent","velocityEvent","distance","time","momentumDuration","momentumDistance","newPosition","doBounce","afterBouncePosition","bounceAmount","needsLoopFix","nextSlide","j","moveDistance","currentSlideSize","elementTransitionEnd"],"mappings":"+CACe,SAASA,EAAS,CAC/B,OAAAC,EACA,aAAAC,EACA,KAAAC,EACA,KAAAC,CACF,EAAG,CACDF,EAAa,CACX,SAAU,CACR,QAAS,GACT,SAAU,GACV,cAAe,EACf,eAAgB,GAChB,oBAAqB,EACrB,sBAAuB,EACvB,OAAQ,GACR,gBAAiB,GAClB,CACL,CAAG,EACD,SAASG,GAAe,CACtB,MAAMC,EAAYL,EAAO,eACzBA,EAAO,aAAaK,CAAS,EAC7BL,EAAO,cAAc,CAAC,EACtBA,EAAO,gBAAgB,WAAW,OAAS,EAC3CA,EAAO,SAAS,WAAW,CACzB,WAAYA,EAAO,IAAMA,EAAO,UAAY,CAACA,EAAO,SAC1D,CAAK,CACF,CACD,SAASM,GAAc,CACrB,KAAM,CACJ,gBAAiBC,EACjB,QAAAC,CACD,EAAGR,EAEAO,EAAK,WAAW,SAAW,GAC7BA,EAAK,WAAW,KAAK,CACnB,SAAUC,EAAQR,EAAO,aAAY,EAAK,SAAW,QAAQ,EAC7D,KAAMO,EAAK,cACnB,CAAO,EAEHA,EAAK,WAAW,KAAK,CACnB,SAAUC,EAAQR,EAAO,aAAY,EAAK,WAAa,UAAU,EACjE,KAAMS,EAAK,CACjB,CAAK,CACF,CACD,SAASC,EAAW,CAClB,WAAAC,CACJ,EAAK,CACD,KAAM,CACJ,OAAAC,EACA,UAAAC,EACA,aAAcC,EACd,SAAAC,EACA,gBAAiBR,CAClB,EAAGP,EAGEgB,EADeP,IACWF,EAAK,eACrC,GAAII,EAAa,CAACX,EAAO,eAAgB,CACvCA,EAAO,QAAQA,EAAO,WAAW,EACjC,OAEF,GAAIW,EAAa,CAACX,EAAO,eAAgB,CACnCA,EAAO,OAAO,OAASe,EAAS,OAClCf,EAAO,QAAQe,EAAS,OAAS,CAAC,EAElCf,EAAO,QAAQA,EAAO,OAAO,OAAS,CAAC,EAEzC,OAEF,GAAIY,EAAO,SAAS,SAAU,CAC5B,GAAIL,EAAK,WAAW,OAAS,EAAG,CAC9B,MAAMU,EAAgBV,EAAK,WAAW,IAAG,EACnCW,EAAgBX,EAAK,WAAW,IAAG,EACnCY,EAAWF,EAAc,SAAWC,EAAc,SAClDE,EAAOH,EAAc,KAAOC,EAAc,KAChDlB,EAAO,SAAWmB,EAAWC,EAC7BpB,EAAO,UAAY,EACf,KAAK,IAAIA,EAAO,QAAQ,EAAIY,EAAO,SAAS,kBAC9CZ,EAAO,SAAW,IAIhBoB,EAAO,KAAOX,EAAK,EAAGQ,EAAc,KAAO,OAC7CjB,EAAO,SAAW,QAGpBA,EAAO,SAAW,EAEpBA,EAAO,UAAYY,EAAO,SAAS,sBACnCL,EAAK,WAAW,OAAS,EACzB,IAAIc,EAAmB,IAAOT,EAAO,SAAS,cAC9C,MAAMU,EAAmBtB,EAAO,SAAWqB,EAC3C,IAAIE,EAAcvB,EAAO,UAAYsB,EACjCR,IAAKS,EAAc,CAACA,GACxB,IAAIC,EAAW,GACXC,EACJ,MAAMC,EAAe,KAAK,IAAI1B,EAAO,QAAQ,EAAI,GAAKY,EAAO,SAAS,oBACtE,IAAIe,EACJ,GAAIJ,EAAcvB,EAAO,eACnBY,EAAO,SAAS,gBACdW,EAAcvB,EAAO,aAAc,EAAG,CAAC0B,IACzCH,EAAcvB,EAAO,aAAc,EAAG0B,GAExCD,EAAsBzB,EAAO,eAC7BwB,EAAW,GACXjB,EAAK,oBAAsB,IAE3BgB,EAAcvB,EAAO,eAEnBY,EAAO,MAAQA,EAAO,iBAAgBe,EAAe,YAChDJ,EAAcvB,EAAO,eAC1BY,EAAO,SAAS,gBACdW,EAAcvB,EAAO,aAAY,EAAK0B,IACxCH,EAAcvB,EAAO,aAAc,EAAG0B,GAExCD,EAAsBzB,EAAO,eAC7BwB,EAAW,GACXjB,EAAK,oBAAsB,IAE3BgB,EAAcvB,EAAO,eAEnBY,EAAO,MAAQA,EAAO,iBAAgBe,EAAe,YAChDf,EAAO,SAAS,OAAQ,CACjC,IAAIgB,EACJ,QAASC,EAAI,EAAGA,EAAId,EAAS,OAAQc,GAAK,EACxC,GAAId,EAASc,CAAC,EAAI,CAACN,EAAa,CAC9BK,EAAYC,EACZ,MAGA,KAAK,IAAId,EAASa,CAAS,EAAIL,CAAW,EAAI,KAAK,IAAIR,EAASa,EAAY,CAAC,EAAIL,CAAW,GAAKvB,EAAO,iBAAmB,OAC7HuB,EAAcR,EAASa,CAAS,EAEhCL,EAAcR,EAASa,EAAY,CAAC,EAEtCL,EAAc,CAACA,EAQjB,GANII,GACFxB,EAAK,gBAAiB,IAAM,CAC1BH,EAAO,QAAO,CACxB,CAAS,EAGCA,EAAO,WAAa,GAMtB,GALIc,EACFO,EAAmB,KAAK,KAAK,CAACE,EAAcvB,EAAO,WAAaA,EAAO,QAAQ,EAE/EqB,EAAmB,KAAK,KAAKE,EAAcvB,EAAO,WAAaA,EAAO,QAAQ,EAE5EY,EAAO,SAAS,OAAQ,CAQ1B,MAAMkB,EAAe,KAAK,KAAKhB,EAAM,CAACS,EAAcA,GAAevB,EAAO,SAAS,EAC7E+B,EAAmB/B,EAAO,gBAAgBA,EAAO,WAAW,EAC9D8B,EAAeC,EACjBV,EAAmBT,EAAO,MACjBkB,EAAe,EAAIC,EAC5BV,EAAmBT,EAAO,MAAQ,IAElCS,EAAmBT,EAAO,MAAQ,aAG7BA,EAAO,SAAS,OAAQ,CACjCZ,EAAO,eAAc,EACrB,OAEEY,EAAO,SAAS,gBAAkBY,GACpCxB,EAAO,eAAeyB,CAAmB,EACzCzB,EAAO,cAAcqB,CAAgB,EACrCrB,EAAO,aAAauB,CAAW,EAC/BvB,EAAO,gBAAgB,GAAMA,EAAO,cAAc,EAClDA,EAAO,UAAY,GACnBgC,EAAqBnB,EAAW,IAAM,CAChC,CAACb,GAAUA,EAAO,WAAa,CAACO,EAAK,sBACzCL,EAAK,gBAAgB,EACrBF,EAAO,cAAcY,EAAO,KAAK,EACjC,WAAW,IAAM,CACfZ,EAAO,aAAayB,CAAmB,EACvCO,EAAqBnB,EAAW,IAAM,CAChC,CAACb,GAAUA,EAAO,WACtBA,EAAO,cAAa,CAClC,CAAa,CACF,EAAE,CAAC,EACd,CAAS,GACQA,EAAO,UAChBE,EAAK,4BAA4B,EACjCF,EAAO,eAAeuB,CAAW,EACjCvB,EAAO,cAAcqB,CAAgB,EACrCrB,EAAO,aAAauB,CAAW,EAC/BvB,EAAO,gBAAgB,GAAMA,EAAO,cAAc,EAC7CA,EAAO,YACVA,EAAO,UAAY,GACnBgC,EAAqBnB,EAAW,IAAM,CAChC,CAACb,GAAUA,EAAO,WACtBA,EAAO,cAAa,CAChC,CAAW,IAGHA,EAAO,eAAeuB,CAAW,EAEnCvB,EAAO,kBAAiB,EACxBA,EAAO,oBAAmB,UACjBY,EAAO,SAAS,OAAQ,CACjCZ,EAAO,eAAc,EACrB,YACSY,EAAO,UAChBV,EAAK,4BAA4B,GAE/B,CAACU,EAAO,SAAS,UAAYI,GAAYJ,EAAO,gBAClDZ,EAAO,eAAc,EACrBA,EAAO,kBAAiB,EACxBA,EAAO,oBAAmB,EAE7B,CACD,OAAO,OAAOA,EAAQ,CACpB,SAAU,CACR,aAAAI,EACA,YAAAE,EACA,WAAAI,CACD,CACL,CAAG,CACH","x_google_ignoreList":[0]}