{"mappings":"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","names":["clamp","min","input","max","Math","Animate","constructor","this","isRunning","value","from","to","currentTime","deltaTime","completed","duration","easing","linearProgress","easedProgress","lerp","x","y","lambda","t","exp","round","stop","_a","onUpdate","call","onStart","Dimensions","wrapper","content","autoResize","debounce","debounceValue","width","height","scrollHeight","scrollWidth","resize","onWrapperResize","onContentResize","Window","window","innerWidth","innerHeight","clientWidth","clientHeight","debouncedResize","callback","delay","timer","args","context","clearTimeout","setTimeout","apply","addEventListener","wrapperResizeObserver","ResizeObserver","observe","contentResizeObserver","destroy","disconnect","_b","removeEventListener","limit","Emitter","events","event","callbacks","i","length","cb","push","e","filter","LINE_HEIGHT","listenerOptions","passive","VirtualScroll","element","options","wheelMultiplier","touchMultiplier","touchStart","lastDelta","emitter","onTouchStart","clientX","clientY","targetTouches","emit","deltaX","deltaY","onTouchMove","onTouchEnd","onWheel","deltaMode","onWindowResize","on","Lenis","document","documentElement","eventsTarget","smoothWheel","syncTouch","syncTouchLerp","touchInertiaMultiplier","pow","infinite","orientation","gestureOrientation","prevent","virtualScroll","__experimental__naiveDimensions","_isScrolling","_isStopped","_isLocked","_preventNextNativeScrollEvent","_resetVelocityTimeout","time","userData","lastVelocity","velocity","direction","animate","onPointerDown","button","reset","onVirtualScroll","data","ctrlKey","isTouch","type","includes","isWheel","isTouching","isStopped","isLocked","isClick","isUnknownGesture","composedPath","slice","indexOf","rootElement","find","node","HTMLElement","hasAttribute","_c","l","classList","_d","contains","_e","preventDefault","isScrolling","delta","abs","hasTouchInertia","scrollTo","targetScroll","Object","assign","programmatic","onNativeScroll","lastScroll","animatedScroll","actualScroll","sign","lenisVersion","body","dimensions","updateClassName","cleanUpClassName","off","scroll","isHorizontal","scrollLeft","scrollTop","start","advance","target","offset","immediate","lock","onComplete","force","querySelector","nodeType","wrapperRect","getBoundingClientRect","left","top","rect","setScroll","preventNextNativeScrollEvent","fromTo","requestAnimationFrame","n","d","progress","isSmooth","className","trim","replace"],"sources":["../esm/npm/lenis@1.1.13/node_modules/src/maths.ts","../esm/npm/lenis@1.1.13/node_modules/src/animate.ts","../esm/npm/lenis@1.1.13/node_modules/src/dimensions.ts","../esm/npm/lenis@1.1.13/node_modules/src/debounce.ts","../esm/npm/lenis@1.1.13/node_modules/src/emitter.ts","../esm/npm/lenis@1.1.13/node_modules/src/virtual-scroll.ts","../esm/npm/lenis@1.1.13/node_modules/src/index.ts"],"sourcesContent":["/**\r\n * Clamp a value between a minimum and maximum value\r\n *\r\n * @param min Minimum value\r\n * @param input Value to clamp\r\n * @param max Maximum value\r\n * @returns Clamped value\r\n */\r\nexport function clamp(min: number, input: number, max: number) {\r\n  return Math.max(min, Math.min(input, max))\r\n}\r\n\r\n/**\r\n * Truncate a floating-point number to a specified number of decimal places\r\n *\r\n * @param value Value to truncate\r\n * @param decimals Number of decimal places to truncate to\r\n * @returns Truncated value\r\n */\r\nexport function truncate(value: number, decimals = 0) {\r\n  return parseFloat(value.toFixed(decimals))\r\n}\r\n\r\n/**\r\n *  Linearly interpolate between two values using an amount (0 \u003c= t \u003c= 1)\r\n *\r\n * @param x First value\r\n * @param y Second value\r\n * @param t Amount to interpolate (0 \u003c= t \u003c= 1)\r\n * @returns Interpolated value\r\n */\r\nexport function lerp(x: number, y: number, t: number) {\r\n  return (1 - t) * x + t * y\r\n}\r\n\r\n/**\r\n * Damp a value over time using a damping factor\r\n * {@link http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/}\r\n *\r\n * @param x Initial value\r\n * @param y Target value\r\n * @param lambda Damping factor\r\n * @param dt Time elapsed since the last update\r\n * @returns Damped value\r\n */\r\nexport function damp(x: number, y: number, lambda: number, deltaTime: number) {\r\n  return lerp(x, y, 1 - Math.exp(-lambda * deltaTime))\r\n}\r\n\r\n/**\r\n * Calculate the modulo of the dividend and divisor while keeping the result within the same sign as the divisor\r\n * {@link https://anguscroll.com/just/just-modulo}\r\n *\r\n * @param n Dividend\r\n * @param d Divisor\r\n * @returns Modulo\r\n */\r\nexport function modulo(n: number, d: number) {\r\n  return ((n % d) + d) % d\r\n}\r\n","import { clamp, damp } from './maths'\r\nimport type { EasingFunction, FromToOptions, OnUpdateCallback } from './types'\r\n\r\n/**\r\n * Animate class to handle value animations with lerping or easing\r\n *\r\n * @example\r\n * const animate = new Animate()\r\n * animate.fromTo(0, 100, { duration: 1, easing: (t) =\u003e t })\r\n * animate.advance(0.5) // 50\r\n */\r\nexport class Animate {\r\n  isRunning = false\r\n  value = 0\r\n  from = 0\r\n  to = 0\r\n  currentTime = 0\r\n\r\n  // These are instanciated in the fromTo method\r\n  lerp?: number\r\n  duration?: number\r\n  easing?: EasingFunction\r\n  onUpdate?: OnUpdateCallback\r\n\r\n  /**\r\n   * Advance the animation by the given delta time\r\n   *\r\n   * @param deltaTime - The time in seconds to advance the animation\r\n   */\r\n  advance(deltaTime: number) {\r\n    if (!this.isRunning) return\r\n\r\n    let completed = false\r\n\r\n    if (this.duration \u0026\u0026 this.easing) {\r\n      this.currentTime += deltaTime\r\n      const linearProgress = clamp(0, this.currentTime / this.duration, 1)\r\n\r\n      completed = linearProgress \u003e= 1\r\n      const easedProgress = completed ? 1 : this.easing(linearProgress)\r\n      this.value = this.from + (this.to - this.from) * easedProgress\r\n    } else if (this.lerp) {\r\n      this.value = damp(this.value, this.to, this.lerp * 60, deltaTime)\r\n      if (Math.round(this.value) === this.to) {\r\n        this.value = this.to\r\n        completed = true\r\n      }\r\n    } else {\r\n      // If no easing or lerp, just jump to the end value\r\n      this.value = this.to\r\n      completed = true\r\n    }\r\n\r\n    if (completed) {\r\n      this.stop()\r\n    }\r\n\r\n    // Call the onUpdate callback with the current value and completed status\r\n    this.onUpdate?.(this.value, completed)\r\n  }\r\n\r\n  /** Stop the animation */\r\n  stop() {\r\n    this.isRunning = false\r\n  }\r\n\r\n  /**\r\n   * Set up the animation from a starting value to an ending value\r\n   * with optional parameters for lerping, duration, easing, and onUpdate callback\r\n   *\r\n   * @param from - The starting value\r\n   * @param to - The ending value\r\n   * @param options - Options for the animation\r\n   */\r\n  fromTo(\r\n    from: number,\r\n    to: number,\r\n    { lerp, duration, easing, onStart, onUpdate }: FromToOptions\r\n  ) {\r\n    this.from = this.value = from\r\n    this.to = to\r\n    this.lerp = lerp\r\n    this.duration = duration\r\n    this.easing = easing\r\n    this.currentTime = 0\r\n    this.isRunning = true\r\n\r\n    onStart?.()\r\n    this.onUpdate = onUpdate\r\n  }\r\n}\r\n","import { debounce } from './debounce'\r\n\r\n/**\r\n * Dimensions class to handle the size of the content and wrapper\r\n *\r\n * @example\r\n * const dimensions = new Dimensions(wrapper, content)\r\n * dimensions.on('resize', (e) =\u003e {\r\n *   console.log(e.width, e.height)\r\n * })\r\n */\r\nexport class Dimensions {\r\n  width = 0\r\n  height = 0\r\n  scrollHeight = 0\r\n  scrollWidth = 0\r\n\r\n  // These are instanciated in the constructor as they need information from the options\r\n  private debouncedResize?: (...args: unknown[]) =\u003e void\r\n  private wrapperResizeObserver?: ResizeObserver\r\n  private contentResizeObserver?: ResizeObserver\r\n\r\n  constructor(\r\n    private wrapper: HTMLElement | Window,\r\n    private content: HTMLElement,\r\n    { autoResize = true, debounce: debounceValue = 250 } = {}\r\n  ) {\r\n    if (autoResize) {\r\n      this.debouncedResize = debounce(this.resize, debounceValue)\r\n\r\n      if (this.wrapper instanceof Window) {\r\n        window.addEventListener('resize', this.debouncedResize, false)\r\n      } else {\r\n        this.wrapperResizeObserver = new ResizeObserver(this.debouncedResize)\r\n        this.wrapperResizeObserver.observe(this.wrapper)\r\n      }\r\n\r\n      this.contentResizeObserver = new ResizeObserver(this.debouncedResize)\r\n      this.contentResizeObserver.observe(this.content)\r\n    }\r\n\r\n    this.resize()\r\n  }\r\n\r\n  destroy() {\r\n    this.wrapperResizeObserver?.disconnect()\r\n    this.contentResizeObserver?.disconnect()\r\n\r\n    if (this.wrapper === window \u0026\u0026 this.debouncedResize) {\r\n      window.removeEventListener('resize', this.debouncedResize, false)\r\n    }\r\n  }\r\n\r\n  resize = () =\u003e {\r\n    this.onWrapperResize()\r\n    this.onContentResize()\r\n  }\r\n\r\n  onWrapperResize = () =\u003e {\r\n    if (this.wrapper instanceof Window) {\r\n      this.width = window.innerWidth\r\n      this.height = window.innerHeight\r\n    } else {\r\n      this.width = this.wrapper.clientWidth\r\n      this.height = this.wrapper.clientHeight\r\n    }\r\n  }\r\n\r\n  onContentResize = () =\u003e {\r\n    if (this.wrapper instanceof Window) {\r\n      this.scrollHeight = this.content.scrollHeight\r\n      this.scrollWidth = this.content.scrollWidth\r\n    } else {\r\n      this.scrollHeight = this.wrapper.scrollHeight\r\n      this.scrollWidth = this.wrapper.scrollWidth\r\n    }\r\n  }\r\n\r\n  get limit() {\r\n    return {\r\n      x: this.scrollWidth - this.width,\r\n      y: this.scrollHeight - this.height,\r\n    }\r\n  }\r\n}\r\n","export function debounce\u003cCB extends (...args: any[]) =\u003e void\u003e(\r\n  callback: CB,\r\n  delay: number\r\n) {\r\n  let timer: number | undefined\r\n  return function \u003cT\u003e(this: T, ...args: Parameters\u003ctypeof callback\u003e) {\r\n    let context = this\r\n    clearTimeout(timer)\r\n    timer = setTimeout(() =\u003e {\r\n      timer = undefined\r\n      callback.apply(context, args)\r\n    }, delay)\r\n  }\r\n}\r\n","/**\r\n * Emitter class to handle events\r\n * @example\r\n * const emitter = new Emitter()\r\n * emitter.on('event', (data) =\u003e {\r\n *   console.log(data)\r\n * })\r\n * emitter.emit('event', 'data')\r\n */\r\nexport class Emitter {\r\n  private events: Record\u003c\r\n    string,\r\n    Array\u003c(...args: unknown[]) =\u003e void\u003e | undefined\r\n  \u003e = {}\r\n\r\n  /**\r\n   * Emit an event with the given data\r\n   * @param event Event name\r\n   * @param args Data to pass to the event handlers\r\n   */\r\n  emit(event: string, ...args: unknown[]) {\r\n    let callbacks = this.events[event] || []\r\n    for (let i = 0, length = callbacks.length; i \u003c length; i++) {\r\n      callbacks[i]?.(...args)\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Add a callback to the event\r\n   * @param event Event name\r\n   * @param cb Callback function\r\n   * @returns Unsubscribe function\r\n   */\r\n  on\u003cCB extends (...args: any[]) =\u003e void\u003e(event: string, cb: CB) {\r\n    // Add the callback to the event's callback list, or create a new list with the callback\r\n    this.events[event]?.push(cb) || (this.events[event] = [cb])\r\n\r\n    // Return an unsubscribe function\r\n    return () =\u003e {\r\n      this.events[event] = this.events[event]?.filter((i) =\u003e cb !== i)\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Remove a callback from the event\r\n   * @param event Event name\r\n   * @param callback Callback function\r\n   */\r\n  off\u003cCB extends (...args: any[]) =\u003e void\u003e(event: string, callback: CB) {\r\n    this.events[event] = this.events[event]?.filter((i) =\u003e callback !== i)\r\n  }\r\n\r\n  /**\r\n   * Remove all event listeners and clean up\r\n   */\r\n  destroy() {\r\n    this.events = {}\r\n  }\r\n}\r\n","import { Emitter } from './emitter'\r\nimport { VirtualScrollCallback } from './types'\r\n\r\nconst LINE_HEIGHT = 100 / 6\r\nconst listenerOptions: AddEventListenerOptions = { passive: false }\r\n\r\nexport class VirtualScroll {\r\n  touchStart = {\r\n    x: 0,\r\n    y: 0,\r\n  }\r\n  lastDelta = {\r\n    x: 0,\r\n    y: 0,\r\n  }\r\n  window = {\r\n    width: 0,\r\n    height: 0,\r\n  }\r\n  private emitter = new Emitter()\r\n\r\n  constructor(\r\n    private element: HTMLElement,\r\n    private options = { wheelMultiplier: 1, touchMultiplier: 1 }\r\n  ) {\r\n    window.addEventListener('resize', this.onWindowResize, false)\r\n    this.onWindowResize()\r\n\r\n    this.element.addEventListener('wheel', this.onWheel, listenerOptions)\r\n    this.element.addEventListener(\r\n      'touchstart',\r\n      this.onTouchStart,\r\n      listenerOptions\r\n    )\r\n    this.element.addEventListener(\r\n      'touchmove',\r\n      this.onTouchMove,\r\n      listenerOptions\r\n    )\r\n    this.element.addEventListener('touchend', this.onTouchEnd, listenerOptions)\r\n  }\r\n\r\n  /**\r\n   * Add an event listener for the given event and callback\r\n   *\r\n   * @param event Event name\r\n   * @param callback Callback function\r\n   */\r\n  on(event: string, callback: VirtualScrollCallback) {\r\n    return this.emitter.on(event, callback)\r\n  }\r\n\r\n  /** Remove all event listeners and clean up */\r\n  destroy() {\r\n    this.emitter.destroy()\r\n\r\n    window.removeEventListener('resize', this.onWindowResize, false)\r\n\r\n    this.element.removeEventListener('wheel', this.onWheel, listenerOptions)\r\n    this.element.removeEventListener(\r\n      'touchstart',\r\n      this.onTouchStart,\r\n      listenerOptions\r\n    )\r\n    this.element.removeEventListener(\r\n      'touchmove',\r\n      this.onTouchMove,\r\n      listenerOptions\r\n    )\r\n    this.element.removeEventListener(\r\n      'touchend',\r\n      this.onTouchEnd,\r\n      listenerOptions\r\n    )\r\n  }\r\n\r\n  /**\r\n   * Event handler for 'touchstart' event\r\n   *\r\n   * @param event Touch event\r\n   */\r\n  onTouchStart = (event: TouchEvent) =\u003e {\r\n    // @ts-expect-error - event.targetTouches is not defined\r\n    const { clientX, clientY } = event.targetTouches\r\n      ? event.targetTouches[0]\r\n      : event\r\n\r\n    this.touchStart.x = clientX\r\n    this.touchStart.y = clientY\r\n\r\n    this.lastDelta = {\r\n      x: 0,\r\n      y: 0,\r\n    }\r\n\r\n    this.emitter.emit('scroll', {\r\n      deltaX: 0,\r\n      deltaY: 0,\r\n      event,\r\n    })\r\n  }\r\n\r\n  /** Event handler for 'touchmove' event */\r\n  onTouchMove = (event: TouchEvent) =\u003e {\r\n    // @ts-expect-error - event.targetTouches is not defined\r\n    const { clientX, clientY } = event.targetTouches\r\n      ? event.targetTouches[0]\r\n      : event\r\n\r\n    const deltaX = -(clientX - this.touchStart.x) * this.options.touchMultiplier\r\n    const deltaY = -(clientY - this.touchStart.y) * this.options.touchMultiplier\r\n\r\n    this.touchStart.x = clientX\r\n    this.touchStart.y = clientY\r\n\r\n    this.lastDelta = {\r\n      x: deltaX,\r\n      y: deltaY,\r\n    }\r\n\r\n    this.emitter.emit('scroll', {\r\n      deltaX,\r\n      deltaY,\r\n      event,\r\n    })\r\n  }\r\n\r\n  onTouchEnd = (event: TouchEvent) =\u003e {\r\n    this.emitter.emit('scroll', {\r\n      deltaX: this.lastDelta.x,\r\n      deltaY: this.lastDelta.y,\r\n      event,\r\n    })\r\n  }\r\n\r\n  /** Event handler for 'wheel' event */\r\n  onWheel = (event: WheelEvent) =\u003e {\r\n    let { deltaX, deltaY, deltaMode } = event\r\n\r\n    const multiplierX =\r\n      deltaMode === 1 ? LINE_HEIGHT : deltaMode === 2 ? this.window.width : 1\r\n    const multiplierY =\r\n      deltaMode === 1 ? LINE_HEIGHT : deltaMode === 2 ? this.window.height : 1\r\n\r\n    deltaX *= multiplierX\r\n    deltaY *= multiplierY\r\n\r\n    deltaX *= this.options.wheelMultiplier\r\n    deltaY *= this.options.wheelMultiplier\r\n\r\n    this.emitter.emit('scroll', { deltaX, deltaY, event })\r\n  }\r\n\r\n  onWindowResize = () =\u003e {\r\n    this.window = {\r\n      width: window.innerWidth,\r\n      height: window.innerHeight,\r\n    }\r\n  }\r\n}\r\n","import { version } from '../../../package.json'\r\nimport { Animate } from './animate'\r\nimport { Dimensions } from './dimensions'\r\nimport { Emitter } from './emitter'\r\nimport { clamp, modulo } from './maths'\r\nimport type {\r\n  LenisEvent,\r\n  LenisOptions,\r\n  ScrollCallback,\r\n  Scrolling,\r\n  ScrollToOptions,\r\n  UserData,\r\n  VirtualScrollCallback,\r\n  VirtualScrollData,\r\n} from './types'\r\nimport { VirtualScroll } from './virtual-scroll'\r\n\r\n// Types\r\nexport * from './types'\r\n\r\n// Technical explanation\r\n// - listen to 'wheel' events\r\n// - prevent 'wheel' event to prevent scroll\r\n// - normalize wheel delta\r\n// - add delta to targetScroll\r\n// - animate scroll to targetScroll (smooth context)\r\n// - if animation is not running, listen to 'scroll' events (native context)\r\n\r\ntype OptionalPick\u003cT, F extends keyof T\u003e = Omit\u003cT, F\u003e \u0026 Partial\u003cPick\u003cT, F\u003e\u003e\r\n\r\nexport default class Lenis {\r\n  private _isScrolling: Scrolling = false // true when scroll is animating\r\n  private _isStopped = false // true if user should not be able to scroll - enable/disable programmatically\r\n  private _isLocked = false // same as isStopped but enabled/disabled when scroll reaches target\r\n  private _preventNextNativeScrollEvent = false\r\n  private _resetVelocityTimeout: number | null = null\r\n\r\n  /**\r\n   * Whether or not the user is touching the screen\r\n   */\r\n  isTouching?: boolean\r\n  /**\r\n   * The time in ms since the lenis instance was created\r\n   */\r\n  time = 0\r\n  /**\r\n   * User data that will be forwarded through the scroll event\r\n   *\r\n   * @example\r\n   * lenis.scrollTo(100, {\r\n   *   userData: {\r\n   *     foo: 'bar'\r\n   *   }\r\n   * })\r\n   */\r\n  userData: UserData = {}\r\n  /**\r\n   * The last velocity of the scroll\r\n   */\r\n  lastVelocity = 0\r\n  /**\r\n   * The current velocity of the scroll\r\n   */\r\n  velocity = 0\r\n  /**\r\n   * The direction of the scroll\r\n   */\r\n  direction: 1 | -1 | 0 = 0\r\n  /**\r\n   * The options passed to the lenis instance\r\n   */\r\n  options: OptionalPick\u003c\r\n    Required\u003cLenisOptions\u003e,\r\n    'duration' | 'prevent' | 'virtualScroll'\r\n  \u003e\r\n  /**\r\n   * The target scroll value\r\n   */\r\n  targetScroll: number\r\n  /**\r\n   * The animated scroll value\r\n   */\r\n  animatedScroll: number\r\n\r\n  // These are instanciated here as they don't need information from the options\r\n  private readonly animate = new Animate()\r\n  private readonly emitter = new Emitter()\r\n  // These are instanciated in the constructor as they need information from the options\r\n  readonly dimensions: Dimensions // This is not private because it's used in the Snap class\r\n  private readonly virtualScroll: VirtualScroll\r\n\r\n  constructor({\r\n    wrapper = window,\r\n    content = document.documentElement,\r\n    eventsTarget = wrapper,\r\n    smoothWheel = true,\r\n    syncTouch = false,\r\n    syncTouchLerp = 0.075,\r\n    touchInertiaMultiplier = 35,\r\n    duration, // in seconds\r\n    easing = (t) =\u003e Math.min(1, 1.001 - Math.pow(2, -10 * t)),\r\n    lerp = 0.1,\r\n    infinite = false,\r\n    orientation = 'vertical', // vertical, horizontal\r\n    gestureOrientation = 'vertical', // vertical, horizontal, both\r\n    touchMultiplier = 1,\r\n    wheelMultiplier = 1,\r\n    autoResize = true,\r\n    prevent,\r\n    virtualScroll,\r\n    __experimental__naiveDimensions = false,\r\n  }: LenisOptions = {}) {\r\n    // Set version\r\n    window.lenisVersion = version\r\n\r\n    // Check if wrapper is html or body, fallback to window\r\n    if (\r\n      !wrapper ||\r\n      wrapper === document.documentElement ||\r\n      wrapper === document.body\r\n    ) {\r\n      wrapper = window\r\n    }\r\n\r\n    // Setup options\r\n    this.options = {\r\n      wrapper,\r\n      content,\r\n      eventsTarget,\r\n      smoothWheel,\r\n      syncTouch,\r\n      syncTouchLerp,\r\n      touchInertiaMultiplier,\r\n      duration,\r\n      easing,\r\n      lerp,\r\n      infinite,\r\n      gestureOrientation,\r\n      orientation,\r\n      touchMultiplier,\r\n      wheelMultiplier,\r\n      autoResize,\r\n      prevent,\r\n      virtualScroll,\r\n      __experimental__naiveDimensions,\r\n    }\r\n\r\n    // Setup dimensions instance\r\n    this.dimensions = new Dimensions(wrapper, content, { autoResize })\r\n\r\n    // Setup class name\r\n    this.updateClassName()\r\n\r\n    // Set the initial scroll value for all scroll information\r\n    this.targetScroll = this.animatedScroll = this.actualScroll\r\n\r\n    // Add event listeners\r\n    this.options.wrapper.addEventListener('scroll', this.onNativeScroll, false)\r\n\r\n    this.options.wrapper.addEventListener(\r\n      'pointerdown',\r\n      this.onPointerDown as EventListener,\r\n      false\r\n    )\r\n\r\n    // Setup virtual scroll instance\r\n    this.virtualScroll = new VirtualScroll(eventsTarget as HTMLElement, {\r\n      touchMultiplier,\r\n      wheelMultiplier,\r\n    })\r\n    this.virtualScroll.on('scroll', this.onVirtualScroll)\r\n  }\r\n\r\n  /**\r\n   * Destroy the lenis instance, remove all event listeners and clean up the class name\r\n   */\r\n  destroy() {\r\n    this.emitter.destroy()\r\n\r\n    this.options.wrapper.removeEventListener(\r\n      'scroll',\r\n      this.onNativeScroll,\r\n      false\r\n    )\r\n    this.options.wrapper.removeEventListener(\r\n      'pointerdown',\r\n      this.onPointerDown as EventListener,\r\n      false\r\n    )\r\n\r\n    this.virtualScroll.destroy()\r\n    this.dimensions.destroy()\r\n\r\n    this.cleanUpClassName()\r\n  }\r\n\r\n  /**\r\n   * Add an event listener for the given event and callback\r\n   *\r\n   * @param event Event name\r\n   * @param callback Callback function\r\n   * @returns Unsubscribe function\r\n   */\r\n  on(event: 'scroll', callback: ScrollCallback): () =\u003e void\r\n  on(event: 'virtual-scroll', callback: VirtualScrollCallback): () =\u003e void\r\n  on(event: LenisEvent, callback: any) {\r\n    return this.emitter.on(event, callback)\r\n  }\r\n\r\n  /**\r\n   * Remove an event listener for the given event and callback\r\n   *\r\n   * @param event Event name\r\n   * @param callback Callback function\r\n   */\r\n  off(event: 'scroll', callback: ScrollCallback): void\r\n  off(event: 'virtual-scroll', callback: VirtualScrollCallback): void\r\n  off(event: LenisEvent, callback: any) {\r\n    return this.emitter.off(event, callback)\r\n  }\r\n\r\n  private setScroll(scroll: number) {\r\n    // apply scroll value immediately\r\n    if (this.isHorizontal) {\r\n      this.rootElement.scrollLeft = scroll\r\n    } else {\r\n      this.rootElement.scrollTop = scroll\r\n    }\r\n  }\r\n\r\n  private onPointerDown = (event: PointerEvent | MouseEvent) =\u003e {\r\n    if (event.button === 1) {\r\n      this.reset()\r\n    }\r\n  }\r\n\r\n  private onVirtualScroll = (data: VirtualScrollData) =\u003e {\r\n    if (\r\n      typeof this.options.virtualScroll === 'function' \u0026\u0026\r\n      this.options.virtualScroll(data) === false\r\n    )\r\n      return\r\n\r\n    const { deltaX, deltaY, event } = data\r\n\r\n    this.emitter.emit('virtual-scroll', { deltaX, deltaY, event })\r\n\r\n    // keep zoom feature\r\n    if (event.ctrlKey) return\r\n\r\n    const isTouch = event.type.includes('touch')\r\n    const isWheel = event.type.includes('wheel')\r\n\r\n    this.isTouching = event.type === 'touchstart' || event.type === 'touchmove'\r\n    // if (event.type === 'touchend') {\r\n    //   console.log('touchend', this.scroll)\r\n    //   // this.lastVelocity = this.velocity\r\n    //   // this.velocity = 0\r\n    //   // this.isScrolling = false\r\n    //   this.emit({ type: 'touchend' })\r\n    //   // alert('touchend')\r\n    //   return\r\n    // }\r\n\r\n    const isTapToStop =\r\n      this.options.syncTouch \u0026\u0026\r\n      isTouch \u0026\u0026\r\n      event.type === 'touchstart' \u0026\u0026\r\n      !this.isStopped \u0026\u0026\r\n      !this.isLocked\r\n\r\n    if (isTapToStop) {\r\n      this.reset()\r\n      return\r\n    }\r\n\r\n    const isClick = deltaX === 0 \u0026\u0026 deltaY === 0 // click event\r\n\r\n    // const isPullToRefresh =\r\n    //   this.options.gestureOrientation === 'vertical' \u0026\u0026\r\n    //   this.scroll === 0 \u0026\u0026\r\n    //   !this.options.infinite \u0026\u0026\r\n    //   deltaY \u003c= 5 // touch pull to refresh, not reliable yet\r\n\r\n    const isUnknownGesture =\r\n      (this.options.gestureOrientation === 'vertical' \u0026\u0026 deltaY === 0) ||\r\n      (this.options.gestureOrientation === 'horizontal' \u0026\u0026 deltaX === 0)\r\n\r\n    if (isClick || isUnknownGesture) {\r\n      // console.log('prevent')\r\n      return\r\n    }\r\n\r\n    // catch if scrolling on nested scroll elements\r\n    let composedPath = event.composedPath()\r\n    composedPath = composedPath.slice(0, composedPath.indexOf(this.rootElement)) // remove parents elements\r\n\r\n    const prevent = this.options.prevent\r\n\r\n    if (\r\n      !!composedPath.find(\r\n        (node) =\u003e\r\n          node instanceof HTMLElement \u0026\u0026\r\n          ((typeof prevent === 'function' \u0026\u0026 prevent?.(node)) ||\r\n            node.hasAttribute?.('data-lenis-prevent') ||\r\n            (isTouch \u0026\u0026 node.hasAttribute?.('data-lenis-prevent-touch')) ||\r\n            (isWheel \u0026\u0026 node.hasAttribute?.('data-lenis-prevent-wheel')) ||\r\n            (node.classList?.contains('lenis') \u0026\u0026\r\n              !node.classList?.contains('lenis-stopped'))) // nested lenis instance\r\n      )\r\n    )\r\n      return\r\n\r\n    if (this.isStopped || this.isLocked) {\r\n      event.preventDefault() // this will stop forwarding the event to the parent, this is problematic\r\n      return\r\n    }\r\n\r\n    const isSmooth =\r\n      (this.options.syncTouch \u0026\u0026 isTouch) ||\r\n      (this.options.smoothWheel \u0026\u0026 isWheel)\r\n\r\n    if (!isSmooth) {\r\n      this.isScrolling = 'native'\r\n      this.animate.stop()\r\n      return\r\n    }\r\n\r\n    event.preventDefault()\r\n\r\n    let delta = deltaY\r\n    if (this.options.gestureOrientation === 'both') {\r\n      delta = Math.abs(deltaY) \u003e Math.abs(deltaX) ? deltaY : deltaX\r\n    } else if (this.options.gestureOrientation === 'horizontal') {\r\n      delta = deltaX\r\n    }\r\n\r\n    const syncTouch = isTouch \u0026\u0026 this.options.syncTouch\r\n    const isTouchEnd = isTouch \u0026\u0026 event.type === 'touchend'\r\n\r\n    const hasTouchInertia = isTouchEnd \u0026\u0026 Math.abs(delta) \u003e 5\r\n\r\n    if (hasTouchInertia) {\r\n      delta = this.velocity * this.options.touchInertiaMultiplier\r\n    }\r\n\r\n    this.scrollTo(this.targetScroll + delta, {\r\n      programmatic: false,\r\n      ...(syncTouch\r\n        ? {\r\n            lerp: hasTouchInertia ? this.options.syncTouchLerp : 1,\r\n          }\r\n        : {\r\n            lerp: this.options.lerp,\r\n            duration: this.options.duration,\r\n            easing: this.options.easing,\r\n          }),\r\n    })\r\n  }\r\n\r\n  /**\r\n   * Force lenis to recalculate the dimensions\r\n   */\r\n  resize() {\r\n    this.dimensions.resize()\r\n    this.animatedScroll = this.targetScroll = this.actualScroll\r\n    this.emit()\r\n  }\r\n\r\n  private emit() {\r\n    this.emitter.emit('scroll', this)\r\n  }\r\n\r\n  private onNativeScroll = () =\u003e {\r\n    if (this._resetVelocityTimeout !== null) {\r\n      clearTimeout(this._resetVelocityTimeout)\r\n      this._resetVelocityTimeout = null\r\n    }\r\n\r\n    if (this._preventNextNativeScrollEvent) {\r\n      this._preventNextNativeScrollEvent = false\r\n      return\r\n    }\r\n\r\n    if (this.isScrolling === false || this.isScrolling === 'native') {\r\n      const lastScroll = this.animatedScroll\r\n      this.animatedScroll = this.targetScroll = this.actualScroll\r\n      this.lastVelocity = this.velocity\r\n      this.velocity = this.animatedScroll - lastScroll\r\n      this.direction = Math.sign(\r\n        this.animatedScroll - lastScroll\r\n      ) as Lenis['direction']\r\n      this.isScrolling = 'native'\r\n      this.emit()\r\n\r\n      if (this.velocity !== 0) {\r\n        this._resetVelocityTimeout = setTimeout(() =\u003e {\r\n          this.lastVelocity = this.velocity\r\n          this.velocity = 0\r\n          this.isScrolling = false\r\n          this.emit()\r\n        }, 400)\r\n      }\r\n    }\r\n  }\r\n\r\n  private reset() {\r\n    this.isLocked = false\r\n    this.isScrolling = false\r\n    this.animatedScroll = this.targetScroll = this.actualScroll\r\n    this.lastVelocity = this.velocity = 0\r\n    this.animate.stop()\r\n  }\r\n\r\n  /**\r\n   * Start lenis scroll after it has been stopped\r\n   */\r\n  start() {\r\n    if (!this.isStopped) return\r\n    this.isStopped = false\r\n\r\n    this.reset()\r\n  }\r\n\r\n  /**\r\n   * Stop lenis scroll\r\n   */\r\n  stop() {\r\n    if (this.isStopped) return\r\n    this.isStopped = true\r\n    this.animate.stop()\r\n\r\n    this.reset()\r\n  }\r\n\r\n  /**\r\n   * RequestAnimationFrame for lenis\r\n   *\r\n   * @param time The time in ms from an external clock like `requestAnimationFrame` or Tempus\r\n   */\r\n  raf(time: number) {\r\n    const deltaTime = time - (this.time || time)\r\n    this.time = time\r\n\r\n    this.animate.advance(deltaTime * 0.001)\r\n  }\r\n\r\n  /**\r\n   * Scroll to a target value\r\n   *\r\n   * @param target The target value to scroll to\r\n   * @param options The options for the scroll\r\n   *\r\n   * @example\r\n   * lenis.scrollTo(100, {\r\n   *   offset: 100,\r\n   *   duration: 1,\r\n   *   easing: (t) =\u003e 1 - Math.cos((t * Math.PI) / 2),\r\n   *   lerp: 0.1,\r\n   *   onStart: () =\u003e {\r\n   *     console.log('onStart')\r\n   *   },\r\n   *   onComplete: () =\u003e {\r\n   *     console.log('onComplete')\r\n   *   },\r\n   * })\r\n   */\r\n  scrollTo(\r\n    target: number | string | HTMLElement,\r\n    {\r\n      offset = 0,\r\n      immediate = false,\r\n      lock = false,\r\n      duration = this.options.duration,\r\n      easing = this.options.easing,\r\n      lerp = this.options.lerp,\r\n      onStart,\r\n      onComplete,\r\n      force = false, // scroll even if stopped\r\n      programmatic = true, // called from outside of the class\r\n      userData,\r\n    }: ScrollToOptions = {}\r\n  ) {\r\n    if ((this.isStopped || this.isLocked) \u0026\u0026 !force) return\r\n\r\n    // keywords\r\n    if (\r\n      typeof target === 'string' \u0026\u0026\r\n      ['top', 'left', 'start'].includes(target)\r\n    ) {\r\n      target = 0\r\n    } else if (\r\n      typeof target === 'string' \u0026\u0026\r\n      ['bottom', 'right', 'end'].includes(target)\r\n    ) {\r\n      target = this.limit\r\n    } else {\r\n      let node\r\n\r\n      if (typeof target === 'string') {\r\n        // CSS selector\r\n        node = document.querySelector(target)\r\n      } else if (target instanceof HTMLElement \u0026\u0026 target?.nodeType) {\r\n        // Node element\r\n        node = target\r\n      }\r\n\r\n      if (node) {\r\n        if (this.options.wrapper !== window) {\r\n          // nested scroll offset correction\r\n          const wrapperRect = this.rootElement.getBoundingClientRect()\r\n          offset -= this.isHorizontal ? wrapperRect.left : wrapperRect.top\r\n        }\r\n\r\n        const rect = node.getBoundingClientRect()\r\n\r\n        target =\r\n          (this.isHorizontal ? rect.left : rect.top) + this.animatedScroll\r\n      }\r\n    }\r\n\r\n    if (typeof target !== 'number') return\r\n\r\n    target += offset\r\n    target = Math.round(target)\r\n\r\n    if (this.options.infinite) {\r\n      if (programmatic) {\r\n        this.targetScroll = this.animatedScroll = this.scroll\r\n      }\r\n    } else {\r\n      target = clamp(0, target, this.limit)\r\n    }\r\n\r\n    if (target === this.targetScroll) {\r\n      onStart?.(this)\r\n      onComplete?.(this)\r\n      return\r\n    }\r\n\r\n    this.userData = userData ?? {}\r\n\r\n    if (immediate) {\r\n      this.animatedScroll = this.targetScroll = target\r\n      this.setScroll(this.scroll)\r\n      this.reset()\r\n      this.preventNextNativeScrollEvent()\r\n      this.emit()\r\n      onComplete?.(this)\r\n      this.userData = {}\r\n      return\r\n    }\r\n\r\n    if (!programmatic) {\r\n      this.targetScroll = target\r\n    }\r\n\r\n    this.animate.fromTo(this.animatedScroll, target, {\r\n      duration,\r\n      easing,\r\n      lerp,\r\n      onStart: () =\u003e {\r\n        // started\r\n        if (lock) this.isLocked = true\r\n        this.isScrolling = 'smooth'\r\n        onStart?.(this)\r\n      },\r\n      onUpdate: (value: number, completed: boolean) =\u003e {\r\n        this.isScrolling = 'smooth'\r\n\r\n        // updated\r\n        this.lastVelocity = this.velocity\r\n        this.velocity = value - this.animatedScroll\r\n        this.direction = Math.sign(this.velocity) as Lenis['direction']\r\n\r\n        this.animatedScroll = value\r\n        this.setScroll(this.scroll)\r\n\r\n        if (programmatic) {\r\n          // wheel during programmatic should stop it\r\n          this.targetScroll = value\r\n        }\r\n\r\n        if (!completed) this.emit()\r\n\r\n        if (completed) {\r\n          this.reset()\r\n          this.emit()\r\n          onComplete?.(this)\r\n          this.userData = {}\r\n          // avoid emitting event twice\r\n          this.preventNextNativeScrollEvent()\r\n        }\r\n      },\r\n    })\r\n  }\r\n\r\n  private preventNextNativeScrollEvent() {\r\n    this._preventNextNativeScrollEvent = true\r\n\r\n    requestAnimationFrame(() =\u003e {\r\n      this._preventNextNativeScrollEvent = false\r\n    })\r\n  }\r\n\r\n  /**\r\n   * The root element on which lenis is instanced\r\n   */\r\n  get rootElement() {\r\n    return (\r\n      this.options.wrapper === window\r\n        ? document.documentElement\r\n        : this.options.wrapper\r\n    ) as HTMLElement\r\n  }\r\n\r\n  /**\r\n   * The limit which is the maximum scroll value\r\n   */\r\n  get limit() {\r\n    if (this.options.__experimental__naiveDimensions) {\r\n      if (this.isHorizontal) {\r\n        return this.rootElement.scrollWidth - this.rootElement.clientWidth\r\n      } else {\r\n        return this.rootElement.scrollHeight - this.rootElement.clientHeight\r\n      }\r\n    } else {\r\n      return this.dimensions.limit[this.isHorizontal ? 'x' : 'y']\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Whether or not the scroll is horizontal\r\n   */\r\n  get isHorizontal() {\r\n    return this.options.orientation === 'horizontal'\r\n  }\r\n\r\n  /**\r\n   * The actual scroll value\r\n   */\r\n  get actualScroll() {\r\n    // value browser takes into account\r\n    return this.isHorizontal\r\n      ? this.rootElement.scrollLeft\r\n      : this.rootElement.scrollTop\r\n  }\r\n\r\n  /**\r\n   * The current scroll value\r\n   */\r\n  get scroll() {\r\n    return this.options.infinite\r\n      ? modulo(this.animatedScroll, this.limit)\r\n      : this.animatedScroll\r\n  }\r\n\r\n  /**\r\n   * The progress of the scroll relative to the limit\r\n   */\r\n  get progress() {\r\n    // avoid progress to be NaN\r\n    return this.limit === 0 ? 1 : this.scroll / this.limit\r\n  }\r\n\r\n  /**\r\n   * Current scroll state\r\n   */\r\n  get isScrolling() {\r\n    return this._isScrolling\r\n  }\r\n\r\n  private set isScrolling(value: Scrolling) {\r\n    if (this._isScrolling !== value) {\r\n      this._isScrolling = value\r\n      this.updateClassName()\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if lenis is stopped\r\n   */\r\n  get isStopped() {\r\n    return this._isStopped\r\n  }\r\n\r\n  private set isStopped(value: boolean) {\r\n    if (this._isStopped !== value) {\r\n      this._isStopped = value\r\n      this.updateClassName()\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if lenis is locked\r\n   */\r\n  get isLocked() {\r\n    return this._isLocked\r\n  }\r\n\r\n  private set isLocked(value: boolean) {\r\n    if (this._isLocked !== value) {\r\n      this._isLocked = value\r\n      this.updateClassName()\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if lenis is smooth scrolling\r\n   */\r\n  get isSmooth() {\r\n    return this.isScrolling === 'smooth'\r\n  }\r\n\r\n  /**\r\n   * The class name applied to the wrapper element\r\n   */\r\n  get className() {\r\n    let className = 'lenis'\r\n    if (this.isStopped) className += ' lenis-stopped'\r\n    if (this.isLocked) className += ' lenis-locked'\r\n    if (this.isScrolling) className += ' lenis-scrolling'\r\n    if (this.isScrolling === 'smooth') className += ' lenis-smooth'\r\n    return className\r\n  }\r\n\r\n  private updateClassName() {\r\n    this.cleanUpClassName()\r\n\r\n    this.rootElement.className =\r\n      `${this.rootElement.className} ${this.className}`.trim()\r\n  }\r\n\r\n  private cleanUpClassName() {\r\n    this.rootElement.className = this.rootElement.className\r\n      .replace(/lenis(-\\w+)?/g, '')\r\n      .trim()\r\n  }\r\n}\r\n"],"version":3}
