{"version":3,"file":"embla-carousel-wheel-gestures.cjs.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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"}