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