{"version":3,"file":"embla-carousel-wheel-gestures.cjs.development.js","sources":["../src/WheelGesturesPlugin.ts"],"sourcesContent":["import { EmblaCarouselType } from 'embla-carousel'\nimport { CreateOptionsType } from 'embla-carousel/components/Options'\nimport { OptionsHandlerType } from 'embla-carousel/components/OptionsHandler'\nimport { CreatePluginType } from 'embla-carousel/components/Plugins'\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 const unobserveTargetNode = wheelGestures.observe(targetNode)\n const offWheel = wheelGestures.on('wheel', handleWheel)\n\n let isStarted = false\n let startEvent: MouseEvent\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 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 // 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 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) {\n wheelGestureStarted(state)\n }\n\n if (!isStarted) return\n if (isEndingOrRelease) {\n wheelGestureEnded(state)\n } else {\n dispatchEvent(createRelativeMouseEvent('mousemove', state))\n }\n }\n\n cleanup = () => {\n unobserveTargetNode()\n offWheel()\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","unobserveTargetNode","observe","offWheel","on","handleWheel","isStarted","startEvent","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","skipSnaps","dragFree","maxX","containerRect","width","maxY","height","Math","max","min","clientX","clientY","screenX","screenY","movementX","movementY","button","bubbles","cancelable","composed","axisDelta","deltaX","deltaY","primaryAxisDelta","crossAxisDelta","isRelease","isMomentum","previous","isEndingOrRelease","isEnding","primaryAxisDeltaIsDominant","abs","self","name","destroy"],"mappings":"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"}