{"version":3,"sources":["../../scripts/minHeader.js","../../scripts/header.js","../../node_modules/browser-pack-flat/_prelude","../core/scope.ts","../core/interactions.ts","../core/Interaction.ts","../utils/arr.ts","../utils/domObjects.ts","../utils/isWindow.ts","../utils/window.ts","../utils/is.ts","../utils/browser.ts","../utils/domUtils.ts","../utils/clone.ts","../utils/pointerExtend.ts","../utils/hypot.ts","../utils/pointerUtils.ts","../utils/events.ts","../utils/extend.ts","../utils/rect.ts","../utils/getOriginXY.ts","../utils/normalizeListeners.ts","../utils/raf.ts","../utils/Signals.ts","../utils/index.ts","../core/defaultOptions.ts","../core/Eventable.ts","../core/Interactable.ts","../core/InteractableSet.ts","../core/BaseEvent.ts","../core/InteractEvent.ts","../core/PointerInfo.ts","../core/interactionFinder.ts","../actions/drag.ts","../actions/drop/DropEvent.ts","../actions/drop/index.ts","../actions/gesture.ts","../actions/resize.ts","../actions/index.ts","../auto-scroll/index.ts","../auto-start/InteractableMethods.ts","../auto-start/base.ts","../auto-start/dragAxis.ts","../auto-start/hold.ts","../auto-start/index.ts","../core/interactablePreventDefault.ts","../dev-tools/index.ts","../modifiers/base.ts","../inertia/index.ts","../modifiers/restrict/pointer.ts","../modifiers/restrict/edges.ts","../modifiers/restrict/rect.ts","../modifiers/restrict/size.ts","../modifiers/snap/pointer.ts","../modifiers/snap/size.ts","../modifiers/snap/edges.ts","../modifiers/index.ts","../pointer-events/PointerEvent.ts","../pointer-events/base.ts","../pointer-events/holdRepeat.ts","../pointer-events/interactableTargets.ts","../pointer-events/index.ts","../reflow/index.ts","../interact/interact.ts","../interact/index.ts","../utils/snappers/grid.ts","../utils/snappers/index.ts","index.ts","../../node_modules/browser-pack-flat/_postlude"],"names":[],"mappings":"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","file":"interact.min.js","sourceRoot":"","sourcesContent":["/* interact.js 1.6.2 | https://raw.github.com/taye/interact.js/master/LICENSE */\n","/**\n * interact.js 1.6.2\n *\n * Copyright (c) 2012-2019 Taye Adeyemi \n * Released under the MIT License.\n * https://raw.github.com/taye/interact.js/master/LICENSE\n */\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.interact = f()}})(function(){var define,module,exports;\nvar createModuleFactory = function createModuleFactory(t){var e;return function(r){return e||t(e={exports:{},parent:r},e.exports),e.exports}};\n","import * as utils from '@interactjs/utils'\nimport domObjects from '@interactjs/utils/domObjects'\nimport defaults from './defaultOptions'\nimport Eventable from './Eventable'\nimport InteractableBase from './Interactable'\nimport InteractableSet from './InteractableSet'\nimport InteractEvent from './InteractEvent'\nimport interactions from './interactions'\n\nconst {\n win,\n browser,\n raf,\n Signals,\n events,\n} = utils\n\nexport enum ActionName {\n}\n\nexport interface Actions {\n names: ActionName[]\n methodDict: { [key: string]: string }\n eventTypes: string[]\n}\n\nexport function createScope () {\n return new Scope()\n}\n\nexport type Defaults = typeof defaults\n\nexport interface Plugin {\n id?: string\n install (scope: Scope, options?: any): void\n [key: string]: any\n}\n\nexport class Scope {\n id = `__interact_scope_${Math.floor(Math.random() * 100)}`\n signals = new Signals()\n browser = browser\n events = events\n utils = utils\n defaults: Defaults = utils.clone(defaults) as Defaults\n Eventable = Eventable\n actions: Actions = {\n names: [],\n methodDict: {},\n eventTypes: [],\n }\n\n InteractEvent = InteractEvent\n Interactable!: typeof InteractableBase\n interactables = new InteractableSet(this)\n\n // main window\n _win!: Window\n\n // main document\n document!: Document\n\n // main window\n window!: Window\n\n // all documents being listened to\n documents: Array<{ doc: Document, options: any }> = []\n\n _plugins: Plugin[] = []\n _pluginMap: { [id: string]: Plugin } = {}\n\n constructor () {\n const scope = this as Scope\n\n ;(this as { Interactable: typeof InteractableBase }).Interactable = class Interactable extends InteractableBase implements InteractableBase {\n get _defaults () { return scope.defaults }\n\n set (options: any) {\n super.set(options)\n\n scope.interactables.signals.fire('set', {\n options,\n interactable: this,\n })\n\n return this\n }\n\n unset () {\n super.unset()\n for (let i = scope.interactions.list.length - 1; i >= 0; i--) {\n const interaction = scope.interactions.list[i]\n\n if (interaction.interactable === this) {\n interaction.stop()\n scope.interactions.signals.fire('destroy', { interaction })\n interaction.destroy()\n\n if (scope.interactions.list.length > 2) {\n scope.interactions.list.splice(i, 1)\n }\n }\n }\n\n scope.interactables.signals.fire('unset', { interactable: this })\n }\n }\n }\n\n onWindowUnload = (event: BeforeUnloadEvent) => this.removeDocument(event.target as Document)\n\n init (window: Window) {\n return initScope(this, window)\n }\n\n pluginIsInstalled (plugin: Plugin) {\n return this._pluginMap[plugin.id] || this._plugins.indexOf(plugin) !== -1\n }\n\n usePlugin (plugin: Plugin, options?: { [key: string]: any }) {\n if (this.pluginIsInstalled(plugin)) {\n return this\n }\n\n if (plugin.id) { this._pluginMap[plugin.id] = plugin }\n\n plugin.install(this, options)\n this._plugins.push(plugin)\n\n return this\n }\n\n addDocument (doc: Document, options?: any): void | false {\n // do nothing if document is already known\n if (this.getDocIndex(doc) !== -1) { return false }\n\n const window = win.getWindow(doc)\n\n options = options ? utils.extend({}, options) : {}\n\n this.documents.push({ doc, options })\n events.documents.push(doc)\n\n // don't add an unload event for the main document\n // so that the page may be cached in browser history\n if (doc !== this.document) {\n events.add(window, 'unload', this.onWindowUnload)\n }\n\n this.signals.fire('add-document', { doc, window, scope: this, options })\n }\n\n removeDocument (doc: Document) {\n const index = this.getDocIndex(doc)\n\n const window = win.getWindow(doc)\n const options = this.documents[index].options\n\n events.remove(window, 'unload', this.onWindowUnload)\n\n this.documents.splice(index, 1)\n events.documents.splice(index, 1)\n\n this.signals.fire('remove-document', { doc, window, scope: this, options })\n }\n\n getDocIndex (doc: Document) {\n for (let i = 0; i < this.documents.length; i++) {\n if (this.documents[i].doc === doc) {\n return i\n }\n }\n\n return -1\n }\n\n getDocOptions (doc: Document) {\n const docIndex = this.getDocIndex(doc)\n\n return docIndex === -1 ? null : this.documents[docIndex].options\n }\n\n now () {\n return ((this.window as any).Date as typeof Date || Date).now()\n }\n}\n\nexport function initScope (scope: Scope, window: Window) {\n win.init(window)\n domObjects.init(window)\n browser.init(window)\n raf.init(window)\n events.init(window)\n\n scope.usePlugin(interactions)\n scope.document = window.document\n scope.window = window\n\n return scope\n}\n","import browser from '@interactjs/utils/browser'\nimport domObjects from '@interactjs/utils/domObjects'\nimport { nodeContains } from '@interactjs/utils/domUtils'\nimport events from '@interactjs/utils/events'\nimport pointerUtils from '@interactjs/utils/pointerUtils'\nimport Signals from '@interactjs/utils/Signals'\nimport InteractionBase from './Interaction'\nimport finder, { SearchDetails } from './interactionFinder'\nimport { Scope } from './scope'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n Interaction: typeof InteractionBase\n interactions: {\n signals: Signals\n new: (options: any) => InteractionBase\n list: InteractionBase[]\n listeners: { [type: string]: Interact.Listener }\n docEvents: Array<{ type: string, listener: Interact.Listener }>\n pointerMoveTolerance: number\n }\n prevTouchTime: number\n }\n}\n\nconst methodNames = [\n 'pointerDown', 'pointerMove', 'pointerUp',\n 'updatePointer', 'removePointer', 'windowBlur',\n]\n\nfunction install (scope: Scope) {\n const signals = new Signals()\n\n const listeners = {} as any\n\n for (const method of methodNames) {\n listeners[method] = doOnInteractions(method, scope)\n }\n\n const pEventTypes = browser.pEventTypes\n let docEvents: typeof scope.interactions.docEvents\n\n if (domObjects.PointerEvent) {\n docEvents = [\n { type: pEventTypes.down, listener: releasePointersOnRemovedEls },\n { type: pEventTypes.down, listener: listeners.pointerDown },\n { type: pEventTypes.move, listener: listeners.pointerMove },\n { type: pEventTypes.up, listener: listeners.pointerUp },\n { type: pEventTypes.cancel, listener: listeners.pointerUp },\n ]\n }\n else {\n docEvents = [\n { type: 'mousedown', listener: listeners.pointerDown },\n { type: 'mousemove', listener: listeners.pointerMove },\n { type: 'mouseup', listener: listeners.pointerUp },\n\n { type: 'touchstart', listener: releasePointersOnRemovedEls },\n { type: 'touchstart', listener: listeners.pointerDown },\n { type: 'touchmove', listener: listeners.pointerMove },\n { type: 'touchend', listener: listeners.pointerUp },\n { type: 'touchcancel', listener: listeners.pointerUp },\n ]\n }\n\n docEvents.push({\n type: 'blur',\n listener (event) {\n for (const interaction of scope.interactions.list) {\n interaction.documentBlur(event)\n }\n },\n })\n\n scope.signals.on('add-document', onDocSignal)\n scope.signals.on('remove-document', onDocSignal)\n\n // for ignoring browser's simulated mouse events\n scope.prevTouchTime = 0\n\n scope.Interaction = class Interaction extends InteractionBase {\n get pointerMoveTolerance () {\n return scope.interactions.pointerMoveTolerance\n }\n\n set pointerMoveTolerance (value) {\n scope.interactions.pointerMoveTolerance = value\n }\n\n _now () { return scope.now() }\n }\n\n scope.interactions = {\n signals,\n // all active and idle interactions\n list: [],\n new (options: { pointerType?: string, signals?: Signals }) {\n options.signals = signals\n\n const interaction = new scope.Interaction(options as Required)\n\n scope.interactions.list.push(interaction)\n return interaction\n },\n listeners,\n docEvents,\n pointerMoveTolerance: 1,\n }\n\n function releasePointersOnRemovedEls () {\n // for all inactive touch interactions with pointers down\n for (const interaction of scope.interactions.list) {\n if (!interaction.pointerIsDown ||\n interaction.pointerType !== 'touch' ||\n interaction._interacting) {\n continue\n }\n\n // if a pointer is down on an element that is no longer in the DOM tree\n for (const pointer of interaction.pointers) {\n if (!scope.documents.some(({ doc }) => nodeContains(doc, pointer.downTarget))) {\n // remove the pointer from the interaction\n interaction.removePointer(pointer.pointer, pointer.event)\n }\n }\n }\n }\n}\n\nfunction doOnInteractions (method, scope) {\n return function (event) {\n const interactions = scope.interactions.list\n\n const pointerType = pointerUtils.getPointerType(event)\n const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event)\n const matches = [] // [ [pointer, interaction], ...]\n\n if (/^touch/.test(event.type)) {\n scope.prevTouchTime = scope.now()\n\n for (const changedTouch of event.changedTouches) {\n const pointer = changedTouch\n const pointerId = pointerUtils.getPointerId(pointer)\n const searchDetails: SearchDetails = {\n pointer,\n pointerId,\n pointerType,\n eventType: event.type,\n eventTarget,\n curEventTarget,\n scope,\n }\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n }\n else {\n let invalidPointer = false\n\n if (!browser.supportsPointerEvent && /mouse/.test(event.type)) {\n // ignore mouse events while touch interactions are active\n for (let i = 0; i < interactions.length && !invalidPointer; i++) {\n invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown\n }\n\n // try to ignore mouse events that are simulated by the browser\n // after a touch event\n invalidPointer = invalidPointer ||\n (scope.now() - scope.prevTouchTime < 500) ||\n // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated\n event.timeStamp === 0\n }\n\n if (!invalidPointer) {\n const searchDetails = {\n pointer: event,\n pointerId: pointerUtils.getPointerId(event),\n pointerType,\n eventType: event.type,\n curEventTarget,\n eventTarget,\n scope,\n }\n\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n }\n\n // eslint-disable-next-line no-shadow\n for (const [pointer, eventTarget, curEventTarget, interaction] of matches) {\n interaction[method](pointer, event, eventTarget, curEventTarget)\n }\n }\n}\n\nfunction getInteraction (searchDetails: SearchDetails) {\n const { pointerType, scope } = searchDetails\n\n const foundInteraction = finder.search(searchDetails)\n const signalArg = { interaction: foundInteraction, searchDetails }\n\n scope.interactions.signals.fire('find', signalArg)\n\n return signalArg.interaction || scope.interactions.new({ pointerType })\n}\n\nfunction onDocSignal ({ doc, scope, options }, signalName) {\n const { docEvents } = scope.interactions\n const eventMethod = signalName.indexOf('add') === 0\n ? events.add : events.remove\n\n if (scope.browser.isIOS && !options.events) {\n options.events = { passive: false }\n }\n\n // delegate event listener\n for (const eventType in events.delegatedEvents) {\n eventMethod(doc, eventType, events.delegateListener)\n eventMethod(doc, eventType, events.delegateUseCapture, true)\n }\n\n const eventOptions = options && options.events\n\n for (const { type, listener } of docEvents) {\n eventMethod(doc, type, listener, eventOptions)\n }\n}\n\nexport default {\n id: 'core/interactions',\n install,\n onDocSignal,\n doOnInteractions,\n methodNames,\n}\n","import * as utils from '@interactjs/utils'\nimport Interactable from './Interactable'\nimport InteractEvent, { EventPhase } from './InteractEvent'\nimport PointerInfo from './PointerInfo'\nimport { ActionName } from './scope'\n\nexport interface ActionProps {\n name: T\n axis?: 'x' | 'y' | 'xy'\n}\n\nexport interface StartAction extends ActionProps {\n name: ActionName | string\n}\n\nexport enum _ProxyValues {\n interactable = '',\n element = '',\n prepared = '',\n pointerIsDown = '',\n pointerWasMoved = '',\n _proxy = ''\n}\n\nexport enum _ProxyMethods {\n start = '',\n move = '',\n end = '',\n stop = '',\n interacting = ''\n}\n\nexport type _InteractionProxy = Pick<\nInteraction,\nkeyof typeof _ProxyValues | keyof typeof _ProxyMethods\n>\n\nexport class Interaction {\n // current interactable being interacted with\n interactable: Interactable = null\n\n // the target element of the interactable\n element: Interact.Element = null\n rect: Interact.Rect & Interact.Size\n edges: {\n [P in keyof Interact.Rect]?: boolean\n }\n\n _signals: utils.Signals\n\n // action that's ready to be fired on next move event\n prepared: ActionProps = {\n name : null,\n axis : null,\n edges: null,\n }\n\n pointerType: string\n\n // keep track of added pointers\n pointers: PointerInfo[] = []\n\n // pointerdown/mousedown/touchstart event\n downEvent: Interact.PointerEventType = null\n\n downPointer: Interact.PointerType = {} as Interact.PointerType\n\n _latestPointer: {\n pointer: Interact.EventTarget\n event: Interact.PointerEventType\n eventTarget: Node\n } = {\n pointer: null,\n event: null,\n eventTarget: null,\n }\n\n // previous action event\n prevEvent: InteractEvent = null\n\n pointerIsDown = false\n pointerWasMoved = false\n _interacting = false\n _ending = false\n _stopped = true\n _proxy: _InteractionProxy = null\n\n simulation = null\n\n get pointerMoveTolerance () {\n return 1\n }\n\n /**\n * @alias Interaction.prototype.move\n */\n doMove = utils.warnOnce(\n function (this: Interaction, signalArg: any) {\n this.move(signalArg)\n },\n 'The interaction.doMove() method has been renamed to interaction.move()')\n\n coords = {\n // Starting InteractEvent pointer coordinates\n start: utils.pointer.newCoords(),\n // Previous native pointer move event coordinates\n prev: utils.pointer.newCoords(),\n // current native pointer move event coordinates\n cur: utils.pointer.newCoords(),\n // Change in coordinates and time of the pointer\n delta: utils.pointer.newCoords(),\n // pointer velocity\n velocity: utils.pointer.newCoords(),\n }\n\n /** */\n constructor ({ pointerType, signals }: { pointerType?: string, signals: utils.Signals }) {\n this._signals = signals\n this.pointerType = pointerType\n\n const that = this\n\n this._proxy = {} as _InteractionProxy\n\n for (const key in _ProxyValues) {\n Object.defineProperty(this._proxy, key, {\n get () { return that[key] },\n })\n }\n\n for (const key in _ProxyMethods) {\n Object.defineProperty(this._proxy, key, {\n value: (...args) => that[key](...args),\n })\n }\n\n this._signals.fire('new', { interaction: this })\n }\n\n pointerDown (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Node) {\n const pointerIndex = this.updatePointer(pointer, event, eventTarget, true)\n\n this._signals.fire('down', {\n pointer,\n event,\n eventTarget,\n pointerIndex,\n interaction: this,\n })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable({\n * // disable the default drag start by down->move\n * manualStart: true\n * })\n * // start dragging after the user holds the pointer down\n * .on('hold', function (event) {\n * var interaction = event.interaction\n *\n * if (!interaction.interacting()) {\n * interaction.start({ name: 'drag' },\n * event.interactable,\n * event.currentTarget)\n * }\n * })\n * ```\n *\n * Start an action with the given Interactable and Element as tartgets. The\n * action must be enabled for the target Interactable and an appropriate\n * number of pointers must be held down - 1 for drag/resize, 2 for gesture.\n *\n * Use it with `interactable.able({ manualStart: false })` to always\n * [start actions manually](https://github.com/taye/interact.js/issues/114)\n *\n * @param {object} action The action to be performed - drag, resize, etc.\n * @param {Interactable} target The Interactable to target\n * @param {Element} element The DOM Element to target\n * @return {object} interact\n */\n start (action: StartAction, interactable: Interactable, element: Interact.Element) {\n if (this.interacting() ||\n !this.pointerIsDown ||\n this.pointers.length < (action.name === ActionName.Gesture ? 2 : 1) ||\n !interactable.options[action.name].enabled) {\n return false\n }\n\n utils.copyAction(this.prepared, action)\n\n this.interactable = interactable\n this.element = element\n this.rect = interactable.getRect(element)\n this.edges = this.prepared.edges\n this._stopped = false\n this._interacting = this._doPhase({\n interaction: this,\n event: this.downEvent,\n phase: EventPhase.Start,\n }) && !this._stopped\n\n return this._interacting\n }\n\n pointerMove (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Node) {\n if (!this.simulation && !(this.modifiers && this.modifiers.endPrevented)) {\n this.updatePointer(pointer, event, eventTarget, false)\n utils.pointer.setCoords(this.coords.cur, this.pointers.map(p => p.pointer), this._now())\n }\n\n const duplicateMove = (this.coords.cur.page.x === this.coords.prev.page.x &&\n this.coords.cur.page.y === this.coords.prev.page.y &&\n this.coords.cur.client.x === this.coords.prev.client.x &&\n this.coords.cur.client.y === this.coords.prev.client.y)\n\n let dx\n let dy\n\n // register movement greater than pointerMoveTolerance\n if (this.pointerIsDown && !this.pointerWasMoved) {\n dx = this.coords.cur.client.x - this.coords.start.client.x\n dy = this.coords.cur.client.y - this.coords.start.client.y\n\n this.pointerWasMoved = utils.hypot(dx, dy) > this.pointerMoveTolerance\n }\n\n const signalArg = {\n pointer,\n pointerIndex: this.getPointerIndex(pointer),\n event,\n eventTarget,\n dx,\n dy,\n duplicate: duplicateMove,\n interaction: this,\n }\n\n if (!duplicateMove) {\n // set pointer coordinate, time changes and velocity\n utils.pointer.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur)\n utils.pointer.setCoordVelocity(this.coords.velocity, this.coords.delta)\n }\n\n this._signals.fire('move', signalArg)\n\n if (!duplicateMove) {\n // if interacting, fire an 'action-move' signal etc\n if (this.interacting()) {\n this.move(signalArg)\n }\n\n if (this.pointerWasMoved) {\n utils.pointer.copyCoords(this.coords.prev, this.coords.cur)\n }\n }\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('dragmove', function (event) {\n * if (someCondition) {\n * // change the snap settings\n * event.interactable.draggable({ snap: { targets: [] }})\n * // fire another move event with re-calculated snap\n * event.interaction.move()\n * }\n * })\n * ```\n *\n * Force a move of the current action at the same coordinates. Useful if\n * snap/restrict has been changed and you want a movement with the new\n * settings.\n */\n move (signalArg?) {\n signalArg = utils.extend({\n pointer: this._latestPointer.pointer,\n event: this._latestPointer.event,\n eventTarget: this._latestPointer.eventTarget,\n interaction: this,\n }, signalArg || {})\n\n signalArg.phase = EventPhase.Move\n\n this._doPhase(signalArg)\n }\n\n // End interact move events and stop auto-scroll unless simulation is running\n pointerUp (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Node, curEventTarget: EventTarget) {\n let pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) {\n pointerIndex = this.updatePointer(pointer, event, eventTarget, false)\n }\n\n this._signals.fire(/cancel$/i.test(event.type) ? 'cancel' : 'up', {\n pointer,\n pointerIndex,\n event,\n eventTarget,\n curEventTarget,\n interaction: this,\n })\n\n if (!this.simulation) {\n this.end(event)\n }\n\n this.pointerIsDown = false\n this.removePointer(pointer, event)\n }\n\n documentBlur (event) {\n this.end(event)\n this._signals.fire('blur', { event, interaction: this })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('move', function (event) {\n * if (event.pageX > 1000) {\n * // end the current action\n * event.interaction.end()\n * // stop all further listeners from being called\n * event.stopImmediatePropagation()\n * }\n * })\n * ```\n *\n * @param {PointerEvent} [event]\n */\n end (event?: Interact.PointerEventType) {\n this._ending = true\n event = event || this._latestPointer.event\n let endPhaseResult\n\n if (this.interacting()) {\n endPhaseResult = this._doPhase({\n event,\n interaction: this,\n phase: EventPhase.End,\n })\n }\n\n this._ending = false\n\n if (endPhaseResult === true) {\n this.stop()\n }\n }\n\n currentAction () {\n return this._interacting ? this.prepared.name : null\n }\n\n interacting () {\n return this._interacting\n }\n\n /** */\n stop () {\n this._signals.fire('stop', { interaction: this })\n\n this.interactable = this.element = null\n\n this._interacting = false\n this._stopped = true\n this.prepared.name = this.prevEvent = null\n }\n\n getPointerIndex (pointer) {\n const pointerId = utils.pointer.getPointerId(pointer)\n\n // mouse and pen interactions may have only one pointer\n return (this.pointerType === 'mouse' || this.pointerType === 'pen')\n ? this.pointers.length - 1\n : utils.arr.findIndex(this.pointers, curPointer => curPointer.id === pointerId)\n }\n\n getPointerInfo (pointer) {\n return this.pointers[this.getPointerIndex(pointer)]\n }\n\n updatePointer (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Node, down?: boolean) {\n const id = utils.pointer.getPointerId(pointer)\n let pointerIndex = this.getPointerIndex(pointer)\n let pointerInfo = this.pointers[pointerIndex]\n\n down = down === false\n ? false\n : down || /(down|start)$/i.test(event.type)\n\n if (!pointerInfo) {\n pointerInfo = new PointerInfo(\n id,\n pointer,\n event,\n null,\n null,\n )\n\n pointerIndex = this.pointers.length\n this.pointers.push(pointerInfo)\n }\n else {\n pointerInfo.pointer = pointer\n }\n\n if (down) {\n this.pointerIsDown = true\n\n if (!this.interacting()) {\n utils.pointer.setCoords(this.coords.start, this.pointers.map(p => p.pointer), this._now())\n\n utils.pointer.copyCoords(this.coords.cur, this.coords.start)\n utils.pointer.copyCoords(this.coords.prev, this.coords.start)\n utils.pointer.pointerExtend(this.downPointer, pointer)\n\n this.downEvent = event\n pointerInfo.downTime = this.coords.cur.timeStamp\n pointerInfo.downTarget = eventTarget\n\n this.pointerWasMoved = false\n }\n }\n\n this._updateLatestPointer(pointer, event, eventTarget)\n\n this._signals.fire('update-pointer', {\n pointer,\n event,\n eventTarget,\n down,\n pointerInfo,\n pointerIndex,\n interaction: this,\n })\n\n return pointerIndex\n }\n\n removePointer (pointer: Interact.PointerType, event: Interact.PointerEventType) {\n const pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) { return }\n\n const pointerInfo = this.pointers[pointerIndex]\n\n this._signals.fire('remove-pointer', {\n pointer,\n event,\n pointerIndex,\n pointerInfo,\n interaction: this,\n })\n\n this.pointers.splice(pointerIndex, 1)\n }\n\n _updateLatestPointer (pointer, event, eventTarget) {\n this._latestPointer.pointer = pointer\n this._latestPointer.event = event\n this._latestPointer.eventTarget = eventTarget\n }\n\n destroy () {\n this._latestPointer.pointer = null\n this._latestPointer.event = null\n this._latestPointer.eventTarget = null\n }\n\n _createPreparedEvent (event: Interact.PointerEventType, phase: EventPhase, preEnd: boolean, type: string) {\n const actionName = this.prepared.name\n\n return new InteractEvent(this, event, actionName, phase, this.element, null, preEnd, type)\n }\n\n _fireEvent (iEvent) {\n this.interactable.fire(iEvent)\n\n if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n this.prevEvent = iEvent\n }\n }\n\n _doPhase (signalArg: Partial) {\n const { event, phase, preEnd, type } = signalArg\n const beforeResult = this._signals.fire(`before-action-${phase}`, signalArg)\n\n if (beforeResult === false) {\n return false\n }\n\n const iEvent = signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type)\n const { rect } = this\n\n if (rect) {\n // update the rect modifications\n const edges = this.edges || this.prepared.edges || { left: true, right: true, top: true, bottom: true }\n\n if (edges.top) { rect.top += iEvent.delta.y }\n if (edges.bottom) { rect.bottom += iEvent.delta.y }\n if (edges.left) { rect.left += iEvent.delta.x }\n if (edges.right) { rect.right += iEvent.delta.x }\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n this._signals.fire(`action-${phase}`, signalArg)\n\n this._fireEvent(iEvent)\n\n this._signals.fire(`after-action-${phase}`, signalArg)\n\n return true\n }\n\n _now () { return Date.now() }\n}\n\nexport default Interaction\nexport { PointerInfo }\n","export function contains (array, target) {\n return array.indexOf(target) !== -1\n}\n\nexport function remove (array, target) {\n return array.splice(array.indexOf(target), 1)\n}\n\nexport function merge (target, source) {\n for (const item of source) {\n target.push(item)\n }\n\n return target\n}\n\nexport function from (source) {\n return merge([], source)\n}\n\nexport function findIndex (array, func) {\n for (let i = 0; i < array.length; i++) {\n if (func(array[i], i, array)) {\n return i\n }\n }\n\n return -1\n}\n\nexport function find (array, func) {\n return array[findIndex(array, func)]\n}\n","const domObjects: {\n init: any\n document: Document\n DocumentFragment: typeof DocumentFragment\n SVGElement: typeof SVGElement\n SVGSVGElement: typeof SVGSVGElement\n SVGElementInstance: any\n Element: typeof Element\n HTMLElement: typeof HTMLElement\n Event: typeof Event\n Touch: typeof Touch\n PointerEvent: typeof PointerEvent\n} =\n{\n init,\n document: null as any,\n DocumentFragment: null as any,\n SVGElement: null as any,\n SVGSVGElement: null as any,\n // eslint-disable-next-line no-undef\n SVGElementInstance: null as any,\n Element: null as any,\n HTMLElement: null as any,\n Event: null as any,\n Touch: null as any,\n PointerEvent: null as any,\n}\n\nfunction blank () {}\n\nexport default domObjects\n\nfunction init (window: Window) {\n const win = window as any\n\n domObjects.document = win.document\n domObjects.DocumentFragment = win.DocumentFragment || blank\n domObjects.SVGElement = win.SVGElement || blank\n domObjects.SVGSVGElement = win.SVGSVGElement || blank\n domObjects.SVGElementInstance = win.SVGElementInstance || blank\n domObjects.Element = win.Element || blank\n domObjects.HTMLElement = win.HTMLElement || domObjects.Element\n\n domObjects.Event = win.Event\n domObjects.Touch = win.Touch || blank\n domObjects.PointerEvent = (win.PointerEvent || win.MSPointerEvent)\n}\n","export default thing => !!(thing && thing.Window) && (thing instanceof thing.Window)\n","import isWindow from './isWindow'\n\nconst win = {\n realWindow: undefined as Window,\n window: undefined as Window,\n getWindow,\n init,\n}\n\nexport function init (window: Window & { wrap?: (...args) => any }) {\n // get wrapped window if using Shadow DOM polyfill\n\n win.realWindow = window\n\n // create a TextNode\n const el = window.document.createTextNode('')\n\n // check if it's wrapped by a polyfill\n if (el.ownerDocument !== window.document &&\n typeof window.wrap === 'function' &&\n window.wrap(el) === el) {\n // use wrapped window\n window = window.wrap(window)\n }\n\n win.window = window\n}\n\nif (typeof window === 'undefined') {\n win.window = undefined\n win.realWindow = undefined\n}\nelse {\n init(window)\n}\n\nexport function getWindow (node) {\n if (isWindow(node)) {\n return node\n }\n\n const rootNode = (node.ownerDocument || node)\n\n return rootNode.defaultView || win.window\n}\n\nwin.init = init\n\nexport default win\n","// tslint:disable variable-name\n\nimport isWindow from './isWindow'\nimport win from './window'\n\nexport const window = (thing: any): thing is Window =>\n thing === win.window || isWindow(thing)\n\nexport const docFrag = (thing: any): thing is DocumentFragment =>\n object(thing) && thing.nodeType === 11\n\nexport const object = (thing: any): thing is { [index: string]: any } =>\n !!thing && (typeof thing === 'object')\n\nexport const func = (thing: any): thing is (...args: any) => any =>\n typeof thing === 'function'\n\nexport const number = (thing: any): thing is number =>\n typeof thing === 'number'\n\nexport const bool = (thing: any): thing is boolean =>\n typeof thing === 'boolean'\n\nexport const string = (thing: any): thing is string =>\n typeof thing === 'string'\n\nexport const element = (thing: any): thing is Interact.Element => {\n if (!thing || (typeof thing !== 'object')) { return false }\n\n const _window = win.getWindow(thing) || win.window\n\n return (/object|function/.test(typeof _window.Element)\n ? thing instanceof _window.Element // DOM2\n : thing.nodeType === 1 && typeof thing.nodeName === 'string')\n}\n\nexport const plainObject: typeof object = (thing: any): thing is { [index: string]: any } =>\n object(thing) &&\n !!thing.constructor &&\n /function Object\\b/.test(thing.constructor.toString())\n\nexport const array = (thing: any): thing is any[] =>\n (object(thing) &&\n (typeof thing.length !== 'undefined') &&\n func(thing.splice))\n","import domObjects from './domObjects'\nimport * as is from './is'\nimport win from './window'\n\nconst browser = {\n init,\n supportsTouch: null as boolean,\n supportsPointerEvent: null as boolean,\n isIOS7: null as boolean,\n isIOS: null as boolean,\n isIe9: null as boolean,\n isOperaMobile: null as boolean,\n prefixedMatchesSelector: null as string,\n pEventTypes: null as {\n up: string\n down: string\n over: string\n out: string\n move: string\n cancel: string\n },\n wheelEvent: null as string,\n}\n\nfunction init (window) {\n const Element = domObjects.Element\n const navigator = win.window.navigator\n\n // Does the browser support touch input?\n browser.supportsTouch = ('ontouchstart' in window) ||\n (is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch)\n\n // Does the browser support PointerEvents\n browser.supportsPointerEvent = navigator.pointerEnabled !== false && !!domObjects.PointerEvent\n\n browser.isIOS = (/iP(hone|od|ad)/.test(navigator.platform))\n\n // scrolling doesn't change the result of getClientRects on iOS 7\n browser.isIOS7 = (/iP(hone|od|ad)/.test(navigator.platform) &&\n /OS 7[^\\d]/.test(navigator.appVersion))\n\n browser.isIe9 = /MSIE 9/.test(navigator.userAgent)\n\n // Opera Mobile must be handled differently\n browser.isOperaMobile = (navigator.appName === 'Opera' &&\n browser.supportsTouch &&\n /Presto/.test(navigator.userAgent))\n\n // prefix matchesSelector\n browser.prefixedMatchesSelector = 'matches' in Element.prototype\n ? 'matches'\n : 'webkitMatchesSelector' in Element.prototype\n ? 'webkitMatchesSelector'\n : 'mozMatchesSelector' in Element.prototype\n ? 'mozMatchesSelector'\n : 'oMatchesSelector' in Element.prototype\n ? 'oMatchesSelector'\n : 'msMatchesSelector'\n\n browser.pEventTypes = (browser.supportsPointerEvent\n ? (domObjects.PointerEvent === window.MSPointerEvent\n ? {\n up: 'MSPointerUp',\n down: 'MSPointerDown',\n over: 'mouseover',\n out: 'mouseout',\n move: 'MSPointerMove',\n cancel: 'MSPointerCancel',\n }\n : {\n up: 'pointerup',\n down: 'pointerdown',\n over: 'pointerover',\n out: 'pointerout',\n move: 'pointermove',\n cancel: 'pointercancel',\n })\n : null)\n\n // because Webkit and Opera still use 'mousewheel' event type\n browser.wheelEvent = 'onmousewheel' in domObjects.document ? 'mousewheel' : 'wheel'\n}\n\nexport default browser\n","import browser from './browser'\nimport domObjects from './domObjects'\nimport * as is from './is'\nimport win, { getWindow } from './window'\n\nexport function nodeContains (parent: Node, child: Node) {\n while (child) {\n if (child === parent) {\n return true\n }\n\n child = child.parentNode\n }\n\n return false\n}\n\nexport function closest (element, selector) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) { return element }\n\n element = parentNode(element)\n }\n\n return null\n}\n\nexport function parentNode (node) {\n let parent = node.parentNode\n\n if (is.docFrag(parent)) {\n // skip past #shado-root fragments\n // tslint:disable-next-line\n while ((parent = (parent as any).host) && is.docFrag(parent)) {\n continue\n }\n\n return parent\n }\n\n return parent\n}\n\nexport function matchesSelector (element, selector) {\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (win.window !== win.realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ')\n }\n\n return element[browser.prefixedMatchesSelector](selector)\n}\n\nconst getParent = el => el.parentNode ? el.parentNode : el.host\n\n// Test for the element that's \"above\" all other qualifiers\nexport function indexOfDeepestElement (elements: Interact.Element[] | NodeListOf) {\n let deepestZoneParents = []\n let deepestZone = elements[0]\n let index = deepestZone ? 0 : -1\n let i\n let n\n\n for (i = 1; i < elements.length; i++) {\n const dropzone = elements[i]\n\n // an element might belong to multiple selector dropzones\n if (!dropzone || dropzone === deepestZone) {\n continue\n }\n\n if (!deepestZone) {\n deepestZone = dropzone\n index = i\n continue\n }\n\n // check if the deepest or current are document.documentElement or document.rootElement\n // - if the current dropzone is, do nothing and continue\n if (dropzone.parentNode === dropzone.ownerDocument) {\n continue\n }\n // - if deepest is, update with the current dropzone and continue to next\n else if (deepestZone.parentNode === dropzone.ownerDocument) {\n deepestZone = dropzone\n index = i\n continue\n }\n\n // compare zIndex of siblings\n if (dropzone.parentNode === deepestZone.parentNode) {\n const deepestZIndex = parseInt(getWindow(deepestZone).getComputedStyle(deepestZone).zIndex, 10) || 0\n const dropzoneZIndex = parseInt(getWindow(dropzone).getComputedStyle(dropzone).zIndex, 10) || 0\n\n if (dropzoneZIndex >= deepestZIndex) {\n deepestZone = dropzone\n index = i\n }\n\n continue\n }\n\n // populate the ancestry array for the latest deepest dropzone\n if (!deepestZoneParents.length) {\n let parent = deepestZone\n let parentParent\n\n while ((parentParent = getParent(parent)) && parentParent !== parent.ownerDocument) {\n deepestZoneParents.unshift(parent)\n parent = parentParent\n }\n }\n\n let parent\n\n // if this element is an svg element and the current deepest is an\n // HTMLElement\n if (deepestZone instanceof domObjects.HTMLElement &&\n dropzone instanceof domObjects.SVGElement &&\n !(dropzone instanceof domObjects.SVGSVGElement)) {\n if (dropzone === deepestZone.parentNode) {\n continue\n }\n\n parent = dropzone.ownerSVGElement\n }\n else {\n parent = dropzone\n }\n\n const dropzoneParents = []\n\n while (parent.parentNode !== parent.ownerDocument) {\n dropzoneParents.unshift(parent)\n parent = getParent(parent)\n }\n\n n = 0\n\n // get (position of last common ancestor) + 1\n while (dropzoneParents[n] && dropzoneParents[n] === deepestZoneParents[n]) {\n n++\n }\n\n const parents = [\n dropzoneParents[n - 1],\n dropzoneParents[n],\n deepestZoneParents[n],\n ]\n\n let child = parents[0].lastChild\n\n while (child) {\n if (child === parents[1]) {\n deepestZone = dropzone\n index = i\n deepestZoneParents = dropzoneParents\n\n break\n }\n else if (child === parents[2]) {\n break\n }\n\n child = child.previousSibling\n }\n }\n\n return index\n}\n\nexport function matchesUpTo (element: Interact.Element, selector: string, limit: Node) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return true\n }\n\n element = parentNode(element)\n\n if (element === limit) {\n return matchesSelector(element, selector)\n }\n }\n\n return false\n}\n\nexport function getActualElement (element) {\n return (element instanceof domObjects.SVGElementInstance\n ? element.correspondingUseElement\n : element)\n}\n\nexport function getScrollXY (relevantWindow) {\n relevantWindow = relevantWindow || win.window\n return {\n x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft,\n y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop,\n }\n}\n\nexport function getElementClientRect (element) {\n const clientRect = (element instanceof domObjects.SVGElement\n ? element.getBoundingClientRect()\n : element.getClientRects()[0])\n\n return clientRect && {\n left : clientRect.left,\n right : clientRect.right,\n top : clientRect.top,\n bottom: clientRect.bottom,\n width : clientRect.width || clientRect.right - clientRect.left,\n height: clientRect.height || clientRect.bottom - clientRect.top,\n }\n}\n\nexport function getElementRect (element) {\n const clientRect = getElementClientRect(element)\n\n if (!browser.isIOS7 && clientRect) {\n const scroll = getScrollXY(win.getWindow(element))\n\n clientRect.left += scroll.x\n clientRect.right += scroll.x\n clientRect.top += scroll.y\n clientRect.bottom += scroll.y\n }\n\n return clientRect\n}\n\nexport function getPath (node) {\n const path = []\n\n while (node) {\n path.push(node)\n node = parentNode(node)\n }\n\n return path\n}\n\nexport function trySelector (value) {\n if (!is.string(value)) { return false }\n\n // an exception will be raised if it is invalid\n domObjects.document.querySelector(value)\n return true\n}\n","import * as arr from './arr'\nimport * as is from './is'\n\nexport default function clone (source: T): Partial {\n const dest = {} as Partial\n\n for (const prop in source) {\n const value = source[prop]\n\n if (is.plainObject(value)) {\n dest[prop] = clone(value) as any\n }\n else if (is.array(value)) {\n dest[prop] = arr.from(value)\n }\n else {\n dest[prop] = value\n }\n }\n\n return dest\n}\n","export interface PointerExtend {\n webkit: RegExp\n [prefix: string]: RegExp\n}\n\nfunction pointerExtend (dest, source) {\n for (const prop in source) {\n const prefixedPropREs = pointerExtend.prefixedPropREs\n let deprecated = false\n\n // skip deprecated prefixed properties\n for (const vendor in prefixedPropREs) {\n if (prop.indexOf(vendor) === 0 && prefixedPropREs[vendor].test(prop)) {\n deprecated = true\n break\n }\n }\n\n if (!deprecated && typeof source[prop] !== 'function') {\n dest[prop] = source[prop]\n }\n }\n return dest\n}\n\npointerExtend.prefixedPropREs = {\n webkit: /(Movement[XY]|Radius[XY]|RotationAngle|Force)$/,\n moz: /(Pressure)$/,\n}\n\nexport default pointerExtend\n","export default (x: number, y: number) => Math.sqrt(x * x + y * y)\n","import browser from './browser'\nimport dom from './domObjects'\nimport * as domUtils from './domUtils'\nimport hypot from './hypot'\nimport * as is from './is'\nimport pointerExtend from './pointerExtend'\n\nconst pointerUtils = {\n copyCoords (dest, src) {\n dest.page = dest.page || {}\n dest.page.x = src.page.x\n dest.page.y = src.page.y\n\n dest.client = dest.client || {}\n dest.client.x = src.client.x\n dest.client.y = src.client.y\n\n dest.timeStamp = src.timeStamp\n },\n\n setCoordDeltas (targetObj, prev, cur) {\n targetObj.page.x = cur.page.x - prev.page.x\n targetObj.page.y = cur.page.y - prev.page.y\n targetObj.client.x = cur.client.x - prev.client.x\n targetObj.client.y = cur.client.y - prev.client.y\n targetObj.timeStamp = cur.timeStamp - prev.timeStamp\n },\n\n setCoordVelocity (targetObj, delta) {\n const dt = Math.max(delta.timeStamp / 1000, 0.001)\n\n targetObj.page.x = delta.page.x / dt\n targetObj.page.y = delta.page.y / dt\n targetObj.client.x = delta.client.x / dt\n targetObj.client.y = delta.client.y / dt\n targetObj.timeStamp = dt\n },\n\n isNativePointer (pointer) {\n return (pointer instanceof dom.Event || pointer instanceof dom.Touch)\n },\n\n // Get specified X/Y coords for mouse or event.touches[0]\n getXY (type, pointer, xy) {\n xy = xy || {}\n type = type || 'page'\n\n xy.x = pointer[type + 'X']\n xy.y = pointer[type + 'Y']\n\n return xy\n },\n\n getPageXY (pointer: Interact.PointerType | Interact.InteractEvent, page?: Interact.Point) {\n page = page || { x: 0, y: 0 }\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n pointerUtils.getXY('screen', pointer, page)\n\n page.x += window.scrollX\n page.y += window.scrollY\n }\n else {\n pointerUtils.getXY('page', pointer, page)\n }\n\n return page\n },\n\n getClientXY (pointer, client) {\n client = client || {}\n\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n pointerUtils.getXY('screen', pointer, client)\n }\n else {\n pointerUtils.getXY('client', pointer, client)\n }\n\n return client\n },\n\n getPointerId (pointer) {\n return is.number(pointer.pointerId) ? pointer.pointerId : pointer.identifier\n },\n\n setCoords (targetObj, pointers: any[], timeStamp: number) {\n const pointer = (pointers.length > 1\n ? pointerUtils.pointerAverage(pointers)\n : pointers[0])\n\n const tmpXY = {} as { x: number, y: number }\n\n pointerUtils.getPageXY(pointer, tmpXY)\n targetObj.page.x = tmpXY.x\n targetObj.page.y = tmpXY.y\n\n pointerUtils.getClientXY(pointer, tmpXY)\n targetObj.client.x = tmpXY.x\n targetObj.client.y = tmpXY.y\n\n targetObj.timeStamp = timeStamp\n },\n\n pointerExtend,\n\n getTouchPair (event) {\n const touches = []\n\n // array of touches is supplied\n if (is.array(event)) {\n touches[0] = event[0]\n touches[1] = event[1]\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0]\n touches[1] = event.changedTouches[0]\n }\n else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0]\n touches[1] = event.changedTouches[1]\n }\n }\n else {\n touches[0] = event.touches[0]\n touches[1] = event.touches[1]\n }\n }\n\n return touches\n },\n\n pointerAverage (pointers: PointerEvent[] | Event[]) {\n const average = {\n pageX : 0,\n pageY : 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n }\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop] += pointer[prop]\n }\n }\n for (const prop in average) {\n average[prop] /= pointers.length\n }\n\n return average\n },\n\n touchBBox (event: Event | Array<(Interact.PointerType) | TouchEvent>) {\n if (!(event as any).length &&\n !((event as TouchEvent).touches &&\n (event as TouchEvent).touches.length > 1)) {\n return null\n }\n\n const touches = pointerUtils.getTouchPair(event)\n const minX = Math.min(touches[0].pageX, touches[1].pageX)\n const minY = Math.min(touches[0].pageY, touches[1].pageY)\n const maxX = Math.max(touches[0].pageX, touches[1].pageX)\n const maxY = Math.max(touches[0].pageY, touches[1].pageY)\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n right: maxX,\n bottom: maxY,\n width: maxX - minX,\n height: maxY - minY,\n }\n },\n\n touchDistance (event, deltaSource) {\n const sourceX = deltaSource + 'X'\n const sourceY = deltaSource + 'Y'\n const touches = pointerUtils.getTouchPair(event)\n\n const dx = touches[0][sourceX] - touches[1][sourceX]\n const dy = touches[0][sourceY] - touches[1][sourceY]\n\n return hypot(dx, dy)\n },\n\n touchAngle (event, deltaSource) {\n const sourceX = deltaSource + 'X'\n const sourceY = deltaSource + 'Y'\n const touches = pointerUtils.getTouchPair(event)\n const dx = touches[1][sourceX] - touches[0][sourceX]\n const dy = touches[1][sourceY] - touches[0][sourceY]\n const angle = 180 * Math.atan2(dy, dx) / Math.PI\n\n return angle\n },\n\n getPointerType (pointer) {\n return is.string(pointer.pointerType)\n ? pointer.pointerType\n : is.number(pointer.pointerType)\n ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType]\n // if the PointerEvent API isn't available, then the \"pointer\" must\n // be either a MouseEvent, TouchEvent, or Touch object\n : /touch/.test(pointer.type) || pointer instanceof dom.Touch\n ? 'touch'\n : 'mouse'\n },\n\n // [ event.target, event.currentTarget ]\n getEventTargets (event) {\n const path = is.func(event.composedPath) ? event.composedPath() : event.path\n\n return [\n domUtils.getActualElement(path ? path[0] : event.target),\n domUtils.getActualElement(event.currentTarget),\n ]\n },\n\n newCoords () {\n return {\n page : { x: 0, y: 0 },\n client : { x: 0, y: 0 },\n timeStamp: 0,\n }\n },\n\n coordsToEvent (coords: MockCoords) {\n const event = {\n coords,\n get page () { return this.coords.page },\n get client () { return this.coords.client },\n get timeStamp () { return this.coords.timeStamp },\n get pageX () { return this.coords.page.x },\n get pageY () { return this.coords.page.y },\n get clientX () { return this.coords.client.x },\n get clientY () { return this.coords.client.y },\n get pointerId () { return this.coords.pointerId },\n get target () { return this.coords.target },\n get type () { return this.coords.type },\n get pointerType () { return this.coords.pointerType },\n get buttons () { return this.coords.buttons },\n }\n\n return event as typeof event & Interact.PointerType & Interact.PointerEventType\n },\n}\n\nexport default pointerUtils\n\nexport interface MockCoords {\n page: Interact.Point\n client: Interact.Point\n timeStamp?: number\n pointerId?: any\n target?: any\n type?: string\n pointerType?: string\n buttons?: number\n}\n","import { contains } from './arr'\nimport * as domUtils from './domUtils'\nimport * as is from './is'\nimport pExtend from './pointerExtend'\nimport pointerUtils from './pointerUtils'\n\ntype Listener = (event: Event | FakeEvent) => any\n\nconst elements: EventTarget[] = []\nconst targets: Array<{\n events: { [type: string]: Listener[] }\n typeCount: number\n}> = []\n\nconst delegatedEvents: {\n [type: string]: {\n selectors: string[]\n contexts: Node[]\n listeners: Array>\n }\n} = {}\nconst documents: Document[] = []\n\nfunction add (element: EventTarget, type: string, listener: Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n let elementIndex = elements.indexOf(element)\n let target = targets[elementIndex]\n\n if (!target) {\n target = {\n events: {},\n typeCount: 0,\n }\n\n elementIndex = elements.push(element) - 1\n targets.push(target)\n }\n\n if (!target.events[type]) {\n target.events[type] = []\n target.typeCount++\n }\n\n if (!contains(target.events[type], listener)) {\n element.addEventListener(type, listener as any, events.supportsOptions ? options : !!options.capture)\n target.events[type].push(listener)\n }\n}\n\nfunction remove (element: EventTarget, type: string, listener?: 'all' | Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n const elementIndex = elements.indexOf(element)\n const target = targets[elementIndex]\n\n if (!target || !target.events) {\n return\n }\n\n if (type === 'all') {\n for (type in target.events) {\n if (target.events.hasOwnProperty(type)) {\n remove(element, type, 'all')\n }\n }\n return\n }\n\n if (target.events[type]) {\n const len = target.events[type].length\n\n if (listener === 'all') {\n for (let i = 0; i < len; i++) {\n remove(element, type, target.events[type][i], options)\n }\n return\n }\n else {\n for (let i = 0; i < len; i++) {\n if (target.events[type][i] === listener) {\n element.removeEventListener(type, listener as any, events.supportsOptions ? options : !!options.capture)\n target.events[type].splice(i, 1)\n\n break\n }\n }\n }\n\n if (target.events[type] && target.events[type].length === 0) {\n (target.events[type] as any) = null\n target.typeCount--\n }\n }\n\n if (!target.typeCount) {\n targets.splice(elementIndex, 1)\n elements.splice(elementIndex, 1)\n }\n}\n\nfunction addDelegate (selector: string, context: Node, type: string, listener: Listener, optionalArg?: any) {\n const options = getOptions(optionalArg)\n if (!delegatedEvents[type]) {\n delegatedEvents[type] = {\n contexts : [],\n listeners: [],\n selectors: [],\n }\n\n // add delegate listener functions\n for (const doc of documents) {\n add(doc, type, delegateListener)\n add(doc, type, delegateUseCapture, true)\n }\n }\n\n const delegated = delegatedEvents[type]\n let index\n\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n if (delegated.selectors[index] === selector &&\n delegated.contexts[index] === context) {\n break\n }\n }\n\n if (index === -1) {\n index = delegated.selectors.length\n\n delegated.selectors.push(selector)\n delegated.contexts.push(context)\n delegated.listeners.push([])\n }\n\n // keep listener and capture and passive flags\n delegated.listeners[index].push([listener, !!options.capture, options.passive])\n}\n\nfunction removeDelegate (selector, context, type, listener?, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const delegated = delegatedEvents[type]\n let matchFound = false\n let index\n\n if (!delegated) { return }\n\n // count from last index of delegated to 0\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n // look for matching selector and context Node\n if (delegated.selectors[index] === selector &&\n delegated.contexts[index] === context) {\n const listeners = delegated.listeners[index]\n\n // each item of the listeners array is an array: [function, capture, passive]\n for (let i = listeners.length - 1; i >= 0; i--) {\n const [fn, capture, passive] = listeners[i]\n\n // check if the listener functions and capture and passive flags match\n if (fn === listener && capture === !!options.capture && passive === options.passive) {\n // remove the listener from the array of listeners\n listeners.splice(i, 1)\n\n // if all listeners for this interactable have been removed\n // remove the interactable from the delegated arrays\n if (!listeners.length) {\n delegated.selectors.splice(index, 1)\n delegated.contexts.splice(index, 1)\n delegated.listeners.splice(index, 1)\n\n // remove delegate function from context\n remove(context, type, delegateListener)\n remove(context, type, delegateUseCapture, true)\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegatedEvents[type] = null\n }\n }\n\n // only remove one listener\n matchFound = true\n break\n }\n }\n\n if (matchFound) { break }\n }\n }\n}\n\n// bound to the interactable context when a DOM event\n// listener is added to a selector interactable\nfunction delegateListener (event: Event, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const fakeEvent = new FakeEvent(event)\n const delegated = delegatedEvents[event.type]\n const [eventTarget] = (pointerUtils.getEventTargets(event))\n let element = eventTarget\n\n // climb up document tree looking for selector matches\n while (is.element(element)) {\n for (let i = 0; i < delegated.selectors.length; i++) {\n const selector = delegated.selectors[i]\n const context = delegated.contexts[i]\n\n if (domUtils.matchesSelector(element, selector) &&\n domUtils.nodeContains(context, eventTarget) &&\n domUtils.nodeContains(context, element)) {\n const listeners = delegated.listeners[i]\n\n fakeEvent.currentTarget = element\n\n for (const [fn, capture, passive] of listeners) {\n if (capture === !!options.capture && passive === options.passive) {\n fn(fakeEvent)\n }\n }\n }\n }\n\n element = domUtils.parentNode(element)\n }\n}\n\nfunction delegateUseCapture (event: Event) {\n return delegateListener.call(this, event, true)\n}\n\nfunction getOptions (param) {\n return is.object(param) ? param : { capture: param }\n}\n\nexport class FakeEvent implements Partial {\n currentTarget: EventTarget\n\n constructor (public originalEvent) {\n // duplicate the event so that currentTarget can be changed\n pExtend(this, originalEvent)\n }\n\n preventOriginalDefault () {\n this.originalEvent.preventDefault()\n }\n\n stopPropagation () {\n this.originalEvent.stopPropagation()\n }\n\n stopImmediatePropagation () {\n this.originalEvent.stopImmediatePropagation()\n }\n}\n\nconst events = {\n add,\n remove,\n\n addDelegate,\n removeDelegate,\n\n delegateListener,\n delegateUseCapture,\n delegatedEvents,\n documents,\n\n supportsOptions: false,\n supportsPassive: false,\n\n _elements: elements,\n _targets: targets,\n\n init (window: Window) {\n window.document.createElement('div').addEventListener('test', null, {\n get capture () { return (events.supportsOptions = true) },\n get passive () { return (events.supportsPassive = true) },\n })\n },\n}\n\nexport default events\n","export default function extend> (dest: U, source: T) {\n for (const prop in source) {\n (dest as unknown as T)[prop] = source[prop]\n }\n return dest as T & U\n}\n","import { closest, getElementRect, parentNode } from './domUtils'\nimport extend from './extend'\nimport * as is from './is'\n\nexport function getStringOptionResult (value, interactable, element) {\n if (value === 'parent') { return parentNode(element) }\n\n if (value === 'self') { return interactable.getRect(element) }\n\n return closest(element, value)\n}\n\nexport function resolveRectLike (value: Interact.RectResolvable, interactable?, element?, functionArgs?: T) {\n if (is.string(value)) {\n value = getStringOptionResult(value, interactable, element)\n }\n else if (is.func(value)) {\n value = value(...functionArgs)\n }\n\n if (is.element(value)) {\n value = getElementRect(value)\n }\n\n return value as Interact.Rect\n}\n\nexport function rectToXY (rect) {\n return rect && {\n x: 'x' in rect ? rect.x : rect.left,\n y: 'y' in rect ? rect.y : rect.top,\n }\n}\n\nexport function xywhToTlbr (rect) {\n if (rect && !('left' in rect && 'top' in rect)) {\n rect = extend({}, rect)\n\n rect.left = rect.x || 0\n rect.top = rect.y || 0\n rect.right = rect.right || (rect.left + rect.width)\n rect.bottom = rect.bottom || (rect.top + rect.height)\n }\n\n return rect\n}\n\nexport function tlbrToXywh (rect) {\n if (rect && !('x' in rect && 'y' in rect)) {\n rect = extend({}, rect)\n\n rect.x = rect.left || 0\n rect.y = rect.top || 0\n rect.width = rect.width || (rect.right - rect.x)\n rect.height = rect.height || (rect.bottom - rect.y)\n }\n\n return rect\n}\n\nexport default {\n getStringOptionResult,\n resolveRectLike,\n rectToXY,\n xywhToTlbr,\n tlbrToXywh,\n}\n","import { rectToXY, resolveRectLike } from './rect'\n\nexport default function (target, element, action?) {\n const actionOptions = target.options[action]\n const actionOrigin = actionOptions && actionOptions.origin\n const origin = actionOrigin || target.options.origin\n\n const originRect = resolveRectLike(origin, target, element, [target && element])\n\n return rectToXY(originRect) || { x: 0, y: 0 }\n}\n","import extend from './extend'\nimport * as is from './is'\n\nexport interface NormalizedListeners {\n [type: string]: Interact.Listener[]\n}\n\nexport default function normalize (\n type: Interact.EventTypes,\n listeners?: Interact.ListenersArg | Interact.ListenersArg[],\n result?: NormalizedListeners,\n): NormalizedListeners {\n result = result || {}\n\n if (is.string(type) && type.search(' ') !== -1) {\n type = split(type)\n }\n\n if (is.array(type)) {\n return type.reduce(\n (acc, t) => extend(acc, normalize(t, listeners, result)),\n result\n )\n }\n\n // ({ type: fn }) -> ('', { type: fn })\n if (is.object(type)) {\n listeners = type\n type = ''\n }\n\n if (is.func(listeners)) {\n result[type] = result[type] || []\n result[type].push(listeners)\n }\n else if (is.array(listeners)) {\n for (const l of listeners) {\n normalize(type, l, result)\n }\n }\n else if (is.object(listeners)) {\n for (const prefix in listeners) {\n const combinedTypes = split(prefix).map(p => `${type}${p}`)\n\n normalize(combinedTypes, listeners[prefix], result)\n }\n }\n\n return result as NormalizedListeners\n}\n\nfunction split (type: string) {\n return type.trim().split(/ +/)\n}\n","let lastTime = 0\nlet request\nlet cancel\n\nfunction init (window) {\n request = window.requestAnimationFrame\n cancel = window.cancelAnimationFrame\n\n if (!request) {\n const vendors = ['ms', 'moz', 'webkit', 'o']\n\n for (const vendor of vendors) {\n request = window[`${vendor}RequestAnimationFrame`]\n cancel = window[`${vendor}CancelAnimationFrame`] || window[`${vendor}CancelRequestAnimationFrame`]\n }\n }\n\n if (!request) {\n request = callback => {\n const currTime = Date.now()\n const timeToCall = Math.max(0, 16 - (currTime - lastTime))\n // eslint-disable-next-line standard/no-callback-literal\n const token = setTimeout(() => { callback(currTime + timeToCall) },\n timeToCall)\n\n lastTime = currTime + timeToCall\n return token\n }\n\n cancel = token => clearTimeout(token)\n }\n}\n\nexport default {\n request: callback => request(callback),\n cancel: token => cancel(token),\n init,\n}\n","export type SignalListener = (signalArg: PartialSignalArg, sinalName?: string) => (void | boolean)\n\nexport interface SignalArg {\n interaction: Interact.Interaction\n Interactable: Interact.Interactable\n iEvent: Interact.InteractEvent\n element: Interact.EventTarget\n coords: Interact.Point\n event: Interact.PointerEventType\n phase: Interact.EventPhase\n [index: string]: any\n}\n\nexport type PartialSignalArg = Partial\n\nclass Signals {\n listeners: {\n [signalName: string]: SignalListener[]\n } = {}\n\n on (name: string, listener: SignalListener) {\n if (!this.listeners[name]) {\n this.listeners[name] = [listener]\n return\n }\n\n this.listeners[name].push(listener)\n }\n\n off (name: string, listener: SignalListener) {\n if (!this.listeners[name]) { return }\n\n const index = this.listeners[name].indexOf(listener)\n\n if (index !== -1) {\n this.listeners[name].splice(index, 1)\n }\n }\n\n fire (name: string, arg: Partial): void | false {\n const targetListeners = this.listeners[name]\n\n if (!targetListeners) { return }\n\n for (const listener of targetListeners) {\n if (listener(arg, name) === false) {\n return false\n }\n }\n }\n}\n\nexport default Signals\n","import * as arr from './arr'\nimport * as dom from './domUtils'\nimport * as is from './is'\nimport win from './window'\n\nexport function warnOnce (this: T, method: (...args: any) => any, message: string) {\n let warned = false\n\n // eslint-disable-next-line no-shadow\n return function (this: T) {\n if (!warned) {\n (win as any).window.console.warn(message)\n warned = true\n }\n\n return method.apply(this, arguments)\n }\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nexport function _getQBezierValue (t: number, p1: number, p2: number, p3: number) {\n const iT = 1 - t\n return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3\n}\n\nexport function getQuadraticCurvePoint (\n startX: number, startY: number, cpX: number, cpY: number, endX: number, endY: number, position: number) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY),\n }\n}\n\n// http://gizma.com/easing/\nexport function easeOutQuad (t: number, b: number, c: number, d: number) {\n t /= d\n return -c * t * (t - 2) + b\n}\n\nexport function copyAction (dest: Interact.ActionProps, src: Interact.ActionProps) {\n dest.name = src.name\n dest.axis = src.axis\n dest.edges = src.edges\n\n return dest\n}\n\nexport { default as browser } from './browser'\nexport { default as clone } from './clone'\nexport { default as events } from './events'\nexport { default as extend } from './extend'\nexport { default as getOriginXY } from './getOriginXY'\nexport { default as hypot } from './hypot'\nexport { default as normalizeListeners } from './normalizeListeners'\nexport { default as pointer } from './pointerUtils'\nexport { default as raf } from './raf'\nexport { default as rect } from './rect'\nexport { default as Signals } from './Signals'\nexport { win, arr, dom, is }\n","// tslint:disable no-empty-interface\n\nexport interface Defaults {\n base: BaseDefaults\n perAction: PerActionDefaults\n actions: ActionDefaults\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ActionDefaults {\n}\n\nexport interface BaseDefaults {\n preventDefault?: 'auto' | 'never' | string\n deltaSource?: 'page' | 'client'\n context?: Interact.EventTarget\n}\n\nexport interface PerActionDefaults {\n enabled?: boolean\n origin?: Interact.Point | string | Interact.Element\n listeners?: Interact.Listeners\n allowFrom?: string | Interact.Element\n ignoreFrom?: string | Interact.Element\n}\n\nexport type Options = Partial & Partial & {\n [P in keyof ActionDefaults]?: Partial\n}\n\n// export interface Options extends BaseDefaults, PerActionDefaults {}\n\nexport interface OptionsArg extends BaseDefaults, Interact.OrBoolean {}\n\nexport const defaults: Defaults = {\n base: {\n preventDefault: 'auto',\n deltaSource: 'page',\n },\n\n perAction: {\n enabled: false,\n origin: { x: 0, y: 0 },\n },\n\n actions: {} as ActionDefaults,\n}\n\nexport default defaults\n","import * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport normalize, { NormalizedListeners } from '@interactjs/utils/normalizeListeners'\nimport { EventPhase, InteractEvent } from './InteractEvent'\nimport { ActionName } from './scope'\n\nfunction fireUntilImmediateStopped<\n T extends ActionName,\n P extends EventPhase,\n> (event: InteractEvent, listeners: Interact.Listener[]) {\n for (const listener of listeners) {\n if (event.immediatePropagationStopped) { break }\n\n listener(event)\n }\n}\n\nclass Eventable {\n options: any\n types: NormalizedListeners = {}\n propagationStopped = false\n immediatePropagationStopped = false\n global: any\n\n constructor (options?: { [index: string]: any }) {\n this.options = extend({}, options || {})\n }\n\n fire (event: any) {\n let listeners\n const global = this.global\n\n // Interactable#on() listeners\n // tslint:disable no-conditional-assignment\n if ((listeners = this.types[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n\n // interact.on() listeners\n if (!event.propagationStopped && global && (listeners = global[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n }\n\n on (type: string, listener: Interact.ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n this.types[type] = arr.merge(this.types[type] || [], listeners[type])\n }\n }\n\n off (type: string, listener: Interact.ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n const eventList = this.types[type]\n\n if (!eventList || !eventList.length) { continue }\n\n for (const subListener of listeners[type]) {\n const index = eventList.indexOf(subListener)\n\n if (index !== -1) {\n eventList.splice(index, 1)\n }\n }\n }\n }\n}\n\nexport default Eventable\n","import * as arr from '@interactjs/utils/arr'\nimport browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport { getElementRect, matchesUpTo, nodeContains, trySelector } from '@interactjs/utils/domUtils'\nimport events from '@interactjs/utils/events'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport { getWindow } from '@interactjs/utils/window'\nimport { ActionDefaults, Defaults, Options } from './defaultOptions'\nimport Eventable from './Eventable'\nimport { Actions } from './scope'\n\ntype IgnoreValue = string | Interact.Element | boolean\n\n/** */\nexport class Interactable implements Partial {\n protected get _defaults (): Defaults {\n return {\n base: {},\n perAction: {},\n actions: {} as ActionDefaults,\n }\n }\n\n readonly options!: Required\n readonly _actions: Actions\n readonly target: Interact.Target\n readonly events = new Eventable()\n readonly _context: Document | Interact.Element\n readonly _win: Window\n readonly _doc: Document\n\n /** */\n constructor (target: Interact.Target, options: any, defaultContext: Document | Interact.Element) {\n this._actions = options.actions\n this.target = target\n this._context = options.context || defaultContext\n this._win = getWindow(trySelector(target) ? this._context : target)\n this._doc = this._win.document\n\n this.set(options)\n }\n\n setOnEvents (actionName: string, phases: NonNullable) {\n if (is.func(phases.onstart)) { this.on(`${actionName}start`, phases.onstart) }\n if (is.func(phases.onmove)) { this.on(`${actionName}move`, phases.onmove) }\n if (is.func(phases.onend)) { this.on(`${actionName}end`, phases.onend) }\n if (is.func(phases.oninertiastart)) { this.on(`${actionName}inertiastart`, phases.oninertiastart) }\n\n return this\n }\n\n updatePerActionListeners (actionName, prev, cur) {\n if (is.array(prev) || is.object(prev)) {\n this.off(actionName, prev)\n }\n\n if (is.array(cur) || is.object(cur)) {\n this.on(actionName, cur)\n }\n }\n\n setPerAction (actionName, options: Interact.OrBoolean) {\n const defaults = this._defaults\n\n // for all the default per-action options\n for (const optionName in options) {\n const actionOptions = this.options[actionName]\n const optionValue = options[optionName]\n const isArray = is.array(optionValue)\n\n // remove old event listeners and add new ones\n if (optionName === 'listeners') {\n this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue)\n }\n\n // if the option value is an array\n if (isArray) {\n actionOptions[optionName] = arr.from(optionValue)\n }\n // if the option value is an object\n else if (!isArray && is.plainObject(optionValue)) {\n // copy the object\n actionOptions[optionName] = extend(\n actionOptions[optionName] || {},\n clone(optionValue))\n\n // set anabled field to true if it exists in the defaults\n if (is.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) {\n actionOptions[optionName].enabled = optionValue.enabled !== false\n }\n }\n // if the option value is a boolean and the default is an object\n else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n actionOptions[optionName].enabled = optionValue\n }\n // if it's anything else, do a plain assignment\n else {\n actionOptions[optionName] = optionValue\n }\n }\n }\n\n /**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {object} The object's bounding rectangle.\n */\n getRect (element: Interact.Element) {\n element = element || (is.element(this.target)\n ? this.target\n : null)\n\n if (is.string(this.target)) {\n element = element || this._context.querySelector(this.target)\n }\n\n return getElementRect(element)\n }\n\n /**\n * Returns or sets the function used to calculate the interactable's\n * element's rectangle\n *\n * @param {function} [checker] A function which returns this Interactable's\n * bounding rectangle. See {@link Interactable.getRect}\n * @return {function | object} The checker function or this Interactable\n */\n rectChecker (checker: (element: Interact.Element) => any) {\n if (is.func(checker)) {\n this.getRect = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.getRect\n\n return this\n }\n\n return this.getRect\n }\n\n _backCompatOption (optionName, newValue) {\n if (trySelector(newValue) || is.object(newValue)) {\n this.options[optionName] = newValue\n\n for (const action of this._actions.names) {\n this.options[action][optionName] = newValue\n }\n\n return this\n }\n\n return this.options[optionName]\n }\n\n /**\n * Gets or sets the origin of the Interactable's element. The x and y\n * of the origin will be subtracted from action event coordinates.\n *\n * @param {Element | object | string} [origin] An HTML or SVG Element whose\n * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\n * or any CSS selector\n *\n * @return {object} The current origin or this Interactable\n */\n origin (newValue) {\n return this._backCompatOption('origin', newValue)\n }\n\n /**\n * Returns or sets the mouse coordinate types used to calculate the\n * movement of the pointer.\n *\n * @param {string} [newValue] Use 'client' if you will be scrolling while\n * interacting; Use 'page' if you want autoScroll to work\n * @return {string | object} The current deltaSource or this Interactable\n */\n deltaSource (newValue) {\n if (newValue === 'page' || newValue === 'client') {\n this.options.deltaSource = newValue\n\n return this\n }\n\n return this.options.deltaSource\n }\n\n /**\n * Gets the selector context Node of the Interactable. The default is\n * `window.document`.\n *\n * @return {Node} The context Node of this Interactable\n */\n context () {\n return this._context\n }\n\n inContext (element) {\n return (this._context === element.ownerDocument ||\n nodeContains(this._context, element))\n }\n\n testIgnoreAllow (\n this: Interactable,\n options: { ignoreFrom: IgnoreValue, allowFrom: IgnoreValue },\n targetNode: Node,\n eventTarget: Interact.Element,\n ) {\n return (!this.testIgnore(options.ignoreFrom, targetNode, eventTarget) &&\n this.testAllow(options.allowFrom, targetNode, eventTarget))\n }\n\n testAllow (\n this: Interactable,\n allowFrom: IgnoreValue,\n targetNode: Node,\n element: Interact.Element,\n ) {\n if (!allowFrom) { return true }\n\n if (!is.element(element)) { return false }\n\n if (is.string(allowFrom)) {\n return matchesUpTo(element, allowFrom, targetNode)\n }\n else if (is.element(allowFrom)) {\n return nodeContains(allowFrom, element)\n }\n\n return false\n }\n\n testIgnore (\n this: Interactable,\n ignoreFrom: IgnoreValue,\n targetNode: Node,\n element: Interact.Element,\n ) {\n if (!ignoreFrom || !is.element(element)) { return false }\n\n if (is.string(ignoreFrom)) {\n return matchesUpTo(element, ignoreFrom, targetNode)\n }\n else if (is.element(ignoreFrom)) {\n return nodeContains(ignoreFrom, element)\n }\n\n return false\n }\n\n /**\n * Calls listeners for the given InteractEvent type bound globally\n * and directly to this Interactable\n *\n * @param {InteractEvent} iEvent The InteractEvent object to be fired on this\n * Interactable\n * @return {Interactable} this Interactable\n */\n fire (iEvent) {\n this.events.fire(iEvent)\n\n return this\n }\n\n _onOff (method: 'on' | 'off', typeArg: Interact.EventTypes, listenerArg?: Interact.ListenersArg | null, options?: any) {\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg\n listenerArg = null\n }\n\n const addRemove = method === 'on' ? 'add' : 'remove'\n const listeners = normalizeListeners(typeArg, listenerArg)\n\n for (let type in listeners) {\n if (type === 'wheel') { type = browser.wheelEvent }\n\n for (const listener of listeners[type]) {\n // if it is an action event type\n if (arr.contains(this._actions.eventTypes, type)) {\n this.events[method](type, listener)\n }\n // delegated event\n else if (is.string(this.target)) {\n events[`${addRemove}Delegate`](this.target, this._context, type, listener, options)\n }\n // remove listener from this Interatable's element\n else {\n (events[addRemove] as typeof events.remove)(this.target, type, listener, options)\n }\n }\n }\n\n return this\n }\n\n /**\n * Binds a listener for an InteractEvent, pointerEvent or DOM event.\n *\n * @param {string | array | object} types The types of events to listen\n * for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * addEventListener\n * @return {Interactable} This Interactable\n */\n on (types: Interact.EventTypes, listener?: Interact.ListenersArg, options?: any) {\n return this._onOff('on', types, listener, options)\n }\n\n /**\n * Removes an InteractEvent, pointerEvent or DOM event listener.\n *\n * @param {string | array | object} types The types of events that were\n * listened for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * removeEventListener\n * @return {Interactable} This Interactable\n */\n off (types: string | string[] | Interact.EventTypes, listener?: Interact.ListenersArg, options?: any) {\n return this._onOff('off', types, listener, options)\n }\n\n /**\n * Reset the options of this Interactable\n *\n * @param {object} options The new settings to apply\n * @return {object} This Interactable\n */\n set (options: Interact.OptionsArg) {\n const defaults = this._defaults\n\n if (!is.object(options)) {\n options = {}\n }\n\n (this.options as Required) = clone(defaults.base) as Required\n\n for (const actionName in this._actions.methodDict) {\n const methodName = this._actions.methodDict[actionName]\n\n this.options[actionName] = {}\n this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName]))\n\n this[methodName](options[actionName])\n }\n\n for (const setting in options) {\n if (is.func(this[setting])) {\n this[setting](options[setting])\n }\n }\n\n return this\n }\n\n /**\n * Remove this interactable from the list of interactables and remove it's\n * action capabilities and event listeners\n *\n * @return {interact}\n */\n unset () {\n events.remove(this.target as Node, 'all')\n\n if (is.string(this.target)) {\n // remove delegated events\n for (const type in events.delegatedEvents) {\n const delegated = events.delegatedEvents[type]\n\n if (delegated.selectors[0] === this.target &&\n delegated.contexts[0] === this._context) {\n delegated.selectors.splice(0, 1)\n delegated.contexts.splice(0, 1)\n delegated.listeners.splice(0, 1)\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegated[type] = null\n }\n }\n\n events.remove(this._context, type, events.delegateListener)\n events.remove(this._context, type, events.delegateUseCapture, true)\n }\n }\n else {\n events.remove(this.target as Node, 'all')\n }\n }\n}\n\nexport default Interactable\n","import * as arr from '@interactjs/utils/arr'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\nimport Signals from '@interactjs/utils/Signals'\n\nexport default class InteractableSet {\n signals = new Signals()\n\n // all set interactables\n list: Interact.Interactable[] = []\n\n selectorMap: {\n [selector: string]: Array<{ context: Document | Interact.Element, interactable: Interact.Interactable }>\n } = {}\n\n constructor (protected scope: Interact.Scope) {\n this.signals.on('unset', ({ interactable }) => {\n const { target, _context: context } = interactable\n const targetMappings = is.string(target)\n ? this.selectorMap[target]\n : target[this.scope.id]\n\n const targetIndex = targetMappings.findIndex(m => m.context === context)\n if (targetMappings[targetIndex]) {\n // Destroying mappingInfo's context and interactable\n targetMappings[targetIndex].context = null\n targetMappings[targetIndex].interactable = null\n }\n targetMappings.splice(targetIndex, 1)\n })\n }\n\n new (target: Interact.Target, options?: any): Interact.Interactable {\n options = extend(options || {}, {\n actions: this.scope.actions,\n })\n const interactable = new this.scope.Interactable(target, options, this.scope.document)\n const mappingInfo = { context: interactable._context, interactable }\n\n this.scope.addDocument(interactable._doc)\n this.list.push(interactable)\n\n if (is.string(target)) {\n if (!this.selectorMap[target]) { this.selectorMap[target] = [] }\n this.selectorMap[target].push(mappingInfo)\n } else {\n if (!interactable.target[this.scope.id]) {\n Object.defineProperty(target, this.scope.id, {\n value: [],\n configurable: true,\n })\n }\n\n target[this.scope.id].push(mappingInfo)\n }\n\n this.signals.fire('new', {\n target,\n options,\n interactable,\n win: this.scope._win,\n })\n\n return interactable\n }\n\n get (target: Interact.Target, options) {\n const context = (options && options.context) || this.scope.document\n const isSelector = is.string(target)\n const targetMappings = isSelector\n ? this.selectorMap[target as string]\n : target[this.scope.id]\n\n if (!targetMappings) { return null }\n\n const found = arr.find(\n targetMappings,\n m => m.context === context &&\n (isSelector || m.interactable.inContext(target)))\n\n return found && found.interactable\n }\n\n forEachMatch (node: Node, callback: (interactable: Interact.Interactable) => T): T | void {\n for (const interactable of this.list) {\n let ret\n\n if ((is.string(interactable.target)\n // target is a selector and the element matches\n ? (is.element(node) && domUtils.matchesSelector(node, interactable.target))\n // target is the element\n : node === interactable.target) &&\n // the element is in context\n (interactable.inContext(node))) {\n ret = callback(interactable)\n }\n\n if (ret !== undefined) {\n return ret\n }\n }\n }\n}\n","import Interactable from './Interactable'\nimport Interaction from './Interaction'\nimport { ActionName } from './scope'\n\nexport enum EventPhase {\n Start = 'start',\n Move = 'move',\n End = 'end',\n _NONE = '',\n}\n\nexport class BaseEvent {\n type: string\n target: EventTarget\n currentTarget: EventTarget\n interactable: Interactable\n _interaction: Interaction\n timeStamp: any\n immediatePropagationStopped = false\n propagationStopped = false\n\n get interaction () {\n return this._interaction._proxy\n }\n\n constructor (interaction) {\n this._interaction = interaction\n }\n\n preventDefault () {}\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n\nexport default BaseEvent\n","import extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport hypot from '@interactjs/utils/hypot'\nimport BaseEvent from './BaseEvent'\nimport defaults from './defaultOptions'\nimport Interaction from './Interaction'\nimport { ActionName } from './scope'\n\nexport enum EventPhase {\n Start = 'start',\n Move = 'move',\n End = 'end',\n _NONE = '',\n}\n\nexport class InteractEvent<\n T extends ActionName = any,\n P extends EventPhase = EventPhase._NONE,\n> extends BaseEvent {\n target: Interact.Element\n currentTarget: Interact.Element\n relatedTarget: Interact.Element\n screenX?: number\n screenY?: number\n button: number\n buttons: number\n ctrlKey: boolean\n shiftKey: boolean\n altKey: boolean\n metaKey: boolean\n page: Interact.Point\n client: Interact.Point\n delta: Interact.Point\n rect: Interact.FullRect\n x0: number\n y0: number\n t0: number\n dt: number\n duration: number\n clientX0: number\n clientY0: number\n velocity: Interact.Point\n speed: number\n swipe: ReturnType['getSwipe']>\n timeStamp: any\n // drag\n dragEnter?: Interact.Element\n dragLeave?: Interact.Element\n // resize\n axes?: 'x' | 'y' | 'xy'\n preEnd?: boolean\n\n /** */\n constructor (\n interaction: Interaction,\n event: Interact.PointerEventType,\n actionName: T,\n phase: P,\n element: Interact.Element,\n related?: Interact.Element,\n preEnd?: boolean,\n type?: string,\n ) {\n super(interaction)\n\n element = element || interaction.element\n\n const target = interaction.interactable\n const deltaSource = (((target && target.options) || defaults) as any).deltaSource as 'page' | 'client'\n const origin = getOriginXY(target, element, actionName)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const prevEvent = starting ? this : interaction.prevEvent\n const coords = starting\n ? interaction.coords.start\n : ending\n ? { page: prevEvent.page, client: prevEvent.client, timeStamp: interaction.coords.cur.timeStamp }\n : interaction.coords.cur\n\n this.page = extend({}, coords.page)\n this.client = extend({}, coords.client)\n this.rect = extend({}, interaction.rect)\n this.timeStamp = coords.timeStamp\n\n if (!ending) {\n this.page.x -= origin.x\n this.page.y -= origin.y\n\n this.client.x -= origin.x\n this.client.y -= origin.y\n }\n\n this.ctrlKey = event.ctrlKey\n this.altKey = event.altKey\n this.shiftKey = event.shiftKey\n this.metaKey = event.metaKey\n this.button = (event as MouseEvent).button\n this.buttons = (event as MouseEvent).buttons\n this.target = element\n this.currentTarget = element\n this.relatedTarget = related || null\n this.preEnd = preEnd\n this.type = type || (actionName + (phase || ''))\n this.interactable = target\n\n this.t0 = starting\n ? interaction.pointers[interaction.pointers.length - 1].downTime\n : prevEvent.t0\n\n this.x0 = interaction.coords.start.page.x - origin.x\n this.y0 = interaction.coords.start.page.y - origin.y\n this.clientX0 = interaction.coords.start.client.x - origin.x\n this.clientY0 = interaction.coords.start.client.y - origin.y\n\n if (starting || ending) {\n this.delta = { x: 0, y: 0 }\n }\n else {\n this.delta = {\n x: this[deltaSource].x - prevEvent[deltaSource].x,\n y: this[deltaSource].y - prevEvent[deltaSource].y,\n }\n }\n\n this.dt = interaction.coords.delta.timeStamp\n this.duration = this.timeStamp - this.t0\n\n // velocity and speed in pixels per second\n this.velocity = extend({}, interaction.coords.velocity[deltaSource])\n this.speed = hypot(this.velocity.x, this.velocity.y)\n\n this.swipe = (ending || phase === 'inertiastart') ? this.getSwipe() : null\n }\n\n get pageX () { return this.page.x }\n set pageX (value) { this.page.x = value }\n get pageY () { return this.page.y }\n set pageY (value) { this.page.y = value }\n\n get clientX () { return this.client.x }\n set clientX (value) { this.client.x = value }\n get clientY () { return this.client.y }\n set clientY (value) { this.client.y = value }\n\n get dx () { return this.delta.x }\n set dx (value) { this.delta.x = value }\n get dy () { return this.delta.y }\n set dy (value) { this.delta.y = value }\n\n get velocityX () { return this.velocity.x }\n set velocityX (value) { this.velocity.x = value }\n get velocityY () { return this.velocity.y }\n set velocityY (value) { this.velocity.y = value }\n\n getSwipe () {\n const interaction = this._interaction\n\n if (interaction.prevEvent.speed < 600 ||\n this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n return null\n }\n\n let angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI\n const overlap = 22.5\n\n if (angle < 0) {\n angle += 360\n }\n\n const left = 135 - overlap <= angle && angle < 225 + overlap\n const up = 225 - overlap <= angle && angle < 315 + overlap\n\n const right = !left && (315 - overlap <= angle || angle < 45 + overlap)\n const down = !up && 45 - overlap <= angle && angle < 135 + overlap\n\n return {\n up,\n down,\n left,\n right,\n angle,\n speed: interaction.prevEvent.speed,\n velocity: {\n x: interaction.prevEvent.velocityX,\n y: interaction.prevEvent.velocityY,\n },\n }\n }\n\n preventDefault () {}\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n}\n\nexport default InteractEvent\n","/* eslint-disable @typescript-eslint/no-parameter-properties */\nexport class PointerInfo {\n constructor (\n public id: number,\n public pointer: Interact.PointerType,\n public event: Interact.PointerEventType,\n public downTime: number,\n public downTarget: Node,\n ) {}\n}\n\nexport default PointerInfo\n","import * as dom from '@interactjs/utils/domUtils'\n\nexport interface SearchDetails {\n pointer: Interact.PointerType\n pointerId: number\n pointerType: string\n eventType: string\n eventTarget: Interact.EventTarget\n curEventTarget: Interact.EventTarget\n scope: Interact.Scope\n}\n\nconst finder = {\n methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'],\n\n search (details) {\n for (const method of finder.methodOrder) {\n const interaction = finder[method](details)\n\n if (interaction) {\n return interaction\n }\n }\n },\n\n // try to resume simulation with a new pointer\n simulationResume ({ pointerType, eventType, eventTarget, scope }: SearchDetails) {\n if (!/down|start/i.test(eventType)) {\n return null\n }\n\n for (const interaction of scope.interactions.list) {\n let element = eventTarget\n\n if (interaction.simulation && interaction.simulation.allowResume &&\n (interaction.pointerType === pointerType)) {\n while (element) {\n // if the element is the interaction element\n if (element === interaction.element) {\n return interaction\n }\n element = dom.parentNode(element)\n }\n }\n }\n\n return null\n },\n\n // if it's a mouse or pen interaction\n mouseOrPen ({ pointerId, pointerType, eventType, scope }: SearchDetails) {\n if (pointerType !== 'mouse' && pointerType !== 'pen') {\n return null\n }\n\n let firstNonActive\n\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType) {\n // if it's a down event, skip interactions with running simulations\n if (interaction.simulation && !hasPointerId(interaction, pointerId)) { continue }\n\n // if the interaction is active, return it immediately\n if (interaction.interacting()) {\n return interaction\n }\n // otherwise save it and look for another active interaction\n else if (!firstNonActive) {\n firstNonActive = interaction\n }\n }\n }\n\n // if no active mouse interaction was found use the first inactive mouse\n // interaction\n if (firstNonActive) {\n return firstNonActive\n }\n\n // find any mouse or pen interaction.\n // ignore the interaction if the eventType is a *down, and a simulation\n // is active\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get interaction that has this pointer\n hasPointer ({ pointerId, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n if (hasPointerId(interaction, pointerId)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get first idle interaction with a matching pointerType\n idle ({ pointerType, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n // if there's already a pointer held down\n if (interaction.pointers.length === 1) {\n const target = interaction.interactable\n // don't add this pointer if there is a target interactable and it\n // isn't gesturable\n if (target && !(target.options.gesture && target.options.gesture.enabled)) {\n continue\n }\n }\n // maximum of 2 pointers per interaction\n else if (interaction.pointers.length >= 2) {\n continue\n }\n\n if (!interaction.interacting() && (pointerType === interaction.pointerType)) {\n return interaction\n }\n }\n\n return null\n },\n}\n\nfunction hasPointerId (interaction: Interact.Interaction, pointerId: number) {\n return interaction.pointers.some(({ id }) => id === pointerId)\n}\n\nexport default finder\n","import { ActionName, Scope } from '@interactjs/core/scope'\nimport * as arr from '@interactjs/utils/arr'\nimport * as is from '@interactjs/utils/is'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n draggable: DraggableMethod\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n drag: Interact.DraggableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Drag]?: typeof drag\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Drag = 'drag'\n }\n}\n\n(ActionName as any).Drag = 'drag'\n\nexport type DragEvent = Interact.InteractEvent\n\nexport type DraggableMethod = Interact.ActionMethod\n\nfunction install (scope: Scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope\n\n interactions.signals.on('before-action-move', beforeMove)\n interactions.signals.on('action-resume', beforeMove)\n\n // dragmove\n interactions.signals.on('action-move', move)\n\n Interactable.prototype.draggable = drag.draggable\n\n actions[ActionName.Drag] = drag\n actions.names.push(ActionName.Drag)\n arr.merge(actions.eventTypes, [\n 'dragstart',\n 'dragmove',\n 'draginertiastart',\n 'dragresume',\n 'dragend',\n ])\n actions.methodDict.drag = 'draggable'\n\n defaults.actions.drag = drag.defaults\n}\n\nfunction beforeMove ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x') {\n interaction.coords.cur.page.y = interaction.coords.start.page.y\n interaction.coords.cur.client.y = interaction.coords.start.client.y\n\n interaction.coords.velocity.client.y = 0\n interaction.coords.velocity.page.y = 0\n }\n else if (axis === 'y') {\n interaction.coords.cur.page.x = interaction.coords.start.page.x\n interaction.coords.cur.client.x = interaction.coords.start.client.x\n\n interaction.coords.velocity.client.x = 0\n interaction.coords.velocity.page.x = 0\n }\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x' || axis === 'y') {\n const opposite = axis === 'x' ? 'y' : 'x'\n\n iEvent.page[opposite] = interaction.coords.start.page[opposite]\n iEvent.client[opposite] = interaction.coords.start.client[opposite]\n iEvent.delta[opposite] = 0\n }\n}\n\n/**\n * ```js\n * interact(element).draggable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // the axis in which the first movement must be\n * // for the drag sequence to start\n * // 'xy' by default - any direction\n * startAxis: 'x' || 'y' || 'xy',\n *\n * // 'xy' by default - don't restrict to one axis (move in any direction)\n * // 'x' or 'y' to restrict movement to either axis\n * // 'start' to restrict movement to the axis the drag started in\n * lockAxis: 'x' || 'y' || 'xy' || 'start',\n *\n * // max number of drags that can happen concurrently\n * // with elements of this Interactable. Infinity by default\n * max: Infinity,\n *\n * // max number of drags that can target the same element+Interactable\n * // 1 by default\n * maxPerElement: 2\n * })\n *\n * var isDraggable = interact('element').draggable(); // true\n * ```\n *\n * Get or set whether drag actions can be performed on the target\n *\n * @alias Interactable.prototype.draggable\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on drag events (object makes the Interactable\n * draggable)\n * @return {boolean | Interactable} boolean indicating if this can be the\n * target of drag events, or this Interctable\n */\nconst draggable: DraggableMethod = function draggable (this: Interact.Interactable, options?: Interact.DraggableOptions | boolean): any {\n if (is.object(options)) {\n this.options.drag.enabled = options.enabled !== false\n this.setPerAction('drag', options)\n this.setOnEvents('drag', options)\n\n if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n this.options.drag.lockAxis = options.lockAxis\n }\n if (/^(xy|x|y)$/.test(options.startAxis)) {\n this.options.drag.startAxis = options.startAxis\n }\n\n return this\n }\n\n if (is.bool(options)) {\n this.options.drag.enabled = options\n\n return this\n }\n\n return this.options.drag\n}\n\nconst drag: Interact.Plugin = {\n id: 'actions/drag',\n install,\n draggable,\n beforeMove,\n move,\n defaults: {\n startAxis : 'xy',\n lockAxis : 'xy',\n } as Interact.DropzoneOptions,\n\n checker (_pointer, _event, interactable) {\n const dragOptions = interactable.options.drag\n\n return dragOptions.enabled\n ? {\n name: 'drag',\n axis: (dragOptions.lockAxis === 'start'\n ? dragOptions.startAxis\n : dragOptions.lockAxis),\n }\n : null\n },\n\n getCursor () {\n return 'move'\n },\n}\n\nexport default drag\n","import BaseEvent from '@interactjs/core/BaseEvent'\nimport Interactable from '@interactjs/core/Interactable'\nimport InteractEvent from '@interactjs/core/InteractEvent'\nimport Interaction from '@interactjs/core/Interaction'\nimport { ActionName } from '@interactjs/core/scope'\nimport * as arr from '@interactjs/utils/arr'\n\nclass DropEvent extends BaseEvent {\n target: Interact.Element\n dropzone: Interactable\n dragEvent: InteractEvent\n relatedTarget: Interact.Element\n draggable: Interactable\n timeStamp: number\n propagationStopped = false\n immediatePropagationStopped = false\n\n /**\n * Class of events fired on dropzones during drags with acceptable targets.\n */\n constructor (dropState: Interaction['dropState'], dragEvent: InteractEvent, type: string) {\n super(dragEvent._interaction)\n\n const { element, dropzone } = type === 'dragleave'\n ? dropState.prev\n : dropState.cur\n\n this.type = type\n this.target = element\n this.currentTarget = element\n this.dropzone = dropzone\n this.dragEvent = dragEvent\n this.relatedTarget = dragEvent.target\n this.draggable = dragEvent.interactable\n this.timeStamp = dragEvent.timeStamp\n }\n\n /**\n * If this is a `dropactivate` event, the dropzone element will be\n * deactivated.\n *\n * If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the\n * dropzone element and more.\n */\n reject () {\n const { dropState } = this._interaction\n\n if (\n (this.type !== 'dropactivate') && (\n !this.dropzone ||\n dropState.cur.dropzone !== this.dropzone ||\n dropState.cur.element !== this.target)) {\n return\n }\n\n dropState.prev.dropzone = this.dropzone\n dropState.prev.element = this.target\n\n dropState.rejected = true\n dropState.events.enter = null\n\n this.stopImmediatePropagation()\n\n if (this.type === 'dropactivate') {\n const activeDrops = dropState.activeDrops\n const index = arr.findIndex(activeDrops, ({ dropzone, element }) =>\n dropzone === this.dropzone && element === this.target)\n\n dropState.activeDrops = [\n ...activeDrops.slice(0, index),\n ...activeDrops.slice(index + 1),\n ]\n\n const deactivateEvent = new DropEvent(dropState, this.dragEvent, 'dropdeactivate')\n\n deactivateEvent.dropzone = this.dropzone\n deactivateEvent.target = this.target\n\n this.dropzone.fire(deactivateEvent)\n }\n else {\n this.dropzone.fire(new DropEvent(dropState, this.dragEvent, 'dragleave'))\n }\n }\n\n preventDefault () {}\n\n stopPropagation () {\n this.propagationStopped = true\n }\n\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n\nexport default DropEvent\n","import Interactable from '@interactjs/core/Interactable'\nimport InteractEvent from '@interactjs/core/InteractEvent'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport drag from '../drag'\nimport DropEvent from './DropEvent'\n\nexport interface DropzoneMethod {\n (options: Interact.DropzoneOptions | boolean): Interact.Interactable\n (): Interact.DropzoneOptions\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n dropzone: DropzoneMethod\n dropCheck: (\n dragEvent: InteractEvent,\n event: Interact.PointerEventType,\n draggable: Interactable,\n draggableElement: Interact.Element,\n dropElemen: Interact.Element,\n rect: any\n ) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n dropState?: {\n cur: {\n dropzone: Interactable // the dropzone a drag target might be dropped into\n element: Interact.Element // the element at the time of checking\n }\n prev: {\n dropzone: Interactable // the dropzone that was recently dragged away from\n element: Interact.Element // the element at the time of checking\n }\n rejected: boolean // wheather the potential drop was rejected from a listener\n events: any // the drop events related to the current drag event\n activeDrops: Array<{\n dropzone: Interactable\n element: Interact.Element\n rect: Interact.Rect\n }>\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n drop: Interact.DropzoneOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n dynamicDrop?: boolean\n }\n}\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n dynamicDrop: (newValue?: boolean) => boolean | Interact.interact\n }\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n /** @lends module:interact */\n interact,\n /** @lends Interactable */\n Interactable, // eslint-disable-line no-shadow\n interactions,\n defaults,\n } = scope\n\n scope.usePlugin(drag)\n\n interactions.signals.on('before-action-start', ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n interaction.dropState = {\n cur: {\n dropzone: null,\n element: null,\n },\n prev: {\n dropzone: null,\n element: null,\n },\n rejected: null,\n events: null,\n activeDrops: null,\n }\n })\n\n interactions.signals.on('after-action-start', ({ interaction, event, iEvent: dragEvent }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n const { dropState } = interaction\n\n // reset active dropzones\n dropState.activeDrops = null\n dropState.events = null\n dropState.activeDrops = getActiveDrops(scope, interaction.element)\n dropState.events = getDropEvents(interaction, event, dragEvent)\n\n if (dropState.events.activate) {\n fireActivationEvents(dropState.activeDrops, dropState.events.activate)\n }\n })\n\n // FIXME proper signal types\n interactions.signals.on('action-move', arg => onEventCreated(arg as any, scope))\n interactions.signals.on('action-end', arg => onEventCreated(arg as any, scope))\n\n interactions.signals.on('after-action-move', ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n fireDropEvents(interaction, interaction.dropState.events)\n interaction.dropState.events = {}\n })\n\n interactions.signals.on('after-action-end', ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n fireDropEvents(interaction, interaction.dropState.events)\n })\n\n interactions.signals.on('stop', ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n const { dropState } = interaction\n\n if (dropState) {\n dropState.activeDrops = null\n dropState.events = null\n dropState.cur.dropzone = null\n dropState.cur.element = null\n dropState.prev.dropzone = null\n dropState.prev.element = null\n dropState.rejected = false\n }\n })\n\n /**\n *\n * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param {boolean | object | null} [options] The new options to be set.\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.dropzone = function (this: Interact.Interactable, options?: Interact.DropzoneOptions | boolean) {\n return dropzoneMethod(this, options)\n }\n\n /**\n * ```js\n * interact(target)\n * .dropChecker(function(dragEvent, // related dragmove or dragend event\n * event, // TouchEvent/PointerEvent/MouseEvent\n * dropped, // bool result of the default checker\n * dropzone, // dropzone Interactable\n * dropElement, // dropzone elemnt\n * draggable, // draggable Interactable\n * draggableElement) {// draggable element\n *\n * return dropped && event.target.hasAttribute('allow-drop')\n * }\n * ```\n */\n Interactable.prototype.dropCheck = function (this: Interact.Interactable, dragEvent, event, draggable, draggableElement, dropElement, rect) {\n return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect)\n }\n\n /**\n * Returns or sets whether the dimensions of dropzone elements are calculated\n * on every dragmove or only on dragstart for the default dropChecker\n *\n * @param {boolean} [newValue] True to check on each move. False to check only\n * before start\n * @return {boolean | interact} The current setting or interact\n */\n interact.dynamicDrop = function (newValue?: boolean) {\n if (utils.is.bool(newValue)) {\n // if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n // calcRects(dropzones)\n // }\n\n scope.dynamicDrop = newValue\n\n return interact\n }\n return scope.dynamicDrop\n }\n\n utils.arr.merge(actions.eventTypes, [\n 'dragenter',\n 'dragleave',\n 'dropactivate',\n 'dropdeactivate',\n 'dropmove',\n 'drop',\n ])\n actions.methodDict.drop = 'dropzone'\n\n scope.dynamicDrop = false\n\n defaults.actions.drop = drop.defaults\n}\n\nfunction collectDrops ({ interactables }, draggableElement) {\n const drops = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const dropzone of interactables.list) {\n if (!dropzone.options.drop.enabled) { continue }\n\n const accept = dropzone.options.drop.accept\n\n // test the draggable draggableElement against the dropzone's accept setting\n if ((utils.is.element(accept) && accept !== draggableElement) ||\n (utils.is.string(accept) &&\n !utils.dom.matchesSelector(draggableElement, accept)) ||\n (utils.is.func(accept) && !accept({ dropzone, draggableElement }))) {\n continue\n }\n\n // query for new elements if necessary\n const dropElements = utils.is.string(dropzone.target)\n ? dropzone._context.querySelectorAll(dropzone.target)\n : utils.is.array(dropzone.target) ? dropzone.target : [dropzone.target]\n\n for (const dropzoneElement of dropElements) {\n if (dropzoneElement !== draggableElement) {\n drops.push({\n dropzone,\n element: dropzoneElement,\n })\n }\n }\n }\n\n return drops\n}\n\nfunction fireActivationEvents (activeDrops, event) {\n // loop through all active dropzones and trigger event\n for (const { dropzone, element } of activeDrops) {\n event.dropzone = dropzone\n\n // set current element as event target\n event.target = element\n dropzone.fire(event)\n event.propagationStopped = event.immediatePropagationStopped = false\n }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops (scope: Scope, dragElement: Interact.Element) {\n // get dropzones and their elements that could receive the draggable\n const activeDrops = collectDrops(scope, dragElement)\n\n for (const activeDrop of activeDrops) {\n activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element)\n }\n\n return activeDrops\n}\n\nfunction getDrop ({ dropState, interactable: draggable, element: dragElement }: Partial, dragEvent, pointerEvent) {\n const validDrops = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const { dropzone, element: dropzoneElement, rect } of dropState.activeDrops) {\n validDrops.push(dropzone.dropCheck(dragEvent, pointerEvent, draggable, dragElement, dropzoneElement, rect)\n ? dropzoneElement\n : null)\n }\n\n // get the most appropriate dropzone based on DOM depth and order\n const dropIndex = utils.dom.indexOfDeepestElement(validDrops)\n\n return dropState.activeDrops[dropIndex] || null\n}\n\nfunction getDropEvents (interaction: Interact.Interaction, _pointerEvent, dragEvent) {\n const { dropState } = interaction\n const dropEvents = {\n enter : null,\n leave : null,\n activate : null,\n deactivate: null,\n move : null,\n drop : null,\n }\n\n if (dragEvent.type === 'dragstart') {\n dropEvents.activate = new DropEvent(dropState, dragEvent, 'dropactivate')\n\n dropEvents.activate.target = null\n dropEvents.activate.dropzone = null\n }\n if (dragEvent.type === 'dragend') {\n dropEvents.deactivate = new DropEvent(dropState, dragEvent, 'dropdeactivate')\n\n dropEvents.deactivate.target = null\n dropEvents.deactivate.dropzone = null\n }\n\n if (dropState.rejected) {\n return dropEvents\n }\n\n if (dropState.cur.element !== dropState.prev.element) {\n // if there was a previous dropzone, create a dragleave event\n if (dropState.prev.dropzone) {\n dropEvents.leave = new DropEvent(dropState, dragEvent, 'dragleave')\n\n dragEvent.dragLeave = dropEvents.leave.target = dropState.prev.element\n dragEvent.prevDropzone = dropEvents.leave.dropzone = dropState.prev.dropzone\n }\n // if dropzone is not null, create a dragenter event\n if (dropState.cur.dropzone) {\n dropEvents.enter = new DropEvent(dropState, dragEvent, 'dragenter')\n\n dragEvent.dragEnter = dropState.cur.element\n dragEvent.dropzone = dropState.cur.dropzone\n }\n }\n\n if (dragEvent.type === 'dragend' && dropState.cur.dropzone) {\n dropEvents.drop = new DropEvent(dropState, dragEvent, 'drop')\n\n dragEvent.dropzone = dropState.cur.dropzone\n dragEvent.relatedTarget = dropState.cur.element\n }\n if (dragEvent.type === 'dragmove' && dropState.cur.dropzone) {\n dropEvents.move = new DropEvent(dropState, dragEvent, 'dropmove')\n\n dropEvents.move.dragmove = dragEvent\n dragEvent.dropzone = dropState.cur.dropzone\n }\n\n return dropEvents\n}\n\nfunction fireDropEvents (interaction: Interact.Interaction, events) {\n const { dropState } = interaction\n const {\n activeDrops,\n cur,\n prev,\n } = dropState\n\n if (events.leave) { prev.dropzone.fire(events.leave) }\n if (events.move) { cur.dropzone.fire(events.move) }\n if (events.enter) { cur.dropzone.fire(events.enter) }\n if (events.drop) { cur.dropzone.fire(events.drop) }\n\n if (events.deactivate) {\n fireActivationEvents(activeDrops, events.deactivate)\n }\n\n dropState.prev.dropzone = cur.dropzone\n dropState.prev.element = cur.element\n}\n\nfunction onEventCreated ({ interaction, iEvent, event }: Interact.SignalArg, scope) {\n if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') { return }\n\n const { dropState } = interaction\n\n if (scope.dynamicDrop) {\n dropState.activeDrops = getActiveDrops(scope, interaction.element)\n }\n\n const dragEvent = iEvent\n const dropResult = getDrop(interaction, dragEvent, event)\n\n // update rejected status\n dropState.rejected = dropState.rejected &&\n !!dropResult &&\n dropResult.dropzone === dropState.cur.dropzone &&\n dropResult.element === dropState.cur.element\n\n dropState.cur.dropzone = dropResult && dropResult.dropzone\n dropState.cur.element = dropResult && dropResult.element\n\n dropState.events = getDropEvents(interaction, event, dragEvent)\n}\n\nfunction dropzoneMethod (interactable: Interact.Interactable): Interact.DropzoneOptions\nfunction dropzoneMethod (interactable: Interact.Interactable, options: Interact.DropzoneOptions | boolean)\nfunction dropzoneMethod (interactable: Interact.Interactable, options?: Interact.DropzoneOptions | boolean) {\n if (utils.is.object(options)) {\n interactable.options.drop.enabled = options.enabled !== false\n\n if (options.listeners) {\n const normalized = utils.normalizeListeners(options.listeners)\n // rename 'drop' to '' as it will be prefixed with 'drop'\n const corrected = Object.keys(normalized).reduce((acc, type) => {\n const correctedType = /^(enter|leave)/.test(type)\n ? `drag${type}`\n : /^(activate|deactivate|move)/.test(type)\n ? `drop${type}`\n : type\n\n acc[correctedType] = normalized[type]\n\n return acc\n }, {})\n\n interactable.off(interactable.options.drop.listeners)\n interactable.on(corrected)\n interactable.options.drop.listeners = corrected\n }\n\n if (utils.is.func(options.ondrop)) { interactable.on('drop', options.ondrop) }\n if (utils.is.func(options.ondropactivate)) { interactable.on('dropactivate', options.ondropactivate) }\n if (utils.is.func(options.ondropdeactivate)) { interactable.on('dropdeactivate', options.ondropdeactivate) }\n if (utils.is.func(options.ondragenter)) { interactable.on('dragenter', options.ondragenter) }\n if (utils.is.func(options.ondragleave)) { interactable.on('dragleave', options.ondragleave) }\n if (utils.is.func(options.ondropmove)) { interactable.on('dropmove', options.ondropmove) }\n\n if (/^(pointer|center)$/.test(options.overlap as string)) {\n interactable.options.drop.overlap = options.overlap\n }\n else if (utils.is.number(options.overlap)) {\n interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0)\n }\n if ('accept' in options) {\n interactable.options.drop.accept = options.accept\n }\n if ('checker' in options) {\n interactable.options.drop.checker = options.checker\n }\n\n return interactable\n }\n\n if (utils.is.bool(options)) {\n interactable.options.drop.enabled = options\n\n return interactable\n }\n\n return interactable.options.drop\n}\n\nfunction dropCheckMethod (\n interactable: Interact.Interactable,\n dragEvent: InteractEvent,\n event: Interact.PointerEventType,\n draggable: Interact.Interactable,\n draggableElement: Interact.Element,\n dropElement: Interact.Element,\n rect: any\n) {\n let dropped = false\n\n // if the dropzone has no rect (eg. display: none)\n // call the custom dropChecker or just return false\n if (!(rect = rect || interactable.getRect(dropElement))) {\n return (interactable.options.drop.checker\n ? interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n : false)\n }\n\n const dropOverlap = interactable.options.drop.overlap\n\n if (dropOverlap === 'pointer') {\n const origin = utils.getOriginXY(draggable, draggableElement, 'drag')\n const page = utils.pointer.getPageXY(dragEvent)\n\n page.x += origin.x\n page.y += origin.y\n\n const horizontal = (page.x > rect.left) && (page.x < rect.right)\n const vertical = (page.y > rect.top) && (page.y < rect.bottom)\n\n dropped = horizontal && vertical\n }\n\n const dragRect = draggable.getRect(draggableElement)\n\n if (dragRect && dropOverlap === 'center') {\n const cx = dragRect.left + dragRect.width / 2\n const cy = dragRect.top + dragRect.height / 2\n\n dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom\n }\n\n if (dragRect && utils.is.number(dropOverlap)) {\n const overlapArea = (Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) *\n Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top)))\n\n const overlapRatio = overlapArea / (dragRect.width * dragRect.height)\n\n dropped = overlapRatio >= dropOverlap\n }\n\n if (interactable.options.drop.checker) {\n dropped = interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n }\n\n return dropped\n}\n\nconst drop = {\n id: 'actions/drop',\n install,\n getActiveDrops,\n getDrop,\n getDropEvents,\n fireDropEvents,\n defaults: {\n enabled: false,\n accept : null,\n overlap: 'pointer',\n } as Interact.DropzoneOptions,\n}\n\nexport default drop\n","import InteractEvent from '@interactjs/core/InteractEvent'\nimport { ActionName, Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\n\nexport type GesturableMethod = Interact.ActionMethod\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n gesture?: {\n angle: number // angle from first to second touch\n distance: number\n scale: number // gesture.distance / gesture.startDistance\n startAngle: number // angle of line joining two touches\n startDistance: number // distance between two touches of touchStart\n }\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n gesturable: GesturableMethod\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n gesture: Interact.GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Gesture]?: typeof gesture\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Gesture = 'gesture'\n }\n}\n\n(ActionName as any).Gesture = 'gesture'\n\nexport interface GestureEvent extends Interact.InteractEvent {\n distance: number\n angle: number\n da: number // angle change\n scale: number // ratio of distance start to current event\n ds: number // scale change\n box: Interact.Rect // enclosing box of all points\n touches: Interact.PointerType[]\n}\n\nexport interface GestureSignalArg extends Interact.SignalArg {\n iEvent: GestureEvent\n interaction: Interact.Interaction\n event: Interact.PointerEventType | GestureEvent\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope\n\n /**\n * ```js\n * interact(element).gesturable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // limit multiple gestures.\n * // See the explanation in {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * })\n *\n * var isGestureable = interact(element).gesturable()\n * ```\n *\n * Gets or sets whether multitouch gestures can be performed on the target\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on gesture events (makes the Interactable gesturable)\n * @return {boolean | Interactable} A boolean indicating if this can be the\n * target of gesture events, or this Interactable\n */\n Interactable.prototype.gesturable = function (this: Interact.Interactable, options: Interact.GesturableOptions | boolean) {\n if (utils.is.object(options)) {\n this.options.gesture.enabled = options.enabled !== false\n this.setPerAction('gesture', options)\n this.setOnEvents('gesture', options)\n\n return this\n }\n\n if (utils.is.bool(options)) {\n this.options.gesture.enabled = options\n\n return this\n }\n\n return this.options.gesture as Interact.Options\n } as GesturableMethod\n\n interactions.signals.on('action-start', updateGestureProps)\n interactions.signals.on('action-move', updateGestureProps)\n interactions.signals.on('action-end', updateGestureProps)\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.gesture = {\n angle: 0,\n distance: 0,\n scale: 1,\n startAngle: 0,\n startDistance: 0,\n }\n })\n\n actions[ActionName.Gesture] = gesture\n actions.names.push(ActionName.Gesture)\n utils.arr.merge(actions.eventTypes, [\n 'gesturestart',\n 'gesturemove',\n 'gestureend',\n ])\n actions.methodDict.gesture = 'gesturable'\n\n defaults.actions.gesture = gesture.defaults\n}\n\nconst gesture = {\n id: 'actions/gesture',\n install,\n defaults: {\n },\n\n checker (_pointer, _event, _interactable, _element, interaction: { pointers: { length: number } }) {\n if (interaction.pointers.length >= 2) {\n return { name: 'gesture' }\n }\n\n return null\n },\n\n getCursor () {\n return ''\n },\n}\n\nfunction updateGestureProps ({ interaction, iEvent, event, phase }: GestureSignalArg) {\n if (interaction.prepared.name !== 'gesture') { return }\n\n const pointers = interaction.pointers.map(p => p.pointer)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const deltaSource = interaction.interactable.options.deltaSource\n\n iEvent.touches = [pointers[0], pointers[1]]\n\n if (starting) {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource)\n iEvent.box = utils.pointer.touchBBox(pointers)\n iEvent.scale = 1\n iEvent.ds = 0\n iEvent.angle = utils.pointer.touchAngle(pointers, deltaSource)\n iEvent.da = 0\n\n interaction.gesture.startDistance = iEvent.distance\n interaction.gesture.startAngle = iEvent.angle\n }\n else if (ending || event instanceof InteractEvent) {\n const prevEvent = interaction.prevEvent as GestureEvent\n\n iEvent.distance = prevEvent.distance\n iEvent.box = prevEvent.box\n iEvent.scale = prevEvent.scale\n iEvent.ds = 0\n iEvent.angle = prevEvent.angle\n iEvent.da = 0\n }\n else {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource)\n iEvent.box = utils.pointer.touchBBox(pointers)\n iEvent.scale = iEvent.distance / interaction.gesture.startDistance\n iEvent.angle = utils.pointer.touchAngle(pointers, deltaSource)\n\n iEvent.ds = iEvent.scale - interaction.gesture.scale\n iEvent.da = iEvent.angle - interaction.gesture.angle\n }\n\n interaction.gesture.distance = iEvent.distance\n interaction.gesture.angle = iEvent.angle\n\n if (utils.is.number(iEvent.scale) &&\n iEvent.scale !== Infinity &&\n !isNaN(iEvent.scale)) {\n interaction.gesture.scale = iEvent.scale\n }\n}\n\nexport default gesture\n","import { ActionProps, Interaction } from '@interactjs/core/Interaction'\nimport { ActionName, Scope } from '@interactjs/core/scope'\nimport * as arr from '@interactjs/utils/arr'\nimport * as dom from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\n\nexport type EdgeName = 'top' | 'left' | 'bottom' | 'right'\n\nexport type ResizableMethod = Interact.ActionMethod\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n resizable: ResizableMethod\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n resizeAxes: 'x' | 'y' | 'xy'\n resizeRects: {\n start: Interact.FullRect\n current: Interact.Rect\n inverted: Interact.FullRect\n previous: Interact.FullRect\n delta: Interact.FullRect\n }\n resizeStartAspectRatio: number\n }\n\n interface ActionProps {\n edges?: { [edge in 'top' | 'left' | 'bottom' | 'right']?: boolean }\n _linkedEdges?: { [edge in 'top' | 'left' | 'bottom' | 'right']?: boolean }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n resize: Interact.ResizableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Resize]?: typeof resize\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Resize = 'resize'\n }\n}\n\n(ActionName as any).Resize = 'resize'\n\nexport interface ResizeEvent extends Interact.InteractEvent {\n deltaRect?: Interact.FullRect\n edges?: Interact.ActionProps['edges']\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n browser,\n /** @lends Interactable */\n Interactable, // tslint:disable-line no-shadowed-variable\n interactions,\n defaults,\n } = scope\n\n // Less Precision with touch input\n\n interactions.signals.on('new', interaction => {\n interaction.resizeAxes = 'xy'\n })\n\n interactions.signals.on('action-start', start)\n interactions.signals.on('action-move', move)\n interactions.signals.on('action-end', end)\n\n interactions.signals.on('action-start', updateEventAxes)\n interactions.signals.on('action-move', updateEventAxes)\n\n resize.cursors = initCursors(browser)\n resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10\n\n /**\n * ```js\n * interact(element).resizable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * edges: {\n * top : true, // Use pointer coords to check for resize.\n * left : false, // Disable resizing from left edge.\n * bottom: '.resize-s',// Resize if pointer target matches selector\n * right : handleEl // Resize if pointer target is the given Element\n * },\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height are adjusted at a 1:1 ratio.\n * square: false,\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height maintain the aspect ratio they had when resizing started.\n * preserveAspectRatio: false,\n *\n * // a value of 'none' will limit the resize rect to a minimum of 0x0\n * // 'negate' will allow the rect to have negative width/height\n * // 'reposition' will keep the width/height positive by swapping\n * // the top and bottom edges and/or swapping the left and right edges\n * invert: 'none' || 'negate' || 'reposition'\n *\n * // limit multiple resizes.\n * // See the explanation in the {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * })\n *\n * var isResizeable = interact(element).resizable()\n * ```\n *\n * Gets or sets whether resize actions can be performed on the target\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on resize events (object makes the Interactable\n * resizable)\n * @return {boolean | Interactable} A boolean indicating if this can be the\n * target of resize elements, or this Interactable\n */\n Interactable.prototype.resizable = function (this: Interact.Interactable, options: Interact.ResizableOptions | boolean) {\n return resizable(this, options, scope)\n } as ResizableMethod\n\n actions[ActionName.Resize] = resize\n actions.names.push(ActionName.Resize)\n arr.merge(actions.eventTypes, [\n 'resizestart',\n 'resizemove',\n 'resizeinertiastart',\n 'resizeresume',\n 'resizeend',\n ])\n actions.methodDict.resize = 'resizable'\n\n defaults.actions.resize = resize.defaults\n}\n\nconst resize = {\n id: 'actions/resize',\n install,\n defaults: {\n square: false,\n preserveAspectRatio: false,\n axis: 'xy',\n\n // use default margin\n margin: NaN,\n\n // object with props left, right, top, bottom which are\n // true/false values to resize when the pointer is over that edge,\n // CSS selectors to match the handles for each direction\n // or the Elements for each handle\n edges: null,\n\n // a value of 'none' will limit the resize rect to a minimum of 0x0\n // 'negate' will alow the rect to have negative width/height\n // 'reposition' will keep the width/height positive by swapping\n // the top and bottom edges and/or swapping the left and right edges\n invert: 'none',\n } as Interact.ResizableOptions,\n\n checker (\n _pointer: Interact.PointerType,\n _event: Interact.PointerEventType,\n interactable: Interact.Interactable,\n element: Interact.Element,\n interaction: Interaction,\n rect: Interact.Rect\n ) {\n if (!rect) { return null }\n\n const page = extend({}, interaction.coords.cur.page)\n const options = interactable.options\n\n if (options.resize.enabled) {\n const resizeOptions = options.resize\n const resizeEdges: { [edge: string]: boolean } = { left: false, right: false, top: false, bottom: false }\n\n // if using resize.edges\n if (is.object(resizeOptions.edges)) {\n for (const edge in resizeEdges) {\n resizeEdges[edge] = checkResizeEdge(edge,\n resizeOptions.edges[edge],\n page,\n interaction._latestPointer.eventTarget,\n element,\n rect,\n resizeOptions.margin || this.defaultMargin)\n }\n\n resizeEdges.left = resizeEdges.left && !resizeEdges.right\n resizeEdges.top = resizeEdges.top && !resizeEdges.bottom\n\n if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n return {\n name: 'resize',\n edges: resizeEdges,\n }\n }\n }\n else {\n const right = options.resize.axis !== 'y' && page.x > (rect.right - this.defaultMargin)\n const bottom = options.resize.axis !== 'x' && page.y > (rect.bottom - this.defaultMargin)\n\n if (right || bottom) {\n return {\n name: 'resize',\n axes: (right ? 'x' : '') + (bottom ? 'y' : ''),\n }\n }\n }\n }\n\n return null\n },\n\n cursors: null as ReturnType,\n\n getCursor ({ edges, axis, name }: ActionProps) {\n const cursors = resize.cursors\n let result: string = null\n\n if (axis) {\n result = cursors[name + axis]\n }\n else if (edges) {\n let cursorKey = ''\n\n for (const edge of ['top', 'bottom', 'left', 'right']) {\n if (edges[edge]) {\n cursorKey += edge\n }\n }\n\n result = cursors[cursorKey]\n }\n\n return result\n },\n\n defaultMargin: null as number,\n}\n\nfunction resizable (interactable: Interact.Interactable, options: Interact.OrBoolean | boolean, scope: Scope) {\n if (is.object(options)) {\n interactable.options.resize.enabled = options.enabled !== false\n interactable.setPerAction('resize', options)\n interactable.setOnEvents('resize', options)\n\n if (is.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) {\n interactable.options.resize.axis = options.axis\n }\n else if (options.axis === null) {\n interactable.options.resize.axis = scope.defaults.actions.resize.axis\n }\n\n if (is.bool(options.preserveAspectRatio)) {\n interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio\n }\n else if (is.bool(options.square)) {\n interactable.options.resize.square = options.square\n }\n\n return interactable\n }\n if (is.bool(options)) {\n interactable.options.resize.enabled = options\n\n return interactable\n }\n return interactable.options.resize\n}\n\nfunction checkResizeEdge (\n name: string,\n value: any,\n page: Interact.Point,\n element: Node,\n interactableElement: Interact.Element,\n rect: Interact.Rect,\n margin: number,\n) {\n // false, '', undefined, null\n if (!value) { return false }\n\n // true value, use pointer coords and element rect\n if (value === true) {\n // if dimensions are negative, \"switch\" edges\n const width = is.number(rect.width) ? rect.width : rect.right - rect.left\n const height = is.number(rect.height) ? rect.height : rect.bottom - rect.top\n\n // don't use margin greater than half the relevent dimension\n margin = Math.min(margin, (name === 'left' || name === 'right' ? width : height) / 2)\n\n if (width < 0) {\n if (name === 'left') { name = 'right' }\n else if (name === 'right') { name = 'left' }\n }\n if (height < 0) {\n if (name === 'top') { name = 'bottom' }\n else if (name === 'bottom') { name = 'top' }\n }\n\n if (name === 'left') { return page.x < ((width >= 0 ? rect.left : rect.right) + margin) }\n if (name === 'top') { return page.y < ((height >= 0 ? rect.top : rect.bottom) + margin) }\n\n if (name === 'right') { return page.x > ((width >= 0 ? rect.right : rect.left) - margin) }\n if (name === 'bottom') { return page.y > ((height >= 0 ? rect.bottom : rect.top) - margin) }\n }\n\n // the remaining checks require an element\n if (!is.element(element)) { return false }\n\n return is.element(value)\n // the value is an element to use as a resize handle\n ? value === element\n // otherwise check if element matches value as selector\n : dom.matchesUpTo(element, value, interactableElement)\n}\n\nfunction initCursors (browser: typeof import ('@interactjs/utils/browser').default) {\n return (browser.isIe9 ? {\n x : 'e-resize',\n y : 's-resize',\n xy: 'se-resize',\n\n top : 'n-resize',\n left : 'w-resize',\n bottom : 's-resize',\n right : 'e-resize',\n topleft : 'se-resize',\n bottomright: 'se-resize',\n topright : 'ne-resize',\n bottomleft : 'ne-resize',\n } : {\n x : 'ew-resize',\n y : 'ns-resize',\n xy: 'nwse-resize',\n\n top : 'ns-resize',\n left : 'ew-resize',\n bottom : 'ns-resize',\n right : 'ew-resize',\n topleft : 'nwse-resize',\n bottomright: 'nwse-resize',\n topright : 'nesw-resize',\n bottomleft : 'nesw-resize',\n })\n}\n\nfunction start ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n return\n }\n\n const startRect = extend({}, interaction.rect)\n const resizeOptions = interaction.interactable.options.resize\n\n /*\n * When using the `resizable.square` or `resizable.preserveAspectRatio` options, resizing from one edge\n * will affect another. E.g. with `resizable.square`, resizing to make the right edge larger will make\n * the bottom edge larger by the same amount. We call these 'linked' edges. Any linked edges will depend\n * on the active edges and the edge being interacted with.\n */\n if (resizeOptions.square || resizeOptions.preserveAspectRatio) {\n const linkedEdges = extend({}, interaction.prepared.edges)\n\n linkedEdges.top = linkedEdges.top || (linkedEdges.left && !linkedEdges.bottom)\n linkedEdges.left = linkedEdges.left || (linkedEdges.top && !linkedEdges.right)\n linkedEdges.bottom = linkedEdges.bottom || (linkedEdges.right && !linkedEdges.top)\n linkedEdges.right = linkedEdges.right || (linkedEdges.bottom && !linkedEdges.left)\n\n interaction.prepared._linkedEdges = linkedEdges\n }\n else {\n interaction.prepared._linkedEdges = null\n }\n\n // if using `resizable.preserveAspectRatio` option, record aspect ratio at the start of the resize\n if (resizeOptions.preserveAspectRatio) {\n interaction.resizeStartAspectRatio = startRect.width / startRect.height\n }\n\n interaction.resizeRects = {\n start : startRect,\n current : {\n left: startRect.left,\n right: startRect.right,\n top: startRect.top,\n bottom: startRect.bottom,\n },\n inverted : extend({}, startRect),\n previous : extend({}, startRect),\n delta : {\n left: 0,\n right : 0,\n width : 0,\n top : 0,\n bottom: 0,\n height: 0,\n },\n }\n\n iEvent.edges = interaction.prepared.edges\n iEvent.rect = interaction.resizeRects.inverted\n iEvent.deltaRect = interaction.resizeRects.delta\n}\n\nfunction move ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return }\n\n const resizeOptions = interaction.interactable.options.resize\n const invert = resizeOptions.invert\n const invertible = invert === 'reposition' || invert === 'negate'\n\n let edges = interaction.prepared.edges\n\n // eslint-disable-next-line no-shadow\n const start = interaction.resizeRects.start\n const current = interaction.resizeRects.current\n const inverted = interaction.resizeRects.inverted\n const deltaRect = interaction.resizeRects.delta\n const previous = extend(interaction.resizeRects.previous, inverted)\n const originalEdges = edges\n\n const eventDelta = extend({}, iEvent.delta)\n\n if (resizeOptions.preserveAspectRatio || resizeOptions.square) {\n // `resize.preserveAspectRatio` takes precedence over `resize.square`\n const startAspectRatio = resizeOptions.preserveAspectRatio\n ? interaction.resizeStartAspectRatio\n : 1\n\n edges = interaction.prepared._linkedEdges\n\n if ((originalEdges.left && originalEdges.bottom) ||\n (originalEdges.right && originalEdges.top)) {\n eventDelta.y = -eventDelta.x / startAspectRatio\n }\n else if (originalEdges.left || originalEdges.right) { eventDelta.y = eventDelta.x / startAspectRatio }\n else if (originalEdges.top || originalEdges.bottom) { eventDelta.x = eventDelta.y * startAspectRatio }\n }\n\n // update the 'current' rect without modifications\n if (edges.top) { current.top += eventDelta.y }\n if (edges.bottom) { current.bottom += eventDelta.y }\n if (edges.left) { current.left += eventDelta.x }\n if (edges.right) { current.right += eventDelta.x }\n\n if (invertible) {\n // if invertible, copy the current rect\n extend(inverted, current)\n\n if (invert === 'reposition') {\n // swap edge values if necessary to keep width/height positive\n let swap\n\n if (inverted.top > inverted.bottom) {\n swap = inverted.top\n\n inverted.top = inverted.bottom\n inverted.bottom = swap\n }\n if (inverted.left > inverted.right) {\n swap = inverted.left\n\n inverted.left = inverted.right\n inverted.right = swap\n }\n }\n }\n else {\n // if not invertible, restrict to minimum of 0x0 rect\n inverted.top = Math.min(current.top, start.bottom)\n inverted.bottom = Math.max(current.bottom, start.top)\n inverted.left = Math.min(current.left, start.right)\n inverted.right = Math.max(current.right, start.left)\n }\n\n inverted.width = inverted.right - inverted.left\n inverted.height = inverted.bottom - inverted.top\n\n for (const edge in inverted) {\n deltaRect[edge] = inverted[edge] - previous[edge]\n }\n\n iEvent.edges = interaction.prepared.edges\n iEvent.rect = inverted\n iEvent.deltaRect = deltaRect\n}\n\nfunction end ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return }\n\n iEvent.edges = interaction.prepared.edges\n iEvent.rect = interaction.resizeRects.inverted\n iEvent.deltaRect = interaction.resizeRects.delta\n}\n\nfunction updateEventAxes ({ iEvent, interaction, action }: { iEvent: ResizeEvent, interaction: Interaction, action: ActionName }) {\n if (action !== ActionName.Resize || !interaction.resizeAxes) { return }\n\n const options = interaction.interactable.options\n\n if (options.resize.square) {\n if (interaction.resizeAxes === 'y') {\n iEvent.delta.x = iEvent.delta.y\n }\n else {\n iEvent.delta.y = iEvent.delta.x\n }\n iEvent.axes = 'xy'\n }\n else {\n iEvent.axes = interaction.resizeAxes\n\n if (interaction.resizeAxes === 'x') {\n iEvent.delta.y = 0\n }\n else if (interaction.resizeAxes === 'y') {\n iEvent.delta.x = 0\n }\n }\n}\n\nexport default resize\n","import { Scope } from '@interactjs/core/scope'\nimport drag, { DragEvent } from './drag'\nimport drop from './drop'\nimport gesture, { GestureEvent } from './gesture'\nimport resize, { ResizeEvent } from './resize'\n\nfunction install (scope: Scope) {\n scope.usePlugin(gesture)\n scope.usePlugin(resize)\n scope.usePlugin(drag)\n scope.usePlugin(drop)\n}\n\nconst id = 'actions'\n\nexport {\n id,\n install,\n gesture,\n GestureEvent,\n resize,\n ResizeEvent,\n drag,\n DragEvent,\n drop,\n}\n","import * as domUtils from '@interactjs/utils/domUtils'\nimport * as is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport { getStringOptionResult } from '@interactjs/utils/rect'\nimport { getWindow } from '@interactjs/utils/window'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoScroll: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoScroll?: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n autoScroll?: AutoScrollOptions\n }\n}\n\nexport interface AutoScrollOptions {\n container?: Window | HTMLElement\n margin?: number\n distance?: number\n interval?: number\n}\n\nfunction install (scope: Scope) {\n const {\n interactions,\n defaults,\n actions,\n } = scope\n\n scope.autoScroll = autoScroll\n autoScroll.now = () => scope.now()\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.autoScroll = null\n })\n\n interactions.signals.on('destroy', ({ interaction }) => {\n interaction.autoScroll = null\n autoScroll.stop()\n if (autoScroll.interaction) {\n autoScroll.interaction = null\n }\n })\n\n interactions.signals.on('stop', autoScroll.stop)\n\n interactions.signals.on('action-move', (arg: any) => autoScroll.onInteractionMove(arg))\n\n actions.eventTypes.push('autoscroll')\n defaults.perAction.autoScroll = autoScroll.defaults\n}\n\nconst autoScroll = {\n defaults: {\n enabled : false,\n margin : 60,\n\n // the item that is scrolled (Window or HTMLElement)\n container: null as AutoScrollOptions['container'],\n\n // the scroll speed in pixels per second\n speed : 300,\n } as AutoScrollOptions,\n\n now: Date.now,\n\n interaction: null,\n i: null, // the handle returned by window.setInterval\n x: 0,\n y: 0, // Direction each pulse is to scroll in\n\n isScrolling: false,\n prevTime: 0,\n margin: 0,\n speed: 0,\n\n start (interaction: Interact.Interaction) {\n autoScroll.isScrolling = true\n raf.cancel(autoScroll.i)\n\n interaction.autoScroll = autoScroll\n autoScroll.interaction = interaction\n autoScroll.prevTime = autoScroll.now()\n autoScroll.i = raf.request(autoScroll.scroll)\n },\n\n stop () {\n autoScroll.isScrolling = false\n if (autoScroll.interaction) {\n autoScroll.interaction.autoScroll = null\n }\n raf.cancel(autoScroll.i)\n },\n\n // scroll the window by the values in scroll.x/y\n scroll () {\n const { interaction } = autoScroll\n const { interactable, element } = interaction\n const options = interactable.options[autoScroll.interaction.prepared.name].autoScroll\n const container = getContainer(options.container, interactable, element)\n const now = autoScroll.now()\n // change in time in seconds\n const dt = (now - autoScroll.prevTime) / 1000\n // displacement\n const s = options.speed * dt\n\n if (s >= 1) {\n const scrollBy = {\n x: autoScroll.x * s,\n y: autoScroll.y * s,\n }\n\n if (scrollBy.x || scrollBy.y) {\n const prevScroll = getScroll(container)\n\n if (is.window(container)) {\n container.scrollBy(scrollBy.x, scrollBy.y)\n }\n else if (container) {\n container.scrollLeft += scrollBy.x\n container.scrollTop += scrollBy.y\n }\n\n const curScroll = getScroll(container)\n const delta = {\n x: curScroll.x - prevScroll.x,\n y: curScroll.y - prevScroll.y,\n }\n\n if (delta.x || delta.y) {\n interactable.fire({\n type: 'autoscroll',\n target: element,\n interactable,\n delta,\n interaction,\n container,\n })\n }\n }\n\n autoScroll.prevTime = now\n }\n\n if (autoScroll.isScrolling) {\n raf.cancel(autoScroll.i)\n autoScroll.i = raf.request(autoScroll.scroll)\n }\n },\n check (interactable, actionName) {\n const options = interactable.options\n\n return options[actionName].autoScroll && options[actionName].autoScroll.enabled\n },\n onInteractionMove ({ interaction, pointer }) {\n if (!(interaction.interacting() &&\n autoScroll.check(interaction.interactable, interaction.prepared.name))) {\n return\n }\n\n if (interaction.simulation) {\n autoScroll.x = autoScroll.y = 0\n return\n }\n\n let top\n let right\n let bottom\n let left\n\n const { interactable, element } = interaction\n const options = interactable.options[interaction.prepared.name].autoScroll\n const container = getContainer(options.container, interactable, element)\n\n if (is.window(container)) {\n left = pointer.clientX < autoScroll.margin\n top = pointer.clientY < autoScroll.margin\n right = pointer.clientX > container.innerWidth - autoScroll.margin\n bottom = pointer.clientY > container.innerHeight - autoScroll.margin\n }\n else {\n const rect = domUtils.getElementClientRect(container)\n\n left = pointer.clientX < rect.left + autoScroll.margin\n top = pointer.clientY < rect.top + autoScroll.margin\n right = pointer.clientX > rect.right - autoScroll.margin\n bottom = pointer.clientY > rect.bottom - autoScroll.margin\n }\n\n autoScroll.x = (right ? 1 : left ? -1 : 0)\n autoScroll.y = (bottom ? 1 : top ? -1 : 0)\n\n if (!autoScroll.isScrolling) {\n // set the autoScroll properties to those of the target\n autoScroll.margin = options.margin\n autoScroll.speed = options.speed\n\n autoScroll.start(interaction)\n }\n },\n}\n\nexport function getContainer (value, interactable, element) {\n return (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element)\n}\n\nexport function getScroll (container) {\n if (is.window(container)) { container = window.document.body }\n\n return { x: container.scrollLeft, y: container.scrollTop }\n}\n\nexport function getScrollSize (container) {\n if (is.window(container)) { container = window.document.body }\n\n return { x: container.scrollWidth, y: container.scrollHeight }\n}\n\nexport function getScrollSizeDelta ({ interaction, element }, func) {\n const scrollOptions = interaction && interaction.interactable.options[interaction.prepared.name].autoScroll\n\n if (!scrollOptions || !scrollOptions.enabled) {\n func()\n return { x: 0, y: 0 }\n }\n\n const scrollContainer = getContainer(\n scrollOptions.container,\n interaction.interactable,\n element\n )\n\n const prevSize = getScroll(scrollContainer)\n func()\n const curSize = getScroll(scrollContainer)\n\n return {\n x: curSize.x - prevSize.x,\n y: curSize.y - prevSize.y,\n }\n}\n\nexport default {\n id: 'auto-scroll',\n install,\n}\n","import { warnOnce } from '@interactjs/utils'\nimport * as is from '@interactjs/utils/is'\n\n// TODO: there seems to be a @babel/preset-typescript bug causing regular import\n// syntax to remain in js output\ntype Scope = import ('@interactjs/core/scope').Scope\ntype Actions = import ('@interactjs/core/scope').Actions\ntype Interaction = import ('@interactjs/core/Interaction').default\ntype Interactable = import ('@interactjs/core/Interactable').default\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n getAction: typeof getAction\n defaultActionChecker: (pointer: any, event: any, interaction: any, element: any) => any\n styleCursor: typeof styleCursor\n actionChecker: typeof actionChecker\n ignoreFrom: (...args: any) => boolean\n allowFrom: (...args: any) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n pointerIsDown: boolean\n }\n}\n\nfunction install (scope: Scope) {\n const {\n /** @lends Interactable */\n Interactable, // tslint:disable-line no-shadowed-variable\n actions,\n } = scope\n\n Interactable.prototype.getAction = getAction\n\n /**\n * ```js\n * interact(element, { ignoreFrom: document.getElementById('no-action') })\n * // or\n * interact(element).ignoreFrom('input, textarea, a')\n * ```\n * @deprecated\n * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n * of it's parents match the given CSS selector or Element, no\n * drag/resize/gesture is started.\n *\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * })\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to not ignore any elements\n * @return {string | Element | object} The current ignoreFrom value or this\n * Interactable\n */\n Interactable.prototype.ignoreFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('ignoreFrom', newValue)\n }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).')\n\n /**\n * @deprecated\n *\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * })\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to allow from any element\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */\n Interactable.prototype.allowFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('allowFrom', newValue)\n }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).')\n\n /**\n * ```js\n * interact('.resize-drag')\n * .resizable(true)\n * .draggable(true)\n * .actionChecker(function (pointer, event, action, interactable, element, interaction) {\n *\n * if (interact.matchesSelector(event.target, '.drag-handle')) {\n * // force drag with handle target\n * action.name = drag\n * }\n * else {\n * // resize from the top and right edges\n * action.name = 'resize'\n * action.edges = { top: true, right: true }\n * }\n *\n * return action\n * })\n * ```\n *\n * Returns or sets the function used to check action to be performed on\n * pointerDown\n *\n * @param {function | null} [checker] A function which takes a pointer event,\n * defaultAction string, interactable, element and interaction as parameters\n * and returns an object with name property 'drag' 'resize' or 'gesture' and\n * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right\n * props.\n * @return {Function | Interactable} The checker function or this Interactable\n */\n Interactable.prototype.actionChecker = actionChecker\n\n /**\n * Returns or sets whether the the cursor should be changed depending on the\n * action that would be performed if the mouse were pressed and dragged.\n *\n * @param {boolean} [newValue]\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.styleCursor = styleCursor\n\n Interactable.prototype.defaultActionChecker = function (this: Interactable, pointer, event, interaction, element) {\n return defaultActionChecker(this, pointer, event, interaction, element, actions)\n }\n}\n\nfunction getAction (\n this: Interactable,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n interaction: Interaction,\n element: Interact.Element,\n): Interact.ActionProps {\n const action = this.defaultActionChecker(pointer, event, interaction, element)\n\n if (this.options.actionChecker) {\n return this.options.actionChecker(pointer, event, action, this, element, interaction)\n }\n\n return action\n}\n\nfunction defaultActionChecker (\n interactable: Interactable,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n interaction: Interaction,\n element: Interact.Element,\n actions: Actions,\n) {\n const rect = interactable.getRect(element)\n const buttons = (event as MouseEvent).buttons || ({\n 0: 1,\n 1: 4,\n 3: 8,\n 4: 16,\n })[(event as MouseEvent).button as 0 | 1 | 3 | 4]\n let action = null\n\n for (const actionName of actions.names) {\n // check mouseButton setting if the pointer is down\n if (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & interactable.options[actionName].mouseButtons) === 0) {\n continue\n }\n\n action = (actions[actionName as keyof Actions] as any).checker(pointer, event, interactable, element, interaction, rect)\n\n if (action) {\n return action\n }\n }\n}\n\nfunction styleCursor (this: Interactable, newValue?: boolean) {\n if (is.bool(newValue)) {\n this.options.styleCursor = newValue\n\n return this\n }\n\n if (newValue === null) {\n delete this.options.styleCursor\n\n return this\n }\n\n return this.options.styleCursor\n}\n\nfunction actionChecker (this: Interactable, checker: any) {\n if (is.func(checker)) {\n this.options.actionChecker = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.options.actionChecker\n\n return this\n }\n\n return this.options.actionChecker\n}\n\nexport default {\n id: 'auto-start/interactableMethods',\n install,\n}\n","import * as utils from '@interactjs/utils'\nimport InteractableMethods from './InteractableMethods'\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n maxInteractions: (newValue: any) => any\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoStart: AutoStart\n maxInteractions: (...args: any) => any\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface BaseDefaults {\n actionChecker?\n styleCursor?\n }\n\n interface PerActionDefaults {\n manualStart?: boolean\n max?: number\n maxPerElement?: number\n allowFrom?: string | Interact.Element\n ignoreFrom?: string | Interact.Element\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons?: 0 | 1 | 2 | 4 | 16\n }\n}\n\nexport interface AutoStart {\n // Allow this many interactions to happen simultaneously\n maxInteractions: number\n withinInteractionLimit: typeof withinInteractionLimit\n cursorElement: Interact.Element\n signals: utils.Signals\n}\n\nfunction install (scope: Interact.Scope) {\n const {\n interact,\n interactions,\n defaults,\n } = scope\n\n scope.usePlugin(InteractableMethods)\n\n // set cursor style on mousedown\n interactions.signals.on('down', ({ interaction, pointer, event, eventTarget }) => {\n if (interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n })\n\n // set cursor style on mousemove\n interactions.signals.on('move', ({ interaction, pointer, event, eventTarget }) => {\n if (interaction.pointerType !== 'mouse' ||\n interaction.pointerIsDown ||\n interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n })\n\n interactions.signals.on('move', arg => {\n const { interaction } = arg\n\n if (!interaction.pointerIsDown ||\n interaction.interacting() ||\n !interaction.pointerWasMoved ||\n !interaction.prepared.name) {\n return\n }\n\n scope.autoStart.signals.fire('before-start', arg)\n\n const { interactable } = interaction\n\n if (interaction.prepared.name && interactable) {\n // check manualStart and interaction limit\n if (interactable.options[interaction.prepared.name].manualStart ||\n !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)) {\n interaction.stop()\n }\n else {\n interaction.start(interaction.prepared, interactable, interaction.element)\n setInteractionCursor(interaction, scope)\n }\n }\n })\n\n interactions.signals.on('stop', ({ interaction }) => {\n const { interactable } = interaction\n\n if (interactable && interactable.options.styleCursor) {\n setCursor(interaction.element, '', scope)\n }\n })\n\n defaults.base.actionChecker = null\n defaults.base.styleCursor = true\n\n utils.extend(defaults.perAction, {\n manualStart: false,\n max: Infinity,\n maxPerElement: 1,\n allowFrom: null,\n ignoreFrom: null,\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons: 1,\n })\n\n /**\n * Returns or sets the maximum number of concurrent interactions allowed. By\n * default only 1 interaction is allowed at a time (for backwards\n * compatibility). To allow multiple interactions on the same Interactables and\n * elements, you need to enable it in the draggable, resizable and gesturable\n * `'max'` and `'maxPerElement'` options.\n *\n * @alias module:interact.maxInteractions\n *\n * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n */\n interact.maxInteractions = newValue => maxInteractions(newValue, scope)\n\n scope.autoStart = {\n // Allow this many interactions to happen simultaneously\n maxInteractions: Infinity,\n withinInteractionLimit,\n cursorElement: null,\n signals: new utils.Signals(),\n }\n}\n\n// Check if the current interactable supports the action.\n// If so, return the validated action. Otherwise, return null\nfunction validateAction (\n action: Interact.ActionProps,\n interactable: Interact.Interactable,\n element: Interact.Element,\n eventTarget: Interact.Element,\n scope: Interact.Scope,\n) {\n if (interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) &&\n interactable.options[action.name].enabled &&\n withinInteractionLimit(interactable, element, action, scope)) {\n return action\n }\n\n return null\n}\n\nfunction validateMatches (\n interaction: Interact.Interaction,\n pointer,\n event,\n matches: Interact.Interactable[],\n matchElements: Interact.Element[],\n eventTarget: Interact.Element,\n scope: Interact.Scope,\n) {\n for (let i = 0, len = matches.length; i < len; i++) {\n const match = matches[i]\n const matchElement = matchElements[i]\n const matchAction = match.getAction(pointer, event, interaction, matchElement)\n\n if (!matchAction) { continue }\n\n const action = validateAction(\n matchAction,\n match,\n matchElement,\n eventTarget,\n scope)\n\n if (action) {\n return {\n action,\n interactable: match,\n element: matchElement,\n }\n }\n }\n\n return { action: null, interactable: null, element: null }\n}\n\nfunction getActionInfo (\n interaction: Interact.Interaction,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n eventTarget: Interact.Element,\n scope: Interact.Scope,\n) {\n let matches = []\n let matchElements = []\n\n let element = eventTarget\n\n function pushMatches (interactable) {\n matches.push(interactable)\n matchElements.push(element)\n }\n\n while (utils.is.element(element)) {\n matches = []\n matchElements = []\n\n scope.interactables.forEachMatch(element, pushMatches)\n\n const actionInfo = validateMatches(interaction, pointer, event, matches, matchElements, eventTarget, scope)\n\n if (actionInfo.action &&\n !actionInfo.interactable.options[actionInfo.action.name].manualStart) {\n return actionInfo\n }\n\n element = utils.dom.parentNode(element)\n }\n\n return { action: null, interactable: null, element: null }\n}\n\nfunction prepare (\n interaction: Interact.Interaction,\n { action, interactable, element }: {\n action: Interact.ActionProps\n interactable: Interact.Interactable\n element: Interact.Element\n },\n scope: Interact.Scope,\n) {\n action = action || { name: null }\n\n // clear previous target element cursor\n if (interaction.interactable && interaction.interactable.options.styleCursor) {\n setCursor(interaction.element, '', scope)\n }\n\n interaction.interactable = interactable\n interaction.element = element\n utils.copyAction(interaction.prepared, action)\n\n interaction.rect = interactable && action.name\n ? interactable.getRect(element)\n : null\n\n setInteractionCursor(interaction, scope)\n\n scope.autoStart.signals.fire('prepared', { interaction })\n}\n\nfunction withinInteractionLimit (interactable: Interact.Interactable, element: Interact.Element, action, scope: Interact.Scope) {\n const options = interactable.options\n const maxActions = options[action.name].max\n const maxPerElement = options[action.name].maxPerElement\n const autoStartMax = scope.autoStart.maxInteractions\n let activeInteractions = 0\n let interactableCount = 0\n let elementCount = 0\n\n // no actions if any of these values == 0\n if (!(maxActions && maxPerElement && autoStartMax)) { return false }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name\n\n if (!interaction.interacting()) { continue }\n\n activeInteractions++\n\n if (activeInteractions >= autoStartMax) {\n return false\n }\n\n if (interaction.interactable !== interactable) { continue }\n\n interactableCount += otherAction === action.name ? 1 : 0\n\n if (interactableCount >= maxActions) {\n return false\n }\n\n if (interaction.element === element) {\n elementCount++\n\n if (otherAction === action.name && elementCount >= maxPerElement) {\n return false\n }\n }\n }\n\n return autoStartMax > 0\n}\n\nfunction maxInteractions (newValue, scope: Interact.Scope) {\n if (utils.is.number(newValue)) {\n scope.autoStart.maxInteractions = newValue\n\n return this\n }\n\n return scope.autoStart.maxInteractions\n}\n\nfunction setCursor (element: Interact.Element, cursor, scope: Interact.Scope) {\n if (scope.autoStart.cursorElement) {\n scope.autoStart.cursorElement.style.cursor = ''\n }\n\n element.ownerDocument.documentElement.style.cursor = cursor\n element.style.cursor = cursor\n scope.autoStart.cursorElement = cursor ? element : null\n}\n\nfunction setInteractionCursor (interaction: Interact.Interaction, scope: Interact.Scope) {\n const { interactable, element, prepared } = interaction\n\n if (!(interaction.pointerType === 'mouse' && interactable && interactable.options.styleCursor)) {\n return\n }\n\n let cursor = ''\n\n if (prepared.name) {\n const cursorChecker: Interact.CursorChecker = interactable.options[prepared.name].cursorChecker\n\n if (utils.is.func(cursorChecker)) {\n cursor = cursorChecker(prepared, interactable, element, interaction._interacting)\n }\n else {\n cursor = scope.actions[prepared.name].getCursor(prepared)\n }\n }\n\n setCursor(interaction.element, cursor || '', scope)\n}\n\nexport default {\n id: 'auto-start/base',\n install,\n maxInteractions,\n withinInteractionLimit,\n validateAction,\n} as Interact.Plugin\n","import { ActionName } from '@interactjs/core/scope'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport * as is from '@interactjs/utils/is'\nimport autoStart from './base'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\nfunction install (scope: Scope) {\n scope.autoStart.signals.on('before-start', ({ interaction, eventTarget, dx, dy }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n // check if a drag is in the correct axis\n const absX = Math.abs(dx)\n const absY = Math.abs(dy)\n const targetOptions = interaction.interactable.options.drag\n const startAxis = targetOptions.startAxis\n const currentAxis = (absX > absY ? 'x' : absX < absY ? 'y' : 'xy')\n\n interaction.prepared.axis = targetOptions.lockAxis === 'start'\n ? currentAxis[0] as 'x' | 'y' // always lock to one axis even if currentAxis === 'xy'\n : targetOptions.lockAxis\n\n // if the movement isn't in the startAxis of the interactable\n if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n // cancel the prepared action\n interaction.prepared.name = null\n\n // then try to get a drag from another ineractable\n let element = eventTarget\n\n const getDraggable = function (interactable) {\n if (interactable === interaction.interactable) { return }\n\n const options = interaction.interactable.options.drag\n\n if (!options.manualStart &&\n interactable.testIgnoreAllow(options, element, eventTarget)) {\n const action = interactable.getAction(\n interaction.downPointer, interaction.downEvent, interaction, element)\n\n if (action &&\n action.name === ActionName.Drag &&\n checkStartAxis(currentAxis, interactable) &&\n autoStart.validateAction(action, interactable, element, eventTarget, scope)) {\n return interactable\n }\n }\n }\n\n // check all interactables\n while (is.element(element)) {\n const interactable = scope.interactables.forEachMatch(element, getDraggable)\n\n if (interactable) {\n interaction.prepared.name = ActionName.Drag\n interaction.interactable = interactable\n interaction.element = element\n break\n }\n\n element = parentNode(element)\n }\n }\n })\n\n function checkStartAxis (startAxis, interactable) {\n if (!interactable) { return false }\n\n const thisAxis = interactable.options[ActionName.Drag].startAxis\n\n return (startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis)\n }\n}\n\nexport default {\n id: 'auto-start/dragAxis',\n install,\n}\n","import basePlugin from './base'\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n hold?: number\n delay?: number\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoStartHoldTimer?: any\n }\n}\n\nfunction install (scope: Interact.Scope) {\n const {\n autoStart,\n interactions,\n defaults,\n } = scope\n\n scope.usePlugin(basePlugin)\n\n defaults.perAction.hold = 0\n defaults.perAction.delay = 0\n\n interactions.signals.on('new', interaction => {\n interaction.autoStartHoldTimer = null\n })\n\n autoStart.signals.on('prepared', ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.autoStartHoldTimer = setTimeout(() => {\n interaction.start(interaction.prepared, interaction.interactable, interaction.element)\n }, hold)\n }\n })\n\n interactions.signals.on('move', ({ interaction, duplicate }) => {\n if (interaction.pointerWasMoved && !duplicate) {\n clearTimeout(interaction.autoStartHoldTimer)\n }\n })\n\n // prevent regular down->move autoStart\n autoStart.signals.on('before-start', ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.prepared.name = null\n }\n })\n}\n\nfunction getHoldDuration (interaction) {\n const actionName = interaction.prepared && interaction.prepared.name\n\n if (!actionName) { return null }\n\n const options = interaction.interactable.options\n\n return options[actionName].hold || options[actionName].delay\n}\n\nexport default {\n id: 'auto-start/hold',\n install,\n getHoldDuration,\n}\n","import autoStart from './base'\nimport dragAxis from './dragAxis'\nimport hold from './hold'\n\nfunction install (scope) {\n scope.usePlugin(autoStart)\n scope.usePlugin(hold)\n scope.usePlugin(dragAxis)\n}\n\nconst id = 'auto-start'\n\nexport {\n id,\n install,\n autoStart,\n hold,\n dragAxis,\n}\n","import { matchesSelector, nodeContains } from '@interactjs/utils/domUtils'\nimport events from '@interactjs/utils/events'\nimport * as is from '@interactjs/utils/is'\nimport { getWindow } from '@interactjs/utils/window'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n preventDefault: typeof preventDefault\n checkAndPreventDefault: (event: Event) => void\n }\n}\n\nfunction preventDefault (this: Interact.Interactable, newValue?: 'always' | 'never' | 'auto') {\n if (/^(always|never|auto)$/.test(newValue)) {\n this.options.preventDefault = newValue\n return this\n }\n\n if (is.bool(newValue)) {\n this.options.preventDefault = newValue ? 'always' : 'never'\n return this\n }\n\n return this.options.preventDefault\n}\n\nfunction checkAndPreventDefault (interactable: Interact.Interactable, scope: Interact.Scope, event: Event) {\n const setting = interactable.options.preventDefault\n\n if (setting === 'never') { return }\n\n if (setting === 'always') {\n event.preventDefault()\n return\n }\n\n // setting === 'auto'\n\n // if the browser supports passive event listeners and isn't running on iOS,\n // don't preventDefault of touch{start,move} events. CSS touch-action and\n // user-select should be used instead of calling event.preventDefault().\n if (events.supportsPassive && /^touch(start|move)$/.test(event.type)) {\n const doc = getWindow(event.target).document\n const docOptions = scope.getDocOptions(doc)\n\n if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) {\n return\n }\n }\n\n // don't preventDefault of pointerdown events\n if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) {\n return\n }\n\n // don't preventDefault on editable elements\n if (is.element(event.target) &&\n matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')) {\n return\n }\n\n event.preventDefault()\n}\n\nfunction onInteractionEvent ({ interaction, event }: Interact.SignalArg) {\n if (interaction.interactable) {\n interaction.interactable.checkAndPreventDefault(event as Event)\n }\n}\n\nexport function install (scope: Interact.Scope) {\n /** @lends Interactable */\n const Interactable = scope.Interactable\n\n /**\n * Returns or sets whether to prevent the browser's default behaviour in\n * response to pointer events. Can be set to:\n * - `'always'` to always prevent\n * - `'never'` to never prevent\n * - `'auto'` to let interact.js try to determine what would be best\n *\n * @param {string} [newValue] `'always'`, `'never'` or `'auto'`\n * @return {string | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.preventDefault = preventDefault\n\n Interactable.prototype.checkAndPreventDefault = function (event) {\n return checkAndPreventDefault(this, scope, event)\n }\n\n for (const eventSignal of ['down', 'move', 'up', 'cancel']) {\n scope.interactions.signals.on(eventSignal, onInteractionEvent)\n }\n\n // prevent native HTML5 drag on interact.js target elements\n scope.interactions.docEvents.push({\n type: 'dragstart',\n listener (event) {\n for (const interaction of scope.interactions.list) {\n if (interaction.element &&\n (interaction.element === event.target ||\n nodeContains(interaction.element, event.target))) {\n interaction.interactable.checkAndPreventDefault(event)\n return\n }\n }\n },\n })\n}\n\nexport type Install = typeof install\n\nexport default {\n id: 'core/interactablePreventDefault',\n install,\n}\n","/* eslint-disable no-console */\n/* global process */\nimport domObjects from '@interactjs/utils/domObjects'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\nimport win from '@interactjs/utils/window'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n logger: Logger\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface BaseDefaults {\n devTools?: DevToolsOptions\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n devTools?: Interact.OptionMethod\n }\n}\n\nexport interface DevToolsOptions {\n ignore: { [P in keyof typeof CheckName]?: boolean }\n}\n\nexport interface Logger {\n warn: (...args: any[]) => void\n error: (...args: any[]) => void\n log: (...args: any[]) => void\n}\n\nexport interface Check {\n name: string\n text: string\n perform: (interaction: Interact.Interaction) => boolean\n getInfo: (interaction: Interact.Interaction) => any[]\n}\n\nenum CheckName {\n touchAction = '',\n boxSizing = '',\n noListeners = '',\n}\n\nconst prefix = '[interact.js] '\nconst links = {\n touchAction: 'https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action',\n boxSizing: 'https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing',\n}\n\nconst isProduction = process.env.NODE_ENV === 'production'\n\n// eslint-disable-next-line no-restricted-syntax\nfunction install (scope: Interact.Scope, { logger }: { logger?: Logger } = {}) {\n const {\n interactions,\n Interactable,\n defaults,\n } = scope\n logger = logger || console\n\n interactions.signals.on('action-start', ({ interaction }) => {\n for (const check of checks) {\n const options = interaction.interactable && interaction.interactable.options[interaction.prepared.name]\n\n if (\n !(options && options.devTools && options.devTools.ignore[check.name]) &&\n check.perform(interaction)\n ) {\n logger.warn(prefix + check.text, ...check.getInfo(interaction))\n }\n }\n })\n\n defaults.base.devTools = {\n ignore: {},\n }\n\n Interactable.prototype.devTools = function (options?) {\n if (options) {\n extend(this.options.devTools, options)\n return this\n }\n\n return this.options.devTools\n }\n}\n\nconst checks: Check[] = [\n {\n name: 'touchAction',\n perform ({ element }) {\n return !parentHasStyle(element, 'touchAction', /pan-|pinch|none/)\n },\n getInfo ({ element }) {\n return [\n element,\n links.touchAction,\n ]\n },\n text: 'Consider adding CSS \"touch-action: none\" to this element\\n',\n },\n\n {\n name: 'boxSizing',\n perform (interaction) {\n const { element } = interaction\n\n return interaction.prepared.name === 'resize' &&\n element instanceof domObjects.HTMLElement &&\n !hasStyle(element, 'boxSizing', /border-box/)\n },\n text: 'Consider adding CSS \"box-sizing: border-box\" to this resizable element',\n getInfo ({ element }) {\n return [\n element,\n links.boxSizing,\n ]\n },\n },\n\n {\n name: 'noListeners',\n perform (interaction) {\n const actionName = interaction.prepared.name\n const moveListeners = interaction.interactable.events.types[`${actionName}move`] || []\n\n return !moveListeners.length\n },\n getInfo (interaction) {\n return [\n interaction.prepared.name,\n interaction.interactable,\n ]\n },\n text: 'There are no listeners set for this action',\n },\n]\n\nfunction hasStyle (element: HTMLElement, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n return styleRe.test(element.style[prop] || win.window.getComputedStyle(element)[prop])\n}\n\nfunction parentHasStyle (element: Interact.Element, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n let parent = element as HTMLElement\n\n while (is.element(parent)) {\n if (hasStyle(parent, prop, styleRe)) {\n return true\n }\n\n parent = parentNode(parent)\n }\n\n return false\n}\n\nconst id = 'dev-tools'\nconst defaultExport = isProduction\n ? { id, install: () => {} }\n : {\n id,\n install,\n checks,\n CheckName,\n links,\n prefix,\n }\n\nexport default defaultExport\n","import { Scope } from '@interactjs/core/scope'\nimport extend from '@interactjs/utils/extend'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n modifiers?: any\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n modifiers?: {\n states: ModifierState[]\n offsets: any\n startOffset: any\n startDelta: Interact.Point\n result?: {\n delta: {\n x: number\n y: number\n }\n rectDelta: {\n left: number\n right: number\n top: number\n bottom: number\n }\n coords: Interact.Point\n changed: boolean\n }\n endPrevented: boolean\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n modifiers?: Modifier[]\n }\n}\n\nexport interface Modifier<\n Defaults = any,\n Name extends string = any\n> {\n options?: Defaults\n methods: {\n start?: (arg: Interact.SignalArg) => void\n set: (arg: Interact.SignalArg) => void\n beforeEnd?: (arg: Interact.SignalArg) => boolean | void\n stop?: (arg: Interact.SignalArg) => void\n }\n name?: Name\n}\n\nexport type ModifierState<\n Defaults = {},\n StateProps extends { [prop: string]: any } = {},\n Name extends string = any\n> = {\n options: Defaults\n methods?: Modifier['methods']\n index?: number\n name?: Name\n} & StateProps\n\nexport interface ModifierArg extends Interact.SignalArg {\n state: State\n pageCoords?: Interact.Point\n}\n\nfunction install (scope: Scope) {\n const {\n interactions,\n } = scope\n\n scope.defaults.perAction.modifiers = []\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.modifiers = {\n startOffset: { left: 0, right: 0, top: 0, bottom: 0 },\n offsets: {},\n states: null,\n result: null,\n endPrevented: false,\n startDelta: null,\n }\n })\n\n interactions.signals.on('before-action-start', arg => {\n start(arg as any, arg.interaction.coords.start.page)\n })\n\n interactions.signals.on('action-resume', arg => {\n stop(arg as Required)\n start(arg as Required, arg.interaction.coords.cur.page)\n beforeMove(arg as Required)\n })\n\n interactions.signals.on('after-action-move', restoreCoords as any)\n interactions.signals.on('before-action-move', beforeMove)\n\n interactions.signals.on('before-action-start', setCoords)\n interactions.signals.on('after-action-start', restoreCoords as any)\n\n interactions.signals.on('before-action-end', beforeEnd)\n interactions.signals.on('stop', stop)\n}\n\nfunction start (\n { interaction, phase }: Interact.SignalArg,\n pageCoords: Interact.Point,\n) {\n const { interactable, element } = interaction\n const modifierList = getModifierList(interaction)\n const states = prepareStates(modifierList)\n\n const rect = extend({}, interaction.rect)\n\n if (!('width' in rect)) { rect.width = rect.right - rect.left }\n if (!('height' in rect)) { rect.height = rect.bottom - rect.top }\n\n const startOffset = getRectOffset(rect, pageCoords)\n\n interaction.modifiers.startOffset = startOffset\n interaction.modifiers.startDelta = { x: 0, y: 0 }\n\n const arg: Partial = {\n interaction,\n interactable,\n element,\n pageCoords,\n phase,\n rect,\n startOffset,\n states,\n preEnd: false,\n requireEndOnly: false,\n }\n\n interaction.modifiers.states = states\n interaction.modifiers.result = null\n startAll(arg)\n\n arg.pageCoords = extend({}, interaction.coords.start.page)\n\n const result = interaction.modifiers.result = setAll(arg)\n\n return result\n}\n\nexport function startAll (arg) {\n const states: ModifierState[] = arg.states\n\n for (const state of states) {\n if (state.methods.start) {\n arg.state = state\n state.methods.start(arg)\n }\n }\n}\n\nexport function setAll (arg: Partial) {\n const {\n interaction,\n modifiersState = interaction.modifiers,\n prevCoords = modifiersState.result\n ? modifiersState.result.coords\n : interaction.coords.prev.page,\n phase,\n preEnd,\n requireEndOnly,\n rect,\n skipModifiers,\n } = arg\n\n const states = skipModifiers\n ? arg.states.slice(skipModifiers)\n : arg.states\n\n arg.coords = extend({}, arg.pageCoords)\n arg.rect = extend({}, rect)\n\n const result = {\n delta: { x: 0, y: 0 },\n rectDelta: {\n left : 0,\n right : 0,\n top : 0,\n bottom: 0,\n },\n coords: arg.coords,\n changed: true,\n }\n\n for (const state of states) {\n const { options } = state\n\n if (!state.methods.set ||\n !shouldDo(options, preEnd, requireEndOnly, phase)) { continue }\n\n arg.state = state\n state.methods.set(arg)\n }\n\n result.delta.x = arg.coords.x - arg.pageCoords.x\n result.delta.y = arg.coords.y - arg.pageCoords.y\n\n let rectChanged = false\n\n if (rect) {\n result.rectDelta.left = arg.rect.left - rect.left\n result.rectDelta.right = arg.rect.right - rect.right\n result.rectDelta.top = arg.rect.top - rect.top\n result.rectDelta.bottom = arg.rect.bottom - rect.bottom\n\n rectChanged = result.rectDelta.left !== 0 ||\n result.rectDelta.right !== 0 ||\n result.rectDelta.top !== 0 ||\n result.rectDelta.bottom !== 0\n }\n\n result.changed = prevCoords.x !== result.coords.x ||\n prevCoords.y !== result.coords.y ||\n rectChanged\n\n return result\n}\n\nfunction beforeMove (arg: Interact.SignalArg): void | false {\n const { interaction, phase, preEnd, skipModifiers } = arg\n const { interactable, element } = interaction\n const modifierResult = setAll(\n {\n interaction,\n interactable,\n element,\n preEnd,\n phase,\n pageCoords: interaction.coords.cur.page,\n rect: interaction.rect,\n states: interaction.modifiers.states,\n requireEndOnly: false,\n skipModifiers,\n })\n\n interaction.modifiers.result = modifierResult\n\n // don't fire an action move if a modifier would keep the event in the same\n // cordinates as before\n if (!modifierResult.changed && interaction.interacting()) {\n return false\n }\n\n setCoords(arg)\n}\n\nfunction beforeEnd (arg: Interact.SignalArg): void | false {\n const { interaction, event, noPreEnd } = arg\n const states = interaction.modifiers.states\n\n if (noPreEnd || !states || !states.length) {\n return\n }\n\n let didPreEnd = false\n\n for (const state of states) {\n arg.state = state\n const { options, methods } = state\n\n const endResult = methods.beforeEnd && methods.beforeEnd(arg)\n\n if (endResult === false) {\n interaction.modifiers.endPrevented = true\n return false\n }\n\n // if the endOnly option is true for any modifier\n if (!didPreEnd && shouldDo(options, true, true)) {\n // fire a move event at the modified coordinates\n interaction.move({ event, preEnd: true })\n didPreEnd = true\n }\n }\n}\n\nfunction stop (arg: Interact.SignalArg) {\n const { interaction } = arg\n const states = interaction.modifiers.states\n\n if (!states || !states.length) {\n return\n }\n\n const modifierArg = extend({\n states,\n interactable: interaction.interactable,\n element: interaction.element,\n }, arg)\n\n restoreCoords(arg)\n\n for (const state of states) {\n modifierArg.state = state\n\n if (state.methods.stop) { state.methods.stop(modifierArg) }\n }\n\n arg.interaction.modifiers.states = null\n arg.interaction.modifiers.endPrevented = false\n}\n\nfunction getModifierList (interaction) {\n const actionOptions = interaction.interactable.options[interaction.prepared.name]\n const actionModifiers = actionOptions.modifiers\n\n if (actionModifiers && actionModifiers.length) {\n return actionModifiers.filter(\n modifier => !modifier.options || modifier.options.enabled !== false\n )\n }\n\n return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize']\n .map(type => {\n const options = actionOptions[type]\n\n return options && options.enabled && {\n options,\n methods: options._methods,\n }\n })\n .filter(m => !!m)\n}\n\nexport function prepareStates (modifierList: Modifier[]) {\n const states: ModifierState[] = []\n\n for (let index = 0; index < modifierList.length; index++) {\n const { options, methods, name } = modifierList[index]\n\n if (options && options.enabled === false) { continue }\n\n states.push({\n options,\n methods,\n index,\n name,\n })\n }\n\n return states\n}\n\nfunction setCoords (arg) {\n const { interaction, phase } = arg\n const curCoords = arg.curCoords || interaction.coords.cur\n const startCoords = arg.startCoords || interaction.coords.start\n const { result, startDelta } = interaction.modifiers\n const curDelta = result.delta\n\n if (phase === 'start') {\n extend(interaction.modifiers.startDelta, result.delta)\n }\n\n for (const [coordsSet, delta] of [[startCoords, startDelta], [curCoords, curDelta]]) {\n coordsSet.page.x += delta.x\n coordsSet.page.y += delta.y\n coordsSet.client.x += delta.x\n coordsSet.client.y += delta.y\n }\n\n const { rectDelta } = interaction.modifiers.result\n const rect = arg.rect || interaction.rect\n\n rect.left += rectDelta.left\n rect.right += rectDelta.right\n rect.top += rectDelta.top\n rect.bottom += rectDelta.bottom\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n}\n\nfunction restoreCoords ({ interaction: { coords, rect, modifiers } }: Interact.SignalArg) {\n if (!modifiers.result) { return }\n\n const { startDelta } = modifiers\n const { delta: curDelta, rectDelta } = modifiers.result\n\n const coordsAndDeltas = [\n [coords.start, startDelta],\n [coords.cur, curDelta],\n ]\n\n for (const [coordsSet, delta] of coordsAndDeltas as any) {\n coordsSet.page.x -= delta.x\n coordsSet.page.y -= delta.y\n coordsSet.client.x -= delta.x\n coordsSet.client.y -= delta.y\n }\n\n rect.left -= rectDelta.left\n rect.right -= rectDelta.right\n rect.top -= rectDelta.top\n rect.bottom -= rectDelta.bottom\n}\n\nfunction shouldDo (options, preEnd?: boolean, requireEndOnly?: boolean, phase?: string) {\n return options\n ? options.enabled !== false &&\n (preEnd || !options.endOnly) &&\n (!requireEndOnly || options.endOnly || options.alwaysOnEnd) &&\n (options.setStart || phase !== 'start')\n : !requireEndOnly\n}\n\nfunction getRectOffset (rect, coords) {\n return rect\n ? {\n left : coords.x - rect.left,\n top : coords.y - rect.top,\n right : rect.right - coords.x,\n bottom: rect.bottom - coords.y,\n }\n : {\n left : 0,\n top : 0,\n right : 0,\n bottom: 0,\n }\n}\n\nfunction makeModifier<\n Defaults extends { enabled?: boolean },\n Name extends string\n> (\n module: { defaults?: Defaults, [key: string]: any },\n name?: Name\n) {\n const { defaults } = module\n const methods = {\n start: module.start,\n set: module.set,\n beforeEnd: module.beforeEnd,\n stop: module.stop,\n }\n\n const modifier = (_options?: Partial) => {\n const options: Defaults = (_options || {}) as Defaults\n\n options.enabled = options.enabled !== false\n\n // add missing defaults to options\n for (const prop in defaults) {\n if (!(prop in options)) {\n options[prop] = defaults[prop]\n }\n }\n\n const m: Modifier = { options, methods, name }\n\n return m\n }\n\n if (name && typeof name === 'string') {\n // for backwrads compatibility\n modifier._defaults = defaults\n modifier._methods = methods\n }\n\n return modifier\n}\n\nexport default {\n id: 'modifiers/base',\n install,\n startAll,\n setAll,\n prepareStates,\n start,\n beforeMove,\n beforeEnd,\n stop,\n shouldDo,\n getModifierList,\n getRectOffset,\n makeModifier,\n}\n\nexport {\n makeModifier,\n}\n","import { EventPhase } from '@interactjs/core/InteractEvent'\nimport modifiers from '@interactjs/modifiers/base'\nimport * as utils from '@interactjs/utils'\nimport raf from '@interactjs/utils/raf'\n\ndeclare module '@interactjs/core/InteractEvent' {\n // eslint-disable-next-line no-shadow\n enum EventPhase {\n Resume = 'resume',\n InertiaStart = 'inertiastart',\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n inertia?: {\n active: boolean\n smoothEnd: boolean\n allowResume: boolean\n\n startEvent?: Interact.InteractEvent\n upCoords: {\n page: Interact.Point\n client: Interact.Point\n timeStamp: number\n }\n\n xe?: number\n ye?: number\n sx?: number\n sy?: number\n\n t0?: number\n te?: number\n v0?: number\n vx0?: number\n vy0?: number\n duration?: number\n modifiedXe?: number\n modifiedYe?: number\n\n lambda_v0?: number // eslint-disable-line camelcase\n one_ve_v0?: number // eslint-disable-line camelcase\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n inertia?: {\n enabled?: boolean\n resistance?: number // the lambda in exponential decay\n minSpeed?: number // target speed must be above this for inertia to start\n endSpeed?: number // the speed at which inertia is slow enough to stop\n allowResume?: true // allow resuming an action in inertia phase\n smoothEndDuration?: number // animate to snap/restrict endOnly if there's no inertia\n } | boolean // FIXME\n }\n}\n\n(EventPhase as any).Resume = 'resume'\n;(EventPhase as any).InertiaStart = 'inertiastart'\n\nfunction install (scope: Interact.Scope) {\n const {\n interactions,\n defaults,\n } = scope\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.inertia = {\n active : false,\n smoothEnd : false,\n allowResume: false,\n upCoords : {} as any,\n timeout : null,\n }\n })\n\n // FIXME proper signal typing\n interactions.signals.on('before-action-end', arg => release(arg as any, scope))\n interactions.signals.on('down', arg => resume(arg as any, scope))\n interactions.signals.on('stop', arg => stop(arg as any))\n\n defaults.perAction.inertia = {\n enabled : false,\n resistance : 10, // the lambda in exponential decay\n minSpeed : 100, // target speed must be above this for inertia to start\n endSpeed : 10, // the speed at which inertia is slow enough to stop\n allowResume : true, // allow resuming an action in inertia phase\n smoothEndDuration: 300, // animate to snap/restrict endOnly if there's no inertia\n }\n\n scope.usePlugin(modifiers)\n}\n\nfunction resume (\n { interaction, event, pointer, eventTarget }: Interact.SignalArg,\n scope: Interact.Scope\n) {\n const state = interaction.inertia\n\n // Check if the down event hits the current inertia target\n if (state.active) {\n let element = eventTarget\n\n // climb up the DOM tree from the event target\n while (utils.is.element(element)) {\n // if interaction element is the current inertia target element\n if (element === interaction.element) {\n // stop inertia\n raf.cancel(state.timeout)\n state.active = false\n interaction.simulation = null\n\n // update pointers to the down event's coordinates\n interaction.updatePointer(pointer, event, eventTarget, true)\n utils.pointer.setCoords(\n interaction.coords.cur,\n interaction.pointers.map(p => p.pointer),\n interaction._now()\n )\n\n // fire appropriate signals\n const signalArg = {\n interaction,\n }\n\n scope.interactions.signals.fire('action-resume', signalArg)\n\n // fire a reume event\n const resumeEvent = new scope.InteractEvent(\n interaction, event, interaction.prepared.name, EventPhase.Resume, interaction.element)\n\n interaction._fireEvent(resumeEvent)\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur)\n break\n }\n\n element = utils.dom.parentNode(element)\n }\n }\n}\n\nfunction release (\n { interaction, event, noPreEnd }: Interact.SignalArg,\n scope: Interact.Scope\n) {\n const state = interaction.inertia\n\n if (!interaction.interacting() ||\n (interaction.simulation && interaction.simulation.active) ||\n noPreEnd) {\n return null\n }\n\n const options = getOptions(interaction)\n\n const now = interaction._now()\n const { client: velocityClient } = interaction.coords.velocity\n const pointerSpeed = utils.hypot(velocityClient.x, velocityClient.y)\n\n let smoothEnd = false\n let modifierResult: ReturnType\n\n // check if inertia should be started\n const inertiaPossible = (options && options.enabled &&\n interaction.prepared.name !== 'gesture' &&\n event !== state.startEvent)\n\n const inertia = (inertiaPossible &&\n (now - interaction.coords.cur.timeStamp) < 50 &&\n pointerSpeed > options.minSpeed &&\n pointerSpeed > options.endSpeed)\n\n const modifierArg = {\n interaction,\n pageCoords: utils.extend({}, interaction.coords.cur.page),\n states: inertiaPossible && interaction.modifiers.states.map(\n modifierStatus => utils.extend({}, modifierStatus)\n ),\n preEnd: true,\n prevCoords: undefined,\n requireEndOnly: null,\n }\n\n // smoothEnd\n if (inertiaPossible && !inertia) {\n modifierArg.prevCoords = interaction.prevEvent.page\n modifierArg.requireEndOnly = false\n modifierResult = modifiers.setAll(modifierArg)\n\n if (modifierResult.changed) {\n smoothEnd = true\n }\n }\n\n if (!(inertia || smoothEnd)) { return null }\n\n utils.pointer.copyCoords(state.upCoords, interaction.coords.cur)\n\n interaction.pointers[0].pointer = state.startEvent = new scope.InteractEvent(\n interaction,\n event,\n // FIXME add proper typing Action.name\n interaction.prepared.name as T,\n EventPhase.InertiaStart,\n interaction.element,\n )\n\n state.t0 = now\n\n state.active = true\n state.allowResume = options.allowResume\n interaction.simulation = state\n\n interaction.interactable.fire(state.startEvent)\n\n if (inertia) {\n state.vx0 = interaction.coords.velocity.client.x\n state.vy0 = interaction.coords.velocity.client.y\n state.v0 = pointerSpeed\n\n calcInertia(interaction, state)\n\n utils.extend(modifierArg.pageCoords, interaction.coords.cur.page)\n\n modifierArg.pageCoords.x += state.xe\n modifierArg.pageCoords.y += state.ye\n modifierArg.prevCoords = undefined\n modifierArg.requireEndOnly = true\n\n modifierResult = modifiers.setAll(modifierArg)\n\n state.modifiedXe += modifierResult.delta.x\n state.modifiedYe += modifierResult.delta.y\n\n state.timeout = raf.request(() => inertiaTick(interaction))\n }\n else {\n state.smoothEnd = true\n state.xe = modifierResult.delta.x\n state.ye = modifierResult.delta.y\n\n state.sx = state.sy = 0\n\n state.timeout = raf.request(() => smothEndTick(interaction))\n }\n\n return false\n}\n\nfunction stop ({ interaction }: Interact.SignalArg) {\n const state = interaction.inertia\n if (state.active) {\n raf.cancel(state.timeout)\n state.active = false\n interaction.simulation = null\n }\n}\n\nfunction calcInertia (interaction: Interact.Interaction, state) {\n const options = getOptions(interaction)\n const lambda = options.resistance\n const inertiaDur = -Math.log(options.endSpeed / state.v0) / lambda\n\n state.x0 = interaction.prevEvent.page.x\n state.y0 = interaction.prevEvent.page.y\n state.t0 = state.startEvent.timeStamp / 1000\n state.sx = state.sy = 0\n\n state.modifiedXe = state.xe = (state.vx0 - inertiaDur) / lambda\n state.modifiedYe = state.ye = (state.vy0 - inertiaDur) / lambda\n state.te = inertiaDur\n\n state.lambda_v0 = lambda / state.v0\n state.one_ve_v0 = 1 - options.endSpeed / state.v0\n}\n\nfunction inertiaTick (interaction: Interact.Interaction) {\n updateInertiaCoords(interaction)\n utils.pointer.setCoordDeltas(interaction.coords.delta, interaction.coords.prev, interaction.coords.cur)\n utils.pointer.setCoordVelocity(interaction.coords.velocity, interaction.coords.delta)\n\n const state = interaction.inertia\n const options = getOptions(interaction)\n const lambda = options.resistance\n const t = interaction._now() / 1000 - state.t0\n\n if (t < state.te) {\n const progress = 1 - (Math.exp(-lambda * t) - state.lambda_v0) / state.one_ve_v0\n\n if (state.modifiedXe === state.xe && state.modifiedYe === state.ye) {\n state.sx = state.xe * progress\n state.sy = state.ye * progress\n }\n else {\n const quadPoint = utils.getQuadraticCurvePoint(\n 0, 0,\n state.xe, state.ye,\n state.modifiedXe, state.modifiedYe,\n progress)\n\n state.sx = quadPoint.x\n state.sy = quadPoint.y\n }\n\n interaction.move()\n\n state.timeout = raf.request(() => inertiaTick(interaction))\n }\n else {\n state.sx = state.modifiedXe\n state.sy = state.modifiedYe\n\n interaction.move()\n interaction.end(state.startEvent)\n state.active = false\n interaction.simulation = null\n }\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur)\n}\n\nfunction smothEndTick (interaction: Interact.Interaction) {\n updateInertiaCoords(interaction)\n\n const state = interaction.inertia\n const t = interaction._now() - state.t0\n const { smoothEndDuration: duration } = getOptions(interaction)\n\n if (t < duration) {\n state.sx = utils.easeOutQuad(t, 0, state.xe, duration)\n state.sy = utils.easeOutQuad(t, 0, state.ye, duration)\n\n interaction.move()\n\n state.timeout = raf.request(() => smothEndTick(interaction))\n }\n else {\n state.sx = state.xe\n state.sy = state.ye\n\n interaction.move()\n interaction.end(state.startEvent)\n\n state.smoothEnd =\n state.active = false\n interaction.simulation = null\n }\n}\n\nfunction updateInertiaCoords (interaction: Interact.Interaction) {\n const state = interaction.inertia\n\n // return if inertia isn't running\n if (!state.active) { return }\n\n const pageUp = state.upCoords.page\n const clientUp = state.upCoords.client\n\n utils.pointer.setCoords(interaction.coords.cur, [{\n pageX : pageUp.x + state.sx,\n pageY : pageUp.y + state.sy,\n clientX: clientUp.x + state.sx,\n clientY: clientUp.y + state.sy,\n }], interaction._now())\n}\n\nfunction getOptions ({ interactable, prepared }: Interact.Interaction) {\n return interactable &&\n interactable.options &&\n prepared.name &&\n interactable.options[prepared.name].inertia\n}\n\nexport default {\n id: 'inertia',\n install,\n calcInertia,\n inertiaTick,\n smothEndTick,\n updateInertiaCoords,\n}\n","import extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\nimport rectUtils from '@interactjs/utils/rect'\nimport { ModifierArg, ModifierState } from '../base'\n\nexport interface RestrictOptions {\n // where to drag over\n restriction: Interact.RectResolvable<[number, number, Interact.Interaction]>\n // what part of self is allowed to drag over\n elementRect: Interact.Rect\n offset: Interact.Rect\n // restrict just before the end drag\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictState = ModifierState\n\nfunction start ({ rect, startOffset, state, interaction, pageCoords }: ModifierArg) {\n const { options } = state\n const { elementRect } = options\n const offset: Interact.Rect = extend({\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n }, options.offset || {})\n\n if (rect && elementRect) {\n const restriction = getRestrictionRect(options.restriction, interaction, pageCoords)\n\n if (restriction) {\n const widthDiff = (restriction.right - restriction.left) - rect.width\n const heightDiff = (restriction.bottom - restriction.top) - rect.height\n\n if (widthDiff < 0) {\n offset.left += widthDiff\n offset.right += widthDiff\n }\n if (heightDiff < 0) {\n offset.top += heightDiff\n offset.bottom += heightDiff\n }\n }\n\n offset.left += startOffset.left - (rect.width * elementRect.left)\n offset.top += startOffset.top - (rect.height * elementRect.top)\n\n offset.right += startOffset.right - (rect.width * (1 - elementRect.right))\n offset.bottom += startOffset.bottom - (rect.height * (1 - elementRect.bottom))\n }\n\n state.offset = offset\n}\n\nfunction set ({ coords, interaction, state }) {\n const { options, offset } = state\n\n const restriction = getRestrictionRect(options.restriction, interaction, coords)\n\n if (!restriction) { return }\n\n const rect = rectUtils.xywhToTlbr(restriction)\n\n coords.x = Math.max(Math.min(rect.right - offset.right, coords.x), rect.left + offset.left)\n coords.y = Math.max(Math.min(rect.bottom - offset.bottom, coords.y), rect.top + offset.top)\n}\n\nfunction getRestrictionRect (value, interaction, coords?: Interact.Point) {\n if (is.func(value)) {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element, [coords.x, coords.y, interaction])\n } else {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element)\n }\n}\n\nconst defaults: RestrictOptions = {\n restriction: null,\n elementRect: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrict = {\n start,\n set,\n getRestrictionRect,\n defaults,\n}\n\nexport default restrict\n","// This module adds the options.resize.restrictEdges setting which sets min and\n// max for the top, left, bottom and right edges of the target being resized.\n//\n// interact(target).resize({\n// edges: { top: true, left: true },\n// restrictEdges: {\n// inner: { top: 200, left: 200, right: 400, bottom: 400 },\n// outer: { top: 0, left: 0, right: 600, bottom: 600 },\n// },\n// })\n\nimport extend from '@interactjs/utils/extend'\nimport rectUtils from '@interactjs/utils/rect'\nimport { ModifierArg, ModifierState } from '../base'\nimport restrict, { RestrictOptions } from './pointer'\n\nexport interface RestrictEdgesOptions {\n inner: RestrictOptions['restriction']\n outer: RestrictOptions['restriction']\n offset?: RestrictOptions['offset']\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictEdgesState = ModifierState\n\nconst { getRestrictionRect } = restrict\nconst noInner = { top: +Infinity, left: +Infinity, bottom: -Infinity, right: -Infinity }\nconst noOuter = { top: -Infinity, left: -Infinity, bottom: +Infinity, right: +Infinity }\n\nfunction start ({ interaction, state }: ModifierArg) {\n const { options } = state\n const startOffset = interaction.modifiers.startOffset\n let offset\n\n if (options) {\n const offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page)\n\n offset = rectUtils.rectToXY(offsetRect)\n }\n\n offset = offset || { x: 0, y: 0 }\n\n state.offset = {\n top: offset.y + startOffset.top,\n left: offset.x + startOffset.left,\n bottom: offset.y - startOffset.bottom,\n right: offset.x - startOffset.right,\n }\n}\n\nfunction set ({ coords, interaction, state }: ModifierArg) {\n const { offset, options } = state\n const edges = interaction.prepared._linkedEdges || interaction.prepared.edges\n\n if (!edges) {\n return\n }\n\n const page = extend({}, coords)\n const inner = getRestrictionRect(options.inner, interaction, page) || {} as Interact.Rect\n const outer = getRestrictionRect(options.outer, interaction, page) || {} as Interact.Rect\n\n fixRect(inner, noInner)\n fixRect(outer, noOuter)\n\n if (edges.top) {\n coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top)\n }\n else if (edges.bottom) {\n coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom)\n }\n if (edges.left) {\n coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left)\n }\n else if (edges.right) {\n coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right)\n }\n}\n\nfunction fixRect (rect, defaults) {\n for (const edge of ['top', 'left', 'bottom', 'right']) {\n if (!(edge in rect)) {\n rect[edge] = defaults[edge]\n }\n }\n\n return rect\n}\n\nconst defaults: RestrictEdgesOptions = {\n inner: null,\n outer: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictEdges = {\n noInner,\n noOuter,\n getRestrictionRect,\n start,\n set,\n defaults,\n}\n\nexport default restrictEdges\n","import extend from '@interactjs/utils/extend'\nimport restrictPointer from './pointer'\n\nconst defaults = extend({\n get elementRect () {\n return { top: 0, left: 0, bottom: 1, right: 1 }\n },\n set elementRect (_) {},\n}, restrictPointer.defaults)\n\nconst restrictRect = {\n start: restrictPointer.start,\n set: restrictPointer.set,\n defaults,\n}\n\nexport default restrictRect\n","import extend from '@interactjs/utils/extend'\nimport rectUtils from '@interactjs/utils/rect'\nimport { ModifierArg, ModifierState } from '../base'\nimport restrictEdges, { RestrictEdgesState } from './edges'\nimport { RestrictOptions } from './pointer'\n\nconst noMin = { width: -Infinity, height: -Infinity }\nconst noMax = { width: +Infinity, height: +Infinity }\n\nexport interface RestrictSizeOptions {\n min?: Interact.Size | Interact.Point | RestrictOptions['restriction']\n max?: Interact.Size | Interact.Point | RestrictOptions['restriction']\n endOnly: boolean\n enabled?: boolean\n}\n\nfunction start (arg: ModifierArg) {\n return restrictEdges.start(arg)\n}\n\nexport type RestrictSizeState =\n RestrictEdgesState & ModifierState\n\nfunction set (arg: ModifierArg) {\n const { interaction, state } = arg\n const { options } = state\n const edges = interaction.prepared._linkedEdges || interaction.prepared.edges\n\n if (!edges) {\n return\n }\n\n const rect = rectUtils.xywhToTlbr(interaction.resizeRects.inverted)\n\n const minSize = rectUtils.tlbrToXywh(restrictEdges.getRestrictionRect(options.min, interaction, arg.coords)) || noMin\n const maxSize = rectUtils.tlbrToXywh(restrictEdges.getRestrictionRect(options.max, interaction, arg.coords)) || noMax\n\n state.options = {\n endOnly: options.endOnly,\n inner: extend({}, restrictEdges.noInner),\n outer: extend({}, restrictEdges.noOuter),\n }\n\n if (edges.top) {\n state.options.inner.top = rect.bottom - minSize.height\n state.options.outer.top = rect.bottom - maxSize.height\n }\n else if (edges.bottom) {\n state.options.inner.bottom = rect.top + minSize.height\n state.options.outer.bottom = rect.top + maxSize.height\n }\n if (edges.left) {\n state.options.inner.left = rect.right - minSize.width\n state.options.outer.left = rect.right - maxSize.width\n }\n else if (edges.right) {\n state.options.inner.right = rect.left + minSize.width\n state.options.outer.right = rect.left + maxSize.width\n }\n\n restrictEdges.set(arg)\n\n state.options = options\n}\n\nconst defaults: RestrictSizeOptions = {\n min: null,\n max: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictSize = {\n start,\n set,\n defaults,\n}\n\nexport default restrictSize\n","import * as utils from '@interactjs/utils'\nimport { ModifierArg, ModifierState } from '../base'\n\nexport interface SnapPosition {\n x: number\n y: number\n range?: number\n}\n\nexport type SnapFunction = (\n x: number,\n y: number,\n interaction: Interact.Interaction,\n offset: Interact.Point,\n index: number\n) => SnapPosition\nexport type SnapTarget = SnapPosition | SnapFunction\nexport interface SnapOptions {\n targets: SnapTarget[]\n // target range\n range: number\n // self points for snapping. [0,0] = top left, [1,1] = bottom right\n relativePoints: Interact.Point[]\n // startCoords = offset snapping from drag start page position\n offset: Interact.Point | Interact.RectResolvable<[Interact.Interaction]> | 'startCoords'\n offsetWithOrigin?: boolean\n origin: Interact.RectResolvable<[Element]> | Interact.Point\n endOnly?: boolean\n enabled?: boolean\n}\n\nexport type SnapState = ModifierState\n\nfunction start (arg: ModifierArg) {\n const { interaction, interactable, element, rect, state, startOffset } = arg\n const { options } = state\n const offsets = []\n const origin = options.offsetWithOrigin\n ? getOrigin(arg)\n : { x: 0, y: 0 }\n\n let snapOffset\n\n if (options.offset === 'startCoords') {\n snapOffset = {\n x: interaction.coords.start.page.x,\n y: interaction.coords.start.page.y,\n }\n }\n else {\n const offsetRect = utils.rect.resolveRectLike(options.offset as any, interactable, element, [interaction])\n\n snapOffset = utils.rect.rectToXY(offsetRect) || { x: 0, y: 0 }\n snapOffset.x += origin.x\n snapOffset.y += origin.y\n }\n\n const relativePoints = options.relativePoints || []\n\n if (rect && options.relativePoints && options.relativePoints.length) {\n for (let index = 0; index < relativePoints.length; index++) {\n const relativePoint = relativePoints[index]\n\n offsets.push({\n index,\n relativePoint,\n x: startOffset.left - (rect.width * relativePoint.x) + snapOffset.x,\n y: startOffset.top - (rect.height * relativePoint.y) + snapOffset.y,\n })\n }\n }\n else {\n offsets.push(utils.extend({\n index: 0,\n relativePoint: null,\n }, snapOffset))\n }\n\n state.offsets = offsets\n}\n\nfunction set (arg: ModifierArg) {\n const { interaction, coords, state } = arg\n const { options, offsets } = state\n\n const origin = utils.getOriginXY(interaction.interactable, interaction.element, interaction.prepared.name)\n const page = utils.extend({}, coords)\n const targets = []\n let target\n\n if (!options.offsetWithOrigin) {\n page.x -= origin.x\n page.y -= origin.y\n }\n\n state.realX = page.x\n state.realY = page.y\n\n for (const offset of offsets) {\n const relativeX = page.x - offset.x\n const relativeY = page.y - offset.y\n\n for (let index = 0, len = options.targets.length; index < len; index++) {\n const snapTarget = options.targets[index]\n if (utils.is.func(snapTarget)) {\n target = snapTarget(relativeX, relativeY, interaction, offset, index)\n }\n else {\n target = snapTarget\n }\n\n if (!target) { continue }\n\n targets.push({\n x: (utils.is.number(target.x) ? target.x : relativeX) + offset.x,\n y: (utils.is.number(target.y) ? target.y : relativeY) + offset.y,\n\n range: utils.is.number(target.range) ? target.range : options.range,\n })\n }\n }\n\n const closest = {\n target: null,\n inRange: false,\n distance: 0,\n range: 0,\n dx: 0,\n dy: 0,\n }\n\n for (let i = 0, len = targets.length; i < len; i++) {\n target = targets[i]\n\n const range = target.range\n const dx = target.x - page.x\n const dy = target.y - page.y\n const distance = utils.hypot(dx, dy)\n let inRange = distance <= range\n\n // Infinite targets count as being out of range\n // compared to non infinite ones that are in range\n if (range === Infinity && closest.inRange && closest.range !== Infinity) {\n inRange = false\n }\n\n if (!closest.target || (inRange\n // is the closest target in range?\n ? (closest.inRange && range !== Infinity\n // the pointer is relatively deeper in this target\n ? distance / range < closest.distance / closest.range\n // this target has Infinite range and the closest doesn't\n : (range === Infinity && closest.range !== Infinity) ||\n // OR this target is closer that the previous closest\n distance < closest.distance)\n // The other is not in range and the pointer is closer to this target\n : (!closest.inRange && distance < closest.distance))) {\n closest.target = target\n closest.distance = distance\n closest.range = range\n closest.inRange = inRange\n closest.dx = dx\n closest.dy = dy\n\n state.range = range\n }\n }\n\n if (closest.inRange) {\n coords.x = closest.target.x\n coords.y = closest.target.y\n }\n\n state.closest = closest\n}\n\nfunction getOrigin (arg: Partial>) {\n const optionsOrigin = utils.rect.rectToXY(\n utils.rect.resolveRectLike(arg.state.options.origin as any, [arg.interaction.element])\n )\n const origin = optionsOrigin || utils.getOriginXY(\n arg.interactable,\n arg.interaction.element,\n arg.interaction.prepared.name,\n )\n\n return origin\n}\n\nconst defaults: SnapOptions = {\n range : Infinity,\n targets: null,\n offset: null,\n offsetWithOrigin: true,\n origin: null,\n relativePoints: null,\n endOnly: false,\n enabled: false,\n}\nconst snap = {\n start,\n set,\n defaults,\n}\n\nexport default snap\n","// This module allows snapping of the size of targets during resize\n// interactions.\n\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\nimport { ModifierArg } from '../base'\nimport snap, { SnapOptions, SnapState } from './pointer'\n\nexport type SnapSizeOptions = Pick<\nSnapOptions,\n'targets' | 'offset' | 'endOnly' | 'range' | 'enabled'\n>\n\nfunction start (arg: ModifierArg) {\n const { interaction, state } = arg\n const { options } = state\n const edges = interaction.prepared.edges\n\n if (!edges) { return null }\n\n arg.state = {\n options: {\n targets: null,\n relativePoints: [{\n x: edges.left ? 0 : 1,\n y: edges.top ? 0 : 1,\n }],\n offset: options.offset || 'self',\n origin: { x: 0, y: 0 },\n range: options.range,\n },\n }\n\n state.targetFields = state.targetFields || [\n ['width', 'height'],\n ['x', 'y'],\n ]\n\n snap.start(arg)\n state.offsets = arg.state.offsets\n\n arg.state = state\n}\n\nfunction set (arg) {\n const { interaction, state, coords } = arg\n const { options, offsets } = state\n const relative = {\n x: coords.x - offsets[0].x,\n y: coords.y - offsets[0].y,\n }\n\n state.options = extend({}, options)\n state.options.targets = []\n\n for (const snapTarget of (options.targets || [])) {\n let target\n\n if (is.func(snapTarget)) {\n target = snapTarget(relative.x, relative.y, interaction)\n }\n else {\n target = snapTarget\n }\n\n if (!target) { continue }\n\n for (const [xField, yField] of state.targetFields) {\n if (xField in target || yField in target) {\n target.x = target[xField]\n target.y = target[yField]\n\n break\n }\n }\n\n state.options.targets.push(target)\n }\n\n snap.set(arg)\n\n state.options = options\n}\n\nconst defaults: SnapSizeOptions = {\n range: Infinity,\n targets: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst snapSize = {\n start,\n set,\n defaults,\n}\n\nexport default snapSize\n","/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * })\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * })\n */\n\nimport clone from '@interactjs/utils/clone'\nimport extend from '@interactjs/utils/extend'\nimport { ModifierArg } from '../base'\nimport { SnapState } from './pointer'\nimport snapSize, { SnapSizeOptions } from './size'\n\nfunction start (arg: ModifierArg) {\n const edges = arg.interaction.prepared.edges\n\n if (!edges) { return null }\n\n arg.state.targetFields = arg.state.targetFields || [\n [edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom'],\n ]\n\n return snapSize.start(arg)\n}\n\nfunction set (arg) {\n return snapSize.set(arg)\n}\n\nconst snapEdges = {\n start,\n set,\n defaults: extend(clone(snapSize.defaults) as SnapSizeOptions, {\n offset: { x: 0, y: 0 },\n } as unknown),\n}\n\nexport default snapEdges\n","import base from './base'\nimport restrictEdgesModule from './restrict/edges'\nimport restrictModule from './restrict/pointer'\nimport restrictRectModule from './restrict/rect'\nimport restrictSizeModule from './restrict/size'\nimport snapEdgesModule from './snap/edges'\nimport snapModule from './snap/pointer'\nimport snapSizeModule from './snap/size'\n\nconst { makeModifier } = base\n\nexport const snap = makeModifier(snapModule, 'snap')\nexport const snapSize = makeModifier(snapSizeModule, 'snapSize')\nexport const snapEdges = makeModifier(snapEdgesModule, 'snapEdges')\nexport const restrict = makeModifier(restrictModule, 'restrict')\nexport const restrictRect = makeModifier(restrictRectModule, 'restrictRect')\nexport const restrictEdges = makeModifier(restrictEdgesModule, 'restrictEdges')\nexport const restrictSize = makeModifier(restrictSizeModule, 'restrictSize')\n","import BaseEvent from '@interactjs/core/BaseEvent'\nimport pointerUtils from '@interactjs/utils/pointerUtils'\n\n/** */\nexport default class PointerEvent extends BaseEvent {\n type: T\n originalEvent: Interact.PointerEventType\n pointerId: number\n pointerType: string\n double: boolean\n pageX: number\n pageY: number\n clientX: number\n clientY: number\n dt: number\n eventable: any\n\n /** */\n constructor (\n type: T,\n pointer: Interact.PointerType | PointerEvent,\n event: Interact.PointerEventType,\n eventTarget: Interact.EventTarget,\n interaction: Interact.Interaction,\n timeStamp: number,\n ) {\n super(interaction)\n pointerUtils.pointerExtend(this, event)\n\n if (event !== pointer) {\n pointerUtils.pointerExtend(this, pointer)\n }\n\n this.timeStamp = timeStamp\n this.originalEvent = event\n this.type = type\n this.pointerId = pointerUtils.getPointerId(pointer)\n this.pointerType = pointerUtils.getPointerType(pointer)\n this.target = eventTarget\n this.currentTarget = null\n\n if (type === 'tap') {\n const pointerIndex = interaction.getPointerIndex(pointer)\n this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime\n\n const interval = this.timeStamp - interaction.tapTime\n\n this.double = !!(interaction.prevTap &&\n interaction.prevTap.type !== 'doubletap' &&\n interaction.prevTap.target === this.target &&\n interval < 500)\n }\n else if (type === 'doubletap') {\n this.dt = (pointer as PointerEvent<'tap'>).timeStamp - interaction.tapTime\n }\n }\n\n _subtractOrigin ({ x: originX, y: originY }) {\n this.pageX -= originX\n this.pageY -= originY\n this.clientX -= originX\n this.clientY -= originY\n\n return this\n }\n\n _addOrigin ({ x: originX, y: originY }) {\n this.pageX += originX\n this.pageY += originY\n this.clientX += originX\n this.clientY += originY\n\n return this\n }\n\n /**\n * Prevent the default behaviour of the original Event\n */\n preventDefault () {\n this.originalEvent.preventDefault()\n }\n}\n","import { PerActionDefaults } from '@interactjs/core/defaultOptions'\nimport Eventable from '@interactjs/core/Eventable'\nimport Interaction from '@interactjs/core/Interaction'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport PointerEvent from './PointerEvent'\n\nexport type EventTargetList = Array<{\n node: Node\n eventable: Eventable\n props: { [key: string]: any }\n}>\n\nexport interface PointerEventOptions extends PerActionDefaults {\n enabled?: undefined // not used\n holdDuration?: number\n ignoreFrom?: any\n allowFrom?: any\n origin?: Interact.Point | string | Interact.Element\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n pointerEvents: typeof pointerEvents\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n prevTap?: PointerEvent\n tapTime?: number\n }\n}\n\ndeclare module '@interactjs/core/PointerInfo' {\n interface PointerInfo {\n hold?: {\n duration: number\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n pointerEvents: Interact.Options\n }\n}\n\nconst signals = new utils.Signals()\nconst simpleSignals = ['down', 'up', 'cancel']\nconst simpleEvents = ['down', 'up', 'cancel']\n\nconst defaults: PointerEventOptions = {\n holdDuration: 600,\n ignoreFrom : null,\n allowFrom : null,\n origin : { x: 0, y: 0 },\n}\n\nconst pointerEvents = {\n id: 'pointer-events/base',\n install,\n signals,\n PointerEvent,\n fire,\n collectEventTargets,\n createSignalListener,\n defaults,\n types: [\n 'down',\n 'move',\n 'up',\n 'cancel',\n 'tap',\n 'doubletap',\n 'hold',\n ],\n}\n\nfunction fire (arg: {\n interaction: Interaction\n pointer: Interact.PointerType\n event: Interact.PointerEventType\n eventTarget: Interact.EventTarget\n targets?: EventTargetList\n pointerEvent?: PointerEvent\n type: T\n}, scope: Interact.Scope) {\n const {\n interaction, pointer, event, eventTarget,\n type = (arg as any).pointerEvent.type,\n targets = collectEventTargets(arg),\n } = arg\n\n const {\n pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction, scope.now()),\n } = arg\n\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n targets,\n type,\n pointerEvent,\n }\n\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n\n for (const prop in target.props || {}) {\n (pointerEvent as any)[prop] = target.props[prop]\n }\n\n const origin = utils.getOriginXY(target.eventable, target.node)\n\n pointerEvent._subtractOrigin(origin)\n pointerEvent.eventable = target.eventable\n pointerEvent.currentTarget = target.node\n\n target.eventable.fire(pointerEvent)\n\n pointerEvent._addOrigin(origin)\n\n if (pointerEvent.immediatePropagationStopped ||\n (pointerEvent.propagationStopped &&\n (i + 1) < targets.length && targets[i + 1].node !== pointerEvent.currentTarget)) {\n break\n }\n }\n\n signals.fire('fired', signalArg)\n\n if (type === 'tap') {\n // if pointerEvent should make a double tap, create and fire a doubletap\n // PointerEvent and use that as the prevTap\n const prevTap = pointerEvent.double\n ? fire({\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'doubletap',\n }, scope)\n : pointerEvent\n\n interaction.prevTap = prevTap\n interaction.tapTime = prevTap.timeStamp\n }\n\n return pointerEvent\n}\n\nfunction collectEventTargets ({ interaction, pointer, event, eventTarget, type }: {\n interaction: Interaction\n pointer: Interact.PointerType\n event: Interact.PointerEventType\n eventTarget: Interact.EventTarget\n type: T\n}) {\n const pointerIndex = interaction.getPointerIndex(pointer)\n const pointerInfo = interaction.pointers[pointerIndex]\n\n // do not fire a tap event if the pointer was moved before being lifted\n if (type === 'tap' && (interaction.pointerWasMoved ||\n // or if the pointerup target is different to the pointerdown target\n !(pointerInfo && pointerInfo.downTarget === eventTarget))) {\n return []\n }\n\n const path = utils.dom.getPath(eventTarget)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n path,\n targets: [] as EventTargetList,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n signals.fire('collect-targets', signalArg)\n }\n\n if (type === 'hold') {\n signalArg.targets = signalArg.targets.filter(target =>\n target.eventable.options.holdDuration === interaction.pointers[pointerIndex].hold.duration)\n }\n\n return signalArg.targets\n}\n\nfunction install (scope: Scope) {\n const {\n interactions,\n } = scope\n\n scope.pointerEvents = pointerEvents\n scope.defaults.actions.pointerEvents = pointerEvents.defaults\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.prevTap = null // the most recent tap event on this interaction\n interaction.tapTime = 0 // time of the most recent tap event\n })\n\n interactions.signals.on('update-pointer', ({ down, pointerInfo }) => {\n if (!down && pointerInfo.hold) {\n return\n }\n\n pointerInfo.hold = { duration: Infinity, timeout: null }\n })\n\n interactions.signals.on('move', ({ interaction, pointer, event, eventTarget, duplicateMove }) => {\n const pointerIndex = interaction.getPointerIndex(pointer)\n\n if (!duplicateMove && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {\n if (interaction.pointerIsDown) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout)\n }\n\n fire({\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'move',\n }, scope)\n }\n })\n\n interactions.signals.on('down', ({ interaction, pointer, event, eventTarget, pointerIndex }) => {\n const timer = interaction.pointers[pointerIndex].hold\n const path = utils.dom.getPath(eventTarget)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'hold',\n targets: [] as EventTargetList,\n path,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n signals.fire('collect-targets', signalArg)\n }\n\n if (!signalArg.targets.length) { return }\n\n let minDuration = Infinity\n\n for (const target of signalArg.targets) {\n const holdDuration = target.eventable.options.holdDuration\n\n if (holdDuration < minDuration) {\n minDuration = holdDuration\n }\n }\n\n timer.duration = minDuration\n timer.timeout = setTimeout(() => {\n fire({\n interaction,\n eventTarget,\n pointer,\n event,\n type: 'hold',\n }, scope)\n }, minDuration)\n })\n\n for (const signalName of ['up', 'cancel']) {\n interactions.signals.on(signalName, ({ interaction, pointerIndex }) => {\n if (interaction.pointers[pointerIndex].hold) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout)\n }\n })\n }\n\n for (let i = 0; i < simpleSignals.length; i++) {\n interactions.signals.on(simpleSignals[i], createSignalListener(simpleEvents[i], scope))\n }\n\n interactions.signals.on('up', ({ interaction, pointer, event, eventTarget }) => {\n if (!interaction.pointerWasMoved) {\n fire({ interaction, eventTarget, pointer, event, type: 'tap' }, scope)\n }\n })\n}\n\nfunction createSignalListener (type: string, scope) {\n return function ({ interaction, pointer, event, eventTarget }: any) {\n fire({ interaction, eventTarget, pointer, event, type }, scope)\n }\n}\n\nexport default pointerEvents\n","import basePlugin from './base'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n holdIntervalHandle?: any\n }\n}\n\ndeclare module '@interactjs/pointer-events/base' {\n interface PointerEventOptions {\n holdRepeatInterval?: number\n }\n}\n\nfunction install (scope: Interact.Scope) {\n const {\n pointerEvents,\n interactions,\n } = scope\n\n scope.usePlugin(basePlugin)\n\n pointerEvents.signals.on('new', onNew)\n pointerEvents.signals.on('fired', arg => onFired(arg as any, scope))\n\n for (const signal of ['move', 'up', 'cancel', 'endall']) {\n interactions.signals.on(signal, endHoldRepeat)\n }\n\n // don't repeat by default\n pointerEvents.defaults.holdRepeatInterval = 0\n pointerEvents.types.push('holdrepeat')\n}\n\nfunction onNew ({ pointerEvent }) {\n if (pointerEvent.type !== 'hold') { return }\n\n pointerEvent.count = (pointerEvent.count || 0) + 1\n}\n\nfunction onFired (\n { interaction, pointerEvent, eventTarget, targets }: Interact.SignalArg,\n scope: Interact.Scope\n) {\n if (pointerEvent.type !== 'hold' || !targets.length) { return }\n\n // get the repeat interval from the first eventable\n const interval = targets[0].eventable.options.holdRepeatInterval\n\n // don't repeat if the interval is 0 or less\n if (interval <= 0) { return }\n\n // set a timeout to fire the holdrepeat event\n interaction.holdIntervalHandle = setTimeout(() => {\n scope.pointerEvents.fire({\n interaction,\n eventTarget,\n type: 'hold',\n pointer: pointerEvent,\n event: pointerEvent,\n }, scope)\n }, interval)\n}\n\nfunction endHoldRepeat ({ interaction }) {\n // set the interaction's holdStopTime property\n // to stop further holdRepeat events\n if (interaction.holdIntervalHandle) {\n clearInterval(interaction.holdIntervalHandle)\n interaction.holdIntervalHandle = null\n }\n}\n\nexport default {\n id: 'pointer-events/holdRepeat',\n install,\n} as Interact.Plugin\n","import { Scope } from '@interactjs/core/scope'\nimport { merge } from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\n\ntype Interactable = import ('@interactjs/core/Interactable').default\ntype EventTargetList = import ('./base').EventTargetList\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n pointerEvents: typeof pointerEventsMethod\n __backCompatOption: (optionName: string, newValue: any) => any\n }\n}\n\nfunction install (scope: Scope) {\n const {\n pointerEvents,\n actions,\n Interactable,\n interactables,\n } = scope\n\n pointerEvents.signals.on('collect-targets', ({\n targets,\n node,\n type,\n eventTarget,\n }: {\n targets: EventTargetList\n node: Node\n type: string\n eventTarget: Interact.Element\n }) => {\n scope.interactables.forEachMatch(node, (interactable: Interactable) => {\n const eventable = interactable.events\n const options = eventable.options\n\n if (\n eventable.types[type] &&\n eventable.types[type].length &&\n interactable.testIgnoreAllow(options, node, eventTarget)) {\n targets.push({\n node,\n eventable,\n props: { interactable },\n })\n }\n })\n })\n\n interactables.signals.on('new', ({ interactable }) => {\n interactable.events.getRect = function (element: Interact.Element) {\n return interactable.getRect(element)\n }\n })\n\n interactables.signals.on('set', ({ interactable, options }) => {\n extend(interactable.events.options, pointerEvents.defaults)\n extend(interactable.events.options, options.pointerEvents || {})\n })\n\n merge(actions.eventTypes, pointerEvents.types)\n\n Interactable.prototype.pointerEvents = pointerEventsMethod\n\n const __backCompatOption = Interactable.prototype._backCompatOption\n\n Interactable.prototype._backCompatOption = function (optionName, newValue) {\n const ret = __backCompatOption.call(this, optionName, newValue)\n\n if (ret === this) {\n this.events.options[optionName] = newValue\n }\n\n return ret\n }\n}\n\nfunction pointerEventsMethod (this: Interactable, options: any) {\n extend(this.events.options, options)\n\n return this\n}\n\nexport default {\n id: 'pointer-events/interactableTargets',\n install,\n}\n","import pointerEvents from './base'\nimport holdRepeat from './holdRepeat'\nimport interactableTargets from './interactableTargets'\n\nfunction install (scope) {\n scope.usePlugin(pointerEvents)\n scope.usePlugin(holdRepeat)\n scope.usePlugin(interactableTargets)\n}\n\nconst id = 'pointer-events'\n\nexport { id, pointerEvents, holdRepeat, interactableTargets, install }\n","import Interactable from '@interactjs/core/Interactable'\nimport { EventPhase } from '@interactjs/core/InteractEvent'\nimport { ActionProps, Interaction } from '@interactjs/core/Interaction'\nimport { Scope } from '@interactjs/core/scope'\nimport { arr, extend, is, pointer as pointerUtils, rect as rectUtils, win } from '@interactjs/utils'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n reflow: (action: ActionProps) => ReturnType\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n _reflowPromise: Promise\n _reflowResolve: () => void\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n // eslint-disable-next-line no-shadow\n enum EventPhase {\n Reflow = 'reflow',\n }\n}\n\n(EventPhase as any).Reflow = 'reflow'\n\nexport function install (scope: Scope) {\n const {\n actions,\n interactions,\n /** @lends Interactable */\n // eslint-disable-next-line no-shadow\n Interactable,\n } = scope\n\n // add action reflow event types\n for (const actionName of actions.names) {\n actions.eventTypes.push(`${actionName}reflow`)\n }\n\n // remove completed reflow interactions\n interactions.signals.on('stop', ({ interaction }) => {\n if (interaction.pointerType === EventPhase.Reflow) {\n if (interaction._reflowResolve) {\n interaction._reflowResolve()\n }\n\n arr.remove(scope.interactions.list, interaction)\n }\n })\n\n /**\n * ```js\n * const interactable = interact(target)\n * const drag = { name: drag, axis: 'x' }\n * const resize = { name: resize, edges: { left: true, bottom: true }\n *\n * interactable.reflow(drag)\n * interactable.reflow(resize)\n * ```\n *\n * Start an action sequence to re-apply modifiers, check drops, etc.\n *\n * @param { Object } action The action to begin\n * @param { string } action.name The name of the action\n * @returns { Promise }\n */\n Interactable.prototype.reflow = function (action) {\n return reflow(this, action, scope)\n }\n}\n\nfunction reflow (interactable: Interactable, action: ActionProps, scope: Scope): Promise {\n const elements = is.string(interactable.target)\n ? arr.from(interactable._context.querySelectorAll(interactable.target))\n : [interactable.target]\n\n // tslint:disable-next-line variable-name\n const Promise = (win.window as any).Promise\n const promises: Array> | null = Promise ? [] : null\n\n for (const element of elements) {\n const rect = interactable.getRect(element)\n\n if (!rect) { break }\n\n const runningInteraction = arr.find(\n scope.interactions.list,\n (interaction: Interaction) => {\n return interaction.interacting() &&\n interaction.interactable === interactable &&\n interaction.element === element &&\n interaction.prepared.name === action.name\n })\n let reflowPromise: Promise\n\n if (runningInteraction) {\n runningInteraction.move()\n\n if (promises) {\n reflowPromise = runningInteraction._reflowPromise || new Promise((resolve: any) => {\n runningInteraction._reflowResolve = resolve\n })\n }\n }\n else {\n const xywh = rectUtils.tlbrToXywh(rect)\n const coords = {\n page : { x: xywh.x, y: xywh.y },\n client : { x: xywh.x, y: xywh.y },\n timeStamp: scope.now(),\n }\n\n const event = pointerUtils.coordsToEvent(coords)\n reflowPromise = startReflow(scope, interactable, element, action, event)\n }\n\n if (promises) {\n promises.push(reflowPromise)\n }\n }\n\n return promises && Promise.all(promises).then(() => interactable)\n}\n\nfunction startReflow (scope: Scope, interactable: Interactable, element: Interact.Element, action: ActionProps, event: any) {\n const interaction = scope.interactions.new({ pointerType: 'reflow' })\n const signalArg = {\n interaction,\n event,\n pointer: event,\n eventTarget: element,\n phase: EventPhase.Reflow,\n }\n\n interaction.interactable = interactable\n interaction.element = element\n interaction.prepared = extend({}, action)\n interaction.prevEvent = event\n interaction.updatePointer(event, event, element, true)\n\n interaction._doPhase(signalArg)\n\n const reflowPromise = (win.window as unknown as any).Promise\n ? new (win.window as unknown as any).Promise((resolve: any) => {\n interaction._reflowResolve = resolve\n })\n : null\n\n interaction._reflowPromise = reflowPromise\n interaction.start(action, interactable, element)\n\n if (interaction._interacting) {\n interaction.move(signalArg)\n interaction.end(event)\n }\n else {\n interaction.stop()\n }\n\n interaction.removePointer(event, event)\n interaction.pointerIsDown = false\n\n return reflowPromise\n}\n\nexport default {\n id: 'reflow',\n install,\n} as Interact.Plugin\n","/** @module interact */\n\nimport { Options } from '@interactjs/core/defaultOptions'\nimport Interactable from '@interactjs/core/Interactable'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport browser from '@interactjs/utils/browser'\nimport events from '@interactjs/utils/events'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n interact: InteractStatic\n }\n}\n\nexport interface InteractStatic {\n (target: Interact.Target, options?: Options): Interactable\n on: typeof on\n pointerMoveTolerance: typeof pointerMoveTolerance\n stop: typeof stop\n supportsPointerEvent: typeof supportsPointerEvent\n supportsTouch: typeof supportsTouch\n debug: typeof debug\n off: typeof off\n isSet: typeof isSet\n use: typeof use\n getPointerAverage: typeof utils.pointer.pointerAverage\n getTouchBBox: typeof utils.pointer.touchBBox\n getTouchDistance: typeof utils.pointer.touchDistance\n getTouchAngle: typeof utils.pointer.touchAngle\n getElementRect: typeof utils.dom.getElementRect\n getElementClientRect: typeof utils.dom.getElementClientRect\n matchesSelector: typeof utils.dom.matchesSelector\n closest: typeof utils.dom.closest\n addDocument: typeof scope.addDocument\n removeDocument: typeof scope.removeDocument\n version: string\n}\n\nconst globalEvents: any = {}\nconst scope = new Scope()\n\n/**\n * ```js\n * interact('#draggable').draggable(true)\n *\n * var rectables = interact('rect')\n * rectables\n * .gesturable(true)\n * .on('gesturemove', function (event) {\n * // ...\n * })\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @global\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\nexport const interact: InteractStatic = function interact (target: Interact.Target, options?: any) {\n let interactable = scope.interactables.get(target, options)\n\n if (!interactable) {\n interactable = scope.interactables.new(target, options)\n interactable.events.global = globalEvents\n }\n\n return interactable\n} as InteractStatic\n\n/**\n * Use a plugin\n *\n * @alias module:interact.use\n *\n * @param {Object} plugin\n * @param {function} plugin.install\n * @return {interact}\n */\ninteract.use = use\nfunction use (plugin: Interact.Plugin, options?: { [key: string]: any }) {\n scope.usePlugin(plugin, options)\n\n return interact\n}\n\n/**\n * Check if an element or selector has been set with the {@link interact}\n * function\n *\n * @alias module:interact.isSet\n *\n * @param {Element} element The Element being searched for\n * @return {boolean} Indicates if the element or CSS selector was previously\n * passed to interact\n */\ninteract.isSet = isSet\nfunction isSet (target: Interact.Element, options?: any) {\n return !!scope.interactables.get(target, options && options.context)\n}\n\n/**\n * Add a global listener for an InteractEvent or adds a DOM event to `document`\n *\n * @alias module:interact.on\n *\n * @param {string | array | object} type The types of events to listen for\n * @param {function} listener The function event (s)\n * @param {object | boolean} [options] object or useCapture flag for\n * addEventListener\n * @return {object} interact\n */\ninteract.on = on\nfunction on (type: string | Interact.EventTypes, listener: Interact.ListenersArg, options?) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (utils.is.array(type)) {\n for (const eventType of (type as any[])) {\n interact.on(eventType, listener, options)\n }\n\n return interact\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.on(prop, (type as Interact.EventTypes)[prop], listener)\n }\n\n return interact\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (utils.arr.contains(scope.actions.eventTypes, type)) {\n // if this type of event was never bound\n if (!globalEvents[type]) {\n globalEvents[type] = [listener]\n }\n else {\n globalEvents[type].push(listener)\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n events.add(scope.document, type, listener as Interact.Listener, { options })\n }\n\n return interact\n}\n\n/**\n * Removes a global InteractEvent listener or DOM event from `document`\n *\n * @alias module:interact.off\n *\n * @param {string | array | object} type The types of events that were listened\n * for\n * @param {function} listener The listener function to be removed\n * @param {object | boolean} options [options] object or useCapture flag for\n * removeEventListener\n * @return {object} interact\n */\ninteract.off = off\nfunction off (type, listener, options) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (utils.is.array(type)) {\n for (const eventType of type) {\n interact.off(eventType, listener, options)\n }\n\n return interact\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.off(prop, type[prop], listener)\n }\n\n return interact\n }\n\n if (!utils.arr.contains(scope.actions.eventTypes, type)) {\n events.remove(scope.document, type, listener, options)\n }\n else {\n let index\n\n if (type in globalEvents &&\n (index = globalEvents[type].indexOf(listener)) !== -1) {\n globalEvents[type].splice(index, 1)\n }\n }\n\n return interact\n}\n\n/**\n * Returns an object which exposes internal data\n * @alias module:interact.debug\n *\n * @return {object} An object with properties that outline the current state\n * and expose internal functions and variables\n */\ninteract.debug = debug\nfunction debug () {\n return scope\n}\n\n// expose the functions used to calculate multi-touch properties\ninteract.getPointerAverage = utils.pointer.pointerAverage\ninteract.getTouchBBox = utils.pointer.touchBBox\ninteract.getTouchDistance = utils.pointer.touchDistance\ninteract.getTouchAngle = utils.pointer.touchAngle\n\ninteract.getElementRect = utils.dom.getElementRect\ninteract.getElementClientRect = utils.dom.getElementClientRect\ninteract.matchesSelector = utils.dom.matchesSelector\ninteract.closest = utils.dom.closest\n\n/**\n * @alias module:interact.supportsTouch\n *\n * @return {boolean} Whether or not the browser supports touch input\n */\ninteract.supportsTouch = supportsTouch\nfunction supportsTouch () {\n return browser.supportsTouch\n}\n\n/**\n * @alias module:interact.supportsPointerEvent\n *\n * @return {boolean} Whether or not the browser supports PointerEvents\n */\ninteract.supportsPointerEvent = supportsPointerEvent\nfunction supportsPointerEvent () {\n return browser.supportsPointerEvent\n}\n\n/**\n * Cancels all interactions (end events are not fired)\n *\n * @alias module:interact.stop\n *\n * @return {object} interact\n */\ninteract.stop = stop\nfunction stop () {\n for (const interaction of scope.interactions.list) {\n interaction.stop()\n }\n\n return interact\n}\n\n/**\n * Returns or sets the distance the pointer must be moved before an action\n * sequence occurs. This also affects tolerance for tap events.\n *\n * @alias module:interact.pointerMoveTolerance\n *\n * @param {number} [newValue] The movement from the start position must be greater than this value\n * @return {interact | number}\n */\ninteract.pointerMoveTolerance = pointerMoveTolerance\nfunction pointerMoveTolerance (newValue) {\n if (utils.is.number(newValue)) {\n scope.interactions.pointerMoveTolerance = newValue\n\n return interact\n }\n\n return scope.interactions.pointerMoveTolerance\n}\n\nscope.interactables.signals.on('unset', ({ interactable }) => {\n scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1)\n\n // Stop related interactions when an Interactable is unset\n for (const interaction of scope.interactions.list) {\n if (interaction.interactable === interactable && interaction.interacting() && !interaction._ending) {\n interaction.stop()\n }\n }\n})\n\ninteract.addDocument = (doc, options) => scope.addDocument(doc, options)\ninteract.removeDocument = doc => scope.removeDocument(doc)\n\nscope.interact = interact\n\nexport { scope }\nexport default interact\n","import * as actions from '@interactjs/actions'\nimport autoScroll from '@interactjs/auto-scroll'\nimport * as autoStart from '@interactjs/auto-start'\nimport interactablePreventDefault from '@interactjs/core/interactablePreventDefault'\nimport devTools from '@interactjs/dev-tools'\nimport inertia from '@interactjs/inertia'\nimport * as modifiers from '@interactjs/modifiers'\nimport modifiersBase from '@interactjs/modifiers/base'\nimport * as pointerEvents from '@interactjs/pointer-events'\nimport reflow from '@interactjs/reflow'\nimport interact, { scope } from './interact'\n\nexport function init (window: Window) {\n scope.init(window)\n\n interact.use(interactablePreventDefault)\n\n // pointerEvents\n interact.use(pointerEvents)\n\n // inertia\n interact.use(inertia)\n\n // autoStart, hold\n interact.use(autoStart)\n\n // drag and drop, resize, gesture\n interact.use(actions)\n\n // snap, resize, etc.\n interact.use(modifiersBase)\n\n // for backwrads compatibility\n for (const type in modifiers) {\n const { _defaults, _methods } = modifiers[type]\n\n _defaults._methods = _methods\n scope.defaults.perAction[type] = _defaults\n }\n\n // autoScroll\n interact.use(autoScroll)\n\n // reflow\n interact.use(reflow)\n\n // eslint-disable-next-line no-undef\n if (process.env.NODE_ENV !== 'production') {\n interact.use(devTools)\n }\n\n return interact\n}\n\n// eslint-disable-next-line no-undef\ninteract.version = process.env.npm_package_version\n\nexport default interact\nexport {\n interact,\n actions,\n autoScroll,\n interactablePreventDefault,\n inertia,\n modifiersBase as modifiers,\n pointerEvents,\n reflow,\n}\n","function createGrid (grid: (Interact.Rect | Interact.Point) & { range?: number, limits: Interact.Rect, offset: Interact.Point }) {\n const coordFields = [\n ['x', 'y'],\n ['left', 'top'],\n ['right', 'bottom'],\n ['width', 'height'],\n ].filter(([xField, yField]) => xField in grid || yField in grid)\n\n return function (x, y) {\n const {\n range,\n limits = {\n left : -Infinity,\n right : Infinity,\n top : -Infinity,\n bottom: Infinity,\n },\n offset = { x: 0, y: 0 },\n } = grid\n\n const result = { range }\n\n for (const [xField, yField] of coordFields) {\n const gridx = Math.round((x - offset.x) / grid[xField])\n const gridy = Math.round((y - offset.y) / grid[yField])\n\n result[xField] = Math.max(limits.left, Math.min(limits.right, gridx * grid[xField] + offset.x))\n result[yField] = Math.max(limits.top, Math.min(limits.bottom, gridy * grid[yField] + offset.y))\n }\n\n return result\n }\n}\n\nexport default createGrid\n","import grid from './grid'\n\nexport { grid }\n","import interact, { init as initInteract } from '@interactjs/interact'\nimport * as modifiers from '@interactjs/modifiers'\nimport { Modifier } from '@interactjs/modifiers/base'\nimport '@interactjs/types'\nimport extend from '@interactjs/utils/extend'\nimport * as snappers from '@interactjs/utils/snappers'\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n modifiers?: typeof modifiers & { [key: string]: (options?) => Modifier }\n snappers?: typeof snappers & { [key: string]: any }\n createSnapGrid?: typeof snappers.grid\n }\n}\n\nif (typeof window === 'object' && !!window) {\n init(window)\n}\n\nexport function init (win: Window) {\n initInteract(win)\n\n return interact.use({\n id: 'interactjs',\n install () {\n interact.modifiers = extend({}, modifiers)\n interact.snappers = snappers\n interact.createSnapGrid = interact.snappers.grid\n },\n })\n}\n\nexport default interact\ninteract['default'] = interact // tslint:disable-line no-string-literal\ninteract['init'] = init // tslint:disable-line no-string-literal\n\nif (typeof module === 'object' && !!module) {\n module.exports = interact\n}\n","\nreturn _$index_29;\n\n});\n"]}