@holoviz/panel 1.3.6 → 1.4.0-a.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundled/datatabulator/tabulator-tables@5.5.0/dist/css/tabulator_fast.min.css +6 -0
- package/dist/bundled/editabletemplate/editable.css +101 -0
- package/dist/bundled/interactjs@1.10.19/dist/interact.min.js +3 -0
- package/dist/bundled/interactjs@1.10.19/dist/interact.min.js.map +1 -0
- package/dist/bundled/muuri@0.9.5/dist/muuri.min.js +21 -0
- package/dist/bundled/notificationarea/panel/1.4.0-a.1/dist/bundled/font-awesome/css/all.min.css +2 -0
- package/dist/bundled/panel/1.4.0-a.1/dist/bundled/bootstrap5/css/bootstrap.min.css +2 -0
- package/dist/bundled/panel/1.4.0-a.1/dist/bundled/bootstrap5/js/bootstrap.bundle.min.js +2 -0
- package/dist/bundled/panel/1.4.0-a.1/dist/bundled/font-awesome/css/all.min.css +2 -0
- package/dist/bundled/panel/1.4.0-a.1/dist/bundled/jquery/jquery.slim.min.js +2 -0
- package/dist/bundled/plotlyplot/panel/1.4.0-a.1/dist/bundled/jquery/jquery.slim.min.js +2 -0
- package/dist/bundled/vanillatemplate/vanilla.css +1 -1
- package/dist/bundled/web-animations-js@2.3.2/web-animations.min.js +16 -0
- package/dist/bundled/web-animations-js@2.3.2/web-animations.min.js.map +1 -0
- package/dist/css/button.css +1 -1
- package/dist/css/chat_message.css +30 -2
- package/dist/css/loading.css +47 -11
- package/dist/css/widgetbox.css +0 -2
- package/dist/lib/models/button_icon.d.ts +23 -0
- package/dist/lib/models/button_icon.js +39 -0
- package/dist/lib/models/button_icon.js.map +1 -0
- package/dist/lib/models/card.js +1 -2
- package/dist/lib/models/card.js.map +1 -1
- package/dist/lib/models/file_download.js +1 -2
- package/dist/lib/models/file_download.js.map +1 -1
- package/dist/lib/models/icon.d.ts +23 -11
- package/dist/lib/models/icon.js +79 -21
- package/dist/lib/models/icon.js.map +1 -1
- package/dist/lib/models/index.d.ts +3 -1
- package/dist/lib/models/index.js +3 -1
- package/dist/lib/models/index.js.map +1 -1
- package/dist/lib/models/perspective.js +7 -2
- package/dist/lib/models/perspective.js.map +1 -1
- package/dist/lib/models/plotly.js +2 -7
- package/dist/lib/models/plotly.js.map +1 -1
- package/dist/lib/models/toggle_icon.d.ts +19 -0
- package/dist/lib/models/toggle_icon.js +26 -0
- package/dist/lib/models/toggle_icon.js.map +1 -0
- package/dist/lib/models/util.d.ts +1 -0
- package/dist/lib/models/util.js +20 -0
- package/dist/lib/models/util.js.map +1 -1
- package/dist/lib/styles/button.css.js +1 -1
- package/dist/lib/styles/chat_message.css.js +2 -2
- package/dist/lib/styles/loading.css.js +1 -1
- package/dist/lib/styles/widgetbox.css.js +1 -1
- package/dist/panel.js +246 -91
- package/dist/panel.js.map +1 -1
- package/dist/panel.json +1 -1
- package/dist/panel.min.js +12 -10
- package/package.json +2 -2
- package/dist/bundled/notificationarea/panel/1.3.6/dist/bundled/font-awesome/css/all.min.css +0 -2
- package/dist/bundled/panel/1.3.6/dist/bundled/bootstrap5/css/bootstrap.min.css +0 -2
- package/dist/bundled/panel/1.3.6/dist/bundled/bootstrap5/js/bootstrap.bundle.min.js +0 -2
- package/dist/bundled/panel/1.3.6/dist/bundled/font-awesome/css/all.min.css +0 -2
- package/dist/bundled/panel/1.3.6/dist/bundled/jquery/jquery.slim.min.js +0 -2
- package/dist/bundled/plotlyplot/panel/1.3.6/dist/bundled/jquery/jquery.slim.min.js +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["_header.js","node_modules/browser-pack-flat/_prelude","packages/@interactjs/utils/isWindow.ts","packages/@interactjs/utils/window.ts","packages/@interactjs/utils/is.ts","packages/@interactjs/actions/drag/plugin.ts","packages/@interactjs/utils/domObjects.ts","packages/@interactjs/utils/browser.ts","packages/@interactjs/utils/domUtils.ts","packages/@interactjs/utils/extend.ts","packages/@interactjs/utils/rect.ts","packages/@interactjs/utils/getOriginXY.ts","packages/@interactjs/utils/normalizeListeners.ts","packages/@interactjs/utils/hypot.ts","packages/@interactjs/utils/pointerExtend.ts","packages/@interactjs/utils/pointerUtils.ts","packages/@interactjs/core/BaseEvent.ts","packages/@interactjs/utils/arr.ts","packages/@interactjs/actions/drop/DropEvent.ts","packages/@interactjs/actions/drop/plugin.ts","packages/@interactjs/actions/gesture/plugin.ts","packages/@interactjs/actions/resize/plugin.ts","packages/@interactjs/actions/plugin.ts","packages/@interactjs/utils/raf.ts","packages/@interactjs/auto-scroll/plugin.ts","packages/@interactjs/utils/misc.ts","packages/@interactjs/auto-start/InteractableMethods.ts","packages/@interactjs/auto-start/base.ts","packages/@interactjs/auto-start/dragAxis.ts","packages/@interactjs/auto-start/hold.ts","packages/@interactjs/auto-start/plugin.ts","packages/@interactjs/core/interactablePreventDefault.ts","packages/@interactjs/dev-tools/visualizer/plugin.ts","packages/@interactjs/dev-tools/plugin.ts","packages/@interactjs/utils/clone.ts","packages/@interactjs/modifiers/Modification.ts","packages/@interactjs/modifiers/base.ts","packages/@interactjs/core/options.ts","packages/@interactjs/core/InteractEvent.ts","packages/@interactjs/core/PointerInfo.ts","packages/@interactjs/core/Interaction.ts","packages/@interactjs/offset/plugin.ts","packages/@interactjs/inertia/plugin.ts","packages/@interactjs/core/Eventable.ts","packages/@interactjs/core/isNonNativeEvent.ts","packages/@interactjs/core/InteractStatic.ts","packages/@interactjs/core/Interactable.ts","packages/@interactjs/core/InteractableSet.ts","packages/@interactjs/core/events.ts","packages/@interactjs/core/interactionFinder.ts","packages/@interactjs/core/interactions.ts","packages/@interactjs/core/scope.ts","packages/@interactjs/interact/index.ts","packages/@interactjs/snappers/edgeTarget.ts","packages/@interactjs/snappers/elements.ts","packages/@interactjs/snappers/grid.ts","packages/@interactjs/snappers/plugin.ts","packages/@interactjs/modifiers/aspectRatio.ts","packages/@interactjs/modifiers/noop.ts","packages/@interactjs/modifiers/restrict/pointer.ts","packages/@interactjs/modifiers/restrict/edges.ts","packages/@interactjs/modifiers/restrict/rect.ts","packages/@interactjs/modifiers/restrict/size.ts","packages/@interactjs/modifiers/snap/pointer.ts","packages/@interactjs/modifiers/snap/size.ts","packages/@interactjs/modifiers/snap/edges.ts","packages/@interactjs/modifiers/all.ts","packages/@interactjs/modifiers/plugin.ts","packages/@interactjs/pointer-events/PointerEvent.ts","packages/@interactjs/pointer-events/base.ts","packages/@interactjs/pointer-events/holdRepeat.ts","packages/@interactjs/pointer-events/interactableTargets.ts","packages/@interactjs/pointer-events/plugin.ts","packages/@interactjs/reflow/plugin.ts","packages/@interactjs/interactjs/index.ts","packages/interactjs/index.ts","node_modules/browser-pack-flat/_postlude"],"names":[],"mappings":"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","file":"interact.min.js","sourceRoot":"","sourcesContent":["/**\n * interact.js 1.10.19\n *\n * Copyright (c) 2012-present Taye Adeyemi <dev@taye.me>\n * https://interactjs.io/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;\n","export default (thing: any) => !!(thing && thing.Window) && thing instanceof thing.Window\n","import isWindow from './isWindow'\n\nexport let realWindow = undefined as Window\n\nlet win = undefined as Window\nexport { win as window }\n\nexport function init (window: Window & { wrap?: (...args: any[]) => any }) {\n // get wrapped window if using Shadow DOM polyfill\n\n 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 && typeof window.wrap === 'function' && window.wrap(el) === el) {\n // use wrapped window\n window = window.wrap(window)\n }\n\n win = window\n}\n\nif (typeof window !== 'undefined' && !!window) {\n init(window)\n}\n\nexport function getWindow (node: any) {\n if (isWindow(node)) {\n return node\n }\n\n const rootNode = node.ownerDocument || node\n\n return rootNode.defaultView || win.window\n}\n","import isWindow from './isWindow'\nimport * as win from './window'\n\nconst window = (thing: any): thing is Window => thing === win.window || isWindow(thing)\n\nconst docFrag = (thing: any): thing is DocumentFragment => object(thing) && thing.nodeType === 11\n\nconst object = (thing: any): thing is { [index: string]: any } => !!thing && typeof thing === 'object'\n\nconst func = (thing: any): thing is (...args: any[]) => any => typeof thing === 'function'\n\nconst number = (thing: any): thing is number => typeof thing === 'number'\n\nconst bool = (thing: any): thing is boolean => typeof thing === 'boolean'\n\nconst string = (thing: any): thing is string => typeof thing === 'string'\n\nconst element = (thing: any): thing is HTMLElement | SVGElement => {\n if (!thing || typeof thing !== 'object') {\n return false\n }\n\n const _window = win.getWindow(thing) || win.window\n\n return /object|function/.test(typeof Element)\n ? thing instanceof Element || thing instanceof _window.Element\n : thing.nodeType === 1 && typeof thing.nodeName === 'string'\n}\n\nconst plainObject: typeof object = (thing: any): thing is { [index: string]: any } =>\n object(thing) && !!thing.constructor && /function Object\\b/.test(thing.constructor.toString())\n\nconst array = <T extends unknown>(thing: any): thing is T[] =>\n object(thing) && typeof thing.length !== 'undefined' && func(thing.splice)\n\nexport default {\n window,\n docFrag,\n object,\n func,\n number,\n bool,\n string,\n element,\n plainObject,\n array,\n}\n","import type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ActionMethod, ListenersArg } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n draggable: DraggableMethod\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n drag: DraggableOptions\n }\n}\n\ndeclare module '@interactjs/core/types' {\n interface ActionMap {\n drag?: typeof drag\n }\n}\n\nexport type DragEvent = InteractEvent<'drag'>\n\nexport type DraggableMethod = ActionMethod<DraggableOptions>\n\nexport interface DraggableOptions extends PerActionDefaults {\n startAxis?: 'x' | 'y' | 'xy'\n lockAxis?: 'x' | 'y' | 'xy' | 'start'\n oninertiastart?: ListenersArg\n onstart?: ListenersArg\n onmove?: ListenersArg\n onend?: ListenersArg\n}\n\nfunction install (scope: Scope) {\n const { actions, Interactable, defaults } = scope\n\n Interactable.prototype.draggable = drag.draggable\n\n actions.map.drag = drag\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 } 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 (\n this: Interactable,\n options?: DraggableOptions | boolean,\n): 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 as DraggableOptions\n}\n\nconst drag: Plugin = {\n id: 'actions/drag',\n install,\n listeners: {\n 'interactions:before-action-move': beforeMove,\n 'interactions:action-resume': beforeMove,\n\n // dragmove\n 'interactions:action-move': move,\n 'auto-start:check': (arg) => {\n const { interaction, interactable, buttons } = arg\n const dragOptions = interactable.options.drag\n\n if (\n !(dragOptions && dragOptions.enabled) ||\n // check mouseButton setting if the pointer is down\n (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & interactable.options.drag.mouseButtons) === 0)\n ) {\n return undefined\n }\n\n arg.action = {\n name: 'drag',\n axis: dragOptions.lockAxis === 'start' ? dragOptions.startAxis : dragOptions.lockAxis,\n }\n\n return false\n },\n },\n draggable,\n beforeMove,\n move,\n defaults: {\n startAxis: 'xy',\n lockAxis: 'xy',\n } as DraggableOptions,\n\n getCursor () {\n return 'move'\n },\n}\n\nexport default drag\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 init,\n document: null,\n DocumentFragment: null,\n SVGElement: null,\n SVGSVGElement: null,\n SVGElementInstance: null,\n Element: null,\n HTMLElement: null,\n Event: null,\n Touch: null,\n PointerEvent: null,\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","import domObjects from './domObjects'\nimport is from './is'\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 'matches',\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: any) {\n const Element = domObjects.Element\n const navigator: Partial<Navigator> = window.navigator || {}\n\n // Does the browser support touch input?\n browser.supportsTouch =\n 'ontouchstart' in window ||\n (is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch)\n\n // Does the browser support PointerEvents\n // https://github.com/taye/interact.js/issues/703#issuecomment-471570492\n browser.supportsPointerEvent = (navigator as any).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) && /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 =\n navigator.appName === 'Opera' && browser.supportsTouch && /Presto/.test(navigator.userAgent)\n\n // prefix matchesSelector\n browser.prefixedMatchesSelector = (\n '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 ) as 'matches'\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 = domObjects.document && 'onmousewheel' in domObjects.document ? 'mousewheel' : 'wheel'\n}\n\nexport default browser\n","import type { Rect, Target, Element } from '@interactjs/core/types'\n\nimport browser from './browser'\nimport domObjects from './domObjects'\nimport is from './is'\nimport * as win from './window'\n\nexport function nodeContains (parent: Node, child: Node) {\n if (parent.contains) {\n return parent.contains(child as Node)\n }\n\n while (child) {\n if (child === parent) {\n return true\n }\n\n child = (child as Node).parentNode\n }\n\n return false\n}\n\nexport function closest (element: Node, selector: string) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return element\n }\n\n element = parentNode(element)\n }\n\n return null\n}\n\nexport function parentNode (node: Node | Document) {\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: Element, selector: string) {\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: Node | Document | ShadowRoot) => el.parentNode || (el as ShadowRoot).host\n\n// Test for the element that's \"above\" all other qualifiers\nexport function indexOfDeepestElement (elements: Element[] | NodeListOf<globalThis.Element>) {\n let deepestNodeParents: Node[] = []\n let deepestNodeIndex: number\n\n for (let i = 0; i < elements.length; i++) {\n const currentNode = elements[i]\n const deepestNode: Node = elements[deepestNodeIndex]\n\n // node may appear in elements array multiple times\n if (!currentNode || i === deepestNodeIndex) {\n continue\n }\n\n if (!deepestNode) {\n deepestNodeIndex = i\n continue\n }\n\n const currentNodeParent = getParent(currentNode)\n const deepestNodeParent = getParent(deepestNode)\n\n // check if the deepest or current are document.documentElement/rootElement\n // - if the current node is, do nothing and continue\n if (currentNodeParent === currentNode.ownerDocument) {\n continue\n }\n // - if deepest is, update with the current node and continue to next\n else if (deepestNodeParent === currentNode.ownerDocument) {\n deepestNodeIndex = i\n continue\n }\n\n // compare zIndex of siblings\n if (currentNodeParent === deepestNodeParent) {\n if (zIndexIsHigherThan(currentNode, deepestNode)) {\n deepestNodeIndex = i\n }\n\n continue\n }\n\n // populate the ancestry array for the latest deepest node\n deepestNodeParents = deepestNodeParents.length ? deepestNodeParents : getNodeParents(deepestNode)\n\n let ancestryStart: Node\n\n // if the deepest node is an HTMLElement and the current node is a non root svg element\n if (\n deepestNode instanceof domObjects.HTMLElement &&\n currentNode instanceof domObjects.SVGElement &&\n !(currentNode instanceof domObjects.SVGSVGElement)\n ) {\n // TODO: is this check necessary? Was this for HTML elements embedded in SVG?\n if (currentNode === deepestNodeParent) {\n continue\n }\n\n ancestryStart = currentNode.ownerSVGElement\n } else {\n ancestryStart = currentNode\n }\n\n const currentNodeParents = getNodeParents(ancestryStart, deepestNode.ownerDocument)\n let commonIndex = 0\n\n // get (position of closest common ancestor) + 1\n while (\n currentNodeParents[commonIndex] &&\n currentNodeParents[commonIndex] === deepestNodeParents[commonIndex]\n ) {\n commonIndex++\n }\n\n const parents = [\n currentNodeParents[commonIndex - 1],\n currentNodeParents[commonIndex],\n deepestNodeParents[commonIndex],\n ]\n\n if (parents[0]) {\n let child = parents[0].lastChild\n\n while (child) {\n if (child === parents[1]) {\n deepestNodeIndex = i\n deepestNodeParents = currentNodeParents\n\n break\n } else if (child === parents[2]) {\n break\n }\n\n child = child.previousSibling\n }\n }\n }\n\n return deepestNodeIndex\n}\n\nfunction getNodeParents (node: Node, limit?: Node) {\n const parents: Node[] = []\n let parent: Node = node\n let parentParent: Node\n\n while ((parentParent = getParent(parent)) && parent !== limit && parentParent !== parent.ownerDocument) {\n parents.unshift(parent)\n parent = parentParent\n }\n\n return parents\n}\n\nfunction zIndexIsHigherThan (higherNode: Node, lowerNode: Node) {\n const higherIndex = parseInt(win.getWindow(higherNode).getComputedStyle(higherNode).zIndex, 10) || 0\n const lowerIndex = parseInt(win.getWindow(lowerNode).getComputedStyle(lowerNode).zIndex, 10) || 0\n\n return higherIndex >= lowerIndex\n}\n\nexport function matchesUpTo (element: Element, selector: string, limit: Node) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return true\n }\n\n element = parentNode(element) as Element\n\n if (element === limit) {\n return matchesSelector(element, selector)\n }\n }\n\n return false\n}\n\nexport function getActualElement (element: Element) {\n return (element as any).correspondingUseElement || element\n}\n\nexport function getScrollXY (relevantWindow?: Window) {\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: Element): Required<Rect> {\n const clientRect =\n element instanceof domObjects.SVGElement ? element.getBoundingClientRect() : element.getClientRects()[0]\n\n return (\n 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}\n\nexport function getElementRect (element: 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: Node | Document) {\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: Target) {\n if (!is.string(value)) {\n return false\n }\n\n // an exception will be raised if it is invalid\n domObjects.document.querySelector(value)\n return true\n}\n","export default function extend<T, U extends object> (dest: U & Partial<T>, source: T): T & U {\n for (const prop in source) {\n ;(dest as unknown as T)[prop] = source[prop]\n }\n\n const ret = dest as T & U\n\n return ret\n}\n","import type {\n HasGetRect,\n RectResolvable,\n Rect,\n Element,\n Point,\n FullRect,\n EdgeOptions,\n} from '@interactjs/core/types'\n\nimport { closest, getElementRect, parentNode } from './domUtils'\nimport extend from './extend'\nimport is from './is'\n\nexport function getStringOptionResult (value: any, target: HasGetRect, element: Node) {\n if (value === 'parent') {\n return parentNode(element)\n }\n\n if (value === 'self') {\n return target.getRect(element as Element)\n }\n\n return closest(element, value)\n}\n\nexport function resolveRectLike<T extends any[]> (\n value: RectResolvable<T>,\n target?: HasGetRect,\n element?: Node,\n functionArgs?: T,\n) {\n let returnValue: any = value\n if (is.string(returnValue)) {\n returnValue = getStringOptionResult(returnValue, target, element)\n } else if (is.func(returnValue)) {\n returnValue = returnValue(...functionArgs)\n }\n\n if (is.element(returnValue)) {\n returnValue = getElementRect(returnValue)\n }\n\n return returnValue as Rect\n}\n\nexport function rectToXY (rect: Rect | Point) {\n return (\n rect && {\n x: 'x' in rect ? rect.x : rect.left,\n y: 'y' in rect ? rect.y : rect.top,\n }\n )\n}\n\nexport function xywhToTlbr<T extends Partial<Rect & Point>> (rect: T) {\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 as Rect & T\n}\n\nexport function tlbrToXywh (rect: Rect & Partial<Point>) {\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 || 0) - rect.x\n rect.height = rect.height || (rect.bottom || 0) - rect.y\n }\n\n return rect as FullRect & Point\n}\n\nexport function addEdges (edges: EdgeOptions, rect: Rect, delta: Point) {\n if (edges.left) {\n rect.left += delta.x\n }\n if (edges.right) {\n rect.right += delta.x\n }\n if (edges.top) {\n rect.top += delta.y\n }\n if (edges.bottom) {\n rect.bottom += delta.y\n }\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n}\n","import type { PerActionDefaults } from '@interactjs/core/options'\nimport type { ActionName, HasGetRect } from '@interactjs/core/types'\n\nimport { rectToXY, resolveRectLike } from './rect'\n\nexport default function (\n target: HasGetRect & { options: PerActionDefaults },\n element: Node,\n actionName?: ActionName,\n) {\n const actionOptions = (target.options as any)[actionName]\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 type { EventTypes, Listener, ListenersArg } from '@interactjs/core/types'\n\nimport extend from './extend'\nimport is from './is'\n\nexport interface NormalizedListeners {\n [type: string]: Listener[]\n}\n\nexport default function normalize (\n type: EventTypes,\n listeners?: ListenersArg | 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<NormalizedListeners>((acc, t) => extend(acc, normalize(t, listeners, result)), result)\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 } else if (is.array(listeners)) {\n for (const l of listeners) {\n normalize(type, l, result)\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","export default (x: number, y: number) => Math.sqrt(x * x + y * y)\n","const VENDOR_PREFIXES = ['webkit', 'moz']\n\nexport default function pointerExtend<T> (dest: Partial<T & { __set?: Partial<T> }>, source: T) {\n dest.__set ||= {} as any\n\n for (const prop in source) {\n // skip deprecated prefixed properties\n if (VENDOR_PREFIXES.some((prefix) => prop.indexOf(prefix) === 0)) continue\n\n if (typeof dest[prop] !== 'function' && prop !== '__set') {\n Object.defineProperty(dest, prop, {\n get () {\n if (prop in dest.__set) return dest.__set[prop]\n\n return (dest.__set[prop] = source[prop] as any)\n },\n set (value: any) {\n dest.__set[prop] = value\n },\n configurable: true,\n })\n }\n }\n return dest\n}\n","import type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { CoordsSetMember, PointerType, Point, PointerEventType, Element } from '@interactjs/core/types'\n\nimport browser from './browser'\nimport dom from './domObjects'\nimport * as domUtils from './domUtils'\nimport hypot from './hypot'\nimport is from './is'\nimport pointerExtend from './pointerExtend'\n\nexport function copyCoords (dest: CoordsSetMember, src: CoordsSetMember) {\n dest.page = dest.page || ({} as any)\n dest.page.x = src.page.x\n dest.page.y = src.page.y\n\n dest.client = dest.client || ({} as any)\n dest.client.x = src.client.x\n dest.client.y = src.client.y\n\n dest.timeStamp = src.timeStamp\n}\n\nexport function setCoordDeltas (targetObj: CoordsSetMember, prev: CoordsSetMember, cur: CoordsSetMember) {\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\nexport function setCoordVelocity (targetObj: CoordsSetMember, delta: CoordsSetMember) {\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\nexport function setZeroCoords (targetObj: CoordsSetMember) {\n targetObj.page.x = 0\n targetObj.page.y = 0\n targetObj.client.x = 0\n targetObj.client.y = 0\n}\n\nexport function isNativePointer (pointer: any) {\n return pointer instanceof dom.Event || pointer instanceof dom.Touch\n}\n\n// Get specified X/Y coords for mouse or event.touches[0]\nexport function getXY (type: string, pointer: PointerType | InteractEvent, xy: Point) {\n xy = xy || ({} as Point)\n type = type || 'page'\n\n xy.x = pointer[(type + 'X') as 'pageX']\n xy.y = pointer[(type + 'Y') as 'pageY']\n\n return xy\n}\n\nexport function getPageXY (pointer: PointerType | InteractEvent, page?: Point) {\n page = page || { x: 0, y: 0 }\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && isNativePointer(pointer)) {\n getXY('screen', pointer, page)\n\n page.x += window.scrollX\n page.y += window.scrollY\n } else {\n getXY('page', pointer, page)\n }\n\n return page\n}\n\nexport function getClientXY (pointer: PointerType, client: Point) {\n client = client || ({} as any)\n\n if (browser.isOperaMobile && isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n getXY('screen', pointer, client)\n } else {\n getXY('client', pointer, client)\n }\n\n return client\n}\n\nexport function getPointerId (pointer: { pointerId?: number, identifier?: number, type?: string }) {\n return is.number(pointer.pointerId) ? pointer.pointerId! : pointer.identifier!\n}\n\nexport function setCoords (dest: CoordsSetMember, pointers: any[], timeStamp: number) {\n const pointer = pointers.length > 1 ? pointerAverage(pointers) : pointers[0]\n\n getPageXY(pointer, dest.page)\n getClientXY(pointer, dest.client)\n\n dest.timeStamp = timeStamp\n}\n\nexport function getTouchPair (event: TouchEvent | PointerType[]) {\n const touches: PointerType[] = []\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 } else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0]\n touches[1] = event.changedTouches[1]\n }\n } else {\n touches[0] = event.touches[0]\n touches[1] = event.touches[1]\n }\n }\n\n return touches\n}\n\nexport function pointerAverage (pointers: PointerType[]) {\n const average = {\n pageX: 0,\n pageY: 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n }\n\n type CoordKeys = keyof typeof average\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop as CoordKeys] += pointer[prop as CoordKeys]\n }\n }\n for (const prop in average) {\n average[prop as CoordKeys] /= pointers.length\n }\n\n return average\n}\n\nexport function touchBBox (event: PointerType[]) {\n if (!event.length) {\n return null\n }\n\n const touches = 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\nexport function touchDistance (event: PointerType[] | TouchEvent, deltaSource: string) {\n const sourceX = (deltaSource + 'X') as 'pageX'\n const sourceY = (deltaSource + 'Y') as 'pageY'\n const touches = 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\nexport function touchAngle (event: PointerType[] | TouchEvent, deltaSource: string) {\n const sourceX = (deltaSource + 'X') as 'pageX'\n const sourceY = (deltaSource + 'Y') as 'pageY'\n const touches = 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\nexport function getPointerType (pointer: { pointerType?: string, identifier?: number, type?: string }) {\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 ]\nexport function getEventTargets (event: Event) {\n const path = is.func(event.composedPath)\n ? (event.composedPath() as Element[])\n : (event as unknown as { path: Element[] }).path\n\n return [\n domUtils.getActualElement(path ? path[0] : (event.target as Element)),\n domUtils.getActualElement(event.currentTarget as Element),\n ]\n}\n\nexport function newCoords (): CoordsSetMember {\n return {\n page: { x: 0, y: 0 },\n client: { x: 0, y: 0 },\n timeStamp: 0,\n }\n}\n\nexport function coordsToEvent (coords: MockCoords) {\n const event = {\n coords,\n get page () {\n return this.coords.page\n },\n get client () {\n return this.coords.client\n },\n get timeStamp () {\n return this.coords.timeStamp\n },\n get pageX () {\n return this.coords.page.x\n },\n get pageY () {\n return this.coords.page.y\n },\n get clientX () {\n return this.coords.client.x\n },\n get clientY () {\n return this.coords.client.y\n },\n get pointerId () {\n return this.coords.pointerId\n },\n get target () {\n return this.coords.target\n },\n get type () {\n return this.coords.type\n },\n get pointerType () {\n return this.coords.pointerType\n },\n get buttons () {\n return this.coords.buttons\n },\n preventDefault () {},\n }\n\n return event as typeof event & PointerType & PointerEventType\n}\n\nexport interface MockCoords {\n page: Point\n client: Point\n timeStamp?: number\n pointerId?: any\n target?: any\n type?: string\n pointerType?: string\n buttons?: number\n}\n\nexport { pointerExtend }\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction, InteractionProxy } from '@interactjs/core/Interaction'\nimport type { ActionName } from '@interactjs/core/types'\n\nexport class BaseEvent<T extends ActionName | null = never> {\n declare type: string\n declare target: EventTarget\n declare currentTarget: Node\n declare interactable: Interactable\n declare _interaction: Interaction<T>\n declare timeStamp: number\n immediatePropagationStopped = false\n propagationStopped = false\n\n constructor (interaction: Interaction<T>) {\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\n// defined outside of class definition to avoid assignment of undefined during\n// construction\nexport interface BaseEvent<T extends ActionName> {\n interaction: InteractionProxy<T>\n}\n\n// getters and setters defined here to support typescript 3.6 and below which\n// don't support getter and setters in .d.ts files\nObject.defineProperty(BaseEvent.prototype, 'interaction', {\n get (this: BaseEvent) {\n return this._interaction._proxy\n },\n set (this: BaseEvent) {},\n})\n","type Filter<T> = (element: T, index: number, array: T[]) => boolean\n\nexport const contains = <T>(array: T[], target: T) => array.indexOf(target) !== -1\n\nexport const remove = <T>(array: T[], target: T) => array.splice(array.indexOf(target), 1)\n\nexport const merge = <T, U>(target: Array<T | U>, source: U[]) => {\n for (const item of source) {\n target.push(item)\n }\n\n return target\n}\n\nexport const from = <T = any>(source: ArrayLike<T>) => merge([] as T[], source as T[])\n\nexport const findIndex = <T>(array: T[], func: Filter<T>) => {\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 const find = <T = any>(array: T[], func: Filter<T>) => array[findIndex(array, func)]\n","import { BaseEvent } from '@interactjs/core/BaseEvent'\nimport type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type { Element } from '@interactjs/core/types'\nimport * as arr from '@interactjs/utils/arr'\n\nimport type { DropState } from './plugin'\n\nexport class DropEvent extends BaseEvent<'drag'> {\n declare target: Element\n dropzone: Interactable\n dragEvent: InteractEvent<'drag'>\n relatedTarget: Element\n draggable: Interactable\n propagationStopped = false\n immediatePropagationStopped = false\n\n /**\n * Class of events fired on dropzones during drags with acceptable targets.\n */\n constructor (dropState: DropState, dragEvent: InteractEvent<'drag'>, type: string) {\n super(dragEvent._interaction)\n\n const { element, dropzone } = type === 'dragleave' ? dropState.prev : 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 || dropState.cur.dropzone !== this.dropzone || dropState.cur.element !== this.target)\n ) {\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(\n activeDrops,\n ({ dropzone, element }) => dropzone === this.dropzone && element === this.target,\n )\n\n dropState.activeDrops.splice(index, 1)\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 } 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","import type { EventPhase, InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Element, PointerEventType, Rect, ListenersArg } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport is from '@interactjs/utils/is'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { DragEvent } from '../drag/plugin'\nimport drag from '../drag/plugin'\n\nimport { DropEvent } from './DropEvent'\n\nexport type DropFunctionChecker = (\n dragEvent: any, // related drag operation\n event: any, // touch or mouse EventEmitter\n dropped: boolean, // default checker result\n dropzone: Interactable, // dropzone interactable\n dropElement: Element, // drop zone element\n draggable: Interactable, // draggable's Interactable\n draggableElement: Element, // dragged element\n) => boolean\n\nexport interface DropzoneOptions extends PerActionDefaults {\n accept?:\n | string\n | Element\n | (({ dropzone, draggableElement }: { dropzone: Interactable, draggableElement: Element }) => boolean)\n // How the overlap is checked on the drop zone\n overlap?: 'pointer' | 'center' | number\n checker?: DropFunctionChecker\n\n ondropactivate?: ListenersArg\n ondropdeactivate?: ListenersArg\n ondragenter?: ListenersArg\n ondragleave?: ListenersArg\n ondropmove?: ListenersArg\n ondrop?: ListenersArg\n}\n\nexport interface DropzoneMethod {\n (this: Interactable, options: DropzoneOptions | boolean): Interactable\n (): DropzoneOptions\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n dropzone: DropzoneMethod\n dropCheck: (\n dragEvent: InteractEvent,\n event: PointerEventType,\n draggable: Interactable,\n draggableElement: Element,\n dropElemen: Element,\n rect: any,\n ) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n dropState?: DropState\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface InteractEvent {\n prevDropzone?: Interactable\n dropzone?: Interactable\n dragEnter?: Element\n dragLeave?: Element\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n drop: DropzoneOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n dynamicDrop?: boolean\n }\n\n interface SignalArgs {\n 'actions/drop:start': DropSignalArg\n 'actions/drop:move': DropSignalArg\n 'actions/drop:end': DropSignalArg\n }\n}\n\ndeclare module '@interactjs/core/types' {\n interface ActionMap {\n drop?: typeof drop\n }\n}\n\ndeclare module '@interactjs/core/InteractStatic' {\n interface InteractStatic {\n dynamicDrop: (this: InteractStatic, newValue?: boolean) => boolean | this\n }\n}\n\ninterface DropSignalArg {\n interaction: Interaction<'drag'>\n dragEvent: DragEvent\n}\n\nexport interface ActiveDrop {\n dropzone: Interactable\n element: Element\n rect: Rect\n}\n\nexport interface DropState {\n cur: {\n // the dropzone a drag target might be dropped into\n dropzone: Interactable\n // the element at the time of checking\n element: Element\n }\n prev: {\n // the dropzone that was recently dragged away from\n dropzone: Interactable\n // the element at the time of checking\n element: Element\n }\n // wheather the potential drop was rejected from a listener\n rejected: boolean\n // the drop events related to the current drag event\n events: FiredDropEvents\n activeDrops: ActiveDrop[]\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n /** @lends module:interact */\n interactStatic: interact,\n /** @lends Interactable */\n Interactable,\n defaults,\n } = scope\n\n scope.usePlugin(drag)\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 {object | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.dropzone = function (this: Interactable, options) {\n return dropzoneMethod(this, options)\n } as Interactable['dropzone']\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 (\n this: Interactable,\n dragEvent,\n event,\n draggable,\n draggableElement,\n dropElement,\n rect,\n ) {\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 (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 extend(actions.phaselessTypes, {\n dragenter: true,\n dragleave: true,\n dropactivate: true,\n dropdeactivate: true,\n dropmove: true,\n drop: true,\n })\n actions.methodDict.drop = 'dropzone'\n\n scope.dynamicDrop = false\n\n defaults.actions.drop = drop.defaults\n}\n\nfunction collectDrops ({ interactables }: Scope, draggableElement: Element) {\n const drops: ActiveDrop[] = []\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) {\n continue\n }\n\n const accept = dropzone.options.drop.accept\n\n // test the draggable draggableElement against the dropzone's accept setting\n if (\n (is.element(accept) && accept !== draggableElement) ||\n (is.string(accept) && !domUtils.matchesSelector(draggableElement, accept)) ||\n (is.func(accept) && !accept({ dropzone, draggableElement }))\n ) {\n continue\n }\n\n // query for new elements if necessary\n const dropElements = (\n is.string(dropzone.target)\n ? dropzone._context.querySelectorAll(dropzone.target)\n : is.array(dropzone.target)\n ? dropzone.target\n : [dropzone.target]\n ) as Element[]\n\n for (const dropzoneElement of dropElements) {\n if (dropzoneElement !== draggableElement) {\n drops.push({\n dropzone,\n element: dropzoneElement,\n rect: dropzone.getRect(dropzoneElement),\n })\n }\n }\n }\n\n return drops\n}\n\nfunction fireActivationEvents (activeDrops: ActiveDrop[], event: DropEvent) {\n // loop through all active dropzones and trigger event\n for (const { dropzone, element } of activeDrops.slice()) {\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: 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 (\n { dropState, interactable: draggable, element: dragElement }: Partial<Interaction>,\n dragEvent,\n pointerEvent,\n) {\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(\n dropzone.dropCheck(dragEvent, pointerEvent, draggable, dragElement, dropzoneElement, rect)\n ? dropzoneElement\n : null,\n )\n }\n\n // get the most appropriate dropzone based on DOM depth and order\n const dropIndex = domUtils.indexOfDeepestElement(validDrops)\n\n return dropState.activeDrops[dropIndex] || null\n}\n\nfunction getDropEvents (interaction: Interaction, _pointerEvent, dragEvent: 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\ntype FiredDropEvents = Partial<\nRecord<'leave' | 'enter' | 'move' | 'drop' | 'activate' | 'deactivate', DropEvent>\n>\n\nfunction fireDropEvents (interaction: Interaction, events: FiredDropEvents) {\n const { dropState } = interaction\n const { activeDrops, cur, prev } = dropState\n\n if (events.leave) {\n prev.dropzone.fire(events.leave)\n }\n if (events.enter) {\n cur.dropzone.fire(events.enter)\n }\n if (events.move) {\n cur.dropzone.fire(events.move)\n }\n if (events.drop) {\n cur.dropzone.fire(events.drop)\n }\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 }: DoPhaseArg<'drag', EventPhase>, scope: Scope) {\n if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') {\n return\n }\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 =\n 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: Interactable): DropzoneOptions\nfunction dropzoneMethod(interactable: Interactable, options: DropzoneOptions | boolean): Interactable\nfunction dropzoneMethod (interactable: Interactable, options?: DropzoneOptions | boolean) {\n if (is.object(options)) {\n interactable.options.drop.enabled = options.enabled !== false\n\n if (options.listeners) {\n const normalized = 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 (is.func(options.ondrop)) {\n interactable.on('drop', options.ondrop)\n }\n if (is.func(options.ondropactivate)) {\n interactable.on('dropactivate', options.ondropactivate)\n }\n if (is.func(options.ondropdeactivate)) {\n interactable.on('dropdeactivate', options.ondropdeactivate)\n }\n if (is.func(options.ondragenter)) {\n interactable.on('dragenter', options.ondragenter)\n }\n if (is.func(options.ondragleave)) {\n interactable.on('dragleave', options.ondragleave)\n }\n if (is.func(options.ondropmove)) {\n interactable.on('dropmove', options.ondropmove)\n }\n\n if (/^(pointer|center)$/.test(options.overlap as string)) {\n interactable.options.drop.overlap = options.overlap\n } else if (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 (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: Interactable,\n dragEvent: InteractEvent,\n event: PointerEventType,\n draggable: Interactable,\n draggableElement: Element,\n dropElement: 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(\n dragEvent,\n event,\n dropped,\n interactable,\n dropElement,\n draggable,\n draggableElement,\n )\n : false\n }\n\n const dropOverlap = interactable.options.drop.overlap\n\n if (dropOverlap === 'pointer') {\n const origin = getOriginXY(draggable, draggableElement, 'drag')\n const page = pointerUtils.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 && is.number(dropOverlap)) {\n const overlapArea =\n 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(\n dragEvent,\n event,\n dropped,\n interactable,\n dropElement,\n draggable,\n draggableElement,\n )\n }\n\n return dropped\n}\n\nconst drop: Plugin = {\n id: 'actions/drop',\n install,\n listeners: {\n 'interactions:before-action-start': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\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: [],\n }\n },\n\n 'interactions:after-action-start': (\n { interaction, event, iEvent: dragEvent }: DoPhaseArg<'drag', EventPhase>,\n scope,\n ) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\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 scope.fire('actions/drop:start', { interaction, dragEvent })\n }\n },\n\n 'interactions:action-move': onEventCreated,\n\n 'interactions:after-action-move': (\n { interaction, iEvent: dragEvent }: DoPhaseArg<'drag', EventPhase>,\n scope,\n ) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n fireDropEvents(interaction, interaction.dropState.events)\n\n scope.fire('actions/drop:move', { interaction, dragEvent })\n interaction.dropState.events = {}\n },\n\n 'interactions:action-end': (arg: DoPhaseArg<'drag', EventPhase>, scope) => {\n if (arg.interaction.prepared.name !== 'drag') {\n return\n }\n\n const { interaction, iEvent: dragEvent } = arg\n\n onEventCreated(arg, scope)\n fireDropEvents(interaction, interaction.dropState.events)\n scope.fire('actions/drop:end', { interaction, dragEvent })\n },\n\n 'interactions:stop': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\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 getActiveDrops,\n getDrop,\n getDropEvents,\n fireDropEvents,\n defaults: {\n enabled: false,\n accept: null,\n overlap: 'pointer',\n } as DropzoneOptions,\n}\n\nexport default drop\n","import type { InteractEvent, EventPhase } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ActionMethod, Rect, PointerType, ListenersArg } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nexport type GesturableMethod = ActionMethod<GesturableOptions>\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/options' {\n interface ActionDefaults {\n gesture: GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/types' {\n interface ActionMap {\n gesture?: typeof gesture\n }\n}\n\nexport interface GesturableOptions extends PerActionDefaults {\n onstart?: ListenersArg\n onmove?: ListenersArg\n onend?: ListenersArg\n}\n\nexport interface GestureEvent extends InteractEvent<'gesture'> {\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: Rect // enclosing box of all points\n touches: PointerType[]\n}\n\nexport interface GestureSignalArg extends DoPhaseArg<'gesture', EventPhase> {\n iEvent: GestureEvent\n interaction: Interaction<'gesture'>\n}\n\nfunction install (scope: Scope) {\n const { actions, Interactable, defaults } = 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 (\n this: InstanceType<typeof Interactable>,\n options: GesturableOptions | boolean,\n ) {\n if (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 (is.bool(options)) {\n this.options.gesture.enabled = options\n\n return this\n }\n\n return this.options.gesture as GesturableOptions\n } as GesturableMethod\n\n actions.map.gesture = gesture\n actions.methodDict.gesture = 'gesturable'\n\n defaults.actions.gesture = gesture.defaults\n}\n\nfunction updateGestureProps ({ interaction, iEvent, 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 = pointerUtils.touchDistance(pointers, deltaSource)\n iEvent.box = pointerUtils.touchBBox(pointers)\n iEvent.scale = 1\n iEvent.ds = 0\n iEvent.angle = pointerUtils.touchAngle(pointers, deltaSource)\n iEvent.da = 0\n\n interaction.gesture.startDistance = iEvent.distance\n interaction.gesture.startAngle = iEvent.angle\n } else if (ending) {\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 } else {\n iEvent.distance = pointerUtils.touchDistance(pointers, deltaSource)\n iEvent.box = pointerUtils.touchBBox(pointers)\n iEvent.scale = iEvent.distance / interaction.gesture.startDistance\n iEvent.angle = pointerUtils.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 (is.number(iEvent.scale) && iEvent.scale !== Infinity && !isNaN(iEvent.scale)) {\n interaction.gesture.scale = iEvent.scale\n }\n}\n\nconst gesture: Plugin = {\n id: 'actions/gesture',\n before: ['actions/drag', 'actions/resize'],\n install,\n listeners: {\n 'interactions:action-start': updateGestureProps,\n 'interactions:action-move': updateGestureProps,\n 'interactions:action-end': updateGestureProps,\n\n 'interactions:new': ({ interaction }) => {\n interaction.gesture = {\n angle: 0,\n distance: 0,\n scale: 1,\n startAngle: 0,\n startDistance: 0,\n }\n },\n\n 'auto-start:check': (arg) => {\n if (arg.interaction.pointers.length < 2) {\n return undefined\n }\n\n const gestureOptions = arg.interactable.options.gesture\n\n if (!(gestureOptions && gestureOptions.enabled)) {\n return undefined\n }\n\n arg.action = { name: 'gesture' }\n\n return false\n },\n },\n\n defaults: {},\n\n getCursor () {\n return ''\n },\n}\n\nexport default gesture\n","import type { EventPhase, InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type {\n ActionName,\n ActionProps,\n ActionMethod,\n EdgeOptions,\n FullRect,\n ListenersArg,\n OrBoolean,\n Point,\n Rect,\n} from '@interactjs/core/types'\nimport * as dom from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nexport type EdgeName = 'top' | 'left' | 'bottom' | 'right'\n\nexport type ResizableMethod = ActionMethod<ResizableOptions>\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n resizable: ResizableMethod\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction<T extends ActionName | null = ActionName> {\n resizeAxes: 'x' | 'y' | 'xy'\n resizeStartAspectRatio: number\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n resize: ResizableOptions\n }\n}\n\ndeclare module '@interactjs/core/types' {\n interface ActionMap {\n resize?: typeof resize\n }\n}\n\nexport interface ResizableOptions extends PerActionDefaults {\n square?: boolean\n preserveAspectRatio?: boolean\n edges?: EdgeOptions | null\n axis?: 'x' | 'y' | 'xy' // deprecated\n invert?: 'none' | 'negate' | 'reposition'\n margin?: number\n squareResize?: boolean\n oninertiastart?: ListenersArg\n onstart?: ListenersArg\n onmove?: ListenersArg\n onend?: ListenersArg\n}\n\nexport interface ResizeEvent<P extends EventPhase = EventPhase> extends InteractEvent<'resize', P> {\n deltaRect?: FullRect\n edges?: 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 defaults,\n } = scope\n\n // Less Precision with touch input\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: Interactable, options: ResizableOptions | boolean) {\n return resizable(this, options, scope)\n } as ResizableMethod\n\n actions.map.resize = resize\n actions.methodDict.resize = 'resizable'\n\n defaults.actions.resize = resize.defaults\n}\n\nfunction resizeChecker (arg) {\n const { interaction, interactable, element, rect, buttons } = arg\n\n if (!rect) {\n return undefined\n }\n\n const page = extend({}, interaction.coords.cur.page)\n const resizeOptions = interactable.options.resize\n\n if (\n !(resizeOptions && resizeOptions.enabled) ||\n // check mouseButton setting if the pointer is down\n (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & resizeOptions.mouseButtons) === 0)\n ) {\n return undefined\n }\n\n // if using resize.edges\n if (is.object(resizeOptions.edges)) {\n const resizeEdges = {\n left: false,\n right: false,\n top: false,\n bottom: false,\n }\n\n for (const edge in resizeEdges) {\n resizeEdges[edge] = checkResizeEdge(\n edge,\n resizeOptions.edges[edge],\n page,\n interaction._latestPointer.eventTarget,\n element,\n rect,\n resizeOptions.margin || resize.defaultMargin,\n )\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 arg.action = {\n name: 'resize',\n edges: resizeEdges,\n }\n }\n } else {\n const right = resizeOptions.axis !== 'y' && page.x > rect.right - resize.defaultMargin\n const bottom = resizeOptions.axis !== 'x' && page.y > rect.bottom - resize.defaultMargin\n\n if (right || bottom) {\n arg.action = {\n name: 'resize',\n axes: (right ? 'x' : '') + (bottom ? 'y' : ''),\n }\n }\n }\n\n return arg.action ? false : undefined\n}\n\nfunction resizable (interactable: Interactable, options: OrBoolean<ResizableOptions> | 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 } 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 } 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: Point,\n element: Node,\n interactableElement: Element,\n rect: Rect,\n margin: number,\n) {\n // false, '', undefined, null\n if (!value) {\n return false\n }\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, Math.abs((name === 'left' || name === 'right' ? width : height) / 2))\n\n if (width < 0) {\n if (name === 'left') {\n name = 'right'\n } else if (name === 'right') {\n name = 'left'\n }\n }\n if (height < 0) {\n if (name === 'top') {\n name = 'bottom'\n } else if (name === 'bottom') {\n name = 'top'\n }\n }\n\n if (name === 'left') {\n const edge = width >= 0 ? rect.left : rect.right\n return page.x < edge + margin\n }\n if (name === 'top') {\n const edge = height >= 0 ? rect.top : rect.bottom\n return page.y < edge + margin\n }\n\n if (name === 'right') {\n return page.x > (width >= 0 ? rect.right : rect.left) - margin\n }\n if (name === 'bottom') {\n return page.y > (height >= 0 ? rect.bottom : rect.top) - margin\n }\n }\n\n // the remaining checks require an element\n if (!is.element(element)) {\n return false\n }\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\n/* eslint-disable multiline-ternary */\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nfunction initCursors (browser: typeof import('@interactjs/utils/browser').default) {\n return browser.isIe9\n ? {\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 : {\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/* eslint-enable multiline-ternary */\n\nfunction start ({ iEvent, interaction }: { iEvent: InteractEvent<any, any>, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n return\n }\n\n const resizeEvent = iEvent as ResizeEvent\n const rect = interaction.rect\n\n interaction._rects = {\n start: extend({}, rect),\n corrected: extend({}, rect),\n previous: extend({}, rect),\n delta: {\n left: 0,\n right: 0,\n width: 0,\n top: 0,\n bottom: 0,\n height: 0,\n },\n }\n\n resizeEvent.edges = interaction.prepared.edges\n resizeEvent.rect = interaction._rects.corrected\n resizeEvent.deltaRect = interaction._rects.delta\n}\n\nfunction move ({ iEvent, interaction }: { iEvent: InteractEvent<any, any>, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) return\n\n const resizeEvent = iEvent as ResizeEvent\n const resizeOptions = interaction.interactable.options.resize\n const invert = resizeOptions.invert\n const invertible = invert === 'reposition' || invert === 'negate'\n\n const current = interaction.rect\n const { start: startRect, corrected, delta: deltaRect, previous } = interaction._rects\n\n extend(previous, corrected)\n\n if (invertible) {\n // if invertible, copy the current rect\n extend(corrected, current)\n\n if (invert === 'reposition') {\n // swap edge values if necessary to keep width/height positive\n if (corrected.top > corrected.bottom) {\n const swap = corrected.top\n\n corrected.top = corrected.bottom\n corrected.bottom = swap\n }\n if (corrected.left > corrected.right) {\n const swap = corrected.left\n\n corrected.left = corrected.right\n corrected.right = swap\n }\n }\n } else {\n // if not invertible, restrict to minimum of 0x0 rect\n corrected.top = Math.min(current.top, startRect.bottom)\n corrected.bottom = Math.max(current.bottom, startRect.top)\n corrected.left = Math.min(current.left, startRect.right)\n corrected.right = Math.max(current.right, startRect.left)\n }\n\n corrected.width = corrected.right - corrected.left\n corrected.height = corrected.bottom - corrected.top\n\n for (const edge in corrected) {\n deltaRect[edge] = corrected[edge] - previous[edge]\n }\n\n resizeEvent.edges = interaction.prepared.edges\n resizeEvent.rect = corrected\n resizeEvent.deltaRect = deltaRect\n}\n\nfunction end ({ iEvent, interaction }: { iEvent: InteractEvent<any, any>, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) return\n\n const resizeEvent = iEvent as ResizeEvent\n\n resizeEvent.edges = interaction.prepared.edges\n resizeEvent.rect = interaction._rects.corrected\n resizeEvent.deltaRect = interaction._rects.delta\n}\n\nfunction updateEventAxes ({\n iEvent,\n interaction,\n}: {\n iEvent: InteractEvent<any, any>\n interaction: Interaction\n}) {\n if (interaction.prepared.name !== 'resize' || !interaction.resizeAxes) return\n\n const options = interaction.interactable.options\n const resizeEvent = iEvent as ResizeEvent\n\n if (options.resize.square) {\n if (interaction.resizeAxes === 'y') {\n resizeEvent.delta.x = resizeEvent.delta.y\n } else {\n resizeEvent.delta.y = resizeEvent.delta.x\n }\n resizeEvent.axes = 'xy'\n } else {\n resizeEvent.axes = interaction.resizeAxes\n\n if (interaction.resizeAxes === 'x') {\n resizeEvent.delta.y = 0\n } else if (interaction.resizeAxes === 'y') {\n resizeEvent.delta.x = 0\n }\n }\n}\n\nconst resize: Plugin = {\n id: 'actions/resize',\n before: ['actions/drag'],\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.resizeAxes = 'xy'\n },\n\n 'interactions:action-start': (arg) => {\n start(arg)\n updateEventAxes(arg)\n },\n 'interactions:action-move': (arg) => {\n move(arg)\n updateEventAxes(arg)\n },\n 'interactions:action-end': end,\n 'auto-start:check': resizeChecker,\n },\n\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 ResizableOptions,\n\n cursors: null as ReturnType<typeof initCursors>,\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 } 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\nexport default resize\n","import type { Scope } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates */\nimport './drag/plugin'\nimport './drop/plugin'\nimport './gesture/plugin'\nimport './resize/plugin'\n\nimport drag from './drag/plugin'\nimport drop from './drop/plugin'\nimport gesture from './gesture/plugin'\nimport resize from './resize/plugin'\n/* eslint-enable import/no-duplicates */\n\nexport default {\n id: 'actions',\n install (scope: Scope) {\n scope.usePlugin(gesture)\n scope.usePlugin(resize)\n scope.usePlugin(drag)\n scope.usePlugin(drop)\n },\n}\n","let lastTime = 0\nlet request: typeof requestAnimationFrame\nlet cancel: typeof cancelAnimationFrame\n\nfunction init (global: Window | typeof globalThis) {\n request = global.requestAnimationFrame\n cancel = global.cancelAnimationFrame\n\n if (!request) {\n const vendors = ['ms', 'moz', 'webkit', 'o']\n\n for (const vendor of vendors) {\n request = global[`${vendor}RequestAnimationFrame` as 'requestAnimationFrame']\n cancel =\n global[`${vendor}CancelAnimationFrame` as 'cancelAnimationFrame'] ||\n global[`${vendor}CancelRequestAnimationFrame` as 'cancelAnimationFrame']\n }\n }\n\n request = request && request.bind(global)\n cancel = cancel && cancel.bind(global)\n\n if (!request) {\n request = (callback) => {\n const currTime = Date.now()\n const timeToCall = Math.max(0, 16 - (currTime - lastTime))\n const token = global.setTimeout(() => {\n // eslint-disable-next-line n/no-callback-literal\n callback(currTime + timeToCall)\n }, timeToCall)\n\n lastTime = currTime + timeToCall\n return token as any\n }\n\n cancel = (token) => clearTimeout(token)\n }\n}\n\nexport default {\n request: (callback: FrameRequestCallback) => request(callback),\n cancel: (token: number) => cancel(token),\n init,\n}\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, PointerType } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport { getStringOptionResult } from '@interactjs/utils/rect'\nimport { getWindow } from '@interactjs/utils/window'\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/options' {\n interface PerActionDefaults {\n autoScroll?: AutoScrollOptions\n }\n}\n\nexport interface AutoScrollOptions {\n container?: Window | HTMLElement | string\n margin?: number\n distance?: number\n interval?: number\n speed?: number\n enabled?: boolean\n}\n\nfunction install (scope: Scope) {\n const { defaults, actions } = scope\n\n scope.autoScroll = autoScroll\n autoScroll.now = () => scope.now()\n\n actions.phaselessTypes.autoscroll = true\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 as Interaction<ActionName> | null,\n i: 0, // the handle returned by window.setInterval\n\n // Direction each pulse is to scroll in\n x: 0,\n y: 0,\n\n isScrolling: false,\n prevTime: 0,\n margin: 0,\n speed: 0,\n\n start (interaction: 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 actionName = interaction.prepared.name\n const options = interactable.options[actionName].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 } 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: Interactable, actionName: ActionName) {\n const options = interactable.options\n\n return options[actionName].autoScroll?.enabled\n },\n onInteractionMove<T extends ActionName> ({\n interaction,\n pointer,\n }: {\n interaction: Interaction<T>\n pointer: PointerType\n }) {\n if (\n !(interaction.interacting() && autoScroll.check(interaction.interactable, interaction.prepared.name))\n ) {\n return\n }\n\n if (interaction.simulation) {\n autoScroll.x = autoScroll.y = 0\n return\n }\n\n let top: boolean\n let right: boolean\n let bottom: boolean\n let left: boolean\n\n const { interactable, element } = interaction\n const actionName = interaction.prepared.name\n const options = interactable.options[actionName].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 } 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: any, interactable: Interactable, element: Element) {\n return (\n (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element)\n )\n}\n\nexport function getScroll (container: any) {\n if (is.window(container)) {\n container = window.document.body\n }\n\n return { x: container.scrollLeft, y: container.scrollTop }\n}\n\nexport function getScrollSize (container: any) {\n if (is.window(container)) {\n container = window.document.body\n }\n\n return { x: container.scrollWidth, y: container.scrollHeight }\n}\n\nexport function getScrollSizeDelta<T extends ActionName> (\n {\n interaction,\n element,\n }: {\n interaction: Partial<Interaction<T>>\n element: Element\n },\n func: any,\n) {\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(scrollOptions.container, interaction.interactable, element)\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\nconst autoScrollPlugin: Plugin = {\n id: 'auto-scroll',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.autoScroll = null\n },\n\n 'interactions:destroy': ({ interaction }) => {\n interaction.autoScroll = null\n autoScroll.stop()\n if (autoScroll.interaction) {\n autoScroll.interaction = null\n }\n },\n\n 'interactions:stop': autoScroll.stop,\n\n 'interactions:action-move': (arg: any) => autoScroll.onInteractionMove(arg),\n },\n}\n\nexport default autoScrollPlugin\n","import type { ActionName, ActionProps } from '@interactjs/core/types'\n\nimport { window } from './window'\n\nexport function warnOnce<T> (this: T, method: (...args: any[]) => any, message: string) {\n let warned = false\n\n return function (this: T) {\n if (!warned) {\n ;(window as any).console.warn(message)\n warned = true\n }\n\n return method.apply(this, arguments)\n }\n}\n\nexport function copyAction<T extends ActionName> (dest: ActionProps<any>, src: ActionProps<T>) {\n dest.name = src.name\n dest.axis = src.axis\n dest.edges = src.edges\n\n return dest\n}\n\nexport const sign = (n: number) => (n >= 0 ? 1 : -1)\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { ActionProps, PointerType, PointerEventType, Element } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\nimport { warnOnce } from '@interactjs/utils/misc'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n getAction: (\n this: Interactable,\n pointer: PointerType,\n event: PointerEventType,\n interaction: Interaction,\n element: Element,\n ) => ActionProps | null\n styleCursor: typeof styleCursor\n actionChecker: typeof actionChecker\n ignoreFrom: {\n (...args: any[]): Interactable\n (): boolean\n }\n allowFrom: {\n (...args: any[]): Interactable\n (): boolean\n }\n }\n}\n\nfunction install (scope: Scope) {\n const {\n /** @lends Interactable */\n Interactable, // tslint:disable-line no-shadowed-variable\n } = scope\n\n Interactable.prototype.getAction = function getAction (\n this: Interactable,\n pointer: PointerType,\n event: PointerEventType,\n interaction: Interaction,\n element: Element,\n ): ActionProps {\n const action = defaultActionChecker(this, event, interaction, element, scope)\n\n if (this.options.actionChecker) {\n return this.options.actionChecker(pointer, event, action, this, element, interaction)\n }\n\n return action\n }\n\n /**\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 * @deprecated\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * ```js\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * })\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 *\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 * @deprecated\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * ```js\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * })\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\nfunction defaultActionChecker (\n interactable: Interactable,\n event: PointerEventType,\n interaction: Interaction,\n element: Element,\n scope: Scope,\n) {\n const rect = interactable.getRect(element)\n const buttons =\n (event as MouseEvent).buttons ||\n {\n 0: 1,\n 1: 4,\n 3: 8,\n 4: 16,\n }[(event as MouseEvent).button as 0 | 1 | 3 | 4]\n const arg = {\n action: null,\n interactable,\n interaction,\n element,\n rect,\n buttons,\n }\n\n scope.fire('auto-start:check', arg)\n\n return arg.action\n}\n\nfunction styleCursor(this: Interactable): boolean\nfunction styleCursor(this: Interactable, newValue: boolean): typeof this\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 type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type {\n CursorChecker,\n PointerType,\n PointerEventType,\n Element,\n ActionName,\n ActionProps,\n} from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport { copyAction } from '@interactjs/utils/misc'\n\nimport InteractableMethods from './InteractableMethods'\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n maxInteractions: (newValue: any) => any\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoStart: AutoStart\n }\n\n interface SignalArgs {\n 'autoStart:before-start': Omit<SignalArgs['interactions:move'], 'interaction'> & {\n interaction: Interaction<ActionName>\n }\n 'autoStart:prepared': { interaction: Interaction }\n 'auto-start:check': CheckSignalArg\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface BaseDefaults {\n actionChecker?: any\n cursorChecker?: any\n styleCursor?: any\n }\n\n interface PerActionDefaults {\n manualStart?: boolean\n max?: number\n maxPerElement?: number\n allowFrom?: string | Element\n ignoreFrom?: string | Element\n cursorChecker?: CursorChecker\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n // TODO: docst\n mouseButtons?: 0 | 1 | 2 | 4 | 8 | 16\n }\n}\n\ninterface CheckSignalArg {\n interactable: Interactable\n interaction: Interaction\n element: Element\n action: ActionProps<ActionName>\n buttons: number\n}\n\nexport interface AutoStart {\n // Allow this many interactions to happen simultaneously\n maxInteractions: number\n withinInteractionLimit: typeof withinInteractionLimit\n cursorElement: Element\n}\n\nfunction install (scope: Scope) {\n const { interactStatic: interact, defaults } = scope\n\n scope.usePlugin(InteractableMethods)\n\n defaults.base.actionChecker = null\n defaults.base.styleCursor = true\n\n 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: number) => maxInteractions(newValue, scope)\n\n scope.autoStart = {\n // Allow this many interactions to happen simultaneously\n maxInteractions: Infinity,\n withinInteractionLimit,\n cursorElement: null,\n }\n}\n\nfunction prepareOnDown (\n { interaction, pointer, event, eventTarget }: SignalArgs['interactions:down'],\n scope: Scope,\n) {\n if (interaction.interacting()) return\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n}\n\nfunction prepareOnMove (\n { interaction, pointer, event, eventTarget }: SignalArgs['interactions:move'],\n scope: Scope,\n) {\n if (interaction.pointerType !== 'mouse' || interaction.pointerIsDown || interaction.interacting()) return\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget as Element, scope)\n prepare(interaction, actionInfo, scope)\n}\n\nfunction startOnMove (arg: SignalArgs['interactions:move'], scope: Scope) {\n const { interaction } = arg\n\n if (\n !interaction.pointerIsDown ||\n interaction.interacting() ||\n !interaction.pointerWasMoved ||\n !interaction.prepared.name\n ) {\n return\n }\n\n scope.fire('autoStart:before-start', arg)\n\n const { interactable } = interaction\n const actionName = (interaction as Interaction<ActionName>).prepared.name\n\n if (actionName && interactable) {\n // check manualStart and interaction limit\n if (\n interactable.options[actionName].manualStart ||\n !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)\n ) {\n interaction.stop()\n } else {\n interaction.start(interaction.prepared, interactable, interaction.element)\n setInteractionCursor(interaction, scope)\n }\n }\n}\n\nfunction clearCursorOnStop ({ interaction }: { interaction: Interaction }, scope: Scope) {\n const { interactable } = interaction\n\n if (interactable && interactable.options.styleCursor) {\n setCursor(interaction.element, '', scope)\n }\n}\n\n// Check if the current interactable supports the action.\n// If so, return the validated action. Otherwise, return null\nfunction validateAction<T extends ActionName> (\n action: ActionProps<T>,\n interactable: Interactable,\n element: Element,\n eventTarget: Node,\n scope: Scope,\n) {\n if (\n interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) &&\n interactable.options[action.name].enabled &&\n withinInteractionLimit(interactable, element, action, scope)\n ) {\n return action\n }\n\n return null\n}\n\nfunction validateMatches (\n interaction: Interaction,\n pointer: PointerType,\n event: PointerEventType,\n matches: Interactable[],\n matchElements: Element[],\n eventTarget: Node,\n scope: 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) {\n continue\n }\n\n const action = validateAction<ActionName>(matchAction, match, matchElement, eventTarget, 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: Interaction,\n pointer: PointerType,\n event: PointerEventType,\n eventTarget: Node,\n scope: Scope,\n) {\n let matches: Interactable[] = []\n let matchElements: Element[] = []\n\n let element = eventTarget as Element\n\n function pushMatches (interactable: Interactable) {\n matches.push(interactable)\n matchElements.push(element)\n }\n\n while (is.element(element)) {\n matches = []\n matchElements = []\n\n scope.interactables.forEachMatch(element, pushMatches)\n\n const actionInfo = validateMatches(\n interaction,\n pointer,\n event,\n matches,\n matchElements,\n eventTarget,\n scope,\n )\n\n if (actionInfo.action && !actionInfo.interactable.options[actionInfo.action.name].manualStart) {\n return actionInfo\n }\n\n element = domUtils.parentNode(element) as Element\n }\n\n return { action: null, interactable: null, element: null }\n}\n\nfunction prepare (\n interaction: Interaction,\n {\n action,\n interactable,\n element,\n }: {\n action: ActionProps<any>\n interactable: Interactable\n element: Element\n },\n scope: Scope,\n) {\n action = action || { name: null }\n\n interaction.interactable = interactable\n interaction.element = element\n copyAction(interaction.prepared, action)\n\n interaction.rect = interactable && action.name ? interactable.getRect(element) : null\n\n setInteractionCursor(interaction, scope)\n\n scope.fire('autoStart:prepared', { interaction })\n}\n\nfunction withinInteractionLimit<T extends ActionName> (\n interactable: Interactable,\n element: Element,\n action: ActionProps<T>,\n scope: Scope,\n) {\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)) {\n return false\n }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name\n\n if (!interaction.interacting()) {\n continue\n }\n\n activeInteractions++\n\n if (activeInteractions >= autoStartMax) {\n return false\n }\n\n if (interaction.interactable !== interactable) {\n continue\n }\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: any, scope: Scope) {\n if (is.number(newValue)) {\n scope.autoStart.maxInteractions = newValue\n\n return this\n }\n\n return scope.autoStart.maxInteractions\n}\n\nfunction setCursor (element: Element, cursor: string, scope: Scope) {\n const { cursorElement: prevCursorElement } = scope.autoStart\n\n if (prevCursorElement && prevCursorElement !== element) {\n prevCursorElement.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<T extends ActionName> (interaction: Interaction<T>, scope: Scope) {\n const { interactable, element, prepared } = interaction\n\n if (!(interaction.pointerType === 'mouse' && interactable && interactable.options.styleCursor)) {\n // clear previous target element cursor\n if (scope.autoStart.cursorElement) {\n setCursor(scope.autoStart.cursorElement, '', scope)\n }\n\n return\n }\n\n let cursor = ''\n\n if (prepared.name) {\n const cursorChecker = interactable.options[prepared.name].cursorChecker\n\n if (is.func(cursorChecker)) {\n cursor = cursorChecker(prepared, interactable, element, interaction._interacting)\n } else {\n cursor = scope.actions.map[prepared.name].getCursor(prepared)\n }\n }\n\n setCursor(interaction.element, cursor || '', scope)\n}\n\nconst autoStart: Plugin = {\n id: 'auto-start/base',\n before: ['actions'],\n install,\n listeners: {\n 'interactions:down': prepareOnDown,\n 'interactions:move': (arg, scope) => {\n prepareOnMove(arg, scope)\n startOnMove(arg, scope)\n },\n 'interactions:stop': clearCursorOnStop,\n },\n maxInteractions,\n withinInteractionLimit,\n validateAction,\n}\n\nexport default autoStart\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { SignalArgs, Scope } from '@interactjs/core/scope'\nimport type { ActionName, Element } from '@interactjs/core/types'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\n\nimport autoStart from './base'\n\nfunction beforeStart ({ interaction, eventTarget, dx, dy }: SignalArgs['interactions:move'], scope: Scope) {\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 =\n 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 as Interaction<ActionName>).prepared.name = null\n\n // then try to get a drag from another ineractable\n let element = eventTarget as Element\n\n const getDraggable = function (interactable: Interactable): Interactable | void {\n if (interactable === interaction.interactable) return\n\n const options = interaction.interactable.options.drag\n\n if (!options.manualStart && interactable.testIgnoreAllow(options, element, eventTarget)) {\n const action = interactable.getAction(\n interaction.downPointer,\n interaction.downEvent,\n interaction,\n element,\n )\n\n if (\n action &&\n action.name === 'drag' &&\n checkStartAxis(currentAxis, interactable) &&\n autoStart.validateAction(action, interactable, element, eventTarget, scope)\n ) {\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 as Interaction<ActionName>).prepared.name = 'drag'\n interaction.interactable = interactable\n interaction.element = element\n break\n }\n\n element = parentNode(element) as Element\n }\n }\n}\n\nfunction checkStartAxis (startAxis: string, interactable: Interactable) {\n if (!interactable) {\n return false\n }\n\n const thisAxis = interactable.options.drag.startAxis\n\n return startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis\n}\n\nexport default {\n id: 'auto-start/dragAxis',\n listeners: { 'autoStart:before-start': beforeStart },\n}\n","import type Interaction from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\n\nimport basePlugin from './base'\n\ndeclare module '@interactjs/core/options' {\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: Scope) {\n const { defaults } = scope\n\n scope.usePlugin(basePlugin)\n\n defaults.perAction.hold = 0\n defaults.perAction.delay = 0\n}\n\nfunction getHoldDuration (interaction: Interaction) {\n const actionName = interaction.prepared && interaction.prepared.name\n\n if (!actionName) {\n return null\n }\n\n const options = interaction.interactable.options\n\n return options[actionName].hold || options[actionName].delay\n}\n\nconst hold: Plugin = {\n id: 'auto-start/hold',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.autoStartHoldTimer = null\n },\n\n 'autoStart: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:move': ({ interaction, duplicate }) => {\n if (interaction.autoStartHoldTimer && interaction.pointerWasMoved && !duplicate) {\n clearTimeout(interaction.autoStartHoldTimer)\n interaction.autoStartHoldTimer = null\n }\n },\n\n // prevent regular down->move autoStart\n 'autoStart:before-start': ({ interaction }) => {\n const holdDuration = getHoldDuration(interaction)\n\n if (holdDuration > 0) {\n interaction.prepared.name = null\n }\n },\n },\n getHoldDuration,\n}\nexport default hold\n","import type { Scope } from '@interactjs/core/scope'\n\nimport autoStart from './base'\nimport dragAxis from './dragAxis'\nimport hold from './hold'\n\nexport default {\n id: 'auto-start',\n install (scope: Scope) {\n scope.usePlugin(autoStart)\n scope.usePlugin(hold)\n scope.usePlugin(dragAxis)\n },\n}\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { PointerEventType } from '@interactjs/core/types'\nimport { matchesSelector, nodeContains } from '@interactjs/utils/domUtils'\nimport 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\ntype PreventDefaultValue = 'always' | 'never' | 'auto'\nfunction preventDefault(this: Interactable): PreventDefaultValue\nfunction preventDefault(this: Interactable, newValue: PreventDefaultValue): typeof this\nfunction preventDefault (this: Interactable, newValue?: PreventDefaultValue) {\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: Interactable, scope: 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 (scope.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 (\n is.element(event.target) &&\n matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')\n ) {\n return\n }\n\n event.preventDefault()\n}\n\nfunction onInteractionEvent ({ interaction, event }: { interaction: Interaction, event: PointerEventType }) {\n if (interaction.interactable) {\n interaction.interactable.checkAndPreventDefault(event as Event)\n }\n}\n\nexport function install (scope: Scope) {\n /** @lends Interactable */\n const { Interactable } = scope\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 // 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 (\n interaction.element &&\n (interaction.element === event.target || nodeContains(interaction.element, event.target))\n ) {\n interaction.interactable.checkAndPreventDefault(event)\n return\n }\n }\n },\n })\n}\n\nexport default {\n id: 'core/interactablePreventDefault',\n install,\n listeners: ['down', 'move', 'up', 'cancel'].reduce((acc, eventType) => {\n acc[`interactions:${eventType}`] = onInteractionEvent\n return acc\n }, {} as any),\n}\n","export default {}\n","// eslint-disable-next-line import/no-extraneous-dependencies, import/no-duplicates\nimport '@interactjs/dev-tools/visualizer/plugin'\n\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Element, OptionMethod } from '@interactjs/core/types'\n// eslint-disable-next-line import/no-extraneous-dependencies, import/no-duplicates\nimport visualizer from '@interactjs/dev-tools/visualizer/plugin'\nimport domObjects from '@interactjs/utils/domObjects'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport * as win from '@interactjs/utils/window'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n logger: Logger\n }\n}\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n visializer: typeof visualizer\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface BaseDefaults {\n devTools?: DevToolsOptions\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n devTools: OptionMethod<DevToolsOptions>\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: CheckName\n text: string\n perform: (interaction: Interaction) => boolean\n getInfo: (interaction: Interaction) => any[]\n}\n\nenum CheckName {\n touchAction = 'touchAction',\n boxSizing = 'boxSizing',\n noListeners = '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\n// eslint-disable-next-line no-undef\nconst isProduction = process.env.NODE_ENV === 'production'\n\nfunction install (scope: Scope, { logger }: { logger?: Logger } = {}) {\n const { Interactable, defaults } = scope\n\n scope.logger = logger || console\n\n defaults.base.devTools = {\n ignore: {},\n }\n\n Interactable.prototype.devTools = function (options?: object) {\n if (options) {\n extend(this.options.devTools, options)\n return this\n }\n\n return this.options.devTools\n }\n\n scope.usePlugin(visualizer)\n}\n\nconst checks: Check[] = [\n {\n name: CheckName.touchAction,\n perform ({ element }) {\n return !parentHasStyle(element, 'touchAction', /pan-|pinch|none/)\n },\n getInfo ({ element }) {\n return [element, links.touchAction]\n },\n text: 'Consider adding CSS \"touch-action: none\" to this element\\n',\n },\n\n {\n name: CheckName.boxSizing,\n perform (interaction) {\n const { element } = interaction\n\n return (\n interaction.prepared.name === 'resize' &&\n element instanceof domObjects.HTMLElement &&\n !hasStyle(element, 'boxSizing', /border-box/)\n )\n },\n text: 'Consider adding CSS \"box-sizing: border-box\" to this resizable element',\n getInfo ({ element }) {\n return [element, links.boxSizing]\n },\n },\n\n {\n name: CheckName.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 [interaction.prepared.name, interaction.interactable]\n },\n text: 'There are no listeners set for this action',\n },\n]\n\nfunction hasStyle (element: HTMLElement, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n const value = element.style[prop] || win.window.getComputedStyle(element)[prop]\n return styleRe.test((value || '').toString())\n}\n\nfunction parentHasStyle (element: 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) as HTMLElement\n }\n\n return false\n}\n\nconst id = 'dev-tools'\nconst defaultExport: Plugin = isProduction\n ? { id, install: () => {} }\n : {\n id,\n install,\n listeners: {\n 'interactions:action-start': ({ interaction }, scope) => {\n for (const check of checks) {\n const options = interaction.interactable && interaction.interactable.options\n\n if (\n !(options && options.devTools && options.devTools.ignore[check.name]) &&\n check.perform(interaction)\n ) {\n scope.logger.warn(prefix + check.text, ...check.getInfo(interaction))\n }\n }\n },\n },\n checks,\n CheckName,\n links,\n prefix,\n }\n\nexport default defaultExport\n","import * as arr from './arr'\nimport is from './is'\n\n// tslint:disable-next-line ban-types\nexport default function clone<T extends Object> (source: T): Partial<T> {\n const dest = {} as Partial<T>\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 } else if (is.array(value)) {\n dest[prop] = arr.from(value) as typeof value\n } else {\n dest[prop] = value\n }\n }\n\n return dest\n}\n","import type { EventPhase } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoAnyPhaseArg } from '@interactjs/core/Interaction'\nimport type { EdgeOptions, FullRect, Point, Rect } from '@interactjs/core/types'\nimport clone from '@interactjs/utils/clone'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport type { Modifier, ModifierArg, ModifierState } from './types'\n\nexport interface ModificationResult {\n delta: Point\n rectDelta: Rect\n coords: Point\n rect: FullRect\n eventProps: any[]\n changed: boolean\n}\n\ninterface MethodArg {\n phase: EventPhase\n pageCoords: Point\n rect: FullRect\n coords: Point\n preEnd?: boolean\n skipModifiers?: number\n}\n\nexport default class Modification {\n states: ModifierState[] = []\n startOffset: Rect = { left: 0, right: 0, top: 0, bottom: 0 }\n startDelta!: Point\n result!: ModificationResult\n endResult!: Point\n startEdges!: EdgeOptions\n edges: EdgeOptions\n readonly interaction: Readonly<Interaction>\n\n constructor (interaction: Interaction) {\n this.interaction = interaction\n this.result = createResult()\n this.edges = {\n left: false,\n right: false,\n top: false,\n bottom: false,\n }\n }\n\n start ({ phase }: { phase: EventPhase }, pageCoords: Point) {\n const { interaction } = this\n const modifierList = getModifierList(interaction)\n this.prepareStates(modifierList)\n\n this.startEdges = extend({}, interaction.edges)\n this.edges = extend({}, this.startEdges)\n this.startOffset = getRectOffset(interaction.rect, pageCoords)\n this.startDelta = { x: 0, y: 0 }\n\n const arg = this.fillArg({\n phase,\n pageCoords,\n preEnd: false,\n })\n\n this.result = createResult()\n this.startAll(arg)\n\n const result = (this.result = this.setAll(arg))\n\n return result\n }\n\n fillArg (arg: Partial<ModifierArg>) {\n const { interaction } = this\n\n arg.interaction = interaction\n arg.interactable = interaction.interactable\n arg.element = interaction.element\n arg.rect ||= interaction.rect\n arg.edges ||= this.startEdges\n arg.startOffset = this.startOffset\n\n return arg as ModifierArg\n }\n\n startAll (arg: MethodArg & Partial<ModifierArg>) {\n for (const state of this.states) {\n if (state.methods.start) {\n arg.state = state\n state.methods.start(arg as ModifierArg)\n }\n }\n }\n\n setAll (arg: MethodArg & Partial<ModifierArg>): ModificationResult {\n const { phase, preEnd, skipModifiers, rect: unmodifiedRect, edges: unmodifiedEdges } = arg\n\n arg.coords = extend({}, arg.pageCoords)\n arg.rect = extend({}, unmodifiedRect)\n arg.edges = extend({}, unmodifiedEdges)\n\n const states = skipModifiers ? this.states.slice(skipModifiers) : this.states\n\n const newResult = createResult(arg.coords, arg.rect)\n\n for (const state of states) {\n const { options } = state\n const lastModifierCoords = extend({}, arg.coords)\n let returnValue = null\n\n if (state.methods?.set && this.shouldDo(options, preEnd, phase)) {\n arg.state = state\n returnValue = state.methods.set(arg as ModifierArg<never>)\n\n rectUtils.addEdges(arg.edges, arg.rect, {\n x: arg.coords.x - lastModifierCoords.x,\n y: arg.coords.y - lastModifierCoords.y,\n })\n }\n\n newResult.eventProps.push(returnValue)\n }\n\n extend(this.edges, arg.edges)\n\n newResult.delta.x = arg.coords.x - arg.pageCoords.x\n newResult.delta.y = arg.coords.y - arg.pageCoords.y\n\n newResult.rectDelta.left = arg.rect.left - unmodifiedRect.left\n newResult.rectDelta.right = arg.rect.right - unmodifiedRect.right\n newResult.rectDelta.top = arg.rect.top - unmodifiedRect.top\n newResult.rectDelta.bottom = arg.rect.bottom - unmodifiedRect.bottom\n\n const prevCoords = this.result.coords\n const prevRect = this.result.rect\n\n if (prevCoords && prevRect) {\n const rectChanged =\n newResult.rect.left !== prevRect.left ||\n newResult.rect.right !== prevRect.right ||\n newResult.rect.top !== prevRect.top ||\n newResult.rect.bottom !== prevRect.bottom\n\n newResult.changed =\n rectChanged || prevCoords.x !== newResult.coords.x || prevCoords.y !== newResult.coords.y\n }\n\n return newResult\n }\n\n applyToInteraction (arg: { phase: EventPhase, rect?: Rect }) {\n const { interaction } = this\n const { phase } = arg\n const curCoords = interaction.coords.cur\n const startCoords = interaction.coords.start\n const { result, startDelta } = this\n const curDelta = result.delta\n\n if (phase === 'start') {\n extend(this.startDelta, result.delta)\n }\n\n for (const [coordsSet, delta] of [\n [startCoords, startDelta],\n [curCoords, curDelta],\n ] as const) {\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 } = this.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\n setAndApply (\n arg: Partial<DoAnyPhaseArg> & {\n phase: EventPhase\n preEnd?: boolean\n skipModifiers?: number\n modifiedCoords?: Point\n },\n ): void | false {\n const { interaction } = this\n const { phase, preEnd, skipModifiers } = arg\n\n const result = this.setAll(\n this.fillArg({\n preEnd,\n phase,\n pageCoords: arg.modifiedCoords || interaction.coords.cur.page,\n }),\n )\n\n this.result = result\n\n // don't fire an action move if a modifier would keep the event in the same\n // cordinates as before\n if (\n !result.changed &&\n (!skipModifiers || skipModifiers < this.states.length) &&\n interaction.interacting()\n ) {\n return false\n }\n\n if (arg.modifiedCoords) {\n const { page } = interaction.coords.cur\n const adjustment = {\n x: arg.modifiedCoords.x - page.x,\n y: arg.modifiedCoords.y - page.y,\n }\n\n result.coords.x += adjustment.x\n result.coords.y += adjustment.y\n result.delta.x += adjustment.x\n result.delta.y += adjustment.y\n }\n\n this.applyToInteraction(arg)\n }\n\n beforeEnd (arg: Omit<DoAnyPhaseArg, 'iEvent'> & { state?: ModifierState }): void | false {\n const { interaction, event } = arg\n const states = this.states\n\n if (!states || !states.length) {\n return\n }\n\n let doPreend = false\n\n for (const state of states) {\n arg.state = state\n const { options, methods } = state\n\n const endPosition = methods.beforeEnd && methods.beforeEnd(arg as unknown as ModifierArg)\n\n if (endPosition) {\n this.endResult = endPosition\n return false\n }\n\n doPreend = doPreend || (!doPreend && this.shouldDo(options, true, arg.phase, true))\n }\n\n if (doPreend) {\n // trigger a final modified move before ending\n interaction.move({ event, preEnd: true })\n }\n }\n\n stop (arg: { interaction: Interaction }) {\n const { interaction } = arg\n\n if (!this.states || !this.states.length) {\n return\n }\n\n const modifierArg: Partial<ModifierArg> = extend(\n {\n states: this.states,\n interactable: interaction.interactable,\n element: interaction.element,\n rect: null,\n },\n arg,\n )\n\n this.fillArg(modifierArg)\n\n for (const state of this.states) {\n modifierArg.state = state\n\n if (state.methods.stop) {\n state.methods.stop(modifierArg as ModifierArg)\n }\n }\n\n this.states = null\n this.endResult = null\n }\n\n prepareStates (modifierList: Modifier[]) {\n this.states = []\n\n for (let index = 0; index < modifierList.length; index++) {\n const { options, methods, name } = modifierList[index]\n\n this.states.push({\n options,\n methods,\n index,\n name,\n })\n }\n\n return this.states\n }\n\n restoreInteractionCoords ({ interaction: { coords, rect, modification } }: { interaction: Interaction }) {\n if (!modification.result) return\n\n const { startDelta } = modification\n const { delta: curDelta, rectDelta } = modification.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\n shouldDo (options, preEnd?: boolean, phase?: string, requireEndOnly?: boolean) {\n if (\n // ignore disabled modifiers\n !options ||\n options.enabled === false ||\n // check if we require endOnly option to fire move before end\n (requireEndOnly && !options.endOnly) ||\n // don't apply endOnly modifiers when not ending\n (options.endOnly && !preEnd) ||\n // check if modifier should run be applied on start\n (phase === 'start' && !options.setStart)\n ) {\n return false\n }\n\n return true\n }\n\n copyFrom (other: Modification) {\n this.startOffset = other.startOffset\n this.startDelta = other.startDelta\n this.startEdges = other.startEdges\n this.edges = other.edges\n this.states = other.states.map((s) => clone(s) as ModifierState)\n this.result = createResult(extend({}, other.result.coords), extend({}, other.result.rect))\n }\n\n destroy () {\n for (const prop in this) {\n this[prop] = null\n }\n }\n}\n\nfunction createResult (coords?: Point, rect?: FullRect): ModificationResult {\n return {\n rect,\n coords,\n delta: { x: 0, y: 0 },\n rectDelta: {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n },\n eventProps: [],\n changed: true,\n }\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\n }\n\n return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize']\n .map((type) => {\n const options = actionOptions[type]\n\n return (\n options &&\n options.enabled && {\n options,\n methods: options._methods,\n }\n )\n })\n .filter((m) => !!m)\n}\n\nexport function 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","import type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Plugin } from '@interactjs/core/scope'\n\nimport Modification from './Modification'\nimport type { Modifier, ModifierModule, ModifierState } from './types'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n modification?: Modification\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface InteractEvent {\n modifiers?: Array<{\n name: string\n [key: string]: any\n }>\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n modifiers?: Modifier[]\n }\n}\n\nexport function makeModifier<\n Defaults extends { enabled?: boolean },\n State extends ModifierState,\n Name extends string,\n Result,\n> (module: ModifierModule<Defaults, State, Result>, name?: Name) {\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<Defaults>) => {\n const options = (_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 as any)[prop] = defaults[prop]\n }\n }\n\n const m: Modifier<Defaults, State, Name, Result> = {\n options,\n methods,\n name,\n enable: () => {\n options.enabled = true\n return m\n },\n disable: () => {\n options.enabled = false\n return m\n },\n }\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 function addEventModifiers ({\n iEvent,\n interaction,\n}: {\n iEvent: InteractEvent<any>\n interaction: Interaction<any>\n}) {\n const result = interaction.modification!.result\n\n if (result) {\n iEvent.modifiers = result.eventProps\n }\n}\n\nconst modifiersBase: Plugin = {\n id: 'modifiers/base',\n before: ['actions'],\n install: (scope) => {\n scope.defaults.perAction.modifiers = []\n },\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.modification = new Modification(interaction)\n },\n\n 'interactions:before-action-start': (arg) => {\n const { interaction } = arg\n const modification = arg.interaction.modification!\n\n modification.start(arg, interaction.coords.start.page)\n interaction.edges = modification.edges\n modification.applyToInteraction(arg)\n },\n\n 'interactions:before-action-move': (arg) => {\n const { interaction } = arg\n const { modification } = interaction\n const ret = modification.setAndApply(arg)\n interaction.edges = modification.edges\n\n return ret\n },\n\n 'interactions:before-action-end': (arg) => {\n const { interaction } = arg\n const { modification } = interaction\n const ret = modification.beforeEnd(arg)\n interaction.edges = modification.startEdges\n\n return ret\n },\n\n 'interactions:action-start': addEventModifiers,\n 'interactions:action-move': addEventModifiers,\n 'interactions:action-end': addEventModifiers,\n\n 'interactions:after-action-start': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n 'interactions:after-action-move': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n\n 'interactions:stop': (arg) => arg.interaction.modification.stop(arg),\n },\n}\n\nexport default modifiersBase\n","import type { Point, Listeners, OrBoolean, Element } from '@interactjs/core/types'\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\nexport interface BaseDefaults {\n preventDefault?: 'auto' | 'never' | string\n deltaSource?: 'page' | 'client'\n context?: Node\n}\n\nexport interface PerActionDefaults {\n enabled?: boolean\n origin?: Point | string | Element\n listeners?: Listeners\n allowFrom?: string | Element\n ignoreFrom?: string | Element\n}\n\nexport type Options = Partial<BaseDefaults> &\nPartial<PerActionDefaults> & {\n [P in keyof ActionDefaults]?: Partial<ActionDefaults[P]>\n}\n\nexport interface OptionsArg extends BaseDefaults, OrBoolean<Partial<ActionDefaults>> {}\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","import type { Point, FullRect, PointerEventType, Element } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport hypot from '@interactjs/utils/hypot'\n\nimport { BaseEvent } from './BaseEvent'\nimport type { Interaction } from './Interaction'\nimport { defaults } from './options'\nimport type { ActionName } from './types'\n\nexport type EventPhase = keyof PhaseMap\n\nexport interface PhaseMap {\n start: true\n move: true\n end: true\n}\n\n// defined outside of class definition to avoid assignment of undefined during\n// construction\nexport interface InteractEvent {\n pageX: number\n pageY: number\n\n clientX: number\n clientY: number\n\n dx: number\n dy: number\n\n velocityX: number\n velocityY: number\n}\n\nexport class InteractEvent<\n T extends ActionName = never,\n P extends EventPhase = EventPhase,\n> extends BaseEvent<T> {\n declare target: Element\n declare currentTarget: Element\n relatedTarget: Element | null = null\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: Point\n client: Point\n delta: Point\n rect: FullRect\n x0: number\n y0: number\n t0: number\n dt: number\n duration: number\n clientX0: number\n clientY0: number\n velocity: Point\n speed: number\n swipe: ReturnType<InteractEvent<T>['getSwipe']>\n // resize\n axes?: 'x' | 'y' | 'xy'\n preEnd?: boolean\n\n /** */\n constructor (\n interaction: Interaction<T>,\n event: PointerEventType,\n actionName: T,\n phase: P,\n element: 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.preEnd = preEnd\n this.type = type || actionName + (phase || '')\n this.interactable = target\n\n this.t0 = starting ? interaction.pointers[interaction.pointers.length - 1].downTime : 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 } 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 getSwipe () {\n const interaction = this._interaction\n\n if (interaction.prevEvent.speed < 600 || 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\n// getters and setters defined here to support typescript 3.6 and below which\n// don't support getter and setters in .d.ts files\nObject.defineProperties(InteractEvent.prototype, {\n pageX: {\n get () {\n return this.page.x\n },\n set (value) {\n this.page.x = value\n },\n },\n pageY: {\n get () {\n return this.page.y\n },\n set (value) {\n this.page.y = value\n },\n },\n\n clientX: {\n get () {\n return this.client.x\n },\n set (value) {\n this.client.x = value\n },\n },\n clientY: {\n get () {\n return this.client.y\n },\n set (value) {\n this.client.y = value\n },\n },\n\n dx: {\n get () {\n return this.delta.x\n },\n set (value) {\n this.delta.x = value\n },\n },\n dy: {\n get () {\n return this.delta.y\n },\n set (value) {\n this.delta.y = value\n },\n },\n\n velocityX: {\n get () {\n return this.velocity.x\n },\n set (value) {\n this.velocity.x = value\n },\n },\n velocityY: {\n get () {\n return this.velocity.y\n },\n set (value) {\n this.velocity.y = value\n },\n },\n})\n","import type { PointerEventType, PointerType } from '@interactjs/core/types'\n\nexport class PointerInfo {\n id: number\n pointer: PointerType\n event: PointerEventType\n downTime: number\n downTarget: Node\n\n constructor (id: number, pointer: PointerType, event: PointerEventType, downTime: number, downTarget: Node) {\n this.id = id\n this.pointer = pointer\n this.event = event\n this.downTime = downTime\n this.downTarget = downTarget\n }\n}\n","import type {\n Element,\n EdgeOptions,\n PointerEventType,\n PointerType,\n FullRect,\n CoordsSet,\n} from '@interactjs/core/types'\nimport * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport hypot from '@interactjs/utils/hypot'\nimport { warnOnce, copyAction } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport type { EventPhase } from './InteractEvent'\nimport { InteractEvent } from './InteractEvent'\nimport type { Interactable } from './Interactable'\nimport { PointerInfo } from './PointerInfo'\nimport type { ActionDefaults } from './options'\nimport type { Scope } from './scope'\nimport type { ActionName, ActionProps } from './types'\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 PointerArgProps<T extends {} = {}> = {\n pointer: PointerType\n event: PointerEventType\n eventTarget: Node\n pointerIndex: number\n pointerInfo: PointerInfo\n interaction: Interaction<never>\n} & T\n\nexport interface DoPhaseArg<T extends ActionName, P extends EventPhase> {\n event: PointerEventType\n phase: EventPhase\n interaction: Interaction<T>\n iEvent: InteractEvent<T, P>\n preEnd?: boolean\n type?: string\n}\n\nexport type DoAnyPhaseArg = DoPhaseArg<ActionName, EventPhase>\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:new': { interaction: Interaction<ActionName> }\n 'interactions:down': PointerArgProps<{\n type: 'down'\n }>\n 'interactions:move': PointerArgProps<{\n type: 'move'\n dx: number\n dy: number\n duplicate: boolean\n }>\n 'interactions:up': PointerArgProps<{\n type: 'up'\n curEventTarget: EventTarget\n }>\n 'interactions:cancel': SignalArgs['interactions:up'] & {\n type: 'cancel'\n curEventTarget: EventTarget\n }\n 'interactions:update-pointer': PointerArgProps<{\n down: boolean\n }>\n 'interactions:remove-pointer': PointerArgProps\n 'interactions:blur': { interaction: Interaction<never>, event: Event, type: 'blur' }\n 'interactions:before-action-start': Omit<DoAnyPhaseArg, 'iEvent'>\n 'interactions:action-start': DoAnyPhaseArg\n 'interactions:after-action-start': DoAnyPhaseArg\n 'interactions:before-action-move': Omit<DoAnyPhaseArg, 'iEvent'>\n 'interactions:action-move': DoAnyPhaseArg\n 'interactions:after-action-move': DoAnyPhaseArg\n 'interactions:before-action-end': Omit<DoAnyPhaseArg, 'iEvent'>\n 'interactions:action-end': DoAnyPhaseArg\n 'interactions:after-action-end': DoAnyPhaseArg\n 'interactions:stop': { interaction: Interaction }\n }\n}\n\nexport type InteractionProxy<T extends ActionName | null = never> = Pick<\nInteraction<T>,\nkeyof typeof _ProxyValues | keyof typeof _ProxyMethods\n>\n\nlet idCounter = 0\n\nexport class Interaction<T extends ActionName | null = ActionName> {\n // current interactable being interacted with\n interactable: Interactable | null = null\n\n // the target element of the interactable\n element: Element | null = null\n rect: FullRect | null = null\n _rects?: {\n start: FullRect\n corrected: FullRect\n previous: FullRect\n delta: FullRect\n }\n edges: EdgeOptions | null = null\n\n _scopeFire: Scope['fire']\n\n // action that's ready to be fired on next move event\n prepared: ActionProps<T> = {\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: PointerEventType | null = null\n\n downPointer: PointerType = {} as PointerType\n\n _latestPointer: {\n pointer: PointerType\n event: PointerEventType\n eventTarget: Node\n } = {\n pointer: null,\n event: null,\n eventTarget: null,\n }\n\n // previous action event\n prevEvent: InteractEvent<T, EventPhase> = null\n\n pointerIsDown = false\n pointerWasMoved = false\n _interacting = false\n _ending = false\n _stopped = true\n _proxy: InteractionProxy<T> | null = null\n\n simulation = null\n\n /** @internal */ get pointerMoveTolerance () {\n return 1\n }\n\n /**\n * @alias Interaction.prototype.move\n */\n doMove = warnOnce(function (this: Interaction, signalArg: any) {\n this.move(signalArg)\n }, 'The interaction.doMove() method has been renamed to interaction.move()')\n\n coords: CoordsSet = {\n // Starting InteractEvent pointer coordinates\n start: pointerUtils.newCoords(),\n // Previous native pointer move event coordinates\n prev: pointerUtils.newCoords(),\n // current native pointer move event coordinates\n cur: pointerUtils.newCoords(),\n // Change in coordinates and time of the pointer\n delta: pointerUtils.newCoords(),\n // pointer velocity\n velocity: pointerUtils.newCoords(),\n }\n\n readonly _id: number = idCounter++\n\n /** */\n constructor ({ pointerType, scopeFire }: { pointerType?: string, scopeFire: Scope['fire'] }) {\n this._scopeFire = scopeFire\n this.pointerType = pointerType\n\n const that = this\n\n this._proxy = {} as InteractionProxy<T>\n\n for (const key in _ProxyValues) {\n Object.defineProperty(this._proxy, key, {\n get () {\n return that[key]\n },\n })\n }\n\n for (const key in _ProxyMethods) {\n Object.defineProperty(this._proxy, key, {\n value: (...args: any[]) => that[key](...args),\n })\n }\n\n this._scopeFire('interactions:new', { interaction: this })\n }\n\n pointerDown (pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n const pointerIndex = this.updatePointer(pointer, event, eventTarget, true)\n const pointerInfo = this.pointers[pointerIndex]\n\n this._scopeFire('interactions:down', {\n pointer,\n event,\n eventTarget,\n pointerIndex,\n pointerInfo,\n type: 'down',\n interaction: this as unknown as Interaction<never>,\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.<action>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 {Boolean} Whether the interaction was successfully started\n */\n start<A extends ActionName> (action: ActionProps<A>, interactable: Interactable, element: Element): boolean {\n if (\n this.interacting() ||\n !this.pointerIsDown ||\n this.pointers.length < (action.name === 'gesture' ? 2 : 1) ||\n !interactable.options[action.name as keyof ActionDefaults].enabled\n ) {\n return false\n }\n\n 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 ? extend({}, this.prepared.edges)\n : { left: true, right: true, top: true, bottom: true }\n this._stopped = false\n this._interacting =\n this._doPhase({\n interaction: this,\n event: this.downEvent,\n phase: 'start',\n }) && !this._stopped\n\n return this._interacting\n }\n\n pointerMove (pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n if (!this.simulation && !(this.modification && this.modification.endResult)) {\n this.updatePointer(pointer, event, eventTarget, false)\n }\n\n const duplicateMove =\n 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: number\n let dy: number\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 = hypot(dx, dy) > this.pointerMoveTolerance\n }\n\n const pointerIndex = this.getPointerIndex(pointer)\n const signalArg = {\n pointer,\n pointerIndex,\n pointerInfo: this.pointers[pointerIndex],\n event,\n type: 'move' as const,\n eventTarget,\n dx,\n dy,\n duplicate: duplicateMove,\n interaction: this as unknown as Interaction<never>,\n }\n\n if (!duplicateMove) {\n // set pointer coordinate, time changes and velocity\n pointerUtils.setCoordVelocity(this.coords.velocity, this.coords.delta)\n }\n\n this._scopeFire('interactions:move', signalArg)\n\n if (!duplicateMove && !this.simulation) {\n // if interacting, fire an 'action-move' signal etc\n if (this.interacting()) {\n signalArg.type = null\n this.move(signalArg)\n }\n\n if (this.pointerWasMoved) {\n pointerUtils.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?: any) {\n if (!signalArg || !signalArg.event) {\n pointerUtils.setZeroCoords(this.coords.delta)\n }\n\n signalArg = extend(\n {\n pointer: this._latestPointer.pointer,\n event: this._latestPointer.event,\n eventTarget: this._latestPointer.eventTarget,\n interaction: this,\n },\n signalArg || {},\n )\n\n signalArg.phase = 'move'\n\n this._doPhase(signalArg)\n }\n\n // End interact move events and stop auto-scroll unless simulation is running\n pointerUp (pointer: PointerType, event: 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 const type = /cancel$/i.test(event.type) ? 'cancel' : 'up'\n\n this._scopeFire(`interactions:${type}` as 'interactions:up' | 'interactions:cancel', {\n pointer,\n pointerIndex,\n pointerInfo: this.pointers[pointerIndex],\n event,\n eventTarget,\n type: type as any,\n curEventTarget,\n interaction: this as unknown as Interaction<never>,\n })\n\n if (!this.simulation) {\n this.end(event)\n }\n\n this.removePointer(pointer, event)\n }\n\n documentBlur (event: Event) {\n this.end(event as any)\n this._scopeFire('interactions:blur', {\n event,\n type: 'blur',\n interaction: this as unknown as Interaction<never>,\n })\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?: PointerEventType) {\n this._ending = true\n event = event || this._latestPointer.event\n let endPhaseResult: boolean\n\n if (this.interacting()) {\n endPhaseResult = this._doPhase({\n event,\n interaction: this,\n phase: '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._scopeFire('interactions: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: any) {\n const pointerId = pointerUtils.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 : arr.findIndex(this.pointers, (curPointer) => curPointer.id === pointerId)\n }\n\n getPointerInfo (pointer: any) {\n return this.pointers[this.getPointerIndex(pointer)]\n }\n\n updatePointer (pointer: PointerType, event: PointerEventType, eventTarget: Node, down?: boolean) {\n const id = pointerUtils.getPointerId(pointer)\n let pointerIndex = this.getPointerIndex(pointer)\n let pointerInfo = this.pointers[pointerIndex]\n\n down = down === false ? false : down || /(down|start)$/i.test(event.type)\n\n if (!pointerInfo) {\n pointerInfo = new PointerInfo(id, pointer, event, null, null)\n\n pointerIndex = this.pointers.length\n this.pointers.push(pointerInfo)\n } else {\n pointerInfo.pointer = pointer\n }\n\n pointerUtils.setCoords(\n this.coords.cur,\n this.pointers.map((p) => p.pointer),\n this._now(),\n )\n pointerUtils.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur)\n\n if (down) {\n this.pointerIsDown = true\n\n pointerInfo.downTime = this.coords.cur.timeStamp\n pointerInfo.downTarget = eventTarget\n pointerUtils.pointerExtend(this.downPointer, pointer)\n\n if (!this.interacting()) {\n pointerUtils.copyCoords(this.coords.start, this.coords.cur)\n pointerUtils.copyCoords(this.coords.prev, this.coords.cur)\n\n this.downEvent = event\n this.pointerWasMoved = false\n }\n }\n\n this._updateLatestPointer(pointer, event, eventTarget)\n\n this._scopeFire('interactions:update-pointer', {\n pointer,\n event,\n eventTarget,\n down,\n pointerInfo,\n pointerIndex,\n interaction: this as unknown as Interaction<never>,\n })\n\n return pointerIndex\n }\n\n removePointer (pointer: PointerType, event: PointerEventType) {\n const pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) return\n\n const pointerInfo = this.pointers[pointerIndex]\n\n this._scopeFire('interactions:remove-pointer', {\n pointer,\n event,\n eventTarget: null,\n pointerIndex,\n pointerInfo,\n interaction: this as unknown as Interaction<never>,\n })\n\n this.pointers.splice(pointerIndex, 1)\n this.pointerIsDown = false\n }\n\n _updateLatestPointer (pointer: PointerType, event: PointerEventType, eventTarget: Node) {\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<P extends EventPhase> (\n event: PointerEventType,\n phase: P,\n preEnd?: boolean,\n type?: string,\n ) {\n return new InteractEvent<T, P>(this, event, this.prepared.name, phase, this.element, preEnd, type)\n }\n\n _fireEvent<P extends EventPhase> (iEvent: InteractEvent<T, P>) {\n this.interactable?.fire(iEvent)\n\n if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n this.prevEvent = iEvent\n }\n }\n\n _doPhase<P extends EventPhase> (\n signalArg: Omit<DoPhaseArg<T, P>, 'iEvent'> & { iEvent?: InteractEvent<T, P> },\n ) {\n const { event, phase, preEnd, type } = signalArg\n const { rect } = this\n\n if (rect && phase === 'move') {\n // update the rect changes due to pointer move\n rectUtils.addEdges(this.edges, rect, this.coords.delta[this.interactable.options.deltaSource])\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n const beforeResult = this._scopeFire(`interactions:before-action-${phase}` as any, signalArg)\n\n if (beforeResult === false) {\n return false\n }\n\n const iEvent = (signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type))\n\n this._scopeFire(`interactions:action-${phase}` as any, signalArg)\n\n if (phase === 'start') {\n this.prevEvent = iEvent\n }\n\n this._fireEvent(iEvent)\n\n this._scopeFire(`interactions:after-action-${phase}` as any, signalArg)\n\n return true\n }\n\n _now () {\n return Date.now()\n }\n}\n\nexport default Interaction\nexport { PointerInfo }\n","import type Interaction from '@interactjs/core/Interaction'\nimport { _ProxyMethods } from '@interactjs/core/Interaction'\nimport type { Plugin } from '@interactjs/core/scope'\nimport type { Point } from '@interactjs/core/types'\nimport * as rectUtils from '@interactjs/utils/rect'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n offsetBy?: typeof offsetBy\n offset: {\n total: Point\n pending: Point\n }\n }\n\n enum _ProxyMethods {\n offsetBy = '',\n }\n}\n\n;(_ProxyMethods as any).offsetBy = ''\n\nexport function addTotal (interaction: Interaction) {\n if (!interaction.pointerIsDown) {\n return\n }\n\n addToCoords(interaction.coords.cur, interaction.offset.total)\n\n interaction.offset.pending.x = 0\n interaction.offset.pending.y = 0\n}\n\nfunction beforeAction ({ interaction }: { interaction: Interaction }) {\n applyPending(interaction)\n}\n\nfunction beforeEnd ({ interaction }: { interaction: Interaction }): boolean | void {\n const hadPending = applyPending(interaction)\n\n if (!hadPending) return\n\n interaction.move({ offset: true })\n interaction.end()\n\n return false\n}\n\nfunction end ({ interaction }: { interaction: Interaction }) {\n interaction.offset.total.x = 0\n interaction.offset.total.y = 0\n interaction.offset.pending.x = 0\n interaction.offset.pending.y = 0\n}\n\nexport function applyPending (interaction: Interaction) {\n if (!hasPending(interaction)) {\n return false\n }\n\n const { pending } = interaction.offset\n\n addToCoords(interaction.coords.cur, pending)\n addToCoords(interaction.coords.delta, pending)\n rectUtils.addEdges(interaction.edges, interaction.rect, pending)\n\n pending.x = 0\n pending.y = 0\n\n return true\n}\n\nfunction offsetBy (this: Interaction, { x, y }: Point) {\n this.offset.pending.x += x\n this.offset.pending.y += y\n\n this.offset.total.x += x\n this.offset.total.y += y\n}\n\nfunction addToCoords ({ page, client }, { x, y }: Point) {\n page.x += x\n page.y += y\n client.x += x\n client.y += y\n}\n\nfunction hasPending (interaction: Interaction) {\n return !!(interaction.offset.pending.x || interaction.offset.pending.y)\n}\n\nconst offset: Plugin = {\n id: 'offset',\n before: ['modifiers', 'pointer-events', 'actions', 'inertia'],\n install (scope) {\n scope.Interaction.prototype.offsetBy = offsetBy\n },\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.offset = {\n total: { x: 0, y: 0 },\n pending: { x: 0, y: 0 },\n }\n },\n 'interactions:update-pointer': ({ interaction }) => addTotal(interaction),\n 'interactions:before-action-start': beforeAction,\n 'interactions:before-action-move': beforeAction,\n 'interactions:before-action-end': beforeEnd,\n 'interactions:stop': end,\n },\n}\n\nexport default offset\n","import type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, Point, PointerEventType } from '@interactjs/core/types'\nimport Modification from '@interactjs/modifiers/Modification'\nimport * as modifiers from '@interactjs/modifiers/base'\nimport type { ModifierArg } from '@interactjs/modifiers/types'\nimport offset from '@interactjs/offset/plugin'\nimport * as dom from '@interactjs/utils/domUtils'\nimport hypot from '@interactjs/utils/hypot'\nimport is from '@interactjs/utils/is'\nimport { copyCoords } from '@interactjs/utils/pointerUtils'\nimport raf from '@interactjs/utils/raf'\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface PhaseMap {\n resume?: true\n inertiastart?: true\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n inertia?: InertiaState\n }\n}\n\ndeclare module '@interactjs/core/options' {\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 }\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:before-action-inertiastart': Omit<DoPhaseArg<ActionName, 'inertiastart'>, 'iEvent'>\n 'interactions:action-inertiastart': DoPhaseArg<ActionName, 'inertiastart'>\n 'interactions:after-action-inertiastart': DoPhaseArg<ActionName, 'inertiastart'>\n 'interactions:before-action-resume': Omit<DoPhaseArg<ActionName, 'resume'>, 'iEvent'>\n 'interactions:action-resume': DoPhaseArg<ActionName, 'resume'>\n 'interactions:after-action-resume': DoPhaseArg<ActionName, 'resume'>\n }\n}\n\nfunction install (scope: Scope) {\n const { defaults } = scope\n\n scope.usePlugin(offset)\n scope.usePlugin(modifiers.default)\n scope.actions.phases.inertiastart = true\n scope.actions.phases.resume = true\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\nexport class InertiaState {\n active = false\n isModified = false\n smoothEnd = false\n allowResume = false\n\n modification!: Modification\n modifierCount = 0\n modifierArg!: ModifierArg\n\n startCoords!: Point\n t0 = 0\n v0 = 0\n\n te = 0\n targetOffset!: Point\n modifiedOffset!: Point\n currentOffset!: Point\n\n lambda_v0? = 0 // eslint-disable-line camelcase\n one_ve_v0? = 0 // eslint-disable-line camelcase\n timeout!: number\n readonly interaction: Interaction\n\n constructor (interaction: Interaction) {\n this.interaction = interaction\n }\n\n start (event: PointerEventType) {\n const { interaction } = this\n const options = getOptions(interaction)\n\n if (!options || !options.enabled) {\n return false\n }\n\n const { client: velocityClient } = interaction.coords.velocity\n const pointerSpeed = hypot(velocityClient.x, velocityClient.y)\n const modification = this.modification || (this.modification = new Modification(interaction))\n\n modification.copyFrom(interaction.modification)\n\n this.t0 = interaction._now()\n this.allowResume = options.allowResume\n this.v0 = pointerSpeed\n this.currentOffset = { x: 0, y: 0 }\n this.startCoords = interaction.coords.cur.page\n\n this.modifierArg = modification.fillArg({\n pageCoords: this.startCoords,\n preEnd: true,\n phase: 'inertiastart',\n })\n\n const thrown =\n this.t0 - interaction.coords.cur.timeStamp < 50 &&\n pointerSpeed > options.minSpeed &&\n pointerSpeed > options.endSpeed\n\n if (thrown) {\n this.startInertia()\n } else {\n modification.result = modification.setAll(this.modifierArg)\n\n if (!modification.result.changed) {\n return false\n }\n\n this.startSmoothEnd()\n }\n\n // force modification change\n interaction.modification.result.rect = null\n\n // bring inertiastart event to the target coords\n interaction.offsetBy(this.targetOffset)\n interaction._doPhase({\n interaction,\n event,\n phase: 'inertiastart',\n })\n interaction.offsetBy({ x: -this.targetOffset.x, y: -this.targetOffset.y })\n // force modification change\n interaction.modification.result.rect = null\n\n this.active = true\n interaction.simulation = this\n\n return true\n }\n\n startInertia () {\n const startVelocity = this.interaction.coords.velocity.client\n const options = getOptions(this.interaction)\n const lambda = options.resistance\n const inertiaDur = -Math.log(options.endSpeed / this.v0) / lambda\n\n this.targetOffset = {\n x: (startVelocity.x - inertiaDur) / lambda,\n y: (startVelocity.y - inertiaDur) / lambda,\n }\n\n this.te = inertiaDur\n this.lambda_v0 = lambda / this.v0\n this.one_ve_v0 = 1 - options.endSpeed / this.v0\n\n const { modification, modifierArg } = this\n\n modifierArg.pageCoords = {\n x: this.startCoords.x + this.targetOffset.x,\n y: this.startCoords.y + this.targetOffset.y,\n }\n\n modification.result = modification.setAll(modifierArg)\n\n if (modification.result.changed) {\n this.isModified = true\n this.modifiedOffset = {\n x: this.targetOffset.x + modification.result.delta.x,\n y: this.targetOffset.y + modification.result.delta.y,\n }\n }\n\n this.onNextFrame(() => this.inertiaTick())\n }\n\n startSmoothEnd () {\n this.smoothEnd = true\n this.isModified = true\n this.targetOffset = {\n x: this.modification.result.delta.x,\n y: this.modification.result.delta.y,\n }\n\n this.onNextFrame(() => this.smoothEndTick())\n }\n\n onNextFrame (tickFn: () => void) {\n this.timeout = raf.request(() => {\n if (this.active) {\n tickFn()\n }\n })\n }\n\n inertiaTick () {\n const { interaction } = this\n const options = getOptions(interaction)\n const lambda = options.resistance\n const t = (interaction._now() - this.t0) / 1000\n\n if (t < this.te) {\n const progress = 1 - (Math.exp(-lambda * t) - this.lambda_v0) / this.one_ve_v0\n let newOffset: Point\n\n if (this.isModified) {\n newOffset = getQuadraticCurvePoint(\n 0,\n 0,\n this.targetOffset.x,\n this.targetOffset.y,\n this.modifiedOffset.x,\n this.modifiedOffset.y,\n progress,\n )\n } else {\n newOffset = {\n x: this.targetOffset.x * progress,\n y: this.targetOffset.y * progress,\n }\n }\n\n const delta = { x: newOffset.x - this.currentOffset.x, y: newOffset.y - this.currentOffset.y }\n\n this.currentOffset.x += delta.x\n this.currentOffset.y += delta.y\n\n interaction.offsetBy(delta)\n interaction.move()\n\n this.onNextFrame(() => this.inertiaTick())\n } else {\n interaction.offsetBy({\n x: this.modifiedOffset.x - this.currentOffset.x,\n y: this.modifiedOffset.y - this.currentOffset.y,\n })\n\n this.end()\n }\n }\n\n smoothEndTick () {\n const { interaction } = this\n const t = interaction._now() - this.t0\n const { smoothEndDuration: duration } = getOptions(interaction)\n\n if (t < duration) {\n const newOffset = {\n x: easeOutQuad(t, 0, this.targetOffset.x, duration),\n y: easeOutQuad(t, 0, this.targetOffset.y, duration),\n }\n const delta = {\n x: newOffset.x - this.currentOffset.x,\n y: newOffset.y - this.currentOffset.y,\n }\n\n this.currentOffset.x += delta.x\n this.currentOffset.y += delta.y\n\n interaction.offsetBy(delta)\n interaction.move({ skipModifiers: this.modifierCount })\n\n this.onNextFrame(() => this.smoothEndTick())\n } else {\n interaction.offsetBy({\n x: this.targetOffset.x - this.currentOffset.x,\n y: this.targetOffset.y - this.currentOffset.y,\n })\n\n this.end()\n }\n }\n\n resume ({ pointer, event, eventTarget }: SignalArgs['interactions:down']) {\n const { interaction } = this\n\n // undo inertia changes to interaction coords\n interaction.offsetBy({\n x: -this.currentOffset.x,\n y: -this.currentOffset.y,\n })\n\n // update pointer at pointer down position\n interaction.updatePointer(pointer, event, eventTarget, true)\n\n // fire resume signals and event\n interaction._doPhase({\n interaction,\n event,\n phase: 'resume',\n })\n copyCoords(interaction.coords.prev, interaction.coords.cur)\n\n this.stop()\n }\n\n end () {\n this.interaction.move()\n this.interaction.end()\n this.stop()\n }\n\n stop () {\n this.active = this.smoothEnd = false\n this.interaction.simulation = null\n raf.cancel(this.timeout)\n }\n}\n\nfunction start ({ interaction, event }: DoPhaseArg<ActionName, 'end'>) {\n if (!interaction._interacting || interaction.simulation) {\n return null\n }\n\n const started = interaction.inertia.start(event)\n\n // prevent action end if inertia or smoothEnd\n return started ? false : null\n}\n\n// Check if the down event hits the current inertia target\n// control should be return to the user\nfunction resume (arg: SignalArgs['interactions:down']) {\n const { interaction, eventTarget } = arg\n const state = interaction.inertia\n\n if (!state.active) return\n\n let element = eventTarget as Node\n\n // climb up the DOM tree from the event target\n while (is.element(element)) {\n // if interaction element is the current inertia target element\n if (element === interaction.element) {\n state.resume(arg)\n break\n }\n\n element = dom.parentNode(element)\n }\n}\n\nfunction stop ({ interaction }: { interaction: Interaction }) {\n const state = interaction.inertia\n\n if (state.active) {\n state.stop()\n }\n}\n\nfunction getOptions ({ interactable, prepared }: Interaction) {\n return interactable && interactable.options && prepared.name && interactable.options[prepared.name].inertia\n}\n\nconst inertia: Plugin = {\n id: 'inertia',\n before: ['modifiers', 'actions'],\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.inertia = new InertiaState(interaction)\n },\n\n 'interactions:before-action-end': start,\n 'interactions:down': resume,\n 'interactions:stop': stop,\n\n 'interactions:before-action-resume': (arg) => {\n const { modification } = arg.interaction\n\n modification.stop(arg)\n modification.start(arg, arg.interaction.coords.cur.page)\n modification.applyToInteraction(arg)\n },\n\n 'interactions:before-action-inertiastart': (arg) => arg.interaction.modification.setAndApply(arg),\n 'interactions:action-resume': modifiers.addEventModifiers,\n 'interactions:action-inertiastart': modifiers.addEventModifiers,\n 'interactions:after-action-inertiastart': (arg) =>\n arg.interaction.modification.restoreInteractionCoords(arg),\n 'interactions:after-action-resume': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n },\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nfunction _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\nfunction getQuadraticCurvePoint (\n startX: number,\n startY: number,\n cpX: number,\n cpY: number,\n endX: number,\n endY: number,\n position: number,\n) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY),\n }\n}\n\n// http://gizma.com/easing/\nfunction easeOutQuad (t: number, b: number, c: number, d: number) {\n t /= d\n return -c * t * (t - 2) + b\n}\n\nexport default inertia\n","import type { Listener, ListenersArg, Rect } from '@interactjs/core/types'\nimport * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport type { NormalizedListeners } from '@interactjs/utils/normalizeListeners'\nimport normalize from '@interactjs/utils/normalizeListeners'\n\nfunction fireUntilImmediateStopped (event: any, listeners: Listener[]) {\n for (const listener of listeners) {\n if (event.immediatePropagationStopped) {\n break\n }\n\n listener(event)\n }\n}\n\nexport class 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<T extends { type: string, propagationStopped?: boolean }> (event: T) {\n let listeners: Listener[]\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: 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: 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) {\n continue\n }\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 getRect (_element: Element): Rect {\n return null\n }\n}\n","import type { Actions } from '@interactjs/core/types'\n\nexport default function isNonNativeEvent (type: string, actions: Actions) {\n if (actions.phaselessTypes[type]) {\n return true\n }\n\n for (const name in actions.map) {\n if (type.indexOf(name) === 0 && type.substr(name.length) in actions.phases) {\n return true\n }\n }\n\n return false\n}\n","/** @module interact */\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Context, EventTypes, Listener, ListenersArg, Target } from '@interactjs/core/types'\nimport browser from '@interactjs/utils/browser'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport { warnOnce } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { Interactable } from './Interactable'\nimport isNonNativeEvent from './isNonNativeEvent'\nimport type { Options } from './options'\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n (target: Target, options?: Options): Interactable\n getPointerAverage: typeof pointerUtils.pointerAverage\n getTouchBBox: typeof pointerUtils.touchBBox\n getTouchDistance: typeof pointerUtils.touchDistance\n getTouchAngle: typeof pointerUtils.touchAngle\n getElementRect: typeof domUtils.getElementRect\n getElementClientRect: typeof domUtils.getElementClientRect\n matchesSelector: typeof domUtils.matchesSelector\n closest: typeof domUtils.closest\n /** @internal */ globalEvents: any\n version: string\n /** @internal */ scope: Scope\n use(\n plugin: Plugin,\n options?: {\n [key: string]: any\n },\n ): any\n isSet(target: Target, options?: any): boolean\n on(type: string | EventTypes, listener: ListenersArg, options?: object): any\n off(type: EventTypes, listener: any, options?: object): any\n debug(): any\n supportsTouch(): boolean\n supportsPointerEvent(): boolean\n stop(): any\n pointerMoveTolerance(newValue?: number): any\n addDocument(doc: Document, options?: object): void\n removeDocument(doc: Document): void\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\ntype _InteractStatic = import('@interactjs/core/InteractStatic').InteractStatic\n\nexport function createInteractStatic (scope: Scope): _InteractStatic {\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 */\n const interact = ((target: Target, options: Options) => {\n let interactable = scope.interactables.get(target, options)\n\n if (!interactable) {\n interactable = scope.interactables.new(target, options)\n interactable.events.global = interact.globalEvents\n }\n\n return interactable\n }) as _InteractStatic\n\n // expose the functions used to calculate multi-touch properties\n interact.getPointerAverage = pointerUtils.pointerAverage\n interact.getTouchBBox = pointerUtils.touchBBox\n interact.getTouchDistance = pointerUtils.touchDistance\n interact.getTouchAngle = pointerUtils.touchAngle\n\n interact.getElementRect = domUtils.getElementRect\n interact.getElementClientRect = domUtils.getElementClientRect\n interact.matchesSelector = domUtils.matchesSelector\n interact.closest = domUtils.closest\n\n interact.globalEvents = {} as any\n\n // eslint-disable-next-line no-undef\n interact.version = process.env.npm_package_version\n interact.scope = scope\n /**\n * Use a plugin\n *\n * @alias module:interact.use\n *\n */\n interact.use = function (plugin, options) {\n this.scope.usePlugin(plugin, options)\n\n return this\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 {Target} target The Element or string being searched for\n * @param {object} options\n * @return {boolean} Indicates if the element or CSS selector was previously\n * passed to interact\n */\n interact.isSet = function (target: Target, options?: { context?: Context }): boolean {\n return !!this.scope.interactables.get(target, options && options.context)\n }\n\n /**\n * @deprecated\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 */\n interact.on = warnOnce(function on (type: string | EventTypes, listener: ListenersArg, options?: object) {\n if (is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (is.array(type)) {\n for (const eventType of type as any[]) {\n this.on(eventType, listener, options)\n }\n\n return this\n }\n\n if (is.object(type)) {\n for (const prop in type) {\n this.on(prop, (type as any)[prop], listener)\n }\n\n return this\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (isNonNativeEvent(type, this.scope.actions)) {\n // if this type of event was never bound\n if (!this.globalEvents[type]) {\n this.globalEvents[type] = [listener]\n } else {\n this.globalEvents[type].push(listener)\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n this.scope.events.add(this.scope.document, type, listener as Listener, { options })\n }\n\n return this\n }, 'The interact.on() method is being deprecated')\n\n /**\n * @deprecated\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 */\n interact.off = warnOnce(function off (type: EventTypes, listener: any, options?: object) {\n if (is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (is.array(type)) {\n for (const eventType of type) {\n this.off(eventType, listener, options)\n }\n\n return this\n }\n\n if (is.object(type)) {\n for (const prop in type) {\n this.off(prop, type[prop], listener)\n }\n\n return this\n }\n\n if (isNonNativeEvent(type, this.scope.actions)) {\n let index: number\n\n if (type in this.globalEvents && (index = this.globalEvents[type].indexOf(listener)) !== -1) {\n this.globalEvents[type].splice(index, 1)\n }\n } else {\n this.scope.events.remove(this.scope.document, type, listener, options)\n }\n\n return this\n }, 'The interact.off() method is being deprecated')\n\n interact.debug = function () {\n return this.scope\n }\n\n /**\n * @alias module:interact.supportsTouch\n *\n * @return {boolean} Whether or not the browser supports touch input\n */\n interact.supportsTouch = function () {\n return browser.supportsTouch\n }\n\n /**\n * @alias module:interact.supportsPointerEvent\n *\n * @return {boolean} Whether or not the browser supports PointerEvents\n */\n interact.supportsPointerEvent = function () {\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 */\n interact.stop = function () {\n for (const interaction of this.scope.interactions.list) {\n interaction.stop()\n }\n\n return this\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 */\n interact.pointerMoveTolerance = function (newValue?: number) {\n if (is.number(newValue)) {\n this.scope.interactions.pointerMoveTolerance = newValue\n\n return this\n }\n\n return this.scope.interactions.pointerMoveTolerance\n }\n\n interact.addDocument = function (doc: Document, options?: object) {\n this.scope.addDocument(doc, options)\n }\n\n interact.removeDocument = function (doc: Document) {\n this.scope.removeDocument(doc)\n }\n\n return interact\n}\n","/* eslint-disable no-dupe-class-members */\nimport type { Scope } from '@interactjs/core/scope'\nimport type {\n ActionMap,\n ActionMethod,\n ActionName,\n Actions,\n Context,\n Element,\n EventTypes,\n Listeners,\n ListenersArg,\n OrBoolean,\n Target,\n} from '@interactjs/core/types'\nimport * 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 extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport { getWindow } from '@interactjs/utils/window'\n\nimport { Eventable } from './Eventable'\nimport isNonNativeEvent from './isNonNativeEvent'\nimport type { ActionDefaults, Defaults, OptionsArg, PerActionDefaults, Options } from './options'\n\ntype IgnoreValue = string | Element | boolean\ntype DeltaSource = 'page' | 'client'\n\n/** */\nexport class Interactable implements Partial<Eventable> {\n /** @internal */ get _defaults (): Defaults {\n return {\n base: {},\n perAction: {},\n actions: {} as ActionDefaults,\n }\n }\n\n readonly options!: Required<Options>\n readonly _actions: Actions\n readonly target: Target\n readonly events = new Eventable()\n readonly _context: Context\n readonly _win: Window\n readonly _doc: Document\n readonly _scopeEvents: Scope['events']\n\n /** @internal */ _rectChecker?: typeof Interactable.prototype.getRect\n\n /** */\n constructor (\n target: Target,\n options: any,\n defaultContext: Document | Element,\n scopeEvents: Scope['events'],\n ) {\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 this._scopeEvents = scopeEvents\n\n this.set(options)\n }\n\n setOnEvents (actionName: ActionName, phases: NonNullable<any>) {\n if (is.func(phases.onstart)) {\n this.on(`${actionName}start`, phases.onstart)\n }\n if (is.func(phases.onmove)) {\n this.on(`${actionName}move`, phases.onmove)\n }\n if (is.func(phases.onend)) {\n this.on(`${actionName}end`, phases.onend)\n }\n if (is.func(phases.oninertiastart)) {\n this.on(`${actionName}inertiastart`, phases.oninertiastart)\n }\n\n return this\n }\n\n updatePerActionListeners (actionName: ActionName, prev: Listeners, cur: Listeners) {\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: ActionName, options: OrBoolean<Options>) {\n const defaults = this._defaults\n\n // for all the default per-action options\n for (const optionName_ in options) {\n const optionName = optionName_ as keyof PerActionDefaults\n const actionOptions = this.options[actionName]\n const optionValue: any = options[optionName]\n\n // remove old event listeners and add new ones\n if (optionName === 'listeners') {\n this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue as Listeners)\n }\n\n // if the option value is an array\n if (is.array(optionValue)) {\n ;(actionOptions[optionName] as any) = arr.from(optionValue)\n }\n // if the option value is an object\n else if (is.plainObject(optionValue)) {\n // copy the object\n ;(actionOptions[optionName] as any) = extend(\n actionOptions[optionName] || ({} as any),\n clone(optionValue),\n )\n\n // set anabled field to true if it exists in the defaults\n if (\n is.object(defaults.perAction[optionName]) &&\n 'enabled' in (defaults.perAction[optionName] as any)\n ) {\n ;(actionOptions[optionName] as any).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] as any).enabled = optionValue\n }\n // if it's anything else, do a plain assignment\n else {\n ;(actionOptions[optionName] as any) = 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 {Rect} The object's bounding rectangle.\n */\n getRect (element: Element) {\n element = element || (is.element(this.target) ? this.target : 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(): (element: Element) => any | null\n rectChecker(checker: (element: Element) => any): this\n rectChecker (checker?: (element: Element) => any) {\n if (is.func(checker)) {\n this._rectChecker = checker\n\n this.getRect = (element) => {\n const rect = extend({}, this._rectChecker(element))\n\n if (!(('width' in rect) as unknown)) {\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n return rect\n }\n\n return this\n }\n\n if (checker === null) {\n delete this.getRect\n delete this._rectChecker\n\n return this\n }\n\n return this.getRect\n }\n\n _backCompatOption (optionName: keyof Options, newValue: any) {\n if (trySelector(newValue) || is.object(newValue)) {\n ;(this.options[optionName] as any) = newValue\n\n for (const action in this._actions.map) {\n ;(this.options[action as keyof ActionMap] as any)[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: any) {\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(): DeltaSource\n deltaSource(newValue: DeltaSource): this\n deltaSource (newValue?: DeltaSource) {\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: Document | Node) {\n return this._context === element.ownerDocument || nodeContains(this._context, element)\n }\n\n testIgnoreAllow (\n this: Interactable,\n options: { ignoreFrom?: IgnoreValue, allowFrom?: IgnoreValue },\n targetNode: Node,\n eventTarget: Node,\n ) {\n return (\n !this.testIgnore(options.ignoreFrom, targetNode, eventTarget) &&\n this.testAllow(options.allowFrom, targetNode, eventTarget)\n )\n }\n\n testAllow (this: Interactable, allowFrom: IgnoreValue, targetNode: Node, element: Node) {\n if (!allowFrom) {\n return true\n }\n\n if (!is.element(element)) {\n return false\n }\n\n if (is.string(allowFrom)) {\n return matchesUpTo(element, allowFrom, targetNode)\n } else if (is.element(allowFrom)) {\n return nodeContains(allowFrom, element)\n }\n\n return false\n }\n\n testIgnore (this: Interactable, ignoreFrom: IgnoreValue, targetNode: Node, element: Node) {\n if (!ignoreFrom || !is.element(element)) {\n return false\n }\n\n if (is.string(ignoreFrom)) {\n return matchesUpTo(element, ignoreFrom, targetNode)\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<E extends { type: string }> (iEvent: E) {\n this.events.fire(iEvent)\n\n return this\n }\n\n _onOff (method: 'on' | 'off', typeArg: EventTypes, listenerArg?: 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') {\n type = browser.wheelEvent\n }\n\n for (const listener of listeners[type]) {\n // if it is an action event type\n if (isNonNativeEvent(type, this._actions)) {\n this.events[method](type, listener)\n }\n // delegated event\n else if (is.string(this.target)) {\n this._scopeEvents[`${addRemove}Delegate` as 'addDelegate' | 'removeDelegate'](\n this.target,\n this._context,\n type,\n listener,\n options,\n )\n }\n // remove listener from this Interactable's element\n else {\n this._scopeEvents[addRemove](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: EventTypes, listener?: 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[] | EventTypes, listener?: 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: OptionsArg) {\n const defaults = this._defaults\n\n if (!is.object(options)) {\n options = {}\n }\n\n ;(this.options as Required<Options>) = clone(defaults.base) as Required<Options>\n\n for (const actionName_ in this._actions.methodDict) {\n const actionName = actionName_ as ActionName\n const methodName = this._actions.methodDict[actionName]\n\n this.options[actionName] = {}\n this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName]))\n ;(this[methodName] as ActionMethod<unknown>)(options[actionName])\n }\n\n for (const setting in options) {\n if (is.func((this as any)[setting])) {\n ;(this as any)[setting](options[setting as keyof typeof options])\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 unset () {\n if (is.string(this.target)) {\n // remove delegated events\n for (const type in this._scopeEvents.delegatedEvents) {\n const delegated = this._scopeEvents.delegatedEvents[type]\n\n for (let i = delegated.length - 1; i >= 0; i--) {\n const { selector, context, listeners } = delegated[i]\n\n if (selector === this.target && context === this._context) {\n delegated.splice(i, 1)\n }\n\n for (let l = listeners.length - 1; l >= 0; l--) {\n this._scopeEvents.removeDelegate(\n this.target,\n this._context,\n type,\n listeners[l][0],\n listeners[l][1],\n )\n }\n }\n }\n } else {\n this._scopeEvents.remove(this.target as Node, 'all')\n }\n }\n}\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { OptionsArg, Options } from '@interactjs/core/options'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { Target, Context } from '@interactjs/core/types'\nimport * as arr from '@interactjs/utils/arr'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactable:new': {\n interactable: Interactable\n target: Target\n options: OptionsArg\n win: Window\n }\n }\n}\n\ninterface InteractableScopeProp {\n context: Context\n interactable: Interactable\n}\n\nexport class InteractableSet {\n // all set interactables\n list: Interactable[] = []\n\n selectorMap: {\n [selector: string]: InteractableScopeProp[]\n } = {}\n\n scope: Scope\n\n constructor (scope: Scope) {\n this.scope = scope\n scope.addListeners({\n 'interactable:unset': ({ interactable }) => {\n const { target, _context: context } = interactable\n const targetMappings: InteractableScopeProp[] = is.string(target)\n ? this.selectorMap[target]\n : (target as any)[this.scope.id]\n\n const targetIndex = arr.findIndex(targetMappings, (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\n new (target: Target, options?: any): Interactable {\n options = extend(options || {}, {\n actions: this.scope.actions,\n })\n const interactable = new this.scope.Interactable(target, options, this.scope.document, this.scope.events)\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]) {\n this.selectorMap[target] = []\n }\n this.selectorMap[target].push(mappingInfo)\n } else {\n if (!(interactable.target as any)[this.scope.id]) {\n Object.defineProperty(target, this.scope.id, {\n value: [],\n configurable: true,\n })\n }\n\n ;(target as any)[this.scope.id].push(mappingInfo)\n }\n\n this.scope.fire('interactable:new', {\n target,\n options,\n interactable,\n win: this.scope._win,\n })\n\n return interactable\n }\n\n get (target: Target, options?: Options) {\n const context = (options && options.context) || this.scope.document\n const isSelector = is.string(target)\n const targetMappings: InteractableScopeProp[] = isSelector\n ? this.selectorMap[target as string]\n : (target as any)[this.scope.id]\n\n if (!targetMappings) {\n return null\n }\n\n const found = arr.find(\n targetMappings,\n (m) => m.context === context && (isSelector || m.interactable.inContext(target as any)),\n )\n\n return found && found.interactable\n }\n\n forEachMatch<T> (node: Node, callback: (interactable: Interactable) => T) {\n for (const interactable of this.list) {\n let ret: void | T\n\n if (\n (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 ) {\n ret = callback(interactable)\n }\n\n if (ret !== undefined) {\n return ret\n }\n }\n }\n}\n","import type { Scope } from '@interactjs/core/scope'\nimport type { Element } from '@interactjs/core/types'\nimport * as arr from '@interactjs/utils/arr'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport pExtend from '@interactjs/utils/pointerExtend'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n events: ReturnType<typeof install>\n }\n}\n\ntype Listener = (event: Event | FakeEvent) => any\n\nfunction install (scope: Scope) {\n const targets: Array<{\n eventTarget: EventTarget\n events: { [type: string]: Listener[] }\n }> = []\n\n const delegatedEvents: {\n [type: string]: Array<{\n selector: string\n context: Node\n listeners: Array<[Listener, { capture: boolean, passive: boolean }]>\n }>\n } = {}\n const documents: Document[] = []\n\n const eventsMethods = {\n add,\n remove,\n\n addDelegate,\n removeDelegate,\n\n delegateListener,\n delegateUseCapture,\n delegatedEvents,\n documents,\n\n targets,\n\n supportsOptions: false,\n supportsPassive: false,\n }\n\n // check if browser supports passive events and options arg\n scope.document?.createElement('div').addEventListener('test', null, {\n get capture () {\n return (eventsMethods.supportsOptions = true)\n },\n get passive () {\n return (eventsMethods.supportsPassive = true)\n },\n })\n\n scope.events = eventsMethods\n\n function add (eventTarget: EventTarget, type: string, listener: Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n let target = arr.find(targets, (t) => t.eventTarget === eventTarget)\n\n if (!target) {\n target = {\n eventTarget,\n events: {},\n }\n\n targets.push(target)\n }\n\n if (!target.events[type]) {\n target.events[type] = []\n }\n\n if (eventTarget.addEventListener && !arr.contains(target.events[type], listener)) {\n eventTarget.addEventListener(\n type,\n listener as any,\n eventsMethods.supportsOptions ? options : options.capture,\n )\n target.events[type].push(listener)\n }\n }\n\n function remove (\n eventTarget: EventTarget,\n type: string,\n listener?: 'all' | Listener,\n optionalArg?: boolean | any,\n ) {\n const options = getOptions(optionalArg)\n const targetIndex = arr.findIndex(targets, (t) => t.eventTarget === eventTarget)\n const target = targets[targetIndex]\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(eventTarget, type, 'all')\n }\n }\n return\n }\n\n let typeIsEmpty = false\n const typeListeners = target.events[type]\n\n if (typeListeners) {\n if (listener === 'all') {\n for (let i = typeListeners.length - 1; i >= 0; i--) {\n remove(eventTarget, type, typeListeners[i], options)\n }\n return\n } else {\n for (let i = 0; i < typeListeners.length; i++) {\n if (typeListeners[i] === listener) {\n eventTarget.removeEventListener(\n type,\n listener as any,\n eventsMethods.supportsOptions ? options : options.capture,\n )\n typeListeners.splice(i, 1)\n\n if (typeListeners.length === 0) {\n delete target.events[type]\n typeIsEmpty = true\n }\n\n break\n }\n }\n }\n }\n\n if (typeIsEmpty && !Object.keys(target.events).length) {\n targets.splice(targetIndex, 1)\n }\n }\n\n function addDelegate (selector: string, context: Node, type: string, listener: Listener, optionalArg?: any) {\n const options = getOptions(optionalArg)\n if (!delegatedEvents[type]) {\n delegatedEvents[type] = []\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 delegates = delegatedEvents[type]\n let delegate = arr.find(delegates, (d) => d.selector === selector && d.context === context)\n\n if (!delegate) {\n delegate = { selector, context, listeners: [] }\n delegates.push(delegate)\n }\n\n delegate.listeners.push([listener, options])\n }\n\n function removeDelegate (\n selector: string,\n context: Document | Element,\n type: string,\n listener?: Listener,\n optionalArg?: any,\n ) {\n const options = getOptions(optionalArg)\n const delegates = delegatedEvents[type]\n let matchFound = false\n let index: number\n\n if (!delegates) return\n\n // count from last index of delegated to 0\n for (index = delegates.length - 1; index >= 0; index--) {\n const cur = delegates[index]\n // look for matching selector and context Node\n if (cur.selector === selector && cur.context === context) {\n const { listeners } = cur\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 target have been removed\n // remove the target from the delegates array\n if (!listeners.length) {\n delegates.splice(index, 1)\n\n // remove delegate function from context\n remove(context, type, delegateListener)\n remove(context, type, delegateUseCapture, true)\n }\n\n // only remove one listener\n matchFound = true\n break\n }\n }\n\n if (matchFound) {\n break\n }\n }\n }\n }\n\n // bound to the interactable context when a DOM event\n // listener is added to a selector interactable\n function delegateListener (event: Event | FakeEvent, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const fakeEvent = new FakeEvent(event as Event)\n const delegates = delegatedEvents[event.type]\n const [eventTarget] = pointerUtils.getEventTargets(event as Event)\n let element: Node = eventTarget\n\n // climb up document tree looking for selector matches\n while (is.element(element)) {\n for (let i = 0; i < delegates.length; i++) {\n const cur = delegates[i]\n const { selector, context } = cur\n\n if (\n domUtils.matchesSelector(element, selector) &&\n domUtils.nodeContains(context, eventTarget) &&\n domUtils.nodeContains(context, element)\n ) {\n const { listeners } = cur\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\n function delegateUseCapture (this: Element, event: Event | FakeEvent) {\n return delegateListener.call(this, event, true)\n }\n\n // for type inferrence\n return eventsMethods\n}\n\nclass FakeEvent implements Partial<Event> {\n currentTarget: Node\n originalEvent: Event\n type: string\n\n constructor (originalEvent: Event) {\n this.originalEvent = 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\nfunction getOptions (param: { [index: string]: any } | boolean): { capture: boolean, passive: boolean } {\n if (!is.object(param)) {\n return { capture: !!param, passive: false }\n }\n\n const options = extend({}, param) as any\n\n options.capture = !!param.capture\n options.passive = !!param.passive\n\n return options\n}\n\nexport default {\n id: 'events',\n install,\n}\n","import type Interaction from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { PointerType } from '@interactjs/core/types'\nimport * as dom from '@interactjs/utils/domUtils'\n\nexport interface SearchDetails {\n pointer: PointerType\n pointerId: number\n pointerType: string\n eventType: string\n eventTarget: EventTarget\n curEventTarget: EventTarget\n scope: Scope\n}\n\nconst finder = {\n methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'] as const,\n\n search (details: SearchDetails) {\n for (const method of finder.methodOrder) {\n const interaction = finder[method](details)\n\n if (interaction) {\n return interaction\n }\n }\n\n return null\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 as Node\n\n if (\n interaction.simulation &&\n interaction.simulation.allowResume &&\n interaction.pointerType === pointerType\n ) {\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)) {\n continue\n }\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: Interaction, pointerId: number) {\n return interaction.pointers.some(({ id }) => id === pointerId)\n}\n\nexport default finder\n","import type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, Listener } from '@interactjs/core/types'\nimport browser from '@interactjs/utils/browser'\nimport domObjects from '@interactjs/utils/domObjects'\nimport { nodeContains } from '@interactjs/utils/domUtils'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport InteractionBase from './Interaction'\nimport interactablePreventDefault from './interactablePreventDefault'\nimport type { SearchDetails } from './interactionFinder'\nimport finder from './interactionFinder'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n Interaction: typeof InteractionBase\n interactions: {\n new: <T extends ActionName>(options: any) => InteractionBase<T>\n list: Array<InteractionBase<ActionName>>\n listeners: { [type: string]: Listener }\n docEvents: Array<{ type: string, listener: Listener }>\n pointerMoveTolerance: number\n }\n prevTouchTime: number\n }\n\n interface SignalArgs {\n 'interactions:find': {\n interaction: InteractionBase\n searchDetails: SearchDetails\n }\n }\n}\n\nconst methodNames = [\n 'pointerDown',\n 'pointerMove',\n 'pointerUp',\n 'updatePointer',\n 'removePointer',\n 'windowBlur',\n]\n\nfunction install (scope: Scope) {\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 } 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 // for ignoring browser's simulated mouse events\n scope.prevTouchTime = 0\n\n scope.Interaction = class <T extends ActionName> extends InteractionBase<T> {\n get pointerMoveTolerance () {\n return scope.interactions.pointerMoveTolerance\n }\n\n set pointerMoveTolerance (value) {\n scope.interactions.pointerMoveTolerance = value\n }\n\n _now () {\n return scope.now()\n }\n }\n\n scope.interactions = {\n // all active and idle interactions\n list: [],\n new<T extends ActionName> (options: { pointerType?: string, scopeFire?: Scope['fire'] }) {\n options.scopeFire = (name, arg) => scope.fire(name, arg)\n\n const interaction = new scope.Interaction<T>(options as Required<typeof options>)\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 || interaction.pointerType !== 'touch' || 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 scope.usePlugin(interactablePreventDefault)\n}\n\nfunction doOnInteractions (method: string, scope: Scope) {\n return function (event: Event) {\n const interactions = scope.interactions.list\n\n const pointerType = pointerUtils.getPointerType(event)\n const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event)\n const matches: any[] = [] // [ [pointer, interaction], ...]\n\n if (/^touch/.test(event.type)) {\n scope.prevTouchTime = scope.now()\n\n // @ts-expect-error\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 } 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 =\n 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 as PointerEvent,\n pointerId: pointerUtils.getPointerId(event as PointerEvent),\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.fire('interactions:find', signalArg)\n\n return signalArg.interaction || scope.interactions.new({ pointerType })\n}\n\nfunction onDocSignal<T extends 'scope:add-document' | 'scope:remove-document'> (\n { doc, scope, options }: SignalArgs[T],\n eventMethodName: 'add' | 'remove',\n) {\n const {\n interactions: { docEvents },\n events,\n } = scope\n const eventMethod = events[eventMethodName]\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\nconst interactions: Plugin = {\n id: 'core/interactions',\n install,\n listeners: {\n 'scope:add-document': (arg) => onDocSignal(arg, 'add'),\n 'scope:remove-document': (arg) => onDocSignal(arg, 'remove'),\n 'interactable:unset': ({ interactable }, scope) => {\n // Stop and destroy related interactions when an Interactable is 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 !== interactable) {\n continue\n }\n\n interaction.stop()\n scope.fire('interactions: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 onDocSignal,\n doOnInteractions,\n methodNames,\n}\n\nexport default interactions\n","import type Interaction from '@interactjs/core/Interaction'\nimport browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport domObjects from '@interactjs/utils/domObjects'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport * as win from '@interactjs/utils/window'\n\nimport { Eventable } from './Eventable'\nimport { InteractEvent } from './InteractEvent'\nimport { createInteractStatic } from './InteractStatic'\nimport { Interactable as InteractableBase } from './Interactable'\nimport { InteractableSet } from './InteractableSet'\nimport events from './events'\nimport interactions from './interactions'\nimport type { OptionsArg } from './options'\nimport { defaults } from './options'\nimport type { Actions } from './types'\n\nexport interface SignalArgs {\n 'scope:add-document': DocSignalArg\n 'scope:remove-document': DocSignalArg\n 'interactable:unset': { interactable: InteractableBase }\n 'interactable:set': { interactable: InteractableBase, options: OptionsArg }\n 'interactions:destroy': { interaction: Interaction }\n}\n\nexport type ListenerName = keyof SignalArgs\n\nexport type ListenerMap = {\n [P in ListenerName]?: (arg: SignalArgs[P], scope: Scope, signalName: P) => void | boolean\n}\n\ninterface DocSignalArg {\n doc: Document\n window: Window\n scope: Scope\n options: Record<string, any>\n}\n\nexport interface Plugin {\n [key: string]: any\n id?: string\n listeners?: ListenerMap\n before?: string[]\n install?(scope: Scope, options?: any): void\n}\n\nexport class Scope {\n id = `__interact_scope_${Math.floor(Math.random() * 100)}`\n isInitialized = false\n listenerMaps: Array<{\n map: ListenerMap\n id: string\n }> = []\n\n browser = browser\n defaults = clone(defaults) as typeof defaults\n Eventable = Eventable\n actions: Actions = {\n map: {},\n phases: {\n start: true,\n move: true,\n end: true,\n },\n methodDict: {} as any,\n phaselessTypes: {},\n }\n\n interactStatic = createInteractStatic(this)\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: {\n list: Plugin[]\n map: { [id: string]: Plugin }\n } = {\n list: [],\n map: {},\n }\n\n constructor () {\n const scope = this\n\n this.Interactable = class extends InteractableBase {\n get _defaults () {\n return scope.defaults\n }\n\n set<T extends InteractableBase> (this: T, options: OptionsArg) {\n super.set(options)\n\n scope.fire('interactable:set', {\n options,\n interactable: this,\n })\n\n return this\n }\n\n unset (this: InteractableBase) {\n super.unset()\n\n const index = scope.interactables.list.indexOf(this)\n if (index < 0) return\n\n scope.interactables.list.splice(index, 1)\n scope.fire('interactable:unset', { interactable: this })\n }\n }\n }\n\n addListeners (map: ListenerMap, id?: string) {\n this.listenerMaps.push({ id, map })\n }\n\n fire<T extends ListenerName> (name: T, arg: SignalArgs[T]): void | false {\n for (const {\n map: { [name]: listener },\n } of this.listenerMaps) {\n if (!!listener && listener(arg as any, this, name as never) === false) {\n return false\n }\n }\n }\n\n onWindowUnload = (event: BeforeUnloadEvent) => this.removeDocument(event.target as Document)\n\n init (window: Window | typeof globalThis) {\n return this.isInitialized ? this : initScope(this, window)\n }\n\n pluginIsInstalled (plugin: Plugin) {\n return this._plugins.map[plugin.id] || this._plugins.list.indexOf(plugin) !== -1\n }\n\n usePlugin (plugin: Plugin, options?: { [key: string]: any }) {\n if (!this.isInitialized) {\n return this\n }\n\n if (this.pluginIsInstalled(plugin)) {\n return this\n }\n\n if (plugin.id) {\n this._plugins.map[plugin.id] = plugin\n }\n this._plugins.list.push(plugin)\n\n if (plugin.install) {\n plugin.install(this, options)\n }\n\n if (plugin.listeners && plugin.before) {\n let index = 0\n const len = this.listenerMaps.length\n const before = plugin.before.reduce((acc, id) => {\n acc[id] = true\n acc[pluginIdRoot(id)] = true\n return acc\n }, {})\n\n for (; index < len; index++) {\n const otherId = this.listenerMaps[index].id\n\n if (before[otherId] || before[pluginIdRoot(otherId)]) {\n break\n }\n }\n\n this.listenerMaps.splice(index, 0, { id: plugin.id, map: plugin.listeners })\n } else if (plugin.listeners) {\n this.listenerMaps.push({ id: plugin.id, map: plugin.listeners })\n }\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) {\n return false\n }\n\n const window = win.getWindow(doc)\n\n options = options ? extend({}, options) : {}\n\n this.documents.push({ doc, options })\n this.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 this.events.add(window, 'unload', this.onWindowUnload)\n }\n\n this.fire('scope: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 this.events.remove(window, 'unload', this.onWindowUnload)\n\n this.documents.splice(index, 1)\n this.events.documents.splice(index, 1)\n\n this.fire('scope: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 | typeof globalThis) {\n scope.isInitialized = true\n\n if (is.window(window)) {\n win.init(window)\n }\n\n domObjects.init(window)\n browser.init(window)\n raf.init(window)\n\n // @ts-expect-error\n scope.window = window\n scope.document = window.document\n\n scope.usePlugin(interactions)\n scope.usePlugin(events)\n\n return scope\n}\n\nfunction pluginIdRoot (id: string) {\n return id && id.replace(/\\/.*$/, '')\n}\n","import { Scope } from '@interactjs/core/scope'\n\nconst scope = new Scope()\n\nconst interact = scope.interactStatic\n\nexport default interact\n\nconst _global = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : this\nscope.init(_global)\n","export default () => {}\n","export default () => {}\n","import type { Rect, Point } from '@interactjs/core/types'\nimport type { SnapFunction, SnapTarget } from '@interactjs/modifiers/snap/pointer'\n\nexport type GridOptions = (Partial<Rect> | Point) & {\n range?: number\n limits?: Rect\n offset?: Point\n}\n\nexport default (grid: GridOptions) => {\n const coordFields = (\n [\n ['x', 'y'],\n ['left', 'top'],\n ['right', 'bottom'],\n ['width', 'height'],\n ] as const\n ).filter(([xField, yField]) => xField in grid || yField in grid)\n\n const gridFunc: SnapFunction & {\n grid: typeof grid\n coordFields: typeof coordFields\n } = (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: SnapTarget & {\n grid: typeof grid\n } = { range, grid, x: null as number, y: null as number }\n\n for (const [xField, yField] of coordFields) {\n const gridx = Math.round((x - offset.x) / (grid as any)[xField])\n const gridy = Math.round((y - offset.y) / (grid as any)[yField])\n\n result[xField] = Math.max(limits.left, Math.min(limits.right, gridx * (grid as any)[xField] + offset.x))\n result[yField] = Math.max(limits.top, Math.min(limits.bottom, gridy * (grid as any)[yField] + offset.y))\n }\n\n return result\n }\n\n gridFunc.grid = grid\n gridFunc.coordFields = coordFields\n\n return gridFunc\n}\n","import type { Plugin } from '@interactjs/core/scope'\nimport extend from '@interactjs/utils/extend'\n\nimport * as allSnappers from './all'\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n snappers: typeof allSnappers\n createSnapGrid: typeof allSnappers.grid\n }\n}\n\nconst snappersPlugin: Plugin = {\n id: 'snappers',\n install (scope) {\n const { interactStatic: interact } = scope\n\n interact.snappers = extend(interact.snappers || {}, allSnappers)\n interact.createSnapGrid = interact.snappers.grid\n },\n}\n\nexport default snappersPlugin\n","/**\n * @module modifiers/aspectRatio\n *\n * @description\n * This module forces elements to be resized with a specified dx/dy ratio.\n *\n * ```js\n * interact(target).resizable({\n * modifiers: [\n * interact.modifiers.snapSize({\n * targets: [ interact.snappers.grid({ x: 20, y: 20 }) ],\n * }),\n * interact.aspectRatio({ ratio: 'preserve' }),\n * ],\n * });\n * ```\n */\n\nimport type { Point, Rect, EdgeOptions } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport { addEdges } from '@interactjs/utils/rect'\n\nimport Modification from './Modification'\nimport { makeModifier } from './base'\nimport type { Modifier, ModifierModule, ModifierState } from './types'\n\nexport interface AspectRatioOptions {\n ratio?: number | 'preserve'\n equalDelta?: boolean\n modifiers?: Modifier[]\n enabled?: boolean\n}\n\nexport type AspectRatioState = ModifierState<\nAspectRatioOptions,\n{\n startCoords: Point\n startRect: Rect\n linkedEdges: EdgeOptions\n ratio: number\n equalDelta: boolean\n xIsPrimaryAxis: boolean\n edgeSign: {\n x: number\n y: number\n }\n subModification: Modification\n}\n>\n\nconst aspectRatio: ModifierModule<AspectRatioOptions, AspectRatioState> = {\n start (arg) {\n const { state, rect, edges, pageCoords: coords } = arg\n let { ratio, enabled } = state.options\n const { equalDelta, modifiers } = state.options\n\n if (ratio === 'preserve') {\n ratio = rect.width / rect.height\n }\n\n state.startCoords = extend({}, coords)\n state.startRect = extend({}, rect)\n state.ratio = ratio\n state.equalDelta = equalDelta\n\n const linkedEdges = (state.linkedEdges = {\n top: edges.top || (edges.left && !edges.bottom),\n left: edges.left || (edges.top && !edges.right),\n bottom: edges.bottom || (edges.right && !edges.top),\n right: edges.right || (edges.bottom && !edges.left),\n })\n\n state.xIsPrimaryAxis = !!(edges.left || edges.right)\n\n if (state.equalDelta) {\n const sign = (linkedEdges.left ? 1 : -1) * (linkedEdges.top ? 1 : -1)\n state.edgeSign = {\n x: sign,\n y: sign,\n }\n } else {\n state.edgeSign = {\n x: linkedEdges.left ? -1 : 1,\n y: linkedEdges.top ? -1 : 1,\n }\n }\n\n if (enabled !== false) {\n extend(edges, linkedEdges)\n }\n\n if (!modifiers?.length) return\n\n const subModification = new Modification(arg.interaction)\n\n subModification.copyFrom(arg.interaction.modification)\n subModification.prepareStates(modifiers)\n\n state.subModification = subModification\n subModification.startAll({ ...arg })\n },\n\n set (arg) {\n const { state, rect, coords } = arg\n const { linkedEdges } = state\n const initialCoords = extend({}, coords)\n const aspectMethod = state.equalDelta ? setEqualDelta : setRatio\n\n extend(arg.edges, linkedEdges)\n aspectMethod(state, state.xIsPrimaryAxis, coords, rect)\n\n if (!state.subModification) {\n return null\n }\n\n const correctedRect = extend({}, rect)\n\n addEdges(linkedEdges, correctedRect, {\n x: coords.x - initialCoords.x,\n y: coords.y - initialCoords.y,\n })\n\n const result = state.subModification.setAll({\n ...arg,\n rect: correctedRect,\n edges: linkedEdges,\n pageCoords: coords,\n prevCoords: coords,\n prevRect: correctedRect,\n })\n\n const { delta } = result\n\n if (result.changed) {\n const xIsCriticalAxis = Math.abs(delta.x) > Math.abs(delta.y)\n\n // do aspect modification again with critical edge axis as primary\n aspectMethod(state, xIsCriticalAxis, result.coords, result.rect)\n extend(coords, result.coords)\n }\n\n return result.eventProps\n },\n\n defaults: {\n ratio: 'preserve',\n equalDelta: false,\n modifiers: [],\n enabled: false,\n },\n}\n\nfunction setEqualDelta ({ startCoords, edgeSign }: AspectRatioState, xIsPrimaryAxis: boolean, coords: Point) {\n if (xIsPrimaryAxis) {\n coords.y = startCoords.y + (coords.x - startCoords.x) * edgeSign.y\n } else {\n coords.x = startCoords.x + (coords.y - startCoords.y) * edgeSign.x\n }\n}\n\nfunction setRatio (\n { startRect, startCoords, ratio, edgeSign }: AspectRatioState,\n xIsPrimaryAxis: boolean,\n coords: Point,\n rect: Rect,\n) {\n if (xIsPrimaryAxis) {\n const newHeight = rect.width / ratio\n\n coords.y = startCoords.y + (newHeight - startRect.height) * edgeSign.y\n } else {\n const newWidth = rect.height * ratio\n\n coords.x = startCoords.x + (newWidth - startRect.width) * edgeSign.x\n }\n}\n\nexport default makeModifier(aspectRatio, 'aspectRatio')\nexport { aspectRatio }\n","import type { ModifierFunction } from './types'\n\nconst noop = (() => {}) as unknown as ModifierFunction<any, any, 'noop'>\n\nnoop._defaults = {}\n\nexport default noop\n","import type Interaction from '@interactjs/core/Interaction'\nimport type { RectResolvable, Rect, Point } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierModule, ModifierState } from '../types'\n\nexport interface RestrictOptions {\n // where to drag over\n restriction: RectResolvable<[number, number, Interaction]>\n // what part of self is allowed to drag over\n elementRect: Rect\n offset: Rect\n // restrict just before the end drag\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictState = ModifierState<\nRestrictOptions,\n{\n offset: Rect\n}\n>\n\nfunction start ({ rect, startOffset, state, interaction, pageCoords }: ModifierArg<RestrictState>) {\n const { options } = state\n const { elementRect } = options\n const offset: Rect = extend(\n {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n },\n options.offset || {},\n )\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 }: ModifierArg<RestrictState>) {\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\nexport function getRestrictionRect (\n value: RectResolvable<[number, number, Interaction]>,\n interaction: Interaction,\n coords?: Point,\n) {\n if (is.func(value)) {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element, [\n coords.x,\n coords.y,\n interaction,\n ])\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: ModifierModule<RestrictOptions, RestrictState> = {\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(restrict, 'restrict')\nexport { 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 type { Point, Rect } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierState } from '../types'\n\nimport type { RestrictOptions } from './pointer'\nimport { getRestrictionRect } 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<\nRestrictEdgesOptions,\n{\n inner: Rect\n outer: Rect\n offset: RestrictEdgesOptions['offset']\n}\n>\n\nconst noInner = { top: +Infinity, left: +Infinity, bottom: -Infinity, right: -Infinity }\nconst noOuter = { top: -Infinity, left: -Infinity, bottom: +Infinity, right: +Infinity }\n\nfunction start ({ interaction, startOffset, state }: ModifierArg<RestrictEdgesState>) {\n const { options } = state\n let offset: Point\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, edges, interaction, state }: ModifierArg<RestrictEdgesState>) {\n const { offset, options } = state\n\n if (!edges) {\n return\n }\n\n const page = extend({}, coords)\n const inner = getRestrictionRect(options.inner, interaction, page) || ({} as Rect)\n const outer = getRestrictionRect(options.outer, interaction, page) || ({} as 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 } 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 } 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: Rect, defaults: Rect) {\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 start,\n set,\n defaults,\n}\n\nexport default makeModifier(restrictEdges, 'restrictEdges')\nexport { restrictEdges }\n","import extend from '@interactjs/utils/extend'\n\nimport { makeModifier } from '../base'\n\nimport { restrict } from './pointer'\n\nconst defaults = extend(\n {\n get elementRect () {\n return { top: 0, left: 0, bottom: 1, right: 1 }\n },\n set elementRect (_) {},\n },\n restrict.defaults,\n)\n\nconst restrictRect = {\n start: restrict.start,\n set: restrict.set,\n defaults,\n}\n\nexport default makeModifier(restrictRect, 'restrictRect')\nexport { restrictRect }\n","import type { Point, Rect, Size } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierState } from '../types'\n\nimport type { RestrictEdgesState } from './edges'\nimport { restrictEdges } from './edges'\nimport type { RestrictOptions } from './pointer'\nimport { getRestrictionRect } from './pointer'\n\nconst noMin = { width: -Infinity, height: -Infinity }\nconst noMax = { width: +Infinity, height: +Infinity }\n\nexport interface RestrictSizeOptions {\n min?: Size | Point | RestrictOptions['restriction']\n max?: Size | Point | RestrictOptions['restriction']\n endOnly: boolean\n enabled?: boolean\n}\n\nfunction start (arg: ModifierArg<RestrictEdgesState>) {\n return restrictEdges.start(arg)\n}\n\nexport type RestrictSizeState = RestrictEdgesState &\nModifierState<\nRestrictSizeOptions & { inner: Rect, outer: Rect },\n{\n min: Rect\n max: Rect\n}\n>\n\nfunction set (arg: ModifierArg<RestrictSizeState>) {\n const { interaction, state, rect, edges } = arg\n const { options } = state\n\n if (!edges) {\n return\n }\n\n const minSize =\n rectUtils.tlbrToXywh(getRestrictionRect(options.min as any, interaction, arg.coords)) || noMin\n const maxSize =\n rectUtils.tlbrToXywh(getRestrictionRect(options.max as any, 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 } 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 } 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 makeModifier(restrictSize, 'restrictSize')\nexport { restrictSize }\n","import type { Interaction, InteractionProxy } from '@interactjs/core/Interaction'\nimport type { ActionName, Point, RectResolvable, Element } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport hypot from '@interactjs/utils/hypot'\nimport is from '@interactjs/utils/is'\nimport { resolveRectLike, rectToXY } from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierState } from '../types'\n\nexport interface Offset {\n x: number\n y: number\n index: number\n relativePoint?: Point | null\n}\n\nexport interface SnapPosition {\n x?: number\n y?: number\n range?: number\n offset?: Offset\n [index: string]: any\n}\n\nexport type SnapFunction = (\n x: number,\n y: number,\n interaction: InteractionProxy<ActionName>,\n offset: Offset,\n index: number,\n) => SnapPosition\nexport type SnapTarget = SnapPosition | SnapFunction\nexport interface SnapOptions {\n targets: SnapTarget[] | null\n // target range\n range: number\n // self points for snapping. [0,0] = top left, [1,1] = bottom right\n relativePoints: Point[] | null\n // startCoords = offset snapping from drag start page position\n offset: Point | RectResolvable<[Interaction]> | 'startCoords' | null\n offsetWithOrigin?: boolean\n origin: RectResolvable<[Element]> | Point | null\n endOnly?: boolean\n enabled?: boolean\n}\n\nexport type SnapState = ModifierState<\nSnapOptions,\n{\n offsets?: Offset[]\n closest?: any\n targetFields?: string[][]\n}\n>\n\nfunction start (arg: ModifierArg<SnapState>) {\n const { interaction, interactable, element, rect, state, startOffset } = arg\n const { options } = state\n const origin = options.offsetWithOrigin ? getOrigin(arg) : { x: 0, y: 0 }\n\n let snapOffset: Point\n\n if (options.offset === 'startCoords') {\n snapOffset = {\n x: interaction.coords.start.page.x,\n y: interaction.coords.start.page.y,\n }\n } else {\n const offsetRect = resolveRectLike(options.offset as any, interactable, element, [interaction])\n\n snapOffset = rectToXY(offsetRect) || { x: 0, y: 0 }\n snapOffset.x += origin.x\n snapOffset.y += origin.y\n }\n\n const { relativePoints } = options\n\n state.offsets =\n rect && relativePoints && relativePoints.length\n ? relativePoints.map((relativePoint, index) => ({\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 index: 0,\n relativePoint: null,\n x: snapOffset.x,\n y: snapOffset.y,\n },\n ]\n}\n\nfunction set (arg: ModifierArg<SnapState>) {\n const { interaction, coords, state } = arg\n const { options, offsets } = state\n\n const origin = getOriginXY(interaction.interactable, interaction.element, interaction.prepared.name)\n const page = extend({}, coords)\n const targets = []\n\n if (!options.offsetWithOrigin) {\n page.x -= origin.x\n page.y -= origin.y\n }\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 let target: SnapPosition\n\n if (is.func(snapTarget)) {\n target = snapTarget(relativeX, relativeY, interaction._proxy, offset, index)\n } else {\n target = snapTarget\n }\n\n if (!target) {\n continue\n }\n\n targets.push({\n x: (is.number(target.x) ? target.x : relativeX) + offset.x,\n y: (is.number(target.y) ? target.y : relativeY) + offset.y,\n\n range: is.number(target.range) ? target.range : options.range,\n source: snapTarget,\n index,\n offset,\n })\n }\n }\n\n const closest = {\n target: null,\n inRange: false,\n distance: 0,\n range: 0,\n delta: { x: 0, y: 0 },\n }\n\n for (const target of targets) {\n const range = target.range\n const dx = target.x - page.x\n const dy = target.y - page.y\n const distance = 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 (\n !closest.target ||\n (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 ) {\n closest.target = target\n closest.distance = distance\n closest.range = range\n closest.inRange = inRange\n closest.delta.x = dx\n closest.delta.y = dy\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 return closest\n}\n\nfunction getOrigin (arg: Partial<ModifierArg<SnapState>>) {\n const { element } = arg.interaction\n const optionsOrigin = rectToXY(resolveRectLike(arg.state.options.origin as any, null, null, [element]))\n const origin = optionsOrigin || getOriginXY(arg.interactable, element, arg.interaction.prepared.name)\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 makeModifier(snap, 'snap')\nexport { snap }\n","// This module allows snapping of the size of targets during resize\n// interactions.\n\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg } from '../types'\n\nimport type { SnapOptions, SnapState } from './pointer'\nimport { snap } from './pointer'\n\nexport type SnapSizeOptions = Pick<SnapOptions, 'targets' | 'offset' | 'endOnly' | 'range' | 'enabled'>\n\nfunction start (arg: ModifierArg<SnapState>) {\n const { state, edges } = arg\n const { options } = state\n\n if (!edges) {\n return null\n }\n\n arg.state = {\n options: {\n targets: null,\n relativePoints: [\n {\n x: edges.left ? 0 : 1,\n y: edges.top ? 0 : 1,\n },\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 } else {\n target = snapTarget\n }\n\n if (!target) {\n continue\n }\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 const returnValue = snap.set(arg)\n\n state.options = options\n\n return returnValue\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 makeModifier(snapSize, 'snapSize')\nexport { snapSize }\n","/**\n * @module modifiers/snapEdges\n *\n * @description\n * WOW> This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * ```js\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 */\n\nimport clone from '@interactjs/utils/clone'\nimport extend from '@interactjs/utils/extend'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierModule } from '../types'\n\nimport type { SnapOptions, SnapState } from './pointer'\nimport { snapSize } from './size'\n\nexport type SnapEdgesOptions = Pick<SnapOptions, 'targets' | 'range' | 'offset' | 'endOnly' | 'enabled'>\n\nfunction start (arg: ModifierArg<SnapState>) {\n const { edges } = arg\n\n if (!edges) {\n return null\n }\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\nconst snapEdges: ModifierModule<SnapEdgesOptions, SnapState, ReturnType<typeof snapSize.set>> = {\n start,\n set: snapSize.set,\n defaults: extend(clone(snapSize.defaults), {\n targets: null,\n range: null,\n offset: { x: 0, y: 0 },\n } as const),\n}\n\nexport default makeModifier(snapEdges, 'snapEdges')\nexport { snapEdges }\n","/* eslint-disable n/no-extraneous-import, import/no-unresolved */\nimport aspectRatio from './aspectRatio'\nimport avoid from './avoid/avoid'\nimport restrictEdges from './restrict/edges'\nimport restrict from './restrict/pointer'\nimport restrictRect from './restrict/rect'\nimport restrictSize from './restrict/size'\nimport rubberband from './rubberband/rubberband'\nimport snapEdges from './snap/edges'\nimport snap from './snap/pointer'\nimport snapSize from './snap/size'\nimport spring from './spring/spring'\nimport transform from './transform/transform'\n\nexport default {\n aspectRatio,\n restrictEdges,\n restrict,\n restrictRect,\n restrictSize,\n snapEdges,\n snap,\n snapSize,\n\n spring,\n avoid,\n transform,\n rubberband,\n}\n","import type { Plugin } from '@interactjs/core/scope'\nimport snappers from '@interactjs/snappers/plugin'\n\nimport all from './all'\nimport base from './base'\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n modifiers: typeof all\n }\n}\n\nconst modifiers: Plugin = {\n id: 'modifiers',\n install (scope) {\n const { interactStatic: interact } = scope\n\n scope.usePlugin(base)\n scope.usePlugin(snappers)\n\n interact.modifiers = all\n\n // for backwrads compatibility\n for (const type in all) {\n const { _defaults, _methods } = all[type as keyof typeof all]\n\n ;(_defaults as any)._methods = _methods\n ;(scope.defaults.perAction as any)[type] = _defaults\n }\n },\n}\n\nexport default modifiers\n","import { BaseEvent } from '@interactjs/core/BaseEvent'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { PointerEventType, PointerType, Point } from '@interactjs/core/types'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nexport default class PointerEvent<T extends string = any> extends BaseEvent<never> {\n declare type: T\n declare originalEvent: PointerEventType\n declare pointerId: number\n declare pointerType: string\n declare double: boolean\n declare pageX: number\n declare pageY: number\n declare clientX: number\n declare clientY: number\n declare dt: number\n declare eventable: any;\n [key: string]: any\n\n /** */\n constructor (\n type: T,\n pointer: PointerType | PointerEvent<any>,\n event: PointerEventType,\n eventTarget: Node,\n interaction: Interaction<never>,\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 =\n !!interaction.prevTap &&\n interaction.prevTap.type !== 'doubletap' &&\n interaction.prevTap.target === this.target &&\n interval < 500\n } else if (type === 'doubletap') {\n this.dt = (pointer as PointerEvent<'tap'>).timeStamp - interaction.tapTime\n this.double = true\n }\n }\n\n _subtractOrigin ({ x: originX, y: originY }: Point) {\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 }: Point) {\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\nexport { PointerEvent }\n","import type { Eventable } from '@interactjs/core/Eventable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { Point, PointerType, PointerEventType, Element } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\n\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?: Point | string | 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<string>\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/options' {\n interface ActionDefaults {\n pointerEvents: Options\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'pointerEvents:new': { pointerEvent: PointerEvent<any> }\n 'pointerEvents:fired': {\n interaction: Interaction<null>\n pointer: PointerType | PointerEvent<any>\n event: PointerEventType | PointerEvent<any>\n eventTarget: Node\n pointerEvent: PointerEvent<any>\n targets?: EventTargetList\n type: string\n }\n 'pointerEvents:collect-targets': {\n interaction: Interaction<any>\n pointer: PointerType | PointerEvent<any>\n event: PointerEventType | PointerEvent<any>\n eventTarget: Node\n targets?: EventTargetList\n type: string\n path: Node[]\n node: null\n }\n }\n}\n\nconst defaults: PointerEventOptions = {\n holdDuration: 600,\n ignoreFrom: null,\n allowFrom: null,\n origin: { x: 0, y: 0 },\n}\n\nconst pointerEvents: Plugin = {\n id: 'pointer-events/base',\n before: ['inertia', 'modifiers', 'auto-start', 'actions'],\n install,\n listeners: {\n 'interactions:new': addInteractionProps,\n 'interactions:update-pointer': addHoldInfo,\n 'interactions:move': moveAndClearHold,\n 'interactions:down': (arg, scope) => {\n downAndStartHold(arg, scope)\n fire(arg, scope)\n },\n 'interactions:up': (arg, scope) => {\n clearHold(arg)\n fire(arg, scope)\n tapAfterUp(arg, scope)\n },\n 'interactions:cancel': (arg, scope) => {\n clearHold(arg)\n fire(arg, scope)\n },\n },\n PointerEvent,\n fire,\n collectEventTargets,\n defaults,\n types: {\n down: true,\n move: true,\n up: true,\n cancel: true,\n tap: true,\n doubletap: true,\n hold: true,\n } as { [type: string]: true },\n}\n\nfunction fire<T extends string> (\n arg: {\n pointer: PointerType | PointerEvent<any>\n event: PointerEventType | PointerEvent<any>\n eventTarget: Node\n interaction: Interaction<never>\n type: T\n targets?: EventTargetList\n },\n scope: Scope,\n) {\n const { interaction, pointer, event, eventTarget, type, targets = collectEventTargets(arg, scope) } = arg\n\n const pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction, scope.now())\n\n scope.fire('pointerEvents:new', { pointerEvent })\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 = 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 (\n pointerEvent.immediatePropagationStopped ||\n (pointerEvent.propagationStopped &&\n i + 1 < targets.length &&\n targets[i + 1].node !== pointerEvent.currentTarget)\n ) {\n break\n }\n }\n\n scope.fire('pointerEvents: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 {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'doubletap',\n },\n scope,\n )\n : pointerEvent\n\n interaction.prevTap = prevTap\n interaction.tapTime = prevTap.timeStamp\n }\n\n return pointerEvent\n}\n\nfunction collectEventTargets<T extends string> (\n {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n }: {\n interaction: Interaction<any>\n pointer: PointerType | PointerEvent<any>\n event: PointerEventType | PointerEvent<any>\n eventTarget: Node\n type: T\n },\n scope: Scope,\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 (\n type === 'tap' &&\n (interaction.pointerWasMoved ||\n // or if the pointerup target is different to the pointerdown target\n !(pointerInfo && pointerInfo.downTarget === eventTarget))\n ) {\n return []\n }\n\n const path = domUtils.getPath(eventTarget as Element | Document)\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 scope.fire('pointerEvents:collect-targets', signalArg)\n }\n\n if (type === 'hold') {\n signalArg.targets = signalArg.targets.filter(\n (target) => target.eventable.options.holdDuration === interaction.pointers[pointerIndex]?.hold.duration,\n )\n }\n\n return signalArg.targets\n}\n\nfunction addInteractionProps ({ 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\nfunction addHoldInfo ({ down, pointerInfo }: SignalArgs['interactions:update-pointer']) {\n if (!down && pointerInfo.hold) {\n return\n }\n\n pointerInfo.hold = { duration: Infinity, timeout: null }\n}\n\nfunction clearHold ({ interaction, pointerIndex }) {\n const hold = interaction.pointers[pointerIndex].hold\n\n if (hold && hold.timeout) {\n clearTimeout(hold.timeout)\n hold.timeout = null\n }\n}\n\nfunction moveAndClearHold (arg: SignalArgs['interactions:move'], scope: Scope) {\n const { interaction, pointer, event, eventTarget, duplicate } = arg\n\n if (!duplicate && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {\n if (interaction.pointerIsDown) {\n clearHold(arg)\n }\n\n fire(\n {\n interaction,\n pointer,\n event,\n eventTarget: eventTarget as Element,\n type: 'move',\n },\n scope,\n )\n }\n}\n\nfunction downAndStartHold (\n { interaction, pointer, event, eventTarget, pointerIndex }: SignalArgs['interactions:down'],\n scope: Scope,\n) {\n const timer = interaction.pointers[pointerIndex].hold\n const path = domUtils.getPath(eventTarget as Element | Document)\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 scope.fire('pointerEvents: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 {\n interaction,\n eventTarget,\n pointer,\n event,\n type: 'hold',\n },\n scope,\n )\n }, minDuration)\n}\n\nfunction tapAfterUp (\n { interaction, pointer, event, eventTarget }: SignalArgs['interactions:up'],\n scope: Scope,\n) {\n if (!interaction.pointerWasMoved) {\n fire({ interaction, eventTarget, pointer, event, type: 'tap' }, scope)\n }\n}\n\nfunction install (scope: Scope) {\n scope.pointerEvents = pointerEvents\n scope.defaults.actions.pointerEvents = pointerEvents.defaults\n extend(scope.actions.phaselessTypes, pointerEvents.types)\n}\n\nexport default pointerEvents\n","import type Interaction from '@interactjs/core/Interaction'\nimport type { ListenerMap, Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\n\nimport type PointerEvent from './PointerEvent'\nimport basePlugin from './base'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n holdIntervalHandle?: any\n }\n}\n\ndeclare module '@interactjs/pointer-events/PointerEvent' {\n interface PointerEvent<T extends string = any> {\n count?: number\n }\n}\n\ndeclare module '@interactjs/pointer-events/base' {\n interface PointerEventOptions {\n holdRepeatInterval?: number\n }\n}\n\nfunction install (scope: Scope) {\n scope.usePlugin(basePlugin)\n\n const { pointerEvents } = scope\n\n // don't repeat by default\n pointerEvents.defaults.holdRepeatInterval = 0\n pointerEvents.types.holdrepeat = scope.actions.phaselessTypes.holdrepeat = true\n}\n\nfunction onNew ({ pointerEvent }: { pointerEvent: PointerEvent<any> }) {\n if (pointerEvent.type !== 'hold') return\n\n pointerEvent.count = (pointerEvent.count || 0) + 1\n}\n\nfunction onFired (\n { interaction, pointerEvent, eventTarget, targets }: SignalArgs['pointerEvents:fired'],\n scope: 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 {\n interaction,\n eventTarget,\n type: 'hold',\n pointer: pointerEvent,\n event: pointerEvent,\n },\n scope,\n )\n }, interval)\n}\n\nfunction endHoldRepeat ({ interaction }: { interaction: 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\nconst holdRepeat: Plugin = {\n id: 'pointer-events/holdRepeat',\n install,\n listeners: ['move', 'up', 'cancel', 'endall'].reduce(\n (acc, enderTypes) => {\n ;(acc as any)[`pointerEvents:${enderTypes}`] = endHoldRepeat\n return acc\n },\n {\n 'pointerEvents:new': onNew,\n 'pointerEvents:fired': onFired,\n } as ListenerMap,\n ),\n}\n\nexport default holdRepeat\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Element } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\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 { Interactable } = scope\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\nconst plugin: Plugin = {\n id: 'pointer-events/interactableTargets',\n install,\n listeners: {\n 'pointerEvents:collect-targets': ({ targets, node, type, eventTarget }, scope) => {\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 ) {\n targets.push({\n node,\n eventable,\n props: { interactable },\n })\n }\n })\n },\n\n 'interactable:new': ({ interactable }) => {\n interactable.events.getRect = function (element: Element) {\n return interactable.getRect(element)\n }\n },\n\n 'interactable:set': ({ interactable, options }, scope) => {\n extend(interactable.events.options, scope.pointerEvents.defaults)\n extend(interactable.events.options, options.pointerEvents || {})\n },\n },\n}\n\nexport default plugin\n","import type { Plugin } from '@interactjs/core/scope'\n\nimport * as pointerEvents from './base'\nimport holdRepeat from './holdRepeat'\nimport interactableTargets from './interactableTargets'\n\nconst plugin: Plugin = {\n id: 'pointer-events',\n install (scope) {\n scope.usePlugin(pointerEvents)\n scope.usePlugin(holdRepeat)\n scope.usePlugin(interactableTargets)\n },\n}\n\nexport default plugin\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { DoAnyPhaseArg, Interaction } from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, ActionProps, Element } from '@interactjs/core/types'\nimport * as arr from '@interactjs/utils/arr'\nimport is from '@interactjs/utils/is'\nimport { copyAction } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\nimport { tlbrToXywh } from '@interactjs/utils/rect'\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:before-action-reflow': Omit<DoAnyPhaseArg, 'iEvent'>\n 'interactions:action-reflow': DoAnyPhaseArg\n 'interactions:after-action-reflow': DoAnyPhaseArg\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n reflow: <T extends ActionName>(action: ActionProps<T>) => ReturnType<typeof doReflow>\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n _reflowPromise: Promise<void>\n _reflowResolve: (...args: unknown[]) => void\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface PhaseMap {\n reflow?: true\n }\n}\n\nexport function install (scope: Scope) {\n const {\n /** @lends Interactable */\n Interactable,\n } = scope\n\n scope.actions.phases.reflow = true\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 } A promise that resolves to the `Interactable` when actions on all targets have ended\n */\n Interactable.prototype.reflow = function (action: ActionProps) {\n return doReflow(this, action, scope)\n }\n}\n\nfunction doReflow<T extends ActionName> (\n interactable: Interactable,\n action: ActionProps<T>,\n scope: Scope,\n): Promise<Interactable> {\n const elements = (\n is.string(interactable.target)\n ? arr.from(interactable._context.querySelectorAll(interactable.target))\n : [interactable.target]\n ) as Element[]\n\n // tslint:disable-next-line variable-name\n const Promise = (scope.window as any).Promise\n const promises: Array<Promise<null>> | null = Promise ? [] : null\n\n for (const element of elements) {\n const rect = interactable.getRect(element as HTMLElement | SVGElement)\n\n if (!rect) {\n break\n }\n\n const runningInteraction = arr.find(scope.interactions.list, (interaction: Interaction) => {\n return (\n interaction.interacting() &&\n interaction.interactable === interactable &&\n interaction.element === element &&\n interaction.prepared.name === action.name\n )\n })\n let reflowPromise: Promise<null>\n\n if (runningInteraction) {\n runningInteraction.move()\n\n if (promises) {\n reflowPromise =\n runningInteraction._reflowPromise ||\n new Promise((resolve: any) => {\n runningInteraction._reflowResolve = resolve\n })\n }\n } else {\n const xywh = 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<T>(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<T extends ActionName> (\n scope: Scope,\n interactable: Interactable,\n element: Element,\n action: ActionProps<T>,\n event: any,\n) {\n const interaction = scope.interactions.new({ pointerType: 'reflow' })\n const signalArg = {\n interaction,\n event,\n pointer: event,\n eventTarget: element,\n phase: 'reflow',\n } as const\n\n interaction.interactable = interactable\n interaction.element = element\n interaction.prevEvent = event\n interaction.updatePointer(event, event, element, true)\n pointerUtils.setZeroCoords(interaction.coords.delta)\n\n copyAction(interaction.prepared, action)\n interaction._doPhase(signalArg)\n\n const { Promise } = scope.window as unknown as { Promise: PromiseConstructor }\n const reflowPromise = Promise\n ? new Promise<undefined>((resolve) => {\n interaction._reflowResolve = resolve\n })\n : undefined\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 } else {\n interaction.stop()\n interaction._reflowResolve()\n }\n\n interaction.removePointer(event, event)\n\n return reflowPromise\n}\n\nconst reflow: Plugin = {\n id: 'reflow',\n install,\n listeners: {\n // remove completed reflow interactions\n 'interactions:stop': ({ interaction }, scope) => {\n if (interaction.pointerType === 'reflow') {\n if (interaction._reflowResolve) {\n interaction._reflowResolve()\n }\n\n arr.remove(scope.interactions.list, interaction)\n }\n },\n },\n}\n\nexport default reflow\n","import actions from '@interactjs/actions/plugin'\nimport autoScroll from '@interactjs/auto-scroll/plugin'\nimport autoStart from '@interactjs/auto-start/plugin'\nimport interactablePreventDefault from '@interactjs/core/interactablePreventDefault'\nimport devTools from '@interactjs/dev-tools/plugin'\nimport inertia from '@interactjs/inertia/plugin'\nimport interact from '@interactjs/interact'\nimport modifiers from '@interactjs/modifiers/plugin'\nimport offset from '@interactjs/offset/plugin'\nimport pointerEvents from '@interactjs/pointer-events/plugin'\nimport reflow from '@interactjs/reflow/plugin'\n\ninteract.use(interactablePreventDefault)\n\ninteract.use(offset)\n\n// pointerEvents\ninteract.use(pointerEvents)\n\n// inertia\ninteract.use(inertia)\n\n// snap, resize, etc.\ninteract.use(modifiers)\n\n// autoStart, hold\ninteract.use(autoStart)\n\n// drag and drop, resize, gesture\ninteract.use(actions)\n\n// autoScroll\ninteract.use(autoScroll)\n\n// reflow\ninteract.use(reflow)\n\n// eslint-disable-next-line no-undef\nif (process.env.NODE_ENV !== 'production') {\n interact.use(devTools)\n}\n\nexport default interact\n;(interact as any).default = interact\n\nconst _ = {\n actions,\n autoScroll,\n autoStart,\n interactablePreventDefault,\n devTools,\n inertia,\n interact,\n modifiers,\n offset,\n pointerEvents,\n reflow,\n}\n\n// Exported so that the related module augmentations will be referenced in\n// generated .d.ts file\nexport type __internal_plugin_types__ = typeof _\n","// eslint-disable-next-line import/no-extraneous-dependencies\nimport interact from '@interactjs/interactjs'\n\nexport default interact\n\nif (typeof module === 'object' && !!module) {\n try {\n module.exports = interact\n } catch {}\n}\n\n;(interact as any).default = interact\n","\nreturn _$index_79;\n\n});\n"]}
|