{"version":3,"file":"embla-carousel-wheel-gestures.umd.development.js","sources":["../src/WheelGesturesPlugin.ts"],"sourcesContent":["import { CreateOptionsType, CreatePluginType, EmblaCarouselType, OptionsHandlerType } from 'embla-carousel'\nimport WheelGestures, { WheelEventState } from 'wheel-gestures'\n\nexport type WheelGesturesPluginOptions = CreateOptionsType<{\n wheelDraggingClass: string\n forceWheelAxis?: 'x' | 'y'\n target?: Element\n}>\n\ntype WheelGesturesPluginType = CreatePluginType<{}, WheelGesturesPluginOptions>\n\nconst defaultOptions: WheelGesturesPluginOptions = {\n active: true,\n breakpoints: {},\n wheelDraggingClass: 'is-wheel-dragging',\n forceWheelAxis: undefined,\n target: undefined,\n}\n\nWheelGesturesPlugin.globalOptions = undefined as WheelGesturesPluginType['options'] | undefined\n\nconst __DEV__ = process.env.NODE_ENV !== 'production'\n\nexport function WheelGesturesPlugin(userOptions: WheelGesturesPluginType['options'] = {}): WheelGesturesPluginType {\n let options: WheelGesturesPluginOptions\n let cleanup = () => {}\n\n function init(embla: EmblaCarouselType, optionsHandler: OptionsHandlerType) {\n const { mergeOptions, optionsAtMedia } = optionsHandler\n const optionsBase = mergeOptions(defaultOptions, WheelGesturesPlugin.globalOptions)\n const allOptions = mergeOptions(optionsBase, userOptions)\n options = optionsAtMedia(allOptions)\n\n const engine = embla.internalEngine()\n const targetNode = options.target ?? (embla.containerNode().parentNode as Element)\n const wheelAxis = options.forceWheelAxis ?? engine.options.axis\n const wheelGestures = WheelGestures({\n preventWheelAction: wheelAxis,\n reverseSign: [true, true, false],\n })\n\n function updateSizeRelatedVariables() {\n scrollBoundaryThreshold = (wheelAxis === 'x' ? engine.containerRect.width : engine.containerRect.height) / 2\n }\n\n const unobserveTargetNode = wheelGestures.observe(targetNode)\n const offWheel = wheelGestures.on('wheel', handleWheel)\n\n let isStarted = false\n let startEvent: MouseEvent\n let overBoundaryAccumulation = 0\n let scrollBoundaryThreshold = 0\n let blockedWaitUntilGestureEnd = false\n\n updateSizeRelatedVariables()\n embla.on('resize', updateSizeRelatedVariables)\n\n function wheelGestureStarted(state: WheelEventState) {\n try {\n startEvent = new MouseEvent('mousedown', state.event)\n dispatchEvent(startEvent)\n } catch (e) {\n // Legacy Browsers like IE 10 & 11 will throw when attempting to create the Event\n if (__DEV__) {\n console.warn(\n 'Legacy browser requires events-polyfill (https://github.com/xiel/embla-carousel-wheel-gestures#legacy-browsers)'\n )\n }\n return cleanup()\n }\n\n isStarted = true\n overBoundaryAccumulation = 0\n addNativeMouseEventListeners()\n\n if (options.wheelDraggingClass) {\n targetNode.classList.add(options.wheelDraggingClass)\n }\n }\n\n function wheelGestureEnded(state: WheelEventState) {\n isStarted = false\n dispatchEvent(createRelativeMouseEvent('mouseup', state))\n removeNativeMouseEventListeners()\n\n if (options.wheelDraggingClass) {\n targetNode.classList.remove(options.wheelDraggingClass)\n }\n }\n\n function addNativeMouseEventListeners() {\n document.documentElement.addEventListener('mousemove', preventNativeMouseHandler, true)\n document.documentElement.addEventListener('mouseup', preventNativeMouseHandler, true)\n document.documentElement.addEventListener('mousedown', preventNativeMouseHandler, true)\n }\n\n function removeNativeMouseEventListeners() {\n document.documentElement.removeEventListener('mousemove', preventNativeMouseHandler, true)\n document.documentElement.removeEventListener('mouseup', preventNativeMouseHandler, true)\n document.documentElement.removeEventListener('mousedown', preventNativeMouseHandler, true)\n }\n\n function preventNativeMouseHandler(e: MouseEvent) {\n if (isStarted && e.isTrusted) {\n e.stopImmediatePropagation()\n }\n }\n\n function createRelativeMouseEvent(type: 'mousedown' | 'mousemove' | 'mouseup', state: WheelEventState) {\n let moveX, moveY\n\n if (wheelAxis === engine.options.axis) {\n ;[moveX, moveY] = state.axisMovement\n } else {\n // if emblas axis and the wheelAxis don't match, swap the axes to match the right embla events\n ;[moveY, moveX] = state.axisMovement\n }\n\n const { isAtBoundary } = checkIfAtBoundary(state)\n\n // Apply progressive rubber band damping when at boundaries\n if (isAtBoundary) {\n // Calculate progressive damping factor based on how far over boundary we are\n const progressRatio = Math.min(overBoundaryAccumulation / scrollBoundaryThreshold, 1)\n const dampingFactor = 0.25 + progressRatio * 0.5\n const counterMoveSign = moveX > 0 ? -1 : 1\n const counterMovement = overBoundaryAccumulation * counterMoveSign\n const dampingMovement = counterMovement * dampingFactor\n\n moveX += dampingMovement\n moveY += dampingMovement\n }\n\n // prevent skipping slides\n if (!engine.options.skipSnaps && !engine.options.dragFree) {\n const maxX = engine.containerRect.width\n const maxY = engine.containerRect.height\n\n moveX = moveX < 0 ? Math.max(moveX, -maxX) : Math.min(moveX, maxX)\n moveY = moveY < 0 ? Math.max(moveY, -maxY) : Math.min(moveY, maxY)\n }\n\n return new MouseEvent(type, {\n clientX: startEvent.clientX + moveX,\n clientY: startEvent.clientY + moveY,\n screenX: startEvent.screenX + moveX,\n screenY: startEvent.screenY + moveY,\n movementX: moveX,\n movementY: moveY,\n button: 0,\n bubbles: true,\n cancelable: true,\n composed: true,\n })\n }\n\n function dispatchEvent(event: UIEvent) {\n embla.containerNode().dispatchEvent(event)\n }\n\n function checkIfAtBoundary(state: WheelEventState) {\n const {\n axisDelta: [deltaX, deltaY],\n } = state\n const scrollProgress = embla.scrollProgress()\n const canScrollNext = scrollProgress < 1\n const canScrollPrev = scrollProgress > 0\n const primaryAxisDelta = wheelAxis === 'x' ? deltaX : deltaY\n const isScrollingNext = primaryAxisDelta < 0\n const isScrollingPrev = primaryAxisDelta > 0\n const isAtBoundary = (isScrollingNext && !canScrollNext) || (isScrollingPrev && !canScrollPrev)\n\n return {\n isAtBoundary,\n primaryAxisDelta,\n }\n }\n\n function isBoundaryThresholdReached(state: WheelEventState) {\n const { isAtBoundary, primaryAxisDelta } = checkIfAtBoundary(state)\n\n if (isAtBoundary && !state.isMomentum) {\n overBoundaryAccumulation += Math.abs(primaryAxisDelta)\n\n // End gesture if we exceed the threshold\n if (overBoundaryAccumulation > scrollBoundaryThreshold) {\n blockedWaitUntilGestureEnd = true\n wheelGestureEnded(state)\n return true\n }\n } else {\n // Reset accumulation when we can scroll or when not at boundary\n overBoundaryAccumulation = 0\n }\n\n return false\n }\n\n function handleWheel(state: WheelEventState) {\n const {\n axisDelta: [deltaX, deltaY],\n } = state\n const primaryAxisDelta = wheelAxis === 'x' ? deltaX : deltaY\n const crossAxisDelta = wheelAxis === 'x' ? deltaY : deltaX\n const isRelease = state.isMomentum && state.previous && !state.previous.isMomentum\n const isEndingOrRelease = (state.isEnding && !state.isMomentum) || isRelease\n const primaryAxisDeltaIsDominant = Math.abs(primaryAxisDelta) > Math.abs(crossAxisDelta)\n\n if (primaryAxisDeltaIsDominant && !isStarted && !state.isMomentum && !blockedWaitUntilGestureEnd) {\n wheelGestureStarted(state)\n }\n\n if (blockedWaitUntilGestureEnd && state.isEnding) {\n blockedWaitUntilGestureEnd = false\n }\n\n if (!isStarted) return\n\n if (isBoundaryThresholdReached(state)) return\n\n if (isEndingOrRelease) {\n wheelGestureEnded(state)\n } else {\n dispatchEvent(createRelativeMouseEvent('mousemove', state))\n }\n }\n\n cleanup = () => {\n unobserveTargetNode()\n offWheel()\n embla.off('resize', updateSizeRelatedVariables)\n removeNativeMouseEventListeners()\n }\n }\n\n const self: WheelGesturesPluginType = {\n name: 'wheelGestures',\n options: userOptions,\n init,\n destroy: () => cleanup(),\n }\n return self\n}\n\ndeclare module 'embla-carousel' {\n interface EmblaPluginsType {\n wheelGestures?: WheelGesturesPluginType\n }\n}\n"],"names":["defaultOptions","active","breakpoints","wheelDraggingClass","forceWheelAxis","undefined","target","WheelGesturesPlugin","globalOptions","userOptions","options","cleanup","init","embla","optionsHandler","mergeOptions","optionsAtMedia","optionsBase","allOptions","engine","internalEngine","targetNode","containerNode","parentNode","wheelAxis","axis","wheelGestures","WheelGestures","preventWheelAction","reverseSign","updateSizeRelatedVariables","scrollBoundaryThreshold","containerRect","width","height","unobserveTargetNode","observe","offWheel","on","handleWheel","isStarted","startEvent","overBoundaryAccumulation","blockedWaitUntilGestureEnd","wheelGestureStarted","state","MouseEvent","event","dispatchEvent","e","console","warn","addNativeMouseEventListeners","classList","add","wheelGestureEnded","createRelativeMouseEvent","removeNativeMouseEventListeners","remove","document","documentElement","addEventListener","preventNativeMouseHandler","removeEventListener","isTrusted","stopImmediatePropagation","type","moveX","moveY","axisMovement","checkIfAtBoundary","isAtBoundary","progressRatio","Math","min","dampingFactor","counterMoveSign","counterMovement","dampingMovement","skipSnaps","dragFree","maxX","maxY","max","clientX","clientY","screenX","screenY","movementX","movementY","button","bubbles","cancelable","composed","axisDelta","deltaX","deltaY","scrollProgress","canScrollNext","canScrollPrev","primaryAxisDelta","isScrollingNext","isScrollingPrev","isBoundaryThresholdReached","isMomentum","abs","crossAxisDelta","isRelease","previous","isEndingOrRelease","isEnding","primaryAxisDeltaIsDominant","off","self","name","destroy"],"mappings":"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"}