From cd9dc36c11b37c1abfdbfb54fab9f45c559a640e Mon Sep 17 00:00:00 2001 From: Taye Adeyemi Date: Thu, 11 Oct 2018 19:51:42 +0200 Subject: [PATCH] v1.4.0-alpha.16+sha.5b3c738 --- lerna.json | 2 +- package-lock.json | 2 +- package.json | 2 +- packages/actions/package.json | 12 +++--- packages/autoScroll/package.json | 8 ++-- packages/autoStart/package.json | 12 +++--- packages/core/package.json | 8 ++-- packages/inertia/package.json | 12 +++--- packages/interact/package.json | 40 +++++++++---------- packages/interactjs/dist/docs/doclets.json | 2 +- .../dist/docs/packages_actions_resize.js.html | 3 ++ .../packages_interactjs_dist_interact.js.html | 4 +- packages/interactjs/dist/interact.js | 29 ++++++++++---- packages/interactjs/dist/interact.js.map | 2 +- packages/interactjs/dist/interact.min.js | 10 ++--- packages/interactjs/dist/interact.min.js.map | 2 +- packages/interactjs/package.json | 6 +-- packages/modifiers/package.json | 12 +++--- packages/pointerEvents/package.json | 12 +++--- packages/reflow/package.json | 12 +++--- packages/utils/package.json | 4 +- 21 files changed, 107 insertions(+), 89 deletions(-) diff --git a/lerna.json b/lerna.json index 2949997ea..01d15ebd1 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "1.4.0-alpha.15", + "version": "1.4.0-alpha.16", "packages": [ ".", "packages/*" diff --git a/package-lock.json b/package-lock.json index 3636c07db..deb6ca3be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@interactjs/_dev", - "version": "1.4.0-alpha.15+sha.8940ff6", + "version": "1.4.0-alpha.16+sha.5b3c738", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 4dab18b00..b87503359 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@interactjs/_dev", "private": "true", - "version": "1.4.0-alpha.15+sha.8940ff6", + "version": "1.4.0-alpha.16+sha.5b3c738", "bin": { "_dev": "scripts/_dev", "@build": "scripts/build.js", diff --git a/packages/actions/package.json b/packages/actions/package.json index d626468ea..82ee33d46 100644 --- a/packages/actions/package.json +++ b/packages/actions/package.json @@ -1,14 +1,14 @@ { "name": "@interactjs/actions", - "version": "1.4.0-alpha.15+sha.8940ff6", + "version": "1.4.0-alpha.16+sha.5b3c738", "peerDependencies": { - "@interactjs/core": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/utils": "1.4.0-alpha.15+sha.8940ff6" + "@interactjs/core": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/utils": "1.4.0-alpha.16+sha.5b3c738" }, "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/core": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/utils": "1.4.0-alpha.15+sha.8940ff6" + "@interactjs/_dev": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/core": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/utils": "1.4.0-alpha.16+sha.5b3c738" }, "publishConfig": { "access": "public" diff --git a/packages/autoScroll/package.json b/packages/autoScroll/package.json index 32ec8bdfd..f326083b6 100644 --- a/packages/autoScroll/package.json +++ b/packages/autoScroll/package.json @@ -1,12 +1,12 @@ { "name": "@interactjs/auto-scroll", - "version": "1.4.0-alpha.15+sha.8940ff6", + "version": "1.4.0-alpha.16+sha.5b3c738", "peerDependencies": { - "@interactjs/utils": "1.4.0-alpha.15+sha.8940ff6" + "@interactjs/utils": "1.4.0-alpha.16+sha.5b3c738" }, "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/utils": "1.4.0-alpha.15+sha.8940ff6" + "@interactjs/_dev": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/utils": "1.4.0-alpha.16+sha.5b3c738" }, "publishConfig": { "access": "public" diff --git a/packages/autoStart/package.json b/packages/autoStart/package.json index 65e47da85..8d2e2eac6 100644 --- a/packages/autoStart/package.json +++ b/packages/autoStart/package.json @@ -1,14 +1,14 @@ { "name": "@interactjs/auto-start", - "version": "1.4.0-alpha.15+sha.8940ff6", + "version": "1.4.0-alpha.16+sha.5b3c738", "peerDependencies": { - "@interactjs/core": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/utils": "1.4.0-alpha.15+sha.8940ff6" + "@interactjs/core": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/utils": "1.4.0-alpha.16+sha.5b3c738" }, "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/core": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/utils": "1.4.0-alpha.15+sha.8940ff6" + "@interactjs/_dev": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/core": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/utils": "1.4.0-alpha.16+sha.5b3c738" }, "publishConfig": { "access": "public" diff --git a/packages/core/package.json b/packages/core/package.json index 9297b429a..486a73d03 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,12 +1,12 @@ { "name": "@interactjs/core", - "version": "1.4.0-alpha.15+sha.8940ff6", + "version": "1.4.0-alpha.16+sha.5b3c738", "peerDependencies": { - "@interactjs/utils": "1.4.0-alpha.15+sha.8940ff6" + "@interactjs/utils": "1.4.0-alpha.16+sha.5b3c738" }, "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/utils": "1.4.0-alpha.15+sha.8940ff6" + "@interactjs/_dev": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/utils": "1.4.0-alpha.16+sha.5b3c738" }, "publishConfig": { "access": "public" diff --git a/packages/inertia/package.json b/packages/inertia/package.json index 9b3d6d1f5..1a7421a39 100644 --- a/packages/inertia/package.json +++ b/packages/inertia/package.json @@ -1,14 +1,14 @@ { "name": "@interactjs/inertia", - "version": "1.4.0-alpha.15+sha.8940ff6", + "version": "1.4.0-alpha.16+sha.5b3c738", "peerDependencies": { - "@interactjs/modifiers": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/utils": "1.4.0-alpha.15+sha.8940ff6" + "@interactjs/modifiers": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/utils": "1.4.0-alpha.16+sha.5b3c738" }, "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/modifiers": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/utils": "1.4.0-alpha.15+sha.8940ff6" + "@interactjs/_dev": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/modifiers": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/utils": "1.4.0-alpha.16+sha.5b3c738" }, "publishConfig": { "access": "public" diff --git a/packages/interact/package.json b/packages/interact/package.json index 9ab22cbab..eb0a77aef 100644 --- a/packages/interact/package.json +++ b/packages/interact/package.json @@ -1,28 +1,28 @@ { "name": "@interactjs/interact", - "version": "1.4.0-alpha.15+sha.8940ff6", + "version": "1.4.0-alpha.16+sha.5b3c738", "peerDependencies": { - "@interactjs/actions": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/auto-scroll": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/auto-start": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/core": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/inertia": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/modifiers": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/pointer-events": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/reflow": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/utils": "1.4.0-alpha.15+sha.8940ff6" + "@interactjs/actions": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/auto-scroll": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/auto-start": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/core": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/inertia": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/modifiers": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/pointer-events": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/reflow": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/utils": "1.4.0-alpha.16+sha.5b3c738" }, "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/actions": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/auto-scroll": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/auto-start": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/core": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/inertia": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/modifiers": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/pointer-events": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/reflow": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/utils": "1.4.0-alpha.15+sha.8940ff6" + "@interactjs/_dev": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/actions": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/auto-scroll": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/auto-start": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/core": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/inertia": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/modifiers": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/pointer-events": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/reflow": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/utils": "1.4.0-alpha.16+sha.5b3c738" }, "publishConfig": { "access": "public" diff --git a/packages/interactjs/dist/docs/doclets.json b/packages/interactjs/dist/docs/doclets.json index b840bf547..335009301 100644 --- a/packages/interactjs/dist/docs/doclets.json +++ b/packages/interactjs/dist/docs/doclets.json @@ -1 +1 @@ -[{"comment":"/**\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 */","meta":{"range":[62307,62599],"filename":"interact.js","lineno":2024,"columnno":2,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100030379","name":"interact.dynamicDrop","type":"FunctionExpression","funcscope":"~__install_3","paramnames":["newValue"]},"vars":{"scope.dynamicDrop":"module:interact~scope.dynamicDrop"},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Returns or sets whether the dimensions of dropzone elements are calculated\non every dragmove or only on dragstart for the default dropChecker

","params":[{"type":{"names":["boolean"]},"optional":true,"description":"

True to check on each move. False to check only\nbefore start

","name":"newValue"}],"returns":[{"type":{"names":["boolean","interact"]},"description":"

The current setting or interact

"}],"name":"dynamicDrop","longname":"~__install_3~interact.dynamicDrop","kind":"function","memberof":"~__install_3~interact","scope":"static","___id":"T000002R002957","___s":true,"attribs":"(static) ","id":".dynamicDrop","signature":"(newValueopt) → {boolean|interact}","ancestors":[]},{"comment":"/**\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 */","meta":{"range":[85057,85494],"filename":"interact.js","lineno":2728,"columnno":2,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100033507","name":"Interactable.prototype.gesturable","type":"FunctionExpression","funcscope":"~__install_4","paramnames":["options"]},"vars":{"this.options.gesture.enabled":"~__install_4~Interactable#gesturable#options.gesture.enabled"},"shortpath":"packages/interactjs/dist/interact.js"},"description":"
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\nvar isGestureable = interact(element).gesturable();\n
\n

Gets or sets whether multitouch gestures can be performed on the target

","params":[{"type":{"names":["boolean","object"]},"optional":true,"description":"

true/false or An object with event\nlisteners to be fired on gesture events (makes the Interactable gesturable)

","name":"options"}],"returns":[{"type":{"names":["boolean","Interactable"]},"description":"

A boolean indicating if this can be the\ntarget of gesture events, or this Interactable

"}],"name":"gesturable","longname":"~__install_4~Interactable#gesturable","kind":"function","memberof":"~__install_4~Interactable","scope":"instance","___id":"T000002R003265","___s":true,"attribs":"","id":"gesturable","signature":"(optionsopt) → {boolean|Interactable}","ancestors":[]},{"comment":"/**\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 */","meta":{"range":[95230,96121],"filename":"interact.js","lineno":3025,"columnno":2,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100034723","name":"Interactable.prototype.resizable","type":"FunctionExpression","funcscope":"~__install_6","paramnames":["options"]},"vars":{"this.options.resize.enabled":"~__install_6~Interactable#resizable#options.resize.enabled","this.options.resize.axis":"~__install_6~Interactable#resizable#options.resize.axis","this.options.resize.preserveAspectRatio":"~__install_6~Interactable#resizable#options.resize.preserveAspectRatio","this.options.resize.square":"~__install_6~Interactable#resizable#options.resize.square"},"shortpath":"packages/interactjs/dist/interact.js"},"description":"
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\nvar isResizeable = interact(element).resizable();\n
\n

Gets or sets whether resize actions can be performed on the target

","params":[{"type":{"names":["boolean","object"]},"optional":true,"description":"

true/false or An object with event\nlisteners to be fired on resize events (object makes the Interactable\nresizable)

","name":"options"}],"returns":[{"type":{"names":["boolean","Interactable"]},"description":"

A boolean indicating if this can be the\ntarget of resize elements, or this Interactable

"}],"name":"resizable","longname":"~__install_6~Interactable#resizable","kind":"function","memberof":"~__install_6~Interactable","scope":"instance","___id":"T000002R003400","___s":true,"attribs":"","id":"resizable","signature":"(optionsopt) → {boolean|Interactable}","ancestors":[]},{"comment":"/**\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 * Gets 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 */","meta":{"range":[118066,118365],"filename":"interact.js","lineno":3747,"columnno":2,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100037731","name":"Interactable.prototype.actionChecker","type":"FunctionExpression","funcscope":"~__install_8","paramnames":["checker"]},"vars":{"this.options.actionChecker":"~__install_8~Interactable#actionChecker#options.actionChecker"},"shortpath":"packages/interactjs/dist/interact.js"},"description":"
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

Gets or sets the function used to check action to be performed on\npointerDown

","params":[{"type":{"names":["function","null"]},"optional":true,"description":"

A function which takes a pointer event,\ndefaultAction string, interactable, element and interaction as parameters\nand returns an object with name property 'drag' 'resize' or 'gesture' and\noptionally an edges object with boolean 'top', 'left', 'bottom' and right\nprops.

","name":"checker"}],"returns":[{"type":{"names":["function","Interactable"]},"description":"

The checker function or this Interactable

"}],"name":"actionChecker","longname":"~__install_8~Interactable#actionChecker","kind":"function","memberof":"~__install_8~Interactable","scope":"instance","___id":"T000002R003663","___s":true,"attribs":"","id":"actionChecker","signature":"(checkeropt) → {function|Interactable}","ancestors":[]},{"comment":"/**\n * ```js\n *\n * @deprecated\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to allow from any element\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */","meta":{"range":[115622,115865],"filename":"interact.js","lineno":3675,"columnno":2,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100037559","name":"Interactable.prototype.allowFrom","type":"CallExpression","funcscope":"~__install_8","value":"","paramnames":[]},"shortpath":"packages/interactjs/dist/interact.js"},"description":"
","deprecated":"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\nCSS selector or Element.\n\nDon't use this method. Instead set the `allowFrom` option for each action\nor for `pointerEvents`","examples":[{"caption":"","code":"interact(targett)\n .resizable({\n allowFrom: '.resize-handle',\n .pointerEvents({\n allowFrom: '.handle',,\n });"}],"params":[{"type":{"names":["string","Element","null"]},"optional":true,"description":"

a CSS selector string, an\nElement or null to allow from any element

","name":"newValue"}],"returns":[{"type":{"names":["string","Element","object"]},"description":"

The current allowFrom value or this\nInteractable

"}],"name":"allowFrom","longname":"~__install_8~Interactable#allowFrom","kind":"member","memberof":"~__install_8~Interactable","scope":"instance","___id":"T000002R003659","___s":true,"attribs":"","id":"allowFrom","ancestors":[],"signature":""},{"comment":"/**\n * ```js\n * interact(element, { ignoreFrom: document.getElementById('no-action') });\n * // or\n * interact(element).ignoreFrom('input, textarea, a');\n * ```\n * @deprecated\n * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n * of it's parents match the given CSS selector or Element, no\n * drag/resize/gesture is started.\n *\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to not ignore any elements\n * @return {string | Element | object} The current ignoreFrom value or this\n * Interactable\n */","meta":{"range":[114635,114882],"filename":"interact.js","lineno":3647,"columnno":2,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100037535","name":"Interactable.prototype.ignoreFrom","type":"CallExpression","funcscope":"~__install_8","value":"","paramnames":[]},"shortpath":"packages/interactjs/dist/interact.js"},"description":"
interact(element, { ignoreFrom: document.getElementById('no-action') });\n// or\ninteract(element).ignoreFrom('input, textarea, a');\n
","deprecated":"If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\nof it's parents match the given CSS selector or Element, no\ndrag/resize/gesture is started.\n\nDon't use this method. Instead set the `ignoreFrom` option for each action\nor for `pointerEvents`","examples":[{"caption":"","code":"interact(targett)\n .draggable({\n ignoreFrom: 'input, textarea, a[href]'',\n })\n .pointerEvents({\n ignoreFrom: '[no-pointer]',\n });"}],"params":[{"type":{"names":["string","Element","null"]},"optional":true,"description":"

a CSS selector string, an\nElement or null to not ignore any elements

","name":"newValue"}],"returns":[{"type":{"names":["string","Element","object"]},"description":"

The current ignoreFrom value or this\nInteractable

"}],"name":"ignoreFrom","longname":"~__install_8~Interactable#ignoreFrom","kind":"member","memberof":"~__install_8~Interactable","scope":"instance","___id":"T000002R003658","___s":true,"attribs":"","id":"ignoreFrom","ancestors":[],"signature":""},{"comment":"/**\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 */","meta":{"range":[118654,118949],"filename":"interact.js","lineno":3769,"columnno":2,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100037778","name":"Interactable.prototype.styleCursor","type":"FunctionExpression","funcscope":"~__install_8","paramnames":["newValue"]},"vars":{"this.options.styleCursor":"~__install_8~Interactable#styleCursor#options.styleCursor"},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Returns or sets whether the the cursor should be changed depending on the\naction that would be performed if the mouse were pressed and dragged.

","params":[{"type":{"names":["boolean"]},"optional":true,"name":"newValue"}],"returns":[{"type":{"names":["boolean","Interactable"]},"description":"

The current setting or this Interactable

"}],"name":"styleCursor","longname":"~__install_8~Interactable#styleCursor","kind":"function","memberof":"~__install_8~Interactable","scope":"instance","___id":"T000002R003665","___s":true,"attribs":"","id":"styleCursor","signature":"(newValueopt) → {boolean|Interactable}","ancestors":[]},{"comment":"/**\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 */","meta":{"range":[137727,137835],"filename":"interact.js","lineno":4383,"columnno":2,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100040316","name":"Interactable.prototype.preventDefault","type":"FunctionExpression","funcscope":"~__install_18","paramnames":["newValue"]},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Returns or sets whether to prevent the browser's default behaviour in\nresponse to pointer events. Can be set to:

\n
    \n
  • 'always' to always prevent
  • \n
  • 'never' to never prevent
  • \n
  • 'auto' to let interact.js try to determine what would be best
  • \n
","params":[{"type":{"names":["string"]},"optional":true,"description":"

'always', 'never' or 'auto'

","name":"newValue"}],"returns":[{"type":{"names":["string","Interactable"]},"description":"

The current setting or this Interactable

"}],"name":"preventDefault","longname":"~__install_18~Interactable#preventDefault","kind":"function","memberof":"~__install_18~Interactable","scope":"instance","___id":"T000002R003892","___s":true,"attribs":"","id":"preventDefault","signature":"(newValueopt) → {string|Interactable}","ancestors":[]},{"comment":"/**\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 */","meta":{"range":[220499,220526],"filename":"interact.js","lineno":6869,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100051473","name":"_$interact_23.scope","type":"Identifier","funcscope":"","value":"scope","paramnames":[]},"shortpath":"packages/interactjs/dist/interact.js"},"description":"
interact('#draggable').draggable(true);\n\nvar rectables = interact('rect');\nrectables\n  .gesturable(true)\n  .on('gesturemove', function (event) {\n      // ...\n  });\n
\n

The methods of this variable can be used to set elements as interactables\nand also to change various default settings.

\n

Calling it as a function and passing an element or a valid CSS selector\nstring returns an Interactable object which has various methods to configure\nit.

","scope":"global","params":[{"type":{"names":["Element","string"]},"description":"

The HTML or SVG Element to interact with\nor CSS selector

","name":"target"}],"returns":[{"type":{"names":["Interactable"]}}],"name":"_$interact_23scope","longname":"_$interact_23scope","kind":"member","___id":"T000002R005036","___s":true,"attribs":"","id":"_$interact_23scope","ancestors":[],"signature":""},{"comment":"/** @article /home/taye/proj/interact.js/docs/index.md **/","meta":{"filename":"index.md","lineno":1,"columnno":0,"path":"/home/taye/proj/interact.js/docs","code":{},"shortpath":"docs/index.md"},"kind":"article","source":"\n\n","name":"index","filename":"index.md","title":"API Reference","longname":"article:index","description":"

","outfilename":"index.html","scope":"global","___id":"T000002R011762","___s":true,"attribs":"","id":"index","ancestors":[]},{"comment":"/**\n * Class of events fired on dropzones during drags with acceptable targets.\n */","meta":{"range":[157,737],"filename":"DropEvent.js","lineno":7,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions/drop","code":{"id":"astnode100000534","name":"DropEvent","type":"MethodDefinition","paramnames":["dropStatus","dragEvent","type"]},"vars":{"":null},"shortpath":"packages/actions/drop/DropEvent.js"},"description":"

Class of events fired on dropzones during drags with acceptable targets.

","name":"DropEvent","longname":"DropEvent","kind":"class","scope":"global","params":[],"___id":"T000003R000002","___s":true,"attribs":"","id":"DropEvent","signature":"()","ancestors":[]},{"comment":"/**\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 */","meta":{"range":[957,2103],"filename":"DropEvent.js","lineno":32,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions/drop","code":{"id":"astnode100000630","name":"DropEvent#reject","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/actions/drop/DropEvent.js"},"description":"

If this is a dropactivate event, the dropzone element will be\ndeactivated.

\n

If this is a dragmove or dragenter, a dragleave will be fired on the\ndropzone element and more.

","name":"reject","longname":"DropEvent#reject","kind":"function","memberof":"DropEvent","scope":"instance","params":[],"___id":"T000002R000064","___s":true,"attribs":"","id":"reject","signature":"()","ancestors":["DropEvent#"]},{"comment":"/**\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 * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param {boolean | object | null} [options] The new options to be set.\n * @return {boolean | Interactable} The current setting or this Interactable\n */","meta":{"range":[11963,14105],"filename":"index.js","lineno":359,"columnno":0,"path":"/home/taye/proj/interact.js/packages/actions/drop","code":{"id":"astnode100002109","name":"dropzoneMethod","type":"FunctionDeclaration","paramnames":["interactable","options"]},"vars":{"interactable.options.drop.enabled":"interactable.options.drop.enabled","normalized":"dropzoneMethod~normalized","corrected":"dropzoneMethod~corrected","":null,"interactable.options.drop.listeners":"interactable.options.drop.listeners","interactable.options.drop.overlap":"interactable.options.drop.overlap","interactable.options.drop.accept":"interactable.options.drop.accept","interactable.options.drop.checker":"interactable.options.drop.checker"},"shortpath":"packages/actions/drop/index.js"},"description":"
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
interact('.drop').dropzone({\n  accept: '.can-drop' || document.getElementById('single-drop'),\n  overlap: 'pointer' || 'center' || zeroToOne\n}\n
\n

Returns or sets whether draggables can be dropped onto this target to\ntrigger drop events

\n

Dropzones can receive the following events:

\n
    \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\nselector 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\nvalues 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).\ne.g. 0.5 for drop to happen when half of the area of the draggable is\nover the dropzone
  • \n
\n

Use the checker option to specify a function to check if a dragged element\nis over this Interactable.

","params":[{"type":{"names":["boolean","object","null"]},"optional":true,"description":"

The new options to be set.

","name":"options"}],"returns":[{"type":{"names":["boolean","Interactable"]},"description":"

The current setting or this Interactable

"}],"name":"dropzoneMethod","longname":"dropzoneMethod","kind":"function","scope":"global","___id":"T000002R000208","___s":true,"attribs":"","id":"dropzoneMethod","signature":"(optionsopt) → {boolean|Interactable}","ancestors":[]},{"comment":"/**\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 */","meta":{"range":[2404,2512],"filename":"interactablePreventDefault.js","lineno":78,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100011288","name":"Interactable.prototype.preventDefault","type":"FunctionExpression","funcscope":"install","paramnames":["newValue"]},"shortpath":"packages/core/interactablePreventDefault.js"},"description":"

Returns or sets whether to prevent the browser's default behaviour in\nresponse to pointer events. Can be set to:

\n
    \n
  • 'always' to always prevent
  • \n
  • 'never' to never prevent
  • \n
  • 'auto' to let interact.js try to determine what would be best
  • \n
","params":[{"type":{"names":["string"]},"optional":true,"description":"

'always', 'never' or 'auto'

","name":"newValue"}],"returns":[{"type":{"names":["string","Interactable"]},"description":"

The current setting or this Interactable

"}],"name":"preventDefault","longname":"install~Interactable#preventDefault","kind":"function","memberof":"install~Interactable","scope":"instance","___id":"T000002R001031","___s":true,"attribs":"","id":"preventDefault","signature":"(newValueopt) → {string|Interactable}","ancestors":[]},{"comment":"/**\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 */","meta":{"range":[940,1203],"filename":"interact.js","lineno":36,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100020017","name":"interact","type":"FunctionDeclaration","paramnames":["target","options"]},"vars":{"interactable":"module:interact~interactable","interactable.events.global":"module:interact~interactable.events.global"},"shortpath":"packages/interact/interact.js"},"description":"
interact('#draggable').draggable(true);\n\nvar rectables = interact('rect');\nrectables\n  .gesturable(true)\n  .on('gesturemove', function (event) {\n      // ...\n  });\n
\n

The methods of this variable can be used to set elements as interactables\nand also to change various default settings.

\n

Calling it as a function and passing an element or a valid CSS selector\nstring returns an Interactable object which has various methods to configure\nit.

","scope":"global","params":[{"type":{"names":["Element","string"]},"description":"

The HTML or SVG Element to interact with\nor CSS selector

","name":"target"}],"returns":[{"type":{"names":["Interactable"]}}],"name":"interact","longname":"interact","kind":"function","___id":"T000002R001962","___s":true,"attribs":"","id":"interact","signature":"(target) → {Interactable}","ancestors":[]},{"comment":"/**\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 */","meta":{"range":[3219,3512],"filename":"index.js","lineno":94,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions/drop","code":{"id":"astnode100001221","name":"interact.dynamicDrop","type":"FunctionExpression","paramnames":["newValue"]},"vars":{"scope.dynamicDrop":"scope.dynamicDrop"},"shortpath":"packages/actions/drop/index.js"},"description":"

Returns or sets whether the dimensions of dropzone elements are calculated\non every dragmove or only on dragstart for the default dropChecker

","params":[{"type":{"names":["boolean"]},"optional":true,"description":"

True to check on each move. False to check only\nbefore start

","name":"newValue"}],"returns":[{"type":{"names":["boolean","interact"]},"description":"

The current setting or interact

"}],"name":"dynamicDrop","longname":"interact.dynamicDrop","kind":"function","memberof":"interact","scope":"static","___id":"T000002R000124","___s":true,"attribs":"(static) ","id":".dynamicDrop","signature":"(newValueopt) → {boolean|interact}","ancestors":["interact."]},{"comment":"/** */","meta":{"range":[686,1034],"filename":"Interactable.js","lineno":26,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010090","name":"Interactable","type":"MethodDefinition","paramnames":["target","options","defaultContext"]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"name":"Interactable","longname":"Interactable","kind":"class","scope":"global","params":[],"___id":"T000003R000003","___s":true,"attribs":"","id":"Interactable","signature":"()","ancestors":[]},{"comment":"/**\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 * Gets 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 */","meta":{"range":[4860,5157],"filename":"InteractableMethods.js","lineno":147,"columnno":2,"path":"/home/taye/proj/interact.js/packages/autoStart","code":{"id":"astnode100009430","name":"Interactable.prototype.actionChecker","type":"FunctionExpression","paramnames":["checker"]},"vars":{"this.options.actionChecker":"Interactable#actionChecker#options.actionChecker"},"shortpath":"packages/autoStart/InteractableMethods.js"},"description":"
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

Gets or sets the function used to check action to be performed on\npointerDown

","params":[{"type":{"names":["function","null"]},"optional":true,"description":"

A function which takes a pointer event,\ndefaultAction string, interactable, element and interaction as parameters\nand returns an object with name property 'drag' 'resize' or 'gesture' and\noptionally an edges object with boolean 'top', 'left', 'bottom' and right\nprops.

","name":"checker"}],"returns":[{"type":{"names":["function","Interactable"]},"description":"

The checker function or this Interactable

"}],"name":"actionChecker","longname":"Interactable#actionChecker","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R000893","___s":true,"attribs":"","id":"actionChecker","signature":"(checkeropt) → {function|Interactable}","ancestors":["Interactable#"]},{"comment":"/**\n * ```js\n *\n * @deprecated\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to allow from any element\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */","meta":{"range":[2487,2714],"filename":"InteractableMethods.js","lineno":79,"columnno":2,"path":"/home/taye/proj/interact.js/packages/autoStart","code":{"id":"astnode100009262","name":"Interactable.prototype.allowFrom","type":"CallExpression","value":"","paramnames":[]},"shortpath":"packages/autoStart/InteractableMethods.js"},"description":"
","deprecated":"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\nCSS selector or Element.\n\nDon't use this method. Instead set the `allowFrom` option for each action\nor for `pointerEvents`","examples":[{"caption":"","code":"interact(targett)\n .resizable({\n allowFrom: '.resize-handle',\n .pointerEvents({\n allowFrom: '.handle',,\n });"}],"params":[{"type":{"names":["string","Element","null"]},"optional":true,"description":"

a CSS selector string, an\nElement or null to allow from any element

","name":"newValue"}],"returns":[{"type":{"names":["string","Element","object"]},"description":"

The current allowFrom value or this\nInteractable

"}],"name":"allowFrom","longname":"Interactable#allowFrom","kind":"member","memberof":"Interactable","scope":"instance","___id":"T000002R000889","___s":true,"attribs":"","id":"allowFrom","ancestors":["Interactable#"],"signature":""},{"comment":"/**\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 */","meta":{"range":[5765,5807],"filename":"Interactable.js","lineno":190,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010623","name":"Interactable#context","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"description":"

Gets the selector context Node of the Interactable. The default is\nwindow.document.

","returns":[{"type":{"names":["Node"]},"description":"

The context Node of this Interactable

"}],"name":"context","longname":"Interactable#context","kind":"function","memberof":"Interactable","scope":"instance","params":[],"___id":"T000002R000992","___s":true,"attribs":"","id":"context","signature":"() → {Node}","ancestors":["Interactable#"]},{"comment":"/**\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 */","meta":{"range":[5399,5590],"filename":"Interactable.js","lineno":174,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010593","name":"Interactable#deltaSource","type":"MethodDefinition","paramnames":["newValue"]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"description":"

Returns or sets the mouse coordinate types used to calculate the\nmovement of the pointer.

","params":[{"type":{"names":["string"]},"optional":true,"description":"

Use 'client' if you will be scrolling while\ninteracting; Use 'page' if you want autoScroll to work

","name":"newValue"}],"returns":[{"type":{"names":["string","object"]},"description":"

The current deltaSource or this Interactable

"}],"name":"deltaSource","longname":"Interactable#deltaSource","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R000990","___s":true,"attribs":"","id":"deltaSource","signature":"(newValueopt) → {string|object}","ancestors":["Interactable#"]},{"comment":"/**\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 */","meta":{"range":[9243,9818],"filename":"interact.js","lineno":326,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100022382","name":"draggable","type":"FunctionDeclaration","paramnames":["options"]},"vars":{"this.options.drag.enabled":"Interactable#draggable#options.drag.enabled","this.options.drag.lockAxis":"Interactable#draggable#options.drag.lockAxis","this.options.drag.startAxis":"Interactable#draggable#options.drag.startAxis"},"shortpath":"packages/interactjs/dist/interact.js"},"description":"
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\nvar isDraggable = interact('element').draggable(); // true\n
\n

Get or set whether drag actions can be performed on the target

","alias":"Interactable.prototype.draggable","params":[{"type":{"names":["boolean","object"]},"optional":true,"description":"

true/false or An object with event\nlisteners to be fired on drag events (object makes the Interactable\ndraggable)

","name":"options"}],"returns":[{"type":{"names":["boolean","Interactable"]},"description":"

boolean indicating if this can be the\ntarget of drag events, or this Interctable

"}],"name":"draggable","longname":"Interactable#draggable","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R002156","___s":true,"attribs":"","id":"draggable","signature":"(optionsopt) → {boolean|Interactable}","ancestors":["Interactable#"]},{"comment":"/**\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 */","meta":{"range":[3136,3710],"filename":"drag.js","lineno":108,"columnno":0,"path":"/home/taye/proj/interact.js/packages/actions","code":{"id":"astnode100000353","name":"draggable","type":"FunctionDeclaration","paramnames":["options"]},"vars":{"this.options.drag.enabled":"Interactable#draggable#options.drag.enabled","this.options.drag.lockAxis":"Interactable#draggable#options.drag.lockAxis","this.options.drag.startAxis":"Interactable#draggable#options.drag.startAxis"},"shortpath":"packages/actions/drag.js"},"description":"
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\nvar isDraggable = interact('element').draggable(); // true\n
\n

Get or set whether drag actions can be performed on the target

","alias":"Interactable.prototype.draggable","params":[{"type":{"names":["boolean","object"]},"optional":true,"description":"

true/false or An object with event\nlisteners to be fired on drag events (object makes the Interactable\ndraggable)

","name":"options"}],"returns":[{"type":{"names":["boolean","Interactable"]},"description":"

boolean indicating if this can be the\ntarget of drag events, or this Interctable

"}],"name":"draggable","longname":"Interactable#draggable","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R000030","___s":true,"attribs":"","id":"draggable","signature":"(optionsopt) → {boolean|Interactable}","ancestors":["Interactable#"]},{"comment":"/**\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 */","meta":{"range":[6215,6282],"filename":"Interactable.js","lineno":207,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010651","name":"Interactable#fire","type":"MethodDefinition","paramnames":["iEvent"]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"description":"

Calls listeners for the given InteractEvent type bound globally\nand directly to this Interactable

","params":[{"type":{"names":["InteractEvent"]},"description":"

The InteractEvent object to be fired on this\nInteractable

","name":"iEvent"}],"returns":[{"type":{"names":["Interactable"]},"description":"

this Interactable

"}],"name":"fire","longname":"Interactable#fire","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R000994","___s":true,"attribs":"","id":"fire","signature":"(iEvent) → {Interactable}","ancestors":["Interactable#"]},{"comment":"/**\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 */","meta":{"range":[1316,1745],"filename":"gesture.js","lineno":52,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions","code":{"id":"astnode100002878","name":"Interactable.prototype.gesturable","type":"FunctionExpression","paramnames":["options"]},"vars":{"this.options.gesture.enabled":"Interactable#gesturable#options.gesture.enabled"},"shortpath":"packages/actions/gesture.js"},"description":"
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\nvar isGestureable = interact(element).gesturable();\n
\n

Gets or sets whether multitouch gestures can be performed on the target

","params":[{"type":{"names":["boolean","object"]},"optional":true,"description":"

true/false or An object with event\nlisteners to be fired on gesture events (makes the Interactable gesturable)

","name":"options"}],"returns":[{"type":{"names":["boolean","Interactable"]},"description":"

A boolean indicating if this can be the\ntarget of gesture events, or this Interactable

"}],"name":"gesturable","longname":"Interactable#gesturable","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R000260","___s":true,"attribs":"","id":"gesturable","signature":"(optionsopt) → {boolean|Interactable}","ancestors":["Interactable#"]},{"comment":"/**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {object} The object's bounding rectangle.\n */","meta":{"range":[3472,3695],"filename":"Interactable.js","lineno":104,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010445","name":"Interactable#getRect","type":"MethodDefinition","paramnames":["element"]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"description":"

The default function to get an Interactables bounding rect. Can be\noverridden using {@link Interactable.rectChecker}.

","params":[{"type":{"names":["Element"]},"optional":true,"description":"

The element to measure.

","name":"element"}],"returns":[{"type":{"names":["object"]},"description":"

The object's bounding rectangle.

"}],"name":"getRect","longname":"Interactable#getRect","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R000980","___s":true,"attribs":"","id":"getRect","signature":"(elementopt) → {object}","ancestors":["Interactable#"]},{"comment":"/**\n * ```js\n * interact(element, { ignoreFrom: document.getElementById('no-action') });\n * // or\n * interact(element).ignoreFrom('input, textarea, a');\n * ```\n * @deprecated\n * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n * of it's parents match the given CSS selector or Element, no\n * drag/resize/gesture is started.\n *\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to not ignore any elements\n * @return {string | Element | object} The current ignoreFrom value or this\n * Interactable\n */","meta":{"range":[1516,1747],"filename":"InteractableMethods.js","lineno":51,"columnno":2,"path":"/home/taye/proj/interact.js/packages/autoStart","code":{"id":"astnode100009242","name":"Interactable.prototype.ignoreFrom","type":"CallExpression","value":"","paramnames":[]},"shortpath":"packages/autoStart/InteractableMethods.js"},"description":"
interact(element, { ignoreFrom: document.getElementById('no-action') });\n// or\ninteract(element).ignoreFrom('input, textarea, a');\n
","deprecated":"If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\nof it's parents match the given CSS selector or Element, no\ndrag/resize/gesture is started.\n\nDon't use this method. Instead set the `ignoreFrom` option for each action\nor for `pointerEvents`","examples":[{"caption":"","code":"interact(targett)\n .draggable({\n ignoreFrom: 'input, textarea, a[href]'',\n })\n .pointerEvents({\n ignoreFrom: '[no-pointer]',\n });"}],"params":[{"type":{"names":["string","Element","null"]},"optional":true,"description":"

a CSS selector string, an\nElement or null to not ignore any elements

","name":"newValue"}],"returns":[{"type":{"names":["string","Element","object"]},"description":"

The current ignoreFrom value or this\nInteractable

"}],"name":"ignoreFrom","longname":"Interactable#ignoreFrom","kind":"member","memberof":"Interactable","scope":"instance","___id":"T000002R000888","___s":true,"attribs":"","id":"ignoreFrom","ancestors":["Interactable#"],"signature":""},{"comment":"/**\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 */","meta":{"range":[8140,8233],"filename":"Interactable.js","lineno":268,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010814","name":"Interactable#off","type":"MethodDefinition","paramnames":["types","listener","options"]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"description":"

Removes an InteractEvent, pointerEvent or DOM event listener.

","params":[{"type":{"names":["string","array","object"]},"description":"

The types of events that were\nlistened for

","name":"types"},{"type":{"names":["function","array","object"]},"optional":true,"description":"

The event listener function(s)

","name":"listener"},{"type":{"names":["object","boolean"]},"optional":true,"description":"

options object or useCapture flag for\nremoveEventListener

","name":"options"}],"returns":[{"type":{"names":["Interactable"]},"description":"

This Interactable

"}],"name":"off","longname":"Interactable#off","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R001004","___s":true,"attribs":"","id":"off","signature":"(types, listeneropt, optionsopt) → {Interactable}","ancestors":["Interactable#"]},{"comment":"/**\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 */","meta":{"range":[7637,7728],"filename":"Interactable.js","lineno":254,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010798","name":"Interactable#on","type":"MethodDefinition","paramnames":["types","listener","options"]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"description":"

Binds a listener for an InteractEvent, pointerEvent or DOM event.

","params":[{"type":{"names":["string","array","object"]},"description":"

The types of events to listen\nfor

","name":"types"},{"type":{"names":["function","array","object"]},"optional":true,"description":"

The event listener function(s)

","name":"listener"},{"type":{"names":["object","boolean"]},"optional":true,"description":"

options object or useCapture flag for\naddEventListener

","name":"options"}],"returns":[{"type":{"names":["Interactable"]},"description":"

This Interactable

"}],"name":"on","longname":"Interactable#on","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R001003","___s":true,"attribs":"","id":"on","signature":"(types, listeneropt, optionsopt) → {Interactable}","ancestors":["Interactable#"]},{"comment":"/**\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 */","meta":{"range":[4988,5066],"filename":"Interactable.js","lineno":162,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010581","name":"Interactable#origin","type":"MethodDefinition","paramnames":["newValue"]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"description":"

Gets or sets the origin of the Interactable's element. The x and y\nof the origin will be subtracted from action event coordinates.

","params":[{"type":{"names":["Element","object","string"]},"optional":true,"description":"

An HTML or SVG Element whose\nrect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\nor any CSS selector

","name":"origin"}],"returns":[{"type":{"names":["object"]},"description":"

The current origin or this Interactable

"}],"name":"origin","longname":"Interactable#origin","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R000989","___s":true,"attribs":"","id":"origin","signature":"(originopt) → {object}","ancestors":["Interactable#"]},{"comment":"/**\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 */","meta":{"range":[4023,4250],"filename":"Interactable.js","lineno":122,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010490","name":"Interactable#rectChecker","type":"MethodDefinition","paramnames":["checker"]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"description":"

Returns or sets the function used to calculate the interactable's\nelement's rectangle

","params":[{"type":{"names":["function"]},"optional":true,"description":"

A function which returns this Interactable's\nbounding rectangle. See {@link Interactable.getRect}

","name":"checker"}],"returns":[{"type":{"names":["function","object"]},"description":"

The checker function or this Interactable

"}],"name":"rectChecker","longname":"Interactable#rectChecker","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R000983","___s":true,"attribs":"","id":"rectChecker","signature":"(checkeropt) → {function|object}","ancestors":["Interactable#"]},{"comment":"/**\n * ```js\n * const interactable = interact(target);\n * const drag = { name: drag, axis: 'x' };\n * const resize = { name: resize, edges: { left: true, bottom: true };\n *\n * interactable.reflow(drag);\n * interactable.reflow(resize);\n * ```\n *\n * Start an action sequence to re-apply modifiers, check drops, etc.\n *\n * @param { Object } action The action to begin\n * @param { string } action.name The name of the action\n * @returns { Promise }\n */","meta":{"range":[1202,1297],"filename":"index.js","lineno":48,"columnno":2,"path":"/home/taye/proj/interact.js/packages/reflow","code":{"id":"astnode100105783","name":"Interactable.prototype.reflow","type":"FunctionExpression","paramnames":["action"]},"shortpath":"packages/reflow/index.js"},"description":"
const interactable = interact(target);\nconst drag = { name: drag, axis: 'x' };\nconst resize = { name: resize, edges: { left: true, bottom: true };\n\ninteractable.reflow(drag);\ninteractable.reflow(resize);\n
\n

Start an action sequence to re-apply modifiers, check drops, etc.

","params":[{"type":{"names":["Object"]},"description":"

The action to begin

","name":"action","subparams":[{"type":{"names":["string"]},"description":"

The name of the action

","name":"name"}]},null],"returns":[{"type":{"names":["Promise."]}}],"name":"reflow","longname":"Interactable#reflow","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R011087","___s":true,"attribs":"","id":"reflow","signature":"(action) → {Promise.<Interactable>}","ancestors":["Interactable#"]},{"comment":"/**\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 */","meta":{"range":[5616,6500],"filename":"resize.js","lineno":178,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions","code":{"id":"astnode100003987","name":"Interactable.prototype.resizable","type":"FunctionExpression","paramnames":["options"]},"vars":{"this.options.resize.enabled":"Interactable#resizable#options.resize.enabled","this.options.resize.axis":"Interactable#resizable#options.resize.axis","this.options.resize.preserveAspectRatio":"Interactable#resizable#options.resize.preserveAspectRatio","this.options.resize.square":"Interactable#resizable#options.resize.square"},"shortpath":"packages/actions/resize.js"},"description":"
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\nvar isResizeable = interact(element).resizable();\n
\n

Gets or sets whether resize actions can be performed on the target

","params":[{"type":{"names":["boolean","object"]},"optional":true,"description":"

true/false or An object with event\nlisteners to be fired on resize events (object makes the Interactable\nresizable)

","name":"options"}],"returns":[{"type":{"names":["boolean","Interactable"]},"description":"

A boolean indicating if this can be the\ntarget of resize elements, or this Interactable

"}],"name":"resizable","longname":"Interactable#resizable","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R000390","___s":true,"attribs":"","id":"resizable","signature":"(optionsopt) → {boolean|Interactable}","ancestors":["Interactable#"]},{"comment":"/**\n * Reset the options of this Interactable\n *\n * @param {object} options The new settings to apply\n * @return {object} This Interactable\n */","meta":{"range":[8393,9006],"filename":"Interactable.js","lineno":278,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010830","name":"Interactable#set","type":"MethodDefinition","paramnames":["options"]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"description":"

Reset the options of this Interactable

","params":[{"type":{"names":["object"]},"description":"

The new settings to apply

","name":"options"}],"returns":[{"type":{"names":["object"]},"description":"

This Interactable

"}],"name":"set","longname":"Interactable#set","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R001005","___s":true,"attribs":"","id":"set","signature":"(options) → {object}","ancestors":["Interactable#"]},{"comment":"/**\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 */","meta":{"range":[5445,5738],"filename":"InteractableMethods.js","lineno":170,"columnno":2,"path":"/home/taye/proj/interact.js/packages/autoStart","code":{"id":"astnode100009477","name":"Interactable.prototype.styleCursor","type":"FunctionExpression","paramnames":["newValue"]},"vars":{"this.options.styleCursor":"Interactable#styleCursor#options.styleCursor"},"shortpath":"packages/autoStart/InteractableMethods.js"},"description":"

Returns or sets whether the the cursor should be changed depending on the\naction that would be performed if the mouse were pressed and dragged.

","params":[{"type":{"names":["boolean"]},"optional":true,"name":"newValue"}],"returns":[{"type":{"names":["boolean","Interactable"]},"description":"

The current setting or this Interactable

"}],"name":"styleCursor","longname":"Interactable#styleCursor","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R000895","___s":true,"attribs":"","id":"styleCursor","signature":"(newValueopt) → {boolean|Interactable}","ancestors":["Interactable#"]},{"comment":"/**\n * Remove this interactable from the list of interactables and remove it's\n * action capabilities and event listeners\n *\n * @return {interact}\n */","meta":{"range":[9173,10009],"filename":"Interactable.js","lineno":311,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010941","name":"Interactable#unset","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"description":"

Remove this interactable from the list of interactables and remove it's\naction capabilities and event listeners

","returns":[{"type":{"names":["interact"]}}],"name":"unset","longname":"Interactable#unset","kind":"function","memberof":"Interactable","scope":"instance","params":[],"___id":"T000002R001013","___s":true,"attribs":"","id":"unset","signature":"() → {interact}","ancestors":["Interactable#"]},{"comment":"/** */","meta":{"range":[238,2715],"filename":"InteractEvent.js","lineno":8,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100011418","name":"InteractEvent","type":"MethodDefinition","paramnames":["interaction","event","actionName","phase","element","related","preEnd","type"]},"vars":{"":null},"shortpath":"packages/core/InteractEvent.js"},"name":"InteractEvent","longname":"InteractEvent","kind":"class","scope":"global","params":[],"___id":"T000003R000004","___s":true,"attribs":"","id":"InteractEvent","signature":"()","ancestors":[]},{"comment":"/** */","meta":{"range":[4380,4484],"filename":"InteractEvent.js","lineno":136,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100012255","name":"InteractEvent#stopImmediatePropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/InteractEvent.js"},"name":"stopImmediatePropagation","longname":"InteractEvent#stopImmediatePropagation","kind":"function","memberof":"InteractEvent","scope":"instance","params":[],"___id":"T000002R001130","___s":true,"attribs":"","id":"stopImmediatePropagation","signature":"()","ancestors":["InteractEvent#"]},{"comment":"/** */","meta":{"range":[4497,4557],"filename":"InteractEvent.js","lineno":141,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100012269","name":"InteractEvent#stopPropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/InteractEvent.js"},"name":"stopPropagation","longname":"InteractEvent#stopPropagation","kind":"function","memberof":"InteractEvent","scope":"instance","params":[],"___id":"T000002R001133","___s":true,"attribs":"","id":"stopPropagation","signature":"()","ancestors":["InteractEvent#"]},{"comment":"/** */","meta":{"range":[175,1587],"filename":"Interaction.js","lineno":10,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100012300","name":"Interaction","type":"MethodDefinition","paramnames":[""]},"vars":{"":null},"shortpath":"packages/core/Interaction.js"},"name":"Interaction","longname":"Interaction","kind":"class","scope":"global","params":[],"___id":"T000003R000005","___s":true,"attribs":"","id":"Interaction","signature":"()","ancestors":[]},{"comment":"/**\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 */","meta":{"range":[7049,7401],"filename":"Interaction.js","lineno":246,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100013026","name":"Interaction#end","type":"MethodDefinition","paramnames":["event"]},"vars":{"":null},"shortpath":"packages/core/Interaction.js"},"description":"
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
","params":[{"type":{"names":["PointerEvent"]},"optional":true,"name":"event"}],"name":"end","longname":"Interaction#end","kind":"function","memberof":"Interaction","scope":"instance","___id":"T000002R001217","___s":true,"attribs":"","id":"end","signature":"(eventopt)","ancestors":["Interaction#"]},{"comment":"/**\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 */","meta":{"range":[5692,6016],"filename":"Interaction.js","lineno":190,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100012881","name":"Interaction#move","type":"MethodDefinition","paramnames":["signalArg"]},"vars":{"":null},"shortpath":"packages/core/Interaction.js"},"description":"
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

Force a move of the current action at the same coordinates. Useful if\nsnap/restrict has been changed and you want a movement with the new\nsettings.

","name":"move","longname":"Interaction#move","kind":"function","memberof":"Interaction","scope":"instance","params":[],"___id":"T000002R001197","___s":true,"attribs":"","id":"move","signature":"()","ancestors":["Interaction#"]},{"comment":"/**\n * @alias Interaction.prototype.move\n */","meta":{"range":[192193,192367],"filename":"interact.js","lineno":6113,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100047768","name":"Interaction.prototype.doMove","type":"CallExpression","funcscope":"","value":"","paramnames":[]},"shortpath":"packages/interactjs/dist/interact.js"},"alias":"Interaction.prototype.move","name":"move","longname":"Interaction#move","kind":"member","memberof":"Interaction","scope":"instance","___id":"T000002R004660","___s":true,"attribs":"","id":"move","ancestors":["Interaction#"],"signature":""},{"comment":"/**\n * @alias Interaction.prototype.move\n */","meta":{"range":[11016,11194],"filename":"Interaction.js","lineno":415,"columnno":0,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100013678","name":"Interaction.prototype.doMove","type":"CallExpression","value":"","paramnames":[]},"shortpath":"packages/core/Interaction.js"},"alias":"Interaction.prototype.move","name":"move","longname":"Interaction#move","kind":"member","memberof":"Interaction","scope":"instance","___id":"T000002R001286","___s":true,"attribs":"","id":"move","ancestors":["Interaction#"],"signature":""},{"comment":"/**\n * ```js\n * interact(target)\n * .draggable({\n * // disable the default drag start by down->move\n * manualStart: true\n * })\n * // start dragging after the user holds the pointer down\n * .on('hold', function (event) {\n * var interaction = event.interaction;\n *\n * if (!interaction.interacting()) {\n * interaction.start({ name: 'drag' },\n * event.interactable,\n * event.currentTarget);\n * }\n * });\n * ```\n *\n * Start an action with the given Interactable and Element as tartgets. The\n * action must be enabled for the target Interactable and an appropriate\n * number of pointers must be held down - 1 for drag/resize, 2 for gesture.\n *\n * Use it with `interactable.able({ manualStart: false })` to always\n * [start actions manually](https://github.com/taye/interact.js/issues/114)\n *\n * @param {object} action The action to be performed - drag, resize, etc.\n * @param {Interactable} target The Interactable to target\n * @param {Element} element The DOM Element to target\n * @return {object} interact\n */","meta":{"range":[3016,3439],"filename":"Interaction.js","lineno":101,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100012492","name":"Interaction#start","type":"MethodDefinition","paramnames":["action","target","element"]},"vars":{"":null},"shortpath":"packages/core/Interaction.js"},"description":"
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

Start an action with the given Interactable and Element as tartgets. The\naction must be enabled for the target Interactable and an appropriate\nnumber of pointers must be held down - 1 for drag/resize, 2 for gesture.

\n

Use it with interactable.<action>able({ manualStart: false }) to always\nstart actions manually

","params":[{"type":{"names":["object"]},"description":"

The action to be performed - drag, resize, etc.

","name":"action"},{"type":{"names":["Interactable"]},"description":"

The Interactable to target

","name":"target"},{"type":{"names":["Element"]},"description":"

The DOM Element to target

","name":"element"}],"returns":[{"type":{"names":["object"]},"description":"

interact

"}],"name":"start","longname":"Interaction#start","kind":"function","memberof":"Interaction","scope":"instance","___id":"T000002R001174","___s":true,"attribs":"","id":"start","signature":"(action, target, element) → {object}","ancestors":["Interaction#"]},{"comment":"/** */","meta":{"range":[7550,7738],"filename":"Interaction.js","lineno":275,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100013109","name":"Interaction#stop","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/Interaction.js"},"name":"stop","longname":"Interaction#stop","kind":"function","memberof":"Interaction","scope":"instance","params":[],"___id":"T000002R001228","___s":true,"attribs":"","id":"stop","signature":"()","ancestors":["Interaction#"]},{"comment":"/** */","meta":{"range":[107,1160],"filename":"PointerEvent.js","lineno":5,"columnno":2,"path":"/home/taye/proj/interact.js/packages/pointerEvents","code":{"id":"astnode100103992","name":"module.exports","type":"MethodDefinition","paramnames":["type","pointer","event","eventTarget","interaction"]},"vars":{"":null},"shortpath":"packages/pointerEvents/PointerEvent.js"},"name":"exports","longname":"module.exports#module.exports","kind":"class","memberof":"module.exports#module","scope":"static","params":[],"___id":"T000003R000006","___s":true,"attribs":"","id":"exports","signature":"()","ancestors":[]},{"comment":"/** @module interact */","meta":{"filename":"interact.js","lineno":1,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{},"shortpath":"packages/interact/interact.js"},"kind":"module","name":"interact","longname":"module:interact","___id":"T000004R000002","___s":true,"attribs":"","id":"interact","ancestors":[],"modules":[]},{"comment":"/** @module interact */","meta":{"filename":"interact.js","lineno":6840,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{},"shortpath":"packages/interactjs/dist/interact.js"},"kind":"module","name":"interact","longname":"module:interact","___id":"T000004R000003","___s":true,"attribs":"","id":"interact","ancestors":[],"modules":[]},{"comment":"/**\n * Returns an object which exposes internal data\n\n * @alias module:interact.debug\n *\n * @return {object} An object with properties that outline the current state\n * and expose internal functions and variables\n */","meta":{"range":[224468,224516],"filename":"interact.js","lineno":7035,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100051925","name":"interact.debug","type":"FunctionExpression","funcscope":"","paramnames":[]},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Returns an object which exposes internal data

","alias":"module:interact.debug","returns":[{"type":{"names":["object"]},"description":"

An object with properties that outline the current state\nand expose internal functions and variables

"}],"name":"debug","longname":"module:interact.debug","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R005062","___s":true,"attribs":"(static) ","id":".debug","signature":"() → {object}","ancestors":["interact."]},{"comment":"/**\n * Returns an object which exposes internal data\n\n * @alias module:interact.debug\n *\n * @return {object} An object with properties that outline the current state\n * and expose internal functions and variables\n */","meta":{"range":[4636,4684],"filename":"interact.js","lineno":189,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100020420","name":"interact.debug","type":"FunctionExpression","paramnames":[]},"shortpath":"packages/interact/interact.js"},"description":"

Returns an object which exposes internal data

","alias":"module:interact.debug","returns":[{"type":{"names":["object"]},"description":"

An object with properties that outline the current state\nand expose internal functions and variables

"}],"name":"debug","longname":"module:interact.debug","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R001981","___s":true,"attribs":"(static) ","id":".debug","signature":"() → {object}","ancestors":["interact."]},{"comment":"/**\n * Check if an element or selector has been set with the {@link interact}\n * function\n *\n * @alias module:interact.isSet\n *\n * @param {Element} element The Element being searched for\n * @return {boolean} Indicates if the element or CSS selector was previously\n * passed to interact\n*/","meta":{"range":[221427,221564],"filename":"interact.js","lineno":6916,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100051563","name":"interact.isSet","type":"FunctionExpression","funcscope":"","paramnames":["element","options"]},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Check if an element or selector has been set with the {@link interact}\nfunction

","alias":"module:interact.isSet","params":[{"type":{"names":["Element"]},"description":"

The Element being searched for

","name":"element"}],"returns":[{"type":{"names":["boolean"]},"description":"

Indicates if the element or CSS selector was previously\npassed to interact

"}],"name":"isSet","longname":"module:interact.isSet","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R005043","___s":true,"attribs":"(static) ","id":".isSet","signature":"(element) → {boolean}","ancestors":["interact."]},{"comment":"/**\n * Check if an element or selector has been set with the {@link interact}\n * function\n *\n * @alias module:interact.isSet\n *\n * @param {Element} element The Element being searched for\n * @return {boolean} Indicates if the element or CSS selector was previously\n * passed to interact\n*/","meta":{"range":[1837,1974],"filename":"interact.js","lineno":79,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100020102","name":"interact.isSet","type":"FunctionExpression","paramnames":["element","options"]},"shortpath":"packages/interact/interact.js"},"description":"

Check if an element or selector has been set with the {@link interact}\nfunction

","alias":"module:interact.isSet","params":[{"type":{"names":["Element"]},"description":"

The Element being searched for

","name":"element"}],"returns":[{"type":{"names":["boolean"]},"description":"

Indicates if the element or CSS selector was previously\npassed to interact

"}],"name":"isSet","longname":"module:interact.isSet","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R001968","___s":true,"attribs":"(static) ","id":".isSet","signature":"(element) → {boolean}","ancestors":["interact."]},{"comment":"/**\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 */","meta":{"range":[2881,2952],"filename":"base.js","lineno":94,"columnno":2,"path":"/home/taye/proj/interact.js/packages/autoStart","code":{"id":"astnode100008005","name":"interact.maxInteractions","type":"ArrowFunctionExpression","paramnames":["newValue"]},"shortpath":"packages/autoStart/base.js"},"description":"

Returns or sets the maximum number of concurrent interactions allowed. By\ndefault only 1 interaction is allowed at a time (for backwards\ncompatibility). To allow multiple interactions on the same Interactables and\nelements, you need to enable it in the draggable, resizable and gesturable\n'max' and 'maxPerElement' options.

","alias":"module:interact.maxInteractions","params":[{"type":{"names":["number"]},"optional":true,"description":"

Any number. newValue <= 0 means no interactions.

","name":"newValue"}],"name":"maxInteractions","longname":"module:interact.maxInteractions","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R000774","___s":true,"attribs":"(static) ","id":".maxInteractions","signature":"(newValueopt)","ancestors":["interact."]},{"comment":"/**\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 */","meta":{"range":[123744,123841],"filename":"interact.js","lineno":3921,"columnno":2,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100038453","name":"interact.maxInteractions","type":"FunctionExpression","funcscope":"~__install_9","paramnames":["newValue"]},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Returns or sets the maximum number of concurrent interactions allowed. By\ndefault only 1 interaction is allowed at a time (for backwards\ncompatibility). To allow multiple interactions on the same Interactables and\nelements, you need to enable it in the draggable, resizable and gesturable\n'max' and 'maxPerElement' options.

","alias":"module:interact.maxInteractions","params":[{"type":{"names":["number"]},"optional":true,"description":"

Any number. newValue <= 0 means no interactions.

","name":"newValue"}],"name":"maxInteractions","longname":"module:interact.maxInteractions","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R003725","___s":true,"attribs":"(static) ","id":".maxInteractions","signature":"(newValueopt)","ancestors":["interact."]},{"comment":"/**\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 */","meta":{"range":[3652,4416],"filename":"interact.js","lineno":145,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100020270","name":"interact.off","type":"FunctionExpression","paramnames":["type","listener","options"]},"vars":{"type":"module:interact~type","eventType":"module:interact.off~eventType","prop":"module:interact.off~prop","index":"module:interact~index"},"shortpath":"packages/interact/interact.js"},"description":"

Removes a global InteractEvent listener or DOM event from document

","alias":"module:interact.off","params":[{"type":{"names":["string","array","object"]},"description":"

The types of events that were listened\nfor

","name":"type"},{"type":{"names":["function"]},"description":"

The listener function to be removed

","name":"listener"},{"type":{"names":["object","boolean"]},"description":"

[options] object or useCapture flag for\nremoveEventListener

","name":"options"}],"returns":[{"type":{"names":["object"]},"description":"

interact

"}],"name":"off","longname":"module:interact.off","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R001975","___s":true,"attribs":"(static) ","id":".off","signature":"(type, listener, options) → {object}","ancestors":["interact."]},{"comment":"/**\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 */","meta":{"range":[223375,224247],"filename":"interact.js","lineno":6988,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100051753","name":"interact.off","type":"FunctionExpression","funcscope":"","paramnames":["type","listener","options"]},"vars":{"type":"module:interact~type","_i2":"module:interact.off~_i2","_ref2":"module:interact~_ref2","eventType":"module:interact.off~eventType","prop":"module:interact.off~prop","index":"module:interact~index"},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Removes a global InteractEvent listener or DOM event from document

","alias":"module:interact.off","params":[{"type":{"names":["string","array","object"]},"description":"

The types of events that were listened\nfor

","name":"type"},{"type":{"names":["function"]},"description":"

The listener function to be removed

","name":"listener"},{"type":{"names":["object","boolean"]},"description":"

[options] object or useCapture flag for\nremoveEventListener

","name":"options"}],"returns":[{"type":{"names":["object"]},"description":"

interact

"}],"name":"off","longname":"module:interact.off","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R005053","___s":true,"attribs":"(static) ","id":".off","signature":"(type, listener, options) → {object}","ancestors":["interact."]},{"comment":"/**\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 */","meta":{"range":[2346,3251],"filename":"interact.js","lineno":94,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100020127","name":"interact.on","type":"FunctionExpression","paramnames":["type","listener","options"]},"vars":{"type":"module:interact~type","eventType":"module:interact.on~eventType","prop":"module:interact.on~prop","globalEvents[undefined]":"module:interact~globalEvents.undefined]"},"shortpath":"packages/interact/interact.js"},"description":"

Add a global listener for an InteractEvent or adds a DOM event to document

","alias":"module:interact.on","params":[{"type":{"names":["string","array","object"]},"description":"

The types of events to listen for

","name":"type"},{"type":{"names":["function"]},"description":"

The function event (s)

","name":"listener"},{"type":{"names":["object","boolean"]},"optional":true,"description":"

object or useCapture flag for\naddEventListener

","name":"options"}],"returns":[{"type":{"names":["object"]},"description":"

interact

"}],"name":"on","longname":"module:interact.on","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R001969","___s":true,"attribs":"(static) ","id":".on","signature":"(type, listener, optionsopt) → {object}","ancestors":["interact."]},{"comment":"/**\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 */","meta":{"range":[221937,222973],"filename":"interact.js","lineno":6932,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100051588","name":"interact.on","type":"FunctionExpression","funcscope":"","paramnames":["type","listener","options"]},"vars":{"type":"module:interact~type","_i":"module:interact.on~_i","_ref":"module:interact~_ref","eventType":"module:interact.on~eventType","prop":"module:interact.on~prop","globalEvents[undefined]":"module:interact~globalEvents.undefined]"},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Add a global listener for an InteractEvent or adds a DOM event to document

","alias":"module:interact.on","params":[{"type":{"names":["string","array","object"]},"description":"

The types of events to listen for

","name":"type"},{"type":{"names":["function"]},"description":"

The function event (s)

","name":"listener"},{"type":{"names":["object","boolean"]},"optional":true,"description":"

object or useCapture flag for\naddEventListener

","name":"options"}],"returns":[{"type":{"names":["object"]},"description":"

interact

"}],"name":"on","longname":"module:interact.on","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R005044","___s":true,"attribs":"(static) ","id":".on","signature":"(type, listener, optionsopt) → {object}","ancestors":["interact."]},{"comment":"/**\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 */","meta":{"range":[6302,6525],"filename":"interact.js","lineno":247,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100020557","name":"interact.pointerMoveTolerance","type":"FunctionExpression","paramnames":["newValue"]},"vars":{"scope.interactions.pointerMoveTolerance":"module:interact~scope.interactions.pointerMoveTolerance"},"shortpath":"packages/interact/interact.js"},"description":"

Returns or sets the distance the pointer must be moved before an action\nsequence occurs. This also affects tolerance for tap events.

","alias":"module:interact.pointerMoveTolerance","params":[{"type":{"names":["number"]},"optional":true,"description":"

The movement from the start position must be greater than this value

","name":"newValue"}],"returns":[{"type":{"names":["interact","number"]}}],"name":"pointerMoveTolerance","longname":"module:interact.pointerMoveTolerance","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R001994","___s":true,"attribs":"(static) ","id":".pointerMoveTolerance","signature":"(newValueopt) → {interact|number}","ancestors":["interact."]},{"comment":"/**\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 */","meta":{"range":[226266,226493],"filename":"interact.js","lineno":7099,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100052090","name":"interact.pointerMoveTolerance","type":"FunctionExpression","funcscope":"","paramnames":["newValue"]},"vars":{"scope.interactions.pointerMoveTolerance":"module:interact~scope.interactions.pointerMoveTolerance"},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Returns or sets the distance the pointer must be moved before an action\nsequence occurs. This also affects tolerance for tap events.

","alias":"module:interact.pointerMoveTolerance","params":[{"type":{"names":["number"]},"optional":true,"description":"

The movement from the start position must be greater than this value

","name":"newValue"}],"returns":[{"type":{"names":["interact","number"]}}],"name":"pointerMoveTolerance","longname":"module:interact.pointerMoveTolerance","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R005078","___s":true,"attribs":"(static) ","id":".pointerMoveTolerance","signature":"(newValueopt) → {interact|number}","ancestors":["interact."]},{"comment":"/**\n * Cancels all interactions (end events are not fired)\n *\n * @alias module:interact.stop\n *\n * @param {Event} event An event on which to call preventDefault()\n * @return {object} interact\n */","meta":{"range":[5825,5969],"filename":"interact.js","lineno":230,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100020531","name":"interact.stop","type":"FunctionExpression","paramnames":["event"]},"vars":{"interaction":"module:interact.stop~interaction"},"shortpath":"packages/interact/interact.js"},"description":"

Cancels all interactions (end events are not fired)

","alias":"module:interact.stop","params":[{"type":{"names":["Event"]},"description":"

An event on which to call preventDefault()

","name":"event"}],"returns":[{"type":{"names":["object"]},"description":"

interact

"}],"name":"stop","longname":"module:interact.stop","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R001992","___s":true,"attribs":"(static) ","id":".stop","signature":"(event) → {object}","ancestors":["interact."]},{"comment":"/**\n * Cancels all interactions (end events are not fired)\n *\n * @alias module:interact.stop\n *\n * @param {Event} event An event on which to call preventDefault()\n * @return {object} interact\n */","meta":{"range":[225689,225932],"filename":"interact.js","lineno":7077,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100052040","name":"interact.stop","type":"FunctionExpression","funcscope":"","paramnames":["event"]},"vars":{"_i3":"module:interact.stop~_i3","_ref3":"module:interact~_ref3","interaction":"module:interact.stop~interaction"},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Cancels all interactions (end events are not fired)

","alias":"module:interact.stop","params":[{"type":{"names":["Event"]},"description":"

An event on which to call preventDefault()

","name":"event"}],"returns":[{"type":{"names":["object"]},"description":"

interact

"}],"name":"stop","longname":"module:interact.stop","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R005073","___s":true,"attribs":"(static) ","id":".stop","signature":"(event) → {object}","ancestors":["interact."]},{"comment":"/**\n * @alias module:interact.supportsPointerEvent\n *\n * @return {boolean} Whether or not the browser supports PointerEvents\n */","meta":{"range":[225389,225489],"filename":"interact.js","lineno":7064,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100052027","name":"interact.supportsPointerEvent","type":"FunctionExpression","funcscope":"","paramnames":[]},"shortpath":"packages/interactjs/dist/interact.js"},"alias":"module:interact.supportsPointerEvent","returns":[{"type":{"names":["boolean"]},"description":"

Whether or not the browser supports PointerEvents

"}],"name":"supportsPointerEvent","longname":"module:interact.supportsPointerEvent","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R005072","___s":true,"attribs":"(static) ","id":".supportsPointerEvent","signature":"() → {boolean}","ancestors":["interact."]},{"comment":"/**\n * @alias module:interact.supportsPointerEvent\n *\n * @return {boolean} Whether or not the browser supports PointerEvents\n */","meta":{"range":[5540,5626],"filename":"interact.js","lineno":218,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100020520","name":"interact.supportsPointerEvent","type":"FunctionExpression","paramnames":[]},"shortpath":"packages/interact/interact.js"},"alias":"module:interact.supportsPointerEvent","returns":[{"type":{"names":["boolean"]},"description":"

Whether or not the browser supports PointerEvents

"}],"name":"supportsPointerEvent","longname":"module:interact.supportsPointerEvent","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R001991","___s":true,"attribs":"(static) ","id":".supportsPointerEvent","signature":"() → {boolean}","ancestors":["interact."]},{"comment":"/**\n * @alias module:interact.supportsTouch\n *\n * @return {boolean} Whether or not the browser supports touch input\n */","meta":{"range":[225170,225256],"filename":"interact.js","lineno":7054,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100052014","name":"interact.supportsTouch","type":"FunctionExpression","funcscope":"","paramnames":[]},"shortpath":"packages/interactjs/dist/interact.js"},"alias":"module:interact.supportsTouch","returns":[{"type":{"names":["boolean"]},"description":"

Whether or not the browser supports touch input

"}],"name":"supportsTouch","longname":"module:interact.supportsTouch","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R005071","___s":true,"attribs":"(static) ","id":".supportsTouch","signature":"() → {boolean}","ancestors":["interact."]},{"comment":"/**\n * @alias module:interact.supportsTouch\n *\n * @return {boolean} Whether or not the browser supports touch input\n */","meta":{"range":[5336,5408],"filename":"interact.js","lineno":209,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100020509","name":"interact.supportsTouch","type":"FunctionExpression","paramnames":[]},"shortpath":"packages/interact/interact.js"},"alias":"module:interact.supportsTouch","returns":[{"type":{"names":["boolean"]},"description":"

Whether or not the browser supports touch input

"}],"name":"supportsTouch","longname":"module:interact.supportsTouch","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R001990","___s":true,"attribs":"(static) ","id":".supportsTouch","signature":"() → {boolean}","ancestors":["interact."]},{"comment":"/**\n * Use a plugin\n *\n * @alias module:interact.use\n *\n * @param {Object} plugin\n * @param {function} plugin.install\n * @return {interact}\n*/","meta":{"range":[1370,1545],"filename":"interact.js","lineno":59,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100020065","name":"interact.use","type":"FunctionExpression","paramnames":["plugin"]},"shortpath":"packages/interact/interact.js"},"description":"

Use a plugin

","alias":"module:interact.use","params":[{"type":{"names":["Object"]},"name":"plugin","subparams":[{"type":{"names":["function"]},"name":"install"}]},null],"returns":[{"type":{"names":["interact"]}}],"name":"use","longname":"module:interact.use","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R001967","___s":true,"attribs":"(static) ","id":".use","signature":"(plugin) → {interact}","ancestors":["interact."]},{"comment":"/**\n * Use a plugin\n *\n * @alias module:interact.use\n *\n * @param {Object} plugin\n * @param {function} plugin.install\n * @return {interact}\n*/","meta":{"range":[220957,221134],"filename":"interact.js","lineno":6893,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100051526","name":"interact.use","type":"FunctionExpression","funcscope":"","paramnames":["plugin"]},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Use a plugin

","alias":"module:interact.use","params":[{"type":{"names":["Object"]},"name":"plugin","subparams":[{"type":{"names":["function"]},"name":"install"}]},null],"returns":[{"type":{"names":["interact"]}}],"name":"use","longname":"module:interact.use","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R005042","___s":true,"attribs":"(static) ","id":".use","signature":"(plugin) → {interact}","ancestors":["interact."]},{"comment":"/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * });\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * });\n */","meta":{"filename":"interact.js","lineno":7737,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{},"shortpath":"packages/interactjs/dist/interact.js"},"kind":"module","name":"modifiers/snapEdges","description":"

This module allows snapping of the edges of targets during resize\ninteractions.

","examples":[{"caption":"","code":"interact(target).resizable({\n snapEdges: {\n targets: [interact.snappers.grid({ x: 100, y: 50 })],\n },\n});\n\ninteract(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});"}],"longname":"module:modifiers/snapEdges","scope":"inner","memberof":"module:interact","___id":"T000004R000004","___s":true,"attribs":"","id":"modifiers/snapEdges","ancestors":["interact~"],"modules":[{"comment":"/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * });\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * });\n */","meta":{"filename":"interact.js","lineno":7737,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{},"shortpath":"packages/interactjs/dist/interact.js"},"kind":"module","name":"modifiers/snapEdges","description":"

This module allows snapping of the edges of targets during resize\ninteractions.

","examples":[{"caption":"","code":"interact(target).resizable({\n snapEdges: {\n targets: [interact.snappers.grid({ x: 100, y: 50 })],\n },\n});\n\ninteract(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});"}],"longname":"module:modifiers/snapEdges","scope":"inner","memberof":"module:interact","___id":"T000002R005453","___s":true,"attribs":"","id":"modifiers/snapEdges","ancestors":["interact~"]},{"comment":"/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * });\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * });\n */","meta":{"filename":"edges.js","lineno":1,"columnno":0,"path":"/home/taye/proj/interact.js/packages/modifiers/snap","code":{},"shortpath":"packages/modifiers/snap/edges.js"},"kind":"module","name":"modifiers/snapEdges","description":"

This module allows snapping of the edges of targets during resize\ninteractions.

","examples":[{"caption":"","code":"interact(target).resizable({\n snapEdges: {\n targets: [interact.snappers.grid({ x: 100, y: 50 })],\n },\n});\n\ninteract(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});"}],"longname":"module:modifiers/snapEdges","___id":"T000002R010206","___s":true,"attribs":"","id":"modifiers/snapEdges","ancestors":[]}]},{"comment":"/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * });\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * });\n */","meta":{"filename":"edges.js","lineno":1,"columnno":0,"path":"/home/taye/proj/interact.js/packages/modifiers/snap","code":{},"shortpath":"packages/modifiers/snap/edges.js"},"kind":"module","name":"modifiers/snapEdges","description":"

This module allows snapping of the edges of targets during resize\ninteractions.

","examples":[{"caption":"","code":"interact(target).resizable({\n snapEdges: {\n targets: [interact.snappers.grid({ x: 100, y: 50 })],\n },\n});\n\ninteract(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});"}],"longname":"module:modifiers/snapEdges","___id":"T000004R000005","___s":true,"attribs":"","id":"modifiers/snapEdges","ancestors":[],"modules":[{"comment":"/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * });\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * });\n */","meta":{"filename":"interact.js","lineno":7737,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{},"shortpath":"packages/interactjs/dist/interact.js"},"kind":"module","name":"modifiers/snapEdges","description":"

This module allows snapping of the edges of targets during resize\ninteractions.

","examples":[{"caption":"","code":"interact(target).resizable({\n snapEdges: {\n targets: [interact.snappers.grid({ x: 100, y: 50 })],\n },\n});\n\ninteract(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});"}],"longname":"module:modifiers/snapEdges","scope":"inner","memberof":"module:interact","___id":"T000002R005453","___s":true,"attribs":"","id":"modifiers/snapEdges","ancestors":["interact~"],"modules":[{"comment":"/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * });\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * });\n */","meta":{"filename":"interact.js","lineno":7737,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{},"shortpath":"packages/interactjs/dist/interact.js"},"kind":"module","name":"modifiers/snapEdges","description":"

This module allows snapping of the edges of targets during resize\ninteractions.

","examples":[{"caption":"","code":"interact(target).resizable({\n snapEdges: {\n targets: [interact.snappers.grid({ x: 100, y: 50 })],\n },\n});\n\ninteract(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});"}],"longname":"module:modifiers/snapEdges","scope":"inner","memberof":"module:interact","___id":"T000002R005453","___s":true,"attribs":"","id":"modifiers/snapEdges","ancestors":["interact~"]},{"comment":"/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * });\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * });\n */","meta":{"filename":"edges.js","lineno":1,"columnno":0,"path":"/home/taye/proj/interact.js/packages/modifiers/snap","code":{},"shortpath":"packages/modifiers/snap/edges.js"},"kind":"module","name":"modifiers/snapEdges","description":"

This module allows snapping of the edges of targets during resize\ninteractions.

","examples":[{"caption":"","code":"interact(target).resizable({\n snapEdges: {\n targets: [interact.snappers.grid({ x: 100, y: 50 })],\n },\n});\n\ninteract(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});"}],"longname":"module:modifiers/snapEdges","___id":"T000002R010206","___s":true,"attribs":"","id":"modifiers/snapEdges","ancestors":[]}]},{"comment":"/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * });\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * });\n */","meta":{"filename":"edges.js","lineno":1,"columnno":0,"path":"/home/taye/proj/interact.js/packages/modifiers/snap","code":{},"shortpath":"packages/modifiers/snap/edges.js"},"kind":"module","name":"modifiers/snapEdges","description":"

This module allows snapping of the edges of targets during resize\ninteractions.

","examples":[{"caption":"","code":"interact(target).resizable({\n snapEdges: {\n targets: [interact.snappers.grid({ x: 100, y: 50 })],\n },\n});\n\ninteract(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});"}],"longname":"module:modifiers/snapEdges","___id":"T000002R010206","___s":true,"attribs":"","id":"modifiers/snapEdges","ancestors":[]}]},{"comment":"/**\n * ```js\n * const interactable = interact(target);\n * const drag = { name: drag, axis: 'x' };\n * const resize = { name: resize, edges: { left: true, bottom: true };\n *\n * interactable.reflow(drag);\n * interactable.reflow(resize);\n * ```\n *\n * Start an action sequence to re-apply modifiers, check drops, etc.\n *\n * @param { Object } action The action to begin\n * @param { string } action.name The name of the action\n * @returns { Promise }\n */","meta":{"range":[267838,267933],"filename":"interact.js","lineno":8495,"columnno":2,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100058406","name":"Interactable.prototype.reflow","type":"FunctionExpression","funcscope":"~__install_38","paramnames":["action"]},"shortpath":"packages/interactjs/dist/interact.js"},"description":"
const interactable = interact(target);\nconst drag = { name: drag, axis: 'x' };\nconst resize = { name: resize, edges: { left: true, bottom: true };\n\ninteractable.reflow(drag);\ninteractable.reflow(resize);\n
\n

Start an action sequence to re-apply modifiers, check drops, etc.

","params":[{"type":{"names":["Object"]},"description":"

The action to begin

","name":"action"},{"type":{"names":["string"]},"description":"

The name of the action

","name":"action.name"}],"returns":[{"type":{"names":["Promise."]}}],"name":"reflow","longname":"module:modifiers/snapEdges~Interactable#reflow","kind":"function","scope":"instance","memberof":"module:modifiers/snapEdges~Interactable","___id":"T000002R005830","___s":true,"attribs":"","id":"reflow","signature":"(action) → {Promise.<Interactable>}","ancestors":[]},{"kind":"package","longname":"package:undefined","files":["/home/taye/proj/interact.js/packages/actions/drag.js","/home/taye/proj/interact.js/packages/actions/drop/DropEvent.js","/home/taye/proj/interact.js/packages/actions/drop/index.js","/home/taye/proj/interact.js/packages/actions/gesture.js","/home/taye/proj/interact.js/packages/actions/index.js","/home/taye/proj/interact.js/packages/actions/resize.js","/home/taye/proj/interact.js/packages/actions/tests/drag.js","/home/taye/proj/interact.js/packages/actions/tests/drop/DropEvent.js","/home/taye/proj/interact.js/packages/actions/tests/drop/index.js","/home/taye/proj/interact.js/packages/autoScroll/index.js","/home/taye/proj/interact.js/packages/autoStart/base.js","/home/taye/proj/interact.js/packages/autoStart/dragAxis.js","/home/taye/proj/interact.js/packages/autoStart/hold.js","/home/taye/proj/interact.js/packages/autoStart/index.js","/home/taye/proj/interact.js/packages/autoStart/InteractableMethods.js","/home/taye/proj/interact.js/packages/autoStart/tests/hold.js","/home/taye/proj/interact.js/packages/core/defaultOptions.js","/home/taye/proj/interact.js/packages/core/Eventable.js","/home/taye/proj/interact.js/packages/core/Interactable.js","/home/taye/proj/interact.js/packages/core/interactablePreventDefault.js","/home/taye/proj/interact.js/packages/core/InteractEvent.js","/home/taye/proj/interact.js/packages/core/Interaction.js","/home/taye/proj/interact.js/packages/core/interactions.js","/home/taye/proj/interact.js/packages/core/scope.js","/home/taye/proj/interact.js/packages/core/tests/Eventable.js","/home/taye/proj/interact.js/packages/core/tests/helpers.js","/home/taye/proj/interact.js/packages/core/tests/Interactable.js","/home/taye/proj/interact.js/packages/core/tests/Interaction.js","/home/taye/proj/interact.js/packages/core/tests/interactions.js","/home/taye/proj/interact.js/packages/inertia/index.js","/home/taye/proj/interact.js/packages/interact/index.js","/home/taye/proj/interact.js/packages/interact/interact.js","/home/taye/proj/interact.js/packages/interact/tests/interact.js","/home/taye/proj/interact.js/packages/interactjs/dist/interact.js","/home/taye/proj/interact.js/packages/interactjs/dist/interact.min.js","/home/taye/proj/interact.js/packages/interactjs/index.js","/home/taye/proj/interact.js/packages/modifiers/base.js","/home/taye/proj/interact.js/packages/modifiers/index.js","/home/taye/proj/interact.js/packages/modifiers/restrict/edges.js","/home/taye/proj/interact.js/packages/modifiers/restrict/pointer.js","/home/taye/proj/interact.js/packages/modifiers/restrict/size.js","/home/taye/proj/interact.js/packages/modifiers/snap/edges.js","/home/taye/proj/interact.js/packages/modifiers/snap/pointer.js","/home/taye/proj/interact.js/packages/modifiers/snap/size.js","/home/taye/proj/interact.js/packages/modifiers/tests/base.js","/home/taye/proj/interact.js/packages/modifiers/tests/restrict/edges.js","/home/taye/proj/interact.js/packages/modifiers/tests/restrict/size.js","/home/taye/proj/interact.js/packages/modifiers/tests/snap/edges.js","/home/taye/proj/interact.js/packages/modifiers/tests/snap/pointer.js","/home/taye/proj/interact.js/packages/modifiers/tests/snap/size.js","/home/taye/proj/interact.js/packages/pointerEvents/base.js","/home/taye/proj/interact.js/packages/pointerEvents/holdRepeat.js","/home/taye/proj/interact.js/packages/pointerEvents/index.js","/home/taye/proj/interact.js/packages/pointerEvents/interactableTargets.js","/home/taye/proj/interact.js/packages/pointerEvents/PointerEvent.js","/home/taye/proj/interact.js/packages/pointerEvents/tests/base.js","/home/taye/proj/interact.js/packages/pointerEvents/tests/holdRepeat.js","/home/taye/proj/interact.js/packages/pointerEvents/tests/PointerEvent.js","/home/taye/proj/interact.js/packages/reflow/index.js","/home/taye/proj/interact.js/packages/reflow/tests/index.js","/home/taye/proj/interact.js/packages/utils/arr.js","/home/taye/proj/interact.js/packages/utils/browser.js","/home/taye/proj/interact.js/packages/utils/clone.js","/home/taye/proj/interact.js/packages/utils/domObjects.js","/home/taye/proj/interact.js/packages/utils/domUtils.js","/home/taye/proj/interact.js/packages/utils/events.js","/home/taye/proj/interact.js/packages/utils/extend.js","/home/taye/proj/interact.js/packages/utils/getOriginXY.js","/home/taye/proj/interact.js/packages/utils/hypot.js","/home/taye/proj/interact.js/packages/utils/index.js","/home/taye/proj/interact.js/packages/utils/interactionFinder.js","/home/taye/proj/interact.js/packages/utils/is.js","/home/taye/proj/interact.js/packages/utils/isWindow.js","/home/taye/proj/interact.js/packages/utils/normalizeListeners.js","/home/taye/proj/interact.js/packages/utils/pointerExtend.js","/home/taye/proj/interact.js/packages/utils/pointerUtils.js","/home/taye/proj/interact.js/packages/utils/raf.js","/home/taye/proj/interact.js/packages/utils/rect.js","/home/taye/proj/interact.js/packages/utils/Signals.js","/home/taye/proj/interact.js/packages/utils/snappers/grid.js","/home/taye/proj/interact.js/packages/utils/snappers/index.js","/home/taye/proj/interact.js/packages/utils/tests/normalizeListeners.js","/home/taye/proj/interact.js/packages/utils/window.js","/home/taye/proj/interact.js/docs/index.md"],"___id":"T000002R011763","___s":true,"attribs":"","id":"package:","ancestors":[]},{"comment":"/** */","meta":{"range":[1542,1606],"filename":"PointerEvent.js","lineno":57,"columnno":2,"path":"/home/taye/proj/interact.js/packages/pointerEvents","code":{"id":"astnode100104238","name":"preventDefault","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/pointerEvents/PointerEvent.js"},"name":"preventDefault","longname":"preventDefault","kind":"function","scope":"global","params":[],"___id":"T000002R010952","___s":true,"attribs":"","id":"preventDefault","signature":"()","ancestors":[]},{"comment":"/** */","meta":{"range":[1692,1796],"filename":"PointerEvent.js","lineno":67,"columnno":2,"path":"/home/taye/proj/interact.js/packages/pointerEvents","code":{"id":"astnode100104259","name":"stopImmediatePropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/pointerEvents/PointerEvent.js"},"name":"stopImmediatePropagation","longname":"stopImmediatePropagation","kind":"function","scope":"global","params":[],"___id":"T000002R010955","___s":true,"attribs":"","id":"stopImmediatePropagation","signature":"()","ancestors":[]},{"comment":"/** */","meta":{"range":[1619,1679],"filename":"PointerEvent.js","lineno":62,"columnno":2,"path":"/home/taye/proj/interact.js/packages/pointerEvents","code":{"id":"astnode100104249","name":"stopPropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/pointerEvents/PointerEvent.js"},"name":"stopPropagation","longname":"stopPropagation","kind":"function","scope":"global","params":[],"___id":"T000002R010953","___s":true,"attribs":"","id":"stopPropagation","signature":"()","ancestors":[]}] \ No newline at end of file +[{"comment":"/**\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 */","meta":{"range":[62307,62599],"filename":"interact.js","lineno":2024,"columnno":2,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100030689","name":"interact.dynamicDrop","type":"FunctionExpression","funcscope":"~__install_3","paramnames":["newValue"]},"vars":{"scope.dynamicDrop":"module:interact~scope.dynamicDrop"},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Returns or sets whether the dimensions of dropzone elements are calculated\non every dragmove or only on dragstart for the default dropChecker

","params":[{"type":{"names":["boolean"]},"optional":true,"description":"

True to check on each move. False to check only\nbefore start

","name":"newValue"}],"returns":[{"type":{"names":["boolean","interact"]},"description":"

The current setting or interact

"}],"name":"dynamicDrop","longname":"~__install_3~interact.dynamicDrop","kind":"function","memberof":"~__install_3~interact","scope":"static","___id":"T000002R002998","___s":true,"attribs":"(static) ","id":".dynamicDrop","signature":"(newValueopt) → {boolean|interact}","ancestors":[]},{"comment":"/**\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 */","meta":{"range":[85057,85494],"filename":"interact.js","lineno":2728,"columnno":2,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100033817","name":"Interactable.prototype.gesturable","type":"FunctionExpression","funcscope":"~__install_4","paramnames":["options"]},"vars":{"this.options.gesture.enabled":"~__install_4~Interactable#gesturable#options.gesture.enabled"},"shortpath":"packages/interactjs/dist/interact.js"},"description":"
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\nvar isGestureable = interact(element).gesturable();\n
\n

Gets or sets whether multitouch gestures can be performed on the target

","params":[{"type":{"names":["boolean","object"]},"optional":true,"description":"

true/false or An object with event\nlisteners to be fired on gesture events (makes the Interactable gesturable)

","name":"options"}],"returns":[{"type":{"names":["boolean","Interactable"]},"description":"

A boolean indicating if this can be the\ntarget of gesture events, or this Interactable

"}],"name":"gesturable","longname":"~__install_4~Interactable#gesturable","kind":"function","memberof":"~__install_4~Interactable","scope":"instance","___id":"T000002R003306","___s":true,"attribs":"","id":"gesturable","signature":"(optionsopt) → {boolean|Interactable}","ancestors":[]},{"comment":"/**\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 */","meta":{"range":[95230,96121],"filename":"interact.js","lineno":3025,"columnno":2,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100035033","name":"Interactable.prototype.resizable","type":"FunctionExpression","funcscope":"~__install_6","paramnames":["options"]},"vars":{"this.options.resize.enabled":"~__install_6~Interactable#resizable#options.resize.enabled","this.options.resize.axis":"~__install_6~Interactable#resizable#options.resize.axis","this.options.resize.preserveAspectRatio":"~__install_6~Interactable#resizable#options.resize.preserveAspectRatio","this.options.resize.square":"~__install_6~Interactable#resizable#options.resize.square"},"shortpath":"packages/interactjs/dist/interact.js"},"description":"
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\nvar isResizeable = interact(element).resizable();\n
\n

Gets or sets whether resize actions can be performed on the target

","params":[{"type":{"names":["boolean","object"]},"optional":true,"description":"

true/false or An object with event\nlisteners to be fired on resize events (object makes the Interactable\nresizable)

","name":"options"}],"returns":[{"type":{"names":["boolean","Interactable"]},"description":"

A boolean indicating if this can be the\ntarget of resize elements, or this Interactable

"}],"name":"resizable","longname":"~__install_6~Interactable#resizable","kind":"function","memberof":"~__install_6~Interactable","scope":"instance","___id":"T000002R003441","___s":true,"attribs":"","id":"resizable","signature":"(optionsopt) → {boolean|Interactable}","ancestors":[]},{"comment":"/**\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 * Gets 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 */","meta":{"range":[118066,118365],"filename":"interact.js","lineno":3747,"columnno":2,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100038041","name":"Interactable.prototype.actionChecker","type":"FunctionExpression","funcscope":"~__install_8","paramnames":["checker"]},"vars":{"this.options.actionChecker":"~__install_8~Interactable#actionChecker#options.actionChecker"},"shortpath":"packages/interactjs/dist/interact.js"},"description":"
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

Gets or sets the function used to check action to be performed on\npointerDown

","params":[{"type":{"names":["function","null"]},"optional":true,"description":"

A function which takes a pointer event,\ndefaultAction string, interactable, element and interaction as parameters\nand returns an object with name property 'drag' 'resize' or 'gesture' and\noptionally an edges object with boolean 'top', 'left', 'bottom' and right\nprops.

","name":"checker"}],"returns":[{"type":{"names":["function","Interactable"]},"description":"

The checker function or this Interactable

"}],"name":"actionChecker","longname":"~__install_8~Interactable#actionChecker","kind":"function","memberof":"~__install_8~Interactable","scope":"instance","___id":"T000002R003704","___s":true,"attribs":"","id":"actionChecker","signature":"(checkeropt) → {function|Interactable}","ancestors":[]},{"comment":"/**\n * ```js\n *\n * @deprecated\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to allow from any element\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */","meta":{"range":[115622,115865],"filename":"interact.js","lineno":3675,"columnno":2,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100037869","name":"Interactable.prototype.allowFrom","type":"CallExpression","funcscope":"~__install_8","value":"","paramnames":[]},"shortpath":"packages/interactjs/dist/interact.js"},"description":"
","deprecated":"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\nCSS selector or Element.\n\nDon't use this method. Instead set the `allowFrom` option for each action\nor for `pointerEvents`","examples":[{"caption":"","code":"interact(targett)\n .resizable({\n allowFrom: '.resize-handle',\n .pointerEvents({\n allowFrom: '.handle',,\n });"}],"params":[{"type":{"names":["string","Element","null"]},"optional":true,"description":"

a CSS selector string, an\nElement or null to allow from any element

","name":"newValue"}],"returns":[{"type":{"names":["string","Element","object"]},"description":"

The current allowFrom value or this\nInteractable

"}],"name":"allowFrom","longname":"~__install_8~Interactable#allowFrom","kind":"member","memberof":"~__install_8~Interactable","scope":"instance","___id":"T000002R003700","___s":true,"attribs":"","id":"allowFrom","ancestors":[],"signature":""},{"comment":"/**\n * ```js\n * interact(element, { ignoreFrom: document.getElementById('no-action') });\n * // or\n * interact(element).ignoreFrom('input, textarea, a');\n * ```\n * @deprecated\n * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n * of it's parents match the given CSS selector or Element, no\n * drag/resize/gesture is started.\n *\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to not ignore any elements\n * @return {string | Element | object} The current ignoreFrom value or this\n * Interactable\n */","meta":{"range":[114635,114882],"filename":"interact.js","lineno":3647,"columnno":2,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100037845","name":"Interactable.prototype.ignoreFrom","type":"CallExpression","funcscope":"~__install_8","value":"","paramnames":[]},"shortpath":"packages/interactjs/dist/interact.js"},"description":"
interact(element, { ignoreFrom: document.getElementById('no-action') });\n// or\ninteract(element).ignoreFrom('input, textarea, a');\n
","deprecated":"If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\nof it's parents match the given CSS selector or Element, no\ndrag/resize/gesture is started.\n\nDon't use this method. Instead set the `ignoreFrom` option for each action\nor for `pointerEvents`","examples":[{"caption":"","code":"interact(targett)\n .draggable({\n ignoreFrom: 'input, textarea, a[href]'',\n })\n .pointerEvents({\n ignoreFrom: '[no-pointer]',\n });"}],"params":[{"type":{"names":["string","Element","null"]},"optional":true,"description":"

a CSS selector string, an\nElement or null to not ignore any elements

","name":"newValue"}],"returns":[{"type":{"names":["string","Element","object"]},"description":"

The current ignoreFrom value or this\nInteractable

"}],"name":"ignoreFrom","longname":"~__install_8~Interactable#ignoreFrom","kind":"member","memberof":"~__install_8~Interactable","scope":"instance","___id":"T000002R003699","___s":true,"attribs":"","id":"ignoreFrom","ancestors":[],"signature":""},{"comment":"/**\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 */","meta":{"range":[118654,118949],"filename":"interact.js","lineno":3769,"columnno":2,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100038088","name":"Interactable.prototype.styleCursor","type":"FunctionExpression","funcscope":"~__install_8","paramnames":["newValue"]},"vars":{"this.options.styleCursor":"~__install_8~Interactable#styleCursor#options.styleCursor"},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Returns or sets whether the the cursor should be changed depending on the\naction that would be performed if the mouse were pressed and dragged.

","params":[{"type":{"names":["boolean"]},"optional":true,"name":"newValue"}],"returns":[{"type":{"names":["boolean","Interactable"]},"description":"

The current setting or this Interactable

"}],"name":"styleCursor","longname":"~__install_8~Interactable#styleCursor","kind":"function","memberof":"~__install_8~Interactable","scope":"instance","___id":"T000002R003706","___s":true,"attribs":"","id":"styleCursor","signature":"(newValueopt) → {boolean|Interactable}","ancestors":[]},{"comment":"/**\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 */","meta":{"range":[137727,137835],"filename":"interact.js","lineno":4383,"columnno":2,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100040626","name":"Interactable.prototype.preventDefault","type":"FunctionExpression","funcscope":"~__install_18","paramnames":["newValue"]},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Returns or sets whether to prevent the browser's default behaviour in\nresponse to pointer events. Can be set to:

\n
    \n
  • 'always' to always prevent
  • \n
  • 'never' to never prevent
  • \n
  • 'auto' to let interact.js try to determine what would be best
  • \n
","params":[{"type":{"names":["string"]},"optional":true,"description":"

'always', 'never' or 'auto'

","name":"newValue"}],"returns":[{"type":{"names":["string","Interactable"]},"description":"

The current setting or this Interactable

"}],"name":"preventDefault","longname":"~__install_18~Interactable#preventDefault","kind":"function","memberof":"~__install_18~Interactable","scope":"instance","___id":"T000002R003933","___s":true,"attribs":"","id":"preventDefault","signature":"(newValueopt) → {string|Interactable}","ancestors":[]},{"comment":"/**\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 */","meta":{"range":[220499,220526],"filename":"interact.js","lineno":6869,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100051783","name":"_$interact_23.scope","type":"Identifier","funcscope":"","value":"scope","paramnames":[]},"shortpath":"packages/interactjs/dist/interact.js"},"description":"
interact('#draggable').draggable(true);\n\nvar rectables = interact('rect');\nrectables\n  .gesturable(true)\n  .on('gesturemove', function (event) {\n      // ...\n  });\n
\n

The methods of this variable can be used to set elements as interactables\nand also to change various default settings.

\n

Calling it as a function and passing an element or a valid CSS selector\nstring returns an Interactable object which has various methods to configure\nit.

","scope":"global","params":[{"type":{"names":["Element","string"]},"description":"

The HTML or SVG Element to interact with\nor CSS selector

","name":"target"}],"returns":[{"type":{"names":["Interactable"]}}],"name":"_$interact_23scope","longname":"_$interact_23scope","kind":"member","___id":"T000002R005077","___s":true,"attribs":"","id":"_$interact_23scope","ancestors":[],"signature":""},{"comment":"/** @article /home/taye/proj/interact.js/docs/index.md **/","meta":{"filename":"index.md","lineno":1,"columnno":0,"path":"/home/taye/proj/interact.js/docs","code":{},"shortpath":"docs/index.md"},"kind":"article","source":"\n\n","name":"index","filename":"index.md","title":"API Reference","longname":"article:index","description":"

","outfilename":"index.html","scope":"global","___id":"T000002R011803","___s":true,"attribs":"","id":"index","ancestors":[]},{"comment":"/**\n * Class of events fired on dropzones during drags with acceptable targets.\n */","meta":{"range":[157,737],"filename":"DropEvent.js","lineno":7,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions/drop","code":{"id":"astnode100000534","name":"DropEvent","type":"MethodDefinition","paramnames":["dropStatus","dragEvent","type"]},"vars":{"":null},"shortpath":"packages/actions/drop/DropEvent.js"},"description":"

Class of events fired on dropzones during drags with acceptable targets.

","name":"DropEvent","longname":"DropEvent","kind":"class","scope":"global","params":[],"___id":"T000003R000002","___s":true,"attribs":"","id":"DropEvent","signature":"()","ancestors":[]},{"comment":"/**\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 */","meta":{"range":[957,2103],"filename":"DropEvent.js","lineno":32,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions/drop","code":{"id":"astnode100000630","name":"DropEvent#reject","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/actions/drop/DropEvent.js"},"description":"

If this is a dropactivate event, the dropzone element will be\ndeactivated.

\n

If this is a dragmove or dragenter, a dragleave will be fired on the\ndropzone element and more.

","name":"reject","longname":"DropEvent#reject","kind":"function","memberof":"DropEvent","scope":"instance","params":[],"___id":"T000002R000064","___s":true,"attribs":"","id":"reject","signature":"()","ancestors":["DropEvent#"]},{"comment":"/**\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 * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param {boolean | object | null} [options] The new options to be set.\n * @return {boolean | Interactable} The current setting or this Interactable\n */","meta":{"range":[11963,14105],"filename":"index.js","lineno":359,"columnno":0,"path":"/home/taye/proj/interact.js/packages/actions/drop","code":{"id":"astnode100002109","name":"dropzoneMethod","type":"FunctionDeclaration","paramnames":["interactable","options"]},"vars":{"interactable.options.drop.enabled":"interactable.options.drop.enabled","normalized":"dropzoneMethod~normalized","corrected":"dropzoneMethod~corrected","":null,"interactable.options.drop.listeners":"interactable.options.drop.listeners","interactable.options.drop.overlap":"interactable.options.drop.overlap","interactable.options.drop.accept":"interactable.options.drop.accept","interactable.options.drop.checker":"interactable.options.drop.checker"},"shortpath":"packages/actions/drop/index.js"},"description":"
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
interact('.drop').dropzone({\n  accept: '.can-drop' || document.getElementById('single-drop'),\n  overlap: 'pointer' || 'center' || zeroToOne\n}\n
\n

Returns or sets whether draggables can be dropped onto this target to\ntrigger drop events

\n

Dropzones can receive the following events:

\n
    \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\nselector 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\nvalues 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).\ne.g. 0.5 for drop to happen when half of the area of the draggable is\nover the dropzone
  • \n
\n

Use the checker option to specify a function to check if a dragged element\nis over this Interactable.

","params":[{"type":{"names":["boolean","object","null"]},"optional":true,"description":"

The new options to be set.

","name":"options"}],"returns":[{"type":{"names":["boolean","Interactable"]},"description":"

The current setting or this Interactable

"}],"name":"dropzoneMethod","longname":"dropzoneMethod","kind":"function","scope":"global","___id":"T000002R000208","___s":true,"attribs":"","id":"dropzoneMethod","signature":"(optionsopt) → {boolean|Interactable}","ancestors":[]},{"comment":"/**\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 */","meta":{"range":[2404,2512],"filename":"interactablePreventDefault.js","lineno":78,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100011598","name":"Interactable.prototype.preventDefault","type":"FunctionExpression","funcscope":"install","paramnames":["newValue"]},"shortpath":"packages/core/interactablePreventDefault.js"},"description":"

Returns or sets whether to prevent the browser's default behaviour in\nresponse to pointer events. Can be set to:

\n
    \n
  • 'always' to always prevent
  • \n
  • 'never' to never prevent
  • \n
  • 'auto' to let interact.js try to determine what would be best
  • \n
","params":[{"type":{"names":["string"]},"optional":true,"description":"

'always', 'never' or 'auto'

","name":"newValue"}],"returns":[{"type":{"names":["string","Interactable"]},"description":"

The current setting or this Interactable

"}],"name":"preventDefault","longname":"install~Interactable#preventDefault","kind":"function","memberof":"install~Interactable","scope":"instance","___id":"T000002R001072","___s":true,"attribs":"","id":"preventDefault","signature":"(newValueopt) → {string|Interactable}","ancestors":[]},{"comment":"/**\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 */","meta":{"range":[940,1203],"filename":"interact.js","lineno":36,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100020327","name":"interact","type":"FunctionDeclaration","paramnames":["target","options"]},"vars":{"interactable":"module:interact~interactable","interactable.events.global":"module:interact~interactable.events.global"},"shortpath":"packages/interact/interact.js"},"description":"
interact('#draggable').draggable(true);\n\nvar rectables = interact('rect');\nrectables\n  .gesturable(true)\n  .on('gesturemove', function (event) {\n      // ...\n  });\n
\n

The methods of this variable can be used to set elements as interactables\nand also to change various default settings.

\n

Calling it as a function and passing an element or a valid CSS selector\nstring returns an Interactable object which has various methods to configure\nit.

","scope":"global","params":[{"type":{"names":["Element","string"]},"description":"

The HTML or SVG Element to interact with\nor CSS selector

","name":"target"}],"returns":[{"type":{"names":["Interactable"]}}],"name":"interact","longname":"interact","kind":"function","___id":"T000002R002003","___s":true,"attribs":"","id":"interact","signature":"(target) → {Interactable}","ancestors":[]},{"comment":"/**\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 */","meta":{"range":[3219,3512],"filename":"index.js","lineno":94,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions/drop","code":{"id":"astnode100001221","name":"interact.dynamicDrop","type":"FunctionExpression","paramnames":["newValue"]},"vars":{"scope.dynamicDrop":"scope.dynamicDrop"},"shortpath":"packages/actions/drop/index.js"},"description":"

Returns or sets whether the dimensions of dropzone elements are calculated\non every dragmove or only on dragstart for the default dropChecker

","params":[{"type":{"names":["boolean"]},"optional":true,"description":"

True to check on each move. False to check only\nbefore start

","name":"newValue"}],"returns":[{"type":{"names":["boolean","interact"]},"description":"

The current setting or interact

"}],"name":"dynamicDrop","longname":"interact.dynamicDrop","kind":"function","memberof":"interact","scope":"static","___id":"T000002R000124","___s":true,"attribs":"(static) ","id":".dynamicDrop","signature":"(newValueopt) → {boolean|interact}","ancestors":["interact."]},{"comment":"/** */","meta":{"range":[686,1034],"filename":"Interactable.js","lineno":26,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010400","name":"Interactable","type":"MethodDefinition","paramnames":["target","options","defaultContext"]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"name":"Interactable","longname":"Interactable","kind":"class","scope":"global","params":[],"___id":"T000003R000003","___s":true,"attribs":"","id":"Interactable","signature":"()","ancestors":[]},{"comment":"/**\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 * Gets 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 */","meta":{"range":[4860,5157],"filename":"InteractableMethods.js","lineno":147,"columnno":2,"path":"/home/taye/proj/interact.js/packages/autoStart","code":{"id":"astnode100009740","name":"Interactable.prototype.actionChecker","type":"FunctionExpression","paramnames":["checker"]},"vars":{"this.options.actionChecker":"Interactable#actionChecker#options.actionChecker"},"shortpath":"packages/autoStart/InteractableMethods.js"},"description":"
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

Gets or sets the function used to check action to be performed on\npointerDown

","params":[{"type":{"names":["function","null"]},"optional":true,"description":"

A function which takes a pointer event,\ndefaultAction string, interactable, element and interaction as parameters\nand returns an object with name property 'drag' 'resize' or 'gesture' and\noptionally an edges object with boolean 'top', 'left', 'bottom' and right\nprops.

","name":"checker"}],"returns":[{"type":{"names":["function","Interactable"]},"description":"

The checker function or this Interactable

"}],"name":"actionChecker","longname":"Interactable#actionChecker","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R000934","___s":true,"attribs":"","id":"actionChecker","signature":"(checkeropt) → {function|Interactable}","ancestors":["Interactable#"]},{"comment":"/**\n * ```js\n *\n * @deprecated\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to allow from any element\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */","meta":{"range":[2487,2714],"filename":"InteractableMethods.js","lineno":79,"columnno":2,"path":"/home/taye/proj/interact.js/packages/autoStart","code":{"id":"astnode100009572","name":"Interactable.prototype.allowFrom","type":"CallExpression","value":"","paramnames":[]},"shortpath":"packages/autoStart/InteractableMethods.js"},"description":"
","deprecated":"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\nCSS selector or Element.\n\nDon't use this method. Instead set the `allowFrom` option for each action\nor for `pointerEvents`","examples":[{"caption":"","code":"interact(targett)\n .resizable({\n allowFrom: '.resize-handle',\n .pointerEvents({\n allowFrom: '.handle',,\n });"}],"params":[{"type":{"names":["string","Element","null"]},"optional":true,"description":"

a CSS selector string, an\nElement or null to allow from any element

","name":"newValue"}],"returns":[{"type":{"names":["string","Element","object"]},"description":"

The current allowFrom value or this\nInteractable

"}],"name":"allowFrom","longname":"Interactable#allowFrom","kind":"member","memberof":"Interactable","scope":"instance","___id":"T000002R000930","___s":true,"attribs":"","id":"allowFrom","ancestors":["Interactable#"],"signature":""},{"comment":"/**\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 */","meta":{"range":[5765,5807],"filename":"Interactable.js","lineno":190,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010933","name":"Interactable#context","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"description":"

Gets the selector context Node of the Interactable. The default is\nwindow.document.

","returns":[{"type":{"names":["Node"]},"description":"

The context Node of this Interactable

"}],"name":"context","longname":"Interactable#context","kind":"function","memberof":"Interactable","scope":"instance","params":[],"___id":"T000002R001033","___s":true,"attribs":"","id":"context","signature":"() → {Node}","ancestors":["Interactable#"]},{"comment":"/**\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 */","meta":{"range":[5399,5590],"filename":"Interactable.js","lineno":174,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010903","name":"Interactable#deltaSource","type":"MethodDefinition","paramnames":["newValue"]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"description":"

Returns or sets the mouse coordinate types used to calculate the\nmovement of the pointer.

","params":[{"type":{"names":["string"]},"optional":true,"description":"

Use 'client' if you will be scrolling while\ninteracting; Use 'page' if you want autoScroll to work

","name":"newValue"}],"returns":[{"type":{"names":["string","object"]},"description":"

The current deltaSource or this Interactable

"}],"name":"deltaSource","longname":"Interactable#deltaSource","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R001031","___s":true,"attribs":"","id":"deltaSource","signature":"(newValueopt) → {string|object}","ancestors":["Interactable#"]},{"comment":"/**\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 */","meta":{"range":[9243,9818],"filename":"interact.js","lineno":326,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100022692","name":"draggable","type":"FunctionDeclaration","paramnames":["options"]},"vars":{"this.options.drag.enabled":"Interactable#draggable#options.drag.enabled","this.options.drag.lockAxis":"Interactable#draggable#options.drag.lockAxis","this.options.drag.startAxis":"Interactable#draggable#options.drag.startAxis"},"shortpath":"packages/interactjs/dist/interact.js"},"description":"
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\nvar isDraggable = interact('element').draggable(); // true\n
\n

Get or set whether drag actions can be performed on the target

","alias":"Interactable.prototype.draggable","params":[{"type":{"names":["boolean","object"]},"optional":true,"description":"

true/false or An object with event\nlisteners to be fired on drag events (object makes the Interactable\ndraggable)

","name":"options"}],"returns":[{"type":{"names":["boolean","Interactable"]},"description":"

boolean indicating if this can be the\ntarget of drag events, or this Interctable

"}],"name":"draggable","longname":"Interactable#draggable","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R002197","___s":true,"attribs":"","id":"draggable","signature":"(optionsopt) → {boolean|Interactable}","ancestors":["Interactable#"]},{"comment":"/**\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 */","meta":{"range":[3136,3710],"filename":"drag.js","lineno":108,"columnno":0,"path":"/home/taye/proj/interact.js/packages/actions","code":{"id":"astnode100000353","name":"draggable","type":"FunctionDeclaration","paramnames":["options"]},"vars":{"this.options.drag.enabled":"Interactable#draggable#options.drag.enabled","this.options.drag.lockAxis":"Interactable#draggable#options.drag.lockAxis","this.options.drag.startAxis":"Interactable#draggable#options.drag.startAxis"},"shortpath":"packages/actions/drag.js"},"description":"
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\nvar isDraggable = interact('element').draggable(); // true\n
\n

Get or set whether drag actions can be performed on the target

","alias":"Interactable.prototype.draggable","params":[{"type":{"names":["boolean","object"]},"optional":true,"description":"

true/false or An object with event\nlisteners to be fired on drag events (object makes the Interactable\ndraggable)

","name":"options"}],"returns":[{"type":{"names":["boolean","Interactable"]},"description":"

boolean indicating if this can be the\ntarget of drag events, or this Interctable

"}],"name":"draggable","longname":"Interactable#draggable","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R000030","___s":true,"attribs":"","id":"draggable","signature":"(optionsopt) → {boolean|Interactable}","ancestors":["Interactable#"]},{"comment":"/**\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 */","meta":{"range":[6215,6282],"filename":"Interactable.js","lineno":207,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010961","name":"Interactable#fire","type":"MethodDefinition","paramnames":["iEvent"]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"description":"

Calls listeners for the given InteractEvent type bound globally\nand directly to this Interactable

","params":[{"type":{"names":["InteractEvent"]},"description":"

The InteractEvent object to be fired on this\nInteractable

","name":"iEvent"}],"returns":[{"type":{"names":["Interactable"]},"description":"

this Interactable

"}],"name":"fire","longname":"Interactable#fire","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R001035","___s":true,"attribs":"","id":"fire","signature":"(iEvent) → {Interactable}","ancestors":["Interactable#"]},{"comment":"/**\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 */","meta":{"range":[1316,1745],"filename":"gesture.js","lineno":52,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions","code":{"id":"astnode100002878","name":"Interactable.prototype.gesturable","type":"FunctionExpression","paramnames":["options"]},"vars":{"this.options.gesture.enabled":"Interactable#gesturable#options.gesture.enabled"},"shortpath":"packages/actions/gesture.js"},"description":"
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\nvar isGestureable = interact(element).gesturable();\n
\n

Gets or sets whether multitouch gestures can be performed on the target

","params":[{"type":{"names":["boolean","object"]},"optional":true,"description":"

true/false or An object with event\nlisteners to be fired on gesture events (makes the Interactable gesturable)

","name":"options"}],"returns":[{"type":{"names":["boolean","Interactable"]},"description":"

A boolean indicating if this can be the\ntarget of gesture events, or this Interactable

"}],"name":"gesturable","longname":"Interactable#gesturable","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R000260","___s":true,"attribs":"","id":"gesturable","signature":"(optionsopt) → {boolean|Interactable}","ancestors":["Interactable#"]},{"comment":"/**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {object} The object's bounding rectangle.\n */","meta":{"range":[3472,3695],"filename":"Interactable.js","lineno":104,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010755","name":"Interactable#getRect","type":"MethodDefinition","paramnames":["element"]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"description":"

The default function to get an Interactables bounding rect. Can be\noverridden using {@link Interactable.rectChecker}.

","params":[{"type":{"names":["Element"]},"optional":true,"description":"

The element to measure.

","name":"element"}],"returns":[{"type":{"names":["object"]},"description":"

The object's bounding rectangle.

"}],"name":"getRect","longname":"Interactable#getRect","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R001021","___s":true,"attribs":"","id":"getRect","signature":"(elementopt) → {object}","ancestors":["Interactable#"]},{"comment":"/**\n * ```js\n * interact(element, { ignoreFrom: document.getElementById('no-action') });\n * // or\n * interact(element).ignoreFrom('input, textarea, a');\n * ```\n * @deprecated\n * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n * of it's parents match the given CSS selector or Element, no\n * drag/resize/gesture is started.\n *\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to not ignore any elements\n * @return {string | Element | object} The current ignoreFrom value or this\n * Interactable\n */","meta":{"range":[1516,1747],"filename":"InteractableMethods.js","lineno":51,"columnno":2,"path":"/home/taye/proj/interact.js/packages/autoStart","code":{"id":"astnode100009552","name":"Interactable.prototype.ignoreFrom","type":"CallExpression","value":"","paramnames":[]},"shortpath":"packages/autoStart/InteractableMethods.js"},"description":"
interact(element, { ignoreFrom: document.getElementById('no-action') });\n// or\ninteract(element).ignoreFrom('input, textarea, a');\n
","deprecated":"If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\nof it's parents match the given CSS selector or Element, no\ndrag/resize/gesture is started.\n\nDon't use this method. Instead set the `ignoreFrom` option for each action\nor for `pointerEvents`","examples":[{"caption":"","code":"interact(targett)\n .draggable({\n ignoreFrom: 'input, textarea, a[href]'',\n })\n .pointerEvents({\n ignoreFrom: '[no-pointer]',\n });"}],"params":[{"type":{"names":["string","Element","null"]},"optional":true,"description":"

a CSS selector string, an\nElement or null to not ignore any elements

","name":"newValue"}],"returns":[{"type":{"names":["string","Element","object"]},"description":"

The current ignoreFrom value or this\nInteractable

"}],"name":"ignoreFrom","longname":"Interactable#ignoreFrom","kind":"member","memberof":"Interactable","scope":"instance","___id":"T000002R000929","___s":true,"attribs":"","id":"ignoreFrom","ancestors":["Interactable#"],"signature":""},{"comment":"/**\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 */","meta":{"range":[8140,8233],"filename":"Interactable.js","lineno":268,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100011124","name":"Interactable#off","type":"MethodDefinition","paramnames":["types","listener","options"]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"description":"

Removes an InteractEvent, pointerEvent or DOM event listener.

","params":[{"type":{"names":["string","array","object"]},"description":"

The types of events that were\nlistened for

","name":"types"},{"type":{"names":["function","array","object"]},"optional":true,"description":"

The event listener function(s)

","name":"listener"},{"type":{"names":["object","boolean"]},"optional":true,"description":"

options object or useCapture flag for\nremoveEventListener

","name":"options"}],"returns":[{"type":{"names":["Interactable"]},"description":"

This Interactable

"}],"name":"off","longname":"Interactable#off","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R001045","___s":true,"attribs":"","id":"off","signature":"(types, listeneropt, optionsopt) → {Interactable}","ancestors":["Interactable#"]},{"comment":"/**\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 */","meta":{"range":[7637,7728],"filename":"Interactable.js","lineno":254,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100011108","name":"Interactable#on","type":"MethodDefinition","paramnames":["types","listener","options"]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"description":"

Binds a listener for an InteractEvent, pointerEvent or DOM event.

","params":[{"type":{"names":["string","array","object"]},"description":"

The types of events to listen\nfor

","name":"types"},{"type":{"names":["function","array","object"]},"optional":true,"description":"

The event listener function(s)

","name":"listener"},{"type":{"names":["object","boolean"]},"optional":true,"description":"

options object or useCapture flag for\naddEventListener

","name":"options"}],"returns":[{"type":{"names":["Interactable"]},"description":"

This Interactable

"}],"name":"on","longname":"Interactable#on","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R001044","___s":true,"attribs":"","id":"on","signature":"(types, listeneropt, optionsopt) → {Interactable}","ancestors":["Interactable#"]},{"comment":"/**\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 */","meta":{"range":[4988,5066],"filename":"Interactable.js","lineno":162,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010891","name":"Interactable#origin","type":"MethodDefinition","paramnames":["newValue"]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"description":"

Gets or sets the origin of the Interactable's element. The x and y\nof the origin will be subtracted from action event coordinates.

","params":[{"type":{"names":["Element","object","string"]},"optional":true,"description":"

An HTML or SVG Element whose\nrect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\nor any CSS selector

","name":"origin"}],"returns":[{"type":{"names":["object"]},"description":"

The current origin or this Interactable

"}],"name":"origin","longname":"Interactable#origin","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R001030","___s":true,"attribs":"","id":"origin","signature":"(originopt) → {object}","ancestors":["Interactable#"]},{"comment":"/**\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 */","meta":{"range":[4023,4250],"filename":"Interactable.js","lineno":122,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010800","name":"Interactable#rectChecker","type":"MethodDefinition","paramnames":["checker"]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"description":"

Returns or sets the function used to calculate the interactable's\nelement's rectangle

","params":[{"type":{"names":["function"]},"optional":true,"description":"

A function which returns this Interactable's\nbounding rectangle. See {@link Interactable.getRect}

","name":"checker"}],"returns":[{"type":{"names":["function","object"]},"description":"

The checker function or this Interactable

"}],"name":"rectChecker","longname":"Interactable#rectChecker","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R001024","___s":true,"attribs":"","id":"rectChecker","signature":"(checkeropt) → {function|object}","ancestors":["Interactable#"]},{"comment":"/**\n * ```js\n * const interactable = interact(target);\n * const drag = { name: drag, axis: 'x' };\n * const resize = { name: resize, edges: { left: true, bottom: true };\n *\n * interactable.reflow(drag);\n * interactable.reflow(resize);\n * ```\n *\n * Start an action sequence to re-apply modifiers, check drops, etc.\n *\n * @param { Object } action The action to begin\n * @param { string } action.name The name of the action\n * @returns { Promise }\n */","meta":{"range":[1202,1297],"filename":"index.js","lineno":48,"columnno":2,"path":"/home/taye/proj/interact.js/packages/reflow","code":{"id":"astnode100106093","name":"Interactable.prototype.reflow","type":"FunctionExpression","paramnames":["action"]},"shortpath":"packages/reflow/index.js"},"description":"
const interactable = interact(target);\nconst drag = { name: drag, axis: 'x' };\nconst resize = { name: resize, edges: { left: true, bottom: true };\n\ninteractable.reflow(drag);\ninteractable.reflow(resize);\n
\n

Start an action sequence to re-apply modifiers, check drops, etc.

","params":[{"type":{"names":["Object"]},"description":"

The action to begin

","name":"action","subparams":[{"type":{"names":["string"]},"description":"

The name of the action

","name":"name"}]},null],"returns":[{"type":{"names":["Promise."]}}],"name":"reflow","longname":"Interactable#reflow","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R011128","___s":true,"attribs":"","id":"reflow","signature":"(action) → {Promise.<Interactable>}","ancestors":["Interactable#"]},{"comment":"/**\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 */","meta":{"range":[5616,6500],"filename":"resize.js","lineno":178,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions","code":{"id":"astnode100003987","name":"Interactable.prototype.resizable","type":"FunctionExpression","paramnames":["options"]},"vars":{"this.options.resize.enabled":"Interactable#resizable#options.resize.enabled","this.options.resize.axis":"Interactable#resizable#options.resize.axis","this.options.resize.preserveAspectRatio":"Interactable#resizable#options.resize.preserveAspectRatio","this.options.resize.square":"Interactable#resizable#options.resize.square"},"shortpath":"packages/actions/resize.js"},"description":"
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\nvar isResizeable = interact(element).resizable();\n
\n

Gets or sets whether resize actions can be performed on the target

","params":[{"type":{"names":["boolean","object"]},"optional":true,"description":"

true/false or An object with event\nlisteners to be fired on resize events (object makes the Interactable\nresizable)

","name":"options"}],"returns":[{"type":{"names":["boolean","Interactable"]},"description":"

A boolean indicating if this can be the\ntarget of resize elements, or this Interactable

"}],"name":"resizable","longname":"Interactable#resizable","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R000390","___s":true,"attribs":"","id":"resizable","signature":"(optionsopt) → {boolean|Interactable}","ancestors":["Interactable#"]},{"comment":"/**\n * Reset the options of this Interactable\n *\n * @param {object} options The new settings to apply\n * @return {object} This Interactable\n */","meta":{"range":[8393,9006],"filename":"Interactable.js","lineno":278,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100011140","name":"Interactable#set","type":"MethodDefinition","paramnames":["options"]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"description":"

Reset the options of this Interactable

","params":[{"type":{"names":["object"]},"description":"

The new settings to apply

","name":"options"}],"returns":[{"type":{"names":["object"]},"description":"

This Interactable

"}],"name":"set","longname":"Interactable#set","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R001046","___s":true,"attribs":"","id":"set","signature":"(options) → {object}","ancestors":["Interactable#"]},{"comment":"/**\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 */","meta":{"range":[5445,5738],"filename":"InteractableMethods.js","lineno":170,"columnno":2,"path":"/home/taye/proj/interact.js/packages/autoStart","code":{"id":"astnode100009787","name":"Interactable.prototype.styleCursor","type":"FunctionExpression","paramnames":["newValue"]},"vars":{"this.options.styleCursor":"Interactable#styleCursor#options.styleCursor"},"shortpath":"packages/autoStart/InteractableMethods.js"},"description":"

Returns or sets whether the the cursor should be changed depending on the\naction that would be performed if the mouse were pressed and dragged.

","params":[{"type":{"names":["boolean"]},"optional":true,"name":"newValue"}],"returns":[{"type":{"names":["boolean","Interactable"]},"description":"

The current setting or this Interactable

"}],"name":"styleCursor","longname":"Interactable#styleCursor","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R000936","___s":true,"attribs":"","id":"styleCursor","signature":"(newValueopt) → {boolean|Interactable}","ancestors":["Interactable#"]},{"comment":"/**\n * Remove this interactable from the list of interactables and remove it's\n * action capabilities and event listeners\n *\n * @return {interact}\n */","meta":{"range":[9173,10009],"filename":"Interactable.js","lineno":311,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100011251","name":"Interactable#unset","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/Interactable.js"},"description":"

Remove this interactable from the list of interactables and remove it's\naction capabilities and event listeners

","returns":[{"type":{"names":["interact"]}}],"name":"unset","longname":"Interactable#unset","kind":"function","memberof":"Interactable","scope":"instance","params":[],"___id":"T000002R001054","___s":true,"attribs":"","id":"unset","signature":"() → {interact}","ancestors":["Interactable#"]},{"comment":"/** */","meta":{"range":[238,2715],"filename":"InteractEvent.js","lineno":8,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100011728","name":"InteractEvent","type":"MethodDefinition","paramnames":["interaction","event","actionName","phase","element","related","preEnd","type"]},"vars":{"":null},"shortpath":"packages/core/InteractEvent.js"},"name":"InteractEvent","longname":"InteractEvent","kind":"class","scope":"global","params":[],"___id":"T000003R000004","___s":true,"attribs":"","id":"InteractEvent","signature":"()","ancestors":[]},{"comment":"/** */","meta":{"range":[4380,4484],"filename":"InteractEvent.js","lineno":136,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100012565","name":"InteractEvent#stopImmediatePropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/InteractEvent.js"},"name":"stopImmediatePropagation","longname":"InteractEvent#stopImmediatePropagation","kind":"function","memberof":"InteractEvent","scope":"instance","params":[],"___id":"T000002R001171","___s":true,"attribs":"","id":"stopImmediatePropagation","signature":"()","ancestors":["InteractEvent#"]},{"comment":"/** */","meta":{"range":[4497,4557],"filename":"InteractEvent.js","lineno":141,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100012579","name":"InteractEvent#stopPropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/InteractEvent.js"},"name":"stopPropagation","longname":"InteractEvent#stopPropagation","kind":"function","memberof":"InteractEvent","scope":"instance","params":[],"___id":"T000002R001174","___s":true,"attribs":"","id":"stopPropagation","signature":"()","ancestors":["InteractEvent#"]},{"comment":"/** */","meta":{"range":[175,1587],"filename":"Interaction.js","lineno":10,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100012610","name":"Interaction","type":"MethodDefinition","paramnames":[""]},"vars":{"":null},"shortpath":"packages/core/Interaction.js"},"name":"Interaction","longname":"Interaction","kind":"class","scope":"global","params":[],"___id":"T000003R000005","___s":true,"attribs":"","id":"Interaction","signature":"()","ancestors":[]},{"comment":"/**\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 */","meta":{"range":[7049,7401],"filename":"Interaction.js","lineno":246,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100013336","name":"Interaction#end","type":"MethodDefinition","paramnames":["event"]},"vars":{"":null},"shortpath":"packages/core/Interaction.js"},"description":"
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
","params":[{"type":{"names":["PointerEvent"]},"optional":true,"name":"event"}],"name":"end","longname":"Interaction#end","kind":"function","memberof":"Interaction","scope":"instance","___id":"T000002R001258","___s":true,"attribs":"","id":"end","signature":"(eventopt)","ancestors":["Interaction#"]},{"comment":"/**\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 */","meta":{"range":[5692,6016],"filename":"Interaction.js","lineno":190,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100013191","name":"Interaction#move","type":"MethodDefinition","paramnames":["signalArg"]},"vars":{"":null},"shortpath":"packages/core/Interaction.js"},"description":"
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

Force a move of the current action at the same coordinates. Useful if\nsnap/restrict has been changed and you want a movement with the new\nsettings.

","name":"move","longname":"Interaction#move","kind":"function","memberof":"Interaction","scope":"instance","params":[],"___id":"T000002R001238","___s":true,"attribs":"","id":"move","signature":"()","ancestors":["Interaction#"]},{"comment":"/**\n * @alias Interaction.prototype.move\n */","meta":{"range":[192193,192367],"filename":"interact.js","lineno":6113,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100048078","name":"Interaction.prototype.doMove","type":"CallExpression","funcscope":"","value":"","paramnames":[]},"shortpath":"packages/interactjs/dist/interact.js"},"alias":"Interaction.prototype.move","name":"move","longname":"Interaction#move","kind":"member","memberof":"Interaction","scope":"instance","___id":"T000002R004701","___s":true,"attribs":"","id":"move","ancestors":["Interaction#"],"signature":""},{"comment":"/**\n * @alias Interaction.prototype.move\n */","meta":{"range":[11016,11194],"filename":"Interaction.js","lineno":415,"columnno":0,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100013988","name":"Interaction.prototype.doMove","type":"CallExpression","value":"","paramnames":[]},"shortpath":"packages/core/Interaction.js"},"alias":"Interaction.prototype.move","name":"move","longname":"Interaction#move","kind":"member","memberof":"Interaction","scope":"instance","___id":"T000002R001327","___s":true,"attribs":"","id":"move","ancestors":["Interaction#"],"signature":""},{"comment":"/**\n * ```js\n * interact(target)\n * .draggable({\n * // disable the default drag start by down->move\n * manualStart: true\n * })\n * // start dragging after the user holds the pointer down\n * .on('hold', function (event) {\n * var interaction = event.interaction;\n *\n * if (!interaction.interacting()) {\n * interaction.start({ name: 'drag' },\n * event.interactable,\n * event.currentTarget);\n * }\n * });\n * ```\n *\n * Start an action with the given Interactable and Element as tartgets. The\n * action must be enabled for the target Interactable and an appropriate\n * number of pointers must be held down - 1 for drag/resize, 2 for gesture.\n *\n * Use it with `interactable.able({ manualStart: false })` to always\n * [start actions manually](https://github.com/taye/interact.js/issues/114)\n *\n * @param {object} action The action to be performed - drag, resize, etc.\n * @param {Interactable} target The Interactable to target\n * @param {Element} element The DOM Element to target\n * @return {object} interact\n */","meta":{"range":[3016,3439],"filename":"Interaction.js","lineno":101,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100012802","name":"Interaction#start","type":"MethodDefinition","paramnames":["action","target","element"]},"vars":{"":null},"shortpath":"packages/core/Interaction.js"},"description":"
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

Start an action with the given Interactable and Element as tartgets. The\naction must be enabled for the target Interactable and an appropriate\nnumber of pointers must be held down - 1 for drag/resize, 2 for gesture.

\n

Use it with interactable.<action>able({ manualStart: false }) to always\nstart actions manually

","params":[{"type":{"names":["object"]},"description":"

The action to be performed - drag, resize, etc.

","name":"action"},{"type":{"names":["Interactable"]},"description":"

The Interactable to target

","name":"target"},{"type":{"names":["Element"]},"description":"

The DOM Element to target

","name":"element"}],"returns":[{"type":{"names":["object"]},"description":"

interact

"}],"name":"start","longname":"Interaction#start","kind":"function","memberof":"Interaction","scope":"instance","___id":"T000002R001215","___s":true,"attribs":"","id":"start","signature":"(action, target, element) → {object}","ancestors":["Interaction#"]},{"comment":"/** */","meta":{"range":[7550,7738],"filename":"Interaction.js","lineno":275,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100013419","name":"Interaction#stop","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/Interaction.js"},"name":"stop","longname":"Interaction#stop","kind":"function","memberof":"Interaction","scope":"instance","params":[],"___id":"T000002R001269","___s":true,"attribs":"","id":"stop","signature":"()","ancestors":["Interaction#"]},{"comment":"/** */","meta":{"range":[107,1160],"filename":"PointerEvent.js","lineno":5,"columnno":2,"path":"/home/taye/proj/interact.js/packages/pointerEvents","code":{"id":"astnode100104302","name":"module.exports","type":"MethodDefinition","paramnames":["type","pointer","event","eventTarget","interaction"]},"vars":{"":null},"shortpath":"packages/pointerEvents/PointerEvent.js"},"name":"exports","longname":"module.exports#module.exports","kind":"class","memberof":"module.exports#module","scope":"static","params":[],"___id":"T000003R000006","___s":true,"attribs":"","id":"exports","signature":"()","ancestors":[]},{"comment":"/** @module interact */","meta":{"filename":"interact.js","lineno":1,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{},"shortpath":"packages/interact/interact.js"},"kind":"module","name":"interact","longname":"module:interact","___id":"T000004R000002","___s":true,"attribs":"","id":"interact","ancestors":[],"modules":[]},{"comment":"/** @module interact */","meta":{"filename":"interact.js","lineno":6840,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{},"shortpath":"packages/interactjs/dist/interact.js"},"kind":"module","name":"interact","longname":"module:interact","___id":"T000004R000003","___s":true,"attribs":"","id":"interact","ancestors":[],"modules":[]},{"comment":"/**\n * Returns an object which exposes internal data\n\n * @alias module:interact.debug\n *\n * @return {object} An object with properties that outline the current state\n * and expose internal functions and variables\n */","meta":{"range":[224468,224516],"filename":"interact.js","lineno":7035,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100052235","name":"interact.debug","type":"FunctionExpression","funcscope":"","paramnames":[]},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Returns an object which exposes internal data

","alias":"module:interact.debug","returns":[{"type":{"names":["object"]},"description":"

An object with properties that outline the current state\nand expose internal functions and variables

"}],"name":"debug","longname":"module:interact.debug","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R005103","___s":true,"attribs":"(static) ","id":".debug","signature":"() → {object}","ancestors":["interact."]},{"comment":"/**\n * Returns an object which exposes internal data\n\n * @alias module:interact.debug\n *\n * @return {object} An object with properties that outline the current state\n * and expose internal functions and variables\n */","meta":{"range":[4636,4684],"filename":"interact.js","lineno":189,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100020730","name":"interact.debug","type":"FunctionExpression","paramnames":[]},"shortpath":"packages/interact/interact.js"},"description":"

Returns an object which exposes internal data

","alias":"module:interact.debug","returns":[{"type":{"names":["object"]},"description":"

An object with properties that outline the current state\nand expose internal functions and variables

"}],"name":"debug","longname":"module:interact.debug","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R002022","___s":true,"attribs":"(static) ","id":".debug","signature":"() → {object}","ancestors":["interact."]},{"comment":"/**\n * Check if an element or selector has been set with the {@link interact}\n * function\n *\n * @alias module:interact.isSet\n *\n * @param {Element} element The Element being searched for\n * @return {boolean} Indicates if the element or CSS selector was previously\n * passed to interact\n*/","meta":{"range":[221427,221564],"filename":"interact.js","lineno":6916,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100051873","name":"interact.isSet","type":"FunctionExpression","funcscope":"","paramnames":["element","options"]},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Check if an element or selector has been set with the {@link interact}\nfunction

","alias":"module:interact.isSet","params":[{"type":{"names":["Element"]},"description":"

The Element being searched for

","name":"element"}],"returns":[{"type":{"names":["boolean"]},"description":"

Indicates if the element or CSS selector was previously\npassed to interact

"}],"name":"isSet","longname":"module:interact.isSet","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R005084","___s":true,"attribs":"(static) ","id":".isSet","signature":"(element) → {boolean}","ancestors":["interact."]},{"comment":"/**\n * Check if an element or selector has been set with the {@link interact}\n * function\n *\n * @alias module:interact.isSet\n *\n * @param {Element} element The Element being searched for\n * @return {boolean} Indicates if the element or CSS selector was previously\n * passed to interact\n*/","meta":{"range":[1837,1974],"filename":"interact.js","lineno":79,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100020412","name":"interact.isSet","type":"FunctionExpression","paramnames":["element","options"]},"shortpath":"packages/interact/interact.js"},"description":"

Check if an element or selector has been set with the {@link interact}\nfunction

","alias":"module:interact.isSet","params":[{"type":{"names":["Element"]},"description":"

The Element being searched for

","name":"element"}],"returns":[{"type":{"names":["boolean"]},"description":"

Indicates if the element or CSS selector was previously\npassed to interact

"}],"name":"isSet","longname":"module:interact.isSet","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R002009","___s":true,"attribs":"(static) ","id":".isSet","signature":"(element) → {boolean}","ancestors":["interact."]},{"comment":"/**\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 */","meta":{"range":[2881,2952],"filename":"base.js","lineno":94,"columnno":2,"path":"/home/taye/proj/interact.js/packages/autoStart","code":{"id":"astnode100008315","name":"interact.maxInteractions","type":"ArrowFunctionExpression","paramnames":["newValue"]},"shortpath":"packages/autoStart/base.js"},"description":"

Returns or sets the maximum number of concurrent interactions allowed. By\ndefault only 1 interaction is allowed at a time (for backwards\ncompatibility). To allow multiple interactions on the same Interactables and\nelements, you need to enable it in the draggable, resizable and gesturable\n'max' and 'maxPerElement' options.

","alias":"module:interact.maxInteractions","params":[{"type":{"names":["number"]},"optional":true,"description":"

Any number. newValue <= 0 means no interactions.

","name":"newValue"}],"name":"maxInteractions","longname":"module:interact.maxInteractions","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R000815","___s":true,"attribs":"(static) ","id":".maxInteractions","signature":"(newValueopt)","ancestors":["interact."]},{"comment":"/**\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 */","meta":{"range":[123744,123841],"filename":"interact.js","lineno":3921,"columnno":2,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100038763","name":"interact.maxInteractions","type":"FunctionExpression","funcscope":"~__install_9","paramnames":["newValue"]},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Returns or sets the maximum number of concurrent interactions allowed. By\ndefault only 1 interaction is allowed at a time (for backwards\ncompatibility). To allow multiple interactions on the same Interactables and\nelements, you need to enable it in the draggable, resizable and gesturable\n'max' and 'maxPerElement' options.

","alias":"module:interact.maxInteractions","params":[{"type":{"names":["number"]},"optional":true,"description":"

Any number. newValue <= 0 means no interactions.

","name":"newValue"}],"name":"maxInteractions","longname":"module:interact.maxInteractions","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R003766","___s":true,"attribs":"(static) ","id":".maxInteractions","signature":"(newValueopt)","ancestors":["interact."]},{"comment":"/**\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 */","meta":{"range":[3652,4416],"filename":"interact.js","lineno":145,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100020580","name":"interact.off","type":"FunctionExpression","paramnames":["type","listener","options"]},"vars":{"type":"module:interact~type","eventType":"module:interact.off~eventType","prop":"module:interact.off~prop","index":"module:interact~index"},"shortpath":"packages/interact/interact.js"},"description":"

Removes a global InteractEvent listener or DOM event from document

","alias":"module:interact.off","params":[{"type":{"names":["string","array","object"]},"description":"

The types of events that were listened\nfor

","name":"type"},{"type":{"names":["function"]},"description":"

The listener function to be removed

","name":"listener"},{"type":{"names":["object","boolean"]},"description":"

[options] object or useCapture flag for\nremoveEventListener

","name":"options"}],"returns":[{"type":{"names":["object"]},"description":"

interact

"}],"name":"off","longname":"module:interact.off","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R002016","___s":true,"attribs":"(static) ","id":".off","signature":"(type, listener, options) → {object}","ancestors":["interact."]},{"comment":"/**\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 */","meta":{"range":[223375,224247],"filename":"interact.js","lineno":6988,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100052063","name":"interact.off","type":"FunctionExpression","funcscope":"","paramnames":["type","listener","options"]},"vars":{"type":"module:interact~type","_i2":"module:interact.off~_i2","_ref2":"module:interact~_ref2","eventType":"module:interact.off~eventType","prop":"module:interact.off~prop","index":"module:interact~index"},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Removes a global InteractEvent listener or DOM event from document

","alias":"module:interact.off","params":[{"type":{"names":["string","array","object"]},"description":"

The types of events that were listened\nfor

","name":"type"},{"type":{"names":["function"]},"description":"

The listener function to be removed

","name":"listener"},{"type":{"names":["object","boolean"]},"description":"

[options] object or useCapture flag for\nremoveEventListener

","name":"options"}],"returns":[{"type":{"names":["object"]},"description":"

interact

"}],"name":"off","longname":"module:interact.off","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R005094","___s":true,"attribs":"(static) ","id":".off","signature":"(type, listener, options) → {object}","ancestors":["interact."]},{"comment":"/**\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 */","meta":{"range":[2346,3251],"filename":"interact.js","lineno":94,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100020437","name":"interact.on","type":"FunctionExpression","paramnames":["type","listener","options"]},"vars":{"type":"module:interact~type","eventType":"module:interact.on~eventType","prop":"module:interact.on~prop","globalEvents[undefined]":"module:interact~globalEvents.undefined]"},"shortpath":"packages/interact/interact.js"},"description":"

Add a global listener for an InteractEvent or adds a DOM event to document

","alias":"module:interact.on","params":[{"type":{"names":["string","array","object"]},"description":"

The types of events to listen for

","name":"type"},{"type":{"names":["function"]},"description":"

The function event (s)

","name":"listener"},{"type":{"names":["object","boolean"]},"optional":true,"description":"

object or useCapture flag for\naddEventListener

","name":"options"}],"returns":[{"type":{"names":["object"]},"description":"

interact

"}],"name":"on","longname":"module:interact.on","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R002010","___s":true,"attribs":"(static) ","id":".on","signature":"(type, listener, optionsopt) → {object}","ancestors":["interact."]},{"comment":"/**\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 */","meta":{"range":[221937,222973],"filename":"interact.js","lineno":6932,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100051898","name":"interact.on","type":"FunctionExpression","funcscope":"","paramnames":["type","listener","options"]},"vars":{"type":"module:interact~type","_i":"module:interact.on~_i","_ref":"module:interact~_ref","eventType":"module:interact.on~eventType","prop":"module:interact.on~prop","globalEvents[undefined]":"module:interact~globalEvents.undefined]"},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Add a global listener for an InteractEvent or adds a DOM event to document

","alias":"module:interact.on","params":[{"type":{"names":["string","array","object"]},"description":"

The types of events to listen for

","name":"type"},{"type":{"names":["function"]},"description":"

The function event (s)

","name":"listener"},{"type":{"names":["object","boolean"]},"optional":true,"description":"

object or useCapture flag for\naddEventListener

","name":"options"}],"returns":[{"type":{"names":["object"]},"description":"

interact

"}],"name":"on","longname":"module:interact.on","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R005085","___s":true,"attribs":"(static) ","id":".on","signature":"(type, listener, optionsopt) → {object}","ancestors":["interact."]},{"comment":"/**\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 */","meta":{"range":[6302,6525],"filename":"interact.js","lineno":247,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100020867","name":"interact.pointerMoveTolerance","type":"FunctionExpression","paramnames":["newValue"]},"vars":{"scope.interactions.pointerMoveTolerance":"module:interact~scope.interactions.pointerMoveTolerance"},"shortpath":"packages/interact/interact.js"},"description":"

Returns or sets the distance the pointer must be moved before an action\nsequence occurs. This also affects tolerance for tap events.

","alias":"module:interact.pointerMoveTolerance","params":[{"type":{"names":["number"]},"optional":true,"description":"

The movement from the start position must be greater than this value

","name":"newValue"}],"returns":[{"type":{"names":["interact","number"]}}],"name":"pointerMoveTolerance","longname":"module:interact.pointerMoveTolerance","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R002035","___s":true,"attribs":"(static) ","id":".pointerMoveTolerance","signature":"(newValueopt) → {interact|number}","ancestors":["interact."]},{"comment":"/**\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 */","meta":{"range":[226266,226493],"filename":"interact.js","lineno":7099,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100052400","name":"interact.pointerMoveTolerance","type":"FunctionExpression","funcscope":"","paramnames":["newValue"]},"vars":{"scope.interactions.pointerMoveTolerance":"module:interact~scope.interactions.pointerMoveTolerance"},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Returns or sets the distance the pointer must be moved before an action\nsequence occurs. This also affects tolerance for tap events.

","alias":"module:interact.pointerMoveTolerance","params":[{"type":{"names":["number"]},"optional":true,"description":"

The movement from the start position must be greater than this value

","name":"newValue"}],"returns":[{"type":{"names":["interact","number"]}}],"name":"pointerMoveTolerance","longname":"module:interact.pointerMoveTolerance","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R005119","___s":true,"attribs":"(static) ","id":".pointerMoveTolerance","signature":"(newValueopt) → {interact|number}","ancestors":["interact."]},{"comment":"/**\n * Cancels all interactions (end events are not fired)\n *\n * @alias module:interact.stop\n *\n * @param {Event} event An event on which to call preventDefault()\n * @return {object} interact\n */","meta":{"range":[5825,5969],"filename":"interact.js","lineno":230,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100020841","name":"interact.stop","type":"FunctionExpression","paramnames":["event"]},"vars":{"interaction":"module:interact.stop~interaction"},"shortpath":"packages/interact/interact.js"},"description":"

Cancels all interactions (end events are not fired)

","alias":"module:interact.stop","params":[{"type":{"names":["Event"]},"description":"

An event on which to call preventDefault()

","name":"event"}],"returns":[{"type":{"names":["object"]},"description":"

interact

"}],"name":"stop","longname":"module:interact.stop","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R002033","___s":true,"attribs":"(static) ","id":".stop","signature":"(event) → {object}","ancestors":["interact."]},{"comment":"/**\n * Cancels all interactions (end events are not fired)\n *\n * @alias module:interact.stop\n *\n * @param {Event} event An event on which to call preventDefault()\n * @return {object} interact\n */","meta":{"range":[225689,225932],"filename":"interact.js","lineno":7077,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100052350","name":"interact.stop","type":"FunctionExpression","funcscope":"","paramnames":["event"]},"vars":{"_i3":"module:interact.stop~_i3","_ref3":"module:interact~_ref3","interaction":"module:interact.stop~interaction"},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Cancels all interactions (end events are not fired)

","alias":"module:interact.stop","params":[{"type":{"names":["Event"]},"description":"

An event on which to call preventDefault()

","name":"event"}],"returns":[{"type":{"names":["object"]},"description":"

interact

"}],"name":"stop","longname":"module:interact.stop","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R005114","___s":true,"attribs":"(static) ","id":".stop","signature":"(event) → {object}","ancestors":["interact."]},{"comment":"/**\n * @alias module:interact.supportsPointerEvent\n *\n * @return {boolean} Whether or not the browser supports PointerEvents\n */","meta":{"range":[225389,225489],"filename":"interact.js","lineno":7064,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100052337","name":"interact.supportsPointerEvent","type":"FunctionExpression","funcscope":"","paramnames":[]},"shortpath":"packages/interactjs/dist/interact.js"},"alias":"module:interact.supportsPointerEvent","returns":[{"type":{"names":["boolean"]},"description":"

Whether or not the browser supports PointerEvents

"}],"name":"supportsPointerEvent","longname":"module:interact.supportsPointerEvent","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R005113","___s":true,"attribs":"(static) ","id":".supportsPointerEvent","signature":"() → {boolean}","ancestors":["interact."]},{"comment":"/**\n * @alias module:interact.supportsPointerEvent\n *\n * @return {boolean} Whether or not the browser supports PointerEvents\n */","meta":{"range":[5540,5626],"filename":"interact.js","lineno":218,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100020830","name":"interact.supportsPointerEvent","type":"FunctionExpression","paramnames":[]},"shortpath":"packages/interact/interact.js"},"alias":"module:interact.supportsPointerEvent","returns":[{"type":{"names":["boolean"]},"description":"

Whether or not the browser supports PointerEvents

"}],"name":"supportsPointerEvent","longname":"module:interact.supportsPointerEvent","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R002032","___s":true,"attribs":"(static) ","id":".supportsPointerEvent","signature":"() → {boolean}","ancestors":["interact."]},{"comment":"/**\n * @alias module:interact.supportsTouch\n *\n * @return {boolean} Whether or not the browser supports touch input\n */","meta":{"range":[225170,225256],"filename":"interact.js","lineno":7054,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100052324","name":"interact.supportsTouch","type":"FunctionExpression","funcscope":"","paramnames":[]},"shortpath":"packages/interactjs/dist/interact.js"},"alias":"module:interact.supportsTouch","returns":[{"type":{"names":["boolean"]},"description":"

Whether or not the browser supports touch input

"}],"name":"supportsTouch","longname":"module:interact.supportsTouch","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R005112","___s":true,"attribs":"(static) ","id":".supportsTouch","signature":"() → {boolean}","ancestors":["interact."]},{"comment":"/**\n * @alias module:interact.supportsTouch\n *\n * @return {boolean} Whether or not the browser supports touch input\n */","meta":{"range":[5336,5408],"filename":"interact.js","lineno":209,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100020819","name":"interact.supportsTouch","type":"FunctionExpression","paramnames":[]},"shortpath":"packages/interact/interact.js"},"alias":"module:interact.supportsTouch","returns":[{"type":{"names":["boolean"]},"description":"

Whether or not the browser supports touch input

"}],"name":"supportsTouch","longname":"module:interact.supportsTouch","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R002031","___s":true,"attribs":"(static) ","id":".supportsTouch","signature":"() → {boolean}","ancestors":["interact."]},{"comment":"/**\n * Use a plugin\n *\n * @alias module:interact.use\n *\n * @param {Object} plugin\n * @param {function} plugin.install\n * @return {interact}\n*/","meta":{"range":[1370,1545],"filename":"interact.js","lineno":59,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100020375","name":"interact.use","type":"FunctionExpression","paramnames":["plugin"]},"shortpath":"packages/interact/interact.js"},"description":"

Use a plugin

","alias":"module:interact.use","params":[{"type":{"names":["Object"]},"name":"plugin","subparams":[{"type":{"names":["function"]},"name":"install"}]},null],"returns":[{"type":{"names":["interact"]}}],"name":"use","longname":"module:interact.use","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R002008","___s":true,"attribs":"(static) ","id":".use","signature":"(plugin) → {interact}","ancestors":["interact."]},{"comment":"/**\n * Use a plugin\n *\n * @alias module:interact.use\n *\n * @param {Object} plugin\n * @param {function} plugin.install\n * @return {interact}\n*/","meta":{"range":[220957,221134],"filename":"interact.js","lineno":6893,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100051836","name":"interact.use","type":"FunctionExpression","funcscope":"","paramnames":["plugin"]},"shortpath":"packages/interactjs/dist/interact.js"},"description":"

Use a plugin

","alias":"module:interact.use","params":[{"type":{"names":["Object"]},"name":"plugin","subparams":[{"type":{"names":["function"]},"name":"install"}]},null],"returns":[{"type":{"names":["interact"]}}],"name":"use","longname":"module:interact.use","kind":"function","memberof":"module:interact","scope":"static","___id":"T000002R005083","___s":true,"attribs":"(static) ","id":".use","signature":"(plugin) → {interact}","ancestors":["interact."]},{"comment":"/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * });\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * });\n */","meta":{"filename":"interact.js","lineno":7737,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{},"shortpath":"packages/interactjs/dist/interact.js"},"kind":"module","name":"modifiers/snapEdges","description":"

This module allows snapping of the edges of targets during resize\ninteractions.

","examples":[{"caption":"","code":"interact(target).resizable({\n snapEdges: {\n targets: [interact.snappers.grid({ x: 100, y: 50 })],\n },\n});\n\ninteract(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});"}],"longname":"module:modifiers/snapEdges","scope":"inner","memberof":"module:interact","___id":"T000004R000004","___s":true,"attribs":"","id":"modifiers/snapEdges","ancestors":["interact~"],"modules":[{"comment":"/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * });\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * });\n */","meta":{"filename":"interact.js","lineno":7737,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{},"shortpath":"packages/interactjs/dist/interact.js"},"kind":"module","name":"modifiers/snapEdges","description":"

This module allows snapping of the edges of targets during resize\ninteractions.

","examples":[{"caption":"","code":"interact(target).resizable({\n snapEdges: {\n targets: [interact.snappers.grid({ x: 100, y: 50 })],\n },\n});\n\ninteract(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});"}],"longname":"module:modifiers/snapEdges","scope":"inner","memberof":"module:interact","___id":"T000002R005494","___s":true,"attribs":"","id":"modifiers/snapEdges","ancestors":["interact~"]},{"comment":"/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * });\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * });\n */","meta":{"filename":"edges.js","lineno":1,"columnno":0,"path":"/home/taye/proj/interact.js/packages/modifiers/snap","code":{},"shortpath":"packages/modifiers/snap/edges.js"},"kind":"module","name":"modifiers/snapEdges","description":"

This module allows snapping of the edges of targets during resize\ninteractions.

","examples":[{"caption":"","code":"interact(target).resizable({\n snapEdges: {\n targets: [interact.snappers.grid({ x: 100, y: 50 })],\n },\n});\n\ninteract(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});"}],"longname":"module:modifiers/snapEdges","___id":"T000002R010247","___s":true,"attribs":"","id":"modifiers/snapEdges","ancestors":[]}]},{"comment":"/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * });\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * });\n */","meta":{"filename":"edges.js","lineno":1,"columnno":0,"path":"/home/taye/proj/interact.js/packages/modifiers/snap","code":{},"shortpath":"packages/modifiers/snap/edges.js"},"kind":"module","name":"modifiers/snapEdges","description":"

This module allows snapping of the edges of targets during resize\ninteractions.

","examples":[{"caption":"","code":"interact(target).resizable({\n snapEdges: {\n targets: [interact.snappers.grid({ x: 100, y: 50 })],\n },\n});\n\ninteract(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});"}],"longname":"module:modifiers/snapEdges","___id":"T000004R000005","___s":true,"attribs":"","id":"modifiers/snapEdges","ancestors":[],"modules":[{"comment":"/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * });\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * });\n */","meta":{"filename":"interact.js","lineno":7737,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{},"shortpath":"packages/interactjs/dist/interact.js"},"kind":"module","name":"modifiers/snapEdges","description":"

This module allows snapping of the edges of targets during resize\ninteractions.

","examples":[{"caption":"","code":"interact(target).resizable({\n snapEdges: {\n targets: [interact.snappers.grid({ x: 100, y: 50 })],\n },\n});\n\ninteract(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});"}],"longname":"module:modifiers/snapEdges","scope":"inner","memberof":"module:interact","___id":"T000002R005494","___s":true,"attribs":"","id":"modifiers/snapEdges","ancestors":["interact~"],"modules":[{"comment":"/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * });\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * });\n */","meta":{"filename":"interact.js","lineno":7737,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{},"shortpath":"packages/interactjs/dist/interact.js"},"kind":"module","name":"modifiers/snapEdges","description":"

This module allows snapping of the edges of targets during resize\ninteractions.

","examples":[{"caption":"","code":"interact(target).resizable({\n snapEdges: {\n targets: [interact.snappers.grid({ x: 100, y: 50 })],\n },\n});\n\ninteract(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});"}],"longname":"module:modifiers/snapEdges","scope":"inner","memberof":"module:interact","___id":"T000002R005494","___s":true,"attribs":"","id":"modifiers/snapEdges","ancestors":["interact~"]},{"comment":"/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * });\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * });\n */","meta":{"filename":"edges.js","lineno":1,"columnno":0,"path":"/home/taye/proj/interact.js/packages/modifiers/snap","code":{},"shortpath":"packages/modifiers/snap/edges.js"},"kind":"module","name":"modifiers/snapEdges","description":"

This module allows snapping of the edges of targets during resize\ninteractions.

","examples":[{"caption":"","code":"interact(target).resizable({\n snapEdges: {\n targets: [interact.snappers.grid({ x: 100, y: 50 })],\n },\n});\n\ninteract(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});"}],"longname":"module:modifiers/snapEdges","___id":"T000002R010247","___s":true,"attribs":"","id":"modifiers/snapEdges","ancestors":[]}]},{"comment":"/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * });\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * });\n */","meta":{"filename":"edges.js","lineno":1,"columnno":0,"path":"/home/taye/proj/interact.js/packages/modifiers/snap","code":{},"shortpath":"packages/modifiers/snap/edges.js"},"kind":"module","name":"modifiers/snapEdges","description":"

This module allows snapping of the edges of targets during resize\ninteractions.

","examples":[{"caption":"","code":"interact(target).resizable({\n snapEdges: {\n targets: [interact.snappers.grid({ x: 100, y: 50 })],\n },\n});\n\ninteract(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});"}],"longname":"module:modifiers/snapEdges","___id":"T000002R010247","___s":true,"attribs":"","id":"modifiers/snapEdges","ancestors":[]}]},{"comment":"/**\n * ```js\n * const interactable = interact(target);\n * const drag = { name: drag, axis: 'x' };\n * const resize = { name: resize, edges: { left: true, bottom: true };\n *\n * interactable.reflow(drag);\n * interactable.reflow(resize);\n * ```\n *\n * Start an action sequence to re-apply modifiers, check drops, etc.\n *\n * @param { Object } action The action to begin\n * @param { string } action.name The name of the action\n * @returns { Promise }\n */","meta":{"range":[267838,267933],"filename":"interact.js","lineno":8495,"columnno":2,"path":"/home/taye/proj/interact.js/packages/interactjs/dist","code":{"id":"astnode100058716","name":"Interactable.prototype.reflow","type":"FunctionExpression","funcscope":"~__install_38","paramnames":["action"]},"shortpath":"packages/interactjs/dist/interact.js"},"description":"
const interactable = interact(target);\nconst drag = { name: drag, axis: 'x' };\nconst resize = { name: resize, edges: { left: true, bottom: true };\n\ninteractable.reflow(drag);\ninteractable.reflow(resize);\n
\n

Start an action sequence to re-apply modifiers, check drops, etc.

","params":[{"type":{"names":["Object"]},"description":"

The action to begin

","name":"action"},{"type":{"names":["string"]},"description":"

The name of the action

","name":"action.name"}],"returns":[{"type":{"names":["Promise."]}}],"name":"reflow","longname":"module:modifiers/snapEdges~Interactable#reflow","kind":"function","scope":"instance","memberof":"module:modifiers/snapEdges~Interactable","___id":"T000002R005871","___s":true,"attribs":"","id":"reflow","signature":"(action) → {Promise.<Interactable>}","ancestors":[]},{"kind":"package","longname":"package:undefined","files":["/home/taye/proj/interact.js/packages/actions/drag.js","/home/taye/proj/interact.js/packages/actions/drop/DropEvent.js","/home/taye/proj/interact.js/packages/actions/drop/index.js","/home/taye/proj/interact.js/packages/actions/gesture.js","/home/taye/proj/interact.js/packages/actions/index.js","/home/taye/proj/interact.js/packages/actions/resize.js","/home/taye/proj/interact.js/packages/actions/tests/drag.js","/home/taye/proj/interact.js/packages/actions/tests/drop/DropEvent.js","/home/taye/proj/interact.js/packages/actions/tests/drop/index.js","/home/taye/proj/interact.js/packages/actions/tests/resize.js","/home/taye/proj/interact.js/packages/autoScroll/index.js","/home/taye/proj/interact.js/packages/autoStart/base.js","/home/taye/proj/interact.js/packages/autoStart/dragAxis.js","/home/taye/proj/interact.js/packages/autoStart/hold.js","/home/taye/proj/interact.js/packages/autoStart/index.js","/home/taye/proj/interact.js/packages/autoStart/InteractableMethods.js","/home/taye/proj/interact.js/packages/autoStart/tests/hold.js","/home/taye/proj/interact.js/packages/core/defaultOptions.js","/home/taye/proj/interact.js/packages/core/Eventable.js","/home/taye/proj/interact.js/packages/core/Interactable.js","/home/taye/proj/interact.js/packages/core/interactablePreventDefault.js","/home/taye/proj/interact.js/packages/core/InteractEvent.js","/home/taye/proj/interact.js/packages/core/Interaction.js","/home/taye/proj/interact.js/packages/core/interactions.js","/home/taye/proj/interact.js/packages/core/scope.js","/home/taye/proj/interact.js/packages/core/tests/Eventable.js","/home/taye/proj/interact.js/packages/core/tests/helpers.js","/home/taye/proj/interact.js/packages/core/tests/Interactable.js","/home/taye/proj/interact.js/packages/core/tests/Interaction.js","/home/taye/proj/interact.js/packages/core/tests/interactions.js","/home/taye/proj/interact.js/packages/inertia/index.js","/home/taye/proj/interact.js/packages/interact/index.js","/home/taye/proj/interact.js/packages/interact/interact.js","/home/taye/proj/interact.js/packages/interact/tests/interact.js","/home/taye/proj/interact.js/packages/interactjs/dist/interact.js","/home/taye/proj/interact.js/packages/interactjs/dist/interact.min.js","/home/taye/proj/interact.js/packages/interactjs/index.js","/home/taye/proj/interact.js/packages/modifiers/base.js","/home/taye/proj/interact.js/packages/modifiers/index.js","/home/taye/proj/interact.js/packages/modifiers/restrict/edges.js","/home/taye/proj/interact.js/packages/modifiers/restrict/pointer.js","/home/taye/proj/interact.js/packages/modifiers/restrict/size.js","/home/taye/proj/interact.js/packages/modifiers/snap/edges.js","/home/taye/proj/interact.js/packages/modifiers/snap/pointer.js","/home/taye/proj/interact.js/packages/modifiers/snap/size.js","/home/taye/proj/interact.js/packages/modifiers/tests/base.js","/home/taye/proj/interact.js/packages/modifiers/tests/restrict/edges.js","/home/taye/proj/interact.js/packages/modifiers/tests/restrict/size.js","/home/taye/proj/interact.js/packages/modifiers/tests/snap/edges.js","/home/taye/proj/interact.js/packages/modifiers/tests/snap/pointer.js","/home/taye/proj/interact.js/packages/modifiers/tests/snap/size.js","/home/taye/proj/interact.js/packages/pointerEvents/base.js","/home/taye/proj/interact.js/packages/pointerEvents/holdRepeat.js","/home/taye/proj/interact.js/packages/pointerEvents/index.js","/home/taye/proj/interact.js/packages/pointerEvents/interactableTargets.js","/home/taye/proj/interact.js/packages/pointerEvents/PointerEvent.js","/home/taye/proj/interact.js/packages/pointerEvents/tests/base.js","/home/taye/proj/interact.js/packages/pointerEvents/tests/holdRepeat.js","/home/taye/proj/interact.js/packages/pointerEvents/tests/PointerEvent.js","/home/taye/proj/interact.js/packages/reflow/index.js","/home/taye/proj/interact.js/packages/reflow/tests/index.js","/home/taye/proj/interact.js/packages/utils/arr.js","/home/taye/proj/interact.js/packages/utils/browser.js","/home/taye/proj/interact.js/packages/utils/clone.js","/home/taye/proj/interact.js/packages/utils/domObjects.js","/home/taye/proj/interact.js/packages/utils/domUtils.js","/home/taye/proj/interact.js/packages/utils/events.js","/home/taye/proj/interact.js/packages/utils/extend.js","/home/taye/proj/interact.js/packages/utils/getOriginXY.js","/home/taye/proj/interact.js/packages/utils/hypot.js","/home/taye/proj/interact.js/packages/utils/index.js","/home/taye/proj/interact.js/packages/utils/interactionFinder.js","/home/taye/proj/interact.js/packages/utils/is.js","/home/taye/proj/interact.js/packages/utils/isWindow.js","/home/taye/proj/interact.js/packages/utils/normalizeListeners.js","/home/taye/proj/interact.js/packages/utils/pointerExtend.js","/home/taye/proj/interact.js/packages/utils/pointerUtils.js","/home/taye/proj/interact.js/packages/utils/raf.js","/home/taye/proj/interact.js/packages/utils/rect.js","/home/taye/proj/interact.js/packages/utils/Signals.js","/home/taye/proj/interact.js/packages/utils/snappers/grid.js","/home/taye/proj/interact.js/packages/utils/snappers/index.js","/home/taye/proj/interact.js/packages/utils/tests/normalizeListeners.js","/home/taye/proj/interact.js/packages/utils/window.js","/home/taye/proj/interact.js/docs/index.md"],"___id":"T000002R011804","___s":true,"attribs":"","id":"package:","ancestors":[]},{"comment":"/** */","meta":{"range":[1542,1606],"filename":"PointerEvent.js","lineno":57,"columnno":2,"path":"/home/taye/proj/interact.js/packages/pointerEvents","code":{"id":"astnode100104548","name":"preventDefault","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/pointerEvents/PointerEvent.js"},"name":"preventDefault","longname":"preventDefault","kind":"function","scope":"global","params":[],"___id":"T000002R010993","___s":true,"attribs":"","id":"preventDefault","signature":"()","ancestors":[]},{"comment":"/** */","meta":{"range":[1692,1796],"filename":"PointerEvent.js","lineno":67,"columnno":2,"path":"/home/taye/proj/interact.js/packages/pointerEvents","code":{"id":"astnode100104569","name":"stopImmediatePropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/pointerEvents/PointerEvent.js"},"name":"stopImmediatePropagation","longname":"stopImmediatePropagation","kind":"function","scope":"global","params":[],"___id":"T000002R010996","___s":true,"attribs":"","id":"stopImmediatePropagation","signature":"()","ancestors":[]},{"comment":"/** */","meta":{"range":[1619,1679],"filename":"PointerEvent.js","lineno":62,"columnno":2,"path":"/home/taye/proj/interact.js/packages/pointerEvents","code":{"id":"astnode100104559","name":"stopPropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/pointerEvents/PointerEvent.js"},"name":"stopPropagation","longname":"stopPropagation","kind":"function","scope":"global","params":[],"___id":"T000002R010994","___s":true,"attribs":"","id":"stopPropagation","signature":"()","ancestors":[]}] \ No newline at end of file diff --git a/packages/interactjs/dist/docs/packages_actions_resize.js.html b/packages/interactjs/dist/docs/packages_actions_resize.js.html index 30b80f1ce..b83510465 100644 --- a/packages/interactjs/dist/docs/packages_actions_resize.js.html +++ b/packages/interactjs/dist/docs/packages_actions_resize.js.html @@ -282,6 +282,9 @@

packages/actions/resize.js

const width = utils.is.number(rect.width )? rect.width : rect.right - rect.left; const height = utils.is.number(rect.height)? rect.height : rect.bottom - rect.top ; + // don't use margin greater than half the relevent dimension + margin = Math.min(margin, (name === 'left' || name === 'right' ? width : height) / 2); + if (width < 0) { if (name === 'left' ) { name = 'right'; } else if (name === 'right') { name = 'left' ; } diff --git a/packages/interactjs/dist/docs/packages_interactjs_dist_interact.js.html b/packages/interactjs/dist/docs/packages_interactjs_dist_interact.js.html index f1e67ab66..a592333be 100644 --- a/packages/interactjs/dist/docs/packages_interactjs_dist_interact.js.html +++ b/packages/interactjs/dist/docs/packages_interactjs_dist_interact.js.html @@ -42,7 +42,7 @@

packages/interactjs/dist/interact.js

/**
- * interact.js v1.4.0-alpha.14+sha.69d796b-dirty
+ * interact.js v1.4.0-alpha.15+sha.8940ff6-dirty
  *
  * Copyright (c) 2012-2018 Taye Adeyemi <dev@taye.me>
  * Released under the MIT License.
@@ -8812,7 +8812,7 @@ 

packages/interactjs/dist/interact.js

} // eslint-disable-next-line no-undef -_interact.default.version = __init_22.version = "1.4.0-alpha.14"; +_interact.default.version = __init_22.version = "1.4.0-alpha.15"; var ___default_22 = _interact.default; /* common-shake removed: exports.default = */ void ___default_22; diff --git a/packages/interactjs/dist/interact.js b/packages/interactjs/dist/interact.js index cfe718134..c224c65a0 100644 --- a/packages/interactjs/dist/interact.js +++ b/packages/interactjs/dist/interact.js @@ -1,5 +1,5 @@ /** - * interact.js v1.4.0-alpha.15+sha.8940ff6-dirty + * interact.js v1.4.0-alpha.16+sha.5b3c738-dirty * * Copyright (c) 2012-2018 Taye Adeyemi * Released under the MIT License. @@ -1187,10 +1187,23 @@ var pointerUtils = { page: page, client: client, timeStamp: timeStamp, - pageX: page.x, - pageY: page.y, - clientX: client.x, - clientY: client.y + + get pageX() { + return page.x; + }, + + get pageY() { + return page.y; + }, + + get clientX() { + return client.x; + }, + + get clientY() { + return client.y; + } + }; } }; @@ -3075,7 +3088,9 @@ function checkResizeEdge(name, value, page, element, interactableElement, rect, if (value === true) { // if dimensions are negative, "switch" edges var width = __utils_6.is.number(rect.width) ? rect.width : rect.right - rect.left; - var height = __utils_6.is.number(rect.height) ? rect.height : rect.bottom - rect.top; + var height = __utils_6.is.number(rect.height) ? rect.height : rect.bottom - rect.top; // don't use margin greater than half the relevent dimension + + margin = Math.min(margin, (name === 'left' || name === 'right' ? width : height) / 2); if (width < 0) { if (name === 'left') { @@ -8769,7 +8784,7 @@ function __init_22(window) { } // eslint-disable-next-line no-undef -_interact.default.version = __init_22.version = "1.4.0-alpha.15"; +_interact.default.version = __init_22.version = "1.4.0-alpha.16"; var ___default_22 = _interact.default; /* common-shake removed: exports.default = */ void ___default_22; diff --git a/packages/interactjs/dist/interact.js.map b/packages/interactjs/dist/interact.js.map index 07582c3ed..2f29aa2c4 100644 --- a/packages/interactjs/dist/interact.js.map +++ b/packages/interactjs/dist/interact.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../scripts/header.js","../../node_modules/browser-pack-flat/_prelude","../utils/arr.js","../utils/isWindow.js","../utils/window.js","../utils/is.js","../actions/drag.js","../actions/drop/DropEvent.js","../utils/Signals.js","../utils/domObjects.js","../utils/browser.js","../utils/clone.js","../utils/domUtils.js","../utils/pointerExtend.js","../utils/hypot.js","../utils/pointerUtils.js","../utils/events.js","../utils/extend.js","../utils/rect.js","../utils/getOriginXY.js","../utils/normalizeListeners.js","../utils/raf.js","../utils/index.js","../actions/drop/index.js","../core/defaultOptions.js","../core/InteractEvent.js","../actions/gesture.js","../actions/resize.js","../actions/index.js","../autoScroll/index.js","../autoStart/InteractableMethods.js","../autoStart/base.js","../autoStart/dragAxis.js","../autoStart/hold.js","../autoStart/index.js","../core/interactablePreventDefault.js","../modifiers/base.js","../inertia/index.js","../core/Eventable.js","../core/Interactable.js","../core/Interaction.js","../utils/interactionFinder.js","../core/interactions.js","../core/scope.js","../interact/interact.js","../modifiers/restrict/pointer.js","../modifiers/restrict/edges.js","../modifiers/restrict/size.js","../modifiers/snap/pointer.js","../modifiers/snap/size.js","../modifiers/snap/edges.js","../modifiers/index.js","../pointerEvents/PointerEvent.js","../pointerEvents/base.js","../pointerEvents/holdRepeat.js","../pointerEvents/interactableTargets.js","../pointerEvents/index.js","../reflow/index.js","../utils/snappers/grid.js","../utils/snappers/index.js","../interact/index.js","index.js","../../node_modules/browser-pack-flat/_postlude"],"names":[],"mappings":"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","file":"interact.js","sourceRoot":"","sourcesContent":["/**\n * interact.js v1.4.0-alpha.15+sha.8940ff6-dirty\n *\n * Copyright (c) 2012-2018 Taye Adeyemi \n * Released under the MIT License.\n * https://raw.github.com/taye/interact.js/master/LICENSE\n */\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.interact = f()}})(function(){var define,module,exports;\n","export function contains (array, target) {\n return array.indexOf(target) !== -1;\n}\n\nexport function remove (array, target) {\n return array.splice(array.indexOf(target), 1);\n}\n\nexport function merge (target, source) {\n for (const item of source) {\n target.push(item);\n }\n\n return target;\n}\n\nexport function from (source) {\n return merge([], source);\n}\n\nexport function findIndex (array, func) {\n for (let i = 0; i < array.length; i++) {\n if (func(array[i], i, array)) {\n return i;\n }\n }\n\n return -1;\n}\n\nexport function find (array, func) {\n return array[findIndex(array, func)];\n}\n\nexport function some (array, func) {\n return findIndex(array, func) !== -1;\n}\n","export default (thing) => !!(thing && thing.Window) && (thing instanceof thing.Window);\n","import isWindow from './isWindow';\n\nconst win = {\n getWindow,\n init,\n};\n\nexport function init (window) {\n // get wrapped window if using Shadow DOM polyfill\n\n win.realWindow = window;\n\n // create a TextNode\n const el = window.document.createTextNode('');\n\n // check if it's wrapped by a polyfill\n if (el.ownerDocument !== window.document\n && typeof window.wrap === 'function'\n && window.wrap(el) === el) {\n // use wrapped window\n window = window.wrap(window);\n }\n\n win.window = window;\n}\n\nif (typeof window === 'undefined') {\n win.window = undefined;\n win.realWindow = undefined;\n}\nelse {\n init(window);\n}\n\nexport function getWindow (node) {\n if (isWindow(node)) {\n return node;\n }\n\n const rootNode = (node.ownerDocument || node);\n\n return rootNode.defaultView || win.window;\n}\n\nwin.init = init;\n\nexport default win;\n","import win from './window';\nimport isWindow from './isWindow';\n\nexport const window = thing => thing === win.window || isWindow(thing);\n\nexport const docFrag = thing => object(thing) && thing.nodeType === 11;\n\nexport const object = thing => !!thing && (typeof thing === 'object');\n\nexport const func = thing => typeof thing === 'function';\n\nexport const number = thing => typeof thing === 'number' ;\n\nexport const bool = thing => typeof thing === 'boolean' ;\n\nexport const string = thing => typeof thing === 'string' ;\n\nexport const element = thing => {\n if (!thing || (typeof thing !== 'object')) { return false; }\n\n const _window = win.getWindow(thing) || win.window;\n\n return (/object|function/.test(typeof _window.Element)\n ? thing instanceof _window.Element //DOM2\n : thing.nodeType === 1 && typeof thing.nodeName === 'string');\n};\n\nexport const plainObject = thing => object(thing) &&\n !!thing.constructor &&\n thing.constructor.name === 'Object';\n\nexport const array = thing => (object(thing)\n && (typeof thing.length !== 'undefined')\n && func(thing.splice));\n","import * as is from '@interactjs/utils/is';\nimport * as arr from '@interactjs/utils/arr';\n\nfunction install (scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope;\n\n interactions.signals.on('before-action-move', beforeMove);\n interactions.signals.on('action-resume', beforeMove);\n\n // dragmove\n interactions.signals.on('action-move', move);\n\n Interactable.prototype.draggable = drag.draggable;\n\n actions.drag = drag;\n actions.names.push('drag');\n arr.merge(actions.eventTypes, [\n 'dragstart',\n 'dragmove',\n 'draginertiastart',\n 'dragresume',\n 'dragend',\n ]);\n actions.methodDict.drag = 'draggable';\n\n defaults.drag = drag.defaults;\n}\n\nfunction beforeMove ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return; }\n\n const axis = interaction.prepared.axis;\n\n if (axis === 'x') {\n interaction.coords.cur.page.y = interaction.coords.start.page.y;\n interaction.coords.cur.client.y = interaction.coords.start.client.y;\n\n interaction.coords.velocity.client.y = 0;\n interaction.coords.velocity.page.y = 0;\n }\n else if (axis === 'y') {\n interaction.coords.cur.page.x = interaction.coords.start.page.x;\n interaction.coords.cur.client.x = interaction.coords.start.client.x;\n\n interaction.coords.velocity.client.x = 0;\n interaction.coords.velocity.page.x = 0;\n }\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'drag') { return; }\n\n const axis = interaction.prepared.axis;\n\n if (axis === 'x' || axis === 'y') {\n const opposite = axis === 'x' ? 'y' : 'x';\n\n iEvent.page[opposite] = interaction.coords.start.page[opposite];\n iEvent.client[opposite] = interaction.coords.start.client[opposite];\n iEvent.delta[opposite] = 0;\n }\n}\n\n/**\n * ```js\n * interact(element).draggable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // the axis in which the first movement must be\n * // for the drag sequence to start\n * // 'xy' by default - any direction\n * startAxis: 'x' || 'y' || 'xy',\n *\n * // 'xy' by default - don't restrict to one axis (move in any direction)\n * // 'x' or 'y' to restrict movement to either axis\n * // 'start' to restrict movement to the axis the drag started in\n * lockAxis: 'x' || 'y' || 'xy' || 'start',\n *\n * // max number of drags that can happen concurrently\n * // with elements of this Interactable. Infinity by default\n * max: Infinity,\n *\n * // max number of drags that can target the same element+Interactable\n * // 1 by default\n * maxPerElement: 2\n * });\n *\n * var isDraggable = interact('element').draggable(); // true\n * ```\n *\n * Get or set whether drag actions can be performed on the target\n *\n * @alias Interactable.prototype.draggable\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on drag events (object makes the Interactable\n * draggable)\n * @return {boolean | Interactable} boolean indicating if this can be the\n * target of drag events, or this Interctable\n */\nfunction draggable (options) {\n if (is.object(options)) {\n this.options.drag.enabled = options.enabled === false? false: true;\n this.setPerAction('drag', options);\n this.setOnEvents('drag', options);\n\n if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n this.options.drag.lockAxis = options.lockAxis;\n }\n if (/^(xy|x|y)$/.test(options.startAxis)) {\n this.options.drag.startAxis = options.startAxis;\n }\n\n return this;\n }\n\n if (is.bool(options)) {\n this.options.drag.enabled = options;\n\n return this;\n }\n\n return this.options.drag;\n}\n\nconst drag = {\n install,\n draggable,\n beforeMove,\n move,\n defaults: {\n startAxis : 'xy',\n lockAxis : 'xy',\n },\n\n checker (pointer, event, interactable) {\n const dragOptions = interactable.options.drag;\n\n return dragOptions.enabled\n ? {\n name: 'drag',\n axis: (dragOptions.lockAxis === 'start'\n ? dragOptions.startAxis\n : dragOptions.lockAxis),\n }\n : null;\n },\n\n getCursor () {\n return 'move';\n },\n};\n\nexport default drag;\n","import * as arr from '@interactjs/utils/arr';\n\nclass DropEvent {\n /**\n * Class of events fired on dropzones during drags with acceptable targets.\n */\n constructor (dropStatus, dragEvent, type) {\n const { element, dropzone } = type === 'dragleave'\n ? dropStatus.prev\n : dropStatus.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.interaction = dragEvent.interaction;\n this.draggable = dragEvent.interactable;\n this.timeStamp = dragEvent.timeStamp;\n\n this.propagationStopped = this.immediatePropagationStopped = false;\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 { dropStatus } = this.interaction;\n\n if (\n (this.type !== 'dropactivate') && (\n !this.dropzone ||\n dropStatus.cur.dropzone !== this.dropzone ||\n dropStatus.cur.element !== this.target)) {\n return;\n }\n\n dropStatus.prev.dropzone = this.dropzone;\n dropStatus.prev.element = this.target;\n\n dropStatus.rejected = true;\n dropStatus.events.enter = null;\n\n this.stopImmediatePropagation();\n\n if (this.type === 'dropactivate') {\n const activeDrops = dropStatus.activeDrops;\n const index = arr.findIndex(activeDrops, ({ dropzone, element }) =>\n dropzone === this.dropzone && element === this.target);\n\n dropStatus.activeDrops = [\n ...activeDrops.slice(0, index),\n ...activeDrops.slice(index + 1),\n ];\n\n const deactivateEvent = new DropEvent(dropStatus, this.dragEvent, 'dropdeactivate');\n\n deactivateEvent.dropzone = this.dropzone;\n deactivateEvent.target = this.target;\n\n this.dropzone.fire(deactivateEvent);\n }\n else {\n this.dropzone.fire(new DropEvent(dropStatus, this.dragEvent, 'dragleave'));\n }\n }\n\n preventDefault () {}\n\n stopPropagation () {\n this.propagationStopped = true;\n }\n\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true;\n }\n}\n\nexport default DropEvent;\n","class Signals {\n constructor () {\n this.listeners = {\n // signalName: [listeners],\n };\n }\n\n on (name, listener) {\n if (!this.listeners[name]) {\n this.listeners[name] = [listener];\n return;\n }\n\n this.listeners[name].push(listener);\n }\n\n off (name, listener) {\n if (!this.listeners[name]) { return; }\n\n const index = this.listeners[name].indexOf(listener);\n\n if (index !== -1) {\n this.listeners[name].splice(index, 1);\n }\n }\n\n fire (name, arg) {\n const targetListeners = this.listeners[name];\n\n if (!targetListeners) { return; }\n\n for (const listener of targetListeners) {\n if (listener(arg, name) === false) {\n return false;\n }\n }\n }\n}\n\nexport default Signals;\n","const domObjects = {\n init,\n};\n\nfunction blank () {}\n\nexport default domObjects;\n\nfunction init (window) {\n domObjects.document = window.document;\n domObjects.DocumentFragment = window.DocumentFragment || blank;\n domObjects.SVGElement = window.SVGElement || blank;\n domObjects.SVGSVGElement = window.SVGSVGElement || blank;\n domObjects.SVGElementInstance = window.SVGElementInstance || blank;\n domObjects.Element = window.Element || blank;\n domObjects.HTMLElement = window.HTMLElement || domObjects.Element;\n\n domObjects.Event = window.Event;\n domObjects.Touch = window.Touch || blank;\n domObjects.PointerEvent = (window.PointerEvent || window.MSPointerEvent);\n}\n","import win from './window';\nimport * as is from './is';\nimport domObjects from './domObjects';\n\nconst browser = {\n init,\n};\n\nexport default browser;\n\nfunction init (window) {\n const Element = domObjects.Element;\n const navigator = win.window.navigator;\n\n // Does the browser support touch input?\n browser.supportsTouch = !!(('ontouchstart' in window) || is.func(window.DocumentTouch)\n && domObjects.document instanceof window.DocumentTouch);\n\n // Does the browser support PointerEvents\n browser.supportsPointerEvent = !!domObjects.PointerEvent;\n\n browser.isIOS = (/iP(hone|od|ad)/.test(navigator.platform));\n\n // scrolling doesn't change the result of getClientRects on iOS 7\n browser.isIOS7 = (/iP(hone|od|ad)/.test(navigator.platform)\n && /OS 7[^\\d]/.test(navigator.appVersion));\n\n browser.isIe9 = /MSIE 9/.test(navigator.userAgent);\n\n // prefix matchesSelector\n browser.prefixedMatchesSelector = 'matches' in Element.prototype\n ? 'matches'\n : 'webkitMatchesSelector' in Element.prototype\n ? 'webkitMatchesSelector'\n : 'mozMatchesSelector' in Element.prototype\n ? 'mozMatchesSelector'\n : 'oMatchesSelector' in Element.prototype\n ? 'oMatchesSelector'\n : 'msMatchesSelector';\n\n browser.pEventTypes = (domObjects.PointerEvent\n ? (domObjects.PointerEvent === window.MSPointerEvent\n ? {\n up: 'MSPointerUp',\n down: 'MSPointerDown',\n over: 'mouseover',\n out: 'mouseout',\n move: 'MSPointerMove',\n cancel: 'MSPointerCancel',\n }\n : {\n up: 'pointerup',\n down: 'pointerdown',\n over: 'pointerover',\n out: 'pointerout',\n move: 'pointermove',\n cancel: 'pointercancel',\n })\n : null);\n\n // because Webkit and Opera still use 'mousewheel' event type\n browser.wheelEvent = 'onmousewheel' in domObjects.document? 'mousewheel': 'wheel';\n\n // Opera Mobile must be handled differently\n browser.isOperaMobile = (navigator.appName === 'Opera'\n && browser.supportsTouch\n && navigator.userAgent.match('Presto'));\n}\n","import * as is from './is';\nimport * as arr from './arr';\n\nexport default function clone (source) {\n const dest = {};\n\n for (const prop in source) {\n const value = source[prop];\n\n if (is.plainObject(value)) {\n dest[prop] = clone(value);\n }\n else if (is.array(value)) {\n dest[prop] = arr.from(value);\n }\n else {\n dest[prop] = value;\n }\n }\n\n return dest;\n}\n","import win from './window';\nimport browser from './browser';\nimport * as is from './is';\nimport domObjects from './domObjects';\n\nexport function nodeContains (parent, child) {\n while (child) {\n if (child === parent) {\n return true;\n }\n\n child = child.parentNode;\n }\n\n return false;\n}\n\nexport function closest (element, selector) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) { return element; }\n\n element = parentNode(element);\n }\n\n return null;\n}\n\nexport function parentNode (node) {\n let parent = node.parentNode;\n\n if (is.docFrag(parent)) {\n // skip past #shado-root fragments\n while ((parent = parent.host) && is.docFrag(parent)) {\n continue;\n }\n\n return parent;\n }\n\n return parent;\n}\n\nexport function matchesSelector (element, selector) {\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (win.window !== win.realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ');\n }\n\n return element[browser.prefixedMatchesSelector](selector);\n}\n\n// Test for the element that's \"above\" all other qualifiers\nexport function indexOfDeepestElement (elements) {\n let deepestZoneParents = [];\n let dropzoneParents = [];\n let dropzone;\n let deepestZone = elements[0];\n let index = deepestZone? 0: -1;\n let parent;\n let child;\n let i;\n let n;\n\n for (i = 1; i < elements.length; i++) {\n dropzone = elements[i];\n\n // an element might belong to multiple selector dropzones\n if (!dropzone || dropzone === deepestZone) {\n continue;\n }\n\n if (!deepestZone) {\n deepestZone = dropzone;\n index = i;\n continue;\n }\n\n // check if the deepest or current are document.documentElement or document.rootElement\n // - if the current dropzone is, do nothing and continue\n if (dropzone.parentNode === dropzone.ownerDocument) {\n continue;\n }\n // - if deepest is, update with the current dropzone and continue to next\n else if (deepestZone.parentNode === dropzone.ownerDocument) {\n deepestZone = dropzone;\n index = i;\n continue;\n }\n\n if (!deepestZoneParents.length) {\n parent = deepestZone;\n while (parent.parentNode && parent.parentNode !== parent.ownerDocument) {\n deepestZoneParents.unshift(parent);\n parent = parent.parentNode;\n }\n }\n\n // if this element is an svg element and the current deepest is\n // an HTMLElement\n if (deepestZone instanceof domObjects.HTMLElement\n && dropzone instanceof domObjects.SVGElement\n && !(dropzone instanceof domObjects.SVGSVGElement)) {\n\n if (dropzone === deepestZone.parentNode) {\n continue;\n }\n\n parent = dropzone.ownerSVGElement;\n }\n else {\n parent = dropzone;\n }\n\n dropzoneParents = [];\n\n while (parent.parentNode !== parent.ownerDocument) {\n dropzoneParents.unshift(parent);\n parent = parent.parentNode;\n }\n\n n = 0;\n\n // get (position of last common ancestor) + 1\n while (dropzoneParents[n] && dropzoneParents[n] === deepestZoneParents[n]) {\n n++;\n }\n\n const parents = [\n dropzoneParents[n - 1],\n dropzoneParents[n],\n deepestZoneParents[n],\n ];\n\n child = parents[0].lastChild;\n\n while (child) {\n if (child === parents[1]) {\n deepestZone = dropzone;\n index = i;\n deepestZoneParents = [];\n\n break;\n }\n else if (child === parents[2]) {\n break;\n }\n\n child = child.previousSibling;\n }\n }\n\n return index;\n}\n\nexport function matchesUpTo (element, selector, limit) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return true;\n }\n\n element = parentNode(element);\n\n if (element === limit) {\n return matchesSelector(element, selector);\n }\n }\n\n return false;\n}\n\nexport function getActualElement (element) {\n return (element instanceof domObjects.SVGElementInstance\n ? element.correspondingUseElement\n : element);\n}\n\nexport function getScrollXY (relevantWindow) {\n relevantWindow = relevantWindow || win.window;\n return {\n x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft,\n y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop,\n };\n}\n\nexport function getElementClientRect (element) {\n const clientRect = (element instanceof domObjects.SVGElement\n ? element.getBoundingClientRect()\n : element.getClientRects()[0]);\n\n return clientRect && {\n left : clientRect.left,\n right : clientRect.right,\n top : clientRect.top,\n bottom: clientRect.bottom,\n width : clientRect.width || clientRect.right - clientRect.left,\n height: clientRect.height || clientRect.bottom - clientRect.top,\n };\n}\n\nexport function getElementRect (element) {\n const clientRect = getElementClientRect(element);\n\n if (!browser.isIOS7 && clientRect) {\n const scroll = getScrollXY(win.getWindow(element));\n\n clientRect.left += scroll.x;\n clientRect.right += scroll.x;\n clientRect.top += scroll.y;\n clientRect.bottom += scroll.y;\n }\n\n return clientRect;\n}\n\nexport function getPath (element) {\n const path = [];\n\n while (element) {\n path.push(element);\n element = parentNode(element);\n }\n\n return path;\n}\n\nexport function trySelector (value) {\n if (!is.string(value)) { return false; }\n\n // an exception will be raised if it is invalid\n domObjects.document.querySelector(value);\n return true;\n}\n","export default function pointerExtend (dest, source) {\n for (const prop in source) {\n const prefixedPropREs = pointerExtend.prefixedPropREs;\n let deprecated = false;\n\n // skip deprecated prefixed properties\n for (const vendor in prefixedPropREs) {\n if (prop.indexOf(vendor) === 0 && prefixedPropREs[vendor].test(prop)) {\n deprecated = true;\n break;\n }\n }\n\n if (!deprecated && typeof source[prop] !== 'function') {\n dest[prop] = source[prop];\n }\n }\n return dest;\n}\n\npointerExtend.prefixedPropREs = {\n webkit: /(Movement[XY]|Radius[XY]|RotationAngle|Force)$/,\n};\n","export default (x, y) => Math.sqrt(x * x + y * y);\n","import hypot from './hypot';\nimport browser from './browser';\nimport dom from './domObjects';\nimport * as domUtils from './domUtils';\nimport domObjects from './domObjects';\nimport * as is from './is';\nimport pointerExtend from './pointerExtend';\n\nconst pointerUtils = {\n copyCoords: function (dest, src) {\n dest.page = dest.page || {};\n dest.page.x = src.page.x;\n dest.page.y = src.page.y;\n\n dest.client = dest.client || {};\n dest.client.x = src.client.x;\n dest.client.y = src.client.y;\n\n dest.timeStamp = src.timeStamp;\n },\n\n setCoordDeltas: function (targetObj, prev, cur) {\n targetObj.page.x = cur.page.x - prev.page.x;\n targetObj.page.y = cur.page.y - prev.page.y;\n targetObj.client.x = cur.client.x - prev.client.x;\n targetObj.client.y = cur.client.y - prev.client.y;\n targetObj.timeStamp = cur.timeStamp - prev.timeStamp;\n },\n\n setCoordVelocity (targetObj, delta) {\n const dt = Math.max(delta.timeStamp / 1000, 0.001);\n\n targetObj.page.x = delta.page.x / dt;\n targetObj.page.y = delta.page.y / dt;\n targetObj.client.x = delta.client.x / dt;\n targetObj.client.y = delta.client.y / dt;\n targetObj.timeStamp = dt;\n },\n\n isNativePointer: function (pointer) {\n return (pointer instanceof dom.Event || pointer instanceof dom.Touch);\n },\n\n // Get specified X/Y coords for mouse or event.touches[0]\n getXY: function (type, pointer, xy) {\n xy = xy || {};\n type = type || 'page';\n\n xy.x = pointer[type + 'X'];\n xy.y = pointer[type + 'Y'];\n\n return xy;\n },\n\n getPageXY: function (pointer, page) {\n page = page || {};\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n pointerUtils.getXY('screen', pointer, page);\n\n page.x += window.scrollX;\n page.y += window.scrollY;\n }\n else {\n pointerUtils.getXY('page', pointer, page);\n }\n\n return page;\n },\n\n getClientXY: function (pointer, client) {\n client = client || {};\n\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n pointerUtils.getXY('screen', pointer, client);\n }\n else {\n pointerUtils.getXY('client', pointer, client);\n }\n\n return client;\n },\n\n getPointerId: function (pointer) {\n return is.number(pointer.pointerId)? pointer.pointerId : pointer.identifier;\n },\n\n setCoords: function (targetObj, pointers, timeStamp) {\n const pointer = (pointers.length > 1\n ? pointerUtils.pointerAverage(pointers)\n : pointers[0]);\n\n const tmpXY = {};\n\n pointerUtils.getPageXY(pointer, tmpXY);\n targetObj.page.x = tmpXY.x;\n targetObj.page.y = tmpXY.y;\n\n pointerUtils.getClientXY(pointer, tmpXY);\n targetObj.client.x = tmpXY.x;\n targetObj.client.y = tmpXY.y;\n\n targetObj.timeStamp = is.number(timeStamp) ? timeStamp :new Date().getTime();\n },\n\n pointerExtend: pointerExtend,\n\n getTouchPair: function (event) {\n const touches = [];\n\n // array of touches is supplied\n if (is.array(event)) {\n touches[0] = event[0];\n touches[1] = event[1];\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0];\n touches[1] = event.changedTouches[0];\n }\n else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0];\n touches[1] = event.changedTouches[1];\n }\n }\n else {\n touches[0] = event.touches[0];\n touches[1] = event.touches[1];\n }\n }\n\n return touches;\n },\n\n pointerAverage: function (pointers) {\n const average = {\n pageX : 0,\n pageY : 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n };\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop] += pointer[prop];\n }\n }\n for (const prop in average) {\n average[prop] /= pointers.length;\n }\n\n return average;\n },\n\n touchBBox: function (event) {\n if (!event.length && !(event.touches && event.touches.length > 1)) {\n return;\n }\n\n const touches = pointerUtils.getTouchPair(event);\n const minX = Math.min(touches[0].pageX, touches[1].pageX);\n const minY = Math.min(touches[0].pageY, touches[1].pageY);\n const maxX = Math.max(touches[0].pageX, touches[1].pageX);\n const maxY = Math.max(touches[0].pageY, touches[1].pageY);\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n },\n\n touchDistance: function (event, deltaSource) {\n const sourceX = deltaSource + 'X';\n const sourceY = deltaSource + 'Y';\n const touches = pointerUtils.getTouchPair(event);\n\n\n const dx = touches[0][sourceX] - touches[1][sourceX];\n const dy = touches[0][sourceY] - touches[1][sourceY];\n\n return hypot(dx, dy);\n },\n\n touchAngle: function (event, prevAngle, deltaSource) {\n const sourceX = deltaSource + 'X';\n const sourceY = deltaSource + 'Y';\n const touches = pointerUtils.getTouchPair(event);\n const dx = touches[1][sourceX] - touches[0][sourceX];\n const dy = touches[1][sourceY] - touches[0][sourceY];\n const angle = 180 * Math.atan2(dy , dx) / Math.PI;\n\n return angle;\n },\n\n getPointerType: function (pointer) {\n return is.string(pointer.pointerType)\n ? pointer.pointerType\n : is.number(pointer.pointerType)\n ? [undefined, undefined,'touch', 'pen', 'mouse'][pointer.pointerType]\n // if the PointerEvent API isn't available, then the \"pointer\" must\n // be either a MouseEvent, TouchEvent, or Touch object\n : /touch/.test(pointer.type) || pointer instanceof domObjects.Touch\n ? 'touch'\n : 'mouse';\n },\n\n // [ event.target, event.currentTarget ]\n getEventTargets: function (event) {\n const path = is.func(event.composedPath) ? event.composedPath() : event.path;\n\n return [\n domUtils.getActualElement(path ? path[0] : event.target),\n domUtils.getActualElement(event.currentTarget),\n ];\n },\n\n newCoords () {\n return {\n page : { x: 0, y: 0 },\n client : { x: 0, y: 0 },\n timeStamp: 0,\n };\n },\n\n coordsToEvent: function ({ page, client, timeStamp }) {\n return {\n page,\n client,\n timeStamp,\n pageX: page.x,\n pageY: page.y,\n clientX: client.x,\n clientY: client.y,\n };\n },\n};\n\nexport default pointerUtils;\n","import * as is from './is';\nimport * as domUtils from './domUtils';\nimport pointerUtils from './pointerUtils';\nimport pExtend from './pointerExtend';\n\nimport { contains } from './arr';\n\nconst elements = [];\nconst targets = [];\n\n// {\n// type: {\n// selectors: ['selector', ...],\n// contexts : [document, ...],\n// listeners: [[listener, capture, passive], ...]\n// }\n// }\nconst delegatedEvents = {};\nconst documents = [];\n\nfunction add (element, type, listener, optionalArg) {\n const options = getOptions(optionalArg);\n let elementIndex = elements.indexOf(element);\n let target = targets[elementIndex];\n\n if (!target) {\n target = {\n events: {},\n typeCount: 0,\n };\n\n elementIndex = elements.push(element) - 1;\n targets.push(target);\n }\n\n if (!target.events[type]) {\n target.events[type] = [];\n target.typeCount++;\n }\n\n if (!contains(target.events[type], listener)) {\n element.addEventListener(type, listener, events.supportsOptions? options : !!options.capture);\n target.events[type].push(listener);\n }\n}\n\nfunction remove (element, type, listener, optionalArg) {\n const options = getOptions(optionalArg);\n const elementIndex = elements.indexOf(element);\n const target = targets[elementIndex];\n\n if (!target || !target.events) {\n return;\n }\n\n if (type === 'all') {\n for (type in target.events) {\n if (target.events.hasOwnProperty(type)) {\n remove(element, type, 'all');\n }\n }\n return;\n }\n\n if (target.events[type]) {\n const len = target.events[type].length;\n\n if (listener === 'all') {\n for (let i = 0; i < len; i++) {\n remove(element, type, target.events[type][i], options);\n }\n return;\n }\n else {\n for (let i = 0; i < len; i++) {\n if (target.events[type][i] === listener) {\n element.removeEventListener(type, listener, events.supportsOptions? options : !!options.capture);\n target.events[type].splice(i, 1);\n\n break;\n }\n }\n }\n\n if (target.events[type] && target.events[type].length === 0) {\n target.events[type] = null;\n target.typeCount--;\n }\n }\n\n if (!target.typeCount) {\n targets.splice(elementIndex, 1);\n elements.splice(elementIndex, 1);\n }\n}\n\nfunction addDelegate (selector, context, type, listener, optionalArg) {\n const options = getOptions(optionalArg);\n if (!delegatedEvents[type]) {\n delegatedEvents[type] = {\n selectors: [],\n contexts : [],\n listeners: [],\n };\n\n // add delegate listener functions\n for (const doc of documents) {\n add(doc, type, delegateListener);\n add(doc, type, delegateUseCapture, true);\n }\n }\n\n const delegated = delegatedEvents[type];\n let index;\n\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n if (delegated.selectors[index] === selector\n && delegated.contexts[index] === context) {\n break;\n }\n }\n\n if (index === -1) {\n index = delegated.selectors.length;\n\n delegated.selectors.push(selector);\n delegated.contexts .push(context);\n delegated.listeners.push([]);\n }\n\n // keep listener and capture and passive flags\n delegated.listeners[index].push([listener, !!options.capture, options.passive]);\n}\n\nfunction removeDelegate (selector, context, type, listener, optionalArg) {\n const options = getOptions(optionalArg);\n const delegated = delegatedEvents[type];\n let matchFound = false;\n let index;\n\n if (!delegated) { return; }\n\n // count from last index of delegated to 0\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n // look for matching selector and context Node\n if (delegated.selectors[index] === selector\n && delegated.contexts[index] === context) {\n\n const listeners = delegated.listeners[index];\n\n // each item of the listeners array is an array: [function, capture, passive]\n for (let i = listeners.length - 1; i >= 0; i--) {\n const [fn, capture, passive] = listeners[i];\n\n // check if the listener functions and capture and passive flags match\n if (fn === listener && capture === !!options.capture && passive === options.passive) {\n // remove the listener from the array of listeners\n listeners.splice(i, 1);\n\n // if all listeners for this interactable have been removed\n // remove the interactable from the delegated arrays\n if (!listeners.length) {\n delegated.selectors.splice(index, 1);\n delegated.contexts .splice(index, 1);\n delegated.listeners.splice(index, 1);\n\n // remove delegate function from context\n remove(context, type, delegateListener);\n remove(context, type, delegateUseCapture, true);\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegatedEvents[type] = null;\n }\n }\n\n // only remove one listener\n matchFound = true;\n break;\n }\n }\n\n if (matchFound) { break; }\n }\n }\n}\n\n// bound to the interactable context when a DOM event\n// listener is added to a selector interactable\nfunction delegateListener (event, optionalArg) {\n const options = getOptions(optionalArg);\n const fakeEvent = {};\n const delegated = delegatedEvents[event.type];\n const [eventTarget] = (pointerUtils.getEventTargets(event));\n let element = eventTarget;\n\n // duplicate the event so that currentTarget can be changed\n pExtend(fakeEvent, event);\n\n fakeEvent.originalEvent = event;\n fakeEvent.preventDefault = preventOriginalDefault;\n\n // climb up document tree looking for selector matches\n while (is.element(element)) {\n for (let i = 0; i < delegated.selectors.length; i++) {\n const selector = delegated.selectors[i];\n const context = delegated.contexts[i];\n\n if (domUtils.matchesSelector(element, selector)\n && domUtils.nodeContains(context, eventTarget)\n && domUtils.nodeContains(context, element)) {\n\n const listeners = delegated.listeners[i];\n\n fakeEvent.currentTarget = element;\n\n for (let j = 0; j < listeners.length; j++) {\n const [fn, capture, passive] = listeners[j];\n\n if (capture === !!options.capture && passive === options.passive) {\n fn(fakeEvent);\n }\n }\n }\n }\n\n element = domUtils.parentNode(element);\n }\n}\n\nfunction delegateUseCapture (event) {\n return delegateListener.call(this, event, true);\n}\n\nfunction preventOriginalDefault () {\n this.originalEvent.preventDefault();\n}\n\nfunction getOptions (param) {\n return is.object(param)? param : { capture: param };\n}\n\nconst events = {\n add,\n remove,\n\n addDelegate,\n removeDelegate,\n\n delegateListener,\n delegateUseCapture,\n delegatedEvents,\n documents,\n\n supportsOptions: false,\n supportsPassive: false,\n\n _elements: elements,\n _targets: targets,\n\n init (window) {\n window.document.createElement('div').addEventListener('test', null, {\n get capture () { return (events.supportsOptions = true); },\n get passive () { return (events.supportsPassive = true); },\n });\n },\n};\n\nexport default events;\n","export default function extend (dest, source) {\n for (const prop in source) {\n dest[prop] = source[prop];\n }\n return dest;\n}\n","import extend from './extend';\nimport * as is from './is';\nimport {\n closest,\n parentNode,\n getElementRect,\n} from './domUtils';\n\nexport function getStringOptionResult (value, interactable, element) {\n if (!is.string(value)) {\n return null;\n }\n\n if (value === 'parent') {\n value = parentNode(element);\n }\n else if (value === 'self') {\n value = interactable.getRect(element);\n }\n else {\n value = closest(element, value);\n }\n\n return value;\n}\n\nexport function resolveRectLike (value, interactable, element, functionArgs) {\n value = getStringOptionResult(value, interactable, element) || value;\n\n if (is.func(value)) {\n value = value.apply(null, functionArgs);\n }\n\n if (is.element(value)) {\n value = getElementRect(value);\n }\n\n return value;\n}\n\nexport function rectToXY (rect) {\n return rect && {\n x: 'x' in rect ? rect.x : rect.left,\n y: 'y' in rect ? rect.y : rect.top,\n };\n}\n\nexport function xywhToTlbr (rect) {\n if (rect && !('left' in rect && 'top' in rect)) {\n rect = extend({}, rect);\n\n rect.left = rect.x || 0;\n rect.top = rect.y || 0;\n rect.right = rect.right || (rect.left + rect.width);\n rect.bottom = rect.bottom || (rect.top + rect.height);\n }\n\n return rect;\n}\n\nexport function tlbrToXywh (rect) {\n if (rect && !('x' in rect && 'y' in rect)) {\n rect = extend({}, rect);\n\n rect.x = rect.left || 0;\n rect.y = rect.top || 0;\n rect.width = rect.width || (rect.right - rect.x);\n rect.height = rect.height || (rect.bottom - rect.y);\n }\n\n return rect;\n}\n\nexport default {\n getStringOptionResult,\n resolveRectLike,\n rectToXY,\n xywhToTlbr,\n tlbrToXywh,\n};\n","import {\n resolveRectLike,\n rectToXY,\n} from './rect';\n\nexport default function (target, element, action) {\n const actionOptions = target.options[action];\n const actionOrigin = actionOptions && actionOptions.origin;\n const origin = actionOrigin || target.options.origin;\n\n const originRect = resolveRectLike(origin, target, element, [target && element]);\n\n return rectToXY(originRect) || { x: 0, y: 0 };\n}\n","import * as is from './is';\nimport extend from './extend';\n\nexport default function normalize (type, listener, result) {\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((acc, t) => extend(acc, normalize(t, listener, result)), {});\n }\n\n // ({ type: fn }) -> ('', { type: fn })\n if (is.object(type)) {\n listener = type;\n type = '';\n }\n\n if (is.func(listener)) {\n result[type] = result[type] || [];\n result[type].push(listener);\n }\n else if (is.array(listener)) {\n for (const l of listener) {\n normalize(type, l, result);\n }\n }\n else if (is.object(listener)) {\n for (const prefix in listener) {\n const combinedTypes = split(prefix).map(p => `${type}${p}`);\n\n normalize(combinedTypes, listener[prefix], result);\n }\n }\n\n return result;\n}\n\nfunction split (type) {\n return type.trim().split(/ +/);\n}\n","let lastTime = 0;\nlet request;\nlet cancel;\n\nfunction init (window) {\n request = window.requestAnimationFrame;\n cancel = window.cancelAnimationFrame;\n\n if (!request) {\n const vendors = ['ms', 'moz', 'webkit', 'o'];\n\n for (const vendor of vendors) {\n request = window[`${vendor}RequestAnimationFrame`];\n cancel = window[`${vendor}CancelAnimationFrame`] || window[`${vendor}CancelRequestAnimationFrame`];\n }\n }\n\n if (!request) {\n request = callback => {\n const currTime = new Date().getTime();\n const timeToCall = Math.max(0, 16 - (currTime - lastTime));\n const token = setTimeout(function () { callback(currTime + timeToCall); },\n timeToCall);\n\n lastTime = currTime + timeToCall;\n return token;\n };\n\n cancel = token => clearTimeout(token);\n }\n}\n\nexport default {\n request: callback => request(callback),\n cancel: token => cancel(token),\n init,\n};\n","import win from './window';\n\nexport function warnOnce (method, message) {\n let warned = false;\n\n return function () {\n if (!warned) {\n win.window.console.warn(message);\n warned = true;\n }\n\n return method.apply(this, arguments);\n };\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nexport function _getQBezierValue (t, p1, p2, p3) {\n const iT = 1 - t;\n return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3;\n}\n\nexport function getQuadraticCurvePoint (startX, startY, cpX, cpY, endX, endY, position) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY),\n };\n}\n\n// http://gizma.com/easing/\nexport function easeOutQuad (t, b, c, d) {\n t /= d;\n return -c * t*(t-2) + b;\n}\n\nexport function copyAction (dest, src) {\n dest.name = src.name;\n dest.axis = src.axis;\n dest.edges = src.edges;\n\n return dest;\n}\n\nimport * as arr from './arr';\nimport * as dom from './domUtils';\nimport * as is from './is';\n\nexport {\n win,\n arr,\n dom,\n is,\n};\n\nexport { default as browser } from './browser';\nexport { default as Signals } from './Signals';\nexport { default as raf } from './raf';\nexport { default as extend } from './extend';\nexport { default as clone } from './clone';\nexport { default as getOriginXY } from './getOriginXY';\nexport { default as pointer } from './pointerUtils';\nexport { default as rect } from './rect';\nexport { default as events } from './events';\nexport { default as hypot } from './hypot';\nexport { default as normalizeListeners } from './normalizeListeners';\n","import * as utils from '@interactjs/utils';\nimport DropEvent from './DropEvent';\n\nfunction install (scope) {\n const {\n actions,\n /** @lends module:interact */\n interact,\n /** @lends Interactable */\n Interactable,\n interactions,\n defaults,\n } = scope;\n\n interactions.signals.on('after-action-start', function ({ interaction, event, iEvent: dragEvent }) {\n if (interaction.prepared.name !== 'drag') { return; }\n\n const { dropStatus } = interaction;\n\n // reset active dropzones\n dropStatus.activeDrops = null;\n dropStatus.events = null;\n\n if (!scope.dynamicDrop) {\n dropStatus.activeDrops = getActiveDrops(scope, interaction.element);\n }\n\n dropStatus.events = getDropEvents(interaction, event, dragEvent);\n\n if (dropStatus.events.activate) {\n fireActivationEvents(dropStatus.activeDrops, dropStatus.events.activate);\n }\n });\n\n interactions.signals.on('action-move', arg => onEventCreated(arg, scope));\n interactions.signals.on('action-end' , arg => onEventCreated(arg, scope));\n\n interactions.signals.on('after-action-move', function ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return; }\n\n fireDropEvents(interaction, interaction.dropStatus.events);\n interaction.dropStatus.events = {};\n });\n\n interactions.signals.on('after-action-end', function ({ interaction }) {\n if (interaction.prepared.name === 'drag') {\n fireDropEvents(interaction, interaction.dropStatus.events);\n }\n });\n\n interactions.signals.on('stop', function ({ interaction }) {\n interaction.dropStatus.activeDrops = null;\n interaction.dropStatus.events = null;\n });\n\n interactions.signals.on('new', function (interaction) {\n interaction.dropStatus = {\n cur: {\n dropzone : null, // the dropzone a drag target might be dropped into\n element : null, // the element at the time of checking\n },\n prev: {\n dropzone : null, // the dropzone that was recently dragged away from\n element : null, // the element at the time of checking\n },\n rejected : false, // wheather the potential drop was rejected from a listener\n events : null, // the drop events related to the current drag event\n activeDrops: null, // an array of { dropzone, element, rect }\n };\n });\n\n interactions.signals.on('stop', function ({ interaction: { dropStatus } }) {\n dropStatus.cur.dropzone = dropStatus.cur.element =\n dropStatus.prev.dropzone = dropStatus.prev.element = null;\n dropStatus.rejected = false;\n });\n\n Interactable.prototype.dropzone = function (options) {\n return dropzoneMethod(this, options);\n };\n\n Interactable.prototype.dropCheck = function (dragEvent, event, draggable, draggableElement, dropElement, rect) {\n return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect);\n };\n\n /**\n * Returns or sets whether the dimensions of dropzone elements are calculated\n * on every dragmove or only on dragstart for the default dropChecker\n *\n * @param {boolean} [newValue] True to check on each move. False to check only\n * before start\n * @return {boolean | interact} The current setting or interact\n */\n interact.dynamicDrop = function (newValue) {\n if (utils.is.bool(newValue)) {\n //if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n // calcRects(dropzones);\n //}\n\n scope.dynamicDrop = newValue;\n\n return interact;\n }\n return scope.dynamicDrop;\n };\n\n utils.arr.merge(actions.eventTypes, [\n 'dragenter',\n 'dragleave',\n 'dropactivate',\n 'dropdeactivate',\n 'dropmove',\n 'drop',\n ]);\n actions.methodDict.drop = 'dropzone';\n\n scope.dynamicDrop = false;\n\n defaults.drop = drop.defaults;\n}\n\nfunction collectDrops ({ interactables }, draggableElement) {\n const drops = [];\n\n // collect all dropzones and their elements which qualify for a drop\n for (const dropzone of interactables.list) {\n if (!dropzone.options.drop.enabled) { continue; }\n\n const accept = dropzone.options.drop.accept;\n\n // test the draggable draggableElement against the dropzone's accept setting\n if ((utils.is.element(accept) && accept !== draggableElement)\n || (utils.is.string(accept)\n && !utils.dom.matchesSelector(draggableElement, accept))\n || (utils.is.func(accept) && !accept({ dropzone, draggableElement }))) {\n\n continue;\n }\n\n // query for new elements if necessary\n const dropElements = utils.is.string(dropzone.target)\n ? dropzone._context.querySelectorAll(dropzone.target)\n : utils.is.array(dropzone.target) ? dropzone.target : [dropzone.target];\n\n for (const dropzoneElement of dropElements) {\n if (dropzoneElement !== draggableElement) {\n drops.push({\n dropzone,\n element: dropzoneElement,\n });\n }\n }\n }\n\n return drops;\n}\n\nfunction fireActivationEvents (activeDrops, event) {\n // loop through all active dropzones and trigger event\n for (const { dropzone, element } of activeDrops) {\n event.dropzone = dropzone;\n\n // set current element as event target\n event.target = element;\n dropzone.fire(event);\n event.propagationStopped = event.immediatePropagationStopped = false;\n }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops (scope, dragElement) {\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 ({ dropStatus, target: draggable, element: dragElement }, dragEvent, pointerEvent) {\n const validDrops = [];\n\n // collect all dropzones and their elements which qualify for a drop\n for (const { dropzone, element: dropzoneElement, rect } of dropStatus.activeDrops) {\n validDrops.push(dropzone.dropCheck(dragEvent, pointerEvent, draggable, dragElement, dropzoneElement, rect)\n ? dropzoneElement\n : null);\n }\n\n // get the most appropriate dropzone based on DOM depth and order\n const dropIndex = utils.dom.indexOfDeepestElement(validDrops);\n\n return dropStatus.activeDrops[dropIndex] || null;\n}\n\nfunction getDropEvents (interaction, pointerEvent, dragEvent) {\n const { dropStatus } = 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(dropStatus, dragEvent, 'dropactivate');\n\n dropEvents.activate.target = null;\n dropEvents.activate.dropzone = null;\n }\n if (dragEvent.type === 'dragend') {\n dropEvents.deactivate = new DropEvent(dropStatus, dragEvent, 'dropdeactivate');\n\n dropEvents.deactivate.target = null;\n dropEvents.deactivate.dropzone = null;\n }\n\n if (dropStatus.rejected) {\n return dropEvents;\n }\n\n if (dropStatus.cur.element !== dropStatus.prev.element) {\n // if there was a previous dropzone, create a dragleave event\n if (dropStatus.prev.dropzone) {\n dropEvents.leave = new DropEvent(dropStatus, dragEvent, 'dragleave');\n\n dragEvent.dragLeave = dropEvents.leave.target = dropStatus.prev.element;\n dragEvent.prevDropzone = dropEvents.leave.dropzone = dropStatus.prev.dropzone;\n }\n // if dropzone is not null, create a dragenter event\n if (dropStatus.cur.dropzone) {\n dropEvents.enter = new DropEvent(dropStatus, dragEvent, 'dragenter');\n\n dragEvent.dragEnter = dropStatus.cur.element;\n dragEvent.dropzone = dropStatus.cur.dropzone;\n }\n }\n\n if (dragEvent.type === 'dragend' && dropStatus.cur.dropzone) {\n dropEvents.drop = new DropEvent(dropStatus, dragEvent, 'drop');\n\n dragEvent.dropzone = dropStatus.cur.dropzone;\n dragEvent.relatedTarget = dropStatus.cur.element;\n }\n if (dragEvent.type === 'dragmove' && dropStatus.cur.dropzone) {\n dropEvents.move = new DropEvent(dropStatus, dragEvent, 'dropmove');\n\n dropEvents.move.dragmove = dragEvent;\n dragEvent.dropzone = dropStatus.cur.dropzone;\n }\n\n return dropEvents;\n}\n\nfunction fireDropEvents (interaction, events) {\n const { dropStatus } = interaction;\n const {\n activeDrops,\n cur,\n prev,\n } = dropStatus;\n\n if (events.leave) { prev.dropzone.fire(events.leave); }\n if (events.move ) { cur.dropzone.fire(events.move ); }\n if (events.enter) { cur.dropzone.fire(events.enter); }\n if (events.drop ) { cur.dropzone.fire(events.drop ); }\n\n if (events.deactivate) {\n fireActivationEvents(activeDrops, events.deactivate);\n }\n\n dropStatus.prev.dropzone = cur.dropzone;\n dropStatus.prev.element = cur.element;\n}\n\nfunction onEventCreated ({ interaction, iEvent, event }, scope) {\n if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') { return; }\n\n const { dropStatus } = interaction;\n\n if (scope.dynamicDrop) {\n dropStatus.activeDrops = getActiveDrops(scope, interaction.target, interaction.element);\n }\n\n const dragEvent = iEvent;\n const dropResult = getDrop(interaction, dragEvent, event);\n\n // update rejected status\n dropStatus.rejected = dropStatus.rejected &&\n !!dropResult &&\n dropResult.dropzone === dropStatus.cur.dropzone &&\n dropResult.element === dropStatus.cur.element;\n\n dropStatus.cur.dropzone = dropResult && dropResult.dropzone;\n dropStatus.cur.element = dropResult && dropResult.element;\n\n dropStatus.events = getDropEvents(interaction, event, dragEvent);\n}\n\n/**\n * ```js\n * interact(target)\n * .dropChecker(function(dragEvent, // related dragmove or dragend event\n * event, // TouchEvent/PointerEvent/MouseEvent\n * dropped, // bool result of the default checker\n * dropzone, // dropzone Interactable\n * dropElement, // dropzone elemnt\n * draggable, // draggable Interactable\n * draggableElement) {// draggable element\n *\n * return dropped && event.target.hasAttribute('allow-drop');\n * }\n * ```\n *\n * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param {boolean | object | null} [options] The new options to be set.\n * @return {boolean | Interactable} The current setting or this Interactable\n */\nfunction dropzoneMethod (interactable, options) {\n if (utils.is.object(options)) {\n interactable.options.drop.enabled = options.enabled === false? false: true;\n\n if (options.listeners) {\n const normalized = utils.normalizeListeners(options.listeners);\n // rename 'drop' to '' as it will be prefixed with 'drop'\n const corrected = Object.keys(normalized).reduce((acc, type) => {\n const correctedType = /^(enter|leave)/.test(type)\n ? `drag${type}`\n : /^(activate|deactivate|move)/.test(type)\n ? `drop${type}`\n : type;\n\n acc[correctedType] = normalized[type];\n\n return acc;\n }, {});\n\n interactable.off(interactable.options.drop.listeners);\n interactable.on(corrected);\n interactable.options.drop.listeners = corrected;\n }\n\n if (utils.is.func(options.ondrop) ) { interactable.on('drop' , options.ondrop ); }\n if (utils.is.func(options.ondropactivate) ) { interactable.on('dropactivate' , options.ondropactivate ); }\n if (utils.is.func(options.ondropdeactivate)) { interactable.on('dropdeactivate', options.ondropdeactivate); }\n if (utils.is.func(options.ondragenter) ) { interactable.on('dragenter' , options.ondragenter ); }\n if (utils.is.func(options.ondragleave) ) { interactable.on('dragleave' , options.ondragleave ); }\n if (utils.is.func(options.ondropmove) ) { interactable.on('dropmove' , options.ondropmove ); }\n\n if (/^(pointer|center)$/.test(options.overlap)) {\n interactable.options.drop.overlap = options.overlap;\n }\n else if (utils.is.number(options.overlap)) {\n interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0);\n }\n if ('accept' in options) {\n interactable.options.drop.accept = options.accept;\n }\n if ('checker' in options) {\n interactable.options.drop.checker = options.checker;\n }\n\n\n return interactable;\n }\n\n if (utils.is.bool(options)) {\n interactable.options.drop.enabled = options;\n\n return interactable;\n }\n\n return interactable.options.drop;\n}\n\nfunction dropCheckMethod (interactable, dragEvent, event, draggable, draggableElement, dropElement, rect) {\n let dropped = false;\n\n // if the dropzone has no rect (eg. display: none)\n // call the custom dropChecker or just return false\n if (!(rect = rect || interactable.getRect(dropElement))) {\n return (interactable.options.drop.checker\n ? interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n : false);\n }\n\n const dropOverlap = interactable.options.drop.overlap;\n\n if (dropOverlap === 'pointer') {\n const origin = utils.getOriginXY(draggable, draggableElement, 'drag');\n const page = utils.pointer.getPageXY(dragEvent);\n\n page.x += origin.x;\n page.y += origin.y;\n\n const horizontal = (page.x > rect.left) && (page.x < rect.right);\n const vertical = (page.y > rect.top ) && (page.y < rect.bottom);\n\n dropped = horizontal && vertical;\n }\n\n const dragRect = draggable.getRect(draggableElement);\n\n if (dragRect && dropOverlap === 'center') {\n const cx = dragRect.left + dragRect.width / 2;\n const cy = dragRect.top + dragRect.height / 2;\n\n dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom;\n }\n\n if (dragRect && utils.is.number(dropOverlap)) {\n const overlapArea = (Math.max(0, Math.min(rect.right , dragRect.right ) - Math.max(rect.left, dragRect.left))\n * Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top , dragRect.top )));\n\n const overlapRatio = overlapArea / (dragRect.width * dragRect.height);\n\n dropped = overlapRatio >= dropOverlap;\n }\n\n if (interactable.options.drop.checker) {\n dropped = interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement);\n }\n\n return dropped;\n}\n\n\nconst drop = {\n install,\n getActiveDrops,\n getDrop,\n getDropEvents,\n fireDropEvents,\n defaults: {\n enabled: false,\n accept : null,\n overlap: 'pointer',\n },\n};\n\nexport default drop;\n","export default {\n base: {\n preventDefault: 'auto',\n deltaSource : 'page',\n },\n\n perAction: {\n enabled : false,\n origin: { x: 0, y: 0 },\n },\n};\n","import extend from '@interactjs/utils/extend';\nimport getOriginXY from '@interactjs/utils/getOriginXY';\nimport defaults from './defaultOptions';\nimport hypot from '@interactjs/utils/hypot';\n\nclass InteractEvent {\n /** */\n constructor (interaction, event, actionName, phase, element, related, preEnd, type) {\n element = element || interaction.element;\n\n const target = interaction.target;\n const deltaSource = (target && target.options || defaults).deltaSource;\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.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.button;\n this.buttons = event.buttons;\n this.target = element;\n this.currentTarget = element;\n this.relatedTarget = related || null;\n this.preEnd = preEnd;\n this.type = type || (actionName + (phase || ''));\n this.interaction = interaction;\n this.interactable = target;\n\n this.t0 = starting\n ? interaction.pointers[interaction.pointers.length - 1].downTime\n : prevEvent.t0;\n\n this.x0 = interaction.coords.start.page.x - origin.x;\n this.y0 = interaction.coords.start.page.y - origin.y;\n this.clientX0 = interaction.coords.start.client.x - origin.x;\n this.clientY0 = interaction.coords.start.client.y - origin.y;\n\n if (starting || ending) {\n this.delta = { x: 0, y: 0 };\n }\n else {\n this.delta = {\n x: this[deltaSource].x - prevEvent[deltaSource].x,\n y: this[deltaSource].y - prevEvent[deltaSource].y,\n };\n }\n\n this.dt = interaction.coords.delta.timeStamp;\n this.duration = this.timeStamp - this.t0;\n\n // velocity and speed in pixels per second\n this.velocity = extend({}, interaction.coords.velocity[deltaSource]);\n this.speed = hypot(this.velocity.x, this.velocity.y);\n\n this.swipe = (ending || phase === 'inertiastart')? this.getSwipe() : null;\n }\n\n get pageX () { return this.page.x; }\n get pageY () { return this.page.y; }\n set pageX (value) { this.page.x = value; }\n set pageY (value) { this.page.y = value; }\n\n get clientX () { return this.client.x; }\n get clientY () { return this.client.y; }\n set clientX (value) { this.client.x = value; }\n set clientY (value) { this.client.y = value; }\n\n get dx () { return this.delta.x; }\n get dy () { return this.delta.y; }\n set dx (value) { this.delta.x = value; }\n set dy (value) { this.delta.y = value; }\n\n get velocityX () { return this.velocity.x; }\n get velocityY () { return this.velocity.y; }\n set velocityX (value) { this.velocity.x = value; }\n set velocityY (value) { this.velocity.y = value; }\n\n getSwipe () {\n const interaction = this.interaction;\n\n if (interaction.prevEvent.speed < 600\n || this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n return null;\n }\n\n let angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI;\n const overlap = 22.5;\n\n if (angle < 0) {\n angle += 360;\n }\n\n const left = 135 - overlap <= angle && angle < 225 + overlap;\n const up = 225 - overlap <= angle && angle < 315 + overlap;\n\n const right = !left && (315 - overlap <= angle || angle < 45 + overlap);\n const down = !up && 45 - overlap <= angle && angle < 135 + overlap;\n\n return {\n up,\n down,\n left,\n right,\n angle,\n speed: interaction.prevEvent.speed,\n velocity: {\n x: interaction.prevEvent.velocityX,\n y: interaction.prevEvent.velocityY,\n },\n };\n }\n\n preventDefault () {}\n\n /** */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true;\n }\n\n /** */\n stopPropagation () {\n this.propagationStopped = true;\n }\n}\n\nexport default InteractEvent;\n","import * as utils from '@interactjs/utils';\nimport InteractEvent from '@interactjs/core/InteractEvent';\n\nfunction install (scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope;\n\n const gesture = {\n defaults: {\n },\n\n checker: function (pointer, event, interactable, element, interaction) {\n if (interaction.pointers.length >= 2) {\n return { name: 'gesture' };\n }\n\n return null;\n },\n\n getCursor: function () {\n return '';\n },\n };\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 (options) {\n if (utils.is.object(options)) {\n this.options.gesture.enabled = options.enabled === false? false: true;\n this.setPerAction('gesture', options);\n this.setOnEvents('gesture', options);\n\n return this;\n }\n\n if (utils.is.bool(options)) {\n this.options.gesture.enabled = options;\n\n return this;\n }\n\n return this.options.gesture;\n };\n\n interactions.signals.on('action-start', updateGestureProps);\n interactions.signals.on('action-move', updateGestureProps);\n interactions.signals.on('action-end', updateGestureProps);\n\n interactions.signals.on('action-start', start);\n interactions.signals.on('action-move', move);\n\n interactions.signals.on('new', function (interaction) {\n interaction.gesture = {\n start: { x: 0, y: 0 },\n\n startDistance: 0, // distance between two touches of touchStart\n prevDistance : 0,\n distance : 0,\n\n scale: 1, // gesture.distance / gesture.startDistance\n\n startAngle: 0, // angle of line joining two touches\n prevAngle : 0, // angle of the previous gesture event\n };\n });\n\n actions.gesture = gesture;\n actions.names.push('gesture');\n utils.arr.merge(actions.eventTypes, [\n 'gesturestart',\n 'gesturemove',\n 'gestureend',\n ]);\n actions.methodDict.gesture = 'gesturable';\n\n defaults.gesture = gesture.defaults;\n}\n\nfunction start ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'gesture') { return; }\n\n iEvent.ds = 0;\n\n interaction.gesture.startDistance = interaction.gesture.prevDistance = iEvent.distance;\n interaction.gesture.startAngle = interaction.gesture.prevAngle = iEvent.angle;\n interaction.gesture.scale = 1;\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'gesture') { return; }\n\n iEvent.ds = iEvent.scale - interaction.gesture.scale;\n\n interaction.target.fire(iEvent);\n\n interaction.gesture.prevAngle = iEvent.angle;\n interaction.gesture.prevDistance = iEvent.distance;\n\n if (iEvent.scale !== Infinity\n && iEvent.scale !== null\n && iEvent.scale !== undefined\n && !isNaN(iEvent.scale)) {\n\n interaction.gesture.scale = iEvent.scale;\n }\n}\n\nfunction updateGestureProps ({ interaction, iEvent, event, phase }) {\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.target.options.deltaSource;\n\n iEvent.touches = [pointers[0].pointer, pointers[1].pointer];\n\n if (starting) {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource);\n iEvent.box = utils.pointer.touchBBox(pointers);\n iEvent.scale = 1;\n iEvent.ds = 0;\n iEvent.angle = utils.pointer.touchAngle(pointers, undefined, deltaSource);\n iEvent.da = 0;\n }\n else if (ending || event instanceof InteractEvent) {\n iEvent.distance = interaction.prevEvent.distance;\n iEvent.box = interaction.prevEvent.box;\n iEvent.scale = interaction.prevEvent.scale;\n iEvent.ds = iEvent.scale - 1;\n iEvent.angle = interaction.prevEvent.angle;\n iEvent.da = iEvent.angle - interaction.gesture.startAngle;\n }\n else {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource);\n iEvent.box = utils.pointer.touchBBox(pointers);\n iEvent.scale = iEvent.distance / interaction.gesture.startDistance;\n iEvent.angle = utils.pointer.touchAngle(pointers, interaction.gesture.prevAngle, deltaSource);\n\n iEvent.ds = iEvent.scale - interaction.gesture.prevScale;\n iEvent.da = iEvent.angle - interaction.gesture.prevAngle;\n }\n}\n\nexport default { install };\n","import * as utils from '@interactjs/utils';\n\nfunction install (scope) {\n const {\n actions,\n browser,\n /** @lends Interactable */\n Interactable,\n interactions,\n defaults,\n } = scope;\n\n // Less Precision with touch input\n const defaultMargin = browser.supportsTouch || browser.supportsPointerEvent? 20: 10;\n\n const resize = {\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 },\n\n checker: function (pointer, event, interactable, element, interaction, rect) {\n if (!rect) { return null; }\n\n const page = utils.extend({}, interaction.coords.cur.page);\n const options = interactable.options;\n\n if (options.resize.enabled) {\n const resizeOptions = options.resize;\n const resizeEdges = { left: false, right: false, top: false, bottom: false };\n\n // if using resize.edges\n if (utils.is.object(resizeOptions.edges)) {\n for (const edge in resizeEdges) {\n resizeEdges[edge] = checkResizeEdge(edge,\n resizeOptions.edges[edge],\n page,\n interaction._eventTarget,\n element,\n rect,\n resizeOptions.margin || defaultMargin);\n }\n\n resizeEdges.left = resizeEdges.left && !resizeEdges.right;\n resizeEdges.top = resizeEdges.top && !resizeEdges.bottom;\n\n if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n return {\n name: 'resize',\n edges: resizeEdges,\n };\n }\n }\n else {\n const right = options.resize.axis !== 'y' && page.x > (rect.right - defaultMargin);\n const bottom = options.resize.axis !== 'x' && page.y > (rect.bottom - defaultMargin);\n\n if (right || bottom) {\n return {\n name: 'resize',\n axes: (right? 'x' : '') + (bottom? 'y' : ''),\n };\n }\n }\n }\n\n return null;\n },\n\n cursors: (browser.isIe9 ? {\n x : 'e-resize',\n y : 's-resize',\n xy: 'se-resize',\n\n top : 'n-resize',\n left : 'w-resize',\n bottom : 's-resize',\n right : 'e-resize',\n topleft : 'se-resize',\n bottomright: 'se-resize',\n topright : 'ne-resize',\n bottomleft : 'ne-resize',\n } : {\n x : 'ew-resize',\n y : 'ns-resize',\n xy: 'nwse-resize',\n\n top : 'ns-resize',\n left : 'ew-resize',\n bottom : 'ns-resize',\n right : 'ew-resize',\n topleft : 'nwse-resize',\n bottomright: 'nwse-resize',\n topright : 'nesw-resize',\n bottomleft : 'nesw-resize',\n }),\n\n getCursor: function (action) {\n if (action.axis) {\n return resize.cursors[action.name + action.axis];\n }\n else if (action.edges) {\n let cursorKey = '';\n const edgeNames = ['top', 'bottom', 'left', 'right'];\n\n for (let i = 0; i < 4; i++) {\n if (action.edges[edgeNames[i]]) {\n cursorKey += edgeNames[i];\n }\n }\n\n return resize.cursors[cursorKey];\n }\n },\n };\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 (options) {\n if (utils.is.object(options)) {\n this.options.resize.enabled = options.enabled === false? false: true;\n this.setPerAction('resize', options);\n this.setOnEvents('resize', options);\n\n if (/^x$|^y$|^xy$/.test(options.axis)) {\n this.options.resize.axis = options.axis;\n }\n else if (options.axis === null) {\n this.options.resize.axis = defaults.resize.axis;\n }\n\n if (utils.is.bool(options.preserveAspectRatio)) {\n this.options.resize.preserveAspectRatio = options.preserveAspectRatio;\n }\n else if (utils.is.bool(options.square)) {\n this.options.resize.square = options.square;\n }\n\n return this;\n }\n if (utils.is.bool(options)) {\n this.options.resize.enabled = options;\n\n return this;\n }\n return this.options.resize;\n };\n\n interactions.signals.on('new', function (interaction) {\n interaction.resizeAxes = 'xy';\n });\n\n interactions.signals.on('action-start', start);\n interactions.signals.on('action-move', move);\n\n interactions.signals.on('action-start', updateEventAxes);\n interactions.signals.on('action-move', updateEventAxes);\n\n actions.resize = resize;\n actions.names.push('resize');\n utils.arr.merge(actions.eventTypes, [\n 'resizestart',\n 'resizemove',\n 'resizeinertiastart',\n 'resizeresume',\n 'resizeend',\n ]);\n actions.methodDict.resize = 'resizable';\n\n defaults.resize = resize.defaults;\n}\n\nfunction checkResizeEdge (name, value, page, element, interactableElement, rect, margin) {\n // false, '', undefined, null\n if (!value) { return false; }\n\n // true value, use pointer coords and element rect\n if (value === true) {\n // if dimensions are negative, \"switch\" edges\n const width = utils.is.number(rect.width )? rect.width : rect.right - rect.left;\n const height = utils.is.number(rect.height)? rect.height : rect.bottom - rect.top ;\n\n if (width < 0) {\n if (name === 'left' ) { name = 'right'; }\n else if (name === 'right') { name = 'left' ; }\n }\n if (height < 0) {\n if (name === 'top' ) { name = 'bottom'; }\n else if (name === 'bottom') { name = 'top' ; }\n }\n\n if (name === 'left' ) { return page.x < ((width >= 0? rect.left: rect.right ) + margin); }\n if (name === 'top' ) { return page.y < ((height >= 0? rect.top : rect.bottom) + margin); }\n\n if (name === 'right' ) { return page.x > ((width >= 0? rect.right : rect.left) - margin); }\n if (name === 'bottom') { return page.y > ((height >= 0? rect.bottom: rect.top ) - margin); }\n }\n\n // the remaining checks require an element\n if (!utils.is.element(element)) { return false; }\n\n return utils.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 : utils.dom.matchesUpTo(element, value, interactableElement);\n}\n\nfunction start ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n return;\n }\n\n const startRect = interaction.target.getRect(interaction.element);\n const resizeOptions = interaction.target.options.resize;\n\n /*\n * When using the `resizable.square` or `resizable.preserveAspectRatio` options, resizing from one edge\n * will affect another. E.g. with `resizable.square`, resizing to make the right edge larger will make\n * the bottom edge larger by the same amount. We call these 'linked' edges. Any linked edges will depend\n * on the active edges and the edge being interacted with.\n */\n if (resizeOptions.square || resizeOptions.preserveAspectRatio) {\n const linkedEdges = utils.extend({}, interaction.prepared.edges);\n\n linkedEdges.top = linkedEdges.top || (linkedEdges.left && !linkedEdges.bottom);\n linkedEdges.left = linkedEdges.left || (linkedEdges.top && !linkedEdges.right );\n linkedEdges.bottom = linkedEdges.bottom || (linkedEdges.right && !linkedEdges.top );\n linkedEdges.right = linkedEdges.right || (linkedEdges.bottom && !linkedEdges.left );\n\n interaction.prepared._linkedEdges = linkedEdges;\n }\n else {\n interaction.prepared._linkedEdges = null;\n }\n\n // if using `resizable.preserveAspectRatio` option, record aspect ratio at the start of the resize\n if (resizeOptions.preserveAspectRatio) {\n interaction.resizeStartAspectRatio = startRect.width / startRect.height;\n }\n\n interaction.resizeRects = {\n start : startRect,\n current : utils.extend({}, startRect),\n inverted : utils.extend({}, startRect),\n previous : utils.extend({}, startRect),\n delta : {\n left: 0, right : 0, width : 0,\n top : 0, bottom: 0, height: 0,\n },\n };\n\n iEvent.rect = interaction.resizeRects.inverted;\n iEvent.deltaRect = interaction.resizeRects.delta;\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return; }\n\n const resizeOptions = interaction.target.options.resize;\n const invert = resizeOptions.invert;\n const invertible = invert === 'reposition' || invert === 'negate';\n\n let edges = interaction.prepared.edges;\n\n // eslint-disable-next-line no-shadow\n const start = interaction.resizeRects.start;\n const current = interaction.resizeRects.current;\n const inverted = interaction.resizeRects.inverted;\n const deltaRect = interaction.resizeRects.delta;\n const previous = utils.extend(interaction.resizeRects.previous, inverted);\n const originalEdges = edges;\n\n const eventDelta = utils.extend({}, iEvent.delta);\n\n if (resizeOptions.preserveAspectRatio || resizeOptions.square) {\n // `resize.preserveAspectRatio` takes precedence over `resize.square`\n const startAspectRatio = resizeOptions.preserveAspectRatio\n ? interaction.resizeStartAspectRatio\n : 1;\n\n edges = interaction.prepared._linkedEdges;\n\n if ((originalEdges.left && originalEdges.bottom)\n || (originalEdges.right && originalEdges.top)) {\n eventDelta.y = -eventDelta.x / startAspectRatio;\n }\n else if (originalEdges.left || originalEdges.right ) { eventDelta.y = eventDelta.x / startAspectRatio; }\n else if (originalEdges.top || originalEdges.bottom) { eventDelta.x = eventDelta.y * startAspectRatio; }\n }\n\n // update the 'current' rect without modifications\n if (edges.top ) { current.top += eventDelta.y; }\n if (edges.bottom) { current.bottom += eventDelta.y; }\n if (edges.left ) { current.left += eventDelta.x; }\n if (edges.right ) { current.right += eventDelta.x; }\n\n if (invertible) {\n // if invertible, copy the current rect\n utils.extend(inverted, current);\n\n if (invert === 'reposition') {\n // swap edge values if necessary to keep width/height positive\n let swap;\n\n if (inverted.top > inverted.bottom) {\n swap = inverted.top;\n\n inverted.top = inverted.bottom;\n inverted.bottom = swap;\n }\n if (inverted.left > inverted.right) {\n swap = inverted.left;\n\n inverted.left = inverted.right;\n inverted.right = swap;\n }\n }\n }\n else {\n // if not invertible, restrict to minimum of 0x0 rect\n inverted.top = Math.min(current.top, start.bottom);\n inverted.bottom = Math.max(current.bottom, start.top);\n inverted.left = Math.min(current.left, start.right);\n inverted.right = Math.max(current.right, start.left);\n }\n\n inverted.width = inverted.right - inverted.left;\n inverted.height = inverted.bottom - inverted.top ;\n\n for (const edge in inverted) {\n deltaRect[edge] = inverted[edge] - previous[edge];\n }\n\n iEvent.edges = interaction.prepared.edges;\n iEvent.rect = inverted;\n iEvent.deltaRect = deltaRect;\n}\n\nfunction updateEventAxes ({ interaction, iEvent, action }) {\n if (action !== 'resize' || !interaction.resizeAxes) { return; }\n\n const options = interaction.target.options;\n\n if (options.resize.square) {\n if (interaction.resizeAxes === 'y') {\n iEvent.delta.x = iEvent.delta.y;\n }\n else {\n iEvent.delta.y = iEvent.delta.x;\n }\n iEvent.axes = 'xy';\n }\n else {\n iEvent.axes = interaction.resizeAxes;\n\n if (interaction.resizeAxes === 'x') {\n iEvent.delta.y = 0;\n }\n else if (interaction.resizeAxes === 'y') {\n iEvent.delta.x = 0;\n }\n }\n}\n\nexport default { install };\n","import gesture from './gesture';\nimport resize from './resize';\nimport drag from './drag';\nimport drop from './drop';\n\nfunction install (scope) {\n gesture.install(scope);\n resize.install(scope);\n drag.install(scope);\n drop.install(scope);\n}\n\nexport {\n gesture,\n resize,\n drag,\n drop,\n install,\n};\n","import raf from '@interactjs/utils/raf';\nimport { getWindow } from '@interactjs/utils/window';\nimport * as is from '@interactjs/utils/is';\nimport * as domUtils from '@interactjs/utils/domUtils';\nimport { getStringOptionResult } from '@interactjs/utils/rect';\n\nfunction install (scope) {\n const {\n interactions,\n defaults,\n actions,\n } = scope;\n\n const autoScroll = scope.autoScroll = {\n defaults: {\n enabled : false,\n container: null, // the item that is scrolled (Window or HTMLElement)\n margin : 60,\n speed : 300, // the scroll speed in pixels per second\n },\n\n interaction: null,\n i: null, // the handle returned by window.setInterval\n x: 0, y: 0, // Direction each pulse is to scroll in\n\n isScrolling: false,\n prevTime: 0,\n\n start: function (interaction) {\n autoScroll.isScrolling = true;\n raf.cancel(autoScroll.i);\n\n interaction.autoScroll = autoScroll;\n autoScroll.interaction = interaction;\n autoScroll.prevTime = new Date().getTime();\n autoScroll.i = raf.request(autoScroll.scroll);\n },\n\n stop: function () {\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: function () {\n const { interaction } = autoScroll;\n const { target: interactable, element } = interaction;\n const options = interactable.options[autoScroll.interaction.prepared.name].autoScroll;\n const container = getContainer(options.container, interactable, element);\n const now = new Date().getTime();\n // change in time in seconds\n const dt = (now - autoScroll.prevTime) / 1000;\n // displacement\n const s = options.speed * dt;\n\n if (s >= 1) {\n const scrollBy = {\n x: autoScroll.x * s,\n y: autoScroll.y * s,\n };\n\n if (scrollBy.x || scrollBy.y) {\n const prevScroll = getScroll(container);\n\n if (is.window(container)) {\n container.scrollBy(scrollBy.x, scrollBy.y);\n }\n else if (container) {\n container.scrollLeft += scrollBy.x;\n container.scrollTop += scrollBy.y;\n }\n\n const curScroll = getScroll(container);\n const delta = {\n x: curScroll.x - prevScroll.x,\n y: curScroll.y - prevScroll.y,\n };\n\n if (delta.x || delta.y) {\n interactable.fire({\n type: 'autoscroll',\n target: element,\n interactable,\n delta,\n interaction,\n container,\n });\n }\n }\n\n autoScroll.prevTime = now;\n }\n\n if (autoScroll.isScrolling) {\n raf.cancel(autoScroll.i);\n autoScroll.i = raf.request(autoScroll.scroll);\n }\n },\n check: function (interactable, actionName) {\n const options = interactable.options;\n\n return options[actionName].autoScroll && options[actionName].autoScroll.enabled;\n },\n onInteractionMove: function ({ interaction, pointer }) {\n if (!(interaction.interacting()\n && autoScroll.check(interaction.target, interaction.prepared.name))) {\n return;\n }\n\n if (interaction.simulation) {\n autoScroll.x = autoScroll.y = 0;\n return;\n }\n\n let top;\n let right;\n let bottom;\n let left;\n\n const { target: interactable, element } = interaction;\n const options = interactable.options[interaction.prepared.name].autoScroll;\n const container = getContainer(options.container, interactable, element);\n\n if (is.window(container)) {\n left = pointer.clientX < autoScroll.margin;\n top = pointer.clientY < autoScroll.margin;\n right = pointer.clientX > container.innerWidth - autoScroll.margin;\n bottom = pointer.clientY > container.innerHeight - autoScroll.margin;\n }\n else {\n const rect = domUtils.getElementClientRect(container);\n\n left = pointer.clientX < rect.left + autoScroll.margin;\n top = pointer.clientY < rect.top + autoScroll.margin;\n right = pointer.clientX > rect.right - autoScroll.margin;\n bottom = pointer.clientY > rect.bottom - autoScroll.margin;\n }\n\n autoScroll.x = (right ? 1: left? -1: 0);\n autoScroll.y = (bottom? 1: top? -1: 0);\n\n if (!autoScroll.isScrolling) {\n // set the autoScroll properties to those of the target\n autoScroll.margin = options.margin;\n autoScroll.speed = options.speed;\n\n autoScroll.start(interaction);\n }\n },\n };\n\n interactions.signals.on('new', function (interaction) {\n interaction.autoScroll = null;\n });\n\n interactions.signals.on('stop', autoScroll.stop);\n\n interactions.signals.on('action-move', autoScroll.onInteractionMove);\n\n actions.eventTypes.push('autoscroll');\n defaults.perAction.autoScroll = autoScroll.defaults;\n}\n\nexport function getContainer (value, interactable, element) {\n return (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element);\n}\n\nexport function getScroll (container) {\n if (is.window(container)) { container = window.document.body; }\n\n return { x: container.scrollLeft, y: container.scrollTop };\n}\n\nexport function getScrollSize (container) {\n if (is.window(container)) { container = window.document.body; }\n\n return { x: container.scrollWidth, y: container.scrollHeight };\n}\n\nexport function getScrollSizeDelta ({ interaction, element }, func) {\n const scrollOptions = interaction && interaction.target.options[interaction.prepared.name].autoScroll;\n\n if (!scrollOptions || !scrollOptions.enabled) {\n func();\n return { x: 0, y: 0 };\n }\n\n const scrollContainer = getContainer(\n scrollOptions.container,\n interaction.target,\n element\n );\n\n const prevSize = getScroll(scrollContainer);\n func();\n const curSize = getScroll(scrollContainer);\n\n return {\n x: curSize.x - prevSize.x,\n y: curSize.y - prevSize.y,\n };\n}\n\nexport default { install };\n","import * as is from '@interactjs/utils/is';\nimport * as domUtils from '@interactjs/utils/domUtils';\n\nimport { warnOnce } from '@interactjs/utils';\n\nfunction install (scope) {\n const {\n /** @lends Interactable */\n Interactable,\n actions,\n } = scope;\n\n Interactable.prototype.getAction = function (pointer, event, interaction, element) {\n const action = this.defaultActionChecker(pointer, event, interaction, element);\n\n if (this.options.actionChecker) {\n return this.options.actionChecker(pointer, event, action, this, element, interaction);\n }\n\n return action;\n };\n\n /**\n * ```js\n * interact(element, { ignoreFrom: document.getElementById('no-action') });\n * // or\n * interact(element).ignoreFrom('input, textarea, a');\n * ```\n * @deprecated\n * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n * of it's parents match the given CSS selector or Element, no\n * drag/resize/gesture is started.\n *\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to not ignore any elements\n * @return {string | Element | object} The current ignoreFrom value or this\n * Interactable\n */\n Interactable.prototype.ignoreFrom = warnOnce(function (newValue) {\n return this._backCompatOption('ignoreFrom', newValue);\n }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).');\n\n /**\n * ```js\n *\n * @deprecated\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to allow from any element\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */\n Interactable.prototype.allowFrom = warnOnce(function (newValue) {\n return this._backCompatOption('allowFrom', newValue);\n }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).');\n\n Interactable.prototype.testIgnore = function (ignoreFrom, interactableElement, element) {\n if (!ignoreFrom || !is.element(element)) { return false; }\n\n if (is.string(ignoreFrom)) {\n return domUtils.matchesUpTo(element, ignoreFrom, interactableElement);\n }\n else if (is.element(ignoreFrom)) {\n return domUtils.nodeContains(ignoreFrom, element);\n }\n\n return false;\n };\n\n Interactable.prototype.testAllow = function (allowFrom, interactableElement, element) {\n if (!allowFrom) { return true; }\n\n if (!is.element(element)) { return false; }\n\n if (is.string(allowFrom)) {\n return domUtils.matchesUpTo(element, allowFrom, interactableElement);\n }\n else if (is.element(allowFrom)) {\n return domUtils.nodeContains(allowFrom, element);\n }\n\n return false;\n };\n\n Interactable.prototype.testIgnoreAllow = function (options, interactableElement, eventTarget) {\n return (!this.testIgnore(options.ignoreFrom, interactableElement, eventTarget)\n && this.testAllow(options.allowFrom, interactableElement, eventTarget));\n };\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 * Gets 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 = function (checker) {\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\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 = function (newValue) {\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\n Interactable.prototype.defaultActionChecker = function (pointer, event, interaction, element) {\n const rect = this.getRect(element);\n const buttons = event.buttons || ({\n 0: 1,\n 1: 4,\n 3: 8,\n 4: 16,\n })[event.button];\n let action = null;\n\n for (const actionName of actions.names) {\n // check mouseButton setting if the pointer is down\n if (interaction.pointerIsDown\n && /mouse|pointer/.test(interaction.pointerType)\n && (buttons & this.options[actionName].mouseButtons) === 0) {\n continue;\n }\n\n action = actions[actionName].checker(pointer, event, this, element, interaction, rect);\n\n if (action) {\n return action;\n }\n }\n };\n}\n\nexport default { install };\n","import * as utils from '@interactjs/utils';\nimport InteractableMethods from './InteractableMethods';\n\nfunction install (scope) {\n const {\n interact,\n interactions,\n defaults,\n Signals,\n } = scope;\n\n interact.use(InteractableMethods);\n\n // set cursor style on mousedown\n interactions.signals.on('down', function ({ interaction, pointer, event, eventTarget }) {\n if (interaction.interacting()) { return; }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope);\n prepare(interaction, actionInfo, scope);\n });\n\n // set cursor style on mousemove\n interactions.signals.on('move', function ({ interaction, pointer, event, eventTarget }) {\n if (interaction.pointerType !== 'mouse'\n || interaction.pointerIsDown\n || interaction.interacting()) { return; }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope);\n prepare(interaction, actionInfo, scope);\n });\n\n interactions.signals.on('move', function (arg) {\n const { interaction, event } = arg;\n\n if (!interaction.pointerIsDown\n || interaction.interacting()\n || !interaction.pointerWasMoved\n || !interaction.prepared.name) {\n return;\n }\n\n scope.autoStart.signals.fire('before-start', arg);\n\n const target = interaction.target;\n\n if (interaction.prepared.name && target) {\n // check manualStart and interaction limit\n if (target.options[interaction.prepared.name].manualStart\n || !withinInteractionLimit(target, interaction.element, interaction.prepared, scope)) {\n interaction.stop(event);\n }\n else {\n interaction.start(interaction.prepared, target, interaction.element);\n }\n }\n });\n\n interactions.signals.on('stop', function ({ interaction }) {\n const target = interaction.target;\n\n if (target && target.options.styleCursor) {\n setCursor(interaction.element, '', scope);\n }\n });\n\n interact.maxInteractions = maxInteractions;\n\n defaults.base.actionChecker = null;\n defaults.base.styleCursor = true;\n\n utils.extend(defaults.perAction, {\n manualStart: false,\n max: Infinity,\n maxPerElement: 1,\n allowFrom: null,\n ignoreFrom: null,\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons: 1,\n });\n\n /**\n * Returns or sets the maximum number of concurrent interactions allowed. By\n * default only 1 interaction is allowed at a time (for backwards\n * compatibility). To allow multiple interactions on the same Interactables and\n * elements, you need to enable it in the draggable, resizable and gesturable\n * `'max'` and `'maxPerElement'` options.\n *\n * @alias module:interact.maxInteractions\n *\n * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n */\n interact.maxInteractions = newValue => maxInteractions(newValue, scope);\n\n scope.autoStart = {\n // Allow this many interactions to happen simultaneously\n maxInteractions: Infinity,\n withinInteractionLimit,\n cursorElement: null,\n signals: new Signals(),\n };\n}\n\n// Check if the current target supports the action.\n// If so, return the validated action. Otherwise, return null\nfunction validateAction (action, interactable, element, eventTarget, scope) {\n if (utils.is.object(action)\n && interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget)\n && interactable.options[action.name].enabled\n && withinInteractionLimit(interactable, element, action, scope)) {\n return action;\n }\n\n return null;\n}\n\nfunction validateSelector (interaction, pointer, event, matches, matchElements, eventTarget, scope) {\n for (let i = 0, len = matches.length; i < len; i++) {\n const match = matches[i];\n const matchElement = matchElements[i];\n const action = validateAction(\n match.getAction(pointer, event, interaction, matchElement),\n match,\n matchElement,\n eventTarget,\n scope);\n\n if (action) {\n return {\n action,\n target: match,\n element: matchElement,\n };\n }\n }\n\n return {};\n}\n\nfunction getActionInfo (interaction, pointer, event, eventTarget, scope) {\n let matches = [];\n let matchElements = [];\n\n let element = eventTarget;\n\n function pushMatches (interactable) {\n matches.push(interactable);\n matchElements.push(element);\n }\n\n while (utils.is.element(element)) {\n matches = [];\n matchElements = [];\n\n scope.interactables.forEachMatch(element, pushMatches);\n\n const actionInfo = validateSelector(interaction, pointer, event, matches, matchElements, eventTarget, scope);\n\n if (actionInfo.action\n && !actionInfo.target.options[actionInfo.action.name].manualStart) {\n return actionInfo;\n }\n\n element = utils.dom.parentNode(element);\n }\n\n return {};\n}\n\nfunction prepare (interaction, { action, target, element }, scope) {\n action = action || {};\n\n if (interaction.target && interaction.target.options.styleCursor) {\n setCursor(interaction.element, '', scope);\n }\n\n interaction.target = target;\n interaction.element = element;\n utils.copyAction(interaction.prepared, action);\n\n if (target && target.options.styleCursor) {\n const cursor = action? scope.actions[action.name].getCursor(action) : '';\n setCursor(interaction.element, cursor, scope);\n }\n\n scope.autoStart.signals.fire('prepared', { interaction: interaction });\n}\n\nfunction withinInteractionLimit (interactable, element, action, scope) {\n const options = interactable.options;\n const maxActions = options[action.name].max;\n const maxPerElement = options[action.name].maxPerElement;\n const autoStartMax = scope.autoStart.maxInteractions;\n let activeInteractions = 0;\n let targetCount = 0;\n let targetElementCount = 0;\n\n // no actions if any of these values == 0\n if (!(maxActions && maxPerElement && autoStartMax)) { return; }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name;\n\n if (!interaction.interacting()) { continue; }\n\n activeInteractions++;\n\n if (activeInteractions >= autoStartMax) {\n return false;\n }\n\n if (interaction.target !== interactable) { continue; }\n\n targetCount += (otherAction === action.name)|0;\n\n if (targetCount >= maxActions) {\n return false;\n }\n\n if (interaction.element === element) {\n targetElementCount++;\n\n if (otherAction === action.name && targetElementCount >= maxPerElement) {\n return false;\n }\n }\n }\n\n return autoStartMax > 0;\n}\n\nfunction maxInteractions (newValue, scope) {\n if (utils.is.number(newValue)) {\n scope.autoStart.maxInteractions = newValue;\n\n return this;\n }\n\n return scope.autoStart.maxInteractions;\n}\n\nfunction setCursor (element, cursor, scope) {\n if (scope.autoStart.cursorElement) {\n scope.autoStart.cursorElement.style.cursor = '';\n }\n\n element.ownerDocument.documentElement.style.cursor = cursor;\n element.style.cursor = cursor;\n scope.autoStart.cursorElement = cursor ? element : null;\n}\n\nexport default {\n install,\n maxInteractions,\n withinInteractionLimit,\n validateAction,\n};\n","import * as is from '@interactjs/utils/is';\nimport autoStart from './base';\n\nimport { parentNode } from '@interactjs/utils/domUtils';\n\nfunction install (scope) {\n scope.autoStart.signals.on('before-start', function ({ interaction, eventTarget, dx, dy }) {\n if (interaction.prepared.name !== 'drag') { return; }\n\n // check if a drag is in the correct axis\n const absX = Math.abs(dx);\n const absY = Math.abs(dy);\n const targetOptions = interaction.target.options.drag;\n const startAxis = targetOptions.startAxis;\n const currentAxis = (absX > absY ? 'x' : absX < absY ? 'y' : 'xy');\n\n interaction.prepared.axis = targetOptions.lockAxis === 'start'\n ? currentAxis[0] // always lock to one axis even if currentAxis === 'xy'\n : targetOptions.lockAxis;\n\n // if the movement isn't in the startAxis of the interactable\n if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n // cancel the prepared action\n interaction.prepared.name = null;\n\n // then try to get a drag from another ineractable\n let element = eventTarget;\n\n const getDraggable = function (interactable) {\n if (interactable === interaction.target) { return; }\n\n const options = interaction.target.options.drag;\n\n if (!options.manualStart\n && interactable.testIgnoreAllow(options, element, eventTarget)) {\n\n const action = interactable.getAction(\n interaction.downPointer, interaction.downEvent, interaction, element);\n\n if (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.prepared.name = 'drag';\n interaction.target = interactable;\n interaction.element = element;\n break;\n }\n\n element = parentNode(element);\n }\n }\n });\n\n function checkStartAxis (startAxis, interactable) {\n if (!interactable) { return false; }\n\n const thisAxis = interactable.options.drag.startAxis;\n\n return (startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis);\n }\n}\n\nexport default { install };\n","function install (scope) {\n const {\n autoStart,\n interactions,\n defaults,\n } = scope;\n\n defaults.perAction.hold = 0;\n defaults.perAction.delay = 0;\n\n interactions.signals.on('new', function (interaction) {\n interaction.autoStartHoldTimer = null;\n });\n\n autoStart.signals.on('prepared', function ({ interaction }) {\n const hold = getHoldDuration(interaction);\n\n if (hold > 0) {\n interaction.autoStartHoldTimer = setTimeout(() => {\n interaction.start(interaction.prepared, interaction.target, interaction.element);\n }, hold);\n }\n });\n\n interactions.signals.on('move', function ({ interaction, duplicate }) {\n if (interaction.pointerWasMoved && !duplicate) {\n clearTimeout(interaction.autoStartHoldTimer);\n }\n });\n\n // prevent regular down->move autoStart\n autoStart.signals.on('before-start', function ({ interaction }) {\n const hold = getHoldDuration(interaction);\n\n if (hold > 0) {\n interaction.prepared.name = null;\n }\n });\n}\n\nfunction getHoldDuration (interaction) {\n const actionName = interaction.prepared && interaction.prepared.name;\n\n if (!actionName) { return null; }\n\n const options = interaction.target.options;\n\n return options[actionName].hold || options[actionName].delay;\n}\n\nexport default {\n install,\n getHoldDuration,\n};\n","import autoStart from './base';\nimport hold from './hold';\nimport dragAxis from './dragAxis';\n\nfunction install (scope) {\n autoStart.install(scope);\n hold.install(scope);\n dragAxis.install(scope);\n}\n\nexport {\n autoStart,\n hold,\n dragAxis,\n install,\n};\n","import * as is from '@interactjs/utils/is';\nimport events from '@interactjs/utils/events';\n\nimport { nodeContains, matchesSelector } from '@interactjs/utils/domUtils';\nimport { getWindow } from '@interactjs/utils/window';\n\nfunction preventDefault (interactable, newValue) {\n if (/^(always|never|auto)$/.test(newValue)) {\n interactable.options.preventDefault = newValue;\n return interactable;\n }\n\n if (is.bool(newValue)) {\n interactable.options.preventDefault = newValue? 'always' : 'never';\n return interactable;\n }\n\n return interactable.options.preventDefault;\n}\n\nfunction checkAndPreventDefault (interactable, scope, event) {\n const setting = interactable.options.preventDefault;\n\n if (setting === 'never') { return; }\n\n if (setting === 'always') {\n event.preventDefault();\n return;\n }\n\n // setting === 'auto'\n\n // if the browser supports passive event listeners and isn't running on iOS,\n // don't preventDefault of touch{start,move} events. CSS touch-action and\n // user-select should be used instead of calling event.preventDefault().\n if (events.supportsPassive && /^touch(start|move)$/.test(event.type)) {\n const doc = getWindow(event.target).document;\n const docOptions = scope.getDocOptions(doc);\n\n if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) {\n return;\n }\n }\n\n // don't preventDefault of pointerdown events\n if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) {\n return;\n }\n\n // don't preventDefault on editable elements\n if (is.element(event.target)\n && matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')) {\n return;\n }\n\n event.preventDefault();\n}\n\nfunction onInteractionEvent ({ interaction, event }) {\n if (interaction.target) {\n interaction.target.checkAndPreventDefault(event);\n }\n}\n\nexport function install (scope) {\n /** @lends Interactable */\n const Interactable = scope.Interactable;\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 = function (newValue) {\n return preventDefault(this, newValue);\n };\n\n Interactable.prototype.checkAndPreventDefault = function (event) {\n return checkAndPreventDefault(this, scope, event);\n };\n\n for (const eventSignal of ['down', 'move', 'up', 'cancel']) {\n scope.interactions.signals.on(eventSignal, onInteractionEvent);\n }\n\n // prevent native HTML5 drag on interact.js target elements\n scope.interactions.eventMap.dragstart = function preventNativeDrag (event) {\n for (const interaction of scope.interactions.list) {\n\n if (interaction.element\n && (interaction.element === event.target\n || nodeContains(interaction.element, event.target))) {\n\n interaction.target.checkAndPreventDefault(event);\n return;\n }\n }\n };\n}\n\nexport default { install };\n","import extend from '@interactjs/utils/extend';\n\nfunction install (scope) {\n const {\n interactions,\n } = scope;\n\n scope.defaults.perAction.modifiers = [];\n scope.modifiers = {};\n\n interactions.signals.on('new', function (interaction) {\n interaction.modifiers = {\n startOffset: { left: 0, right: 0, top: 0, bottom: 0 },\n offsets : {},\n states : null,\n result : null,\n };\n });\n\n interactions.signals.on('before-action-start' , arg =>\n start(arg, arg.interaction.coords.start.page, scope.modifiers));\n\n interactions.signals.on('action-resume', arg => {\n beforeMove(arg);\n start(arg, arg.interaction.coords.cur.page, scope.modifiers);\n });\n\n interactions.signals.on('before-action-move', beforeMove);\n interactions.signals.on('before-action-end', beforeEnd);\n\n interactions.signals.on('before-action-start', setCoords);\n interactions.signals.on('before-action-move', setCoords);\n\n interactions.signals.on('after-action-start', restoreCoords);\n interactions.signals.on('after-action-move', restoreCoords);\n interactions.signals.on('stop', stop);\n}\n\nfunction startAll (arg) {\n for (const state of arg.states) {\n if (state.methods.start) {\n arg.state = state;\n state.methods.start(arg);\n }\n }\n}\n\nfunction getRectOffset (rect, coords) {\n return rect\n ? {\n left : coords.x - rect.left,\n top : coords.y - rect.top,\n right : rect.right - coords.x,\n bottom: rect.bottom - coords.y,\n }\n : {\n left : 0,\n top : 0,\n right : 0,\n bottom: 0,\n };\n}\n\nfunction start ({ interaction, phase }, pageCoords, registeredModifiers) {\n const { target: interactable, element } = interaction;\n const modifierList = getModifierList(interaction, registeredModifiers);\n const states = prepareStates(modifierList);\n\n const rect = extend({}, interactable.getRect(element));\n\n if (!('width' in rect)) { rect.width = rect.right - rect.left; }\n if (!('height' in rect)) { rect.height = rect.bottom - rect.top ; }\n\n const startOffset = getRectOffset(rect, pageCoords);\n\n interaction.modifiers.startOffset = startOffset;\n interaction.modifiers.startDelta = { x: 0, y: 0 };\n\n const arg = {\n interaction,\n interactable,\n element,\n pageCoords,\n phase,\n rect,\n startOffset,\n states,\n preEnd: false,\n requireEndOnly: false,\n };\n\n interaction.modifiers.states = states;\n interaction.modifiers.result = null;\n startAll(arg);\n\n arg.pageCoords = extend({}, interaction.coords.start.page);\n\n const result = interaction.modifiers.result = setAll(arg);\n\n return result;\n}\n\nfunction setAll (arg) {\n const { interaction, phase, preEnd, requireEndOnly, rect, skipModifiers } = arg;\n\n const states = skipModifiers\n ? arg.states.slice(interaction.modifiers.skip)\n : arg.states;\n\n arg.coords = extend({}, arg.pageCoords);\n arg.rect = extend({}, rect);\n\n const result = {\n delta: { x: 0, y: 0 },\n coords: arg.coords,\n changed: true,\n };\n\n for (const state of states) {\n const { options } = state;\n\n if (!state.methods.set ||\n !shouldDo(options, preEnd, requireEndOnly, phase)) { continue; }\n\n arg.state = state;\n state.methods.set(arg);\n }\n\n result.delta.x = arg.coords.x - arg.pageCoords.x;\n result.delta.y = arg.coords.y - arg.pageCoords.y;\n\n const prevCoords = interaction.modifiers.result\n ? interaction.modifiers.result.coords\n : interaction.coords.prev.page;\n\n result.changed = (\n prevCoords.x !== result.coords.x ||\n prevCoords.y !== result.coords.y);\n\n return result;\n}\n\nfunction prepareStates (modifierList) {\n const states = [];\n\n for (let index = 0; index < modifierList.length; index++) {\n const { options, methods } = modifierList[index];\n\n if (options && options.enabled === false) { continue; }\n\n const state = {\n options,\n methods,\n index,\n };\n\n states.push(state);\n }\n\n return states;\n}\n\nfunction beforeMove ({ interaction, phase, preEnd, skipModifiers }) {\n const { target: interactable, element } = interaction;\n const modifierResult = setAll(\n {\n interaction,\n interactable,\n element,\n preEnd,\n phase,\n pageCoords: interaction.coords.cur.page,\n rect: interactable.getRect(element),\n states: interaction.modifiers.states,\n requireEndOnly: false,\n skipModifiers,\n });\n\n interaction.modifiers.result = modifierResult;\n\n // don't fire an action move if a modifier would keep the event in the same\n // cordinates as before\n if (!modifierResult.changed && interaction.interacting()) {\n return false;\n }\n}\n\nfunction beforeEnd (arg) {\n const { interaction, event, noPreEnd } = arg;\n const states = interaction.modifiers.states;\n\n if (noPreEnd || !states || !states.length) {\n return;\n }\n\n let didPreEnd = false;\n\n for (const state of states) {\n arg.state = state;\n const { options, methods } = state;\n\n const endResult = methods.beforeEnd && methods.beforeEnd(arg);\n\n if (endResult === false) {\n return false;\n }\n\n // if the endOnly option is true for any modifier\n if (!didPreEnd && shouldDo(options, true, true)) {\n // fire a move event at the modified coordinates\n interaction.move({ event, preEnd: true });\n didPreEnd = true;\n }\n }\n}\n\nfunction stop (arg) {\n const { interaction } = arg;\n const states = interaction.modifiers.states;\n\n if (!states || !states.length) {\n return;\n }\n\n const modifierArg = extend({\n states,\n interactable: interaction.target,\n element: interaction.element,\n }, arg);\n\n\n restoreCoords(arg);\n\n for (const state of states) {\n modifierArg.state = state;\n\n if (state.methods.stop) { state.methods.stop(modifierArg); }\n }\n\n arg.interaction.modifiers.states = null;\n}\n\nfunction setCoords (arg) {\n const { interaction, phase } = arg;\n const curCoords = arg.curCoords || interaction.coords.cur;\n const startCoords = arg.startCoords || interaction.coords.start;\n const { result, startDelta } = interaction.modifiers;\n const curDelta = result.delta;\n\n if (phase === 'start') {\n extend(interaction.modifiers.startDelta, result.delta);\n }\n\n for (const [coordsSet, delta] of [[startCoords, startDelta], [curCoords, curDelta]]) {\n coordsSet.page.x += delta.x;\n coordsSet.page.y += delta.y;\n coordsSet.client.x += delta.x;\n coordsSet.client.y += delta.y;\n }\n}\n\nfunction restoreCoords ({ interaction: { coords, modifiers } }) {\n const { startDelta, result: { delta: curDelta } } = modifiers;\n\n for (const [coordsSet, delta] of [[coords.start, startDelta], [coords.cur, curDelta]]) {\n coordsSet.page.x -= delta.x;\n coordsSet.page.y -= delta.y;\n coordsSet.client.x -= delta.x;\n coordsSet.client.y -= delta.y;\n }\n\n}\n\nfunction getModifierList (interaction, registeredModifiers) {\n const actionOptions = interaction.target.options[interaction.prepared.name];\n const actionModifiers = actionOptions.modifiers;\n\n if (actionModifiers && actionModifiers.length) {\n return actionModifiers.map(modifier => {\n if (!modifier.methods && modifier.type) {\n return registeredModifiers[modifier.type](modifier);\n }\n\n return modifier;\n });\n }\n\n return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize']\n .map(type => {\n const options = actionOptions[type];\n\n return options && options.enabled && {\n options,\n methods: options._methods,\n };\n })\n .filter(m => !!m);\n}\n\nfunction shouldDo (options, preEnd, requireEndOnly, phase) {\n return options\n ? options.enabled !== false &&\n (preEnd || !options.endOnly) &&\n (!requireEndOnly || options.endOnly) &&\n (options.setStart || phase !== 'start')\n : !requireEndOnly;\n}\n\nfunction makeModifier (module, 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 => {\n options = options || {};\n\n // add missing defaults to options\n options.enabled = options.enabled !== false;\n\n for (const prop in defaults) {\n if (!(prop in options)) {\n options[prop] = defaults[prop];\n }\n }\n\n return { options, methods };\n };\n\n if (typeof name === 'string') {\n Object.defineProperty(\n modifier,\n 'name',\n { value: name });\n\n // for backwrads compatibility\n modifier._defaults = defaults;\n modifier._methods = methods;\n }\n\n return modifier;\n}\n\nexport default {\n install,\n startAll,\n setAll,\n prepareStates,\n start,\n beforeMove,\n beforeEnd,\n stop,\n shouldDo,\n getModifierList,\n getRectOffset,\n makeModifier,\n};\n","import modifiers from '@interactjs/modifiers/base';\nimport * as utils from '@interactjs/utils';\nimport raf from '@interactjs/utils/raf';\n\nfunction install (scope) {\n const {\n interactions,\n defaults,\n } = scope;\n\n interactions.signals.on('new', function (interaction) {\n interaction.inertia = {\n active : false,\n smoothEnd : false,\n allowResume: false,\n\n startEvent: null,\n upCoords : {},\n\n xe: 0, ye: 0,\n sx: 0, sy: 0,\n\n t0: 0,\n vx0: 0, vys: 0,\n duration: 0,\n\n lambda_v0: 0,\n one_ve_v0: 0,\n i : null,\n };\n });\n\n interactions.signals.on('before-action-end', arg => release(arg, scope));\n interactions.signals.on('down' , arg => resume (arg, scope));\n interactions.signals.on('stop' , arg => stop (arg, scope));\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\nfunction resume ({ interaction, event, pointer, eventTarget }, scope) {\n const state = interaction.inertia;\n\n // Check if the down event hits the current inertia target\n if (state.active) {\n let element = eventTarget;\n\n // climb up the DOM tree from the event target\n while (utils.is.element(element)) {\n\n // if interaction element is the current inertia target element\n if (element === interaction.element) {\n // stop inertia\n raf.cancel(state.i);\n state.active = false;\n interaction.simulation = null;\n\n // update pointers to the down event's coordinates\n interaction.updatePointer(pointer, event, eventTarget, true);\n utils.pointer.setCoords(\n interaction.coords.cur,\n interaction.pointers.map(p => p.pointer)\n );\n\n // fire appropriate signals\n const signalArg = {\n interaction,\n };\n\n scope.interactions.signals.fire('action-resume', signalArg);\n\n // fire a reume event\n const resumeEvent = new scope.InteractEvent(\n interaction, event, interaction.prepared.name, 'resume', interaction.element);\n\n interaction._fireEvent(resumeEvent);\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur);\n break;\n }\n\n element = utils.dom.parentNode(element);\n }\n }\n}\n\nfunction release ({ interaction, event, noPreEnd }, scope) {\n const state = interaction.inertia;\n\n if (!interaction.interacting() ||\n (interaction.simulation && interaction.simulation.active) ||\n noPreEnd) {\n return;\n }\n\n const options = getOptions(interaction);\n\n const now = new Date().getTime();\n const { client: velocityClient } = interaction.coords.velocity;\n const pointerSpeed = utils.hypot(velocityClient.x, velocityClient.y);\n\n let smoothEnd = false;\n let modifierResult;\n\n // check if inertia should be started\n const inertiaPossible = (options && options.enabled\n && interaction.prepared.name !== 'gesture'\n && event !== state.startEvent);\n\n const inertia = (inertiaPossible\n && (now - interaction.coords.cur.timeStamp) < 50\n && pointerSpeed > options.minSpeed\n && pointerSpeed > options.endSpeed);\n\n const modifierArg = {\n interaction,\n pageCoords: utils.extend({}, interaction.coords.cur.page),\n states: inertiaPossible && interaction.modifiers.states.map(\n modifierStatus => utils.extend({}, modifierStatus)\n ),\n preEnd: true,\n requireEndOnly: true,\n };\n\n // smoothEnd\n if (inertiaPossible && !inertia) {\n modifierResult = modifiers.setAll(modifierArg);\n\n if (modifierResult.shouldMove) {\n smoothEnd = true;\n }\n }\n\n if (!(inertia || smoothEnd)) { return; }\n\n utils.pointer.copyCoords(state.upCoords, interaction.coords.cur);\n\n interaction.pointers[0].pointer = state.startEvent = new scope.InteractEvent(\n interaction, event, interaction.prepared.name, 'inertiastart', interaction.element);\n\n state.t0 = now;\n\n state.active = true;\n state.allowResume = options.allowResume;\n interaction.simulation = state;\n\n interaction.target.fire(state.startEvent);\n\n if (inertia) {\n state.vx0 = interaction.coords.velocity.client.x;\n state.vy0 = interaction.coords.velocity.client.y;\n state.v0 = pointerSpeed;\n\n calcInertia(interaction, state);\n\n utils.extend(modifierArg.pageCoords, interaction.coords.cur.page);\n\n modifierArg.pageCoords.x += state.xe;\n modifierArg.pageCoords.y += state.ye;\n\n modifierResult = modifiers.setAll(modifierArg);\n\n state.modifiedXe += modifierResult.delta.x;\n state.modifiedYe += modifierResult.delta.y;\n\n state.i = raf.request(() => inertiaTick(interaction));\n }\n else {\n state.smoothEnd = true;\n state.xe = modifierResult.delta.x;\n state.ye = modifierResult.delta.y;\n\n state.sx = state.sy = 0;\n\n state.i = raf.request(() => smothEndTick(interaction));\n }\n\n return false;\n}\n\nfunction stop ({ interaction }) {\n const state = interaction.inertia;\n\n if (state.active) {\n raf.cancel(state.i);\n state.active = false;\n interaction.simulation = null;\n }\n}\n\nfunction calcInertia (interaction, state) {\n const options = getOptions(interaction);\n const lambda = options.resistance;\n const inertiaDur = -Math.log(options.endSpeed / state.v0) / lambda;\n\n state.x0 = interaction.prevEvent.page.x;\n state.y0 = interaction.prevEvent.page.y;\n state.t0 = state.startEvent.timeStamp / 1000;\n state.sx = state.sy = 0;\n\n state.modifiedXe = state.xe = (state.vx0 - inertiaDur) / lambda;\n state.modifiedYe = state.ye = (state.vy0 - inertiaDur) / lambda;\n state.te = inertiaDur;\n\n state.lambda_v0 = lambda / state.v0;\n state.one_ve_v0 = 1 - options.endSpeed / state.v0;\n}\n\nfunction inertiaTick (interaction) {\n updateInertiaCoords(interaction);\n utils.pointer.setCoordDeltas(interaction.coords.delta, interaction.coords.prev, interaction.coords.cur);\n utils.pointer.setCoordVelocity(interaction.coords.velocity, interaction.coords.delta);\n\n const state = interaction.inertia;\n const options = getOptions(interaction);\n const lambda = options.resistance;\n const t = new Date().getTime() / 1000 - state.t0;\n\n if (t < state.te) {\n\n const progress = 1 - (Math.exp(-lambda * t) - state.lambda_v0) / state.one_ve_v0;\n\n if (state.modifiedXe === state.xe && state.modifiedYe === state.ye) {\n state.sx = state.xe * progress;\n state.sy = state.ye * progress;\n }\n else {\n const quadPoint = utils.getQuadraticCurvePoint(\n 0, 0,\n state.xe, state.ye,\n state.modifiedXe, state.modifiedYe,\n progress);\n\n state.sx = quadPoint.x;\n state.sy = quadPoint.y;\n }\n\n interaction.move();\n\n state.i = raf.request(() => inertiaTick(interaction));\n }\n else {\n state.sx = state.modifiedXe;\n state.sy = state.modifiedYe;\n\n interaction.move();\n interaction.end(state.startEvent);\n state.active = false;\n interaction.simulation = null;\n }\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur);\n}\n\nfunction smothEndTick (interaction) {\n updateInertiaCoords(interaction);\n\n const state = interaction.inertia;\n const t = new Date().getTime() - state.t0;\n const { smoothEndDuration: duration } = getOptions(interaction);\n\n if (t < duration) {\n state.sx = utils.easeOutQuad(t, 0, state.xe, duration);\n state.sy = utils.easeOutQuad(t, 0, state.ye, duration);\n\n interaction.move();\n\n state.i = raf.request(() => smothEndTick(interaction));\n }\n else {\n state.sx = state.xe;\n state.sy = state.ye;\n\n interaction.move();\n interaction.end(state.startEvent);\n\n state.smoothEnd =\n state.active = false;\n interaction.simulation = null;\n }\n}\n\nfunction updateInertiaCoords (interaction) {\n const state = interaction.inertia;\n\n // return if inertia isn't running\n if (!state.active) { return; }\n\n const pageUp = state.upCoords.page;\n const clientUp = state.upCoords.client;\n\n utils.pointer.setCoords(interaction.coords.cur, [ {\n pageX : pageUp.x + state.sx,\n pageY : pageUp.y + state.sy,\n clientX: clientUp.x + state.sx,\n clientY: clientUp.y + state.sy,\n } ]);\n}\n\nfunction getOptions ({ target, prepared }) {\n return target && target.options && prepared.name && target.options[prepared.name].inertia;\n}\n\nexport default {\n install,\n calcInertia,\n inertiaTick,\n smothEndTick,\n updateInertiaCoords,\n};\n","import * as arr from '@interactjs/utils/arr';\nimport extend from '@interactjs/utils/extend';\nimport normalize from '@interactjs/utils/normalizeListeners';\n\nfunction fireUntilImmediateStopped (event, listeners) {\n for (const listener of listeners) {\n if (event.immediatePropagationStopped) { break; }\n\n listener(event);\n }\n}\n\nclass Eventable {\n\n constructor (options) {\n this.options = extend({}, options || {});\n this.types = {};\n this.propagationStopped = this.immediatePropagationStopped = false;\n }\n\n fire (event) {\n let listeners;\n const global = this.global;\n\n // Interactable#on() listeners\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, listener) {\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, listener) {\n const listeners = normalize(type, listener);\n\n for (type in listeners) {\n const eventList = this.types[type];\n\n if (!eventList || !eventList.length) { continue; }\n\n for (listener of listeners[type]) {\n const index = eventList.indexOf(listener);\n\n if (index !== -1) {\n eventList.splice(index, 1);\n }\n }\n }\n }\n}\n\nexport default Eventable;\n","import clone from '@interactjs/utils/clone';\nimport * as is from '@interactjs/utils/is';\nimport events from '@interactjs/utils/events';\nimport extend from '@interactjs/utils/extend';\nimport * as arr from '@interactjs/utils/arr';\nimport normalizeListeners from '@interactjs/utils/normalizeListeners';\nimport Eventable from './Eventable';\n\nimport {\n getElementRect,\n nodeContains,\n trySelector,\n} from '@interactjs/utils/domUtils';\nimport { getWindow } from '@interactjs/utils/window';\nimport browser from '@interactjs/utils/browser';\n\nclass Interactable {\n get _defaults () {\n return {\n base: {},\n perAction: {},\n };\n }\n\n /** */\n constructor (target, options, defaultContext) {\n this._actions = options.actions;\n this.target = target;\n this.events = new Eventable();\n this._context = options.context || defaultContext;\n this._win = getWindow(trySelector(target)? this._context : target);\n this._doc = this._win.document;\n\n this.set(options);\n }\n\n setOnEvents (actionName, phases) {\n if (is.func(phases.onstart) ) { this.on(`${actionName}start` , phases.onstart ); }\n if (is.func(phases.onmove) ) { this.on(`${actionName}move` , phases.onmove ); }\n if (is.func(phases.onend) ) { this.on(`${actionName}end` , phases.onend ); }\n if (is.func(phases.oninertiastart)) { this.on(`${actionName}inertiastart`, phases.oninertiastart); }\n\n return this;\n }\n\n updatePerActionListeners (actionName, prev, cur) {\n if (is.array(prev)) {\n this.off(actionName, prev);\n }\n\n if (is.array(cur)) {\n this.on(actionName, cur);\n }\n }\n\n setPerAction (actionName, options) {\n const defaults = this._defaults;\n\n // for all the default per-action options\n for (const optionName in options) {\n const actionOptions = this.options[actionName];\n const optionValue = options[optionName];\n const isArray = is.array(optionValue);\n\n // remove old event listeners and add new ones\n if (optionName === 'listeners') {\n this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue);\n }\n\n // if the option value is an array\n if (isArray) {\n actionOptions[optionName] = arr.from(optionValue);\n }\n // if the option value is an object\n else if (!isArray && is.plainObject(optionValue)) {\n // copy the object\n actionOptions[optionName] = extend(\n actionOptions[optionName] || {},\n clone(optionValue));\n\n // set anabled field to true if it exists in the defaults\n if (is.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) {\n actionOptions[optionName].enabled = optionValue.enabled === false? false : true;\n }\n }\n // if the option value is a boolean and the default is an object\n else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n actionOptions[optionName].enabled = optionValue;\n }\n // if it's anything else, do a plain assignment\n else {\n actionOptions[optionName] = optionValue;\n }\n }\n }\n\n /**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {object} The object's bounding rectangle.\n */\n getRect (element) {\n element = element || this.target;\n\n if (is.string(this.target) && !(is.element(element))) {\n element = this._context.querySelector(this.target);\n }\n\n return getElementRect(element);\n }\n\n /**\n * Returns or sets the function used to calculate the interactable's\n * element's rectangle\n *\n * @param {function} [checker] A function which returns this Interactable's\n * bounding rectangle. See {@link Interactable.getRect}\n * @return {function | object} The checker function or this Interactable\n */\n rectChecker (checker) {\n if (is.func(checker)) {\n this.getRect = checker;\n\n return this;\n }\n\n if (checker === null) {\n delete this.options.getRect;\n\n return this;\n }\n\n return this.getRect;\n }\n\n _backCompatOption (optionName, newValue) {\n if (trySelector(newValue) || is.object(newValue)) {\n this.options[optionName] = newValue;\n\n for (const action of this._actions.names) {\n this.options[action][optionName] = newValue;\n }\n\n return this;\n }\n\n return this.options[optionName];\n }\n\n /**\n * Gets or sets the origin of the Interactable's element. The x and y\n * of the origin will be subtracted from action event coordinates.\n *\n * @param {Element | object | string} [origin] An HTML or SVG Element whose\n * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\n * or any CSS selector\n *\n * @return {object} The current origin or this Interactable\n */\n origin (newValue) {\n return this._backCompatOption('origin', newValue);\n }\n\n /**\n * Returns or sets the mouse coordinate types used to calculate the\n * movement of the pointer.\n *\n * @param {string} [newValue] Use 'client' if you will be scrolling while\n * interacting; Use 'page' if you want autoScroll to work\n * @return {string | object} The current deltaSource or this Interactable\n */\n deltaSource (newValue) {\n if (newValue === 'page' || newValue === 'client') {\n this.options.deltaSource = newValue;\n\n return this;\n }\n\n return this.options.deltaSource;\n }\n\n /**\n * Gets the selector context Node of the Interactable. The default is\n * `window.document`.\n *\n * @return {Node} The context Node of this Interactable\n */\n context () {\n return this._context;\n }\n\n inContext (element) {\n return (this._context === element.ownerDocument\n || nodeContains(this._context, element));\n }\n\n /**\n * Calls listeners for the given InteractEvent type bound globally\n * and directly to this Interactable\n *\n * @param {InteractEvent} iEvent The InteractEvent object to be fired on this\n * Interactable\n * @return {Interactable} this Interactable\n */\n fire (iEvent) {\n this.events.fire(iEvent);\n\n return this;\n }\n\n _onOff (method, typeArg, listenerArg, options) {\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg;\n listenerArg = null;\n }\n\n const addRemove = method === 'on' ? 'add' : 'remove';\n const listeners = normalizeListeners(typeArg, listenerArg);\n\n for (let type in listeners) {\n if (type === 'wheel') { type = browser.wheelEvent; }\n\n for (const listener of listeners[type]) {\n // if it is an action event type\n if (arr.contains(this._actions.eventTypes, type)) {\n this.events[method](type, listener);\n }\n // delegated event\n else if (is.string(this.target)) {\n events[`${addRemove}Delegate`](this.target, this._context, type, listener, options);\n }\n // remove listener from this Interatable's element\n else {\n events[addRemove](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, listener, options) {\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, listener, options) {\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) {\n const defaults = this._defaults;\n\n if (!is.object(options)) {\n options = {};\n }\n\n this.options = clone(defaults.base);\n\n for (const actionName in this._actions.methodDict) {\n const methodName = this._actions.methodDict[actionName];\n\n this.options[actionName] = {};\n this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults[actionName]));\n\n this[methodName](options[actionName]);\n }\n\n for (const setting in options) {\n if (is.func(this[setting])) {\n this[setting](options[setting]);\n }\n }\n\n return this;\n }\n\n /**\n * Remove this interactable from the list of interactables and remove it's\n * action capabilities and event listeners\n *\n * @return {interact}\n */\n unset () {\n events.remove(this.target, 'all');\n\n if (is.string(this.target)) {\n // remove delegated events\n for (const type in events.delegatedEvents) {\n const delegated = events.delegatedEvents[type];\n\n if (delegated.selectors[0] === this.target\n && delegated.contexts[0] === this._context) {\n\n delegated.selectors.splice(0, 1);\n delegated.contexts .splice(0, 1);\n delegated.listeners.splice(0, 1);\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegated[type] = null;\n }\n }\n\n events.remove(this._context, type, events.delegateListener);\n events.remove(this._context, type, events.delegateUseCapture, true);\n }\n }\n else {\n events.remove(this, 'all');\n }\n }\n}\n\nexport default Interactable;\n","import InteractEvent from './InteractEvent';\nimport * as utils from '@interactjs/utils';\n\nclass Interaction {\n get pointerMoveTolerance () {\n return 1;\n }\n\n /** */\n constructor ({ pointerType, signals }) {\n this._signals = signals;\n\n this.target = null; // current interactable being interacted with\n this.element = null; // the target element of the interactable\n this.prepared = { // action that's ready to be fired on next move event\n name : null,\n axis : null,\n edges: null,\n };\n\n // keep track of added pointers\n this.pointers = [/* { id, pointer, event, target, downTime }*/];\n\n this.coords = {\n // Starting InteractEvent pointer coordinates\n start: utils.pointer.newCoords(),\n // Previous native pointer move event coordinates\n prev: utils.pointer.newCoords(),\n // current native pointer move event coordinates\n cur: utils.pointer.newCoords(),\n // Change in coordinates and time of the pointer\n delta: utils.pointer.newCoords(),\n // pointer velocity\n velocity: utils.pointer.newCoords(),\n };\n\n this.downEvent = null; // pointerdown/mousedown/touchstart event\n this.downPointer = {};\n\n this._latestPointer = {\n pointer: null,\n event: null,\n eventTarget : null,\n };\n\n this.prevEvent = null; // previous action event\n\n this.pointerIsDown = false;\n this.pointerWasMoved = false;\n this._interacting = false;\n this._ending = false;\n\n this.pointerType = pointerType;\n\n this._signals.fire('new', this);\n }\n\n pointerDown (pointer, event, eventTarget) {\n const pointerIndex = this.updatePointer(pointer, event, eventTarget, true);\n\n this._signals.fire('down', {\n pointer,\n event,\n eventTarget,\n pointerIndex,\n interaction: this,\n });\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable({\n * // disable the default drag start by down->move\n * manualStart: true\n * })\n * // start dragging after the user holds the pointer down\n * .on('hold', function (event) {\n * var interaction = event.interaction;\n *\n * if (!interaction.interacting()) {\n * interaction.start({ name: 'drag' },\n * event.interactable,\n * event.currentTarget);\n * }\n * });\n * ```\n *\n * Start an action with the given Interactable and Element as tartgets. The\n * action must be enabled for the target Interactable and an appropriate\n * number of pointers must be held down - 1 for drag/resize, 2 for gesture.\n *\n * Use it with `interactable.able({ manualStart: false })` to always\n * [start actions manually](https://github.com/taye/interact.js/issues/114)\n *\n * @param {object} action The action to be performed - drag, resize, etc.\n * @param {Interactable} target The Interactable to target\n * @param {Element} element The DOM Element to target\n * @return {object} interact\n */\n start (action, target, element) {\n if (this.interacting()\n || !this.pointerIsDown\n || this.pointers.length < (action.name === 'gesture'? 2 : 1)) {\n return;\n }\n\n utils.copyAction(this.prepared, action);\n\n this.target = target;\n this.element = element;\n this._interacting = this._doPhase({\n interaction: this,\n event: this.downEvent,\n phase: 'start',\n });\n }\n\n pointerMove (pointer, event, eventTarget) {\n if (!this.simulation) {\n this.updatePointer(pointer, event, eventTarget, false);\n utils.pointer.setCoords(this.coords.cur, this.pointers.map(p => p.pointer));\n }\n\n const duplicateMove = (this.coords.cur.page.x === this.coords.prev.page.x\n && this.coords.cur.page.y === this.coords.prev.page.y\n && this.coords.cur.client.x === this.coords.prev.client.x\n && this.coords.cur.client.y === this.coords.prev.client.y);\n\n let dx;\n let dy;\n\n // register movement greater than pointerMoveTolerance\n if (this.pointerIsDown && !this.pointerWasMoved) {\n dx = this.coords.cur.client.x - this.coords.start.client.x;\n dy = this.coords.cur.client.y - this.coords.start.client.y;\n\n this.pointerWasMoved = utils.hypot(dx, dy) > this.pointerMoveTolerance;\n }\n\n const signalArg = {\n pointer,\n pointerIndex: this.getPointerIndex(pointer),\n event,\n eventTarget,\n dx,\n dy,\n duplicate: duplicateMove,\n interaction: this,\n };\n\n if (!duplicateMove) {\n // set pointer coordinate, time changes and velocity\n utils.pointer.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur);\n utils.pointer.setCoordVelocity(this.coords.velocity, this.coords.delta);\n }\n\n this._signals.fire('move', signalArg);\n\n if (!duplicateMove) {\n // if interacting, fire an 'action-move' signal etc\n if (this.interacting()) {\n this.move(signalArg);\n }\n\n if (this.pointerWasMoved) {\n utils.pointer.copyCoords(this.coords.prev, this.coords.cur);\n }\n }\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('dragmove', function (event) {\n * if (someCondition) {\n * // change the snap settings\n * event.interactable.draggable({ snap: { targets: [] }});\n * // fire another move event with re-calculated snap\n * event.interaction.move();\n * }\n * });\n * ```\n *\n * Force a move of the current action at the same coordinates. Useful if\n * snap/restrict has been changed and you want a movement with the new\n * settings.\n */\n move (signalArg) {\n signalArg = utils.extend({\n pointer: this._latestPointer.pointer,\n event: this._latestPointer.event,\n eventTarget: this._latestPointer.eventTarget,\n interaction: this,\n noBefore: false,\n }, signalArg || {});\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, event, eventTarget, curEventTarget) {\n const pointerIndex = this.getPointerIndex(pointer);\n\n this._signals.fire(/cancel$/i.test(event.type)? 'cancel' : 'up', {\n pointer,\n pointerIndex,\n event,\n eventTarget,\n curEventTarget,\n interaction: this,\n });\n\n if (!this.simulation) {\n this.end(event);\n }\n\n this.pointerIsDown = false;\n this.removePointer(pointer, event);\n }\n\n documentBlur (event) {\n this.end(event);\n this._signals.fire('blur', { event, interaction: this });\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('move', function (event) {\n * if (event.pageX > 1000) {\n * // end the current action\n * event.interaction.end();\n * // stop all further listeners from being called\n * event.stopImmediatePropagation();\n * }\n * });\n * ```\n *\n * @param {PointerEvent} [event]\n */\n end (event) {\n this._ending = true;\n event = event || this._latestPointer.event;\n let endPhaseResult;\n\n if (this.interacting()) {\n endPhaseResult = this._doPhase({\n event,\n interaction: this,\n phase: 'end',\n });\n }\n\n this._ending = false;\n\n if (endPhaseResult === true) {\n this.stop();\n }\n }\n\n currentAction () {\n return this._interacting? this.prepared.name: null;\n }\n\n interacting () {\n return this._interacting;\n }\n\n /** */\n stop () {\n this._signals.fire('stop', { interaction: this });\n\n this.target = this.element = null;\n\n this._interacting = false;\n this.prepared.name = this.prevEvent = null;\n }\n\n getPointerIndex (pointer) {\n const pointerId = utils.pointer.getPointerId(pointer);\n\n // mouse and pen interactions may have only one pointer\n return (this.pointerType === 'mouse' || this.pointerType === 'pen')\n ? 0\n : utils.arr.findIndex(this.pointers, curPointer => curPointer.id === pointerId);\n }\n\n getPointerInfo (pointer) {\n return this.pointers[this.getPointerIndex(pointer)];\n }\n\n updatePointer (pointer, event, eventTarget, down) {\n const id = utils.pointer.getPointerId(pointer);\n let pointerIndex = this.getPointerIndex(pointer);\n let pointerInfo = this.pointers[pointerIndex];\n\n if (!pointerInfo) {\n pointerInfo = {\n id,\n pointer,\n event,\n downTime: null,\n downTarget: null,\n };\n\n pointerIndex = this.pointers.length;\n this.pointers.push(pointerInfo);\n }\n else {\n pointerInfo.pointer = pointer;\n }\n\n if (down) {\n this.pointerIsDown = true;\n\n if (!this.interacting()) {\n utils.pointer.setCoords(this.coords.start, this.pointers.map(p => p.pointer));\n\n utils.pointer.copyCoords(this.coords.cur , this.coords.start);\n utils.pointer.copyCoords(this.coords.prev, this.coords.start);\n utils.pointer.pointerExtend(this.downPointer, pointer);\n\n this.downEvent = event;\n pointerInfo.downTime = this.coords.cur.timeStamp;\n pointerInfo.downTarget = eventTarget;\n\n this.pointerWasMoved = false;\n }\n }\n\n this._updateLatestPointer(pointer, event, eventTarget);\n\n this._signals.fire('update-pointer', {\n pointer,\n event,\n eventTarget,\n down,\n pointerInfo,\n pointerIndex,\n interaction: this,\n });\n\n return pointerIndex;\n }\n\n removePointer (pointer, event) {\n const pointerIndex = this.getPointerIndex(pointer);\n\n if (pointerIndex === -1) { return; }\n\n const pointerInfo = this.pointers[pointerIndex];\n\n this._signals.fire('remove-pointer', {\n pointer,\n event,\n pointerIndex,\n pointerInfo,\n interaction: this,\n });\n\n this.pointers.splice(pointerIndex, 1);\n }\n\n _updateLatestPointer (pointer, event, eventTarget) {\n this._latestPointer.pointer = pointer;\n this._latestPointer.event = event;\n this._latestPointer.eventTarget = eventTarget;\n }\n\n _createPreparedEvent (event, phase, preEnd, type) {\n const actionName = this.prepared.name;\n\n return new InteractEvent(this, event, actionName, phase, this.element, null, preEnd, type);\n }\n\n _fireEvent (iEvent) {\n this.target.fire(iEvent);\n\n if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n this.prevEvent = iEvent;\n }\n }\n\n _doPhase (signalArg) {\n const { event, phase, preEnd, type } = signalArg;\n\n if (!signalArg.noBefore) {\n const beforeResult = this._signals.fire(`before-action-${phase}`, signalArg);\n\n if (beforeResult === false) {\n return false;\n }\n }\n\n const iEvent = signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type);\n\n this._signals.fire(`action-${phase}`, signalArg);\n\n this._fireEvent(iEvent);\n\n this._signals.fire(`after-action-${phase}`, signalArg);\n\n return true;\n }\n}\n\n/**\n * @alias Interaction.prototype.move\n */\nInteraction.prototype.doMove = utils.warnOnce(\n function (signalArg) {\n this.move(signalArg);\n },\n 'The interaction.doMove() method has been renamed to interaction.move()');\n\nexport default Interaction;\n","import * as utils from './index';\n\nconst finder = {\n methodOrder: [ 'simulationResume', 'mouseOrPen', 'hasPointer', 'idle' ],\n\n search: function (details) {\n for (const method of finder.methodOrder) {\n const interaction = finder[method](details);\n\n if (interaction) {\n return interaction;\n }\n }\n },\n\n // try to resume simulation with a new pointer\n simulationResume: function ({ pointerType, eventType, eventTarget, scope }) {\n if (!/down|start/i.test(eventType)) {\n return null;\n }\n\n for (const interaction of scope.interactions.list) {\n let element = eventTarget;\n\n if (interaction.simulation && interaction.simulation.allowResume\n && (interaction.pointerType === pointerType)) {\n while (element) {\n // if the element is the interaction element\n if (element === interaction.element) {\n return interaction;\n }\n element = utils.dom.parentNode(element);\n }\n }\n }\n\n return null;\n },\n\n // if it's a mouse or pen interaction\n mouseOrPen: function ({ pointerId, pointerType, eventType, scope }) {\n if (pointerType !== 'mouse' && pointerType !== 'pen') {\n return null;\n }\n\n let firstNonActive;\n\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType) {\n // if it's a down event, skip interactions with running simulations\n if (interaction.simulation && !hasPointerId(interaction, pointerId)) { continue; }\n\n // if the interaction is active, return it immediately\n if (interaction.interacting()) {\n return interaction;\n }\n // otherwise save it and look for another active interaction\n else if (!firstNonActive) {\n firstNonActive = interaction;\n }\n }\n }\n\n // if no active mouse interaction was found use the first inactive mouse\n // interaction\n if (firstNonActive) {\n return firstNonActive;\n }\n\n // find any mouse or pen interaction.\n // ignore the interaction if the eventType is a *down, and a simulation\n // is active\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) {\n return interaction;\n }\n }\n\n return null;\n },\n\n // get interaction that has this pointer\n hasPointer: function ({ pointerId, scope }) {\n for (const interaction of scope.interactions.list) {\n if (hasPointerId(interaction, pointerId)) {\n return interaction;\n }\n }\n },\n\n // get first idle interaction with a matching pointerType\n idle: function ({ pointerType, scope }) {\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.target;\n // don't add this pointer if there is a target interactable and it\n // isn't gesturable\n if (target && !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, pointerId) {\n return utils.arr.some(interaction.pointers, ({ id }) => id === pointerId);\n}\n\nexport default finder;\n","import InteractionBase from './Interaction';\nimport events from '@interactjs/utils/events';\nimport finder from '@interactjs/utils/interactionFinder';\nimport browser from '@interactjs/utils/browser';\nimport domObjects from '@interactjs/utils/domObjects';\nimport pointerUtils from '@interactjs/utils/pointerUtils';\nimport Signals from '@interactjs/utils/Signals';\n\nconst methodNames = [\n 'pointerDown', 'pointerMove', 'pointerUp',\n 'updatePointer', 'removePointer', 'windowBlur',\n];\n\nfunction install (scope) {\n const signals = new Signals();\n\n const listeners = {};\n\n for (const method of methodNames) {\n listeners[method] = doOnInteractions(method, scope);\n }\n\n const eventMap = { /* 'eventType': listenerFunc */ };\n const pEventTypes = browser.pEventTypes;\n\n if (domObjects.PointerEvent) {\n eventMap[pEventTypes.down ] = listeners.pointerDown;\n eventMap[pEventTypes.move ] = listeners.pointerMove;\n eventMap[pEventTypes.up ] = listeners.pointerUp;\n eventMap[pEventTypes.cancel] = listeners.pointerUp;\n }\n else {\n eventMap.mousedown = listeners.pointerDown;\n eventMap.mousemove = listeners.pointerMove;\n eventMap.mouseup = listeners.pointerUp;\n\n eventMap.touchstart = listeners.pointerDown;\n eventMap.touchmove = listeners.pointerMove;\n eventMap.touchend = listeners.pointerUp;\n eventMap.touchcancel = listeners.pointerUp;\n }\n\n eventMap.blur = event => {\n for (const interaction of scope.interactions.list) {\n interaction.documentBlur(event);\n }\n };\n\n scope.signals.on('add-document' , onDocSignal);\n scope.signals.on('remove-document', onDocSignal);\n\n // for ignoring browser's simulated mouse events\n scope.prevTouchTime = 0;\n\n scope.Interaction = class Interaction extends InteractionBase {\n get pointerMoveTolerance () {\n return scope.interactions.pointerMoveTolerance;\n }\n\n set pointerMoveTolerance (value) {\n scope.interactions.pointerMoveTolerance = value;\n }\n };\n scope.interactions = {\n signals,\n // all active and idle interactions\n list: [],\n new (options) {\n options.signals = signals;\n\n return new scope.Interaction(options);\n },\n listeners,\n eventMap,\n pointerMoveTolerance: 1,\n };\n\n scope.actions = {\n names: [],\n methodDict: {},\n eventTypes: [],\n };\n}\n\nfunction doOnInteractions (method, scope) {\n return (function (event) {\n const interactions = scope.interactions.list;\n\n const pointerType = pointerUtils.getPointerType(event);\n const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event);\n const matches = []; // [ [pointer, interaction], ...]\n\n if (browser.supportsTouch && /touch/.test(event.type)) {\n scope.prevTouchTime = new Date().getTime();\n\n for (const changedTouch of event.changedTouches) {\n const pointer = changedTouch;\n const pointerId = pointerUtils.getPointerId(pointer);\n const searchDetails = {\n pointer,\n pointerId,\n pointerType,\n eventType: event.type,\n eventTarget,\n curEventTarget,\n scope,\n };\n const interaction = getInteraction(searchDetails);\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ]);\n }\n }\n else {\n let invalidPointer = false;\n\n if (!browser.supportsPointerEvent && /mouse/.test(event.type)) {\n // ignore mouse events while touch interactions are active\n for (let i = 0; i < interactions.length && !invalidPointer; i++) {\n invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown;\n }\n\n // try to ignore mouse events that are simulated by the browser\n // after a touch event\n invalidPointer = invalidPointer\n || (new Date().getTime() - scope.prevTouchTime < 500)\n // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated\n || event.timeStamp === 0;\n }\n\n if (!invalidPointer) {\n const searchDetails = {\n pointer: event,\n pointerId: pointerUtils.getPointerId(event),\n pointerType,\n eventType: event.type,\n curEventTarget,\n eventTarget,\n scope,\n };\n\n const interaction = getInteraction(searchDetails);\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ]);\n }\n }\n\n // eslint-disable-next-line no-shadow\n for (const [pointer, eventTarget, curEventTarget, interaction] of matches) {\n interaction[method](pointer, event, eventTarget, curEventTarget);\n }\n });\n}\n\nfunction getInteraction (searchDetails) {\n const { pointerType, scope } = searchDetails;\n\n const foundInteraction = finder.search(searchDetails);\n const signalArg = { interaction: foundInteraction, searchDetails };\n\n scope.interactions.signals.fire('find', signalArg);\n\n return signalArg.interaction || newInteraction({ pointerType }, scope);\n}\n\nexport function newInteraction (options, scope) {\n const interaction = scope.interactions.new(options);\n\n scope.interactions.list.push(interaction);\n return interaction;\n}\n\nfunction onDocSignal ({ doc, scope, options }, signalName) {\n const { eventMap } = scope.interactions;\n const eventMethod = signalName.indexOf('add') === 0\n ? events.add : events.remove;\n\n if (scope.browser.isIOS && !options.events) {\n options.events = { passive: false };\n }\n\n // delegate event listener\n for (const eventType in events.delegatedEvents) {\n eventMethod(doc, eventType, events.delegateListener);\n eventMethod(doc, eventType, events.delegateUseCapture, true);\n }\n\n const eventOptions = options && options.events;\n\n for (const eventType in eventMap) {\n eventMethod(doc, eventType, eventMap[eventType], eventOptions);\n }\n}\n\nexport default {\n install,\n onDocSignal,\n doOnInteractions,\n newInteraction,\n methodNames,\n};\n","import Eventable from './Eventable';\nimport defaults from './defaultOptions';\nimport * as utils from '@interactjs/utils';\nimport domObjects from '@interactjs/utils/domObjects';\n\nimport interactions from './interactions';\nimport InteractEvent from './InteractEvent';\nimport InteractableBase from './Interactable';\n\nconst {\n win,\n browser,\n raf,\n Signals,\n events,\n} = utils;\n\nexport function createScope () {\n const scope = {\n Signals,\n signals: new Signals(),\n browser,\n events,\n utils,\n defaults: utils.clone(defaults),\n Eventable,\n\n InteractEvent: InteractEvent,\n Interactable: class Interactable extends InteractableBase {\n get _defaults () { return scope.defaults; }\n\n set (options) {\n super.set(options);\n\n scope.interactables.signals.fire('set', {\n options,\n interactable: this,\n });\n\n return this;\n }\n\n unset () {\n super.unset();\n scope.interactables.signals.fire('unset', { interactable: this });\n }\n },\n\n interactables: {\n // all set interactables\n list: [],\n\n new (target, options) {\n options = utils.extend(options || {}, {\n actions: scope.actions,\n });\n\n const interactable = new scope.Interactable(target, options, scope.document);\n\n scope.addDocument(interactable._doc);\n\n scope.interactables.list.push(interactable);\n\n scope.interactables.signals.fire('new', {\n target,\n options,\n interactable: interactable,\n win: this._win,\n });\n\n return interactable;\n },\n\n indexOfElement (target, context) {\n context = context || scope.document;\n\n const list = this.list;\n\n for (let i = 0; i < list.length; i++) {\n const interactable = list[i];\n\n if (interactable.target === target && interactable._context === context) {\n return i;\n }\n }\n\n return -1;\n },\n\n get (element, options, dontCheckInContext) {\n const ret = this.list[this.indexOfElement(element, options && options.context)];\n\n return ret && (utils.is.string(element) || dontCheckInContext || ret.inContext(element))? ret : null;\n },\n\n forEachMatch (element, callback) {\n for (const interactable of this.list) {\n let ret;\n\n if ((utils.is.string(interactable.target)\n // target is a selector and the element matches\n ? (utils.is.element(element) && utils.dom.matchesSelector(element, interactable.target))\n // target is the element\n : element === interactable.target)\n // the element is in context\n && (interactable.inContext(element))) {\n ret = callback(interactable);\n }\n\n if (ret !== undefined) {\n return ret;\n }\n }\n },\n\n signals: new utils.Signals(),\n },\n\n // main document\n document: null,\n // all documents being listened to\n documents: [/* { doc, options } */],\n\n init (window) {\n return initScope(scope, window);\n },\n\n addDocument (doc, options) {\n // do nothing if document is already known\n if (scope.getDocIndex(doc) !== -1) { return false; }\n\n const window = win.getWindow(doc);\n\n options = options ? utils.extend({}, options) : {};\n\n scope.documents.push({ doc, options });\n events.documents.push(doc);\n\n // don't add an unload event for the main document\n // so that the page may be cached in browser history\n if (doc !== scope.document) {\n events.add(window, 'unload', scope.onWindowUnload);\n }\n\n scope.signals.fire('add-document', { doc, window, scope, options });\n },\n\n removeDocument (doc) {\n const index = scope.getDocIndex(doc);\n\n const window = win.getWindow(doc);\n const options = scope.documents[index].options;\n\n events.remove(window, 'unload', scope.onWindowUnload);\n\n scope.documents.splice(index, 1);\n events.documents.splice(index, 1);\n\n scope.signals.fire('remove-document', { doc, window, scope, options });\n },\n\n onWindowUnload (event) {\n scope.removeDocument(event.currentTarget.document);\n },\n\n getDocIndex (doc) {\n for (let i = 0; i < scope.documents.length; i++) {\n if (scope.documents[i].doc === doc) {\n return i;\n }\n }\n\n return -1;\n },\n\n getDocOptions (doc) {\n const docIndex = scope.getDocIndex(doc);\n\n return docIndex === -1 ? null : scope.documents[docIndex].options;\n },\n };\n\n return scope;\n}\n\nexport function initScope (scope, window) {\n win.init(window);\n domObjects.init(window);\n browser.init(window);\n raf.init(window);\n events.init(window);\n\n interactions.install(scope);\n scope.document = window.document;\n\n return scope;\n}\n","/** @module interact */\n\nimport browser from '@interactjs/utils/browser';\nimport events from '@interactjs/utils/events';\nimport * as utils from '@interactjs/utils';\nimport { createScope } from '@interactjs/core/scope';\n\nconst globalEvents = {};\nconst scope = createScope();\n\n/**\n * ```js\n * interact('#draggable').draggable(true);\n *\n * var rectables = interact('rect');\n * rectables\n * .gesturable(true)\n * .on('gesturemove', function (event) {\n * // ...\n * });\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @global\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\nfunction interact (target, options) {\n let interactable = scope.interactables.get(target, options);\n\n\n if (!interactable) {\n interactable = scope.interactables.new(target, options);\n interactable.events.global = globalEvents;\n }\n\n return interactable;\n}\n\nscope._plugins = [];\n\n/**\n * Use a plugin\n *\n * @alias module:interact.use\n *\n * @param {Object} plugin\n * @param {function} plugin.install\n * @return {interact}\n*/\ninteract.use = function (plugin) {\n if (scope._plugins.indexOf(plugin) !== -1) {\n return;\n }\n\n plugin.install(scope);\n scope._plugins.push(plugin);\n return interact;\n};\n\n/**\n * Check if an element or selector has been set with the {@link interact}\n * function\n *\n * @alias module:interact.isSet\n *\n * @param {Element} element The Element being searched for\n * @return {boolean} Indicates if the element or CSS selector was previously\n * passed to interact\n*/\ninteract.isSet = function (element, options) {\n return scope.interactables.indexOfElement(element, options && options.context) !== -1;\n};\n\n/**\n * Add a global listener for an InteractEvent or adds a DOM event to `document`\n *\n * @alias module:interact.on\n *\n * @param {string | array | object} type The types of events to listen for\n * @param {function} listener The function event (s)\n * @param {object | boolean} [options] object or useCapture flag for\n * addEventListener\n * @return {object} interact\n */\ninteract.on = function (type, listener, options) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/);\n }\n\n if (utils.is.array(type)) {\n for (const eventType of type) {\n interact.on(eventType, listener, options);\n }\n\n return interact;\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.on(prop, type[prop], listener);\n }\n\n return interact;\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (utils.arr.contains(scope.actions.eventTypes, type)) {\n // if this type of event was never bound\n if (!globalEvents[type]) {\n globalEvents[type] = [listener];\n }\n else {\n globalEvents[type].push(listener);\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n events.add(scope.document, type, listener, { options });\n }\n\n return interact;\n};\n\n/**\n * Removes a global InteractEvent listener or DOM event from `document`\n *\n * @alias module:interact.off\n *\n * @param {string | array | object} type The types of events that were listened\n * for\n * @param {function} listener The listener function to be removed\n * @param {object | boolean} options [options] object or useCapture flag for\n * removeEventListener\n * @return {object} interact\n */\ninteract.off = function (type, listener, options) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/);\n }\n\n if (utils.is.array(type)) {\n for (const eventType of type) {\n interact.off(eventType, listener, options);\n }\n\n return interact;\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.off(prop, type[prop], listener);\n }\n\n return interact;\n }\n\n if (!utils.arr.contains(scope.actions.eventTypes, type)) {\n events.remove(scope.document, type, listener, options);\n }\n else {\n let index;\n\n if (type in globalEvents\n && (index = globalEvents[type].indexOf(listener)) !== -1) {\n globalEvents[type].splice(index, 1);\n }\n }\n\n return interact;\n};\n\n/**\n * Returns an object which exposes internal data\n\n * @alias module:interact.debug\n *\n * @return {object} An object with properties that outline the current state\n * and expose internal functions and variables\n */\ninteract.debug = function () {\n return scope;\n};\n\n// expose the functions used to calculate multi-touch properties\ninteract.getPointerAverage = utils.pointer.pointerAverage;\ninteract.getTouchBBox = utils.pointer.touchBBox;\ninteract.getTouchDistance = utils.pointer.touchDistance;\ninteract.getTouchAngle = utils.pointer.touchAngle;\n\ninteract.getElementRect = utils.dom.getElementRect;\ninteract.getElementClientRect = utils.dom.getElementClientRect;\ninteract.matchesSelector = utils.dom.matchesSelector;\ninteract.closest = utils.dom.closest;\n\n/**\n * @alias module:interact.supportsTouch\n *\n * @return {boolean} Whether or not the browser supports touch input\n */\ninteract.supportsTouch = 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 */\ninteract.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 * @param {Event} event An event on which to call preventDefault()\n * @return {object} interact\n */\ninteract.stop = function (event) {\n for (const interaction of scope.interactions.list) {\n interaction.stop(event);\n }\n\n return interact;\n};\n\n/**\n * Returns or sets the distance the pointer must be moved before an action\n * sequence occurs. This also affects tolerance for tap events.\n *\n * @alias module:interact.pointerMoveTolerance\n *\n * @param {number} [newValue] The movement from the start position must be greater than this value\n * @return {interact | number}\n */\ninteract.pointerMoveTolerance = function (newValue) {\n if (utils.is.number(newValue)) {\n scope.interactions.pointerMoveTolerance = newValue;\n\n return interact;\n }\n\n return scope.interactions.pointerMoveTolerance;\n};\n\nscope.interactables.signals.on('unset', ({ interactable }) => {\n scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1);\n\n // Stop related interactions when an Interactable is unset\n for (const interaction of scope.interactions.list) {\n if (interaction.target === interactable && interaction.interacting() && interaction._ending) {\n interaction.stop();\n }\n }\n});\ninteract.addDocument = scope.addDocument;\ninteract.removeDocument = scope.removeDocument;\n\nscope.interact = interact;\n\nexport { scope };\nexport default interact;\n","import * as is from '@interactjs/utils/is';\nimport rectUtils from '@interactjs/utils/rect';\n\nfunction start ({ rect, startOffset, state }) {\n const { options } = state;\n const { elementRect } = options;\n const offset = {};\n\n if (rect && elementRect) {\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 else {\n offset.left = offset.top = offset.right = offset.bottom = 0;\n }\n\n state.offset = offset;\n}\n\nfunction set ({ coords, interaction, state }) {\n const { options, offset } = state;\n\n const restriction = getRestrictionRect(options.restriction, interaction, coords);\n\n if (!restriction) { return state; }\n\n const rect = restriction;\n\n // object is assumed to have\n // x, y, width, height or\n // left, top, right, bottom\n if ('x' in restriction && 'y' in restriction) {\n coords.x = Math.max(Math.min(rect.x + rect.width - offset.right , coords.x), rect.x + offset.left);\n coords.y = Math.max(Math.min(rect.y + rect.height - offset.bottom, coords.y), rect.y + offset.top );\n }\n else {\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}\n\nfunction getRestrictionRect (value, interaction, coords) {\n if (is.func(value)) {\n return rectUtils.resolveRectLike(value, interaction.target, interaction.element, [coords.x, coords.y, interaction]);\n } else {\n return rectUtils.resolveRectLike(value, interaction.target, interaction.element);\n }\n}\n\nconst restrict = {\n start,\n set,\n getRestrictionRect,\n defaults: {\n enabled: false,\n restriction: null,\n elementRect: null,\n },\n};\n\nexport default restrict;\n","// This module adds the options.resize.restrictEdges setting which sets min and\n// max for the top, left, bottom and right edges of the target being resized.\n//\n// interact(target).resize({\n// edges: { top: true, left: true },\n// restrictEdges: {\n// inner: { top: 200, left: 200, right: 400, bottom: 400 },\n// outer: { top: 0, left: 0, right: 600, bottom: 600 },\n// },\n// });\n\nimport extend from '@interactjs/utils/extend';\nimport rectUtils from '@interactjs/utils/rect';\nimport restrict from './pointer';\n\nconst { getRestrictionRect } = restrict;\nconst noInner = { top: +Infinity, left: +Infinity, bottom: -Infinity, right: -Infinity };\nconst noOuter = { top: -Infinity, left: -Infinity, bottom: +Infinity, right: +Infinity };\n\nfunction start ({ interaction, state }) {\n const { options } = state;\n const startOffset = interaction.modifiers.startOffset;\n let offset;\n\n if (options) {\n const offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page);\n\n offset = rectUtils.rectToXY(offsetRect);\n }\n\n offset = offset || { x: 0, y: 0 };\n\n state.offset = {\n top: offset.y + startOffset.top,\n left: offset.x + startOffset.left,\n bottom: offset.y - startOffset.bottom,\n right: offset.x - startOffset.right,\n };\n}\n\nfunction set ({ coords, interaction, state }) {\n const { offset, options } = state;\n const edges = interaction.prepared.linkedEdges || interaction.prepared.edges;\n\n if (!edges) {\n return;\n }\n\n const page = extend({}, coords);\n const inner = getRestrictionRect(options.inner, interaction, page) || {};\n const outer = getRestrictionRect(options.outer, interaction, page) || {};\n\n fixRect(inner, noInner);\n fixRect(outer, noOuter);\n\n if (edges.top) {\n coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top);\n }\n else if (edges.bottom) {\n coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom);\n }\n if (edges.left) {\n coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left);\n }\n else if (edges.right) {\n coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right);\n }\n}\n\nfunction fixRect (rect, defaults) {\n for (const edge of ['top', 'left', 'bottom', 'right']) {\n if (!(edge in rect)) {\n rect[edge] = defaults[edge];\n }\n }\n\n return rect;\n}\n\nconst restrictEdges = {\n noInner,\n noOuter,\n getRestrictionRect,\n start,\n set,\n defaults: {\n enabled: false,\n inner: null,\n outer: null,\n offset: null,\n },\n};\n\nexport default restrictEdges;\n","// This module adds the options.resize.restrictSize setting which sets min and\n// max width and height for the target being resized.\n//\n// interact(target).resize({\n// edges: { top: true, left: true },\n// restrictSize: {\n// min: { width: -600, height: -600 },\n// max: { width: 600, height: 600 },\n// },\n// });\n\nimport extend from '@interactjs/utils/extend';\nimport rectUtils from '@interactjs/utils/rect';\nimport restrictEdges from './edges';\n\nconst noMin = { width: -Infinity, height: -Infinity };\nconst noMax = { width: +Infinity, height: +Infinity };\n\nfunction start (arg) {\n return restrictEdges.start(arg);\n}\n\nfunction set (arg) {\n const { interaction, state } = arg;\n const { options } = state;\n const edges = interaction.prepared.linkedEdges || interaction.prepared.edges;\n\n if (!edges) {\n return;\n }\n\n const rect = rectUtils.xywhToTlbr(interaction.resizeRects.inverted);\n\n const minSize = rectUtils.tlbrToXywh(restrictEdges.getRestrictionRect(options.min, interaction)) || noMin;\n const maxSize = rectUtils.tlbrToXywh(restrictEdges.getRestrictionRect(options.max, interaction)) || noMax;\n\n state.options = {\n enabled: options.enabled,\n endOnly: options.endOnly,\n inner: extend({}, restrictEdges.noInner),\n outer: extend({}, restrictEdges.noOuter),\n };\n\n if (edges.top) {\n state.options.inner.top = rect.bottom - minSize.height;\n state.options.outer.top = rect.bottom - maxSize.height;\n }\n else if (edges.bottom) {\n state.options.inner.bottom = rect.top + minSize.height;\n state.options.outer.bottom = rect.top + maxSize.height;\n }\n if (edges.left) {\n state.options.inner.left = rect.right - minSize.width;\n state.options.outer.left = rect.right - maxSize.width;\n }\n else if (edges.right) {\n state.options.inner.right = rect.left + minSize.width;\n state.options.outer.right = rect.left + maxSize.width;\n }\n\n restrictEdges.set(arg);\n\n state.options = options;\n}\n\nconst restrictSize = {\n start,\n set,\n defaults: {\n enabled: false,\n min: null,\n max: null,\n },\n};\n\nexport default restrictSize;\n","import * as utils from '@interactjs/utils';\n\nfunction start ({ interaction, interactable, element, rect, state, startOffset }) {\n const { options } = state;\n const offsets = [];\n const optionsOrigin = utils.rect.rectToXY(utils.rect.resolveRectLike(options.origin));\n const origin = optionsOrigin || utils.getOriginXY(interactable, element, interaction.prepared.name);\n\n let snapOffset;\n\n if (options.offset === 'startCoords') {\n snapOffset = {\n x: interaction.coords.start.page.x - origin.x,\n y: interaction.coords.start.page.y - origin.y,\n };\n }\n else {\n const offsetRect = utils.rect.resolveRectLike(options.offset, interactable, element, [interaction]);\n\n snapOffset = utils.rect.rectToXY(offsetRect) || { x: 0, y: 0 };\n }\n\n const relativePoints = options.relativePoints || [];\n\n if (rect && options.relativePoints && options.relativePoints.length) {\n for (let index = 0; index < relativePoints.length; index++) {\n const relativePoint = relativePoints[index];\n\n offsets.push({\n index,\n relativePoint,\n x: startOffset.left - (rect.width * relativePoint.x) + snapOffset.x,\n y: startOffset.top - (rect.height * relativePoint.y) + snapOffset.y,\n });\n }\n }\n else {\n offsets.push(utils.extend({\n index: 0,\n relativePoint: null,\n }, snapOffset));\n }\n\n state.offsets = offsets;\n}\n\nfunction set ({ interaction, coords, state }) {\n const { options, offsets } = state;\n\n const origin = utils.getOriginXY(interaction.target, interaction.element, interaction.prepared.name);\n const page = utils.extend({}, coords);\n const targets = [];\n let target;\n let i;\n\n page.x -= origin.x;\n page.y -= origin.y;\n\n state.realX = page.x;\n state.realY = page.y;\n\n let len = options.targets? options.targets.length : 0;\n\n for (const offset of offsets) {\n\n const relativeX = page.x - offset.x;\n const relativeY = page.y - offset.y;\n\n for (let index = 0; index < options.targets.length; index++) {\n const snapTarget = options.targets[index];\n if (utils.is.func(snapTarget)) {\n target = snapTarget(relativeX, relativeY, interaction, offset, index);\n }\n else {\n target = snapTarget;\n }\n\n if (!target) { continue; }\n\n targets.push({\n x: utils.is.number(target.x) ? (target.x + offset.x) : relativeX,\n y: utils.is.number(target.y) ? (target.y + offset.y) : relativeY,\n\n range: utils.is.number(target.range)? target.range: options.range,\n });\n }\n }\n\n const closest = {\n target: null,\n inRange: false,\n distance: 0,\n range: 0,\n dx: 0,\n dy: 0,\n };\n\n for (i = 0, len = targets.length; i < len; i++) {\n target = targets[i];\n\n const range = target.range;\n const dx = target.x - page.x;\n const dy = target.y - page.y;\n const distance = utils.hypot(dx, dy);\n let inRange = distance <= range;\n\n // Infinite targets count as being out of range\n // compared to non infinite ones that are in range\n if (range === Infinity && closest.inRange && closest.range !== Infinity) {\n inRange = false;\n }\n\n if (!closest.target || (inRange\n // is the closest target in range?\n ? (closest.inRange && range !== Infinity\n // the pointer is relatively deeper in this target\n ? distance / range < closest.distance / closest.range\n // this target has Infinite range and the closest doesn't\n : (range === Infinity && closest.range !== Infinity) ||\n // OR this target is closer that the previous closest\n distance < closest.distance)\n // The other is not in range and the pointer is closer to this target\n : (!closest.inRange && distance < closest.distance))) {\n\n closest.target = target;\n closest.distance = distance;\n closest.range = range;\n closest.inRange = inRange;\n closest.dx = dx;\n closest.dy = dy;\n\n state.range = range;\n }\n }\n\n if (closest.inRange) {\n coords.x = closest.target.x;\n coords.y = closest.target.y;\n }\n\n state.closest = closest;\n}\n\nconst snap = {\n start,\n set,\n defaults: {\n enabled: false,\n range : Infinity,\n targets: null,\n offset: null,\n\n relativePoints: null,\n },\n};\n\nexport default snap;\n","// This module allows snapping of the size of targets during resize\n// interactions.\n\nimport extend from '@interactjs/utils/extend';\nimport * as is from '@interactjs/utils/is';\nimport snap from './pointer';\n\nfunction start (arg) {\n const { interaction, state } = arg;\n const { options } = state;\n const edges = interaction.prepared.edges;\n\n if (!edges) { return null; }\n\n arg.state = {\n options: {\n relativePoints: [{\n x: edges.left? 0 : 1,\n y: edges.top ? 0 : 1,\n }],\n origin: { x: 0, y: 0 },\n offset: options.offset || 'self',\n range: options.range,\n },\n };\n\n state.targetFields = state.targetFields || [\n ['width', 'height'],\n ['x', 'y'],\n ];\n\n snap.start(arg);\n state.offsets = arg.state.offsets;\n\n arg.state = state;\n}\n\nfunction set (arg) {\n const { interaction, state, coords } = arg;\n const { options, offsets } = state;\n const relative = {\n x: coords.x - offsets[0].x,\n y: coords.y - offsets[0].y,\n };\n\n state.options = extend({}, options);\n state.options.targets = [];\n\n for (const snapTarget of (options.targets || [])) {\n let target;\n\n if (is.func(snapTarget)) {\n target = snapTarget(relative.x, relative.y, interaction);\n }\n else {\n target = snapTarget;\n }\n\n if (!target) { continue; }\n\n for (const [xField, yField] of state.targetFields) {\n if (xField in target || yField in target) {\n target.x = target[xField];\n target.y = target[yField];\n\n break;\n }\n }\n\n state.options.targets.push(target);\n }\n\n snap.set(arg);\n\n state.options = options;\n}\n\nconst snapSize = {\n start,\n set,\n defaults: {\n enabled: false,\n range : Infinity,\n targets: null,\n offset: null,\n },\n};\n\nexport default snapSize;\n","/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * });\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * });\n */\n\nimport clone from '@interactjs/utils/clone';\nimport extend from '@interactjs/utils/extend';\nimport snapSize from './size';\n\nfunction install (scope) {\n const {\n defaults,\n } = scope;\n\n defaults.perAction.snapEdges = snapEdges.defaults;\n}\n\nfunction start (arg) {\n const edges = arg.interaction.prepared.edges;\n\n if (!edges) { return null; }\n\n arg.state.targetFields = arg.state.targetFields || [\n [edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom'],\n ];\n\n return snapSize.start(arg);\n}\n\nfunction set (arg) {\n return snapSize.set(arg);\n}\n\nfunction modifyCoords (arg) {\n snapSize.modifyCoords(arg);\n}\n\nconst snapEdges = {\n install,\n start,\n set,\n modifyCoords,\n defaults: extend(clone(snapSize.defaults), {\n offset: { x: 0, y: 0 },\n }),\n};\n\nexport default snapEdges;\n","import base from './base';\nimport snapModule from './snap/pointer';\nimport snapSizeModule from './snap/size';\nimport snapEdgesModule from './snap/edges';\nimport restrictModule from './restrict/pointer';\nimport restrictEdgesModule from './restrict/edges';\nimport restrictSizeModule from './restrict/size';\n\nconst { makeModifier } = base;\n\nexport const snap = makeModifier(snapModule, 'snap');\nexport const snapSize = makeModifier(snapSizeModule, 'snapSize');\nexport const snapEdges = makeModifier(snapEdgesModule, 'snapEdges');\nexport const restrict = makeModifier(restrictModule, 'restrict');\nexport const restrictEdges = makeModifier(restrictEdgesModule, 'restrictEdges');\nexport const restrictSize = makeModifier(restrictSizeModule, 'restrictSize');\n","import pointerUtils from '@interactjs/utils/pointerUtils';\n\nexport default class PointerEvent {\n /** */\n constructor (type, pointer, event, eventTarget, interaction) {\n pointerUtils.pointerExtend(this, event);\n\n if (event !== pointer) {\n pointerUtils.pointerExtend(this, pointer);\n }\n\n this.interaction = interaction;\n\n this.timeStamp = new Date().getTime();\n this.originalEvent = event;\n this.type = type;\n this.pointerId = pointerUtils.getPointerId(pointer);\n this.pointerType = pointerUtils.getPointerType(pointer);\n this.target = eventTarget;\n this.currentTarget = null;\n\n if (type === 'tap') {\n const pointerIndex = interaction.getPointerIndex(pointer);\n this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime;\n\n const interval = this.timeStamp - interaction.tapTime;\n\n this.double = !!(interaction.prevTap\n && interaction.prevTap.type !== 'doubletap'\n && interaction.prevTap.target === this.target\n && interval < 500);\n }\n else if (type === 'doubletap') {\n this.dt = pointer.timeStamp - interaction.tapTime;\n }\n }\n\n subtractOrigin ({ x: originX, y: originY }) {\n this.pageX -= originX;\n this.pageY -= originY;\n this.clientX -= originX;\n this.clientY -= originY;\n\n return this;\n }\n\n addOrigin ({ x: originX, y: originY }) {\n this.pageX += originX;\n this.pageY += originY;\n this.clientX += originX;\n this.clientY += originY;\n\n return this;\n }\n\n /** */\n preventDefault () {\n this.originalEvent.preventDefault();\n }\n\n /** */\n stopPropagation () {\n this.propagationStopped = true;\n }\n\n /** */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true;\n }\n}\n","import * as utils from '@interactjs/utils';\nimport PointerEvent from './PointerEvent';\n\nconst signals = new utils.Signals();\nconst simpleSignals = [ 'down', 'up', 'cancel' ];\nconst simpleEvents = [ 'down', 'up', 'cancel' ];\n\nconst pointerEvents = {\n install,\n signals,\n PointerEvent,\n fire,\n collectEventTargets,\n createSignalListener,\n defaults: {\n holdDuration: 600,\n ignoreFrom : null,\n allowFrom : null,\n origin : { x: 0, y: 0 },\n },\n types: [\n 'down',\n 'move',\n 'up',\n 'cancel',\n 'tap',\n 'doubletap',\n 'hold',\n ],\n};\n\nfunction fire (arg) {\n const {\n interaction, pointer, event, eventTarget,\n type = arg.pointerEvent.type,\n targets = collectEventTargets(arg),\n pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction),\n } = arg;\n\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n targets,\n type,\n pointerEvent,\n };\n\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i];\n\n for (const prop in target.props || {}) {\n pointerEvent[prop] = target.props[prop];\n }\n\n const origin = utils.getOriginXY(target.eventable, target.element);\n\n pointerEvent.subtractOrigin(origin);\n pointerEvent.eventable = target.eventable;\n pointerEvent.currentTarget = target.element;\n\n target.eventable.fire(pointerEvent);\n\n pointerEvent.addOrigin(origin);\n\n if (pointerEvent.immediatePropagationStopped\n || (pointerEvent.propagationStopped\n && (i + 1) < targets.length && targets[i + 1].element !== pointerEvent.currentTarget)) {\n break;\n }\n }\n\n signals.fire('fired', signalArg);\n\n if (type === 'tap') {\n // if pointerEvent should make a double tap, create and fire a doubletap\n // PointerEvent and use that as the prevTap\n const prevTap = pointerEvent.double\n ? fire({\n interaction, pointer, event, eventTarget,\n type: 'doubletap',\n })\n : pointerEvent;\n\n interaction.prevTap = prevTap;\n interaction.tapTime = prevTap.timeStamp;\n }\n\n return pointerEvent;\n}\n\nfunction collectEventTargets ({ interaction, pointer, event, eventTarget, type }) {\n const pointerIndex = interaction.getPointerIndex(pointer);\n const pointerInfo = interaction.pointers[pointerIndex];\n\n // do not fire a tap event if the pointer was moved before being lifted\n if (type === 'tap' && (interaction.pointerWasMoved\n // or if the pointerup target is different to the pointerdown target\n || !(pointerInfo && pointerInfo.downTarget === eventTarget))) {\n return [];\n }\n\n const path = utils.dom.getPath(eventTarget);\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n path,\n targets: [],\n element: null,\n };\n\n for (const element of path) {\n signalArg.element = element;\n\n signals.fire('collect-targets', signalArg);\n }\n\n if (type === 'hold') {\n signalArg.targets = signalArg.targets.filter(target =>\n target.eventable.options.holdDuration === interaction.pointers[pointerIndex].hold.duration);\n }\n\n return signalArg.targets;\n}\n\nfunction install (scope) {\n const {\n interactions,\n } = scope;\n\n scope.pointerEvents = pointerEvents;\n scope.defaults.pointerEvents = pointerEvents.defaults;\n\n interactions.signals.on('new', interaction => {\n interaction.prevTap = null; // the most recent tap event on this interaction\n interaction.tapTime = 0; // time of the most recent tap event\n });\n\n interactions.signals.on('update-pointer', function ({ down, pointerInfo }) {\n if (!down) {\n return;\n }\n\n pointerInfo.hold = { duration: Infinity, timeout: null };\n });\n\n interactions.signals.on('move', function ({ interaction, pointer, event, eventTarget, duplicateMove }) {\n const pointerIndex = interaction.getPointerIndex(pointer);\n\n if (!duplicateMove && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {\n if (interaction.pointerIsDown) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout);\n }\n\n fire({\n interaction, pointer, event, eventTarget,\n type: 'move',\n });\n }\n });\n\n interactions.signals.on('down', function ({ interaction, pointer, event, eventTarget, pointerIndex }) {\n const timer = interaction.pointers[pointerIndex].hold;\n const path = utils.dom.getPath(eventTarget);\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'hold',\n targets: [],\n path,\n element: null,\n };\n\n for (const element of path) {\n signalArg.element = element;\n\n signals.fire('collect-targets', signalArg);\n }\n\n if (!signalArg.targets.length) { return; }\n\n let minDuration = Infinity;\n\n for (const target of signalArg.targets) {\n const holdDuration = target.eventable.options.holdDuration;\n\n if (holdDuration < minDuration) {\n minDuration = holdDuration;\n }\n }\n\n timer.duration = minDuration;\n timer.timeout = setTimeout(function () {\n fire({\n interaction,\n eventTarget,\n pointer,\n event,\n type: 'hold',\n });\n }, minDuration);\n });\n\n interactions.signals.on('up', ({ interaction, pointer, event, eventTarget }) => {\n if (!interaction.pointerWasMoved) {\n fire({ interaction, eventTarget, pointer, event, type: 'tap' });\n }\n });\n\n for (const signalName of ['up', 'cancel']) {\n interactions.signals.on(signalName, function ({ interaction, pointerIndex }) {\n if (interaction.pointers[pointerIndex].hold) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout);\n }\n });\n }\n\n for (let i = 0; i < simpleSignals.length; i++) {\n interactions.signals.on(simpleSignals[i], createSignalListener(simpleEvents[i]));\n }\n}\n\nfunction createSignalListener (type) {\n return function ({ interaction, pointer, event, eventTarget }) {\n fire({ interaction, eventTarget, pointer, event, type });\n };\n}\n\nexport default pointerEvents;\n","function install (scope) {\n const {\n pointerEvents,\n interactions,\n } = scope;\n\n pointerEvents.signals.on('new', onNew);\n pointerEvents.signals.on('fired', arg => onFired(arg, pointerEvents));\n\n for (const signal of ['move', 'up', 'cancel', 'endall']) {\n interactions.signals.on(signal, endHoldRepeat);\n }\n\n // don't repeat by default\n pointerEvents.defaults.holdRepeatInterval = 0;\n pointerEvents.types.push('holdrepeat');\n}\n\nfunction onNew ({ pointerEvent }) {\n if (pointerEvent.type !== 'hold') { return; }\n\n pointerEvent.count = (pointerEvent.count || 0) + 1;\n}\n\nfunction onFired ({ interaction, pointerEvent, eventTarget, targets }, pointerEvents) {\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(function () {\n pointerEvents.fire({\n interaction,\n eventTarget,\n type: 'hold',\n pointer: pointerEvent,\n event: pointerEvent,\n });\n }, interval);\n}\n\nfunction endHoldRepeat ({ interaction }) {\n // set the interaction's holdStopTime property\n // to stop further holdRepeat events\n if (interaction.holdIntervalHandle) {\n clearInterval(interaction.holdIntervalHandle);\n interaction.holdIntervalHandle = null;\n }\n}\n\nexport default {\n install,\n};\n","import * as is from '@interactjs/utils/is';\nimport extend from '@interactjs/utils/extend';\nimport { merge } from '@interactjs/utils/arr';\n\nfunction install (scope) {\n const {\n pointerEvents,\n actions,\n Interactable,\n interactables,\n } = scope;\n\n pointerEvents.signals.on('collect-targets', function ({ targets, element, type, eventTarget }) {\n scope.interactables.forEachMatch(element, interactable => {\n const eventable = interactable.events;\n const options = eventable.options;\n\n if (\n eventable.types[type] &&\n eventable.types[type].length &&\n is.element(element) &&\n interactable.testIgnoreAllow(options, element, eventTarget)) {\n\n targets.push({\n element,\n eventable,\n props: { interactable },\n });\n }\n });\n });\n\n interactables.signals.on('new', function ({ interactable }) {\n interactable.events.getRect = function (element) {\n return interactable.getRect(element);\n };\n });\n\n interactables.signals.on('set', function ({ interactable, options }) {\n extend(interactable.events.options, pointerEvents.defaults);\n extend(interactable.events.options, options.pointerEvents || {});\n });\n\n merge(actions.eventTypes, pointerEvents.types);\n\n Interactable.prototype.pointerEvents = function (options) {\n extend(this.events.options, options);\n\n return this;\n };\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\nexport default {\n install,\n};\n","import pointerEvents from './base';\nimport holdRepeat from './holdRepeat';\nimport interactableTargets from './interactableTargets';\n\nfunction install (scope) {\n pointerEvents.install(scope);\n holdRepeat.install(scope);\n interactableTargets.install(scope);\n}\n\nexport {\n pointerEvents,\n holdRepeat,\n interactableTargets,\n install,\n};\n","import { newInteraction } from '@interactjs/core/interactions';\nimport {\n arr,\n is,\n extend,\n rect as rectUtils,\n pointer as pointerUtils,\n win,\n} from '@interactjs/utils';\n\nexport function install (scope) {\n const {\n actions,\n interactions,\n /** @lends Interactable */\n Interactable,\n } = scope;\n\n // add action reflow event types\n for (const actionName of actions.names) {\n actions.eventTypes.push(`${actionName}reflow`);\n }\n\n // remove completed reflow interactions\n interactions.signals.on('stop', ({ interaction }) => {\n if (interaction.pointerType === 'reflow') {\n interaction._reflowResolve();\n arr.remove(scope.interactions.list, interaction);\n }\n });\n\n /**\n * ```js\n * const interactable = interact(target);\n * const drag = { name: drag, axis: 'x' };\n * const resize = { name: resize, edges: { left: true, bottom: true };\n *\n * interactable.reflow(drag);\n * interactable.reflow(resize);\n * ```\n *\n * Start an action sequence to re-apply modifiers, check drops, etc.\n *\n * @param { Object } action The action to begin\n * @param { string } action.name The name of the action\n * @returns { Promise }\n */\n Interactable.prototype.reflow = function (action) {\n return reflow(this, action, scope);\n };\n}\n\nfunction reflow (interactable, action, scope) {\n const elements = is.string(interactable.target)\n ? arr.from(interactable._context.querySelectorAll(interactable.target))\n : [interactable.target];\n\n const Promise = win.window.Promise;\n const promises = Promise ? [] : null;\n\n for (const element of elements) {\n const rect = interactable.getRect(element);\n\n if (!rect) { break; }\n\n const runningInteraction = arr.find(\n scope.interactions.list,\n interaction => {\n return interaction.interacting() &&\n interaction.target === interactable &&\n interaction.element === element &&\n interaction.prepared.name === action.name;\n });\n let reflowPromise;\n\n if (runningInteraction) {\n runningInteraction.move();\n\n reflowPromise = runningInteraction._reflowPromise || new Promise(resolve => {\n runningInteraction._reflowResolve = resolve;\n });\n }\n else {\n const xywh = rectUtils.tlbrToXywh(rect);\n const coords = {\n page : { x: xywh.x, y: xywh.y },\n client : { x: xywh.x, y: xywh.y },\n timeStamp: Date.now(),\n };\n\n const event = pointerUtils.coordsToEvent(coords);\n reflowPromise = startReflow(scope, interactable, element, action, event);\n }\n\n if (promises) {\n promises.push(reflowPromise);\n }\n }\n\n return promises && Promise.all(promises).then(() => interactable);\n}\n\nfunction startReflow (scope, interactable, element, action, event) {\n const interaction = newInteraction({ pointerType: 'reflow' }, scope);\n const signalArg = {\n interaction,\n event,\n pointer: event,\n eventTarget: element,\n phase: 'reflow',\n };\n\n interaction.target = interactable;\n interaction.element = element;\n interaction.prepared = extend({}, action);\n interaction.prevEvent = event;\n interaction.updatePointer(event, event, element, true);\n\n interaction._doPhase(signalArg);\n\n const reflowPromise = win.window.Promise\n ? new win.window.Promise((resolve) => {\n interaction._reflowResolve = resolve;\n })\n : null;\n\n interaction._reflowPromise = reflowPromise;\n interaction.start(action, interactable, element);\n\n if (interaction._interacting) {\n interaction.move(signalArg);\n interaction.end(event);\n }\n else {\n interaction.stop();\n }\n\n interaction.removePointer(event, event);\n interaction.pointerIsDown = false;\n\n return reflowPromise;\n}\n\nexport default { install };\n","export default (grid) => {\n const coordFields = [\n ['x', 'y'],\n ['left', 'top'],\n ['right', 'bottom'],\n ['width', 'height'],\n ].filter(([xField, yField]) => xField in grid || yField in grid);\n\n return function (x, y) {\n const {\n range,\n limits = {\n left : -Infinity,\n right : Infinity,\n top : -Infinity,\n bottom: Infinity,\n },\n offset = { x: 0, y: 0 },\n } = grid;\n\n const result = { range };\n\n for (const [xField, yField] of coordFields) {\n const gridx = Math.round((x - offset.x) / grid[xField]);\n const gridy = Math.round((y - offset.y) / grid[yField]);\n\n result[xField] = Math.max(limits.left, Math.min(limits.right , gridx * grid[xField] + offset.x));\n result[yField] = Math.max(limits.top, Math.min(limits.bottom , gridy * grid[yField] + offset.y));\n }\n\n return result;\n };\n};\n","import grid from './grid';\n\nexport {\n grid,\n};\n","/* browser entry point */\n\nimport { default as interact, scope } from './interact';\nimport interactablePreventDefault from '@interactjs/core/interactablePreventDefault';\nimport inertia from '@interactjs/inertia';\nimport * as pointerEvents from '@interactjs/pointer-events';\nimport * as autoStart from '@interactjs/auto-start';\nimport * as actions from '@interactjs/actions';\nimport modifiersBase from '@interactjs/modifiers/base';\nimport * as modifiers from '@interactjs/modifiers';\nimport * as snappers from '@interactjs/utils/snappers';\nimport extend from '@interactjs/utils/extend';\nimport autoScroll from '@interactjs/auto-scroll';\nimport reflow from '@interactjs/reflow';\n\nexport function init (window) {\n scope.init(window);\n\n interact.use(interactablePreventDefault);\n\n // inertia\n interact.use(inertia);\n\n // pointerEvents\n interact.use(pointerEvents);\n\n // autoStart, hold\n interact.use(autoStart);\n\n // drag and drop, resize, gesture\n interact.use(actions);\n\n // snap, resize, etc.\n interact.use(modifiersBase);\n interact.modifiers = extend(scope.modifiers, modifiers);\n interact.snappers = snappers;\n interact.createSnapGrid = interact.snappers.grid;\n\n\n // for backwrads compatibility\n for (const type in modifiers) {\n const { _defaults, _methods } = modifiers[type];\n\n _defaults._methods = _methods;\n scope.defaults.perAction[type] = _defaults;\n }\n\n // autoScroll\n interact.use(autoScroll);\n\n // reflow\n interact.use(reflow);\n\n return interact;\n}\n\n// eslint-disable-next-line no-undef\ninteract.version = init.version = process.env.npm_package_version;\n\nexport default interact;\nexport { interact };\n","/*\n * In a (windowless) server environment this file exports a factory function\n * that takes the window to use.\n *\n * var interact = require('interact.js')(windowObject);\n *\n * See https://github.com/taye/interact.js/issues/187\n */\n\nimport { init } from '@interactjs/interact';\n\nconst win = typeof window === 'object' && window;\nconst exported = win ? init(win) : init;\n\nexport default exported;\n\nif (typeof module === 'object' && !!module) {\n module.exports = exported;\n}\n","\nreturn _$interactjs_24;\n\n});\n"]} \ No newline at end of file +{"version":3,"sources":["../../scripts/header.js","../../node_modules/browser-pack-flat/_prelude","../utils/arr.js","../utils/isWindow.js","../utils/window.js","../utils/is.js","../actions/drag.js","../actions/drop/DropEvent.js","../utils/Signals.js","../utils/domObjects.js","../utils/browser.js","../utils/clone.js","../utils/domUtils.js","../utils/pointerExtend.js","../utils/hypot.js","../utils/pointerUtils.js","../utils/events.js","../utils/extend.js","../utils/rect.js","../utils/getOriginXY.js","../utils/normalizeListeners.js","../utils/raf.js","../utils/index.js","../actions/drop/index.js","../core/defaultOptions.js","../core/InteractEvent.js","../actions/gesture.js","../actions/resize.js","../actions/index.js","../autoScroll/index.js","../autoStart/InteractableMethods.js","../autoStart/base.js","../autoStart/dragAxis.js","../autoStart/hold.js","../autoStart/index.js","../core/interactablePreventDefault.js","../modifiers/base.js","../inertia/index.js","../core/Eventable.js","../core/Interactable.js","../core/Interaction.js","../utils/interactionFinder.js","../core/interactions.js","../core/scope.js","../interact/interact.js","../modifiers/restrict/pointer.js","../modifiers/restrict/edges.js","../modifiers/restrict/size.js","../modifiers/snap/pointer.js","../modifiers/snap/size.js","../modifiers/snap/edges.js","../modifiers/index.js","../pointerEvents/PointerEvent.js","../pointerEvents/base.js","../pointerEvents/holdRepeat.js","../pointerEvents/interactableTargets.js","../pointerEvents/index.js","../reflow/index.js","../utils/snappers/grid.js","../utils/snappers/index.js","../interact/index.js","index.js","../../node_modules/browser-pack-flat/_postlude"],"names":[],"mappings":"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","file":"interact.js","sourceRoot":"","sourcesContent":["/**\n * interact.js v1.4.0-alpha.16+sha.5b3c738-dirty\n *\n * Copyright (c) 2012-2018 Taye Adeyemi \n * Released under the MIT License.\n * https://raw.github.com/taye/interact.js/master/LICENSE\n */\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.interact = f()}})(function(){var define,module,exports;\n","export function contains (array, target) {\n return array.indexOf(target) !== -1;\n}\n\nexport function remove (array, target) {\n return array.splice(array.indexOf(target), 1);\n}\n\nexport function merge (target, source) {\n for (const item of source) {\n target.push(item);\n }\n\n return target;\n}\n\nexport function from (source) {\n return merge([], source);\n}\n\nexport function findIndex (array, func) {\n for (let i = 0; i < array.length; i++) {\n if (func(array[i], i, array)) {\n return i;\n }\n }\n\n return -1;\n}\n\nexport function find (array, func) {\n return array[findIndex(array, func)];\n}\n\nexport function some (array, func) {\n return findIndex(array, func) !== -1;\n}\n","export default (thing) => !!(thing && thing.Window) && (thing instanceof thing.Window);\n","import isWindow from './isWindow';\n\nconst win = {\n getWindow,\n init,\n};\n\nexport function init (window) {\n // get wrapped window if using Shadow DOM polyfill\n\n win.realWindow = window;\n\n // create a TextNode\n const el = window.document.createTextNode('');\n\n // check if it's wrapped by a polyfill\n if (el.ownerDocument !== window.document\n && typeof window.wrap === 'function'\n && window.wrap(el) === el) {\n // use wrapped window\n window = window.wrap(window);\n }\n\n win.window = window;\n}\n\nif (typeof window === 'undefined') {\n win.window = undefined;\n win.realWindow = undefined;\n}\nelse {\n init(window);\n}\n\nexport function getWindow (node) {\n if (isWindow(node)) {\n return node;\n }\n\n const rootNode = (node.ownerDocument || node);\n\n return rootNode.defaultView || win.window;\n}\n\nwin.init = init;\n\nexport default win;\n","import win from './window';\nimport isWindow from './isWindow';\n\nexport const window = thing => thing === win.window || isWindow(thing);\n\nexport const docFrag = thing => object(thing) && thing.nodeType === 11;\n\nexport const object = thing => !!thing && (typeof thing === 'object');\n\nexport const func = thing => typeof thing === 'function';\n\nexport const number = thing => typeof thing === 'number' ;\n\nexport const bool = thing => typeof thing === 'boolean' ;\n\nexport const string = thing => typeof thing === 'string' ;\n\nexport const element = thing => {\n if (!thing || (typeof thing !== 'object')) { return false; }\n\n const _window = win.getWindow(thing) || win.window;\n\n return (/object|function/.test(typeof _window.Element)\n ? thing instanceof _window.Element //DOM2\n : thing.nodeType === 1 && typeof thing.nodeName === 'string');\n};\n\nexport const plainObject = thing => object(thing) &&\n !!thing.constructor &&\n thing.constructor.name === 'Object';\n\nexport const array = thing => (object(thing)\n && (typeof thing.length !== 'undefined')\n && func(thing.splice));\n","import * as is from '@interactjs/utils/is';\nimport * as arr from '@interactjs/utils/arr';\n\nfunction install (scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope;\n\n interactions.signals.on('before-action-move', beforeMove);\n interactions.signals.on('action-resume', beforeMove);\n\n // dragmove\n interactions.signals.on('action-move', move);\n\n Interactable.prototype.draggable = drag.draggable;\n\n actions.drag = drag;\n actions.names.push('drag');\n arr.merge(actions.eventTypes, [\n 'dragstart',\n 'dragmove',\n 'draginertiastart',\n 'dragresume',\n 'dragend',\n ]);\n actions.methodDict.drag = 'draggable';\n\n defaults.drag = drag.defaults;\n}\n\nfunction beforeMove ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return; }\n\n const axis = interaction.prepared.axis;\n\n if (axis === 'x') {\n interaction.coords.cur.page.y = interaction.coords.start.page.y;\n interaction.coords.cur.client.y = interaction.coords.start.client.y;\n\n interaction.coords.velocity.client.y = 0;\n interaction.coords.velocity.page.y = 0;\n }\n else if (axis === 'y') {\n interaction.coords.cur.page.x = interaction.coords.start.page.x;\n interaction.coords.cur.client.x = interaction.coords.start.client.x;\n\n interaction.coords.velocity.client.x = 0;\n interaction.coords.velocity.page.x = 0;\n }\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'drag') { return; }\n\n const axis = interaction.prepared.axis;\n\n if (axis === 'x' || axis === 'y') {\n const opposite = axis === 'x' ? 'y' : 'x';\n\n iEvent.page[opposite] = interaction.coords.start.page[opposite];\n iEvent.client[opposite] = interaction.coords.start.client[opposite];\n iEvent.delta[opposite] = 0;\n }\n}\n\n/**\n * ```js\n * interact(element).draggable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // the axis in which the first movement must be\n * // for the drag sequence to start\n * // 'xy' by default - any direction\n * startAxis: 'x' || 'y' || 'xy',\n *\n * // 'xy' by default - don't restrict to one axis (move in any direction)\n * // 'x' or 'y' to restrict movement to either axis\n * // 'start' to restrict movement to the axis the drag started in\n * lockAxis: 'x' || 'y' || 'xy' || 'start',\n *\n * // max number of drags that can happen concurrently\n * // with elements of this Interactable. Infinity by default\n * max: Infinity,\n *\n * // max number of drags that can target the same element+Interactable\n * // 1 by default\n * maxPerElement: 2\n * });\n *\n * var isDraggable = interact('element').draggable(); // true\n * ```\n *\n * Get or set whether drag actions can be performed on the target\n *\n * @alias Interactable.prototype.draggable\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on drag events (object makes the Interactable\n * draggable)\n * @return {boolean | Interactable} boolean indicating if this can be the\n * target of drag events, or this Interctable\n */\nfunction draggable (options) {\n if (is.object(options)) {\n this.options.drag.enabled = options.enabled === false? false: true;\n this.setPerAction('drag', options);\n this.setOnEvents('drag', options);\n\n if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n this.options.drag.lockAxis = options.lockAxis;\n }\n if (/^(xy|x|y)$/.test(options.startAxis)) {\n this.options.drag.startAxis = options.startAxis;\n }\n\n return this;\n }\n\n if (is.bool(options)) {\n this.options.drag.enabled = options;\n\n return this;\n }\n\n return this.options.drag;\n}\n\nconst drag = {\n install,\n draggable,\n beforeMove,\n move,\n defaults: {\n startAxis : 'xy',\n lockAxis : 'xy',\n },\n\n checker (pointer, event, interactable) {\n const dragOptions = interactable.options.drag;\n\n return dragOptions.enabled\n ? {\n name: 'drag',\n axis: (dragOptions.lockAxis === 'start'\n ? dragOptions.startAxis\n : dragOptions.lockAxis),\n }\n : null;\n },\n\n getCursor () {\n return 'move';\n },\n};\n\nexport default drag;\n","import * as arr from '@interactjs/utils/arr';\n\nclass DropEvent {\n /**\n * Class of events fired on dropzones during drags with acceptable targets.\n */\n constructor (dropStatus, dragEvent, type) {\n const { element, dropzone } = type === 'dragleave'\n ? dropStatus.prev\n : dropStatus.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.interaction = dragEvent.interaction;\n this.draggable = dragEvent.interactable;\n this.timeStamp = dragEvent.timeStamp;\n\n this.propagationStopped = this.immediatePropagationStopped = false;\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 { dropStatus } = this.interaction;\n\n if (\n (this.type !== 'dropactivate') && (\n !this.dropzone ||\n dropStatus.cur.dropzone !== this.dropzone ||\n dropStatus.cur.element !== this.target)) {\n return;\n }\n\n dropStatus.prev.dropzone = this.dropzone;\n dropStatus.prev.element = this.target;\n\n dropStatus.rejected = true;\n dropStatus.events.enter = null;\n\n this.stopImmediatePropagation();\n\n if (this.type === 'dropactivate') {\n const activeDrops = dropStatus.activeDrops;\n const index = arr.findIndex(activeDrops, ({ dropzone, element }) =>\n dropzone === this.dropzone && element === this.target);\n\n dropStatus.activeDrops = [\n ...activeDrops.slice(0, index),\n ...activeDrops.slice(index + 1),\n ];\n\n const deactivateEvent = new DropEvent(dropStatus, this.dragEvent, 'dropdeactivate');\n\n deactivateEvent.dropzone = this.dropzone;\n deactivateEvent.target = this.target;\n\n this.dropzone.fire(deactivateEvent);\n }\n else {\n this.dropzone.fire(new DropEvent(dropStatus, this.dragEvent, 'dragleave'));\n }\n }\n\n preventDefault () {}\n\n stopPropagation () {\n this.propagationStopped = true;\n }\n\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true;\n }\n}\n\nexport default DropEvent;\n","class Signals {\n constructor () {\n this.listeners = {\n // signalName: [listeners],\n };\n }\n\n on (name, listener) {\n if (!this.listeners[name]) {\n this.listeners[name] = [listener];\n return;\n }\n\n this.listeners[name].push(listener);\n }\n\n off (name, listener) {\n if (!this.listeners[name]) { return; }\n\n const index = this.listeners[name].indexOf(listener);\n\n if (index !== -1) {\n this.listeners[name].splice(index, 1);\n }\n }\n\n fire (name, arg) {\n const targetListeners = this.listeners[name];\n\n if (!targetListeners) { return; }\n\n for (const listener of targetListeners) {\n if (listener(arg, name) === false) {\n return false;\n }\n }\n }\n}\n\nexport default Signals;\n","const domObjects = {\n init,\n};\n\nfunction blank () {}\n\nexport default domObjects;\n\nfunction init (window) {\n domObjects.document = window.document;\n domObjects.DocumentFragment = window.DocumentFragment || blank;\n domObjects.SVGElement = window.SVGElement || blank;\n domObjects.SVGSVGElement = window.SVGSVGElement || blank;\n domObjects.SVGElementInstance = window.SVGElementInstance || blank;\n domObjects.Element = window.Element || blank;\n domObjects.HTMLElement = window.HTMLElement || domObjects.Element;\n\n domObjects.Event = window.Event;\n domObjects.Touch = window.Touch || blank;\n domObjects.PointerEvent = (window.PointerEvent || window.MSPointerEvent);\n}\n","import win from './window';\nimport * as is from './is';\nimport domObjects from './domObjects';\n\nconst browser = {\n init,\n};\n\nexport default browser;\n\nfunction init (window) {\n const Element = domObjects.Element;\n const navigator = win.window.navigator;\n\n // Does the browser support touch input?\n browser.supportsTouch = !!(('ontouchstart' in window) || is.func(window.DocumentTouch)\n && domObjects.document instanceof window.DocumentTouch);\n\n // Does the browser support PointerEvents\n browser.supportsPointerEvent = !!domObjects.PointerEvent;\n\n browser.isIOS = (/iP(hone|od|ad)/.test(navigator.platform));\n\n // scrolling doesn't change the result of getClientRects on iOS 7\n browser.isIOS7 = (/iP(hone|od|ad)/.test(navigator.platform)\n && /OS 7[^\\d]/.test(navigator.appVersion));\n\n browser.isIe9 = /MSIE 9/.test(navigator.userAgent);\n\n // prefix matchesSelector\n browser.prefixedMatchesSelector = 'matches' in Element.prototype\n ? 'matches'\n : 'webkitMatchesSelector' in Element.prototype\n ? 'webkitMatchesSelector'\n : 'mozMatchesSelector' in Element.prototype\n ? 'mozMatchesSelector'\n : 'oMatchesSelector' in Element.prototype\n ? 'oMatchesSelector'\n : 'msMatchesSelector';\n\n browser.pEventTypes = (domObjects.PointerEvent\n ? (domObjects.PointerEvent === window.MSPointerEvent\n ? {\n up: 'MSPointerUp',\n down: 'MSPointerDown',\n over: 'mouseover',\n out: 'mouseout',\n move: 'MSPointerMove',\n cancel: 'MSPointerCancel',\n }\n : {\n up: 'pointerup',\n down: 'pointerdown',\n over: 'pointerover',\n out: 'pointerout',\n move: 'pointermove',\n cancel: 'pointercancel',\n })\n : null);\n\n // because Webkit and Opera still use 'mousewheel' event type\n browser.wheelEvent = 'onmousewheel' in domObjects.document? 'mousewheel': 'wheel';\n\n // Opera Mobile must be handled differently\n browser.isOperaMobile = (navigator.appName === 'Opera'\n && browser.supportsTouch\n && navigator.userAgent.match('Presto'));\n}\n","import * as is from './is';\nimport * as arr from './arr';\n\nexport default function clone (source) {\n const dest = {};\n\n for (const prop in source) {\n const value = source[prop];\n\n if (is.plainObject(value)) {\n dest[prop] = clone(value);\n }\n else if (is.array(value)) {\n dest[prop] = arr.from(value);\n }\n else {\n dest[prop] = value;\n }\n }\n\n return dest;\n}\n","import win from './window';\nimport browser from './browser';\nimport * as is from './is';\nimport domObjects from './domObjects';\n\nexport function nodeContains (parent, child) {\n while (child) {\n if (child === parent) {\n return true;\n }\n\n child = child.parentNode;\n }\n\n return false;\n}\n\nexport function closest (element, selector) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) { return element; }\n\n element = parentNode(element);\n }\n\n return null;\n}\n\nexport function parentNode (node) {\n let parent = node.parentNode;\n\n if (is.docFrag(parent)) {\n // skip past #shado-root fragments\n while ((parent = parent.host) && is.docFrag(parent)) {\n continue;\n }\n\n return parent;\n }\n\n return parent;\n}\n\nexport function matchesSelector (element, selector) {\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (win.window !== win.realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ');\n }\n\n return element[browser.prefixedMatchesSelector](selector);\n}\n\n// Test for the element that's \"above\" all other qualifiers\nexport function indexOfDeepestElement (elements) {\n let deepestZoneParents = [];\n let dropzoneParents = [];\n let dropzone;\n let deepestZone = elements[0];\n let index = deepestZone? 0: -1;\n let parent;\n let child;\n let i;\n let n;\n\n for (i = 1; i < elements.length; i++) {\n dropzone = elements[i];\n\n // an element might belong to multiple selector dropzones\n if (!dropzone || dropzone === deepestZone) {\n continue;\n }\n\n if (!deepestZone) {\n deepestZone = dropzone;\n index = i;\n continue;\n }\n\n // check if the deepest or current are document.documentElement or document.rootElement\n // - if the current dropzone is, do nothing and continue\n if (dropzone.parentNode === dropzone.ownerDocument) {\n continue;\n }\n // - if deepest is, update with the current dropzone and continue to next\n else if (deepestZone.parentNode === dropzone.ownerDocument) {\n deepestZone = dropzone;\n index = i;\n continue;\n }\n\n if (!deepestZoneParents.length) {\n parent = deepestZone;\n while (parent.parentNode && parent.parentNode !== parent.ownerDocument) {\n deepestZoneParents.unshift(parent);\n parent = parent.parentNode;\n }\n }\n\n // if this element is an svg element and the current deepest is\n // an HTMLElement\n if (deepestZone instanceof domObjects.HTMLElement\n && dropzone instanceof domObjects.SVGElement\n && !(dropzone instanceof domObjects.SVGSVGElement)) {\n\n if (dropzone === deepestZone.parentNode) {\n continue;\n }\n\n parent = dropzone.ownerSVGElement;\n }\n else {\n parent = dropzone;\n }\n\n dropzoneParents = [];\n\n while (parent.parentNode !== parent.ownerDocument) {\n dropzoneParents.unshift(parent);\n parent = parent.parentNode;\n }\n\n n = 0;\n\n // get (position of last common ancestor) + 1\n while (dropzoneParents[n] && dropzoneParents[n] === deepestZoneParents[n]) {\n n++;\n }\n\n const parents = [\n dropzoneParents[n - 1],\n dropzoneParents[n],\n deepestZoneParents[n],\n ];\n\n child = parents[0].lastChild;\n\n while (child) {\n if (child === parents[1]) {\n deepestZone = dropzone;\n index = i;\n deepestZoneParents = [];\n\n break;\n }\n else if (child === parents[2]) {\n break;\n }\n\n child = child.previousSibling;\n }\n }\n\n return index;\n}\n\nexport function matchesUpTo (element, selector, limit) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return true;\n }\n\n element = parentNode(element);\n\n if (element === limit) {\n return matchesSelector(element, selector);\n }\n }\n\n return false;\n}\n\nexport function getActualElement (element) {\n return (element instanceof domObjects.SVGElementInstance\n ? element.correspondingUseElement\n : element);\n}\n\nexport function getScrollXY (relevantWindow) {\n relevantWindow = relevantWindow || win.window;\n return {\n x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft,\n y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop,\n };\n}\n\nexport function getElementClientRect (element) {\n const clientRect = (element instanceof domObjects.SVGElement\n ? element.getBoundingClientRect()\n : element.getClientRects()[0]);\n\n return clientRect && {\n left : clientRect.left,\n right : clientRect.right,\n top : clientRect.top,\n bottom: clientRect.bottom,\n width : clientRect.width || clientRect.right - clientRect.left,\n height: clientRect.height || clientRect.bottom - clientRect.top,\n };\n}\n\nexport function getElementRect (element) {\n const clientRect = getElementClientRect(element);\n\n if (!browser.isIOS7 && clientRect) {\n const scroll = getScrollXY(win.getWindow(element));\n\n clientRect.left += scroll.x;\n clientRect.right += scroll.x;\n clientRect.top += scroll.y;\n clientRect.bottom += scroll.y;\n }\n\n return clientRect;\n}\n\nexport function getPath (element) {\n const path = [];\n\n while (element) {\n path.push(element);\n element = parentNode(element);\n }\n\n return path;\n}\n\nexport function trySelector (value) {\n if (!is.string(value)) { return false; }\n\n // an exception will be raised if it is invalid\n domObjects.document.querySelector(value);\n return true;\n}\n","export default function pointerExtend (dest, source) {\n for (const prop in source) {\n const prefixedPropREs = pointerExtend.prefixedPropREs;\n let deprecated = false;\n\n // skip deprecated prefixed properties\n for (const vendor in prefixedPropREs) {\n if (prop.indexOf(vendor) === 0 && prefixedPropREs[vendor].test(prop)) {\n deprecated = true;\n break;\n }\n }\n\n if (!deprecated && typeof source[prop] !== 'function') {\n dest[prop] = source[prop];\n }\n }\n return dest;\n}\n\npointerExtend.prefixedPropREs = {\n webkit: /(Movement[XY]|Radius[XY]|RotationAngle|Force)$/,\n};\n","export default (x, y) => Math.sqrt(x * x + y * y);\n","import hypot from './hypot';\nimport browser from './browser';\nimport dom from './domObjects';\nimport * as domUtils from './domUtils';\nimport domObjects from './domObjects';\nimport * as is from './is';\nimport pointerExtend from './pointerExtend';\n\nconst pointerUtils = {\n copyCoords: function (dest, src) {\n dest.page = dest.page || {};\n dest.page.x = src.page.x;\n dest.page.y = src.page.y;\n\n dest.client = dest.client || {};\n dest.client.x = src.client.x;\n dest.client.y = src.client.y;\n\n dest.timeStamp = src.timeStamp;\n },\n\n setCoordDeltas: function (targetObj, prev, cur) {\n targetObj.page.x = cur.page.x - prev.page.x;\n targetObj.page.y = cur.page.y - prev.page.y;\n targetObj.client.x = cur.client.x - prev.client.x;\n targetObj.client.y = cur.client.y - prev.client.y;\n targetObj.timeStamp = cur.timeStamp - prev.timeStamp;\n },\n\n setCoordVelocity (targetObj, delta) {\n const dt = Math.max(delta.timeStamp / 1000, 0.001);\n\n targetObj.page.x = delta.page.x / dt;\n targetObj.page.y = delta.page.y / dt;\n targetObj.client.x = delta.client.x / dt;\n targetObj.client.y = delta.client.y / dt;\n targetObj.timeStamp = dt;\n },\n\n isNativePointer: function (pointer) {\n return (pointer instanceof dom.Event || pointer instanceof dom.Touch);\n },\n\n // Get specified X/Y coords for mouse or event.touches[0]\n getXY: function (type, pointer, xy) {\n xy = xy || {};\n type = type || 'page';\n\n xy.x = pointer[type + 'X'];\n xy.y = pointer[type + 'Y'];\n\n return xy;\n },\n\n getPageXY: function (pointer, page) {\n page = page || {};\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n pointerUtils.getXY('screen', pointer, page);\n\n page.x += window.scrollX;\n page.y += window.scrollY;\n }\n else {\n pointerUtils.getXY('page', pointer, page);\n }\n\n return page;\n },\n\n getClientXY: function (pointer, client) {\n client = client || {};\n\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n pointerUtils.getXY('screen', pointer, client);\n }\n else {\n pointerUtils.getXY('client', pointer, client);\n }\n\n return client;\n },\n\n getPointerId: function (pointer) {\n return is.number(pointer.pointerId)? pointer.pointerId : pointer.identifier;\n },\n\n setCoords: function (targetObj, pointers, timeStamp) {\n const pointer = (pointers.length > 1\n ? pointerUtils.pointerAverage(pointers)\n : pointers[0]);\n\n const tmpXY = {};\n\n pointerUtils.getPageXY(pointer, tmpXY);\n targetObj.page.x = tmpXY.x;\n targetObj.page.y = tmpXY.y;\n\n pointerUtils.getClientXY(pointer, tmpXY);\n targetObj.client.x = tmpXY.x;\n targetObj.client.y = tmpXY.y;\n\n targetObj.timeStamp = is.number(timeStamp) ? timeStamp :new Date().getTime();\n },\n\n pointerExtend: pointerExtend,\n\n getTouchPair: function (event) {\n const touches = [];\n\n // array of touches is supplied\n if (is.array(event)) {\n touches[0] = event[0];\n touches[1] = event[1];\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0];\n touches[1] = event.changedTouches[0];\n }\n else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0];\n touches[1] = event.changedTouches[1];\n }\n }\n else {\n touches[0] = event.touches[0];\n touches[1] = event.touches[1];\n }\n }\n\n return touches;\n },\n\n pointerAverage: function (pointers) {\n const average = {\n pageX : 0,\n pageY : 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n };\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop] += pointer[prop];\n }\n }\n for (const prop in average) {\n average[prop] /= pointers.length;\n }\n\n return average;\n },\n\n touchBBox: function (event) {\n if (!event.length && !(event.touches && event.touches.length > 1)) {\n return;\n }\n\n const touches = pointerUtils.getTouchPair(event);\n const minX = Math.min(touches[0].pageX, touches[1].pageX);\n const minY = Math.min(touches[0].pageY, touches[1].pageY);\n const maxX = Math.max(touches[0].pageX, touches[1].pageX);\n const maxY = Math.max(touches[0].pageY, touches[1].pageY);\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n },\n\n touchDistance: function (event, deltaSource) {\n const sourceX = deltaSource + 'X';\n const sourceY = deltaSource + 'Y';\n const touches = pointerUtils.getTouchPair(event);\n\n\n const dx = touches[0][sourceX] - touches[1][sourceX];\n const dy = touches[0][sourceY] - touches[1][sourceY];\n\n return hypot(dx, dy);\n },\n\n touchAngle: function (event, prevAngle, deltaSource) {\n const sourceX = deltaSource + 'X';\n const sourceY = deltaSource + 'Y';\n const touches = pointerUtils.getTouchPair(event);\n const dx = touches[1][sourceX] - touches[0][sourceX];\n const dy = touches[1][sourceY] - touches[0][sourceY];\n const angle = 180 * Math.atan2(dy , dx) / Math.PI;\n\n return angle;\n },\n\n getPointerType: function (pointer) {\n return is.string(pointer.pointerType)\n ? pointer.pointerType\n : is.number(pointer.pointerType)\n ? [undefined, undefined,'touch', 'pen', 'mouse'][pointer.pointerType]\n // if the PointerEvent API isn't available, then the \"pointer\" must\n // be either a MouseEvent, TouchEvent, or Touch object\n : /touch/.test(pointer.type) || pointer instanceof domObjects.Touch\n ? 'touch'\n : 'mouse';\n },\n\n // [ event.target, event.currentTarget ]\n getEventTargets: function (event) {\n const path = is.func(event.composedPath) ? event.composedPath() : event.path;\n\n return [\n domUtils.getActualElement(path ? path[0] : event.target),\n domUtils.getActualElement(event.currentTarget),\n ];\n },\n\n newCoords () {\n return {\n page : { x: 0, y: 0 },\n client : { x: 0, y: 0 },\n timeStamp: 0,\n };\n },\n\n coordsToEvent: function ({ page, client, timeStamp }) {\n return {\n page,\n client,\n timeStamp,\n get pageX () { return page.x; },\n get pageY () { return page.y; },\n get clientX () { return client.x; },\n get clientY () { return client.y; },\n };\n },\n};\n\nexport default pointerUtils;\n","import * as is from './is';\nimport * as domUtils from './domUtils';\nimport pointerUtils from './pointerUtils';\nimport pExtend from './pointerExtend';\n\nimport { contains } from './arr';\n\nconst elements = [];\nconst targets = [];\n\n// {\n// type: {\n// selectors: ['selector', ...],\n// contexts : [document, ...],\n// listeners: [[listener, capture, passive], ...]\n// }\n// }\nconst delegatedEvents = {};\nconst documents = [];\n\nfunction add (element, type, listener, optionalArg) {\n const options = getOptions(optionalArg);\n let elementIndex = elements.indexOf(element);\n let target = targets[elementIndex];\n\n if (!target) {\n target = {\n events: {},\n typeCount: 0,\n };\n\n elementIndex = elements.push(element) - 1;\n targets.push(target);\n }\n\n if (!target.events[type]) {\n target.events[type] = [];\n target.typeCount++;\n }\n\n if (!contains(target.events[type], listener)) {\n element.addEventListener(type, listener, events.supportsOptions? options : !!options.capture);\n target.events[type].push(listener);\n }\n}\n\nfunction remove (element, type, listener, optionalArg) {\n const options = getOptions(optionalArg);\n const elementIndex = elements.indexOf(element);\n const target = targets[elementIndex];\n\n if (!target || !target.events) {\n return;\n }\n\n if (type === 'all') {\n for (type in target.events) {\n if (target.events.hasOwnProperty(type)) {\n remove(element, type, 'all');\n }\n }\n return;\n }\n\n if (target.events[type]) {\n const len = target.events[type].length;\n\n if (listener === 'all') {\n for (let i = 0; i < len; i++) {\n remove(element, type, target.events[type][i], options);\n }\n return;\n }\n else {\n for (let i = 0; i < len; i++) {\n if (target.events[type][i] === listener) {\n element.removeEventListener(type, listener, events.supportsOptions? options : !!options.capture);\n target.events[type].splice(i, 1);\n\n break;\n }\n }\n }\n\n if (target.events[type] && target.events[type].length === 0) {\n target.events[type] = null;\n target.typeCount--;\n }\n }\n\n if (!target.typeCount) {\n targets.splice(elementIndex, 1);\n elements.splice(elementIndex, 1);\n }\n}\n\nfunction addDelegate (selector, context, type, listener, optionalArg) {\n const options = getOptions(optionalArg);\n if (!delegatedEvents[type]) {\n delegatedEvents[type] = {\n selectors: [],\n contexts : [],\n listeners: [],\n };\n\n // add delegate listener functions\n for (const doc of documents) {\n add(doc, type, delegateListener);\n add(doc, type, delegateUseCapture, true);\n }\n }\n\n const delegated = delegatedEvents[type];\n let index;\n\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n if (delegated.selectors[index] === selector\n && delegated.contexts[index] === context) {\n break;\n }\n }\n\n if (index === -1) {\n index = delegated.selectors.length;\n\n delegated.selectors.push(selector);\n delegated.contexts .push(context);\n delegated.listeners.push([]);\n }\n\n // keep listener and capture and passive flags\n delegated.listeners[index].push([listener, !!options.capture, options.passive]);\n}\n\nfunction removeDelegate (selector, context, type, listener, optionalArg) {\n const options = getOptions(optionalArg);\n const delegated = delegatedEvents[type];\n let matchFound = false;\n let index;\n\n if (!delegated) { return; }\n\n // count from last index of delegated to 0\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n // look for matching selector and context Node\n if (delegated.selectors[index] === selector\n && delegated.contexts[index] === context) {\n\n const listeners = delegated.listeners[index];\n\n // each item of the listeners array is an array: [function, capture, passive]\n for (let i = listeners.length - 1; i >= 0; i--) {\n const [fn, capture, passive] = listeners[i];\n\n // check if the listener functions and capture and passive flags match\n if (fn === listener && capture === !!options.capture && passive === options.passive) {\n // remove the listener from the array of listeners\n listeners.splice(i, 1);\n\n // if all listeners for this interactable have been removed\n // remove the interactable from the delegated arrays\n if (!listeners.length) {\n delegated.selectors.splice(index, 1);\n delegated.contexts .splice(index, 1);\n delegated.listeners.splice(index, 1);\n\n // remove delegate function from context\n remove(context, type, delegateListener);\n remove(context, type, delegateUseCapture, true);\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegatedEvents[type] = null;\n }\n }\n\n // only remove one listener\n matchFound = true;\n break;\n }\n }\n\n if (matchFound) { break; }\n }\n }\n}\n\n// bound to the interactable context when a DOM event\n// listener is added to a selector interactable\nfunction delegateListener (event, optionalArg) {\n const options = getOptions(optionalArg);\n const fakeEvent = {};\n const delegated = delegatedEvents[event.type];\n const [eventTarget] = (pointerUtils.getEventTargets(event));\n let element = eventTarget;\n\n // duplicate the event so that currentTarget can be changed\n pExtend(fakeEvent, event);\n\n fakeEvent.originalEvent = event;\n fakeEvent.preventDefault = preventOriginalDefault;\n\n // climb up document tree looking for selector matches\n while (is.element(element)) {\n for (let i = 0; i < delegated.selectors.length; i++) {\n const selector = delegated.selectors[i];\n const context = delegated.contexts[i];\n\n if (domUtils.matchesSelector(element, selector)\n && domUtils.nodeContains(context, eventTarget)\n && domUtils.nodeContains(context, element)) {\n\n const listeners = delegated.listeners[i];\n\n fakeEvent.currentTarget = element;\n\n for (let j = 0; j < listeners.length; j++) {\n const [fn, capture, passive] = listeners[j];\n\n if (capture === !!options.capture && passive === options.passive) {\n fn(fakeEvent);\n }\n }\n }\n }\n\n element = domUtils.parentNode(element);\n }\n}\n\nfunction delegateUseCapture (event) {\n return delegateListener.call(this, event, true);\n}\n\nfunction preventOriginalDefault () {\n this.originalEvent.preventDefault();\n}\n\nfunction getOptions (param) {\n return is.object(param)? param : { capture: param };\n}\n\nconst events = {\n add,\n remove,\n\n addDelegate,\n removeDelegate,\n\n delegateListener,\n delegateUseCapture,\n delegatedEvents,\n documents,\n\n supportsOptions: false,\n supportsPassive: false,\n\n _elements: elements,\n _targets: targets,\n\n init (window) {\n window.document.createElement('div').addEventListener('test', null, {\n get capture () { return (events.supportsOptions = true); },\n get passive () { return (events.supportsPassive = true); },\n });\n },\n};\n\nexport default events;\n","export default function extend (dest, source) {\n for (const prop in source) {\n dest[prop] = source[prop];\n }\n return dest;\n}\n","import extend from './extend';\nimport * as is from './is';\nimport {\n closest,\n parentNode,\n getElementRect,\n} from './domUtils';\n\nexport function getStringOptionResult (value, interactable, element) {\n if (!is.string(value)) {\n return null;\n }\n\n if (value === 'parent') {\n value = parentNode(element);\n }\n else if (value === 'self') {\n value = interactable.getRect(element);\n }\n else {\n value = closest(element, value);\n }\n\n return value;\n}\n\nexport function resolveRectLike (value, interactable, element, functionArgs) {\n value = getStringOptionResult(value, interactable, element) || value;\n\n if (is.func(value)) {\n value = value.apply(null, functionArgs);\n }\n\n if (is.element(value)) {\n value = getElementRect(value);\n }\n\n return value;\n}\n\nexport function rectToXY (rect) {\n return rect && {\n x: 'x' in rect ? rect.x : rect.left,\n y: 'y' in rect ? rect.y : rect.top,\n };\n}\n\nexport function xywhToTlbr (rect) {\n if (rect && !('left' in rect && 'top' in rect)) {\n rect = extend({}, rect);\n\n rect.left = rect.x || 0;\n rect.top = rect.y || 0;\n rect.right = rect.right || (rect.left + rect.width);\n rect.bottom = rect.bottom || (rect.top + rect.height);\n }\n\n return rect;\n}\n\nexport function tlbrToXywh (rect) {\n if (rect && !('x' in rect && 'y' in rect)) {\n rect = extend({}, rect);\n\n rect.x = rect.left || 0;\n rect.y = rect.top || 0;\n rect.width = rect.width || (rect.right - rect.x);\n rect.height = rect.height || (rect.bottom - rect.y);\n }\n\n return rect;\n}\n\nexport default {\n getStringOptionResult,\n resolveRectLike,\n rectToXY,\n xywhToTlbr,\n tlbrToXywh,\n};\n","import {\n resolveRectLike,\n rectToXY,\n} from './rect';\n\nexport default function (target, element, action) {\n const actionOptions = target.options[action];\n const actionOrigin = actionOptions && actionOptions.origin;\n const origin = actionOrigin || target.options.origin;\n\n const originRect = resolveRectLike(origin, target, element, [target && element]);\n\n return rectToXY(originRect) || { x: 0, y: 0 };\n}\n","import * as is from './is';\nimport extend from './extend';\n\nexport default function normalize (type, listener, result) {\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((acc, t) => extend(acc, normalize(t, listener, result)), {});\n }\n\n // ({ type: fn }) -> ('', { type: fn })\n if (is.object(type)) {\n listener = type;\n type = '';\n }\n\n if (is.func(listener)) {\n result[type] = result[type] || [];\n result[type].push(listener);\n }\n else if (is.array(listener)) {\n for (const l of listener) {\n normalize(type, l, result);\n }\n }\n else if (is.object(listener)) {\n for (const prefix in listener) {\n const combinedTypes = split(prefix).map(p => `${type}${p}`);\n\n normalize(combinedTypes, listener[prefix], result);\n }\n }\n\n return result;\n}\n\nfunction split (type) {\n return type.trim().split(/ +/);\n}\n","let lastTime = 0;\nlet request;\nlet cancel;\n\nfunction init (window) {\n request = window.requestAnimationFrame;\n cancel = window.cancelAnimationFrame;\n\n if (!request) {\n const vendors = ['ms', 'moz', 'webkit', 'o'];\n\n for (const vendor of vendors) {\n request = window[`${vendor}RequestAnimationFrame`];\n cancel = window[`${vendor}CancelAnimationFrame`] || window[`${vendor}CancelRequestAnimationFrame`];\n }\n }\n\n if (!request) {\n request = callback => {\n const currTime = new Date().getTime();\n const timeToCall = Math.max(0, 16 - (currTime - lastTime));\n const token = setTimeout(function () { callback(currTime + timeToCall); },\n timeToCall);\n\n lastTime = currTime + timeToCall;\n return token;\n };\n\n cancel = token => clearTimeout(token);\n }\n}\n\nexport default {\n request: callback => request(callback),\n cancel: token => cancel(token),\n init,\n};\n","import win from './window';\n\nexport function warnOnce (method, message) {\n let warned = false;\n\n return function () {\n if (!warned) {\n win.window.console.warn(message);\n warned = true;\n }\n\n return method.apply(this, arguments);\n };\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nexport function _getQBezierValue (t, p1, p2, p3) {\n const iT = 1 - t;\n return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3;\n}\n\nexport function getQuadraticCurvePoint (startX, startY, cpX, cpY, endX, endY, position) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY),\n };\n}\n\n// http://gizma.com/easing/\nexport function easeOutQuad (t, b, c, d) {\n t /= d;\n return -c * t*(t-2) + b;\n}\n\nexport function copyAction (dest, src) {\n dest.name = src.name;\n dest.axis = src.axis;\n dest.edges = src.edges;\n\n return dest;\n}\n\nimport * as arr from './arr';\nimport * as dom from './domUtils';\nimport * as is from './is';\n\nexport {\n win,\n arr,\n dom,\n is,\n};\n\nexport { default as browser } from './browser';\nexport { default as Signals } from './Signals';\nexport { default as raf } from './raf';\nexport { default as extend } from './extend';\nexport { default as clone } from './clone';\nexport { default as getOriginXY } from './getOriginXY';\nexport { default as pointer } from './pointerUtils';\nexport { default as rect } from './rect';\nexport { default as events } from './events';\nexport { default as hypot } from './hypot';\nexport { default as normalizeListeners } from './normalizeListeners';\n","import * as utils from '@interactjs/utils';\nimport DropEvent from './DropEvent';\n\nfunction install (scope) {\n const {\n actions,\n /** @lends module:interact */\n interact,\n /** @lends Interactable */\n Interactable,\n interactions,\n defaults,\n } = scope;\n\n interactions.signals.on('after-action-start', function ({ interaction, event, iEvent: dragEvent }) {\n if (interaction.prepared.name !== 'drag') { return; }\n\n const { dropStatus } = interaction;\n\n // reset active dropzones\n dropStatus.activeDrops = null;\n dropStatus.events = null;\n\n if (!scope.dynamicDrop) {\n dropStatus.activeDrops = getActiveDrops(scope, interaction.element);\n }\n\n dropStatus.events = getDropEvents(interaction, event, dragEvent);\n\n if (dropStatus.events.activate) {\n fireActivationEvents(dropStatus.activeDrops, dropStatus.events.activate);\n }\n });\n\n interactions.signals.on('action-move', arg => onEventCreated(arg, scope));\n interactions.signals.on('action-end' , arg => onEventCreated(arg, scope));\n\n interactions.signals.on('after-action-move', function ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return; }\n\n fireDropEvents(interaction, interaction.dropStatus.events);\n interaction.dropStatus.events = {};\n });\n\n interactions.signals.on('after-action-end', function ({ interaction }) {\n if (interaction.prepared.name === 'drag') {\n fireDropEvents(interaction, interaction.dropStatus.events);\n }\n });\n\n interactions.signals.on('stop', function ({ interaction }) {\n interaction.dropStatus.activeDrops = null;\n interaction.dropStatus.events = null;\n });\n\n interactions.signals.on('new', function (interaction) {\n interaction.dropStatus = {\n cur: {\n dropzone : null, // the dropzone a drag target might be dropped into\n element : null, // the element at the time of checking\n },\n prev: {\n dropzone : null, // the dropzone that was recently dragged away from\n element : null, // the element at the time of checking\n },\n rejected : false, // wheather the potential drop was rejected from a listener\n events : null, // the drop events related to the current drag event\n activeDrops: null, // an array of { dropzone, element, rect }\n };\n });\n\n interactions.signals.on('stop', function ({ interaction: { dropStatus } }) {\n dropStatus.cur.dropzone = dropStatus.cur.element =\n dropStatus.prev.dropzone = dropStatus.prev.element = null;\n dropStatus.rejected = false;\n });\n\n Interactable.prototype.dropzone = function (options) {\n return dropzoneMethod(this, options);\n };\n\n Interactable.prototype.dropCheck = function (dragEvent, event, draggable, draggableElement, dropElement, rect) {\n return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect);\n };\n\n /**\n * Returns or sets whether the dimensions of dropzone elements are calculated\n * on every dragmove or only on dragstart for the default dropChecker\n *\n * @param {boolean} [newValue] True to check on each move. False to check only\n * before start\n * @return {boolean | interact} The current setting or interact\n */\n interact.dynamicDrop = function (newValue) {\n if (utils.is.bool(newValue)) {\n //if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n // calcRects(dropzones);\n //}\n\n scope.dynamicDrop = newValue;\n\n return interact;\n }\n return scope.dynamicDrop;\n };\n\n utils.arr.merge(actions.eventTypes, [\n 'dragenter',\n 'dragleave',\n 'dropactivate',\n 'dropdeactivate',\n 'dropmove',\n 'drop',\n ]);\n actions.methodDict.drop = 'dropzone';\n\n scope.dynamicDrop = false;\n\n defaults.drop = drop.defaults;\n}\n\nfunction collectDrops ({ interactables }, draggableElement) {\n const drops = [];\n\n // collect all dropzones and their elements which qualify for a drop\n for (const dropzone of interactables.list) {\n if (!dropzone.options.drop.enabled) { continue; }\n\n const accept = dropzone.options.drop.accept;\n\n // test the draggable draggableElement against the dropzone's accept setting\n if ((utils.is.element(accept) && accept !== draggableElement)\n || (utils.is.string(accept)\n && !utils.dom.matchesSelector(draggableElement, accept))\n || (utils.is.func(accept) && !accept({ dropzone, draggableElement }))) {\n\n continue;\n }\n\n // query for new elements if necessary\n const dropElements = utils.is.string(dropzone.target)\n ? dropzone._context.querySelectorAll(dropzone.target)\n : utils.is.array(dropzone.target) ? dropzone.target : [dropzone.target];\n\n for (const dropzoneElement of dropElements) {\n if (dropzoneElement !== draggableElement) {\n drops.push({\n dropzone,\n element: dropzoneElement,\n });\n }\n }\n }\n\n return drops;\n}\n\nfunction fireActivationEvents (activeDrops, event) {\n // loop through all active dropzones and trigger event\n for (const { dropzone, element } of activeDrops) {\n event.dropzone = dropzone;\n\n // set current element as event target\n event.target = element;\n dropzone.fire(event);\n event.propagationStopped = event.immediatePropagationStopped = false;\n }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops (scope, dragElement) {\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 ({ dropStatus, target: draggable, element: dragElement }, dragEvent, pointerEvent) {\n const validDrops = [];\n\n // collect all dropzones and their elements which qualify for a drop\n for (const { dropzone, element: dropzoneElement, rect } of dropStatus.activeDrops) {\n validDrops.push(dropzone.dropCheck(dragEvent, pointerEvent, draggable, dragElement, dropzoneElement, rect)\n ? dropzoneElement\n : null);\n }\n\n // get the most appropriate dropzone based on DOM depth and order\n const dropIndex = utils.dom.indexOfDeepestElement(validDrops);\n\n return dropStatus.activeDrops[dropIndex] || null;\n}\n\nfunction getDropEvents (interaction, pointerEvent, dragEvent) {\n const { dropStatus } = 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(dropStatus, dragEvent, 'dropactivate');\n\n dropEvents.activate.target = null;\n dropEvents.activate.dropzone = null;\n }\n if (dragEvent.type === 'dragend') {\n dropEvents.deactivate = new DropEvent(dropStatus, dragEvent, 'dropdeactivate');\n\n dropEvents.deactivate.target = null;\n dropEvents.deactivate.dropzone = null;\n }\n\n if (dropStatus.rejected) {\n return dropEvents;\n }\n\n if (dropStatus.cur.element !== dropStatus.prev.element) {\n // if there was a previous dropzone, create a dragleave event\n if (dropStatus.prev.dropzone) {\n dropEvents.leave = new DropEvent(dropStatus, dragEvent, 'dragleave');\n\n dragEvent.dragLeave = dropEvents.leave.target = dropStatus.prev.element;\n dragEvent.prevDropzone = dropEvents.leave.dropzone = dropStatus.prev.dropzone;\n }\n // if dropzone is not null, create a dragenter event\n if (dropStatus.cur.dropzone) {\n dropEvents.enter = new DropEvent(dropStatus, dragEvent, 'dragenter');\n\n dragEvent.dragEnter = dropStatus.cur.element;\n dragEvent.dropzone = dropStatus.cur.dropzone;\n }\n }\n\n if (dragEvent.type === 'dragend' && dropStatus.cur.dropzone) {\n dropEvents.drop = new DropEvent(dropStatus, dragEvent, 'drop');\n\n dragEvent.dropzone = dropStatus.cur.dropzone;\n dragEvent.relatedTarget = dropStatus.cur.element;\n }\n if (dragEvent.type === 'dragmove' && dropStatus.cur.dropzone) {\n dropEvents.move = new DropEvent(dropStatus, dragEvent, 'dropmove');\n\n dropEvents.move.dragmove = dragEvent;\n dragEvent.dropzone = dropStatus.cur.dropzone;\n }\n\n return dropEvents;\n}\n\nfunction fireDropEvents (interaction, events) {\n const { dropStatus } = interaction;\n const {\n activeDrops,\n cur,\n prev,\n } = dropStatus;\n\n if (events.leave) { prev.dropzone.fire(events.leave); }\n if (events.move ) { cur.dropzone.fire(events.move ); }\n if (events.enter) { cur.dropzone.fire(events.enter); }\n if (events.drop ) { cur.dropzone.fire(events.drop ); }\n\n if (events.deactivate) {\n fireActivationEvents(activeDrops, events.deactivate);\n }\n\n dropStatus.prev.dropzone = cur.dropzone;\n dropStatus.prev.element = cur.element;\n}\n\nfunction onEventCreated ({ interaction, iEvent, event }, scope) {\n if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') { return; }\n\n const { dropStatus } = interaction;\n\n if (scope.dynamicDrop) {\n dropStatus.activeDrops = getActiveDrops(scope, interaction.target, interaction.element);\n }\n\n const dragEvent = iEvent;\n const dropResult = getDrop(interaction, dragEvent, event);\n\n // update rejected status\n dropStatus.rejected = dropStatus.rejected &&\n !!dropResult &&\n dropResult.dropzone === dropStatus.cur.dropzone &&\n dropResult.element === dropStatus.cur.element;\n\n dropStatus.cur.dropzone = dropResult && dropResult.dropzone;\n dropStatus.cur.element = dropResult && dropResult.element;\n\n dropStatus.events = getDropEvents(interaction, event, dragEvent);\n}\n\n/**\n * ```js\n * interact(target)\n * .dropChecker(function(dragEvent, // related dragmove or dragend event\n * event, // TouchEvent/PointerEvent/MouseEvent\n * dropped, // bool result of the default checker\n * dropzone, // dropzone Interactable\n * dropElement, // dropzone elemnt\n * draggable, // draggable Interactable\n * draggableElement) {// draggable element\n *\n * return dropped && event.target.hasAttribute('allow-drop');\n * }\n * ```\n *\n * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param {boolean | object | null} [options] The new options to be set.\n * @return {boolean | Interactable} The current setting or this Interactable\n */\nfunction dropzoneMethod (interactable, options) {\n if (utils.is.object(options)) {\n interactable.options.drop.enabled = options.enabled === false? false: true;\n\n if (options.listeners) {\n const normalized = utils.normalizeListeners(options.listeners);\n // rename 'drop' to '' as it will be prefixed with 'drop'\n const corrected = Object.keys(normalized).reduce((acc, type) => {\n const correctedType = /^(enter|leave)/.test(type)\n ? `drag${type}`\n : /^(activate|deactivate|move)/.test(type)\n ? `drop${type}`\n : type;\n\n acc[correctedType] = normalized[type];\n\n return acc;\n }, {});\n\n interactable.off(interactable.options.drop.listeners);\n interactable.on(corrected);\n interactable.options.drop.listeners = corrected;\n }\n\n if (utils.is.func(options.ondrop) ) { interactable.on('drop' , options.ondrop ); }\n if (utils.is.func(options.ondropactivate) ) { interactable.on('dropactivate' , options.ondropactivate ); }\n if (utils.is.func(options.ondropdeactivate)) { interactable.on('dropdeactivate', options.ondropdeactivate); }\n if (utils.is.func(options.ondragenter) ) { interactable.on('dragenter' , options.ondragenter ); }\n if (utils.is.func(options.ondragleave) ) { interactable.on('dragleave' , options.ondragleave ); }\n if (utils.is.func(options.ondropmove) ) { interactable.on('dropmove' , options.ondropmove ); }\n\n if (/^(pointer|center)$/.test(options.overlap)) {\n interactable.options.drop.overlap = options.overlap;\n }\n else if (utils.is.number(options.overlap)) {\n interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0);\n }\n if ('accept' in options) {\n interactable.options.drop.accept = options.accept;\n }\n if ('checker' in options) {\n interactable.options.drop.checker = options.checker;\n }\n\n\n return interactable;\n }\n\n if (utils.is.bool(options)) {\n interactable.options.drop.enabled = options;\n\n return interactable;\n }\n\n return interactable.options.drop;\n}\n\nfunction dropCheckMethod (interactable, dragEvent, event, draggable, draggableElement, dropElement, rect) {\n let dropped = false;\n\n // if the dropzone has no rect (eg. display: none)\n // call the custom dropChecker or just return false\n if (!(rect = rect || interactable.getRect(dropElement))) {\n return (interactable.options.drop.checker\n ? interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n : false);\n }\n\n const dropOverlap = interactable.options.drop.overlap;\n\n if (dropOverlap === 'pointer') {\n const origin = utils.getOriginXY(draggable, draggableElement, 'drag');\n const page = utils.pointer.getPageXY(dragEvent);\n\n page.x += origin.x;\n page.y += origin.y;\n\n const horizontal = (page.x > rect.left) && (page.x < rect.right);\n const vertical = (page.y > rect.top ) && (page.y < rect.bottom);\n\n dropped = horizontal && vertical;\n }\n\n const dragRect = draggable.getRect(draggableElement);\n\n if (dragRect && dropOverlap === 'center') {\n const cx = dragRect.left + dragRect.width / 2;\n const cy = dragRect.top + dragRect.height / 2;\n\n dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom;\n }\n\n if (dragRect && utils.is.number(dropOverlap)) {\n const overlapArea = (Math.max(0, Math.min(rect.right , dragRect.right ) - Math.max(rect.left, dragRect.left))\n * Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top , dragRect.top )));\n\n const overlapRatio = overlapArea / (dragRect.width * dragRect.height);\n\n dropped = overlapRatio >= dropOverlap;\n }\n\n if (interactable.options.drop.checker) {\n dropped = interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement);\n }\n\n return dropped;\n}\n\n\nconst drop = {\n install,\n getActiveDrops,\n getDrop,\n getDropEvents,\n fireDropEvents,\n defaults: {\n enabled: false,\n accept : null,\n overlap: 'pointer',\n },\n};\n\nexport default drop;\n","export default {\n base: {\n preventDefault: 'auto',\n deltaSource : 'page',\n },\n\n perAction: {\n enabled : false,\n origin: { x: 0, y: 0 },\n },\n};\n","import extend from '@interactjs/utils/extend';\nimport getOriginXY from '@interactjs/utils/getOriginXY';\nimport defaults from './defaultOptions';\nimport hypot from '@interactjs/utils/hypot';\n\nclass InteractEvent {\n /** */\n constructor (interaction, event, actionName, phase, element, related, preEnd, type) {\n element = element || interaction.element;\n\n const target = interaction.target;\n const deltaSource = (target && target.options || defaults).deltaSource;\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.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.button;\n this.buttons = event.buttons;\n this.target = element;\n this.currentTarget = element;\n this.relatedTarget = related || null;\n this.preEnd = preEnd;\n this.type = type || (actionName + (phase || ''));\n this.interaction = interaction;\n this.interactable = target;\n\n this.t0 = starting\n ? interaction.pointers[interaction.pointers.length - 1].downTime\n : prevEvent.t0;\n\n this.x0 = interaction.coords.start.page.x - origin.x;\n this.y0 = interaction.coords.start.page.y - origin.y;\n this.clientX0 = interaction.coords.start.client.x - origin.x;\n this.clientY0 = interaction.coords.start.client.y - origin.y;\n\n if (starting || ending) {\n this.delta = { x: 0, y: 0 };\n }\n else {\n this.delta = {\n x: this[deltaSource].x - prevEvent[deltaSource].x,\n y: this[deltaSource].y - prevEvent[deltaSource].y,\n };\n }\n\n this.dt = interaction.coords.delta.timeStamp;\n this.duration = this.timeStamp - this.t0;\n\n // velocity and speed in pixels per second\n this.velocity = extend({}, interaction.coords.velocity[deltaSource]);\n this.speed = hypot(this.velocity.x, this.velocity.y);\n\n this.swipe = (ending || phase === 'inertiastart')? this.getSwipe() : null;\n }\n\n get pageX () { return this.page.x; }\n get pageY () { return this.page.y; }\n set pageX (value) { this.page.x = value; }\n set pageY (value) { this.page.y = value; }\n\n get clientX () { return this.client.x; }\n get clientY () { return this.client.y; }\n set clientX (value) { this.client.x = value; }\n set clientY (value) { this.client.y = value; }\n\n get dx () { return this.delta.x; }\n get dy () { return this.delta.y; }\n set dx (value) { this.delta.x = value; }\n set dy (value) { this.delta.y = value; }\n\n get velocityX () { return this.velocity.x; }\n get velocityY () { return this.velocity.y; }\n set velocityX (value) { this.velocity.x = value; }\n set velocityY (value) { this.velocity.y = value; }\n\n getSwipe () {\n const interaction = this.interaction;\n\n if (interaction.prevEvent.speed < 600\n || this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n return null;\n }\n\n let angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI;\n const overlap = 22.5;\n\n if (angle < 0) {\n angle += 360;\n }\n\n const left = 135 - overlap <= angle && angle < 225 + overlap;\n const up = 225 - overlap <= angle && angle < 315 + overlap;\n\n const right = !left && (315 - overlap <= angle || angle < 45 + overlap);\n const down = !up && 45 - overlap <= angle && angle < 135 + overlap;\n\n return {\n up,\n down,\n left,\n right,\n angle,\n speed: interaction.prevEvent.speed,\n velocity: {\n x: interaction.prevEvent.velocityX,\n y: interaction.prevEvent.velocityY,\n },\n };\n }\n\n preventDefault () {}\n\n /** */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true;\n }\n\n /** */\n stopPropagation () {\n this.propagationStopped = true;\n }\n}\n\nexport default InteractEvent;\n","import * as utils from '@interactjs/utils';\nimport InteractEvent from '@interactjs/core/InteractEvent';\n\nfunction install (scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope;\n\n const gesture = {\n defaults: {\n },\n\n checker: function (pointer, event, interactable, element, interaction) {\n if (interaction.pointers.length >= 2) {\n return { name: 'gesture' };\n }\n\n return null;\n },\n\n getCursor: function () {\n return '';\n },\n };\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 (options) {\n if (utils.is.object(options)) {\n this.options.gesture.enabled = options.enabled === false? false: true;\n this.setPerAction('gesture', options);\n this.setOnEvents('gesture', options);\n\n return this;\n }\n\n if (utils.is.bool(options)) {\n this.options.gesture.enabled = options;\n\n return this;\n }\n\n return this.options.gesture;\n };\n\n interactions.signals.on('action-start', updateGestureProps);\n interactions.signals.on('action-move', updateGestureProps);\n interactions.signals.on('action-end', updateGestureProps);\n\n interactions.signals.on('action-start', start);\n interactions.signals.on('action-move', move);\n\n interactions.signals.on('new', function (interaction) {\n interaction.gesture = {\n start: { x: 0, y: 0 },\n\n startDistance: 0, // distance between two touches of touchStart\n prevDistance : 0,\n distance : 0,\n\n scale: 1, // gesture.distance / gesture.startDistance\n\n startAngle: 0, // angle of line joining two touches\n prevAngle : 0, // angle of the previous gesture event\n };\n });\n\n actions.gesture = gesture;\n actions.names.push('gesture');\n utils.arr.merge(actions.eventTypes, [\n 'gesturestart',\n 'gesturemove',\n 'gestureend',\n ]);\n actions.methodDict.gesture = 'gesturable';\n\n defaults.gesture = gesture.defaults;\n}\n\nfunction start ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'gesture') { return; }\n\n iEvent.ds = 0;\n\n interaction.gesture.startDistance = interaction.gesture.prevDistance = iEvent.distance;\n interaction.gesture.startAngle = interaction.gesture.prevAngle = iEvent.angle;\n interaction.gesture.scale = 1;\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'gesture') { return; }\n\n iEvent.ds = iEvent.scale - interaction.gesture.scale;\n\n interaction.target.fire(iEvent);\n\n interaction.gesture.prevAngle = iEvent.angle;\n interaction.gesture.prevDistance = iEvent.distance;\n\n if (iEvent.scale !== Infinity\n && iEvent.scale !== null\n && iEvent.scale !== undefined\n && !isNaN(iEvent.scale)) {\n\n interaction.gesture.scale = iEvent.scale;\n }\n}\n\nfunction updateGestureProps ({ interaction, iEvent, event, phase }) {\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.target.options.deltaSource;\n\n iEvent.touches = [pointers[0].pointer, pointers[1].pointer];\n\n if (starting) {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource);\n iEvent.box = utils.pointer.touchBBox(pointers);\n iEvent.scale = 1;\n iEvent.ds = 0;\n iEvent.angle = utils.pointer.touchAngle(pointers, undefined, deltaSource);\n iEvent.da = 0;\n }\n else if (ending || event instanceof InteractEvent) {\n iEvent.distance = interaction.prevEvent.distance;\n iEvent.box = interaction.prevEvent.box;\n iEvent.scale = interaction.prevEvent.scale;\n iEvent.ds = iEvent.scale - 1;\n iEvent.angle = interaction.prevEvent.angle;\n iEvent.da = iEvent.angle - interaction.gesture.startAngle;\n }\n else {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource);\n iEvent.box = utils.pointer.touchBBox(pointers);\n iEvent.scale = iEvent.distance / interaction.gesture.startDistance;\n iEvent.angle = utils.pointer.touchAngle(pointers, interaction.gesture.prevAngle, deltaSource);\n\n iEvent.ds = iEvent.scale - interaction.gesture.prevScale;\n iEvent.da = iEvent.angle - interaction.gesture.prevAngle;\n }\n}\n\nexport default { install };\n","import * as utils from '@interactjs/utils';\n\nfunction install (scope) {\n const {\n actions,\n browser,\n /** @lends Interactable */\n Interactable,\n interactions,\n defaults,\n } = scope;\n\n // Less Precision with touch input\n const defaultMargin = browser.supportsTouch || browser.supportsPointerEvent? 20: 10;\n\n const resize = {\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 },\n\n checker: function (pointer, event, interactable, element, interaction, rect) {\n if (!rect) { return null; }\n\n const page = utils.extend({}, interaction.coords.cur.page);\n const options = interactable.options;\n\n if (options.resize.enabled) {\n const resizeOptions = options.resize;\n const resizeEdges = { left: false, right: false, top: false, bottom: false };\n\n // if using resize.edges\n if (utils.is.object(resizeOptions.edges)) {\n for (const edge in resizeEdges) {\n resizeEdges[edge] = checkResizeEdge(edge,\n resizeOptions.edges[edge],\n page,\n interaction._eventTarget,\n element,\n rect,\n resizeOptions.margin || defaultMargin);\n }\n\n resizeEdges.left = resizeEdges.left && !resizeEdges.right;\n resizeEdges.top = resizeEdges.top && !resizeEdges.bottom;\n\n if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n return {\n name: 'resize',\n edges: resizeEdges,\n };\n }\n }\n else {\n const right = options.resize.axis !== 'y' && page.x > (rect.right - defaultMargin);\n const bottom = options.resize.axis !== 'x' && page.y > (rect.bottom - defaultMargin);\n\n if (right || bottom) {\n return {\n name: 'resize',\n axes: (right? 'x' : '') + (bottom? 'y' : ''),\n };\n }\n }\n }\n\n return null;\n },\n\n cursors: (browser.isIe9 ? {\n x : 'e-resize',\n y : 's-resize',\n xy: 'se-resize',\n\n top : 'n-resize',\n left : 'w-resize',\n bottom : 's-resize',\n right : 'e-resize',\n topleft : 'se-resize',\n bottomright: 'se-resize',\n topright : 'ne-resize',\n bottomleft : 'ne-resize',\n } : {\n x : 'ew-resize',\n y : 'ns-resize',\n xy: 'nwse-resize',\n\n top : 'ns-resize',\n left : 'ew-resize',\n bottom : 'ns-resize',\n right : 'ew-resize',\n topleft : 'nwse-resize',\n bottomright: 'nwse-resize',\n topright : 'nesw-resize',\n bottomleft : 'nesw-resize',\n }),\n\n getCursor: function (action) {\n if (action.axis) {\n return resize.cursors[action.name + action.axis];\n }\n else if (action.edges) {\n let cursorKey = '';\n const edgeNames = ['top', 'bottom', 'left', 'right'];\n\n for (let i = 0; i < 4; i++) {\n if (action.edges[edgeNames[i]]) {\n cursorKey += edgeNames[i];\n }\n }\n\n return resize.cursors[cursorKey];\n }\n },\n };\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 (options) {\n if (utils.is.object(options)) {\n this.options.resize.enabled = options.enabled === false? false: true;\n this.setPerAction('resize', options);\n this.setOnEvents('resize', options);\n\n if (/^x$|^y$|^xy$/.test(options.axis)) {\n this.options.resize.axis = options.axis;\n }\n else if (options.axis === null) {\n this.options.resize.axis = defaults.resize.axis;\n }\n\n if (utils.is.bool(options.preserveAspectRatio)) {\n this.options.resize.preserveAspectRatio = options.preserveAspectRatio;\n }\n else if (utils.is.bool(options.square)) {\n this.options.resize.square = options.square;\n }\n\n return this;\n }\n if (utils.is.bool(options)) {\n this.options.resize.enabled = options;\n\n return this;\n }\n return this.options.resize;\n };\n\n interactions.signals.on('new', function (interaction) {\n interaction.resizeAxes = 'xy';\n });\n\n interactions.signals.on('action-start', start);\n interactions.signals.on('action-move', move);\n\n interactions.signals.on('action-start', updateEventAxes);\n interactions.signals.on('action-move', updateEventAxes);\n\n actions.resize = resize;\n actions.names.push('resize');\n utils.arr.merge(actions.eventTypes, [\n 'resizestart',\n 'resizemove',\n 'resizeinertiastart',\n 'resizeresume',\n 'resizeend',\n ]);\n actions.methodDict.resize = 'resizable';\n\n defaults.resize = resize.defaults;\n}\n\nfunction checkResizeEdge (name, value, page, element, interactableElement, rect, margin) {\n // false, '', undefined, null\n if (!value) { return false; }\n\n // true value, use pointer coords and element rect\n if (value === true) {\n // if dimensions are negative, \"switch\" edges\n const width = utils.is.number(rect.width )? rect.width : rect.right - rect.left;\n const height = utils.is.number(rect.height)? rect.height : rect.bottom - rect.top ;\n\n // don't use margin greater than half the relevent dimension\n margin = Math.min(margin, (name === 'left' || name === 'right' ? width : height) / 2);\n\n if (width < 0) {\n if (name === 'left' ) { name = 'right'; }\n else if (name === 'right') { name = 'left' ; }\n }\n if (height < 0) {\n if (name === 'top' ) { name = 'bottom'; }\n else if (name === 'bottom') { name = 'top' ; }\n }\n\n if (name === 'left' ) { return page.x < ((width >= 0? rect.left: rect.right ) + margin); }\n if (name === 'top' ) { return page.y < ((height >= 0? rect.top : rect.bottom) + margin); }\n\n if (name === 'right' ) { return page.x > ((width >= 0? rect.right : rect.left) - margin); }\n if (name === 'bottom') { return page.y > ((height >= 0? rect.bottom: rect.top ) - margin); }\n }\n\n // the remaining checks require an element\n if (!utils.is.element(element)) { return false; }\n\n return utils.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 : utils.dom.matchesUpTo(element, value, interactableElement);\n}\n\nfunction start ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n return;\n }\n\n const startRect = interaction.target.getRect(interaction.element);\n const resizeOptions = interaction.target.options.resize;\n\n /*\n * When using the `resizable.square` or `resizable.preserveAspectRatio` options, resizing from one edge\n * will affect another. E.g. with `resizable.square`, resizing to make the right edge larger will make\n * the bottom edge larger by the same amount. We call these 'linked' edges. Any linked edges will depend\n * on the active edges and the edge being interacted with.\n */\n if (resizeOptions.square || resizeOptions.preserveAspectRatio) {\n const linkedEdges = utils.extend({}, interaction.prepared.edges);\n\n linkedEdges.top = linkedEdges.top || (linkedEdges.left && !linkedEdges.bottom);\n linkedEdges.left = linkedEdges.left || (linkedEdges.top && !linkedEdges.right );\n linkedEdges.bottom = linkedEdges.bottom || (linkedEdges.right && !linkedEdges.top );\n linkedEdges.right = linkedEdges.right || (linkedEdges.bottom && !linkedEdges.left );\n\n interaction.prepared._linkedEdges = linkedEdges;\n }\n else {\n interaction.prepared._linkedEdges = null;\n }\n\n // if using `resizable.preserveAspectRatio` option, record aspect ratio at the start of the resize\n if (resizeOptions.preserveAspectRatio) {\n interaction.resizeStartAspectRatio = startRect.width / startRect.height;\n }\n\n interaction.resizeRects = {\n start : startRect,\n current : utils.extend({}, startRect),\n inverted : utils.extend({}, startRect),\n previous : utils.extend({}, startRect),\n delta : {\n left: 0, right : 0, width : 0,\n top : 0, bottom: 0, height: 0,\n },\n };\n\n iEvent.rect = interaction.resizeRects.inverted;\n iEvent.deltaRect = interaction.resizeRects.delta;\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return; }\n\n const resizeOptions = interaction.target.options.resize;\n const invert = resizeOptions.invert;\n const invertible = invert === 'reposition' || invert === 'negate';\n\n let edges = interaction.prepared.edges;\n\n // eslint-disable-next-line no-shadow\n const start = interaction.resizeRects.start;\n const current = interaction.resizeRects.current;\n const inverted = interaction.resizeRects.inverted;\n const deltaRect = interaction.resizeRects.delta;\n const previous = utils.extend(interaction.resizeRects.previous, inverted);\n const originalEdges = edges;\n\n const eventDelta = utils.extend({}, iEvent.delta);\n\n if (resizeOptions.preserveAspectRatio || resizeOptions.square) {\n // `resize.preserveAspectRatio` takes precedence over `resize.square`\n const startAspectRatio = resizeOptions.preserveAspectRatio\n ? interaction.resizeStartAspectRatio\n : 1;\n\n edges = interaction.prepared._linkedEdges;\n\n if ((originalEdges.left && originalEdges.bottom)\n || (originalEdges.right && originalEdges.top)) {\n eventDelta.y = -eventDelta.x / startAspectRatio;\n }\n else if (originalEdges.left || originalEdges.right ) { eventDelta.y = eventDelta.x / startAspectRatio; }\n else if (originalEdges.top || originalEdges.bottom) { eventDelta.x = eventDelta.y * startAspectRatio; }\n }\n\n // update the 'current' rect without modifications\n if (edges.top ) { current.top += eventDelta.y; }\n if (edges.bottom) { current.bottom += eventDelta.y; }\n if (edges.left ) { current.left += eventDelta.x; }\n if (edges.right ) { current.right += eventDelta.x; }\n\n if (invertible) {\n // if invertible, copy the current rect\n utils.extend(inverted, current);\n\n if (invert === 'reposition') {\n // swap edge values if necessary to keep width/height positive\n let swap;\n\n if (inverted.top > inverted.bottom) {\n swap = inverted.top;\n\n inverted.top = inverted.bottom;\n inverted.bottom = swap;\n }\n if (inverted.left > inverted.right) {\n swap = inverted.left;\n\n inverted.left = inverted.right;\n inverted.right = swap;\n }\n }\n }\n else {\n // if not invertible, restrict to minimum of 0x0 rect\n inverted.top = Math.min(current.top, start.bottom);\n inverted.bottom = Math.max(current.bottom, start.top);\n inverted.left = Math.min(current.left, start.right);\n inverted.right = Math.max(current.right, start.left);\n }\n\n inverted.width = inverted.right - inverted.left;\n inverted.height = inverted.bottom - inverted.top ;\n\n for (const edge in inverted) {\n deltaRect[edge] = inverted[edge] - previous[edge];\n }\n\n iEvent.edges = interaction.prepared.edges;\n iEvent.rect = inverted;\n iEvent.deltaRect = deltaRect;\n}\n\nfunction updateEventAxes ({ interaction, iEvent, action }) {\n if (action !== 'resize' || !interaction.resizeAxes) { return; }\n\n const options = interaction.target.options;\n\n if (options.resize.square) {\n if (interaction.resizeAxes === 'y') {\n iEvent.delta.x = iEvent.delta.y;\n }\n else {\n iEvent.delta.y = iEvent.delta.x;\n }\n iEvent.axes = 'xy';\n }\n else {\n iEvent.axes = interaction.resizeAxes;\n\n if (interaction.resizeAxes === 'x') {\n iEvent.delta.y = 0;\n }\n else if (interaction.resizeAxes === 'y') {\n iEvent.delta.x = 0;\n }\n }\n}\n\nexport default { install };\n","import gesture from './gesture';\nimport resize from './resize';\nimport drag from './drag';\nimport drop from './drop';\n\nfunction install (scope) {\n gesture.install(scope);\n resize.install(scope);\n drag.install(scope);\n drop.install(scope);\n}\n\nexport {\n gesture,\n resize,\n drag,\n drop,\n install,\n};\n","import raf from '@interactjs/utils/raf';\nimport { getWindow } from '@interactjs/utils/window';\nimport * as is from '@interactjs/utils/is';\nimport * as domUtils from '@interactjs/utils/domUtils';\nimport { getStringOptionResult } from '@interactjs/utils/rect';\n\nfunction install (scope) {\n const {\n interactions,\n defaults,\n actions,\n } = scope;\n\n const autoScroll = scope.autoScroll = {\n defaults: {\n enabled : false,\n container: null, // the item that is scrolled (Window or HTMLElement)\n margin : 60,\n speed : 300, // the scroll speed in pixels per second\n },\n\n interaction: null,\n i: null, // the handle returned by window.setInterval\n x: 0, y: 0, // Direction each pulse is to scroll in\n\n isScrolling: false,\n prevTime: 0,\n\n start: function (interaction) {\n autoScroll.isScrolling = true;\n raf.cancel(autoScroll.i);\n\n interaction.autoScroll = autoScroll;\n autoScroll.interaction = interaction;\n autoScroll.prevTime = new Date().getTime();\n autoScroll.i = raf.request(autoScroll.scroll);\n },\n\n stop: function () {\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: function () {\n const { interaction } = autoScroll;\n const { target: interactable, element } = interaction;\n const options = interactable.options[autoScroll.interaction.prepared.name].autoScroll;\n const container = getContainer(options.container, interactable, element);\n const now = new Date().getTime();\n // change in time in seconds\n const dt = (now - autoScroll.prevTime) / 1000;\n // displacement\n const s = options.speed * dt;\n\n if (s >= 1) {\n const scrollBy = {\n x: autoScroll.x * s,\n y: autoScroll.y * s,\n };\n\n if (scrollBy.x || scrollBy.y) {\n const prevScroll = getScroll(container);\n\n if (is.window(container)) {\n container.scrollBy(scrollBy.x, scrollBy.y);\n }\n else if (container) {\n container.scrollLeft += scrollBy.x;\n container.scrollTop += scrollBy.y;\n }\n\n const curScroll = getScroll(container);\n const delta = {\n x: curScroll.x - prevScroll.x,\n y: curScroll.y - prevScroll.y,\n };\n\n if (delta.x || delta.y) {\n interactable.fire({\n type: 'autoscroll',\n target: element,\n interactable,\n delta,\n interaction,\n container,\n });\n }\n }\n\n autoScroll.prevTime = now;\n }\n\n if (autoScroll.isScrolling) {\n raf.cancel(autoScroll.i);\n autoScroll.i = raf.request(autoScroll.scroll);\n }\n },\n check: function (interactable, actionName) {\n const options = interactable.options;\n\n return options[actionName].autoScroll && options[actionName].autoScroll.enabled;\n },\n onInteractionMove: function ({ interaction, pointer }) {\n if (!(interaction.interacting()\n && autoScroll.check(interaction.target, interaction.prepared.name))) {\n return;\n }\n\n if (interaction.simulation) {\n autoScroll.x = autoScroll.y = 0;\n return;\n }\n\n let top;\n let right;\n let bottom;\n let left;\n\n const { target: interactable, element } = interaction;\n const options = interactable.options[interaction.prepared.name].autoScroll;\n const container = getContainer(options.container, interactable, element);\n\n if (is.window(container)) {\n left = pointer.clientX < autoScroll.margin;\n top = pointer.clientY < autoScroll.margin;\n right = pointer.clientX > container.innerWidth - autoScroll.margin;\n bottom = pointer.clientY > container.innerHeight - autoScroll.margin;\n }\n else {\n const rect = domUtils.getElementClientRect(container);\n\n left = pointer.clientX < rect.left + autoScroll.margin;\n top = pointer.clientY < rect.top + autoScroll.margin;\n right = pointer.clientX > rect.right - autoScroll.margin;\n bottom = pointer.clientY > rect.bottom - autoScroll.margin;\n }\n\n autoScroll.x = (right ? 1: left? -1: 0);\n autoScroll.y = (bottom? 1: top? -1: 0);\n\n if (!autoScroll.isScrolling) {\n // set the autoScroll properties to those of the target\n autoScroll.margin = options.margin;\n autoScroll.speed = options.speed;\n\n autoScroll.start(interaction);\n }\n },\n };\n\n interactions.signals.on('new', function (interaction) {\n interaction.autoScroll = null;\n });\n\n interactions.signals.on('stop', autoScroll.stop);\n\n interactions.signals.on('action-move', autoScroll.onInteractionMove);\n\n actions.eventTypes.push('autoscroll');\n defaults.perAction.autoScroll = autoScroll.defaults;\n}\n\nexport function getContainer (value, interactable, element) {\n return (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element);\n}\n\nexport function getScroll (container) {\n if (is.window(container)) { container = window.document.body; }\n\n return { x: container.scrollLeft, y: container.scrollTop };\n}\n\nexport function getScrollSize (container) {\n if (is.window(container)) { container = window.document.body; }\n\n return { x: container.scrollWidth, y: container.scrollHeight };\n}\n\nexport function getScrollSizeDelta ({ interaction, element }, func) {\n const scrollOptions = interaction && interaction.target.options[interaction.prepared.name].autoScroll;\n\n if (!scrollOptions || !scrollOptions.enabled) {\n func();\n return { x: 0, y: 0 };\n }\n\n const scrollContainer = getContainer(\n scrollOptions.container,\n interaction.target,\n element\n );\n\n const prevSize = getScroll(scrollContainer);\n func();\n const curSize = getScroll(scrollContainer);\n\n return {\n x: curSize.x - prevSize.x,\n y: curSize.y - prevSize.y,\n };\n}\n\nexport default { install };\n","import * as is from '@interactjs/utils/is';\nimport * as domUtils from '@interactjs/utils/domUtils';\n\nimport { warnOnce } from '@interactjs/utils';\n\nfunction install (scope) {\n const {\n /** @lends Interactable */\n Interactable,\n actions,\n } = scope;\n\n Interactable.prototype.getAction = function (pointer, event, interaction, element) {\n const action = this.defaultActionChecker(pointer, event, interaction, element);\n\n if (this.options.actionChecker) {\n return this.options.actionChecker(pointer, event, action, this, element, interaction);\n }\n\n return action;\n };\n\n /**\n * ```js\n * interact(element, { ignoreFrom: document.getElementById('no-action') });\n * // or\n * interact(element).ignoreFrom('input, textarea, a');\n * ```\n * @deprecated\n * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n * of it's parents match the given CSS selector or Element, no\n * drag/resize/gesture is started.\n *\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to not ignore any elements\n * @return {string | Element | object} The current ignoreFrom value or this\n * Interactable\n */\n Interactable.prototype.ignoreFrom = warnOnce(function (newValue) {\n return this._backCompatOption('ignoreFrom', newValue);\n }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).');\n\n /**\n * ```js\n *\n * @deprecated\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to allow from any element\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */\n Interactable.prototype.allowFrom = warnOnce(function (newValue) {\n return this._backCompatOption('allowFrom', newValue);\n }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).');\n\n Interactable.prototype.testIgnore = function (ignoreFrom, interactableElement, element) {\n if (!ignoreFrom || !is.element(element)) { return false; }\n\n if (is.string(ignoreFrom)) {\n return domUtils.matchesUpTo(element, ignoreFrom, interactableElement);\n }\n else if (is.element(ignoreFrom)) {\n return domUtils.nodeContains(ignoreFrom, element);\n }\n\n return false;\n };\n\n Interactable.prototype.testAllow = function (allowFrom, interactableElement, element) {\n if (!allowFrom) { return true; }\n\n if (!is.element(element)) { return false; }\n\n if (is.string(allowFrom)) {\n return domUtils.matchesUpTo(element, allowFrom, interactableElement);\n }\n else if (is.element(allowFrom)) {\n return domUtils.nodeContains(allowFrom, element);\n }\n\n return false;\n };\n\n Interactable.prototype.testIgnoreAllow = function (options, interactableElement, eventTarget) {\n return (!this.testIgnore(options.ignoreFrom, interactableElement, eventTarget)\n && this.testAllow(options.allowFrom, interactableElement, eventTarget));\n };\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 * Gets 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 = function (checker) {\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\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 = function (newValue) {\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\n Interactable.prototype.defaultActionChecker = function (pointer, event, interaction, element) {\n const rect = this.getRect(element);\n const buttons = event.buttons || ({\n 0: 1,\n 1: 4,\n 3: 8,\n 4: 16,\n })[event.button];\n let action = null;\n\n for (const actionName of actions.names) {\n // check mouseButton setting if the pointer is down\n if (interaction.pointerIsDown\n && /mouse|pointer/.test(interaction.pointerType)\n && (buttons & this.options[actionName].mouseButtons) === 0) {\n continue;\n }\n\n action = actions[actionName].checker(pointer, event, this, element, interaction, rect);\n\n if (action) {\n return action;\n }\n }\n };\n}\n\nexport default { install };\n","import * as utils from '@interactjs/utils';\nimport InteractableMethods from './InteractableMethods';\n\nfunction install (scope) {\n const {\n interact,\n interactions,\n defaults,\n Signals,\n } = scope;\n\n interact.use(InteractableMethods);\n\n // set cursor style on mousedown\n interactions.signals.on('down', function ({ interaction, pointer, event, eventTarget }) {\n if (interaction.interacting()) { return; }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope);\n prepare(interaction, actionInfo, scope);\n });\n\n // set cursor style on mousemove\n interactions.signals.on('move', function ({ interaction, pointer, event, eventTarget }) {\n if (interaction.pointerType !== 'mouse'\n || interaction.pointerIsDown\n || interaction.interacting()) { return; }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope);\n prepare(interaction, actionInfo, scope);\n });\n\n interactions.signals.on('move', function (arg) {\n const { interaction, event } = arg;\n\n if (!interaction.pointerIsDown\n || interaction.interacting()\n || !interaction.pointerWasMoved\n || !interaction.prepared.name) {\n return;\n }\n\n scope.autoStart.signals.fire('before-start', arg);\n\n const target = interaction.target;\n\n if (interaction.prepared.name && target) {\n // check manualStart and interaction limit\n if (target.options[interaction.prepared.name].manualStart\n || !withinInteractionLimit(target, interaction.element, interaction.prepared, scope)) {\n interaction.stop(event);\n }\n else {\n interaction.start(interaction.prepared, target, interaction.element);\n }\n }\n });\n\n interactions.signals.on('stop', function ({ interaction }) {\n const target = interaction.target;\n\n if (target && target.options.styleCursor) {\n setCursor(interaction.element, '', scope);\n }\n });\n\n interact.maxInteractions = maxInteractions;\n\n defaults.base.actionChecker = null;\n defaults.base.styleCursor = true;\n\n utils.extend(defaults.perAction, {\n manualStart: false,\n max: Infinity,\n maxPerElement: 1,\n allowFrom: null,\n ignoreFrom: null,\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons: 1,\n });\n\n /**\n * Returns or sets the maximum number of concurrent interactions allowed. By\n * default only 1 interaction is allowed at a time (for backwards\n * compatibility). To allow multiple interactions on the same Interactables and\n * elements, you need to enable it in the draggable, resizable and gesturable\n * `'max'` and `'maxPerElement'` options.\n *\n * @alias module:interact.maxInteractions\n *\n * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n */\n interact.maxInteractions = newValue => maxInteractions(newValue, scope);\n\n scope.autoStart = {\n // Allow this many interactions to happen simultaneously\n maxInteractions: Infinity,\n withinInteractionLimit,\n cursorElement: null,\n signals: new Signals(),\n };\n}\n\n// Check if the current target supports the action.\n// If so, return the validated action. Otherwise, return null\nfunction validateAction (action, interactable, element, eventTarget, scope) {\n if (utils.is.object(action)\n && interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget)\n && interactable.options[action.name].enabled\n && withinInteractionLimit(interactable, element, action, scope)) {\n return action;\n }\n\n return null;\n}\n\nfunction validateSelector (interaction, pointer, event, matches, matchElements, eventTarget, scope) {\n for (let i = 0, len = matches.length; i < len; i++) {\n const match = matches[i];\n const matchElement = matchElements[i];\n const action = validateAction(\n match.getAction(pointer, event, interaction, matchElement),\n match,\n matchElement,\n eventTarget,\n scope);\n\n if (action) {\n return {\n action,\n target: match,\n element: matchElement,\n };\n }\n }\n\n return {};\n}\n\nfunction getActionInfo (interaction, pointer, event, eventTarget, scope) {\n let matches = [];\n let matchElements = [];\n\n let element = eventTarget;\n\n function pushMatches (interactable) {\n matches.push(interactable);\n matchElements.push(element);\n }\n\n while (utils.is.element(element)) {\n matches = [];\n matchElements = [];\n\n scope.interactables.forEachMatch(element, pushMatches);\n\n const actionInfo = validateSelector(interaction, pointer, event, matches, matchElements, eventTarget, scope);\n\n if (actionInfo.action\n && !actionInfo.target.options[actionInfo.action.name].manualStart) {\n return actionInfo;\n }\n\n element = utils.dom.parentNode(element);\n }\n\n return {};\n}\n\nfunction prepare (interaction, { action, target, element }, scope) {\n action = action || {};\n\n if (interaction.target && interaction.target.options.styleCursor) {\n setCursor(interaction.element, '', scope);\n }\n\n interaction.target = target;\n interaction.element = element;\n utils.copyAction(interaction.prepared, action);\n\n if (target && target.options.styleCursor) {\n const cursor = action? scope.actions[action.name].getCursor(action) : '';\n setCursor(interaction.element, cursor, scope);\n }\n\n scope.autoStart.signals.fire('prepared', { interaction: interaction });\n}\n\nfunction withinInteractionLimit (interactable, element, action, scope) {\n const options = interactable.options;\n const maxActions = options[action.name].max;\n const maxPerElement = options[action.name].maxPerElement;\n const autoStartMax = scope.autoStart.maxInteractions;\n let activeInteractions = 0;\n let targetCount = 0;\n let targetElementCount = 0;\n\n // no actions if any of these values == 0\n if (!(maxActions && maxPerElement && autoStartMax)) { return; }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name;\n\n if (!interaction.interacting()) { continue; }\n\n activeInteractions++;\n\n if (activeInteractions >= autoStartMax) {\n return false;\n }\n\n if (interaction.target !== interactable) { continue; }\n\n targetCount += (otherAction === action.name)|0;\n\n if (targetCount >= maxActions) {\n return false;\n }\n\n if (interaction.element === element) {\n targetElementCount++;\n\n if (otherAction === action.name && targetElementCount >= maxPerElement) {\n return false;\n }\n }\n }\n\n return autoStartMax > 0;\n}\n\nfunction maxInteractions (newValue, scope) {\n if (utils.is.number(newValue)) {\n scope.autoStart.maxInteractions = newValue;\n\n return this;\n }\n\n return scope.autoStart.maxInteractions;\n}\n\nfunction setCursor (element, cursor, scope) {\n if (scope.autoStart.cursorElement) {\n scope.autoStart.cursorElement.style.cursor = '';\n }\n\n element.ownerDocument.documentElement.style.cursor = cursor;\n element.style.cursor = cursor;\n scope.autoStart.cursorElement = cursor ? element : null;\n}\n\nexport default {\n install,\n maxInteractions,\n withinInteractionLimit,\n validateAction,\n};\n","import * as is from '@interactjs/utils/is';\nimport autoStart from './base';\n\nimport { parentNode } from '@interactjs/utils/domUtils';\n\nfunction install (scope) {\n scope.autoStart.signals.on('before-start', function ({ interaction, eventTarget, dx, dy }) {\n if (interaction.prepared.name !== 'drag') { return; }\n\n // check if a drag is in the correct axis\n const absX = Math.abs(dx);\n const absY = Math.abs(dy);\n const targetOptions = interaction.target.options.drag;\n const startAxis = targetOptions.startAxis;\n const currentAxis = (absX > absY ? 'x' : absX < absY ? 'y' : 'xy');\n\n interaction.prepared.axis = targetOptions.lockAxis === 'start'\n ? currentAxis[0] // always lock to one axis even if currentAxis === 'xy'\n : targetOptions.lockAxis;\n\n // if the movement isn't in the startAxis of the interactable\n if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n // cancel the prepared action\n interaction.prepared.name = null;\n\n // then try to get a drag from another ineractable\n let element = eventTarget;\n\n const getDraggable = function (interactable) {\n if (interactable === interaction.target) { return; }\n\n const options = interaction.target.options.drag;\n\n if (!options.manualStart\n && interactable.testIgnoreAllow(options, element, eventTarget)) {\n\n const action = interactable.getAction(\n interaction.downPointer, interaction.downEvent, interaction, element);\n\n if (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.prepared.name = 'drag';\n interaction.target = interactable;\n interaction.element = element;\n break;\n }\n\n element = parentNode(element);\n }\n }\n });\n\n function checkStartAxis (startAxis, interactable) {\n if (!interactable) { return false; }\n\n const thisAxis = interactable.options.drag.startAxis;\n\n return (startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis);\n }\n}\n\nexport default { install };\n","function install (scope) {\n const {\n autoStart,\n interactions,\n defaults,\n } = scope;\n\n defaults.perAction.hold = 0;\n defaults.perAction.delay = 0;\n\n interactions.signals.on('new', function (interaction) {\n interaction.autoStartHoldTimer = null;\n });\n\n autoStart.signals.on('prepared', function ({ interaction }) {\n const hold = getHoldDuration(interaction);\n\n if (hold > 0) {\n interaction.autoStartHoldTimer = setTimeout(() => {\n interaction.start(interaction.prepared, interaction.target, interaction.element);\n }, hold);\n }\n });\n\n interactions.signals.on('move', function ({ interaction, duplicate }) {\n if (interaction.pointerWasMoved && !duplicate) {\n clearTimeout(interaction.autoStartHoldTimer);\n }\n });\n\n // prevent regular down->move autoStart\n autoStart.signals.on('before-start', function ({ interaction }) {\n const hold = getHoldDuration(interaction);\n\n if (hold > 0) {\n interaction.prepared.name = null;\n }\n });\n}\n\nfunction getHoldDuration (interaction) {\n const actionName = interaction.prepared && interaction.prepared.name;\n\n if (!actionName) { return null; }\n\n const options = interaction.target.options;\n\n return options[actionName].hold || options[actionName].delay;\n}\n\nexport default {\n install,\n getHoldDuration,\n};\n","import autoStart from './base';\nimport hold from './hold';\nimport dragAxis from './dragAxis';\n\nfunction install (scope) {\n autoStart.install(scope);\n hold.install(scope);\n dragAxis.install(scope);\n}\n\nexport {\n autoStart,\n hold,\n dragAxis,\n install,\n};\n","import * as is from '@interactjs/utils/is';\nimport events from '@interactjs/utils/events';\n\nimport { nodeContains, matchesSelector } from '@interactjs/utils/domUtils';\nimport { getWindow } from '@interactjs/utils/window';\n\nfunction preventDefault (interactable, newValue) {\n if (/^(always|never|auto)$/.test(newValue)) {\n interactable.options.preventDefault = newValue;\n return interactable;\n }\n\n if (is.bool(newValue)) {\n interactable.options.preventDefault = newValue? 'always' : 'never';\n return interactable;\n }\n\n return interactable.options.preventDefault;\n}\n\nfunction checkAndPreventDefault (interactable, scope, event) {\n const setting = interactable.options.preventDefault;\n\n if (setting === 'never') { return; }\n\n if (setting === 'always') {\n event.preventDefault();\n return;\n }\n\n // setting === 'auto'\n\n // if the browser supports passive event listeners and isn't running on iOS,\n // don't preventDefault of touch{start,move} events. CSS touch-action and\n // user-select should be used instead of calling event.preventDefault().\n if (events.supportsPassive && /^touch(start|move)$/.test(event.type)) {\n const doc = getWindow(event.target).document;\n const docOptions = scope.getDocOptions(doc);\n\n if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) {\n return;\n }\n }\n\n // don't preventDefault of pointerdown events\n if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) {\n return;\n }\n\n // don't preventDefault on editable elements\n if (is.element(event.target)\n && matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')) {\n return;\n }\n\n event.preventDefault();\n}\n\nfunction onInteractionEvent ({ interaction, event }) {\n if (interaction.target) {\n interaction.target.checkAndPreventDefault(event);\n }\n}\n\nexport function install (scope) {\n /** @lends Interactable */\n const Interactable = scope.Interactable;\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 = function (newValue) {\n return preventDefault(this, newValue);\n };\n\n Interactable.prototype.checkAndPreventDefault = function (event) {\n return checkAndPreventDefault(this, scope, event);\n };\n\n for (const eventSignal of ['down', 'move', 'up', 'cancel']) {\n scope.interactions.signals.on(eventSignal, onInteractionEvent);\n }\n\n // prevent native HTML5 drag on interact.js target elements\n scope.interactions.eventMap.dragstart = function preventNativeDrag (event) {\n for (const interaction of scope.interactions.list) {\n\n if (interaction.element\n && (interaction.element === event.target\n || nodeContains(interaction.element, event.target))) {\n\n interaction.target.checkAndPreventDefault(event);\n return;\n }\n }\n };\n}\n\nexport default { install };\n","import extend from '@interactjs/utils/extend';\n\nfunction install (scope) {\n const {\n interactions,\n } = scope;\n\n scope.defaults.perAction.modifiers = [];\n scope.modifiers = {};\n\n interactions.signals.on('new', function (interaction) {\n interaction.modifiers = {\n startOffset: { left: 0, right: 0, top: 0, bottom: 0 },\n offsets : {},\n states : null,\n result : null,\n };\n });\n\n interactions.signals.on('before-action-start' , arg =>\n start(arg, arg.interaction.coords.start.page, scope.modifiers));\n\n interactions.signals.on('action-resume', arg => {\n beforeMove(arg);\n start(arg, arg.interaction.coords.cur.page, scope.modifiers);\n });\n\n interactions.signals.on('before-action-move', beforeMove);\n interactions.signals.on('before-action-end', beforeEnd);\n\n interactions.signals.on('before-action-start', setCoords);\n interactions.signals.on('before-action-move', setCoords);\n\n interactions.signals.on('after-action-start', restoreCoords);\n interactions.signals.on('after-action-move', restoreCoords);\n interactions.signals.on('stop', stop);\n}\n\nfunction startAll (arg) {\n for (const state of arg.states) {\n if (state.methods.start) {\n arg.state = state;\n state.methods.start(arg);\n }\n }\n}\n\nfunction getRectOffset (rect, coords) {\n return rect\n ? {\n left : coords.x - rect.left,\n top : coords.y - rect.top,\n right : rect.right - coords.x,\n bottom: rect.bottom - coords.y,\n }\n : {\n left : 0,\n top : 0,\n right : 0,\n bottom: 0,\n };\n}\n\nfunction start ({ interaction, phase }, pageCoords, registeredModifiers) {\n const { target: interactable, element } = interaction;\n const modifierList = getModifierList(interaction, registeredModifiers);\n const states = prepareStates(modifierList);\n\n const rect = extend({}, interactable.getRect(element));\n\n if (!('width' in rect)) { rect.width = rect.right - rect.left; }\n if (!('height' in rect)) { rect.height = rect.bottom - rect.top ; }\n\n const startOffset = getRectOffset(rect, pageCoords);\n\n interaction.modifiers.startOffset = startOffset;\n interaction.modifiers.startDelta = { x: 0, y: 0 };\n\n const arg = {\n interaction,\n interactable,\n element,\n pageCoords,\n phase,\n rect,\n startOffset,\n states,\n preEnd: false,\n requireEndOnly: false,\n };\n\n interaction.modifiers.states = states;\n interaction.modifiers.result = null;\n startAll(arg);\n\n arg.pageCoords = extend({}, interaction.coords.start.page);\n\n const result = interaction.modifiers.result = setAll(arg);\n\n return result;\n}\n\nfunction setAll (arg) {\n const { interaction, phase, preEnd, requireEndOnly, rect, skipModifiers } = arg;\n\n const states = skipModifiers\n ? arg.states.slice(interaction.modifiers.skip)\n : arg.states;\n\n arg.coords = extend({}, arg.pageCoords);\n arg.rect = extend({}, rect);\n\n const result = {\n delta: { x: 0, y: 0 },\n coords: arg.coords,\n changed: true,\n };\n\n for (const state of states) {\n const { options } = state;\n\n if (!state.methods.set ||\n !shouldDo(options, preEnd, requireEndOnly, phase)) { continue; }\n\n arg.state = state;\n state.methods.set(arg);\n }\n\n result.delta.x = arg.coords.x - arg.pageCoords.x;\n result.delta.y = arg.coords.y - arg.pageCoords.y;\n\n const prevCoords = interaction.modifiers.result\n ? interaction.modifiers.result.coords\n : interaction.coords.prev.page;\n\n result.changed = (\n prevCoords.x !== result.coords.x ||\n prevCoords.y !== result.coords.y);\n\n return result;\n}\n\nfunction prepareStates (modifierList) {\n const states = [];\n\n for (let index = 0; index < modifierList.length; index++) {\n const { options, methods } = modifierList[index];\n\n if (options && options.enabled === false) { continue; }\n\n const state = {\n options,\n methods,\n index,\n };\n\n states.push(state);\n }\n\n return states;\n}\n\nfunction beforeMove ({ interaction, phase, preEnd, skipModifiers }) {\n const { target: interactable, element } = interaction;\n const modifierResult = setAll(\n {\n interaction,\n interactable,\n element,\n preEnd,\n phase,\n pageCoords: interaction.coords.cur.page,\n rect: interactable.getRect(element),\n states: interaction.modifiers.states,\n requireEndOnly: false,\n skipModifiers,\n });\n\n interaction.modifiers.result = modifierResult;\n\n // don't fire an action move if a modifier would keep the event in the same\n // cordinates as before\n if (!modifierResult.changed && interaction.interacting()) {\n return false;\n }\n}\n\nfunction beforeEnd (arg) {\n const { interaction, event, noPreEnd } = arg;\n const states = interaction.modifiers.states;\n\n if (noPreEnd || !states || !states.length) {\n return;\n }\n\n let didPreEnd = false;\n\n for (const state of states) {\n arg.state = state;\n const { options, methods } = state;\n\n const endResult = methods.beforeEnd && methods.beforeEnd(arg);\n\n if (endResult === false) {\n return false;\n }\n\n // if the endOnly option is true for any modifier\n if (!didPreEnd && shouldDo(options, true, true)) {\n // fire a move event at the modified coordinates\n interaction.move({ event, preEnd: true });\n didPreEnd = true;\n }\n }\n}\n\nfunction stop (arg) {\n const { interaction } = arg;\n const states = interaction.modifiers.states;\n\n if (!states || !states.length) {\n return;\n }\n\n const modifierArg = extend({\n states,\n interactable: interaction.target,\n element: interaction.element,\n }, arg);\n\n\n restoreCoords(arg);\n\n for (const state of states) {\n modifierArg.state = state;\n\n if (state.methods.stop) { state.methods.stop(modifierArg); }\n }\n\n arg.interaction.modifiers.states = null;\n}\n\nfunction setCoords (arg) {\n const { interaction, phase } = arg;\n const curCoords = arg.curCoords || interaction.coords.cur;\n const startCoords = arg.startCoords || interaction.coords.start;\n const { result, startDelta } = interaction.modifiers;\n const curDelta = result.delta;\n\n if (phase === 'start') {\n extend(interaction.modifiers.startDelta, result.delta);\n }\n\n for (const [coordsSet, delta] of [[startCoords, startDelta], [curCoords, curDelta]]) {\n coordsSet.page.x += delta.x;\n coordsSet.page.y += delta.y;\n coordsSet.client.x += delta.x;\n coordsSet.client.y += delta.y;\n }\n}\n\nfunction restoreCoords ({ interaction: { coords, modifiers } }) {\n const { startDelta, result: { delta: curDelta } } = modifiers;\n\n for (const [coordsSet, delta] of [[coords.start, startDelta], [coords.cur, curDelta]]) {\n coordsSet.page.x -= delta.x;\n coordsSet.page.y -= delta.y;\n coordsSet.client.x -= delta.x;\n coordsSet.client.y -= delta.y;\n }\n\n}\n\nfunction getModifierList (interaction, registeredModifiers) {\n const actionOptions = interaction.target.options[interaction.prepared.name];\n const actionModifiers = actionOptions.modifiers;\n\n if (actionModifiers && actionModifiers.length) {\n return actionModifiers.map(modifier => {\n if (!modifier.methods && modifier.type) {\n return registeredModifiers[modifier.type](modifier);\n }\n\n return modifier;\n });\n }\n\n return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize']\n .map(type => {\n const options = actionOptions[type];\n\n return options && options.enabled && {\n options,\n methods: options._methods,\n };\n })\n .filter(m => !!m);\n}\n\nfunction shouldDo (options, preEnd, requireEndOnly, phase) {\n return options\n ? options.enabled !== false &&\n (preEnd || !options.endOnly) &&\n (!requireEndOnly || options.endOnly) &&\n (options.setStart || phase !== 'start')\n : !requireEndOnly;\n}\n\nfunction makeModifier (module, 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 => {\n options = options || {};\n\n // add missing defaults to options\n options.enabled = options.enabled !== false;\n\n for (const prop in defaults) {\n if (!(prop in options)) {\n options[prop] = defaults[prop];\n }\n }\n\n return { options, methods };\n };\n\n if (typeof name === 'string') {\n Object.defineProperty(\n modifier,\n 'name',\n { value: name });\n\n // for backwrads compatibility\n modifier._defaults = defaults;\n modifier._methods = methods;\n }\n\n return modifier;\n}\n\nexport default {\n install,\n startAll,\n setAll,\n prepareStates,\n start,\n beforeMove,\n beforeEnd,\n stop,\n shouldDo,\n getModifierList,\n getRectOffset,\n makeModifier,\n};\n","import modifiers from '@interactjs/modifiers/base';\nimport * as utils from '@interactjs/utils';\nimport raf from '@interactjs/utils/raf';\n\nfunction install (scope) {\n const {\n interactions,\n defaults,\n } = scope;\n\n interactions.signals.on('new', function (interaction) {\n interaction.inertia = {\n active : false,\n smoothEnd : false,\n allowResume: false,\n\n startEvent: null,\n upCoords : {},\n\n xe: 0, ye: 0,\n sx: 0, sy: 0,\n\n t0: 0,\n vx0: 0, vys: 0,\n duration: 0,\n\n lambda_v0: 0,\n one_ve_v0: 0,\n i : null,\n };\n });\n\n interactions.signals.on('before-action-end', arg => release(arg, scope));\n interactions.signals.on('down' , arg => resume (arg, scope));\n interactions.signals.on('stop' , arg => stop (arg, scope));\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\nfunction resume ({ interaction, event, pointer, eventTarget }, scope) {\n const state = interaction.inertia;\n\n // Check if the down event hits the current inertia target\n if (state.active) {\n let element = eventTarget;\n\n // climb up the DOM tree from the event target\n while (utils.is.element(element)) {\n\n // if interaction element is the current inertia target element\n if (element === interaction.element) {\n // stop inertia\n raf.cancel(state.i);\n state.active = false;\n interaction.simulation = null;\n\n // update pointers to the down event's coordinates\n interaction.updatePointer(pointer, event, eventTarget, true);\n utils.pointer.setCoords(\n interaction.coords.cur,\n interaction.pointers.map(p => p.pointer)\n );\n\n // fire appropriate signals\n const signalArg = {\n interaction,\n };\n\n scope.interactions.signals.fire('action-resume', signalArg);\n\n // fire a reume event\n const resumeEvent = new scope.InteractEvent(\n interaction, event, interaction.prepared.name, 'resume', interaction.element);\n\n interaction._fireEvent(resumeEvent);\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur);\n break;\n }\n\n element = utils.dom.parentNode(element);\n }\n }\n}\n\nfunction release ({ interaction, event, noPreEnd }, scope) {\n const state = interaction.inertia;\n\n if (!interaction.interacting() ||\n (interaction.simulation && interaction.simulation.active) ||\n noPreEnd) {\n return;\n }\n\n const options = getOptions(interaction);\n\n const now = new Date().getTime();\n const { client: velocityClient } = interaction.coords.velocity;\n const pointerSpeed = utils.hypot(velocityClient.x, velocityClient.y);\n\n let smoothEnd = false;\n let modifierResult;\n\n // check if inertia should be started\n const inertiaPossible = (options && options.enabled\n && interaction.prepared.name !== 'gesture'\n && event !== state.startEvent);\n\n const inertia = (inertiaPossible\n && (now - interaction.coords.cur.timeStamp) < 50\n && pointerSpeed > options.minSpeed\n && pointerSpeed > options.endSpeed);\n\n const modifierArg = {\n interaction,\n pageCoords: utils.extend({}, interaction.coords.cur.page),\n states: inertiaPossible && interaction.modifiers.states.map(\n modifierStatus => utils.extend({}, modifierStatus)\n ),\n preEnd: true,\n requireEndOnly: true,\n };\n\n // smoothEnd\n if (inertiaPossible && !inertia) {\n modifierResult = modifiers.setAll(modifierArg);\n\n if (modifierResult.shouldMove) {\n smoothEnd = true;\n }\n }\n\n if (!(inertia || smoothEnd)) { return; }\n\n utils.pointer.copyCoords(state.upCoords, interaction.coords.cur);\n\n interaction.pointers[0].pointer = state.startEvent = new scope.InteractEvent(\n interaction, event, interaction.prepared.name, 'inertiastart', interaction.element);\n\n state.t0 = now;\n\n state.active = true;\n state.allowResume = options.allowResume;\n interaction.simulation = state;\n\n interaction.target.fire(state.startEvent);\n\n if (inertia) {\n state.vx0 = interaction.coords.velocity.client.x;\n state.vy0 = interaction.coords.velocity.client.y;\n state.v0 = pointerSpeed;\n\n calcInertia(interaction, state);\n\n utils.extend(modifierArg.pageCoords, interaction.coords.cur.page);\n\n modifierArg.pageCoords.x += state.xe;\n modifierArg.pageCoords.y += state.ye;\n\n modifierResult = modifiers.setAll(modifierArg);\n\n state.modifiedXe += modifierResult.delta.x;\n state.modifiedYe += modifierResult.delta.y;\n\n state.i = raf.request(() => inertiaTick(interaction));\n }\n else {\n state.smoothEnd = true;\n state.xe = modifierResult.delta.x;\n state.ye = modifierResult.delta.y;\n\n state.sx = state.sy = 0;\n\n state.i = raf.request(() => smothEndTick(interaction));\n }\n\n return false;\n}\n\nfunction stop ({ interaction }) {\n const state = interaction.inertia;\n\n if (state.active) {\n raf.cancel(state.i);\n state.active = false;\n interaction.simulation = null;\n }\n}\n\nfunction calcInertia (interaction, state) {\n const options = getOptions(interaction);\n const lambda = options.resistance;\n const inertiaDur = -Math.log(options.endSpeed / state.v0) / lambda;\n\n state.x0 = interaction.prevEvent.page.x;\n state.y0 = interaction.prevEvent.page.y;\n state.t0 = state.startEvent.timeStamp / 1000;\n state.sx = state.sy = 0;\n\n state.modifiedXe = state.xe = (state.vx0 - inertiaDur) / lambda;\n state.modifiedYe = state.ye = (state.vy0 - inertiaDur) / lambda;\n state.te = inertiaDur;\n\n state.lambda_v0 = lambda / state.v0;\n state.one_ve_v0 = 1 - options.endSpeed / state.v0;\n}\n\nfunction inertiaTick (interaction) {\n updateInertiaCoords(interaction);\n utils.pointer.setCoordDeltas(interaction.coords.delta, interaction.coords.prev, interaction.coords.cur);\n utils.pointer.setCoordVelocity(interaction.coords.velocity, interaction.coords.delta);\n\n const state = interaction.inertia;\n const options = getOptions(interaction);\n const lambda = options.resistance;\n const t = new Date().getTime() / 1000 - state.t0;\n\n if (t < state.te) {\n\n const progress = 1 - (Math.exp(-lambda * t) - state.lambda_v0) / state.one_ve_v0;\n\n if (state.modifiedXe === state.xe && state.modifiedYe === state.ye) {\n state.sx = state.xe * progress;\n state.sy = state.ye * progress;\n }\n else {\n const quadPoint = utils.getQuadraticCurvePoint(\n 0, 0,\n state.xe, state.ye,\n state.modifiedXe, state.modifiedYe,\n progress);\n\n state.sx = quadPoint.x;\n state.sy = quadPoint.y;\n }\n\n interaction.move();\n\n state.i = raf.request(() => inertiaTick(interaction));\n }\n else {\n state.sx = state.modifiedXe;\n state.sy = state.modifiedYe;\n\n interaction.move();\n interaction.end(state.startEvent);\n state.active = false;\n interaction.simulation = null;\n }\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur);\n}\n\nfunction smothEndTick (interaction) {\n updateInertiaCoords(interaction);\n\n const state = interaction.inertia;\n const t = new Date().getTime() - state.t0;\n const { smoothEndDuration: duration } = getOptions(interaction);\n\n if (t < duration) {\n state.sx = utils.easeOutQuad(t, 0, state.xe, duration);\n state.sy = utils.easeOutQuad(t, 0, state.ye, duration);\n\n interaction.move();\n\n state.i = raf.request(() => smothEndTick(interaction));\n }\n else {\n state.sx = state.xe;\n state.sy = state.ye;\n\n interaction.move();\n interaction.end(state.startEvent);\n\n state.smoothEnd =\n state.active = false;\n interaction.simulation = null;\n }\n}\n\nfunction updateInertiaCoords (interaction) {\n const state = interaction.inertia;\n\n // return if inertia isn't running\n if (!state.active) { return; }\n\n const pageUp = state.upCoords.page;\n const clientUp = state.upCoords.client;\n\n utils.pointer.setCoords(interaction.coords.cur, [ {\n pageX : pageUp.x + state.sx,\n pageY : pageUp.y + state.sy,\n clientX: clientUp.x + state.sx,\n clientY: clientUp.y + state.sy,\n } ]);\n}\n\nfunction getOptions ({ target, prepared }) {\n return target && target.options && prepared.name && target.options[prepared.name].inertia;\n}\n\nexport default {\n install,\n calcInertia,\n inertiaTick,\n smothEndTick,\n updateInertiaCoords,\n};\n","import * as arr from '@interactjs/utils/arr';\nimport extend from '@interactjs/utils/extend';\nimport normalize from '@interactjs/utils/normalizeListeners';\n\nfunction fireUntilImmediateStopped (event, listeners) {\n for (const listener of listeners) {\n if (event.immediatePropagationStopped) { break; }\n\n listener(event);\n }\n}\n\nclass Eventable {\n\n constructor (options) {\n this.options = extend({}, options || {});\n this.types = {};\n this.propagationStopped = this.immediatePropagationStopped = false;\n }\n\n fire (event) {\n let listeners;\n const global = this.global;\n\n // Interactable#on() listeners\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, listener) {\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, listener) {\n const listeners = normalize(type, listener);\n\n for (type in listeners) {\n const eventList = this.types[type];\n\n if (!eventList || !eventList.length) { continue; }\n\n for (listener of listeners[type]) {\n const index = eventList.indexOf(listener);\n\n if (index !== -1) {\n eventList.splice(index, 1);\n }\n }\n }\n }\n}\n\nexport default Eventable;\n","import clone from '@interactjs/utils/clone';\nimport * as is from '@interactjs/utils/is';\nimport events from '@interactjs/utils/events';\nimport extend from '@interactjs/utils/extend';\nimport * as arr from '@interactjs/utils/arr';\nimport normalizeListeners from '@interactjs/utils/normalizeListeners';\nimport Eventable from './Eventable';\n\nimport {\n getElementRect,\n nodeContains,\n trySelector,\n} from '@interactjs/utils/domUtils';\nimport { getWindow } from '@interactjs/utils/window';\nimport browser from '@interactjs/utils/browser';\n\nclass Interactable {\n get _defaults () {\n return {\n base: {},\n perAction: {},\n };\n }\n\n /** */\n constructor (target, options, defaultContext) {\n this._actions = options.actions;\n this.target = target;\n this.events = new Eventable();\n this._context = options.context || defaultContext;\n this._win = getWindow(trySelector(target)? this._context : target);\n this._doc = this._win.document;\n\n this.set(options);\n }\n\n setOnEvents (actionName, phases) {\n if (is.func(phases.onstart) ) { this.on(`${actionName}start` , phases.onstart ); }\n if (is.func(phases.onmove) ) { this.on(`${actionName}move` , phases.onmove ); }\n if (is.func(phases.onend) ) { this.on(`${actionName}end` , phases.onend ); }\n if (is.func(phases.oninertiastart)) { this.on(`${actionName}inertiastart`, phases.oninertiastart); }\n\n return this;\n }\n\n updatePerActionListeners (actionName, prev, cur) {\n if (is.array(prev)) {\n this.off(actionName, prev);\n }\n\n if (is.array(cur)) {\n this.on(actionName, cur);\n }\n }\n\n setPerAction (actionName, options) {\n const defaults = this._defaults;\n\n // for all the default per-action options\n for (const optionName in options) {\n const actionOptions = this.options[actionName];\n const optionValue = options[optionName];\n const isArray = is.array(optionValue);\n\n // remove old event listeners and add new ones\n if (optionName === 'listeners') {\n this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue);\n }\n\n // if the option value is an array\n if (isArray) {\n actionOptions[optionName] = arr.from(optionValue);\n }\n // if the option value is an object\n else if (!isArray && is.plainObject(optionValue)) {\n // copy the object\n actionOptions[optionName] = extend(\n actionOptions[optionName] || {},\n clone(optionValue));\n\n // set anabled field to true if it exists in the defaults\n if (is.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) {\n actionOptions[optionName].enabled = optionValue.enabled === false? false : true;\n }\n }\n // if the option value is a boolean and the default is an object\n else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n actionOptions[optionName].enabled = optionValue;\n }\n // if it's anything else, do a plain assignment\n else {\n actionOptions[optionName] = optionValue;\n }\n }\n }\n\n /**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {object} The object's bounding rectangle.\n */\n getRect (element) {\n element = element || this.target;\n\n if (is.string(this.target) && !(is.element(element))) {\n element = this._context.querySelector(this.target);\n }\n\n return getElementRect(element);\n }\n\n /**\n * Returns or sets the function used to calculate the interactable's\n * element's rectangle\n *\n * @param {function} [checker] A function which returns this Interactable's\n * bounding rectangle. See {@link Interactable.getRect}\n * @return {function | object} The checker function or this Interactable\n */\n rectChecker (checker) {\n if (is.func(checker)) {\n this.getRect = checker;\n\n return this;\n }\n\n if (checker === null) {\n delete this.options.getRect;\n\n return this;\n }\n\n return this.getRect;\n }\n\n _backCompatOption (optionName, newValue) {\n if (trySelector(newValue) || is.object(newValue)) {\n this.options[optionName] = newValue;\n\n for (const action of this._actions.names) {\n this.options[action][optionName] = newValue;\n }\n\n return this;\n }\n\n return this.options[optionName];\n }\n\n /**\n * Gets or sets the origin of the Interactable's element. The x and y\n * of the origin will be subtracted from action event coordinates.\n *\n * @param {Element | object | string} [origin] An HTML or SVG Element whose\n * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\n * or any CSS selector\n *\n * @return {object} The current origin or this Interactable\n */\n origin (newValue) {\n return this._backCompatOption('origin', newValue);\n }\n\n /**\n * Returns or sets the mouse coordinate types used to calculate the\n * movement of the pointer.\n *\n * @param {string} [newValue] Use 'client' if you will be scrolling while\n * interacting; Use 'page' if you want autoScroll to work\n * @return {string | object} The current deltaSource or this Interactable\n */\n deltaSource (newValue) {\n if (newValue === 'page' || newValue === 'client') {\n this.options.deltaSource = newValue;\n\n return this;\n }\n\n return this.options.deltaSource;\n }\n\n /**\n * Gets the selector context Node of the Interactable. The default is\n * `window.document`.\n *\n * @return {Node} The context Node of this Interactable\n */\n context () {\n return this._context;\n }\n\n inContext (element) {\n return (this._context === element.ownerDocument\n || nodeContains(this._context, element));\n }\n\n /**\n * Calls listeners for the given InteractEvent type bound globally\n * and directly to this Interactable\n *\n * @param {InteractEvent} iEvent The InteractEvent object to be fired on this\n * Interactable\n * @return {Interactable} this Interactable\n */\n fire (iEvent) {\n this.events.fire(iEvent);\n\n return this;\n }\n\n _onOff (method, typeArg, listenerArg, options) {\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg;\n listenerArg = null;\n }\n\n const addRemove = method === 'on' ? 'add' : 'remove';\n const listeners = normalizeListeners(typeArg, listenerArg);\n\n for (let type in listeners) {\n if (type === 'wheel') { type = browser.wheelEvent; }\n\n for (const listener of listeners[type]) {\n // if it is an action event type\n if (arr.contains(this._actions.eventTypes, type)) {\n this.events[method](type, listener);\n }\n // delegated event\n else if (is.string(this.target)) {\n events[`${addRemove}Delegate`](this.target, this._context, type, listener, options);\n }\n // remove listener from this Interatable's element\n else {\n events[addRemove](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, listener, options) {\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, listener, options) {\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) {\n const defaults = this._defaults;\n\n if (!is.object(options)) {\n options = {};\n }\n\n this.options = clone(defaults.base);\n\n for (const actionName in this._actions.methodDict) {\n const methodName = this._actions.methodDict[actionName];\n\n this.options[actionName] = {};\n this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults[actionName]));\n\n this[methodName](options[actionName]);\n }\n\n for (const setting in options) {\n if (is.func(this[setting])) {\n this[setting](options[setting]);\n }\n }\n\n return this;\n }\n\n /**\n * Remove this interactable from the list of interactables and remove it's\n * action capabilities and event listeners\n *\n * @return {interact}\n */\n unset () {\n events.remove(this.target, 'all');\n\n if (is.string(this.target)) {\n // remove delegated events\n for (const type in events.delegatedEvents) {\n const delegated = events.delegatedEvents[type];\n\n if (delegated.selectors[0] === this.target\n && delegated.contexts[0] === this._context) {\n\n delegated.selectors.splice(0, 1);\n delegated.contexts .splice(0, 1);\n delegated.listeners.splice(0, 1);\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegated[type] = null;\n }\n }\n\n events.remove(this._context, type, events.delegateListener);\n events.remove(this._context, type, events.delegateUseCapture, true);\n }\n }\n else {\n events.remove(this, 'all');\n }\n }\n}\n\nexport default Interactable;\n","import InteractEvent from './InteractEvent';\nimport * as utils from '@interactjs/utils';\n\nclass Interaction {\n get pointerMoveTolerance () {\n return 1;\n }\n\n /** */\n constructor ({ pointerType, signals }) {\n this._signals = signals;\n\n this.target = null; // current interactable being interacted with\n this.element = null; // the target element of the interactable\n this.prepared = { // action that's ready to be fired on next move event\n name : null,\n axis : null,\n edges: null,\n };\n\n // keep track of added pointers\n this.pointers = [/* { id, pointer, event, target, downTime }*/];\n\n this.coords = {\n // Starting InteractEvent pointer coordinates\n start: utils.pointer.newCoords(),\n // Previous native pointer move event coordinates\n prev: utils.pointer.newCoords(),\n // current native pointer move event coordinates\n cur: utils.pointer.newCoords(),\n // Change in coordinates and time of the pointer\n delta: utils.pointer.newCoords(),\n // pointer velocity\n velocity: utils.pointer.newCoords(),\n };\n\n this.downEvent = null; // pointerdown/mousedown/touchstart event\n this.downPointer = {};\n\n this._latestPointer = {\n pointer: null,\n event: null,\n eventTarget : null,\n };\n\n this.prevEvent = null; // previous action event\n\n this.pointerIsDown = false;\n this.pointerWasMoved = false;\n this._interacting = false;\n this._ending = false;\n\n this.pointerType = pointerType;\n\n this._signals.fire('new', this);\n }\n\n pointerDown (pointer, event, eventTarget) {\n const pointerIndex = this.updatePointer(pointer, event, eventTarget, true);\n\n this._signals.fire('down', {\n pointer,\n event,\n eventTarget,\n pointerIndex,\n interaction: this,\n });\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable({\n * // disable the default drag start by down->move\n * manualStart: true\n * })\n * // start dragging after the user holds the pointer down\n * .on('hold', function (event) {\n * var interaction = event.interaction;\n *\n * if (!interaction.interacting()) {\n * interaction.start({ name: 'drag' },\n * event.interactable,\n * event.currentTarget);\n * }\n * });\n * ```\n *\n * Start an action with the given Interactable and Element as tartgets. The\n * action must be enabled for the target Interactable and an appropriate\n * number of pointers must be held down - 1 for drag/resize, 2 for gesture.\n *\n * Use it with `interactable.able({ manualStart: false })` to always\n * [start actions manually](https://github.com/taye/interact.js/issues/114)\n *\n * @param {object} action The action to be performed - drag, resize, etc.\n * @param {Interactable} target The Interactable to target\n * @param {Element} element The DOM Element to target\n * @return {object} interact\n */\n start (action, target, element) {\n if (this.interacting()\n || !this.pointerIsDown\n || this.pointers.length < (action.name === 'gesture'? 2 : 1)) {\n return;\n }\n\n utils.copyAction(this.prepared, action);\n\n this.target = target;\n this.element = element;\n this._interacting = this._doPhase({\n interaction: this,\n event: this.downEvent,\n phase: 'start',\n });\n }\n\n pointerMove (pointer, event, eventTarget) {\n if (!this.simulation) {\n this.updatePointer(pointer, event, eventTarget, false);\n utils.pointer.setCoords(this.coords.cur, this.pointers.map(p => p.pointer));\n }\n\n const duplicateMove = (this.coords.cur.page.x === this.coords.prev.page.x\n && this.coords.cur.page.y === this.coords.prev.page.y\n && this.coords.cur.client.x === this.coords.prev.client.x\n && this.coords.cur.client.y === this.coords.prev.client.y);\n\n let dx;\n let dy;\n\n // register movement greater than pointerMoveTolerance\n if (this.pointerIsDown && !this.pointerWasMoved) {\n dx = this.coords.cur.client.x - this.coords.start.client.x;\n dy = this.coords.cur.client.y - this.coords.start.client.y;\n\n this.pointerWasMoved = utils.hypot(dx, dy) > this.pointerMoveTolerance;\n }\n\n const signalArg = {\n pointer,\n pointerIndex: this.getPointerIndex(pointer),\n event,\n eventTarget,\n dx,\n dy,\n duplicate: duplicateMove,\n interaction: this,\n };\n\n if (!duplicateMove) {\n // set pointer coordinate, time changes and velocity\n utils.pointer.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur);\n utils.pointer.setCoordVelocity(this.coords.velocity, this.coords.delta);\n }\n\n this._signals.fire('move', signalArg);\n\n if (!duplicateMove) {\n // if interacting, fire an 'action-move' signal etc\n if (this.interacting()) {\n this.move(signalArg);\n }\n\n if (this.pointerWasMoved) {\n utils.pointer.copyCoords(this.coords.prev, this.coords.cur);\n }\n }\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('dragmove', function (event) {\n * if (someCondition) {\n * // change the snap settings\n * event.interactable.draggable({ snap: { targets: [] }});\n * // fire another move event with re-calculated snap\n * event.interaction.move();\n * }\n * });\n * ```\n *\n * Force a move of the current action at the same coordinates. Useful if\n * snap/restrict has been changed and you want a movement with the new\n * settings.\n */\n move (signalArg) {\n signalArg = utils.extend({\n pointer: this._latestPointer.pointer,\n event: this._latestPointer.event,\n eventTarget: this._latestPointer.eventTarget,\n interaction: this,\n noBefore: false,\n }, signalArg || {});\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, event, eventTarget, curEventTarget) {\n const pointerIndex = this.getPointerIndex(pointer);\n\n this._signals.fire(/cancel$/i.test(event.type)? 'cancel' : 'up', {\n pointer,\n pointerIndex,\n event,\n eventTarget,\n curEventTarget,\n interaction: this,\n });\n\n if (!this.simulation) {\n this.end(event);\n }\n\n this.pointerIsDown = false;\n this.removePointer(pointer, event);\n }\n\n documentBlur (event) {\n this.end(event);\n this._signals.fire('blur', { event, interaction: this });\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('move', function (event) {\n * if (event.pageX > 1000) {\n * // end the current action\n * event.interaction.end();\n * // stop all further listeners from being called\n * event.stopImmediatePropagation();\n * }\n * });\n * ```\n *\n * @param {PointerEvent} [event]\n */\n end (event) {\n this._ending = true;\n event = event || this._latestPointer.event;\n let endPhaseResult;\n\n if (this.interacting()) {\n endPhaseResult = this._doPhase({\n event,\n interaction: this,\n phase: 'end',\n });\n }\n\n this._ending = false;\n\n if (endPhaseResult === true) {\n this.stop();\n }\n }\n\n currentAction () {\n return this._interacting? this.prepared.name: null;\n }\n\n interacting () {\n return this._interacting;\n }\n\n /** */\n stop () {\n this._signals.fire('stop', { interaction: this });\n\n this.target = this.element = null;\n\n this._interacting = false;\n this.prepared.name = this.prevEvent = null;\n }\n\n getPointerIndex (pointer) {\n const pointerId = utils.pointer.getPointerId(pointer);\n\n // mouse and pen interactions may have only one pointer\n return (this.pointerType === 'mouse' || this.pointerType === 'pen')\n ? 0\n : utils.arr.findIndex(this.pointers, curPointer => curPointer.id === pointerId);\n }\n\n getPointerInfo (pointer) {\n return this.pointers[this.getPointerIndex(pointer)];\n }\n\n updatePointer (pointer, event, eventTarget, down) {\n const id = utils.pointer.getPointerId(pointer);\n let pointerIndex = this.getPointerIndex(pointer);\n let pointerInfo = this.pointers[pointerIndex];\n\n if (!pointerInfo) {\n pointerInfo = {\n id,\n pointer,\n event,\n downTime: null,\n downTarget: null,\n };\n\n pointerIndex = this.pointers.length;\n this.pointers.push(pointerInfo);\n }\n else {\n pointerInfo.pointer = pointer;\n }\n\n if (down) {\n this.pointerIsDown = true;\n\n if (!this.interacting()) {\n utils.pointer.setCoords(this.coords.start, this.pointers.map(p => p.pointer));\n\n utils.pointer.copyCoords(this.coords.cur , this.coords.start);\n utils.pointer.copyCoords(this.coords.prev, this.coords.start);\n utils.pointer.pointerExtend(this.downPointer, pointer);\n\n this.downEvent = event;\n pointerInfo.downTime = this.coords.cur.timeStamp;\n pointerInfo.downTarget = eventTarget;\n\n this.pointerWasMoved = false;\n }\n }\n\n this._updateLatestPointer(pointer, event, eventTarget);\n\n this._signals.fire('update-pointer', {\n pointer,\n event,\n eventTarget,\n down,\n pointerInfo,\n pointerIndex,\n interaction: this,\n });\n\n return pointerIndex;\n }\n\n removePointer (pointer, event) {\n const pointerIndex = this.getPointerIndex(pointer);\n\n if (pointerIndex === -1) { return; }\n\n const pointerInfo = this.pointers[pointerIndex];\n\n this._signals.fire('remove-pointer', {\n pointer,\n event,\n pointerIndex,\n pointerInfo,\n interaction: this,\n });\n\n this.pointers.splice(pointerIndex, 1);\n }\n\n _updateLatestPointer (pointer, event, eventTarget) {\n this._latestPointer.pointer = pointer;\n this._latestPointer.event = event;\n this._latestPointer.eventTarget = eventTarget;\n }\n\n _createPreparedEvent (event, phase, preEnd, type) {\n const actionName = this.prepared.name;\n\n return new InteractEvent(this, event, actionName, phase, this.element, null, preEnd, type);\n }\n\n _fireEvent (iEvent) {\n this.target.fire(iEvent);\n\n if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n this.prevEvent = iEvent;\n }\n }\n\n _doPhase (signalArg) {\n const { event, phase, preEnd, type } = signalArg;\n\n if (!signalArg.noBefore) {\n const beforeResult = this._signals.fire(`before-action-${phase}`, signalArg);\n\n if (beforeResult === false) {\n return false;\n }\n }\n\n const iEvent = signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type);\n\n this._signals.fire(`action-${phase}`, signalArg);\n\n this._fireEvent(iEvent);\n\n this._signals.fire(`after-action-${phase}`, signalArg);\n\n return true;\n }\n}\n\n/**\n * @alias Interaction.prototype.move\n */\nInteraction.prototype.doMove = utils.warnOnce(\n function (signalArg) {\n this.move(signalArg);\n },\n 'The interaction.doMove() method has been renamed to interaction.move()');\n\nexport default Interaction;\n","import * as utils from './index';\n\nconst finder = {\n methodOrder: [ 'simulationResume', 'mouseOrPen', 'hasPointer', 'idle' ],\n\n search: function (details) {\n for (const method of finder.methodOrder) {\n const interaction = finder[method](details);\n\n if (interaction) {\n return interaction;\n }\n }\n },\n\n // try to resume simulation with a new pointer\n simulationResume: function ({ pointerType, eventType, eventTarget, scope }) {\n if (!/down|start/i.test(eventType)) {\n return null;\n }\n\n for (const interaction of scope.interactions.list) {\n let element = eventTarget;\n\n if (interaction.simulation && interaction.simulation.allowResume\n && (interaction.pointerType === pointerType)) {\n while (element) {\n // if the element is the interaction element\n if (element === interaction.element) {\n return interaction;\n }\n element = utils.dom.parentNode(element);\n }\n }\n }\n\n return null;\n },\n\n // if it's a mouse or pen interaction\n mouseOrPen: function ({ pointerId, pointerType, eventType, scope }) {\n if (pointerType !== 'mouse' && pointerType !== 'pen') {\n return null;\n }\n\n let firstNonActive;\n\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType) {\n // if it's a down event, skip interactions with running simulations\n if (interaction.simulation && !hasPointerId(interaction, pointerId)) { continue; }\n\n // if the interaction is active, return it immediately\n if (interaction.interacting()) {\n return interaction;\n }\n // otherwise save it and look for another active interaction\n else if (!firstNonActive) {\n firstNonActive = interaction;\n }\n }\n }\n\n // if no active mouse interaction was found use the first inactive mouse\n // interaction\n if (firstNonActive) {\n return firstNonActive;\n }\n\n // find any mouse or pen interaction.\n // ignore the interaction if the eventType is a *down, and a simulation\n // is active\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) {\n return interaction;\n }\n }\n\n return null;\n },\n\n // get interaction that has this pointer\n hasPointer: function ({ pointerId, scope }) {\n for (const interaction of scope.interactions.list) {\n if (hasPointerId(interaction, pointerId)) {\n return interaction;\n }\n }\n },\n\n // get first idle interaction with a matching pointerType\n idle: function ({ pointerType, scope }) {\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.target;\n // don't add this pointer if there is a target interactable and it\n // isn't gesturable\n if (target && !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, pointerId) {\n return utils.arr.some(interaction.pointers, ({ id }) => id === pointerId);\n}\n\nexport default finder;\n","import InteractionBase from './Interaction';\nimport events from '@interactjs/utils/events';\nimport finder from '@interactjs/utils/interactionFinder';\nimport browser from '@interactjs/utils/browser';\nimport domObjects from '@interactjs/utils/domObjects';\nimport pointerUtils from '@interactjs/utils/pointerUtils';\nimport Signals from '@interactjs/utils/Signals';\n\nconst methodNames = [\n 'pointerDown', 'pointerMove', 'pointerUp',\n 'updatePointer', 'removePointer', 'windowBlur',\n];\n\nfunction install (scope) {\n const signals = new Signals();\n\n const listeners = {};\n\n for (const method of methodNames) {\n listeners[method] = doOnInteractions(method, scope);\n }\n\n const eventMap = { /* 'eventType': listenerFunc */ };\n const pEventTypes = browser.pEventTypes;\n\n if (domObjects.PointerEvent) {\n eventMap[pEventTypes.down ] = listeners.pointerDown;\n eventMap[pEventTypes.move ] = listeners.pointerMove;\n eventMap[pEventTypes.up ] = listeners.pointerUp;\n eventMap[pEventTypes.cancel] = listeners.pointerUp;\n }\n else {\n eventMap.mousedown = listeners.pointerDown;\n eventMap.mousemove = listeners.pointerMove;\n eventMap.mouseup = listeners.pointerUp;\n\n eventMap.touchstart = listeners.pointerDown;\n eventMap.touchmove = listeners.pointerMove;\n eventMap.touchend = listeners.pointerUp;\n eventMap.touchcancel = listeners.pointerUp;\n }\n\n eventMap.blur = event => {\n for (const interaction of scope.interactions.list) {\n interaction.documentBlur(event);\n }\n };\n\n scope.signals.on('add-document' , onDocSignal);\n scope.signals.on('remove-document', onDocSignal);\n\n // for ignoring browser's simulated mouse events\n scope.prevTouchTime = 0;\n\n scope.Interaction = class Interaction extends InteractionBase {\n get pointerMoveTolerance () {\n return scope.interactions.pointerMoveTolerance;\n }\n\n set pointerMoveTolerance (value) {\n scope.interactions.pointerMoveTolerance = value;\n }\n };\n scope.interactions = {\n signals,\n // all active and idle interactions\n list: [],\n new (options) {\n options.signals = signals;\n\n return new scope.Interaction(options);\n },\n listeners,\n eventMap,\n pointerMoveTolerance: 1,\n };\n\n scope.actions = {\n names: [],\n methodDict: {},\n eventTypes: [],\n };\n}\n\nfunction doOnInteractions (method, scope) {\n return (function (event) {\n const interactions = scope.interactions.list;\n\n const pointerType = pointerUtils.getPointerType(event);\n const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event);\n const matches = []; // [ [pointer, interaction], ...]\n\n if (browser.supportsTouch && /touch/.test(event.type)) {\n scope.prevTouchTime = new Date().getTime();\n\n for (const changedTouch of event.changedTouches) {\n const pointer = changedTouch;\n const pointerId = pointerUtils.getPointerId(pointer);\n const searchDetails = {\n pointer,\n pointerId,\n pointerType,\n eventType: event.type,\n eventTarget,\n curEventTarget,\n scope,\n };\n const interaction = getInteraction(searchDetails);\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ]);\n }\n }\n else {\n let invalidPointer = false;\n\n if (!browser.supportsPointerEvent && /mouse/.test(event.type)) {\n // ignore mouse events while touch interactions are active\n for (let i = 0; i < interactions.length && !invalidPointer; i++) {\n invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown;\n }\n\n // try to ignore mouse events that are simulated by the browser\n // after a touch event\n invalidPointer = invalidPointer\n || (new Date().getTime() - scope.prevTouchTime < 500)\n // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated\n || event.timeStamp === 0;\n }\n\n if (!invalidPointer) {\n const searchDetails = {\n pointer: event,\n pointerId: pointerUtils.getPointerId(event),\n pointerType,\n eventType: event.type,\n curEventTarget,\n eventTarget,\n scope,\n };\n\n const interaction = getInteraction(searchDetails);\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ]);\n }\n }\n\n // eslint-disable-next-line no-shadow\n for (const [pointer, eventTarget, curEventTarget, interaction] of matches) {\n interaction[method](pointer, event, eventTarget, curEventTarget);\n }\n });\n}\n\nfunction getInteraction (searchDetails) {\n const { pointerType, scope } = searchDetails;\n\n const foundInteraction = finder.search(searchDetails);\n const signalArg = { interaction: foundInteraction, searchDetails };\n\n scope.interactions.signals.fire('find', signalArg);\n\n return signalArg.interaction || newInteraction({ pointerType }, scope);\n}\n\nexport function newInteraction (options, scope) {\n const interaction = scope.interactions.new(options);\n\n scope.interactions.list.push(interaction);\n return interaction;\n}\n\nfunction onDocSignal ({ doc, scope, options }, signalName) {\n const { eventMap } = scope.interactions;\n const eventMethod = signalName.indexOf('add') === 0\n ? events.add : events.remove;\n\n if (scope.browser.isIOS && !options.events) {\n options.events = { passive: false };\n }\n\n // delegate event listener\n for (const eventType in events.delegatedEvents) {\n eventMethod(doc, eventType, events.delegateListener);\n eventMethod(doc, eventType, events.delegateUseCapture, true);\n }\n\n const eventOptions = options && options.events;\n\n for (const eventType in eventMap) {\n eventMethod(doc, eventType, eventMap[eventType], eventOptions);\n }\n}\n\nexport default {\n install,\n onDocSignal,\n doOnInteractions,\n newInteraction,\n methodNames,\n};\n","import Eventable from './Eventable';\nimport defaults from './defaultOptions';\nimport * as utils from '@interactjs/utils';\nimport domObjects from '@interactjs/utils/domObjects';\n\nimport interactions from './interactions';\nimport InteractEvent from './InteractEvent';\nimport InteractableBase from './Interactable';\n\nconst {\n win,\n browser,\n raf,\n Signals,\n events,\n} = utils;\n\nexport function createScope () {\n const scope = {\n Signals,\n signals: new Signals(),\n browser,\n events,\n utils,\n defaults: utils.clone(defaults),\n Eventable,\n\n InteractEvent: InteractEvent,\n Interactable: class Interactable extends InteractableBase {\n get _defaults () { return scope.defaults; }\n\n set (options) {\n super.set(options);\n\n scope.interactables.signals.fire('set', {\n options,\n interactable: this,\n });\n\n return this;\n }\n\n unset () {\n super.unset();\n scope.interactables.signals.fire('unset', { interactable: this });\n }\n },\n\n interactables: {\n // all set interactables\n list: [],\n\n new (target, options) {\n options = utils.extend(options || {}, {\n actions: scope.actions,\n });\n\n const interactable = new scope.Interactable(target, options, scope.document);\n\n scope.addDocument(interactable._doc);\n\n scope.interactables.list.push(interactable);\n\n scope.interactables.signals.fire('new', {\n target,\n options,\n interactable: interactable,\n win: this._win,\n });\n\n return interactable;\n },\n\n indexOfElement (target, context) {\n context = context || scope.document;\n\n const list = this.list;\n\n for (let i = 0; i < list.length; i++) {\n const interactable = list[i];\n\n if (interactable.target === target && interactable._context === context) {\n return i;\n }\n }\n\n return -1;\n },\n\n get (element, options, dontCheckInContext) {\n const ret = this.list[this.indexOfElement(element, options && options.context)];\n\n return ret && (utils.is.string(element) || dontCheckInContext || ret.inContext(element))? ret : null;\n },\n\n forEachMatch (element, callback) {\n for (const interactable of this.list) {\n let ret;\n\n if ((utils.is.string(interactable.target)\n // target is a selector and the element matches\n ? (utils.is.element(element) && utils.dom.matchesSelector(element, interactable.target))\n // target is the element\n : element === interactable.target)\n // the element is in context\n && (interactable.inContext(element))) {\n ret = callback(interactable);\n }\n\n if (ret !== undefined) {\n return ret;\n }\n }\n },\n\n signals: new utils.Signals(),\n },\n\n // main document\n document: null,\n // all documents being listened to\n documents: [/* { doc, options } */],\n\n init (window) {\n return initScope(scope, window);\n },\n\n addDocument (doc, options) {\n // do nothing if document is already known\n if (scope.getDocIndex(doc) !== -1) { return false; }\n\n const window = win.getWindow(doc);\n\n options = options ? utils.extend({}, options) : {};\n\n scope.documents.push({ doc, options });\n events.documents.push(doc);\n\n // don't add an unload event for the main document\n // so that the page may be cached in browser history\n if (doc !== scope.document) {\n events.add(window, 'unload', scope.onWindowUnload);\n }\n\n scope.signals.fire('add-document', { doc, window, scope, options });\n },\n\n removeDocument (doc) {\n const index = scope.getDocIndex(doc);\n\n const window = win.getWindow(doc);\n const options = scope.documents[index].options;\n\n events.remove(window, 'unload', scope.onWindowUnload);\n\n scope.documents.splice(index, 1);\n events.documents.splice(index, 1);\n\n scope.signals.fire('remove-document', { doc, window, scope, options });\n },\n\n onWindowUnload (event) {\n scope.removeDocument(event.currentTarget.document);\n },\n\n getDocIndex (doc) {\n for (let i = 0; i < scope.documents.length; i++) {\n if (scope.documents[i].doc === doc) {\n return i;\n }\n }\n\n return -1;\n },\n\n getDocOptions (doc) {\n const docIndex = scope.getDocIndex(doc);\n\n return docIndex === -1 ? null : scope.documents[docIndex].options;\n },\n };\n\n return scope;\n}\n\nexport function initScope (scope, window) {\n win.init(window);\n domObjects.init(window);\n browser.init(window);\n raf.init(window);\n events.init(window);\n\n interactions.install(scope);\n scope.document = window.document;\n\n return scope;\n}\n","/** @module interact */\n\nimport browser from '@interactjs/utils/browser';\nimport events from '@interactjs/utils/events';\nimport * as utils from '@interactjs/utils';\nimport { createScope } from '@interactjs/core/scope';\n\nconst globalEvents = {};\nconst scope = createScope();\n\n/**\n * ```js\n * interact('#draggable').draggable(true);\n *\n * var rectables = interact('rect');\n * rectables\n * .gesturable(true)\n * .on('gesturemove', function (event) {\n * // ...\n * });\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @global\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\nfunction interact (target, options) {\n let interactable = scope.interactables.get(target, options);\n\n\n if (!interactable) {\n interactable = scope.interactables.new(target, options);\n interactable.events.global = globalEvents;\n }\n\n return interactable;\n}\n\nscope._plugins = [];\n\n/**\n * Use a plugin\n *\n * @alias module:interact.use\n *\n * @param {Object} plugin\n * @param {function} plugin.install\n * @return {interact}\n*/\ninteract.use = function (plugin) {\n if (scope._plugins.indexOf(plugin) !== -1) {\n return;\n }\n\n plugin.install(scope);\n scope._plugins.push(plugin);\n return interact;\n};\n\n/**\n * Check if an element or selector has been set with the {@link interact}\n * function\n *\n * @alias module:interact.isSet\n *\n * @param {Element} element The Element being searched for\n * @return {boolean} Indicates if the element or CSS selector was previously\n * passed to interact\n*/\ninteract.isSet = function (element, options) {\n return scope.interactables.indexOfElement(element, options && options.context) !== -1;\n};\n\n/**\n * Add a global listener for an InteractEvent or adds a DOM event to `document`\n *\n * @alias module:interact.on\n *\n * @param {string | array | object} type The types of events to listen for\n * @param {function} listener The function event (s)\n * @param {object | boolean} [options] object or useCapture flag for\n * addEventListener\n * @return {object} interact\n */\ninteract.on = function (type, listener, options) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/);\n }\n\n if (utils.is.array(type)) {\n for (const eventType of type) {\n interact.on(eventType, listener, options);\n }\n\n return interact;\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.on(prop, type[prop], listener);\n }\n\n return interact;\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (utils.arr.contains(scope.actions.eventTypes, type)) {\n // if this type of event was never bound\n if (!globalEvents[type]) {\n globalEvents[type] = [listener];\n }\n else {\n globalEvents[type].push(listener);\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n events.add(scope.document, type, listener, { options });\n }\n\n return interact;\n};\n\n/**\n * Removes a global InteractEvent listener or DOM event from `document`\n *\n * @alias module:interact.off\n *\n * @param {string | array | object} type The types of events that were listened\n * for\n * @param {function} listener The listener function to be removed\n * @param {object | boolean} options [options] object or useCapture flag for\n * removeEventListener\n * @return {object} interact\n */\ninteract.off = function (type, listener, options) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/);\n }\n\n if (utils.is.array(type)) {\n for (const eventType of type) {\n interact.off(eventType, listener, options);\n }\n\n return interact;\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.off(prop, type[prop], listener);\n }\n\n return interact;\n }\n\n if (!utils.arr.contains(scope.actions.eventTypes, type)) {\n events.remove(scope.document, type, listener, options);\n }\n else {\n let index;\n\n if (type in globalEvents\n && (index = globalEvents[type].indexOf(listener)) !== -1) {\n globalEvents[type].splice(index, 1);\n }\n }\n\n return interact;\n};\n\n/**\n * Returns an object which exposes internal data\n\n * @alias module:interact.debug\n *\n * @return {object} An object with properties that outline the current state\n * and expose internal functions and variables\n */\ninteract.debug = function () {\n return scope;\n};\n\n// expose the functions used to calculate multi-touch properties\ninteract.getPointerAverage = utils.pointer.pointerAverage;\ninteract.getTouchBBox = utils.pointer.touchBBox;\ninteract.getTouchDistance = utils.pointer.touchDistance;\ninteract.getTouchAngle = utils.pointer.touchAngle;\n\ninteract.getElementRect = utils.dom.getElementRect;\ninteract.getElementClientRect = utils.dom.getElementClientRect;\ninteract.matchesSelector = utils.dom.matchesSelector;\ninteract.closest = utils.dom.closest;\n\n/**\n * @alias module:interact.supportsTouch\n *\n * @return {boolean} Whether or not the browser supports touch input\n */\ninteract.supportsTouch = 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 */\ninteract.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 * @param {Event} event An event on which to call preventDefault()\n * @return {object} interact\n */\ninteract.stop = function (event) {\n for (const interaction of scope.interactions.list) {\n interaction.stop(event);\n }\n\n return interact;\n};\n\n/**\n * Returns or sets the distance the pointer must be moved before an action\n * sequence occurs. This also affects tolerance for tap events.\n *\n * @alias module:interact.pointerMoveTolerance\n *\n * @param {number} [newValue] The movement from the start position must be greater than this value\n * @return {interact | number}\n */\ninteract.pointerMoveTolerance = function (newValue) {\n if (utils.is.number(newValue)) {\n scope.interactions.pointerMoveTolerance = newValue;\n\n return interact;\n }\n\n return scope.interactions.pointerMoveTolerance;\n};\n\nscope.interactables.signals.on('unset', ({ interactable }) => {\n scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1);\n\n // Stop related interactions when an Interactable is unset\n for (const interaction of scope.interactions.list) {\n if (interaction.target === interactable && interaction.interacting() && interaction._ending) {\n interaction.stop();\n }\n }\n});\ninteract.addDocument = scope.addDocument;\ninteract.removeDocument = scope.removeDocument;\n\nscope.interact = interact;\n\nexport { scope };\nexport default interact;\n","import * as is from '@interactjs/utils/is';\nimport rectUtils from '@interactjs/utils/rect';\n\nfunction start ({ rect, startOffset, state }) {\n const { options } = state;\n const { elementRect } = options;\n const offset = {};\n\n if (rect && elementRect) {\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 else {\n offset.left = offset.top = offset.right = offset.bottom = 0;\n }\n\n state.offset = offset;\n}\n\nfunction set ({ coords, interaction, state }) {\n const { options, offset } = state;\n\n const restriction = getRestrictionRect(options.restriction, interaction, coords);\n\n if (!restriction) { return state; }\n\n const rect = restriction;\n\n // object is assumed to have\n // x, y, width, height or\n // left, top, right, bottom\n if ('x' in restriction && 'y' in restriction) {\n coords.x = Math.max(Math.min(rect.x + rect.width - offset.right , coords.x), rect.x + offset.left);\n coords.y = Math.max(Math.min(rect.y + rect.height - offset.bottom, coords.y), rect.y + offset.top );\n }\n else {\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}\n\nfunction getRestrictionRect (value, interaction, coords) {\n if (is.func(value)) {\n return rectUtils.resolveRectLike(value, interaction.target, interaction.element, [coords.x, coords.y, interaction]);\n } else {\n return rectUtils.resolveRectLike(value, interaction.target, interaction.element);\n }\n}\n\nconst restrict = {\n start,\n set,\n getRestrictionRect,\n defaults: {\n enabled: false,\n restriction: null,\n elementRect: null,\n },\n};\n\nexport default restrict;\n","// This module adds the options.resize.restrictEdges setting which sets min and\n// max for the top, left, bottom and right edges of the target being resized.\n//\n// interact(target).resize({\n// edges: { top: true, left: true },\n// restrictEdges: {\n// inner: { top: 200, left: 200, right: 400, bottom: 400 },\n// outer: { top: 0, left: 0, right: 600, bottom: 600 },\n// },\n// });\n\nimport extend from '@interactjs/utils/extend';\nimport rectUtils from '@interactjs/utils/rect';\nimport restrict from './pointer';\n\nconst { getRestrictionRect } = restrict;\nconst noInner = { top: +Infinity, left: +Infinity, bottom: -Infinity, right: -Infinity };\nconst noOuter = { top: -Infinity, left: -Infinity, bottom: +Infinity, right: +Infinity };\n\nfunction start ({ interaction, state }) {\n const { options } = state;\n const startOffset = interaction.modifiers.startOffset;\n let offset;\n\n if (options) {\n const offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page);\n\n offset = rectUtils.rectToXY(offsetRect);\n }\n\n offset = offset || { x: 0, y: 0 };\n\n state.offset = {\n top: offset.y + startOffset.top,\n left: offset.x + startOffset.left,\n bottom: offset.y - startOffset.bottom,\n right: offset.x - startOffset.right,\n };\n}\n\nfunction set ({ coords, interaction, state }) {\n const { offset, options } = state;\n const edges = interaction.prepared.linkedEdges || interaction.prepared.edges;\n\n if (!edges) {\n return;\n }\n\n const page = extend({}, coords);\n const inner = getRestrictionRect(options.inner, interaction, page) || {};\n const outer = getRestrictionRect(options.outer, interaction, page) || {};\n\n fixRect(inner, noInner);\n fixRect(outer, noOuter);\n\n if (edges.top) {\n coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top);\n }\n else if (edges.bottom) {\n coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom);\n }\n if (edges.left) {\n coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left);\n }\n else if (edges.right) {\n coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right);\n }\n}\n\nfunction fixRect (rect, defaults) {\n for (const edge of ['top', 'left', 'bottom', 'right']) {\n if (!(edge in rect)) {\n rect[edge] = defaults[edge];\n }\n }\n\n return rect;\n}\n\nconst restrictEdges = {\n noInner,\n noOuter,\n getRestrictionRect,\n start,\n set,\n defaults: {\n enabled: false,\n inner: null,\n outer: null,\n offset: null,\n },\n};\n\nexport default restrictEdges;\n","// This module adds the options.resize.restrictSize setting which sets min and\n// max width and height for the target being resized.\n//\n// interact(target).resize({\n// edges: { top: true, left: true },\n// restrictSize: {\n// min: { width: -600, height: -600 },\n// max: { width: 600, height: 600 },\n// },\n// });\n\nimport extend from '@interactjs/utils/extend';\nimport rectUtils from '@interactjs/utils/rect';\nimport restrictEdges from './edges';\n\nconst noMin = { width: -Infinity, height: -Infinity };\nconst noMax = { width: +Infinity, height: +Infinity };\n\nfunction start (arg) {\n return restrictEdges.start(arg);\n}\n\nfunction set (arg) {\n const { interaction, state } = arg;\n const { options } = state;\n const edges = interaction.prepared.linkedEdges || interaction.prepared.edges;\n\n if (!edges) {\n return;\n }\n\n const rect = rectUtils.xywhToTlbr(interaction.resizeRects.inverted);\n\n const minSize = rectUtils.tlbrToXywh(restrictEdges.getRestrictionRect(options.min, interaction)) || noMin;\n const maxSize = rectUtils.tlbrToXywh(restrictEdges.getRestrictionRect(options.max, interaction)) || noMax;\n\n state.options = {\n enabled: options.enabled,\n endOnly: options.endOnly,\n inner: extend({}, restrictEdges.noInner),\n outer: extend({}, restrictEdges.noOuter),\n };\n\n if (edges.top) {\n state.options.inner.top = rect.bottom - minSize.height;\n state.options.outer.top = rect.bottom - maxSize.height;\n }\n else if (edges.bottom) {\n state.options.inner.bottom = rect.top + minSize.height;\n state.options.outer.bottom = rect.top + maxSize.height;\n }\n if (edges.left) {\n state.options.inner.left = rect.right - minSize.width;\n state.options.outer.left = rect.right - maxSize.width;\n }\n else if (edges.right) {\n state.options.inner.right = rect.left + minSize.width;\n state.options.outer.right = rect.left + maxSize.width;\n }\n\n restrictEdges.set(arg);\n\n state.options = options;\n}\n\nconst restrictSize = {\n start,\n set,\n defaults: {\n enabled: false,\n min: null,\n max: null,\n },\n};\n\nexport default restrictSize;\n","import * as utils from '@interactjs/utils';\n\nfunction start ({ interaction, interactable, element, rect, state, startOffset }) {\n const { options } = state;\n const offsets = [];\n const optionsOrigin = utils.rect.rectToXY(utils.rect.resolveRectLike(options.origin));\n const origin = optionsOrigin || utils.getOriginXY(interactable, element, interaction.prepared.name);\n\n let snapOffset;\n\n if (options.offset === 'startCoords') {\n snapOffset = {\n x: interaction.coords.start.page.x - origin.x,\n y: interaction.coords.start.page.y - origin.y,\n };\n }\n else {\n const offsetRect = utils.rect.resolveRectLike(options.offset, interactable, element, [interaction]);\n\n snapOffset = utils.rect.rectToXY(offsetRect) || { x: 0, y: 0 };\n }\n\n const relativePoints = options.relativePoints || [];\n\n if (rect && options.relativePoints && options.relativePoints.length) {\n for (let index = 0; index < relativePoints.length; index++) {\n const relativePoint = relativePoints[index];\n\n offsets.push({\n index,\n relativePoint,\n x: startOffset.left - (rect.width * relativePoint.x) + snapOffset.x,\n y: startOffset.top - (rect.height * relativePoint.y) + snapOffset.y,\n });\n }\n }\n else {\n offsets.push(utils.extend({\n index: 0,\n relativePoint: null,\n }, snapOffset));\n }\n\n state.offsets = offsets;\n}\n\nfunction set ({ interaction, coords, state }) {\n const { options, offsets } = state;\n\n const origin = utils.getOriginXY(interaction.target, interaction.element, interaction.prepared.name);\n const page = utils.extend({}, coords);\n const targets = [];\n let target;\n let i;\n\n page.x -= origin.x;\n page.y -= origin.y;\n\n state.realX = page.x;\n state.realY = page.y;\n\n let len = options.targets? options.targets.length : 0;\n\n for (const offset of offsets) {\n\n const relativeX = page.x - offset.x;\n const relativeY = page.y - offset.y;\n\n for (let index = 0; index < options.targets.length; index++) {\n const snapTarget = options.targets[index];\n if (utils.is.func(snapTarget)) {\n target = snapTarget(relativeX, relativeY, interaction, offset, index);\n }\n else {\n target = snapTarget;\n }\n\n if (!target) { continue; }\n\n targets.push({\n x: utils.is.number(target.x) ? (target.x + offset.x) : relativeX,\n y: utils.is.number(target.y) ? (target.y + offset.y) : relativeY,\n\n range: utils.is.number(target.range)? target.range: options.range,\n });\n }\n }\n\n const closest = {\n target: null,\n inRange: false,\n distance: 0,\n range: 0,\n dx: 0,\n dy: 0,\n };\n\n for (i = 0, len = targets.length; i < len; i++) {\n target = targets[i];\n\n const range = target.range;\n const dx = target.x - page.x;\n const dy = target.y - page.y;\n const distance = utils.hypot(dx, dy);\n let inRange = distance <= range;\n\n // Infinite targets count as being out of range\n // compared to non infinite ones that are in range\n if (range === Infinity && closest.inRange && closest.range !== Infinity) {\n inRange = false;\n }\n\n if (!closest.target || (inRange\n // is the closest target in range?\n ? (closest.inRange && range !== Infinity\n // the pointer is relatively deeper in this target\n ? distance / range < closest.distance / closest.range\n // this target has Infinite range and the closest doesn't\n : (range === Infinity && closest.range !== Infinity) ||\n // OR this target is closer that the previous closest\n distance < closest.distance)\n // The other is not in range and the pointer is closer to this target\n : (!closest.inRange && distance < closest.distance))) {\n\n closest.target = target;\n closest.distance = distance;\n closest.range = range;\n closest.inRange = inRange;\n closest.dx = dx;\n closest.dy = dy;\n\n state.range = range;\n }\n }\n\n if (closest.inRange) {\n coords.x = closest.target.x;\n coords.y = closest.target.y;\n }\n\n state.closest = closest;\n}\n\nconst snap = {\n start,\n set,\n defaults: {\n enabled: false,\n range : Infinity,\n targets: null,\n offset: null,\n\n relativePoints: null,\n },\n};\n\nexport default snap;\n","// This module allows snapping of the size of targets during resize\n// interactions.\n\nimport extend from '@interactjs/utils/extend';\nimport * as is from '@interactjs/utils/is';\nimport snap from './pointer';\n\nfunction start (arg) {\n const { interaction, state } = arg;\n const { options } = state;\n const edges = interaction.prepared.edges;\n\n if (!edges) { return null; }\n\n arg.state = {\n options: {\n relativePoints: [{\n x: edges.left? 0 : 1,\n y: edges.top ? 0 : 1,\n }],\n origin: { x: 0, y: 0 },\n offset: options.offset || 'self',\n range: options.range,\n },\n };\n\n state.targetFields = state.targetFields || [\n ['width', 'height'],\n ['x', 'y'],\n ];\n\n snap.start(arg);\n state.offsets = arg.state.offsets;\n\n arg.state = state;\n}\n\nfunction set (arg) {\n const { interaction, state, coords } = arg;\n const { options, offsets } = state;\n const relative = {\n x: coords.x - offsets[0].x,\n y: coords.y - offsets[0].y,\n };\n\n state.options = extend({}, options);\n state.options.targets = [];\n\n for (const snapTarget of (options.targets || [])) {\n let target;\n\n if (is.func(snapTarget)) {\n target = snapTarget(relative.x, relative.y, interaction);\n }\n else {\n target = snapTarget;\n }\n\n if (!target) { continue; }\n\n for (const [xField, yField] of state.targetFields) {\n if (xField in target || yField in target) {\n target.x = target[xField];\n target.y = target[yField];\n\n break;\n }\n }\n\n state.options.targets.push(target);\n }\n\n snap.set(arg);\n\n state.options = options;\n}\n\nconst snapSize = {\n start,\n set,\n defaults: {\n enabled: false,\n range : Infinity,\n targets: null,\n offset: null,\n },\n};\n\nexport default snapSize;\n","/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * });\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * });\n */\n\nimport clone from '@interactjs/utils/clone';\nimport extend from '@interactjs/utils/extend';\nimport snapSize from './size';\n\nfunction install (scope) {\n const {\n defaults,\n } = scope;\n\n defaults.perAction.snapEdges = snapEdges.defaults;\n}\n\nfunction start (arg) {\n const edges = arg.interaction.prepared.edges;\n\n if (!edges) { return null; }\n\n arg.state.targetFields = arg.state.targetFields || [\n [edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom'],\n ];\n\n return snapSize.start(arg);\n}\n\nfunction set (arg) {\n return snapSize.set(arg);\n}\n\nfunction modifyCoords (arg) {\n snapSize.modifyCoords(arg);\n}\n\nconst snapEdges = {\n install,\n start,\n set,\n modifyCoords,\n defaults: extend(clone(snapSize.defaults), {\n offset: { x: 0, y: 0 },\n }),\n};\n\nexport default snapEdges;\n","import base from './base';\nimport snapModule from './snap/pointer';\nimport snapSizeModule from './snap/size';\nimport snapEdgesModule from './snap/edges';\nimport restrictModule from './restrict/pointer';\nimport restrictEdgesModule from './restrict/edges';\nimport restrictSizeModule from './restrict/size';\n\nconst { makeModifier } = base;\n\nexport const snap = makeModifier(snapModule, 'snap');\nexport const snapSize = makeModifier(snapSizeModule, 'snapSize');\nexport const snapEdges = makeModifier(snapEdgesModule, 'snapEdges');\nexport const restrict = makeModifier(restrictModule, 'restrict');\nexport const restrictEdges = makeModifier(restrictEdgesModule, 'restrictEdges');\nexport const restrictSize = makeModifier(restrictSizeModule, 'restrictSize');\n","import pointerUtils from '@interactjs/utils/pointerUtils';\n\nexport default class PointerEvent {\n /** */\n constructor (type, pointer, event, eventTarget, interaction) {\n pointerUtils.pointerExtend(this, event);\n\n if (event !== pointer) {\n pointerUtils.pointerExtend(this, pointer);\n }\n\n this.interaction = interaction;\n\n this.timeStamp = new Date().getTime();\n this.originalEvent = event;\n this.type = type;\n this.pointerId = pointerUtils.getPointerId(pointer);\n this.pointerType = pointerUtils.getPointerType(pointer);\n this.target = eventTarget;\n this.currentTarget = null;\n\n if (type === 'tap') {\n const pointerIndex = interaction.getPointerIndex(pointer);\n this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime;\n\n const interval = this.timeStamp - interaction.tapTime;\n\n this.double = !!(interaction.prevTap\n && interaction.prevTap.type !== 'doubletap'\n && interaction.prevTap.target === this.target\n && interval < 500);\n }\n else if (type === 'doubletap') {\n this.dt = pointer.timeStamp - interaction.tapTime;\n }\n }\n\n subtractOrigin ({ x: originX, y: originY }) {\n this.pageX -= originX;\n this.pageY -= originY;\n this.clientX -= originX;\n this.clientY -= originY;\n\n return this;\n }\n\n addOrigin ({ x: originX, y: originY }) {\n this.pageX += originX;\n this.pageY += originY;\n this.clientX += originX;\n this.clientY += originY;\n\n return this;\n }\n\n /** */\n preventDefault () {\n this.originalEvent.preventDefault();\n }\n\n /** */\n stopPropagation () {\n this.propagationStopped = true;\n }\n\n /** */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true;\n }\n}\n","import * as utils from '@interactjs/utils';\nimport PointerEvent from './PointerEvent';\n\nconst signals = new utils.Signals();\nconst simpleSignals = [ 'down', 'up', 'cancel' ];\nconst simpleEvents = [ 'down', 'up', 'cancel' ];\n\nconst pointerEvents = {\n install,\n signals,\n PointerEvent,\n fire,\n collectEventTargets,\n createSignalListener,\n defaults: {\n holdDuration: 600,\n ignoreFrom : null,\n allowFrom : null,\n origin : { x: 0, y: 0 },\n },\n types: [\n 'down',\n 'move',\n 'up',\n 'cancel',\n 'tap',\n 'doubletap',\n 'hold',\n ],\n};\n\nfunction fire (arg) {\n const {\n interaction, pointer, event, eventTarget,\n type = arg.pointerEvent.type,\n targets = collectEventTargets(arg),\n pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction),\n } = arg;\n\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n targets,\n type,\n pointerEvent,\n };\n\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i];\n\n for (const prop in target.props || {}) {\n pointerEvent[prop] = target.props[prop];\n }\n\n const origin = utils.getOriginXY(target.eventable, target.element);\n\n pointerEvent.subtractOrigin(origin);\n pointerEvent.eventable = target.eventable;\n pointerEvent.currentTarget = target.element;\n\n target.eventable.fire(pointerEvent);\n\n pointerEvent.addOrigin(origin);\n\n if (pointerEvent.immediatePropagationStopped\n || (pointerEvent.propagationStopped\n && (i + 1) < targets.length && targets[i + 1].element !== pointerEvent.currentTarget)) {\n break;\n }\n }\n\n signals.fire('fired', signalArg);\n\n if (type === 'tap') {\n // if pointerEvent should make a double tap, create and fire a doubletap\n // PointerEvent and use that as the prevTap\n const prevTap = pointerEvent.double\n ? fire({\n interaction, pointer, event, eventTarget,\n type: 'doubletap',\n })\n : pointerEvent;\n\n interaction.prevTap = prevTap;\n interaction.tapTime = prevTap.timeStamp;\n }\n\n return pointerEvent;\n}\n\nfunction collectEventTargets ({ interaction, pointer, event, eventTarget, type }) {\n const pointerIndex = interaction.getPointerIndex(pointer);\n const pointerInfo = interaction.pointers[pointerIndex];\n\n // do not fire a tap event if the pointer was moved before being lifted\n if (type === 'tap' && (interaction.pointerWasMoved\n // or if the pointerup target is different to the pointerdown target\n || !(pointerInfo && pointerInfo.downTarget === eventTarget))) {\n return [];\n }\n\n const path = utils.dom.getPath(eventTarget);\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n path,\n targets: [],\n element: null,\n };\n\n for (const element of path) {\n signalArg.element = element;\n\n signals.fire('collect-targets', signalArg);\n }\n\n if (type === 'hold') {\n signalArg.targets = signalArg.targets.filter(target =>\n target.eventable.options.holdDuration === interaction.pointers[pointerIndex].hold.duration);\n }\n\n return signalArg.targets;\n}\n\nfunction install (scope) {\n const {\n interactions,\n } = scope;\n\n scope.pointerEvents = pointerEvents;\n scope.defaults.pointerEvents = pointerEvents.defaults;\n\n interactions.signals.on('new', interaction => {\n interaction.prevTap = null; // the most recent tap event on this interaction\n interaction.tapTime = 0; // time of the most recent tap event\n });\n\n interactions.signals.on('update-pointer', function ({ down, pointerInfo }) {\n if (!down) {\n return;\n }\n\n pointerInfo.hold = { duration: Infinity, timeout: null };\n });\n\n interactions.signals.on('move', function ({ interaction, pointer, event, eventTarget, duplicateMove }) {\n const pointerIndex = interaction.getPointerIndex(pointer);\n\n if (!duplicateMove && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {\n if (interaction.pointerIsDown) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout);\n }\n\n fire({\n interaction, pointer, event, eventTarget,\n type: 'move',\n });\n }\n });\n\n interactions.signals.on('down', function ({ interaction, pointer, event, eventTarget, pointerIndex }) {\n const timer = interaction.pointers[pointerIndex].hold;\n const path = utils.dom.getPath(eventTarget);\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'hold',\n targets: [],\n path,\n element: null,\n };\n\n for (const element of path) {\n signalArg.element = element;\n\n signals.fire('collect-targets', signalArg);\n }\n\n if (!signalArg.targets.length) { return; }\n\n let minDuration = Infinity;\n\n for (const target of signalArg.targets) {\n const holdDuration = target.eventable.options.holdDuration;\n\n if (holdDuration < minDuration) {\n minDuration = holdDuration;\n }\n }\n\n timer.duration = minDuration;\n timer.timeout = setTimeout(function () {\n fire({\n interaction,\n eventTarget,\n pointer,\n event,\n type: 'hold',\n });\n }, minDuration);\n });\n\n interactions.signals.on('up', ({ interaction, pointer, event, eventTarget }) => {\n if (!interaction.pointerWasMoved) {\n fire({ interaction, eventTarget, pointer, event, type: 'tap' });\n }\n });\n\n for (const signalName of ['up', 'cancel']) {\n interactions.signals.on(signalName, function ({ interaction, pointerIndex }) {\n if (interaction.pointers[pointerIndex].hold) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout);\n }\n });\n }\n\n for (let i = 0; i < simpleSignals.length; i++) {\n interactions.signals.on(simpleSignals[i], createSignalListener(simpleEvents[i]));\n }\n}\n\nfunction createSignalListener (type) {\n return function ({ interaction, pointer, event, eventTarget }) {\n fire({ interaction, eventTarget, pointer, event, type });\n };\n}\n\nexport default pointerEvents;\n","function install (scope) {\n const {\n pointerEvents,\n interactions,\n } = scope;\n\n pointerEvents.signals.on('new', onNew);\n pointerEvents.signals.on('fired', arg => onFired(arg, pointerEvents));\n\n for (const signal of ['move', 'up', 'cancel', 'endall']) {\n interactions.signals.on(signal, endHoldRepeat);\n }\n\n // don't repeat by default\n pointerEvents.defaults.holdRepeatInterval = 0;\n pointerEvents.types.push('holdrepeat');\n}\n\nfunction onNew ({ pointerEvent }) {\n if (pointerEvent.type !== 'hold') { return; }\n\n pointerEvent.count = (pointerEvent.count || 0) + 1;\n}\n\nfunction onFired ({ interaction, pointerEvent, eventTarget, targets }, pointerEvents) {\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(function () {\n pointerEvents.fire({\n interaction,\n eventTarget,\n type: 'hold',\n pointer: pointerEvent,\n event: pointerEvent,\n });\n }, interval);\n}\n\nfunction endHoldRepeat ({ interaction }) {\n // set the interaction's holdStopTime property\n // to stop further holdRepeat events\n if (interaction.holdIntervalHandle) {\n clearInterval(interaction.holdIntervalHandle);\n interaction.holdIntervalHandle = null;\n }\n}\n\nexport default {\n install,\n};\n","import * as is from '@interactjs/utils/is';\nimport extend from '@interactjs/utils/extend';\nimport { merge } from '@interactjs/utils/arr';\n\nfunction install (scope) {\n const {\n pointerEvents,\n actions,\n Interactable,\n interactables,\n } = scope;\n\n pointerEvents.signals.on('collect-targets', function ({ targets, element, type, eventTarget }) {\n scope.interactables.forEachMatch(element, interactable => {\n const eventable = interactable.events;\n const options = eventable.options;\n\n if (\n eventable.types[type] &&\n eventable.types[type].length &&\n is.element(element) &&\n interactable.testIgnoreAllow(options, element, eventTarget)) {\n\n targets.push({\n element,\n eventable,\n props: { interactable },\n });\n }\n });\n });\n\n interactables.signals.on('new', function ({ interactable }) {\n interactable.events.getRect = function (element) {\n return interactable.getRect(element);\n };\n });\n\n interactables.signals.on('set', function ({ interactable, options }) {\n extend(interactable.events.options, pointerEvents.defaults);\n extend(interactable.events.options, options.pointerEvents || {});\n });\n\n merge(actions.eventTypes, pointerEvents.types);\n\n Interactable.prototype.pointerEvents = function (options) {\n extend(this.events.options, options);\n\n return this;\n };\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\nexport default {\n install,\n};\n","import pointerEvents from './base';\nimport holdRepeat from './holdRepeat';\nimport interactableTargets from './interactableTargets';\n\nfunction install (scope) {\n pointerEvents.install(scope);\n holdRepeat.install(scope);\n interactableTargets.install(scope);\n}\n\nexport {\n pointerEvents,\n holdRepeat,\n interactableTargets,\n install,\n};\n","import { newInteraction } from '@interactjs/core/interactions';\nimport {\n arr,\n is,\n extend,\n rect as rectUtils,\n pointer as pointerUtils,\n win,\n} from '@interactjs/utils';\n\nexport function install (scope) {\n const {\n actions,\n interactions,\n /** @lends Interactable */\n Interactable,\n } = scope;\n\n // add action reflow event types\n for (const actionName of actions.names) {\n actions.eventTypes.push(`${actionName}reflow`);\n }\n\n // remove completed reflow interactions\n interactions.signals.on('stop', ({ interaction }) => {\n if (interaction.pointerType === 'reflow') {\n interaction._reflowResolve();\n arr.remove(scope.interactions.list, interaction);\n }\n });\n\n /**\n * ```js\n * const interactable = interact(target);\n * const drag = { name: drag, axis: 'x' };\n * const resize = { name: resize, edges: { left: true, bottom: true };\n *\n * interactable.reflow(drag);\n * interactable.reflow(resize);\n * ```\n *\n * Start an action sequence to re-apply modifiers, check drops, etc.\n *\n * @param { Object } action The action to begin\n * @param { string } action.name The name of the action\n * @returns { Promise }\n */\n Interactable.prototype.reflow = function (action) {\n return reflow(this, action, scope);\n };\n}\n\nfunction reflow (interactable, action, scope) {\n const elements = is.string(interactable.target)\n ? arr.from(interactable._context.querySelectorAll(interactable.target))\n : [interactable.target];\n\n const Promise = win.window.Promise;\n const promises = Promise ? [] : null;\n\n for (const element of elements) {\n const rect = interactable.getRect(element);\n\n if (!rect) { break; }\n\n const runningInteraction = arr.find(\n scope.interactions.list,\n interaction => {\n return interaction.interacting() &&\n interaction.target === interactable &&\n interaction.element === element &&\n interaction.prepared.name === action.name;\n });\n let reflowPromise;\n\n if (runningInteraction) {\n runningInteraction.move();\n\n reflowPromise = runningInteraction._reflowPromise || new Promise(resolve => {\n runningInteraction._reflowResolve = resolve;\n });\n }\n else {\n const xywh = rectUtils.tlbrToXywh(rect);\n const coords = {\n page : { x: xywh.x, y: xywh.y },\n client : { x: xywh.x, y: xywh.y },\n timeStamp: Date.now(),\n };\n\n const event = pointerUtils.coordsToEvent(coords);\n reflowPromise = startReflow(scope, interactable, element, action, event);\n }\n\n if (promises) {\n promises.push(reflowPromise);\n }\n }\n\n return promises && Promise.all(promises).then(() => interactable);\n}\n\nfunction startReflow (scope, interactable, element, action, event) {\n const interaction = newInteraction({ pointerType: 'reflow' }, scope);\n const signalArg = {\n interaction,\n event,\n pointer: event,\n eventTarget: element,\n phase: 'reflow',\n };\n\n interaction.target = interactable;\n interaction.element = element;\n interaction.prepared = extend({}, action);\n interaction.prevEvent = event;\n interaction.updatePointer(event, event, element, true);\n\n interaction._doPhase(signalArg);\n\n const reflowPromise = win.window.Promise\n ? new win.window.Promise((resolve) => {\n interaction._reflowResolve = resolve;\n })\n : null;\n\n interaction._reflowPromise = reflowPromise;\n interaction.start(action, interactable, element);\n\n if (interaction._interacting) {\n interaction.move(signalArg);\n interaction.end(event);\n }\n else {\n interaction.stop();\n }\n\n interaction.removePointer(event, event);\n interaction.pointerIsDown = false;\n\n return reflowPromise;\n}\n\nexport default { install };\n","export default (grid) => {\n const coordFields = [\n ['x', 'y'],\n ['left', 'top'],\n ['right', 'bottom'],\n ['width', 'height'],\n ].filter(([xField, yField]) => xField in grid || yField in grid);\n\n return function (x, y) {\n const {\n range,\n limits = {\n left : -Infinity,\n right : Infinity,\n top : -Infinity,\n bottom: Infinity,\n },\n offset = { x: 0, y: 0 },\n } = grid;\n\n const result = { range };\n\n for (const [xField, yField] of coordFields) {\n const gridx = Math.round((x - offset.x) / grid[xField]);\n const gridy = Math.round((y - offset.y) / grid[yField]);\n\n result[xField] = Math.max(limits.left, Math.min(limits.right , gridx * grid[xField] + offset.x));\n result[yField] = Math.max(limits.top, Math.min(limits.bottom , gridy * grid[yField] + offset.y));\n }\n\n return result;\n };\n};\n","import grid from './grid';\n\nexport {\n grid,\n};\n","/* browser entry point */\n\nimport { default as interact, scope } from './interact';\nimport interactablePreventDefault from '@interactjs/core/interactablePreventDefault';\nimport inertia from '@interactjs/inertia';\nimport * as pointerEvents from '@interactjs/pointer-events';\nimport * as autoStart from '@interactjs/auto-start';\nimport * as actions from '@interactjs/actions';\nimport modifiersBase from '@interactjs/modifiers/base';\nimport * as modifiers from '@interactjs/modifiers';\nimport * as snappers from '@interactjs/utils/snappers';\nimport extend from '@interactjs/utils/extend';\nimport autoScroll from '@interactjs/auto-scroll';\nimport reflow from '@interactjs/reflow';\n\nexport function init (window) {\n scope.init(window);\n\n interact.use(interactablePreventDefault);\n\n // inertia\n interact.use(inertia);\n\n // pointerEvents\n interact.use(pointerEvents);\n\n // autoStart, hold\n interact.use(autoStart);\n\n // drag and drop, resize, gesture\n interact.use(actions);\n\n // snap, resize, etc.\n interact.use(modifiersBase);\n interact.modifiers = extend(scope.modifiers, modifiers);\n interact.snappers = snappers;\n interact.createSnapGrid = interact.snappers.grid;\n\n\n // for backwrads compatibility\n for (const type in modifiers) {\n const { _defaults, _methods } = modifiers[type];\n\n _defaults._methods = _methods;\n scope.defaults.perAction[type] = _defaults;\n }\n\n // autoScroll\n interact.use(autoScroll);\n\n // reflow\n interact.use(reflow);\n\n return interact;\n}\n\n// eslint-disable-next-line no-undef\ninteract.version = init.version = process.env.npm_package_version;\n\nexport default interact;\nexport { interact };\n","/*\n * In a (windowless) server environment this file exports a factory function\n * that takes the window to use.\n *\n * var interact = require('interact.js')(windowObject);\n *\n * See https://github.com/taye/interact.js/issues/187\n */\n\nimport { init } from '@interactjs/interact';\n\nconst win = typeof window === 'object' && window;\nconst exported = win ? init(win) : init;\n\nexport default exported;\n\nif (typeof module === 'object' && !!module) {\n module.exports = exported;\n}\n","\nreturn _$interactjs_24;\n\n});\n"]} \ No newline at end of file diff --git a/packages/interactjs/dist/interact.min.js b/packages/interactjs/dist/interact.min.js index b62972682..b242fd3f0 100644 --- a/packages/interactjs/dist/interact.min.js +++ b/packages/interactjs/dist/interact.min.js @@ -1,7 +1,7 @@ -/* interact.js v1.4.0-alpha.15+sha.8940ff6-dirty | https://raw.github.com/taye/interact.js/master/LICENSE */ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.interact=e()}}(function(){function e(e,t){return-1!==e.indexOf(t)}function t(e,t){return e.splice(e.indexOf(t),1)}function n(e,t){for(var n=0;n=0&&(u.selectors[l]!==e||u.contexts[l]!==t);l--);-1===l&&(l=u.selectors.length,u.selectors.push(e),u.contexts.push(t),u.listeners.push([])),u.listeners[l].push([r,!!i.capture,i.passive])}function re(e,t,n,r,o){var i,a=se(o),s=ni[n],l=!1;if(s)for(i=s.selectors.length-1;i>=0;i--)if(s.selectors[i]===e&&s.contexts[i]===t){for(var u=s.listeners[i],c=u.length-1;c>=0;c--){var f=K(u[c],3),p=f[0],d=f[1],v=f[2];if(p===r&&d===!!a.capture&&v===a.passive){u.splice(c,1),u.length||(s.selectors.splice(i,1),s.contexts.splice(i,1),s.listeners.splice(i,1),te(t,n,oe),te(t,n,ie,!0),s.selectors.length||(ni[n]=null)),l=!0;break}}if(l)break}}function oe(e,t){var n=se(t),r={},o=ni[e.type],i=Jo.default.getEventTargets(e),a=K(i,1),s=a[0],l=s;for((0,Zo.default)(r,e),r.originalEvent=e,r.preventDefault=ae;Ko.element(l);){for(var u=0;ua.left&&c.xa.top&&c.y=a.left&&v<=a.right&&g>=a.top&&g<=a.bottom}if(d&&Xi.is.number(l)){s=Math.max(0,Math.min(a.right,d.right)-Math.max(a.left,d.left))*Math.max(0,Math.min(a.bottom,d.bottom)-Math.max(a.top,d.top))/(d.width*d.height)>=l}return e.options.drop.checker&&(s=e.options.drop.checker(t,n,s,e,i,r,o)),s}function Ce(e){return e&&e.__esModule?e:{default:e}}function Re(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Xe(e,t){for(var n=0;n=2?{name:"gesture"}:null},getCursor:function(){return""}};n.prototype.gesturable=function(e){return Qi.is.object(e)?(this.options.gesture.enabled=!1!==e.enabled,this.setPerAction("gesture",e),this.setOnEvents("gesture",e),this):Qi.is.bool(e)?(this.options.gesture.enabled=e,this):this.options.gesture},r.signals.on("action-start",Ne),r.signals.on("action-move",Ne),r.signals.on("action-end",Ne),r.signals.on("action-start",Le),r.signals.on("action-move",We),r.signals.on("new",function(e){e.gesture={start:{x:0,y:0},startDistance:0,prevDistance:0,distance:0,scale:1,startAngle:0,prevAngle:0}}),t.gesture=i,t.names.push("gesture"),Qi.arr.merge(t.eventTypes,["gesturestart","gesturemove","gestureend"]),t.methodDict.gesture="gesturable",o.gesture=i.defaults}function Le(e){var t=e.iEvent,n=e.interaction;"gesture"===n.prepared.name&&(t.ds=0,n.gesture.startDistance=n.gesture.prevDistance=t.distance,n.gesture.startAngle=n.gesture.prevAngle=t.angle,n.gesture.scale=1)}function We(e){var t=e.iEvent,n=e.interaction;"gesture"===n.prepared.name&&(t.ds=t.scale-n.gesture.scale,n.target.fire(t),n.gesture.prevAngle=t.angle,n.gesture.prevDistance=t.distance,t.scale===1/0||null===t.scale||void 0===t.scale||isNaN(t.scale)||(n.gesture.scale=t.scale))}function Ne(e){var t=e.interaction,n=e.iEvent,r=e.event,o=e.phase;if("gesture"===t.prepared.name){var i=t.pointers.map(function(e){return e.pointer}),a="start"===o,s="end"===o,l=t.target.options.deltaSource;n.touches=[i[0].pointer,i[1].pointer],a?(n.distance=Qi.pointer.touchDistance(i,l),n.box=Qi.pointer.touchBBox(i),n.scale=1,n.ds=0,n.angle=Qi.pointer.touchAngle(i,void 0,l),n.da=0):s||r instanceof Ji.default?(n.distance=t.prevEvent.distance,n.box=t.prevEvent.box,n.scale=t.prevEvent.scale,n.ds=n.scale-1,n.angle=t.prevEvent.angle,n.da=n.angle-t.gesture.startAngle):(n.distance=Qi.pointer.touchDistance(i,l),n.box=Qi.pointer.touchBBox(i),n.scale=n.distance/t.gesture.startDistance,n.angle=Qi.pointer.touchAngle(i,t.gesture.prevAngle,l),n.ds=n.scale-t.gesture.prevScale,n.da=n.angle-t.gesture.prevAngle)}}function qe(e){var t=e.actions,n=e.browser,r=e.Interactable,o=e.interactions,i=e.defaults,a=n.supportsTouch||n.supportsPointerEvent?20:10,s={defaults:{square:!1,preserveAspectRatio:!1,axis:"xy",margin:NaN,edges:null,invert:"none"},checker:function(e,t,n,r,o,i){if(!i)return null;var s=ta.extend({},o.coords.cur.page),l=n.options;if(l.resize.enabled){var u=l.resize,c={left:!1,right:!1,top:!1,bottom:!1};if(ta.is.object(u.edges)){for(var f in c)c[f]=Ve(f,u.edges[f],s,o._eventTarget,r,i,u.margin||a);if(c.left=c.left&&!c.right,c.top=c.top&&!c.bottom,c.left||c.right||c.top||c.bottom)return{name:"resize",edges:c}}else{var p="y"!==l.resize.axis&&s.x>i.right-a,d="x"!==l.resize.axis&&s.y>i.bottom-a;if(p||d)return{name:"resize",axes:(p?"x":"")+(d?"y":"")}}}return null},cursors:n.isIe9?{x:"e-resize",y:"s-resize",xy:"se-resize",top:"n-resize",left:"w-resize",bottom:"s-resize",right:"e-resize",topleft:"se-resize",bottomright:"se-resize",topright:"ne-resize",bottomleft:"ne-resize"}:{x:"ew-resize",y:"ns-resize",xy:"nwse-resize",top:"ns-resize",left:"ew-resize",bottom:"ns-resize",right:"ew-resize",topleft:"nwse-resize",bottomright:"nwse-resize",topright:"nesw-resize",bottomleft:"nesw-resize"},getCursor:function(e){if(e.axis)return s.cursors[e.name+e.axis];if(e.edges){for(var t="",n=["top","bottom","left","right"],r=0;r<4;r++)e.edges[n[r]]&&(t+=n[r]);return s.cursors[t]}}};r.prototype.resizable=function(e){return ta.is.object(e)?(this.options.resize.enabled=!1!==e.enabled,this.setPerAction("resize",e),this.setOnEvents("resize",e),/^x$|^y$|^xy$/.test(e.axis)?this.options.resize.axis=e.axis:null===e.axis&&(this.options.resize.axis=i.resize.axis),ta.is.bool(e.preserveAspectRatio)?this.options.resize.preserveAspectRatio=e.preserveAspectRatio:ta.is.bool(e.square)&&(this.options.resize.square=e.square),this):ta.is.bool(e)?(this.options.resize.enabled=e,this):this.options.resize},o.signals.on("new",function(e){e.resizeAxes="xy"}),o.signals.on("action-start",Ue),o.signals.on("action-move",Be),o.signals.on("action-start",Ge),o.signals.on("action-move",Ge),t.resize=s,t.names.push("resize"),ta.arr.merge(t.eventTypes,["resizestart","resizemove","resizeinertiastart","resizeresume","resizeend"]),t.methodDict.resize="resizable",i.resize=s.defaults}function Ve(e,t,n,r,o,i,a){if(!t)return!1;if(!0===t){var s=ta.is.number(i.width)?i.width:i.right-i.left,l=ta.is.number(i.height)?i.height:i.bottom-i.top;if(s<0&&("left"===e?e="right":"right"===e&&(e="left")),l<0&&("top"===e?e="bottom":"bottom"===e&&(e="top")),"left"===e)return n.x<(s>=0?i.left:i.right)+a;if("top"===e)return n.y<(l>=0?i.top:i.bottom)+a;if("right"===e)return n.x>(s>=0?i.right:i.left)-a;if("bottom"===e)return n.y>(l>=0?i.bottom:i.top)-a}return!!ta.is.element(r)&&(ta.is.element(t)?t===r:ta.dom.matchesUpTo(r,t,o))}function Ue(e){var t=e.iEvent,n=e.interaction;if("resize"===n.prepared.name&&n.prepared.edges){var r=n.target.getRect(n.element),o=n.target.options.resize;if(o.square||o.preserveAspectRatio){var i=ta.extend({},n.prepared.edges);i.top=i.top||i.left&&!i.bottom,i.left=i.left||i.top&&!i.right,i.bottom=i.bottom||i.right&&!i.top,i.right=i.right||i.bottom&&!i.left,n.prepared._linkedEdges=i}else n.prepared._linkedEdges=null;o.preserveAspectRatio&&(n.resizeStartAspectRatio=r.width/r.height),n.resizeRects={start:r,current:ta.extend({},r),inverted:ta.extend({},r),previous:ta.extend({},r),delta:{left:0,right:0,width:0,top:0,bottom:0,height:0}},t.rect=n.resizeRects.inverted,t.deltaRect=n.resizeRects.delta}}function Be(e){var t=e.iEvent,n=e.interaction;if("resize"===n.prepared.name&&n.prepared.edges){var r=n.target.options.resize,o=r.invert,i="reposition"===o||"negate"===o,a=n.prepared.edges,s=n.resizeRects.start,l=n.resizeRects.current,u=n.resizeRects.inverted,c=n.resizeRects.delta,f=ta.extend(n.resizeRects.previous,u),p=a,d=ta.extend({},t.delta);if(r.preserveAspectRatio||r.square){var v=r.preserveAspectRatio?n.resizeStartAspectRatio:1;a=n.prepared._linkedEdges,p.left&&p.bottom||p.right&&p.top?d.y=-d.x/v:p.left||p.right?d.y=d.x/v:(p.top||p.bottom)&&(d.x=d.y*v)}if(a.top&&(l.top+=d.y),a.bottom&&(l.bottom+=d.y),a.left&&(l.left+=d.x),a.right&&(l.right+=d.x),i){if(ta.extend(u,l),"reposition"===o){var g;u.top>u.bottom&&(g=u.top,u.top=u.bottom,u.bottom=g),u.left>u.right&&(g=u.left,u.left=u.right,u.right=g)}}else u.top=Math.min(l.top,s.bottom),u.bottom=Math.max(l.bottom,s.top),u.left=Math.min(l.left,s.right),u.right=Math.max(l.right,s.left);u.width=u.right-u.left,u.height=u.bottom-u.top;for(var h in u)c[h]=u[h]-f[h];t.edges=n.prepared.edges,t.rect=u,t.deltaRect=c}}function Ge(e){var t=e.interaction,n=e.iEvent;"resize"===e.action&&t.resizeAxes&&(t.target.options.resize.square?("y"===t.resizeAxes?n.delta.x=n.delta.y:n.delta.y=n.delta.x,n.axes="xy"):(n.axes=t.resizeAxes,"x"===t.resizeAxes?n.delta.y=0:"y"===t.resizeAxes&&(n.delta.x=0)))}function He(e){return e&&e.__esModule?e:{default:e}}function $e(e){oa.default.install(e),ia.default.install(e),aa.default.install(e),sa.default.install(e)}function Ke(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}function Qe(e){var t=e.interactions,n=e.defaults,r=e.actions,o=e.autoScroll={defaults:{enabled:!1,container:null,margin:60,speed:300},interaction:null,i:null,x:0,y:0,isScrolling:!1,prevTime:0,start:function(e){o.isScrolling=!0,ua.default.cancel(o.i),e.autoScroll=o,o.interaction=e,o.prevTime=(new Date).getTime(),o.i=ua.default.request(o.scroll)},stop:function(){o.isScrolling=!1,o.interaction&&(o.interaction.autoScroll=null),ua.default.cancel(o.i)},scroll:function(){var e=o.interaction,t=e.target,n=e.element,r=t.options[o.interaction.prepared.name].autoScroll,i=Je(r.container,t,n),a=(new Date).getTime(),s=(a-o.prevTime)/1e3,l=r.speed*s;if(l>=1){var u={x:o.x*l,y:o.y*l};if(u.x||u.y){var c=Ze(i);ca.window(i)?i.scrollBy(u.x,u.y):i&&(i.scrollLeft+=u.x,i.scrollTop+=u.y);var f=Ze(i),p={x:f.x-c.x,y:f.y-c.y};(p.x||p.y)&&t.fire({type:"autoscroll",target:n,interactable:t,delta:p,interaction:e,container:i})}o.prevTime=a}o.isScrolling&&(ua.default.cancel(o.i),o.i=ua.default.request(o.scroll))},check:function(e,t){var n=e.options;return n[t].autoScroll&&n[t].autoScroll.enabled},onInteractionMove:function(e){var t=e.interaction,n=e.pointer;if(t.interacting()&&o.check(t.target,t.prepared.name)){if(t.simulation)return void(o.x=o.y=0);var r,i,a,s,l=t.target,u=t.element,c=l.options[t.prepared.name].autoScroll,f=Je(c.container,l,u);if(ca.window(f))s=n.clientXf.innerWidth-o.margin,a=n.clientY>f.innerHeight-o.margin;else{var p=fa.getElementClientRect(f);s=n.clientXp.right-o.margin,a=n.clientY>p.bottom-o.margin}o.x=i?1:s?-1:0,o.y=a?1:r?-1:0,o.isScrolling||(o.margin=c.margin,o.speed=c.speed,o.start(t))}}};t.signals.on("new",function(e){e.autoScroll=null}),t.signals.on("stop",o.stop),t.signals.on("action-move",o.onInteractionMove),r.eventTypes.push("autoscroll"),n.perAction.autoScroll=o.defaults}function Je(e,t,n){return(ca.string(e)?(0,si.getStringOptionResult)(e,t,n):e)||(0,Vr.getWindow)(n)}function Ze(e){return ca.window(e)&&(e=window.document.body),{x:e.scrollLeft,y:e.scrollTop}}function et(e){return ca.window(e)&&(e=window.document.body),{x:e.scrollWidth,y:e.scrollHeight}}function tt(e,t){var n=e.interaction,r=e.element,o=n&&n.target.options[n.prepared.name].autoScroll;if(!o||!o.enabled)return t(),{x:0,y:0};var i=Je(o.container,n.target,r),a=Ze(i);t();var s=Ze(i);return{x:s.x-a.x,y:s.y-a.y}}function nt(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}function rt(e){var t=e.Interactable,n=e.actions;t.prototype.getAction=function(e,t,n,r){var o=this.defaultActionChecker(e,t,n,r);return this.options.actionChecker?this.options.actionChecker(e,t,o,this,r,n):o},t.prototype.ignoreFrom=(0,wi.warnOnce)(function(e){return this._backCompatOption("ignoreFrom",e)},"Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue})."),t.prototype.allowFrom=(0,wi.warnOnce)(function(e){return this._backCompatOption("allowFrom",e)},"Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue})."),t.prototype.testIgnore=function(e,t,n){return!(!e||!va.element(n))&&(va.string(e)?ga.matchesUpTo(n,e,t):!!va.element(e)&&ga.nodeContains(e,n))},t.prototype.testAllow=function(e,t,n){return!e||!!va.element(n)&&(va.string(e)?ga.matchesUpTo(n,e,t):!!va.element(e)&&ga.nodeContains(e,n))},t.prototype.testIgnoreAllow=function(e,t,n){return!this.testIgnore(e.ignoreFrom,t,n)&&this.testAllow(e.allowFrom,t,n)},t.prototype.actionChecker=function(e){return va.func(e)?(this.options.actionChecker=e,this):null===e?(delete this.options.actionChecker,this):this.options.actionChecker},t.prototype.styleCursor=function(e){return va.bool(e)?(this.options.styleCursor=e,this):null===e?(delete this.options.styleCursor,this):this.options.styleCursor},t.prototype.defaultActionChecker=function(e,t,r,o){for(var i=this.getRect(o),a=t.buttons||{0:1,1:4,3:8,4:16}[t.button],s=null,l=0;l=s)return!1;if(d.target===e){if((u+=v===n.name|0)>=i)return!1;if(d.element===t&&(c++,v===n.name&&c>=a))return!1}}}return s>0}}function ct(e,t){return ma.is.number(e)?(t.autoStart.maxInteractions=e,this):t.autoStart.maxInteractions}function ft(e,t,n){n.autoStart.cursorElement&&(n.autoStart.cursorElement.style.cursor=""),e.ownerDocument.documentElement.style.cursor=t,e.style.cursor=t,n.autoStart.cursorElement=t?e:null}function pt(e){function t(e,t){if(!t)return!1;var n=t.options.drag.startAxis;return"xy"===e||"xy"===n||n===e}e.autoStart.signals.on("before-start",function(n){var r=n.interaction,o=n.eventTarget,i=n.dx,a=n.dy;if("drag"===r.prepared.name){var s=Math.abs(i),l=Math.abs(a),u=r.target.options.drag,c=u.startAxis,f=s>l?"x":s0&&(t.autoStartHoldTimer=setTimeout(function(){t.start(t.prepared,t.target,t.element)},n))}),n.signals.on("move",function(e){var t=e.interaction,n=e.duplicate;t.pointerWasMoved&&!n&&clearTimeout(t.autoStartHoldTimer)}),t.signals.on("before-start",function(e){var t=e.interaction;vt(t)>0&&(t.prepared.name=null)})}function vt(e){var t=e.prepared&&e.prepared.name;if(!t)return null;var n=e.target.options;return n[t].hold||n[t].delay}function gt(e){return e&&e.__esModule?e:{default:e}}function ht(e){Ea.default.install(e),Sa.default.install(e),Da.default.install(e)}function yt(e,t){return/^(always|never|auto)$/.test(t)?(e.options.preventDefault=t,e):za.bool(t)?(e.options.preventDefault=t?"always":"never",e):e.options.preventDefault}function mt(e,t,n){var r=e.options.preventDefault;if("never"!==r){if("always"===r)return void n.preventDefault();if(Ia.default.supportsPassive&&/^touch(start|move)$/.test(n.type)){var o=(0,Vr.getWindow)(n.target).document,i=t.getDocOptions(o);if(!i||!i.events||!1!==i.events.passive)return}/^(mouse|pointer|touch)*(down|start)/i.test(n.type)||za.element(n.target)&&(0,zo.matchesSelector)(n.target,"input,select,textarea,[contenteditable=true],[contenteditable=true] *")||n.preventDefault()}}function bt(e){var t=e.interaction,n=e.event;t.target&&t.target.checkAndPreventDefault(n)}function wt(e){var t=e.Interactable;t.prototype.preventDefault=function(e){return yt(this,e)},t.prototype.checkAndPreventDefault=function(t){return mt(this,e,t)};for(var n=["down","move","up","cancel"],r=0;rs.minSpeed&&c>s.endSpeed,v={interaction:n,pageCoords:La.extend({},n.coords.cur.page),states:p&&n.modifiers.states.map(function(e){return La.extend({},e)}),preEnd:!0,requireEndOnly:!0};if(p&&!d&&(a=Fa.default.setAll(v),a.shouldMove&&(f=!0)),d||f)return La.pointer.copyCoords(i.upCoords,n.coords.cur),n.pointers[0].pointer=i.startEvent=new t.InteractEvent(n,r,n.prepared.name,"inertiastart",n.element),i.t0=l,i.active=!0,i.allowResume=s.allowResume,n.simulation=i,n.target.fire(i.startEvent),d?(i.vx0=n.coords.velocity.client.x,i.vy0=n.coords.velocity.client.y,i.v0=c,Vt(n,i),La.extend(v.pageCoords,n.coords.cur.page),v.pageCoords.x+=i.xe,v.pageCoords.y+=i.ye,a=Fa.default.setAll(v),i.modifiedXe+=a.delta.x,i.modifiedYe+=a.delta.y,i.i=Wa.default.request(function(){return Ut(n)})):(i.smoothEnd=!0,i.xe=a.delta.x,i.ye=a.delta.y,i.sx=i.sy=0,i.i=Wa.default.request(function(){return Bt(n)})),!1}}function qt(e){var t=e.interaction,n=t.inertia;n.active&&(Wa.default.cancel(n.i),n.active=!1,t.simulation=null)}function Vt(e,t){var n=Ht(e),r=n.resistance,o=-Math.log(n.endSpeed/t.v0)/r;t.x0=e.prevEvent.page.x,t.y0=e.prevEvent.page.y,t.t0=t.startEvent.timeStamp/1e3,t.sx=t.sy=0,t.modifiedXe=t.xe=(t.vx0-o)/r,t.modifiedYe=t.ye=(t.vy0-o)/r,t.te=o,t.lambda_v0=r/t.v0,t.one_ve_v0=1-n.endSpeed/t.v0}function Ut(e){Gt(e),La.pointer.setCoordDeltas(e.coords.delta,e.coords.prev,e.coords.cur),La.pointer.setCoordVelocity(e.coords.velocity,e.coords.delta);var t=e.inertia,n=Ht(e),r=n.resistance,o=(new Date).getTime()/1e3-t.t0;if(o1?Go.pointerAverage(t):t[0],o={};Go.getPageXY(r,o),e.page.x=o.x,e.page.y=o.y,Go.getClientXY(r,o),e.client.x=o.x,e.client.y=o.y,e.timeStamp=Uo.number(n)?n:(new Date).getTime()},pointerExtend:Bo.default,getTouchPair:function(e){var t=[];return Uo.array(e)?(t[0]=e[0],t[1]=e[1]):"touchend"===e.type?1===e.touches.length?(t[0]=e.touches[0],t[1]=e.changedTouches[0]):0===e.touches.length&&(t[0]=e.changedTouches[0],t[1]=e.changedTouches[1]):(t[0]=e.touches[0],t[1]=e.touches[1]),t},pointerAverage:function(e){for(var t={pageX:0,pageY:0,clientX:0,clientY:0,screenX:0,screenY:0},n=0;n1){var t=Go.getTouchPair(e),n=Math.min(t[0].pageX,t[1].pageX),r=Math.min(t[0].pageY,t[1].pageY);return{x:n,y:r,left:n,top:r,width:Math.max(t[0].pageX,t[1].pageX)-n,height:Math.max(t[0].pageY,t[1].pageY)-r}}},touchDistance:function(e,t){var n=t+"X",r=t+"Y",o=Go.getTouchPair(e),i=o[0][n]-o[1][n],a=o[0][r]-o[1][r];return(0,Wo.default)(i,a)},touchAngle:function(e,t,n){var r=n+"X",o=n+"Y",i=Go.getTouchPair(e),a=i[1][r]-i[0][r],s=i[1][o]-i[0][o];return 180*Math.atan2(s,a)/Math.PI},getPointerType:function(e){return Uo.string(e.pointerType)?e.pointerType:Uo.number(e.pointerType)?[void 0,void 0,"touch","pen","mouse"][e.pointerType]:/touch/.test(e.type)||e instanceof qo.default.Touch?"touch":"mouse"},getEventTargets:function(e){var t=Uo.func(e.composedPath)?e.composedPath():e.path;return[Vo.getActualElement(t?t[0]:e.target),Vo.getActualElement(e.currentTarget)]},newCoords:function(){return{page:{x:0,y:0},client:{x:0,y:0},timeStamp:0}},coordsToEvent:function(e){var t=e.page,n=e.client;return{page:t,client:n,timeStamp:e.timeStamp,pageX:t.x,pageY:t.y,clientX:n.x,clientY:n.y}}},Ho=Go;Lo.default=Ho;var $o={};Object.defineProperty($o,"__esModule",{value:!0}),$o.default=void 0;var Ko=$(Hr),Qo=$(zo),Jo=H(Lo),Zo=H(Xo),ei=[],ti=[],ni={},ri=[],oi={add:ee,remove:te,addDelegate:ne,removeDelegate:re,delegateListener:oe,delegateUseCapture:ie,delegatedEvents:ni,documents:ri,supportsOptions:!1,supportsPassive:!1,_elements:ei,_targets:ti,init:function(e){e.document.createElement("div").addEventListener("test",null,{get capture(){return oi.supportsOptions=!0},get passive(){return oi.supportsPassive=!0}})}},ii=oi;$o.default=ii;var ai={};Object.defineProperty(ai,"__esModule",{value:!0}),ai.default=le;var si={};Object.defineProperty(si,"__esModule",{value:!0}),si.getStringOptionResult=ue,si.resolveRectLike=ce,si.rectToXY=fe,si.xywhToTlbr=pe,si.tlbrToXywh=de,si.default=void 0;var li=function(e){return e&&e.__esModule?e:{default:e}}(ai),ui=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(Hr),ci={getStringOptionResult:ue,resolveRectLike:ce,rectToXY:fe,xywhToTlbr:pe,tlbrToXywh:de};si.default=ci;var fi={};Object.defineProperty(fi,"__esModule",{value:!0}),fi.default=ve;var pi={};Object.defineProperty(pi,"__esModule",{value:!0}),pi.default=ge;var di=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(Hr),vi=function(e){return e&&e.__esModule?e:{default:e}}(ai),gi={};Object.defineProperty(gi,"__esModule",{value:!0}),gi.default=void 0;var hi,yi,mi=0,bi={request:function(e){return hi(e)},cancel:function(e){return yi(e)},init:ye};gi.default=bi;var wi={};Object.defineProperty(wi,"__esModule",{value:!0}),wi.warnOnce=we,wi._getQBezierValue=Oe,wi.getQuadraticCurvePoint=xe,wi.easeOutQuad=Pe,wi.copyAction=_e,Object.defineProperty(wi,"win",{enumerable:!0,get:function(){return Oi.default}}),Object.defineProperty(wi,"browser",{enumerable:!0,get:function(){return ji.default}}),Object.defineProperty(wi,"Signals",{enumerable:!0,get:function(){return Mi.default}}),Object.defineProperty(wi,"raf",{enumerable:!0,get:function(){return Ti.default}}),Object.defineProperty(wi,"extend",{enumerable:!0,get:function(){return Ei.default}}),Object.defineProperty(wi,"clone",{enumerable:!0,get:function(){return Si.default}}),Object.defineProperty(wi,"getOriginXY",{enumerable:!0,get:function(){return Di.default}}),Object.defineProperty(wi,"pointer",{enumerable:!0,get:function(){return ki.default}}),Object.defineProperty(wi,"rect",{enumerable:!0,get:function(){return zi.default}}),Object.defineProperty(wi,"events",{enumerable:!0,get:function(){return Ii.default}}),Object.defineProperty(wi,"hypot",{enumerable:!0,get:function(){return Ai.default}}),Object.defineProperty(wi,"normalizeListeners",{enumerable:!0,get:function(){return Ci.default}}),wi.is=wi.dom=wi.arr=void 0;var Oi=be(Vr),xi=me(Wr);wi.arr=xi;var Pi=me(zo);wi.dom=Pi;var _i=me(Hr);wi.is=_i;var ji=be(Po),Mi=be(yo),Ti=be(gi),Ei=be(ai),Si=be(So),Di=be(fi),ki=be(Lo),zi=be(si),Ii=be($o),Ai=be(Yo),Ci=be(pi),Ri={};Object.defineProperty(Ri,"__esModule",{value:!0}),Ri.default=void 0;var Xi=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(wi),Yi=function(e){return e&&e.__esModule?e:{default:e}}(po),Fi={install:je,getActiveDrops:Ee,getDrop:Se,getDropEvents:De,fireDropEvents:ke,defaults:{enabled:!1,accept:null,overlap:"pointer"}},Li=Fi;Ri.default=Li;var Wi={};Object.defineProperty(Wi,"__esModule",{value:!0}),Wi.default=void 0;var Ni={base:{preventDefault:"auto",deltaSource:"page"},perAction:{enabled:!1,origin:{x:0,y:0}}};Wi.default=Ni;var qi={};Object.defineProperty(qi,"__esModule",{value:!0}),qi.default=void 0;var Vi=Ce(ai),Ui=Ce(fi),Bi=Ce(Wi),Gi=Ce(Yo),Hi=function(){function e(t,n,r,o,i,a,s,l){Re(this,e),i=i||t.element;var u=t.target,c=(u&&u.options||Bi.default).deltaSource,f=(0,Ui.default)(u,i,r),p="start"===o,d="end"===o,v=p?this:t.prevEvent,g=p?t.coords.start:d?{page:v.page,client:v.client,timeStamp:t.coords.cur.timeStamp}:t.coords.cur;this.page=(0,Vi.default)({},g.page),this.client=(0,Vi.default)({},g.client),this.timeStamp=g.timeStamp,d||(this.page.x-=f.x,this.page.y-=f.y,this.client.x-=f.x,this.client.y-=f.y),this.ctrlKey=n.ctrlKey,this.altKey=n.altKey,this.shiftKey=n.shiftKey,this.metaKey=n.metaKey,this.button=n.button,this.buttons=n.buttons,this.target=i,this.currentTarget=i,this.relatedTarget=a||null,this.preEnd=s,this.type=l||r+(o||""),this.interaction=t,this.interactable=u,this.t0=p?t.pointers[t.pointers.length-1].downTime:v.t0,this.x0=t.coords.start.page.x-f.x,this.y0=t.coords.start.page.y-f.y,this.clientX0=t.coords.start.client.x-f.x,this.clientY0=t.coords.start.client.y-f.y,this.delta=p||d?{x:0,y:0}:{x:this[c].x-v[c].x,y:this[c].y-v[c].y},this.dt=t.coords.delta.timeStamp,this.duration=this.timeStamp-this.t0,this.velocity=(0,Vi.default)({},t.coords.velocity[c]),this.speed=(0,Gi.default)(this.velocity.x,this.velocity.y),this.swipe=d||"inertiastart"===o?this.getSwipe():null}return Ye(e,[{key:"getSwipe",value:function(){var e=this.interaction;if(e.prevEvent.speed<600||this.timeStamp-e.prevEvent.timeStamp>150)return null;var t=180*Math.atan2(e.prevEvent.velocityY,e.prevEvent.velocityX)/Math.PI;t<0&&(t+=360);var n=112.5<=t&&t<247.5,r=202.5<=t&&t<337.5,o=!n&&(292.5<=t||t<67.5);return{up:r,down:!r&&22.5<=t&&t<157.5,left:n,right:o,angle:t,speed:e.prevEvent.speed,velocity:{x:e.prevEvent.velocityX,y:e.prevEvent.velocityY}}}},{key:"preventDefault",value:function(){}},{key:"stopImmediatePropagation",value:function(){this.immediatePropagationStopped=this.propagationStopped=!0}},{key:"stopPropagation",value:function(){this.propagationStopped=!0}},{key:"pageX",get:function(){return this.page.x},set:function(e){this.page.x=e}},{key:"pageY",get:function(){return this.page.y},set:function(e){this.page.y=e}},{key:"clientX",get:function(){return this.client.x},set:function(e){this.client.x=e}},{key:"clientY",get:function(){return this.client.y},set:function(e){this.client.y=e}},{key:"dx",get:function(){return this.delta.x},set:function(e){this.delta.x=e}},{key:"dy",get:function(){return this.delta.y},set:function(e){this.delta.y=e}},{key:"velocityX",get:function(){return this.velocity.x},set:function(e){this.velocity.x=e}},{key:"velocityY",get:function(){return this.velocity.y},set:function(e){this.velocity.y=e}}]),e}(),$i=Hi;qi.default=$i;var Ki={};Object.defineProperty(Ki,"__esModule",{value:!0}),Ki.default=void 0;var Qi=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(wi),Ji=function(e){return e&&e.__esModule?e:{default:e}}(qi),Zi={install:Fe};Ki.default=Zi;var ea={};Object.defineProperty(ea,"__esModule",{value:!0}),ea.default=void 0;var ta=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(wi),na={install:qe};ea.default=na;var ra={};Object.defineProperty(ra,"__esModule",{value:!0}),ra.install=$e,Object.defineProperty(ra,"gesture",{enumerable:!0,get:function(){return oa.default}}),Object.defineProperty(ra,"resize",{enumerable:!0,get:function(){return ia.default}}),Object.defineProperty(ra,"drag",{enumerable:!0,get:function(){return aa.default}}),Object.defineProperty(ra,"drop",{enumerable:!0,get:function(){return sa.default}});var oa=He(Ki),ia=He(ea),aa=He(so),sa=He(Ri),la={};Object.defineProperty(la,"__esModule",{value:!0}),la.getContainer=Je,la.getScroll=Ze,la.getScrollSize=et,la.getScrollSizeDelta=tt,la.default=void 0;var ua=function(e){return e&&e.__esModule?e:{default:e}}(gi),ca=Ke(Hr),fa=Ke(zo),pa={install:Qe};la.default=pa;var da={};Object.defineProperty(da,"__esModule",{value:!0}),da.default=void 0;var va=nt(Hr),ga=nt(zo),ha={install:rt};da.default=ha;var ya={};Object.defineProperty(ya,"__esModule",{value:!0}),ya.default=void 0;var ma=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(wi),ba=function(e){return e&&e.__esModule?e:{default:e}}(da),wa={install:ot,maxInteractions:ct,withinInteractionLimit:ut,validateAction:it};ya.default=wa;var Oa={};Object.defineProperty(Oa,"__esModule",{value:!0}),Oa.default=void 0;var xa=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(Hr),Pa=function(e){return e&&e.__esModule?e:{default:e}}(ya),_a={install:pt};Oa.default=_a;var ja={};Object.defineProperty(ja,"__esModule",{value:!0}),ja.default=void 0;var Ma={install:dt,getHoldDuration:vt};ja.default=Ma;var Ta={};Object.defineProperty(Ta,"__esModule",{value:!0}),Ta.install=ht,Object.defineProperty(Ta,"autoStart",{enumerable:!0,get:function(){return Ea.default}}),Object.defineProperty(Ta,"hold",{enumerable:!0,get:function(){return Sa.default}}),Object.defineProperty(Ta,"dragAxis",{enumerable:!0,get:function(){return Da.default}});var Ea=gt(ya),Sa=gt(ja),Da=gt(Oa),ka={};Object.defineProperty(ka,"__esModule",{value:!0}),ka.install=wt,ka.default=void 0;var za=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(Hr),Ia=function(e){return e&&e.__esModule?e:{default:e}}($o),Aa={install:wt};ka.default=Aa;var Ca={};Object.defineProperty(Ca,"__esModule",{value:!0}),Ca.default=void 0;var Ra=function(e){return e&&e.__esModule?e:{default:e}}(ai),Xa={install:jt,startAll:Mt,setAll:St,prepareStates:Dt,start:Et,beforeMove:kt,beforeEnd:zt,stop:It,shouldDo:Xt,getModifierList:Rt,getRectOffset:Tt,makeModifier:Yt};Ca.default=Xa;var Ya={};Object.defineProperty(Ya,"__esModule",{value:!0}),Ya.default=void 0;var Fa=Ft(Ca),La=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(wi),Wa=Ft(gi),Na={install:Lt,calcInertia:Vt,inertiaTick:Ut,smothEndTick:Bt,updateInertiaCoords:Gt};Ya.default=Na;var qa={};Object.defineProperty(qa,"__esModule",{value:!0}),qa.default=void 0;var Va=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(Wr),Ua=$t(ai),Ba=$t(pi),Ga=function(){function e(t){Kt(this,e),this.options=(0,Ua.default)({},t||{}),this.types={},this.propagationStopped=this.immediatePropagationStopped=!1}return Jt(e,[{key:"fire",value:function(e){var t,n=this.global;(t=this.types[e.type])&&Zt(e,t),!e.propagationStopped&&n&&(t=n[e.type])&&Zt(e,t)}},{key:"on",value:function(e,t){var n=(0,Ba.default)(e,t);for(e in n)this.types[e]=Va.merge(this.types[e]||[],n[e])}},{key:"off",value:function(e,t){var n=(0,Ba.default)(e,t);for(e in n){var r=this.types[e];if(r&&r.length)for(var o=0;othis.pointerMoveTolerance);var a={pointer:e,pointerIndex:this.getPointerIndex(e),event:t,eventTarget:n,dx:r,dy:o,duplicate:i,interaction:this};i||(ls.pointer.setCoordDeltas(this.coords.delta,this.coords.prev,this.coords.cur),ls.pointer.setCoordVelocity(this.coords.velocity,this.coords.delta)),this._signals.fire("move",a),i||(this.interacting()&&this.move(a),this.pointerWasMoved&&ls.pointer.copyCoords(this.coords.prev,this.coords.cur))}},{key:"move",value:function(e){e=ls.extend({pointer:this._latestPointer.pointer,event:this._latestPointer.event,eventTarget:this._latestPointer.eventTarget,interaction:this,noBefore:!1},e||{}),e.phase="move",this._doPhase(e)}},{key:"pointerUp",value:function(e,t,n,r){var o=this.getPointerIndex(e);this._signals.fire(/cancel$/i.test(t.type)?"cancel":"up",{pointer:e,pointerIndex:o,event:t,eventTarget:n,curEventTarget:r,interaction:this}),this.simulation||this.end(t),this.pointerIsDown=!1,this.removePointer(e,t)}},{key:"documentBlur",value:function(e){this.end(e),this._signals.fire("blur",{event:e,interaction:this})}},{key:"end",value:function(e){this._ending=!0,e=e||this._latestPointer.event;var t;this.interacting()&&(t=this._doPhase({event:e,interaction:this,phase:"end"})),this._ending=!1,!0===t&&this.stop()}},{key:"currentAction",value:function(){return this._interacting?this.prepared.name:null}},{key:"interacting",value:function(){return this._interacting}},{key:"stop",value:function(){this._signals.fire("stop",{interaction:this}),this.target=this.element=null,this._interacting=!1,this.prepared.name=this.prevEvent=null}},{key:"getPointerIndex",value:function(e){var t=ls.pointer.getPointerId(e);return"mouse"===this.pointerType||"pen"===this.pointerType?0:ls.arr.findIndex(this.pointers,function(e){return e.id===t})}},{key:"getPointerInfo",value:function(e){return this.pointers[this.getPointerIndex(e)]}},{key:"updatePointer",value:function(e,t,n,r){var o=ls.pointer.getPointerId(e),i=this.getPointerIndex(e),a=this.pointers[i];return a?a.pointer=e:(a={id:o,pointer:e,event:t,downTime:null,downTarget:null},i=this.pointers.length,this.pointers.push(a)),r&&(this.pointerIsDown=!0,this.interacting()||(ls.pointer.setCoords(this.coords.start,this.pointers.map(function(e){return e.pointer})),ls.pointer.copyCoords(this.coords.cur,this.coords.start),ls.pointer.copyCoords(this.coords.prev,this.coords.start),ls.pointer.pointerExtend(this.downPointer,e),this.downEvent=t,a.downTime=this.coords.cur.timeStamp,a.downTarget=n,this.pointerWasMoved=!1)),this._updateLatestPointer(e,t,n),this._signals.fire("update-pointer",{pointer:e,event:t,eventTarget:n,down:r,pointerInfo:a,pointerIndex:i,interaction:this}),i}},{key:"removePointer",value:function(e,t){var n=this.getPointerIndex(e);if(-1!==n){var r=this.pointers[n];this._signals.fire("remove-pointer",{pointer:e,event:t,pointerIndex:n,pointerInfo:r,interaction:this}),this.pointers.splice(n,1)}}},{key:"_updateLatestPointer",value:function(e,t,n){this._latestPointer.pointer=e,this._latestPointer.event=t,this._latestPointer.eventTarget=n}},{key:"_createPreparedEvent",value:function(e,t,n,r){var o=this.prepared.name;return new ss.default(this,e,o,t,this.element,null,n,r)}},{key:"_fireEvent",value:function(e){this.target.fire(e),(!this.prevEvent||e.timeStamp>=this.prevEvent.timeStamp)&&(this.prevEvent=e)}},{key:"_doPhase",value:function(e){var t=e.event,n=e.phase,r=e.preEnd,o=e.type;if(!e.noBefore){if(!1===this._signals.fire("before-action-".concat(n),e))return!1}var i=e.iEvent=this._createPreparedEvent(t,n,r,o);return this._signals.fire("action-".concat(n),e),this._fireEvent(i),this._signals.fire("after-action-".concat(n),e),!0}}]),e}();us.prototype.doMove=ls.warnOnce(function(e){this.move(e)},"The interaction.doMove() method has been renamed to interaction.move()");var cs=us;as.default=cs;var fs={};Object.defineProperty(fs,"__esModule",{value:!0}),fs.default=void 0;var ps=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(wi),ds={methodOrder:["simulationResume","mouseOrPen","hasPointer","idle"],search:function(e){for(var t=0;t=2)continue;if(!i.interacting()&&t===i.pointerType)return i}return null}},vs=ds;fs.default=vs;var gs={};Object.defineProperty(gs,"__esModule",{value:!0}),gs.newInteraction=Tn,gs.default=void 0;var hs=cn(as),ys=cn($o),ms=cn(fs),bs=cn(Po),ws=cn(wo),Os=cn(Lo),xs=cn(yo),Ps=["pointerDown","pointerMove","pointerUp","updatePointer","removePointer","windowBlur"],_s={install:_n,onDocSignal:En,doOnInteractions:jn,newInteraction:Tn,methodNames:Ps};gs.default=_s;var js={};Object.defineProperty(js,"__esModule",{value:!0}),js.createScope=Wn;var Ms=Sn(qa),Ts=Sn(Wi),Es=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(wi),Ss=Sn(wo),Ds=Sn(gs),ks=Sn(qi),zs=Sn($a),Is=Es.win,As=Es.browser,Cs=Es.raf,Rs=Es.Signals,Xs=Es.events,Ys={};Object.defineProperty(Ys,"__esModule",{value:!0}),Ys.default=Ys.scope=void 0;var Fs=qn(Po),Ls=qn($o),Ws=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(wi),Ns={},qs=(0,js.createScope)();Ys.scope=qs,qs._plugins=[],Vn.use=function(e){if(-1===qs._plugins.indexOf(e))return e.install(qs),qs._plugins.push(e),Vn},Vn.isSet=function(e,t){return-1!==qs.interactables.indexOfElement(e,t&&t.context)},Vn.on=function(e,t,n){if(Ws.is.string(e)&&-1!==e.search(" ")&&(e=e.trim().split(/ +/)),Ws.is.array(e)){for(var r=0;r=0&&(u.selectors[l]!==e||u.contexts[l]!==t);l--);-1===l&&(l=u.selectors.length,u.selectors.push(e),u.contexts.push(t),u.listeners.push([])),u.listeners[l].push([r,!!i.capture,i.passive])}function re(e,t,n,r,o){var i,a=se(o),s=ni[n],l=!1;if(s)for(i=s.selectors.length-1;i>=0;i--)if(s.selectors[i]===e&&s.contexts[i]===t){for(var u=s.listeners[i],c=u.length-1;c>=0;c--){var f=K(u[c],3),p=f[0],d=f[1],v=f[2];if(p===r&&d===!!a.capture&&v===a.passive){u.splice(c,1),u.length||(s.selectors.splice(i,1),s.contexts.splice(i,1),s.listeners.splice(i,1),te(t,n,oe),te(t,n,ie,!0),s.selectors.length||(ni[n]=null)),l=!0;break}}if(l)break}}function oe(e,t){var n=se(t),r={},o=ni[e.type],i=Jo.default.getEventTargets(e),a=K(i,1),s=a[0],l=s;for((0,Zo.default)(r,e),r.originalEvent=e,r.preventDefault=ae;Ko.element(l);){for(var u=0;ua.left&&c.xa.top&&c.y=a.left&&v<=a.right&&g>=a.top&&g<=a.bottom}if(d&&Xi.is.number(l)){s=Math.max(0,Math.min(a.right,d.right)-Math.max(a.left,d.left))*Math.max(0,Math.min(a.bottom,d.bottom)-Math.max(a.top,d.top))/(d.width*d.height)>=l}return e.options.drop.checker&&(s=e.options.drop.checker(t,n,s,e,i,r,o)),s}function Ce(e){return e&&e.__esModule?e:{default:e}}function Re(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Xe(e,t){for(var n=0;n=2?{name:"gesture"}:null},getCursor:function(){return""}};n.prototype.gesturable=function(e){return Qi.is.object(e)?(this.options.gesture.enabled=!1!==e.enabled,this.setPerAction("gesture",e),this.setOnEvents("gesture",e),this):Qi.is.bool(e)?(this.options.gesture.enabled=e,this):this.options.gesture},r.signals.on("action-start",Ne),r.signals.on("action-move",Ne),r.signals.on("action-end",Ne),r.signals.on("action-start",Le),r.signals.on("action-move",We),r.signals.on("new",function(e){e.gesture={start:{x:0,y:0},startDistance:0,prevDistance:0,distance:0,scale:1,startAngle:0,prevAngle:0}}),t.gesture=i,t.names.push("gesture"),Qi.arr.merge(t.eventTypes,["gesturestart","gesturemove","gestureend"]),t.methodDict.gesture="gesturable",o.gesture=i.defaults}function Le(e){var t=e.iEvent,n=e.interaction;"gesture"===n.prepared.name&&(t.ds=0,n.gesture.startDistance=n.gesture.prevDistance=t.distance,n.gesture.startAngle=n.gesture.prevAngle=t.angle,n.gesture.scale=1)}function We(e){var t=e.iEvent,n=e.interaction;"gesture"===n.prepared.name&&(t.ds=t.scale-n.gesture.scale,n.target.fire(t),n.gesture.prevAngle=t.angle,n.gesture.prevDistance=t.distance,t.scale===1/0||null===t.scale||void 0===t.scale||isNaN(t.scale)||(n.gesture.scale=t.scale))}function Ne(e){var t=e.interaction,n=e.iEvent,r=e.event,o=e.phase;if("gesture"===t.prepared.name){var i=t.pointers.map(function(e){return e.pointer}),a="start"===o,s="end"===o,l=t.target.options.deltaSource;n.touches=[i[0].pointer,i[1].pointer],a?(n.distance=Qi.pointer.touchDistance(i,l),n.box=Qi.pointer.touchBBox(i),n.scale=1,n.ds=0,n.angle=Qi.pointer.touchAngle(i,void 0,l),n.da=0):s||r instanceof Ji.default?(n.distance=t.prevEvent.distance,n.box=t.prevEvent.box,n.scale=t.prevEvent.scale,n.ds=n.scale-1,n.angle=t.prevEvent.angle,n.da=n.angle-t.gesture.startAngle):(n.distance=Qi.pointer.touchDistance(i,l),n.box=Qi.pointer.touchBBox(i),n.scale=n.distance/t.gesture.startDistance,n.angle=Qi.pointer.touchAngle(i,t.gesture.prevAngle,l),n.ds=n.scale-t.gesture.prevScale,n.da=n.angle-t.gesture.prevAngle)}}function qe(e){var t=e.actions,n=e.browser,r=e.Interactable,o=e.interactions,i=e.defaults,a=n.supportsTouch||n.supportsPointerEvent?20:10,s={defaults:{square:!1,preserveAspectRatio:!1,axis:"xy",margin:NaN,edges:null,invert:"none"},checker:function(e,t,n,r,o,i){if(!i)return null;var s=ta.extend({},o.coords.cur.page),l=n.options;if(l.resize.enabled){var u=l.resize,c={left:!1,right:!1,top:!1,bottom:!1};if(ta.is.object(u.edges)){for(var f in c)c[f]=Ve(f,u.edges[f],s,o._eventTarget,r,i,u.margin||a);if(c.left=c.left&&!c.right,c.top=c.top&&!c.bottom,c.left||c.right||c.top||c.bottom)return{name:"resize",edges:c}}else{var p="y"!==l.resize.axis&&s.x>i.right-a,d="x"!==l.resize.axis&&s.y>i.bottom-a;if(p||d)return{name:"resize",axes:(p?"x":"")+(d?"y":"")}}}return null},cursors:n.isIe9?{x:"e-resize",y:"s-resize",xy:"se-resize",top:"n-resize",left:"w-resize",bottom:"s-resize",right:"e-resize",topleft:"se-resize",bottomright:"se-resize",topright:"ne-resize",bottomleft:"ne-resize"}:{x:"ew-resize",y:"ns-resize",xy:"nwse-resize",top:"ns-resize",left:"ew-resize",bottom:"ns-resize",right:"ew-resize",topleft:"nwse-resize",bottomright:"nwse-resize",topright:"nesw-resize",bottomleft:"nesw-resize"},getCursor:function(e){if(e.axis)return s.cursors[e.name+e.axis];if(e.edges){for(var t="",n=["top","bottom","left","right"],r=0;r<4;r++)e.edges[n[r]]&&(t+=n[r]);return s.cursors[t]}}};r.prototype.resizable=function(e){return ta.is.object(e)?(this.options.resize.enabled=!1!==e.enabled,this.setPerAction("resize",e),this.setOnEvents("resize",e),/^x$|^y$|^xy$/.test(e.axis)?this.options.resize.axis=e.axis:null===e.axis&&(this.options.resize.axis=i.resize.axis),ta.is.bool(e.preserveAspectRatio)?this.options.resize.preserveAspectRatio=e.preserveAspectRatio:ta.is.bool(e.square)&&(this.options.resize.square=e.square),this):ta.is.bool(e)?(this.options.resize.enabled=e,this):this.options.resize},o.signals.on("new",function(e){e.resizeAxes="xy"}),o.signals.on("action-start",Ue),o.signals.on("action-move",Be),o.signals.on("action-start",Ge),o.signals.on("action-move",Ge),t.resize=s,t.names.push("resize"),ta.arr.merge(t.eventTypes,["resizestart","resizemove","resizeinertiastart","resizeresume","resizeend"]),t.methodDict.resize="resizable",i.resize=s.defaults}function Ve(e,t,n,r,o,i,a){if(!t)return!1;if(!0===t){var s=ta.is.number(i.width)?i.width:i.right-i.left,l=ta.is.number(i.height)?i.height:i.bottom-i.top;if(a=Math.min(a,("left"===e||"right"===e?s:l)/2),s<0&&("left"===e?e="right":"right"===e&&(e="left")),l<0&&("top"===e?e="bottom":"bottom"===e&&(e="top")),"left"===e)return n.x<(s>=0?i.left:i.right)+a;if("top"===e)return n.y<(l>=0?i.top:i.bottom)+a;if("right"===e)return n.x>(s>=0?i.right:i.left)-a;if("bottom"===e)return n.y>(l>=0?i.bottom:i.top)-a}return!!ta.is.element(r)&&(ta.is.element(t)?t===r:ta.dom.matchesUpTo(r,t,o))}function Ue(e){var t=e.iEvent,n=e.interaction;if("resize"===n.prepared.name&&n.prepared.edges){var r=n.target.getRect(n.element),o=n.target.options.resize;if(o.square||o.preserveAspectRatio){var i=ta.extend({},n.prepared.edges);i.top=i.top||i.left&&!i.bottom,i.left=i.left||i.top&&!i.right,i.bottom=i.bottom||i.right&&!i.top,i.right=i.right||i.bottom&&!i.left,n.prepared._linkedEdges=i}else n.prepared._linkedEdges=null;o.preserveAspectRatio&&(n.resizeStartAspectRatio=r.width/r.height),n.resizeRects={start:r,current:ta.extend({},r),inverted:ta.extend({},r),previous:ta.extend({},r),delta:{left:0,right:0,width:0,top:0,bottom:0,height:0}},t.rect=n.resizeRects.inverted,t.deltaRect=n.resizeRects.delta}}function Be(e){var t=e.iEvent,n=e.interaction;if("resize"===n.prepared.name&&n.prepared.edges){var r=n.target.options.resize,o=r.invert,i="reposition"===o||"negate"===o,a=n.prepared.edges,s=n.resizeRects.start,l=n.resizeRects.current,u=n.resizeRects.inverted,c=n.resizeRects.delta,f=ta.extend(n.resizeRects.previous,u),p=a,d=ta.extend({},t.delta);if(r.preserveAspectRatio||r.square){var v=r.preserveAspectRatio?n.resizeStartAspectRatio:1;a=n.prepared._linkedEdges,p.left&&p.bottom||p.right&&p.top?d.y=-d.x/v:p.left||p.right?d.y=d.x/v:(p.top||p.bottom)&&(d.x=d.y*v)}if(a.top&&(l.top+=d.y),a.bottom&&(l.bottom+=d.y),a.left&&(l.left+=d.x),a.right&&(l.right+=d.x),i){if(ta.extend(u,l),"reposition"===o){var g;u.top>u.bottom&&(g=u.top,u.top=u.bottom,u.bottom=g),u.left>u.right&&(g=u.left,u.left=u.right,u.right=g)}}else u.top=Math.min(l.top,s.bottom),u.bottom=Math.max(l.bottom,s.top),u.left=Math.min(l.left,s.right),u.right=Math.max(l.right,s.left);u.width=u.right-u.left,u.height=u.bottom-u.top;for(var h in u)c[h]=u[h]-f[h];t.edges=n.prepared.edges,t.rect=u,t.deltaRect=c}}function Ge(e){var t=e.interaction,n=e.iEvent;"resize"===e.action&&t.resizeAxes&&(t.target.options.resize.square?("y"===t.resizeAxes?n.delta.x=n.delta.y:n.delta.y=n.delta.x,n.axes="xy"):(n.axes=t.resizeAxes,"x"===t.resizeAxes?n.delta.y=0:"y"===t.resizeAxes&&(n.delta.x=0)))}function He(e){return e&&e.__esModule?e:{default:e}}function $e(e){oa.default.install(e),ia.default.install(e),aa.default.install(e),sa.default.install(e)}function Ke(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}function Qe(e){var t=e.interactions,n=e.defaults,r=e.actions,o=e.autoScroll={defaults:{enabled:!1,container:null,margin:60,speed:300},interaction:null,i:null,x:0,y:0,isScrolling:!1,prevTime:0,start:function(e){o.isScrolling=!0,ua.default.cancel(o.i),e.autoScroll=o,o.interaction=e,o.prevTime=(new Date).getTime(),o.i=ua.default.request(o.scroll)},stop:function(){o.isScrolling=!1,o.interaction&&(o.interaction.autoScroll=null),ua.default.cancel(o.i)},scroll:function(){var e=o.interaction,t=e.target,n=e.element,r=t.options[o.interaction.prepared.name].autoScroll,i=Je(r.container,t,n),a=(new Date).getTime(),s=(a-o.prevTime)/1e3,l=r.speed*s;if(l>=1){var u={x:o.x*l,y:o.y*l};if(u.x||u.y){var c=Ze(i);ca.window(i)?i.scrollBy(u.x,u.y):i&&(i.scrollLeft+=u.x,i.scrollTop+=u.y);var f=Ze(i),p={x:f.x-c.x,y:f.y-c.y};(p.x||p.y)&&t.fire({type:"autoscroll",target:n,interactable:t,delta:p,interaction:e,container:i})}o.prevTime=a}o.isScrolling&&(ua.default.cancel(o.i),o.i=ua.default.request(o.scroll))},check:function(e,t){var n=e.options;return n[t].autoScroll&&n[t].autoScroll.enabled},onInteractionMove:function(e){var t=e.interaction,n=e.pointer;if(t.interacting()&&o.check(t.target,t.prepared.name)){if(t.simulation)return void(o.x=o.y=0);var r,i,a,s,l=t.target,u=t.element,c=l.options[t.prepared.name].autoScroll,f=Je(c.container,l,u);if(ca.window(f))s=n.clientXf.innerWidth-o.margin,a=n.clientY>f.innerHeight-o.margin;else{var p=fa.getElementClientRect(f);s=n.clientXp.right-o.margin,a=n.clientY>p.bottom-o.margin}o.x=i?1:s?-1:0,o.y=a?1:r?-1:0,o.isScrolling||(o.margin=c.margin,o.speed=c.speed,o.start(t))}}};t.signals.on("new",function(e){e.autoScroll=null}),t.signals.on("stop",o.stop),t.signals.on("action-move",o.onInteractionMove),r.eventTypes.push("autoscroll"),n.perAction.autoScroll=o.defaults}function Je(e,t,n){return(ca.string(e)?(0,si.getStringOptionResult)(e,t,n):e)||(0,Vr.getWindow)(n)}function Ze(e){return ca.window(e)&&(e=window.document.body),{x:e.scrollLeft,y:e.scrollTop}}function et(e){return ca.window(e)&&(e=window.document.body),{x:e.scrollWidth,y:e.scrollHeight}}function tt(e,t){var n=e.interaction,r=e.element,o=n&&n.target.options[n.prepared.name].autoScroll;if(!o||!o.enabled)return t(),{x:0,y:0};var i=Je(o.container,n.target,r),a=Ze(i);t();var s=Ze(i);return{x:s.x-a.x,y:s.y-a.y}}function nt(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}function rt(e){var t=e.Interactable,n=e.actions;t.prototype.getAction=function(e,t,n,r){var o=this.defaultActionChecker(e,t,n,r);return this.options.actionChecker?this.options.actionChecker(e,t,o,this,r,n):o},t.prototype.ignoreFrom=(0,wi.warnOnce)(function(e){return this._backCompatOption("ignoreFrom",e)},"Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue})."),t.prototype.allowFrom=(0,wi.warnOnce)(function(e){return this._backCompatOption("allowFrom",e)},"Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue})."),t.prototype.testIgnore=function(e,t,n){return!(!e||!va.element(n))&&(va.string(e)?ga.matchesUpTo(n,e,t):!!va.element(e)&&ga.nodeContains(e,n))},t.prototype.testAllow=function(e,t,n){return!e||!!va.element(n)&&(va.string(e)?ga.matchesUpTo(n,e,t):!!va.element(e)&&ga.nodeContains(e,n))},t.prototype.testIgnoreAllow=function(e,t,n){return!this.testIgnore(e.ignoreFrom,t,n)&&this.testAllow(e.allowFrom,t,n)},t.prototype.actionChecker=function(e){return va.func(e)?(this.options.actionChecker=e,this):null===e?(delete this.options.actionChecker,this):this.options.actionChecker},t.prototype.styleCursor=function(e){return va.bool(e)?(this.options.styleCursor=e,this):null===e?(delete this.options.styleCursor,this):this.options.styleCursor},t.prototype.defaultActionChecker=function(e,t,r,o){for(var i=this.getRect(o),a=t.buttons||{0:1,1:4,3:8,4:16}[t.button],s=null,l=0;l=s)return!1;if(d.target===e){if((u+=v===n.name|0)>=i)return!1;if(d.element===t&&(c++,v===n.name&&c>=a))return!1}}}return s>0}}function ct(e,t){return ma.is.number(e)?(t.autoStart.maxInteractions=e,this):t.autoStart.maxInteractions}function ft(e,t,n){n.autoStart.cursorElement&&(n.autoStart.cursorElement.style.cursor=""),e.ownerDocument.documentElement.style.cursor=t,e.style.cursor=t,n.autoStart.cursorElement=t?e:null}function pt(e){function t(e,t){if(!t)return!1;var n=t.options.drag.startAxis;return"xy"===e||"xy"===n||n===e}e.autoStart.signals.on("before-start",function(n){var r=n.interaction,o=n.eventTarget,i=n.dx,a=n.dy;if("drag"===r.prepared.name){var s=Math.abs(i),l=Math.abs(a),u=r.target.options.drag,c=u.startAxis,f=s>l?"x":s0&&(t.autoStartHoldTimer=setTimeout(function(){t.start(t.prepared,t.target,t.element)},n))}),n.signals.on("move",function(e){var t=e.interaction,n=e.duplicate;t.pointerWasMoved&&!n&&clearTimeout(t.autoStartHoldTimer)}),t.signals.on("before-start",function(e){var t=e.interaction;vt(t)>0&&(t.prepared.name=null)})}function vt(e){var t=e.prepared&&e.prepared.name;if(!t)return null;var n=e.target.options;return n[t].hold||n[t].delay}function gt(e){return e&&e.__esModule?e:{default:e}}function ht(e){Ea.default.install(e),Sa.default.install(e),Da.default.install(e)}function yt(e,t){return/^(always|never|auto)$/.test(t)?(e.options.preventDefault=t,e):za.bool(t)?(e.options.preventDefault=t?"always":"never",e):e.options.preventDefault}function mt(e,t,n){var r=e.options.preventDefault;if("never"!==r){if("always"===r)return void n.preventDefault();if(Ia.default.supportsPassive&&/^touch(start|move)$/.test(n.type)){var o=(0,Vr.getWindow)(n.target).document,i=t.getDocOptions(o);if(!i||!i.events||!1!==i.events.passive)return}/^(mouse|pointer|touch)*(down|start)/i.test(n.type)||za.element(n.target)&&(0,zo.matchesSelector)(n.target,"input,select,textarea,[contenteditable=true],[contenteditable=true] *")||n.preventDefault()}}function bt(e){var t=e.interaction,n=e.event;t.target&&t.target.checkAndPreventDefault(n)}function wt(e){var t=e.Interactable;t.prototype.preventDefault=function(e){return yt(this,e)},t.prototype.checkAndPreventDefault=function(t){return mt(this,e,t)};for(var n=["down","move","up","cancel"],r=0;rs.minSpeed&&c>s.endSpeed,v={interaction:n,pageCoords:La.extend({},n.coords.cur.page),states:p&&n.modifiers.states.map(function(e){return La.extend({},e)}),preEnd:!0,requireEndOnly:!0};if(p&&!d&&(a=Fa.default.setAll(v),a.shouldMove&&(f=!0)),d||f)return La.pointer.copyCoords(i.upCoords,n.coords.cur),n.pointers[0].pointer=i.startEvent=new t.InteractEvent(n,r,n.prepared.name,"inertiastart",n.element),i.t0=l,i.active=!0,i.allowResume=s.allowResume,n.simulation=i,n.target.fire(i.startEvent),d?(i.vx0=n.coords.velocity.client.x,i.vy0=n.coords.velocity.client.y,i.v0=c,Vt(n,i),La.extend(v.pageCoords,n.coords.cur.page),v.pageCoords.x+=i.xe,v.pageCoords.y+=i.ye,a=Fa.default.setAll(v),i.modifiedXe+=a.delta.x,i.modifiedYe+=a.delta.y,i.i=Wa.default.request(function(){return Ut(n)})):(i.smoothEnd=!0,i.xe=a.delta.x,i.ye=a.delta.y,i.sx=i.sy=0,i.i=Wa.default.request(function(){return Bt(n)})),!1}}function qt(e){var t=e.interaction,n=t.inertia;n.active&&(Wa.default.cancel(n.i),n.active=!1,t.simulation=null)}function Vt(e,t){var n=Ht(e),r=n.resistance,o=-Math.log(n.endSpeed/t.v0)/r;t.x0=e.prevEvent.page.x,t.y0=e.prevEvent.page.y,t.t0=t.startEvent.timeStamp/1e3,t.sx=t.sy=0,t.modifiedXe=t.xe=(t.vx0-o)/r,t.modifiedYe=t.ye=(t.vy0-o)/r,t.te=o,t.lambda_v0=r/t.v0,t.one_ve_v0=1-n.endSpeed/t.v0}function Ut(e){Gt(e),La.pointer.setCoordDeltas(e.coords.delta,e.coords.prev,e.coords.cur),La.pointer.setCoordVelocity(e.coords.velocity,e.coords.delta);var t=e.inertia,n=Ht(e),r=n.resistance,o=(new Date).getTime()/1e3-t.t0;if(o1?Go.pointerAverage(t):t[0],o={};Go.getPageXY(r,o),e.page.x=o.x,e.page.y=o.y,Go.getClientXY(r,o),e.client.x=o.x,e.client.y=o.y,e.timeStamp=Uo.number(n)?n:(new Date).getTime()},pointerExtend:Bo.default,getTouchPair:function(e){var t=[];return Uo.array(e)?(t[0]=e[0],t[1]=e[1]):"touchend"===e.type?1===e.touches.length?(t[0]=e.touches[0],t[1]=e.changedTouches[0]):0===e.touches.length&&(t[0]=e.changedTouches[0],t[1]=e.changedTouches[1]):(t[0]=e.touches[0],t[1]=e.touches[1]),t},pointerAverage:function(e){for(var t={pageX:0,pageY:0,clientX:0,clientY:0,screenX:0,screenY:0},n=0;n1){var t=Go.getTouchPair(e),n=Math.min(t[0].pageX,t[1].pageX),r=Math.min(t[0].pageY,t[1].pageY);return{x:n,y:r,left:n,top:r,width:Math.max(t[0].pageX,t[1].pageX)-n,height:Math.max(t[0].pageY,t[1].pageY)-r}}},touchDistance:function(e,t){var n=t+"X",r=t+"Y",o=Go.getTouchPair(e),i=o[0][n]-o[1][n],a=o[0][r]-o[1][r];return(0,Wo.default)(i,a)},touchAngle:function(e,t,n){var r=n+"X",o=n+"Y",i=Go.getTouchPair(e),a=i[1][r]-i[0][r],s=i[1][o]-i[0][o];return 180*Math.atan2(s,a)/Math.PI},getPointerType:function(e){return Uo.string(e.pointerType)?e.pointerType:Uo.number(e.pointerType)?[void 0,void 0,"touch","pen","mouse"][e.pointerType]:/touch/.test(e.type)||e instanceof qo.default.Touch?"touch":"mouse"},getEventTargets:function(e){var t=Uo.func(e.composedPath)?e.composedPath():e.path;return[Vo.getActualElement(t?t[0]:e.target),Vo.getActualElement(e.currentTarget)]},newCoords:function(){return{page:{x:0,y:0},client:{x:0,y:0},timeStamp:0}},coordsToEvent:function(e){var t=e.page,n=e.client,r=e.timeStamp;return{page:t,client:n,timeStamp:r,get pageX(){return t.x},get pageY(){return t.y},get clientX(){return n.x},get clientY(){return n.y}}}},Ho=Go;Lo.default=Ho;var $o={};Object.defineProperty($o,"__esModule",{value:!0}),$o.default=void 0;var Ko=$(Hr),Qo=$(zo),Jo=H(Lo),Zo=H(Xo),ei=[],ti=[],ni={},ri=[],oi={add:ee,remove:te,addDelegate:ne,removeDelegate:re,delegateListener:oe,delegateUseCapture:ie,delegatedEvents:ni,documents:ri,supportsOptions:!1,supportsPassive:!1,_elements:ei,_targets:ti,init:function(e){e.document.createElement("div").addEventListener("test",null,{get capture(){return oi.supportsOptions=!0},get passive(){return oi.supportsPassive=!0}})}},ii=oi;$o.default=ii;var ai={};Object.defineProperty(ai,"__esModule",{value:!0}),ai.default=le;var si={};Object.defineProperty(si,"__esModule",{value:!0}),si.getStringOptionResult=ue,si.resolveRectLike=ce,si.rectToXY=fe,si.xywhToTlbr=pe,si.tlbrToXywh=de,si.default=void 0;var li=function(e){return e&&e.__esModule?e:{default:e}}(ai),ui=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(Hr),ci={getStringOptionResult:ue,resolveRectLike:ce,rectToXY:fe,xywhToTlbr:pe,tlbrToXywh:de};si.default=ci;var fi={};Object.defineProperty(fi,"__esModule",{value:!0}),fi.default=ve;var pi={};Object.defineProperty(pi,"__esModule",{value:!0}),pi.default=ge;var di=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(Hr),vi=function(e){return e&&e.__esModule?e:{default:e}}(ai),gi={};Object.defineProperty(gi,"__esModule",{value:!0}),gi.default=void 0;var hi,yi,mi=0,bi={request:function(e){return hi(e)},cancel:function(e){return yi(e)},init:ye};gi.default=bi;var wi={};Object.defineProperty(wi,"__esModule",{value:!0}),wi.warnOnce=we,wi._getQBezierValue=Oe,wi.getQuadraticCurvePoint=xe,wi.easeOutQuad=Pe,wi.copyAction=_e,Object.defineProperty(wi,"win",{enumerable:!0,get:function(){return Oi.default}}),Object.defineProperty(wi,"browser",{enumerable:!0,get:function(){return ji.default}}),Object.defineProperty(wi,"Signals",{enumerable:!0,get:function(){return Mi.default}}),Object.defineProperty(wi,"raf",{enumerable:!0,get:function(){return Ti.default}}),Object.defineProperty(wi,"extend",{enumerable:!0,get:function(){return Ei.default}}),Object.defineProperty(wi,"clone",{enumerable:!0,get:function(){return Si.default}}),Object.defineProperty(wi,"getOriginXY",{enumerable:!0,get:function(){return Di.default}}),Object.defineProperty(wi,"pointer",{enumerable:!0,get:function(){return ki.default}}),Object.defineProperty(wi,"rect",{enumerable:!0,get:function(){return zi.default}}),Object.defineProperty(wi,"events",{enumerable:!0,get:function(){return Ii.default}}),Object.defineProperty(wi,"hypot",{enumerable:!0,get:function(){return Ai.default}}),Object.defineProperty(wi,"normalizeListeners",{enumerable:!0,get:function(){return Ci.default}}),wi.is=wi.dom=wi.arr=void 0;var Oi=be(Vr),xi=me(Wr);wi.arr=xi;var Pi=me(zo);wi.dom=Pi;var _i=me(Hr);wi.is=_i;var ji=be(Po),Mi=be(yo),Ti=be(gi),Ei=be(ai),Si=be(So),Di=be(fi),ki=be(Lo),zi=be(si),Ii=be($o),Ai=be(Yo),Ci=be(pi),Ri={};Object.defineProperty(Ri,"__esModule",{value:!0}),Ri.default=void 0;var Xi=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(wi),Yi=function(e){return e&&e.__esModule?e:{default:e}}(po),Fi={install:je,getActiveDrops:Ee,getDrop:Se,getDropEvents:De,fireDropEvents:ke,defaults:{enabled:!1,accept:null,overlap:"pointer"}},Li=Fi;Ri.default=Li;var Wi={};Object.defineProperty(Wi,"__esModule",{value:!0}),Wi.default=void 0;var Ni={base:{preventDefault:"auto",deltaSource:"page"},perAction:{enabled:!1,origin:{x:0,y:0}}};Wi.default=Ni;var qi={};Object.defineProperty(qi,"__esModule",{value:!0}),qi.default=void 0;var Vi=Ce(ai),Ui=Ce(fi),Bi=Ce(Wi),Gi=Ce(Yo),Hi=function(){function e(t,n,r,o,i,a,s,l){Re(this,e),i=i||t.element;var u=t.target,c=(u&&u.options||Bi.default).deltaSource,f=(0,Ui.default)(u,i,r),p="start"===o,d="end"===o,v=p?this:t.prevEvent,g=p?t.coords.start:d?{page:v.page,client:v.client,timeStamp:t.coords.cur.timeStamp}:t.coords.cur;this.page=(0,Vi.default)({},g.page),this.client=(0,Vi.default)({},g.client),this.timeStamp=g.timeStamp,d||(this.page.x-=f.x,this.page.y-=f.y,this.client.x-=f.x,this.client.y-=f.y),this.ctrlKey=n.ctrlKey,this.altKey=n.altKey,this.shiftKey=n.shiftKey,this.metaKey=n.metaKey,this.button=n.button,this.buttons=n.buttons,this.target=i,this.currentTarget=i,this.relatedTarget=a||null,this.preEnd=s,this.type=l||r+(o||""),this.interaction=t,this.interactable=u,this.t0=p?t.pointers[t.pointers.length-1].downTime:v.t0,this.x0=t.coords.start.page.x-f.x,this.y0=t.coords.start.page.y-f.y,this.clientX0=t.coords.start.client.x-f.x,this.clientY0=t.coords.start.client.y-f.y,this.delta=p||d?{x:0,y:0}:{x:this[c].x-v[c].x,y:this[c].y-v[c].y},this.dt=t.coords.delta.timeStamp,this.duration=this.timeStamp-this.t0,this.velocity=(0,Vi.default)({},t.coords.velocity[c]),this.speed=(0,Gi.default)(this.velocity.x,this.velocity.y),this.swipe=d||"inertiastart"===o?this.getSwipe():null}return Ye(e,[{key:"getSwipe",value:function(){var e=this.interaction;if(e.prevEvent.speed<600||this.timeStamp-e.prevEvent.timeStamp>150)return null;var t=180*Math.atan2(e.prevEvent.velocityY,e.prevEvent.velocityX)/Math.PI;t<0&&(t+=360);var n=112.5<=t&&t<247.5,r=202.5<=t&&t<337.5,o=!n&&(292.5<=t||t<67.5);return{up:r,down:!r&&22.5<=t&&t<157.5,left:n,right:o,angle:t,speed:e.prevEvent.speed,velocity:{x:e.prevEvent.velocityX,y:e.prevEvent.velocityY}}}},{key:"preventDefault",value:function(){}},{key:"stopImmediatePropagation",value:function(){this.immediatePropagationStopped=this.propagationStopped=!0}},{key:"stopPropagation",value:function(){this.propagationStopped=!0}},{key:"pageX",get:function(){return this.page.x},set:function(e){this.page.x=e}},{key:"pageY",get:function(){return this.page.y},set:function(e){this.page.y=e}},{key:"clientX",get:function(){return this.client.x},set:function(e){this.client.x=e}},{key:"clientY",get:function(){return this.client.y},set:function(e){this.client.y=e}},{key:"dx",get:function(){return this.delta.x},set:function(e){this.delta.x=e}},{key:"dy",get:function(){return this.delta.y},set:function(e){this.delta.y=e}},{key:"velocityX",get:function(){return this.velocity.x},set:function(e){this.velocity.x=e}},{key:"velocityY",get:function(){return this.velocity.y},set:function(e){this.velocity.y=e}}]),e}(),$i=Hi;qi.default=$i;var Ki={};Object.defineProperty(Ki,"__esModule",{value:!0}),Ki.default=void 0;var Qi=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(wi),Ji=function(e){return e&&e.__esModule?e:{default:e}}(qi),Zi={install:Fe};Ki.default=Zi;var ea={};Object.defineProperty(ea,"__esModule",{value:!0}),ea.default=void 0;var ta=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(wi),na={install:qe};ea.default=na;var ra={};Object.defineProperty(ra,"__esModule",{value:!0}),ra.install=$e,Object.defineProperty(ra,"gesture",{enumerable:!0,get:function(){return oa.default}}),Object.defineProperty(ra,"resize",{enumerable:!0,get:function(){return ia.default}}),Object.defineProperty(ra,"drag",{enumerable:!0,get:function(){return aa.default}}),Object.defineProperty(ra,"drop",{enumerable:!0,get:function(){return sa.default}});var oa=He(Ki),ia=He(ea),aa=He(so),sa=He(Ri),la={};Object.defineProperty(la,"__esModule",{value:!0}),la.getContainer=Je,la.getScroll=Ze,la.getScrollSize=et,la.getScrollSizeDelta=tt,la.default=void 0;var ua=function(e){return e&&e.__esModule?e:{default:e}}(gi),ca=Ke(Hr),fa=Ke(zo),pa={install:Qe};la.default=pa;var da={};Object.defineProperty(da,"__esModule",{value:!0}),da.default=void 0;var va=nt(Hr),ga=nt(zo),ha={install:rt};da.default=ha;var ya={};Object.defineProperty(ya,"__esModule",{value:!0}),ya.default=void 0;var ma=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(wi),ba=function(e){return e&&e.__esModule?e:{default:e}}(da),wa={install:ot,maxInteractions:ct,withinInteractionLimit:ut,validateAction:it};ya.default=wa;var Oa={};Object.defineProperty(Oa,"__esModule",{value:!0}),Oa.default=void 0;var xa=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(Hr),Pa=function(e){return e&&e.__esModule?e:{default:e}}(ya),_a={install:pt};Oa.default=_a;var ja={};Object.defineProperty(ja,"__esModule",{value:!0}),ja.default=void 0;var Ma={install:dt,getHoldDuration:vt};ja.default=Ma;var Ta={};Object.defineProperty(Ta,"__esModule",{value:!0}),Ta.install=ht,Object.defineProperty(Ta,"autoStart",{enumerable:!0,get:function(){return Ea.default}}),Object.defineProperty(Ta,"hold",{enumerable:!0,get:function(){return Sa.default}}),Object.defineProperty(Ta,"dragAxis",{enumerable:!0,get:function(){return Da.default}});var Ea=gt(ya),Sa=gt(ja),Da=gt(Oa),ka={};Object.defineProperty(ka,"__esModule",{value:!0}),ka.install=wt,ka.default=void 0;var za=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(Hr),Ia=function(e){return e&&e.__esModule?e:{default:e}}($o),Aa={install:wt};ka.default=Aa;var Ca={};Object.defineProperty(Ca,"__esModule",{value:!0}),Ca.default=void 0;var Ra=function(e){return e&&e.__esModule?e:{default:e}}(ai),Xa={install:jt,startAll:Mt,setAll:St,prepareStates:Dt,start:Et,beforeMove:kt,beforeEnd:zt,stop:It,shouldDo:Xt,getModifierList:Rt,getRectOffset:Tt,makeModifier:Yt};Ca.default=Xa;var Ya={};Object.defineProperty(Ya,"__esModule",{value:!0}),Ya.default=void 0;var Fa=Ft(Ca),La=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(wi),Wa=Ft(gi),Na={install:Lt,calcInertia:Vt,inertiaTick:Ut,smothEndTick:Bt,updateInertiaCoords:Gt};Ya.default=Na;var qa={};Object.defineProperty(qa,"__esModule",{value:!0}),qa.default=void 0;var Va=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(Wr),Ua=$t(ai),Ba=$t(pi),Ga=function(){function e(t){Kt(this,e),this.options=(0,Ua.default)({},t||{}),this.types={},this.propagationStopped=this.immediatePropagationStopped=!1}return Jt(e,[{key:"fire",value:function(e){var t,n=this.global;(t=this.types[e.type])&&Zt(e,t),!e.propagationStopped&&n&&(t=n[e.type])&&Zt(e,t)}},{key:"on",value:function(e,t){var n=(0,Ba.default)(e,t);for(e in n)this.types[e]=Va.merge(this.types[e]||[],n[e])}},{key:"off",value:function(e,t){var n=(0,Ba.default)(e,t);for(e in n){var r=this.types[e];if(r&&r.length)for(var o=0;othis.pointerMoveTolerance);var a={pointer:e,pointerIndex:this.getPointerIndex(e),event:t,eventTarget:n,dx:r,dy:o,duplicate:i,interaction:this};i||(ls.pointer.setCoordDeltas(this.coords.delta,this.coords.prev,this.coords.cur),ls.pointer.setCoordVelocity(this.coords.velocity,this.coords.delta)),this._signals.fire("move",a),i||(this.interacting()&&this.move(a),this.pointerWasMoved&&ls.pointer.copyCoords(this.coords.prev,this.coords.cur))}},{key:"move",value:function(e){e=ls.extend({pointer:this._latestPointer.pointer,event:this._latestPointer.event,eventTarget:this._latestPointer.eventTarget,interaction:this,noBefore:!1},e||{}),e.phase="move",this._doPhase(e)}},{key:"pointerUp",value:function(e,t,n,r){var o=this.getPointerIndex(e);this._signals.fire(/cancel$/i.test(t.type)?"cancel":"up",{pointer:e,pointerIndex:o,event:t,eventTarget:n,curEventTarget:r,interaction:this}),this.simulation||this.end(t),this.pointerIsDown=!1,this.removePointer(e,t)}},{key:"documentBlur",value:function(e){this.end(e),this._signals.fire("blur",{event:e,interaction:this})}},{key:"end",value:function(e){this._ending=!0,e=e||this._latestPointer.event;var t;this.interacting()&&(t=this._doPhase({event:e,interaction:this,phase:"end"})),this._ending=!1,!0===t&&this.stop()}},{key:"currentAction",value:function(){return this._interacting?this.prepared.name:null}},{key:"interacting",value:function(){return this._interacting}},{key:"stop",value:function(){this._signals.fire("stop",{interaction:this}),this.target=this.element=null,this._interacting=!1,this.prepared.name=this.prevEvent=null}},{key:"getPointerIndex",value:function(e){var t=ls.pointer.getPointerId(e);return"mouse"===this.pointerType||"pen"===this.pointerType?0:ls.arr.findIndex(this.pointers,function(e){return e.id===t})}},{key:"getPointerInfo",value:function(e){return this.pointers[this.getPointerIndex(e)]}},{key:"updatePointer",value:function(e,t,n,r){var o=ls.pointer.getPointerId(e),i=this.getPointerIndex(e),a=this.pointers[i];return a?a.pointer=e:(a={id:o,pointer:e,event:t,downTime:null,downTarget:null},i=this.pointers.length,this.pointers.push(a)),r&&(this.pointerIsDown=!0,this.interacting()||(ls.pointer.setCoords(this.coords.start,this.pointers.map(function(e){return e.pointer})),ls.pointer.copyCoords(this.coords.cur,this.coords.start),ls.pointer.copyCoords(this.coords.prev,this.coords.start),ls.pointer.pointerExtend(this.downPointer,e),this.downEvent=t,a.downTime=this.coords.cur.timeStamp,a.downTarget=n,this.pointerWasMoved=!1)),this._updateLatestPointer(e,t,n),this._signals.fire("update-pointer",{pointer:e,event:t,eventTarget:n,down:r,pointerInfo:a,pointerIndex:i,interaction:this}),i}},{key:"removePointer",value:function(e,t){var n=this.getPointerIndex(e);if(-1!==n){var r=this.pointers[n];this._signals.fire("remove-pointer",{pointer:e,event:t,pointerIndex:n,pointerInfo:r,interaction:this}),this.pointers.splice(n,1)}}},{key:"_updateLatestPointer",value:function(e,t,n){this._latestPointer.pointer=e,this._latestPointer.event=t,this._latestPointer.eventTarget=n}},{key:"_createPreparedEvent",value:function(e,t,n,r){var o=this.prepared.name;return new ss.default(this,e,o,t,this.element,null,n,r)}},{key:"_fireEvent",value:function(e){this.target.fire(e),(!this.prevEvent||e.timeStamp>=this.prevEvent.timeStamp)&&(this.prevEvent=e)}},{key:"_doPhase",value:function(e){var t=e.event,n=e.phase,r=e.preEnd,o=e.type;if(!e.noBefore){if(!1===this._signals.fire("before-action-".concat(n),e))return!1}var i=e.iEvent=this._createPreparedEvent(t,n,r,o);return this._signals.fire("action-".concat(n),e),this._fireEvent(i),this._signals.fire("after-action-".concat(n),e),!0}}]),e}();us.prototype.doMove=ls.warnOnce(function(e){this.move(e)},"The interaction.doMove() method has been renamed to interaction.move()");var cs=us;as.default=cs;var fs={};Object.defineProperty(fs,"__esModule",{value:!0}),fs.default=void 0;var ps=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(wi),ds={methodOrder:["simulationResume","mouseOrPen","hasPointer","idle"],search:function(e){for(var t=0;t=2)continue;if(!i.interacting()&&t===i.pointerType)return i}return null}},vs=ds;fs.default=vs;var gs={};Object.defineProperty(gs,"__esModule",{value:!0}),gs.newInteraction=Tn,gs.default=void 0;var hs=cn(as),ys=cn($o),ms=cn(fs),bs=cn(Po),ws=cn(wo),Os=cn(Lo),xs=cn(yo),Ps=["pointerDown","pointerMove","pointerUp","updatePointer","removePointer","windowBlur"],_s={install:_n,onDocSignal:En,doOnInteractions:jn,newInteraction:Tn,methodNames:Ps};gs.default=_s;var js={};Object.defineProperty(js,"__esModule",{value:!0}),js.createScope=Wn;var Ms=Sn(qa),Ts=Sn(Wi),Es=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(wi),Ss=Sn(wo),Ds=Sn(gs),ks=Sn(qi),zs=Sn($a),Is=Es.win,As=Es.browser,Cs=Es.raf,Rs=Es.Signals,Xs=Es.events,Ys={};Object.defineProperty(Ys,"__esModule",{value:!0}),Ys.default=Ys.scope=void 0;var Fs=qn(Po),Ls=qn($o),Ws=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(wi),Ns={},qs=(0,js.createScope)();Ys.scope=qs,qs._plugins=[],Vn.use=function(e){if(-1===qs._plugins.indexOf(e))return e.install(qs),qs._plugins.push(e),Vn},Vn.isSet=function(e,t){return-1!==qs.interactables.indexOfElement(e,t&&t.context)},Vn.on=function(e,t,n){if(Ws.is.string(e)&&-1!==e.search(" ")&&(e=e.trim().split(/ +/)),Ws.is.array(e)){for(var r=0;r\n * Released under the MIT License.\n * https://raw.github.com/taye/interact.js/master/LICENSE\n */\n","export function contains (array, target) {\n return array.indexOf(target) !== -1;\n}\n\nexport function remove (array, target) {\n return array.splice(array.indexOf(target), 1);\n}\n\nexport function merge (target, source) {\n for (const item of source) {\n target.push(item);\n }\n\n return target;\n}\n\nexport function from (source) {\n return merge([], source);\n}\n\nexport function findIndex (array, func) {\n for (let i = 0; i < array.length; i++) {\n if (func(array[i], i, array)) {\n return i;\n }\n }\n\n return -1;\n}\n\nexport function find (array, func) {\n return array[findIndex(array, func)];\n}\n\nexport function some (array, func) {\n return findIndex(array, func) !== -1;\n}\n","import isWindow from './isWindow';\n\nconst win = {\n getWindow,\n init,\n};\n\nexport function init (window) {\n // get wrapped window if using Shadow DOM polyfill\n\n win.realWindow = window;\n\n // create a TextNode\n const el = window.document.createTextNode('');\n\n // check if it's wrapped by a polyfill\n if (el.ownerDocument !== window.document\n && typeof window.wrap === 'function'\n && window.wrap(el) === el) {\n // use wrapped window\n window = window.wrap(window);\n }\n\n win.window = window;\n}\n\nif (typeof window === 'undefined') {\n win.window = undefined;\n win.realWindow = undefined;\n}\nelse {\n init(window);\n}\n\nexport function getWindow (node) {\n if (isWindow(node)) {\n return node;\n }\n\n const rootNode = (node.ownerDocument || node);\n\n return rootNode.defaultView || win.window;\n}\n\nwin.init = init;\n\nexport default win;\n","import * as is from '@interactjs/utils/is';\nimport * as arr from '@interactjs/utils/arr';\n\nfunction install (scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope;\n\n interactions.signals.on('before-action-move', beforeMove);\n interactions.signals.on('action-resume', beforeMove);\n\n // dragmove\n interactions.signals.on('action-move', move);\n\n Interactable.prototype.draggable = drag.draggable;\n\n actions.drag = drag;\n actions.names.push('drag');\n arr.merge(actions.eventTypes, [\n 'dragstart',\n 'dragmove',\n 'draginertiastart',\n 'dragresume',\n 'dragend',\n ]);\n actions.methodDict.drag = 'draggable';\n\n defaults.drag = drag.defaults;\n}\n\nfunction beforeMove ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return; }\n\n const axis = interaction.prepared.axis;\n\n if (axis === 'x') {\n interaction.coords.cur.page.y = interaction.coords.start.page.y;\n interaction.coords.cur.client.y = interaction.coords.start.client.y;\n\n interaction.coords.velocity.client.y = 0;\n interaction.coords.velocity.page.y = 0;\n }\n else if (axis === 'y') {\n interaction.coords.cur.page.x = interaction.coords.start.page.x;\n interaction.coords.cur.client.x = interaction.coords.start.client.x;\n\n interaction.coords.velocity.client.x = 0;\n interaction.coords.velocity.page.x = 0;\n }\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'drag') { return; }\n\n const axis = interaction.prepared.axis;\n\n if (axis === 'x' || axis === 'y') {\n const opposite = axis === 'x' ? 'y' : 'x';\n\n iEvent.page[opposite] = interaction.coords.start.page[opposite];\n iEvent.client[opposite] = interaction.coords.start.client[opposite];\n iEvent.delta[opposite] = 0;\n }\n}\n\n/**\n * ```js\n * interact(element).draggable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // the axis in which the first movement must be\n * // for the drag sequence to start\n * // 'xy' by default - any direction\n * startAxis: 'x' || 'y' || 'xy',\n *\n * // 'xy' by default - don't restrict to one axis (move in any direction)\n * // 'x' or 'y' to restrict movement to either axis\n * // 'start' to restrict movement to the axis the drag started in\n * lockAxis: 'x' || 'y' || 'xy' || 'start',\n *\n * // max number of drags that can happen concurrently\n * // with elements of this Interactable. Infinity by default\n * max: Infinity,\n *\n * // max number of drags that can target the same element+Interactable\n * // 1 by default\n * maxPerElement: 2\n * });\n *\n * var isDraggable = interact('element').draggable(); // true\n * ```\n *\n * Get or set whether drag actions can be performed on the target\n *\n * @alias Interactable.prototype.draggable\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on drag events (object makes the Interactable\n * draggable)\n * @return {boolean | Interactable} boolean indicating if this can be the\n * target of drag events, or this Interctable\n */\nfunction draggable (options) {\n if (is.object(options)) {\n this.options.drag.enabled = options.enabled === false? false: true;\n this.setPerAction('drag', options);\n this.setOnEvents('drag', options);\n\n if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n this.options.drag.lockAxis = options.lockAxis;\n }\n if (/^(xy|x|y)$/.test(options.startAxis)) {\n this.options.drag.startAxis = options.startAxis;\n }\n\n return this;\n }\n\n if (is.bool(options)) {\n this.options.drag.enabled = options;\n\n return this;\n }\n\n return this.options.drag;\n}\n\nconst drag = {\n install,\n draggable,\n beforeMove,\n move,\n defaults: {\n startAxis : 'xy',\n lockAxis : 'xy',\n },\n\n checker (pointer, event, interactable) {\n const dragOptions = interactable.options.drag;\n\n return dragOptions.enabled\n ? {\n name: 'drag',\n axis: (dragOptions.lockAxis === 'start'\n ? dragOptions.startAxis\n : dragOptions.lockAxis),\n }\n : null;\n },\n\n getCursor () {\n return 'move';\n },\n};\n\nexport default drag;\n","const domObjects = {\n init,\n};\n\nfunction blank () {}\n\nexport default domObjects;\n\nfunction init (window) {\n domObjects.document = window.document;\n domObjects.DocumentFragment = window.DocumentFragment || blank;\n domObjects.SVGElement = window.SVGElement || blank;\n domObjects.SVGSVGElement = window.SVGSVGElement || blank;\n domObjects.SVGElementInstance = window.SVGElementInstance || blank;\n domObjects.Element = window.Element || blank;\n domObjects.HTMLElement = window.HTMLElement || domObjects.Element;\n\n domObjects.Event = window.Event;\n domObjects.Touch = window.Touch || blank;\n domObjects.PointerEvent = (window.PointerEvent || window.MSPointerEvent);\n}\n","import win from './window';\nimport * as is from './is';\nimport domObjects from './domObjects';\n\nconst browser = {\n init,\n};\n\nexport default browser;\n\nfunction init (window) {\n const Element = domObjects.Element;\n const navigator = win.window.navigator;\n\n // Does the browser support touch input?\n browser.supportsTouch = !!(('ontouchstart' in window) || is.func(window.DocumentTouch)\n && domObjects.document instanceof window.DocumentTouch);\n\n // Does the browser support PointerEvents\n browser.supportsPointerEvent = !!domObjects.PointerEvent;\n\n browser.isIOS = (/iP(hone|od|ad)/.test(navigator.platform));\n\n // scrolling doesn't change the result of getClientRects on iOS 7\n browser.isIOS7 = (/iP(hone|od|ad)/.test(navigator.platform)\n && /OS 7[^\\d]/.test(navigator.appVersion));\n\n browser.isIe9 = /MSIE 9/.test(navigator.userAgent);\n\n // prefix matchesSelector\n browser.prefixedMatchesSelector = 'matches' in Element.prototype\n ? 'matches'\n : 'webkitMatchesSelector' in Element.prototype\n ? 'webkitMatchesSelector'\n : 'mozMatchesSelector' in Element.prototype\n ? 'mozMatchesSelector'\n : 'oMatchesSelector' in Element.prototype\n ? 'oMatchesSelector'\n : 'msMatchesSelector';\n\n browser.pEventTypes = (domObjects.PointerEvent\n ? (domObjects.PointerEvent === window.MSPointerEvent\n ? {\n up: 'MSPointerUp',\n down: 'MSPointerDown',\n over: 'mouseover',\n out: 'mouseout',\n move: 'MSPointerMove',\n cancel: 'MSPointerCancel',\n }\n : {\n up: 'pointerup',\n down: 'pointerdown',\n over: 'pointerover',\n out: 'pointerout',\n move: 'pointermove',\n cancel: 'pointercancel',\n })\n : null);\n\n // because Webkit and Opera still use 'mousewheel' event type\n browser.wheelEvent = 'onmousewheel' in domObjects.document? 'mousewheel': 'wheel';\n\n // Opera Mobile must be handled differently\n browser.isOperaMobile = (navigator.appName === 'Opera'\n && browser.supportsTouch\n && navigator.userAgent.match('Presto'));\n}\n","import * as is from './is';\nimport * as arr from './arr';\n\nexport default function clone (source) {\n const dest = {};\n\n for (const prop in source) {\n const value = source[prop];\n\n if (is.plainObject(value)) {\n dest[prop] = clone(value);\n }\n else if (is.array(value)) {\n dest[prop] = arr.from(value);\n }\n else {\n dest[prop] = value;\n }\n }\n\n return dest;\n}\n","import win from './window';\nimport browser from './browser';\nimport * as is from './is';\nimport domObjects from './domObjects';\n\nexport function nodeContains (parent, child) {\n while (child) {\n if (child === parent) {\n return true;\n }\n\n child = child.parentNode;\n }\n\n return false;\n}\n\nexport function closest (element, selector) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) { return element; }\n\n element = parentNode(element);\n }\n\n return null;\n}\n\nexport function parentNode (node) {\n let parent = node.parentNode;\n\n if (is.docFrag(parent)) {\n // skip past #shado-root fragments\n while ((parent = parent.host) && is.docFrag(parent)) {\n continue;\n }\n\n return parent;\n }\n\n return parent;\n}\n\nexport function matchesSelector (element, selector) {\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (win.window !== win.realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ');\n }\n\n return element[browser.prefixedMatchesSelector](selector);\n}\n\n// Test for the element that's \"above\" all other qualifiers\nexport function indexOfDeepestElement (elements) {\n let deepestZoneParents = [];\n let dropzoneParents = [];\n let dropzone;\n let deepestZone = elements[0];\n let index = deepestZone? 0: -1;\n let parent;\n let child;\n let i;\n let n;\n\n for (i = 1; i < elements.length; i++) {\n dropzone = elements[i];\n\n // an element might belong to multiple selector dropzones\n if (!dropzone || dropzone === deepestZone) {\n continue;\n }\n\n if (!deepestZone) {\n deepestZone = dropzone;\n index = i;\n continue;\n }\n\n // check if the deepest or current are document.documentElement or document.rootElement\n // - if the current dropzone is, do nothing and continue\n if (dropzone.parentNode === dropzone.ownerDocument) {\n continue;\n }\n // - if deepest is, update with the current dropzone and continue to next\n else if (deepestZone.parentNode === dropzone.ownerDocument) {\n deepestZone = dropzone;\n index = i;\n continue;\n }\n\n if (!deepestZoneParents.length) {\n parent = deepestZone;\n while (parent.parentNode && parent.parentNode !== parent.ownerDocument) {\n deepestZoneParents.unshift(parent);\n parent = parent.parentNode;\n }\n }\n\n // if this element is an svg element and the current deepest is\n // an HTMLElement\n if (deepestZone instanceof domObjects.HTMLElement\n && dropzone instanceof domObjects.SVGElement\n && !(dropzone instanceof domObjects.SVGSVGElement)) {\n\n if (dropzone === deepestZone.parentNode) {\n continue;\n }\n\n parent = dropzone.ownerSVGElement;\n }\n else {\n parent = dropzone;\n }\n\n dropzoneParents = [];\n\n while (parent.parentNode !== parent.ownerDocument) {\n dropzoneParents.unshift(parent);\n parent = parent.parentNode;\n }\n\n n = 0;\n\n // get (position of last common ancestor) + 1\n while (dropzoneParents[n] && dropzoneParents[n] === deepestZoneParents[n]) {\n n++;\n }\n\n const parents = [\n dropzoneParents[n - 1],\n dropzoneParents[n],\n deepestZoneParents[n],\n ];\n\n child = parents[0].lastChild;\n\n while (child) {\n if (child === parents[1]) {\n deepestZone = dropzone;\n index = i;\n deepestZoneParents = [];\n\n break;\n }\n else if (child === parents[2]) {\n break;\n }\n\n child = child.previousSibling;\n }\n }\n\n return index;\n}\n\nexport function matchesUpTo (element, selector, limit) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return true;\n }\n\n element = parentNode(element);\n\n if (element === limit) {\n return matchesSelector(element, selector);\n }\n }\n\n return false;\n}\n\nexport function getActualElement (element) {\n return (element instanceof domObjects.SVGElementInstance\n ? element.correspondingUseElement\n : element);\n}\n\nexport function getScrollXY (relevantWindow) {\n relevantWindow = relevantWindow || win.window;\n return {\n x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft,\n y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop,\n };\n}\n\nexport function getElementClientRect (element) {\n const clientRect = (element instanceof domObjects.SVGElement\n ? element.getBoundingClientRect()\n : element.getClientRects()[0]);\n\n return clientRect && {\n left : clientRect.left,\n right : clientRect.right,\n top : clientRect.top,\n bottom: clientRect.bottom,\n width : clientRect.width || clientRect.right - clientRect.left,\n height: clientRect.height || clientRect.bottom - clientRect.top,\n };\n}\n\nexport function getElementRect (element) {\n const clientRect = getElementClientRect(element);\n\n if (!browser.isIOS7 && clientRect) {\n const scroll = getScrollXY(win.getWindow(element));\n\n clientRect.left += scroll.x;\n clientRect.right += scroll.x;\n clientRect.top += scroll.y;\n clientRect.bottom += scroll.y;\n }\n\n return clientRect;\n}\n\nexport function getPath (element) {\n const path = [];\n\n while (element) {\n path.push(element);\n element = parentNode(element);\n }\n\n return path;\n}\n\nexport function trySelector (value) {\n if (!is.string(value)) { return false; }\n\n // an exception will be raised if it is invalid\n domObjects.document.querySelector(value);\n return true;\n}\n","export default function pointerExtend (dest, source) {\n for (const prop in source) {\n const prefixedPropREs = pointerExtend.prefixedPropREs;\n let deprecated = false;\n\n // skip deprecated prefixed properties\n for (const vendor in prefixedPropREs) {\n if (prop.indexOf(vendor) === 0 && prefixedPropREs[vendor].test(prop)) {\n deprecated = true;\n break;\n }\n }\n\n if (!deprecated && typeof source[prop] !== 'function') {\n dest[prop] = source[prop];\n }\n }\n return dest;\n}\n\npointerExtend.prefixedPropREs = {\n webkit: /(Movement[XY]|Radius[XY]|RotationAngle|Force)$/,\n};\n","import * as is from './is';\nimport * as domUtils from './domUtils';\nimport pointerUtils from './pointerUtils';\nimport pExtend from './pointerExtend';\n\nimport { contains } from './arr';\n\nconst elements = [];\nconst targets = [];\n\n// {\n// type: {\n// selectors: ['selector', ...],\n// contexts : [document, ...],\n// listeners: [[listener, capture, passive], ...]\n// }\n// }\nconst delegatedEvents = {};\nconst documents = [];\n\nfunction add (element, type, listener, optionalArg) {\n const options = getOptions(optionalArg);\n let elementIndex = elements.indexOf(element);\n let target = targets[elementIndex];\n\n if (!target) {\n target = {\n events: {},\n typeCount: 0,\n };\n\n elementIndex = elements.push(element) - 1;\n targets.push(target);\n }\n\n if (!target.events[type]) {\n target.events[type] = [];\n target.typeCount++;\n }\n\n if (!contains(target.events[type], listener)) {\n element.addEventListener(type, listener, events.supportsOptions? options : !!options.capture);\n target.events[type].push(listener);\n }\n}\n\nfunction remove (element, type, listener, optionalArg) {\n const options = getOptions(optionalArg);\n const elementIndex = elements.indexOf(element);\n const target = targets[elementIndex];\n\n if (!target || !target.events) {\n return;\n }\n\n if (type === 'all') {\n for (type in target.events) {\n if (target.events.hasOwnProperty(type)) {\n remove(element, type, 'all');\n }\n }\n return;\n }\n\n if (target.events[type]) {\n const len = target.events[type].length;\n\n if (listener === 'all') {\n for (let i = 0; i < len; i++) {\n remove(element, type, target.events[type][i], options);\n }\n return;\n }\n else {\n for (let i = 0; i < len; i++) {\n if (target.events[type][i] === listener) {\n element.removeEventListener(type, listener, events.supportsOptions? options : !!options.capture);\n target.events[type].splice(i, 1);\n\n break;\n }\n }\n }\n\n if (target.events[type] && target.events[type].length === 0) {\n target.events[type] = null;\n target.typeCount--;\n }\n }\n\n if (!target.typeCount) {\n targets.splice(elementIndex, 1);\n elements.splice(elementIndex, 1);\n }\n}\n\nfunction addDelegate (selector, context, type, listener, optionalArg) {\n const options = getOptions(optionalArg);\n if (!delegatedEvents[type]) {\n delegatedEvents[type] = {\n selectors: [],\n contexts : [],\n listeners: [],\n };\n\n // add delegate listener functions\n for (const doc of documents) {\n add(doc, type, delegateListener);\n add(doc, type, delegateUseCapture, true);\n }\n }\n\n const delegated = delegatedEvents[type];\n let index;\n\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n if (delegated.selectors[index] === selector\n && delegated.contexts[index] === context) {\n break;\n }\n }\n\n if (index === -1) {\n index = delegated.selectors.length;\n\n delegated.selectors.push(selector);\n delegated.contexts .push(context);\n delegated.listeners.push([]);\n }\n\n // keep listener and capture and passive flags\n delegated.listeners[index].push([listener, !!options.capture, options.passive]);\n}\n\nfunction removeDelegate (selector, context, type, listener, optionalArg) {\n const options = getOptions(optionalArg);\n const delegated = delegatedEvents[type];\n let matchFound = false;\n let index;\n\n if (!delegated) { return; }\n\n // count from last index of delegated to 0\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n // look for matching selector and context Node\n if (delegated.selectors[index] === selector\n && delegated.contexts[index] === context) {\n\n const listeners = delegated.listeners[index];\n\n // each item of the listeners array is an array: [function, capture, passive]\n for (let i = listeners.length - 1; i >= 0; i--) {\n const [fn, capture, passive] = listeners[i];\n\n // check if the listener functions and capture and passive flags match\n if (fn === listener && capture === !!options.capture && passive === options.passive) {\n // remove the listener from the array of listeners\n listeners.splice(i, 1);\n\n // if all listeners for this interactable have been removed\n // remove the interactable from the delegated arrays\n if (!listeners.length) {\n delegated.selectors.splice(index, 1);\n delegated.contexts .splice(index, 1);\n delegated.listeners.splice(index, 1);\n\n // remove delegate function from context\n remove(context, type, delegateListener);\n remove(context, type, delegateUseCapture, true);\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegatedEvents[type] = null;\n }\n }\n\n // only remove one listener\n matchFound = true;\n break;\n }\n }\n\n if (matchFound) { break; }\n }\n }\n}\n\n// bound to the interactable context when a DOM event\n// listener is added to a selector interactable\nfunction delegateListener (event, optionalArg) {\n const options = getOptions(optionalArg);\n const fakeEvent = {};\n const delegated = delegatedEvents[event.type];\n const [eventTarget] = (pointerUtils.getEventTargets(event));\n let element = eventTarget;\n\n // duplicate the event so that currentTarget can be changed\n pExtend(fakeEvent, event);\n\n fakeEvent.originalEvent = event;\n fakeEvent.preventDefault = preventOriginalDefault;\n\n // climb up document tree looking for selector matches\n while (is.element(element)) {\n for (let i = 0; i < delegated.selectors.length; i++) {\n const selector = delegated.selectors[i];\n const context = delegated.contexts[i];\n\n if (domUtils.matchesSelector(element, selector)\n && domUtils.nodeContains(context, eventTarget)\n && domUtils.nodeContains(context, element)) {\n\n const listeners = delegated.listeners[i];\n\n fakeEvent.currentTarget = element;\n\n for (let j = 0; j < listeners.length; j++) {\n const [fn, capture, passive] = listeners[j];\n\n if (capture === !!options.capture && passive === options.passive) {\n fn(fakeEvent);\n }\n }\n }\n }\n\n element = domUtils.parentNode(element);\n }\n}\n\nfunction delegateUseCapture (event) {\n return delegateListener.call(this, event, true);\n}\n\nfunction preventOriginalDefault () {\n this.originalEvent.preventDefault();\n}\n\nfunction getOptions (param) {\n return is.object(param)? param : { capture: param };\n}\n\nconst events = {\n add,\n remove,\n\n addDelegate,\n removeDelegate,\n\n delegateListener,\n delegateUseCapture,\n delegatedEvents,\n documents,\n\n supportsOptions: false,\n supportsPassive: false,\n\n _elements: elements,\n _targets: targets,\n\n init (window) {\n window.document.createElement('div').addEventListener('test', null, {\n get capture () { return (events.supportsOptions = true); },\n get passive () { return (events.supportsPassive = true); },\n });\n },\n};\n\nexport default events;\n","export default function extend (dest, source) {\n for (const prop in source) {\n dest[prop] = source[prop];\n }\n return dest;\n}\n","import extend from './extend';\nimport * as is from './is';\nimport {\n closest,\n parentNode,\n getElementRect,\n} from './domUtils';\n\nexport function getStringOptionResult (value, interactable, element) {\n if (!is.string(value)) {\n return null;\n }\n\n if (value === 'parent') {\n value = parentNode(element);\n }\n else if (value === 'self') {\n value = interactable.getRect(element);\n }\n else {\n value = closest(element, value);\n }\n\n return value;\n}\n\nexport function resolveRectLike (value, interactable, element, functionArgs) {\n value = getStringOptionResult(value, interactable, element) || value;\n\n if (is.func(value)) {\n value = value.apply(null, functionArgs);\n }\n\n if (is.element(value)) {\n value = getElementRect(value);\n }\n\n return value;\n}\n\nexport function rectToXY (rect) {\n return rect && {\n x: 'x' in rect ? rect.x : rect.left,\n y: 'y' in rect ? rect.y : rect.top,\n };\n}\n\nexport function xywhToTlbr (rect) {\n if (rect && !('left' in rect && 'top' in rect)) {\n rect = extend({}, rect);\n\n rect.left = rect.x || 0;\n rect.top = rect.y || 0;\n rect.right = rect.right || (rect.left + rect.width);\n rect.bottom = rect.bottom || (rect.top + rect.height);\n }\n\n return rect;\n}\n\nexport function tlbrToXywh (rect) {\n if (rect && !('x' in rect && 'y' in rect)) {\n rect = extend({}, rect);\n\n rect.x = rect.left || 0;\n rect.y = rect.top || 0;\n rect.width = rect.width || (rect.right - rect.x);\n rect.height = rect.height || (rect.bottom - rect.y);\n }\n\n return rect;\n}\n\nexport default {\n getStringOptionResult,\n resolveRectLike,\n rectToXY,\n xywhToTlbr,\n tlbrToXywh,\n};\n","import {\n resolveRectLike,\n rectToXY,\n} from './rect';\n\nexport default function (target, element, action) {\n const actionOptions = target.options[action];\n const actionOrigin = actionOptions && actionOptions.origin;\n const origin = actionOrigin || target.options.origin;\n\n const originRect = resolveRectLike(origin, target, element, [target && element]);\n\n return rectToXY(originRect) || { x: 0, y: 0 };\n}\n","import * as is from './is';\nimport extend from './extend';\n\nexport default function normalize (type, listener, result) {\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((acc, t) => extend(acc, normalize(t, listener, result)), {});\n }\n\n // ({ type: fn }) -> ('', { type: fn })\n if (is.object(type)) {\n listener = type;\n type = '';\n }\n\n if (is.func(listener)) {\n result[type] = result[type] || [];\n result[type].push(listener);\n }\n else if (is.array(listener)) {\n for (const l of listener) {\n normalize(type, l, result);\n }\n }\n else if (is.object(listener)) {\n for (const prefix in listener) {\n const combinedTypes = split(prefix).map(p => `${type}${p}`);\n\n normalize(combinedTypes, listener[prefix], result);\n }\n }\n\n return result;\n}\n\nfunction split (type) {\n return type.trim().split(/ +/);\n}\n","let lastTime = 0;\nlet request;\nlet cancel;\n\nfunction init (window) {\n request = window.requestAnimationFrame;\n cancel = window.cancelAnimationFrame;\n\n if (!request) {\n const vendors = ['ms', 'moz', 'webkit', 'o'];\n\n for (const vendor of vendors) {\n request = window[`${vendor}RequestAnimationFrame`];\n cancel = window[`${vendor}CancelAnimationFrame`] || window[`${vendor}CancelRequestAnimationFrame`];\n }\n }\n\n if (!request) {\n request = callback => {\n const currTime = new Date().getTime();\n const timeToCall = Math.max(0, 16 - (currTime - lastTime));\n const token = setTimeout(function () { callback(currTime + timeToCall); },\n timeToCall);\n\n lastTime = currTime + timeToCall;\n return token;\n };\n\n cancel = token => clearTimeout(token);\n }\n}\n\nexport default {\n request: callback => request(callback),\n cancel: token => cancel(token),\n init,\n};\n","import win from './window';\n\nexport function warnOnce (method, message) {\n let warned = false;\n\n return function () {\n if (!warned) {\n win.window.console.warn(message);\n warned = true;\n }\n\n return method.apply(this, arguments);\n };\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nexport function _getQBezierValue (t, p1, p2, p3) {\n const iT = 1 - t;\n return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3;\n}\n\nexport function getQuadraticCurvePoint (startX, startY, cpX, cpY, endX, endY, position) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY),\n };\n}\n\n// http://gizma.com/easing/\nexport function easeOutQuad (t, b, c, d) {\n t /= d;\n return -c * t*(t-2) + b;\n}\n\nexport function copyAction (dest, src) {\n dest.name = src.name;\n dest.axis = src.axis;\n dest.edges = src.edges;\n\n return dest;\n}\n\nimport * as arr from './arr';\nimport * as dom from './domUtils';\nimport * as is from './is';\n\nexport {\n win,\n arr,\n dom,\n is,\n};\n\nexport { default as browser } from './browser';\nexport { default as Signals } from './Signals';\nexport { default as raf } from './raf';\nexport { default as extend } from './extend';\nexport { default as clone } from './clone';\nexport { default as getOriginXY } from './getOriginXY';\nexport { default as pointer } from './pointerUtils';\nexport { default as rect } from './rect';\nexport { default as events } from './events';\nexport { default as hypot } from './hypot';\nexport { default as normalizeListeners } from './normalizeListeners';\n","import * as utils from '@interactjs/utils';\nimport DropEvent from './DropEvent';\n\nfunction install (scope) {\n const {\n actions,\n /** @lends module:interact */\n interact,\n /** @lends Interactable */\n Interactable,\n interactions,\n defaults,\n } = scope;\n\n interactions.signals.on('after-action-start', function ({ interaction, event, iEvent: dragEvent }) {\n if (interaction.prepared.name !== 'drag') { return; }\n\n const { dropStatus } = interaction;\n\n // reset active dropzones\n dropStatus.activeDrops = null;\n dropStatus.events = null;\n\n if (!scope.dynamicDrop) {\n dropStatus.activeDrops = getActiveDrops(scope, interaction.element);\n }\n\n dropStatus.events = getDropEvents(interaction, event, dragEvent);\n\n if (dropStatus.events.activate) {\n fireActivationEvents(dropStatus.activeDrops, dropStatus.events.activate);\n }\n });\n\n interactions.signals.on('action-move', arg => onEventCreated(arg, scope));\n interactions.signals.on('action-end' , arg => onEventCreated(arg, scope));\n\n interactions.signals.on('after-action-move', function ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return; }\n\n fireDropEvents(interaction, interaction.dropStatus.events);\n interaction.dropStatus.events = {};\n });\n\n interactions.signals.on('after-action-end', function ({ interaction }) {\n if (interaction.prepared.name === 'drag') {\n fireDropEvents(interaction, interaction.dropStatus.events);\n }\n });\n\n interactions.signals.on('stop', function ({ interaction }) {\n interaction.dropStatus.activeDrops = null;\n interaction.dropStatus.events = null;\n });\n\n interactions.signals.on('new', function (interaction) {\n interaction.dropStatus = {\n cur: {\n dropzone : null, // the dropzone a drag target might be dropped into\n element : null, // the element at the time of checking\n },\n prev: {\n dropzone : null, // the dropzone that was recently dragged away from\n element : null, // the element at the time of checking\n },\n rejected : false, // wheather the potential drop was rejected from a listener\n events : null, // the drop events related to the current drag event\n activeDrops: null, // an array of { dropzone, element, rect }\n };\n });\n\n interactions.signals.on('stop', function ({ interaction: { dropStatus } }) {\n dropStatus.cur.dropzone = dropStatus.cur.element =\n dropStatus.prev.dropzone = dropStatus.prev.element = null;\n dropStatus.rejected = false;\n });\n\n Interactable.prototype.dropzone = function (options) {\n return dropzoneMethod(this, options);\n };\n\n Interactable.prototype.dropCheck = function (dragEvent, event, draggable, draggableElement, dropElement, rect) {\n return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect);\n };\n\n /**\n * Returns or sets whether the dimensions of dropzone elements are calculated\n * on every dragmove or only on dragstart for the default dropChecker\n *\n * @param {boolean} [newValue] True to check on each move. False to check only\n * before start\n * @return {boolean | interact} The current setting or interact\n */\n interact.dynamicDrop = function (newValue) {\n if (utils.is.bool(newValue)) {\n //if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n // calcRects(dropzones);\n //}\n\n scope.dynamicDrop = newValue;\n\n return interact;\n }\n return scope.dynamicDrop;\n };\n\n utils.arr.merge(actions.eventTypes, [\n 'dragenter',\n 'dragleave',\n 'dropactivate',\n 'dropdeactivate',\n 'dropmove',\n 'drop',\n ]);\n actions.methodDict.drop = 'dropzone';\n\n scope.dynamicDrop = false;\n\n defaults.drop = drop.defaults;\n}\n\nfunction collectDrops ({ interactables }, draggableElement) {\n const drops = [];\n\n // collect all dropzones and their elements which qualify for a drop\n for (const dropzone of interactables.list) {\n if (!dropzone.options.drop.enabled) { continue; }\n\n const accept = dropzone.options.drop.accept;\n\n // test the draggable draggableElement against the dropzone's accept setting\n if ((utils.is.element(accept) && accept !== draggableElement)\n || (utils.is.string(accept)\n && !utils.dom.matchesSelector(draggableElement, accept))\n || (utils.is.func(accept) && !accept({ dropzone, draggableElement }))) {\n\n continue;\n }\n\n // query for new elements if necessary\n const dropElements = utils.is.string(dropzone.target)\n ? dropzone._context.querySelectorAll(dropzone.target)\n : utils.is.array(dropzone.target) ? dropzone.target : [dropzone.target];\n\n for (const dropzoneElement of dropElements) {\n if (dropzoneElement !== draggableElement) {\n drops.push({\n dropzone,\n element: dropzoneElement,\n });\n }\n }\n }\n\n return drops;\n}\n\nfunction fireActivationEvents (activeDrops, event) {\n // loop through all active dropzones and trigger event\n for (const { dropzone, element } of activeDrops) {\n event.dropzone = dropzone;\n\n // set current element as event target\n event.target = element;\n dropzone.fire(event);\n event.propagationStopped = event.immediatePropagationStopped = false;\n }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops (scope, dragElement) {\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 ({ dropStatus, target: draggable, element: dragElement }, dragEvent, pointerEvent) {\n const validDrops = [];\n\n // collect all dropzones and their elements which qualify for a drop\n for (const { dropzone, element: dropzoneElement, rect } of dropStatus.activeDrops) {\n validDrops.push(dropzone.dropCheck(dragEvent, pointerEvent, draggable, dragElement, dropzoneElement, rect)\n ? dropzoneElement\n : null);\n }\n\n // get the most appropriate dropzone based on DOM depth and order\n const dropIndex = utils.dom.indexOfDeepestElement(validDrops);\n\n return dropStatus.activeDrops[dropIndex] || null;\n}\n\nfunction getDropEvents (interaction, pointerEvent, dragEvent) {\n const { dropStatus } = 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(dropStatus, dragEvent, 'dropactivate');\n\n dropEvents.activate.target = null;\n dropEvents.activate.dropzone = null;\n }\n if (dragEvent.type === 'dragend') {\n dropEvents.deactivate = new DropEvent(dropStatus, dragEvent, 'dropdeactivate');\n\n dropEvents.deactivate.target = null;\n dropEvents.deactivate.dropzone = null;\n }\n\n if (dropStatus.rejected) {\n return dropEvents;\n }\n\n if (dropStatus.cur.element !== dropStatus.prev.element) {\n // if there was a previous dropzone, create a dragleave event\n if (dropStatus.prev.dropzone) {\n dropEvents.leave = new DropEvent(dropStatus, dragEvent, 'dragleave');\n\n dragEvent.dragLeave = dropEvents.leave.target = dropStatus.prev.element;\n dragEvent.prevDropzone = dropEvents.leave.dropzone = dropStatus.prev.dropzone;\n }\n // if dropzone is not null, create a dragenter event\n if (dropStatus.cur.dropzone) {\n dropEvents.enter = new DropEvent(dropStatus, dragEvent, 'dragenter');\n\n dragEvent.dragEnter = dropStatus.cur.element;\n dragEvent.dropzone = dropStatus.cur.dropzone;\n }\n }\n\n if (dragEvent.type === 'dragend' && dropStatus.cur.dropzone) {\n dropEvents.drop = new DropEvent(dropStatus, dragEvent, 'drop');\n\n dragEvent.dropzone = dropStatus.cur.dropzone;\n dragEvent.relatedTarget = dropStatus.cur.element;\n }\n if (dragEvent.type === 'dragmove' && dropStatus.cur.dropzone) {\n dropEvents.move = new DropEvent(dropStatus, dragEvent, 'dropmove');\n\n dropEvents.move.dragmove = dragEvent;\n dragEvent.dropzone = dropStatus.cur.dropzone;\n }\n\n return dropEvents;\n}\n\nfunction fireDropEvents (interaction, events) {\n const { dropStatus } = interaction;\n const {\n activeDrops,\n cur,\n prev,\n } = dropStatus;\n\n if (events.leave) { prev.dropzone.fire(events.leave); }\n if (events.move ) { cur.dropzone.fire(events.move ); }\n if (events.enter) { cur.dropzone.fire(events.enter); }\n if (events.drop ) { cur.dropzone.fire(events.drop ); }\n\n if (events.deactivate) {\n fireActivationEvents(activeDrops, events.deactivate);\n }\n\n dropStatus.prev.dropzone = cur.dropzone;\n dropStatus.prev.element = cur.element;\n}\n\nfunction onEventCreated ({ interaction, iEvent, event }, scope) {\n if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') { return; }\n\n const { dropStatus } = interaction;\n\n if (scope.dynamicDrop) {\n dropStatus.activeDrops = getActiveDrops(scope, interaction.target, interaction.element);\n }\n\n const dragEvent = iEvent;\n const dropResult = getDrop(interaction, dragEvent, event);\n\n // update rejected status\n dropStatus.rejected = dropStatus.rejected &&\n !!dropResult &&\n dropResult.dropzone === dropStatus.cur.dropzone &&\n dropResult.element === dropStatus.cur.element;\n\n dropStatus.cur.dropzone = dropResult && dropResult.dropzone;\n dropStatus.cur.element = dropResult && dropResult.element;\n\n dropStatus.events = getDropEvents(interaction, event, dragEvent);\n}\n\n/**\n * ```js\n * interact(target)\n * .dropChecker(function(dragEvent, // related dragmove or dragend event\n * event, // TouchEvent/PointerEvent/MouseEvent\n * dropped, // bool result of the default checker\n * dropzone, // dropzone Interactable\n * dropElement, // dropzone elemnt\n * draggable, // draggable Interactable\n * draggableElement) {// draggable element\n *\n * return dropped && event.target.hasAttribute('allow-drop');\n * }\n * ```\n *\n * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param {boolean | object | null} [options] The new options to be set.\n * @return {boolean | Interactable} The current setting or this Interactable\n */\nfunction dropzoneMethod (interactable, options) {\n if (utils.is.object(options)) {\n interactable.options.drop.enabled = options.enabled === false? false: true;\n\n if (options.listeners) {\n const normalized = utils.normalizeListeners(options.listeners);\n // rename 'drop' to '' as it will be prefixed with 'drop'\n const corrected = Object.keys(normalized).reduce((acc, type) => {\n const correctedType = /^(enter|leave)/.test(type)\n ? `drag${type}`\n : /^(activate|deactivate|move)/.test(type)\n ? `drop${type}`\n : type;\n\n acc[correctedType] = normalized[type];\n\n return acc;\n }, {});\n\n interactable.off(interactable.options.drop.listeners);\n interactable.on(corrected);\n interactable.options.drop.listeners = corrected;\n }\n\n if (utils.is.func(options.ondrop) ) { interactable.on('drop' , options.ondrop ); }\n if (utils.is.func(options.ondropactivate) ) { interactable.on('dropactivate' , options.ondropactivate ); }\n if (utils.is.func(options.ondropdeactivate)) { interactable.on('dropdeactivate', options.ondropdeactivate); }\n if (utils.is.func(options.ondragenter) ) { interactable.on('dragenter' , options.ondragenter ); }\n if (utils.is.func(options.ondragleave) ) { interactable.on('dragleave' , options.ondragleave ); }\n if (utils.is.func(options.ondropmove) ) { interactable.on('dropmove' , options.ondropmove ); }\n\n if (/^(pointer|center)$/.test(options.overlap)) {\n interactable.options.drop.overlap = options.overlap;\n }\n else if (utils.is.number(options.overlap)) {\n interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0);\n }\n if ('accept' in options) {\n interactable.options.drop.accept = options.accept;\n }\n if ('checker' in options) {\n interactable.options.drop.checker = options.checker;\n }\n\n\n return interactable;\n }\n\n if (utils.is.bool(options)) {\n interactable.options.drop.enabled = options;\n\n return interactable;\n }\n\n return interactable.options.drop;\n}\n\nfunction dropCheckMethod (interactable, dragEvent, event, draggable, draggableElement, dropElement, rect) {\n let dropped = false;\n\n // if the dropzone has no rect (eg. display: none)\n // call the custom dropChecker or just return false\n if (!(rect = rect || interactable.getRect(dropElement))) {\n return (interactable.options.drop.checker\n ? interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n : false);\n }\n\n const dropOverlap = interactable.options.drop.overlap;\n\n if (dropOverlap === 'pointer') {\n const origin = utils.getOriginXY(draggable, draggableElement, 'drag');\n const page = utils.pointer.getPageXY(dragEvent);\n\n page.x += origin.x;\n page.y += origin.y;\n\n const horizontal = (page.x > rect.left) && (page.x < rect.right);\n const vertical = (page.y > rect.top ) && (page.y < rect.bottom);\n\n dropped = horizontal && vertical;\n }\n\n const dragRect = draggable.getRect(draggableElement);\n\n if (dragRect && dropOverlap === 'center') {\n const cx = dragRect.left + dragRect.width / 2;\n const cy = dragRect.top + dragRect.height / 2;\n\n dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom;\n }\n\n if (dragRect && utils.is.number(dropOverlap)) {\n const overlapArea = (Math.max(0, Math.min(rect.right , dragRect.right ) - Math.max(rect.left, dragRect.left))\n * Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top , dragRect.top )));\n\n const overlapRatio = overlapArea / (dragRect.width * dragRect.height);\n\n dropped = overlapRatio >= dropOverlap;\n }\n\n if (interactable.options.drop.checker) {\n dropped = interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement);\n }\n\n return dropped;\n}\n\n\nconst drop = {\n install,\n getActiveDrops,\n getDrop,\n getDropEvents,\n fireDropEvents,\n defaults: {\n enabled: false,\n accept : null,\n overlap: 'pointer',\n },\n};\n\nexport default drop;\n","import * as utils from '@interactjs/utils';\nimport InteractEvent from '@interactjs/core/InteractEvent';\n\nfunction install (scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope;\n\n const gesture = {\n defaults: {\n },\n\n checker: function (pointer, event, interactable, element, interaction) {\n if (interaction.pointers.length >= 2) {\n return { name: 'gesture' };\n }\n\n return null;\n },\n\n getCursor: function () {\n return '';\n },\n };\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 (options) {\n if (utils.is.object(options)) {\n this.options.gesture.enabled = options.enabled === false? false: true;\n this.setPerAction('gesture', options);\n this.setOnEvents('gesture', options);\n\n return this;\n }\n\n if (utils.is.bool(options)) {\n this.options.gesture.enabled = options;\n\n return this;\n }\n\n return this.options.gesture;\n };\n\n interactions.signals.on('action-start', updateGestureProps);\n interactions.signals.on('action-move', updateGestureProps);\n interactions.signals.on('action-end', updateGestureProps);\n\n interactions.signals.on('action-start', start);\n interactions.signals.on('action-move', move);\n\n interactions.signals.on('new', function (interaction) {\n interaction.gesture = {\n start: { x: 0, y: 0 },\n\n startDistance: 0, // distance between two touches of touchStart\n prevDistance : 0,\n distance : 0,\n\n scale: 1, // gesture.distance / gesture.startDistance\n\n startAngle: 0, // angle of line joining two touches\n prevAngle : 0, // angle of the previous gesture event\n };\n });\n\n actions.gesture = gesture;\n actions.names.push('gesture');\n utils.arr.merge(actions.eventTypes, [\n 'gesturestart',\n 'gesturemove',\n 'gestureend',\n ]);\n actions.methodDict.gesture = 'gesturable';\n\n defaults.gesture = gesture.defaults;\n}\n\nfunction start ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'gesture') { return; }\n\n iEvent.ds = 0;\n\n interaction.gesture.startDistance = interaction.gesture.prevDistance = iEvent.distance;\n interaction.gesture.startAngle = interaction.gesture.prevAngle = iEvent.angle;\n interaction.gesture.scale = 1;\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'gesture') { return; }\n\n iEvent.ds = iEvent.scale - interaction.gesture.scale;\n\n interaction.target.fire(iEvent);\n\n interaction.gesture.prevAngle = iEvent.angle;\n interaction.gesture.prevDistance = iEvent.distance;\n\n if (iEvent.scale !== Infinity\n && iEvent.scale !== null\n && iEvent.scale !== undefined\n && !isNaN(iEvent.scale)) {\n\n interaction.gesture.scale = iEvent.scale;\n }\n}\n\nfunction updateGestureProps ({ interaction, iEvent, event, phase }) {\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.target.options.deltaSource;\n\n iEvent.touches = [pointers[0].pointer, pointers[1].pointer];\n\n if (starting) {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource);\n iEvent.box = utils.pointer.touchBBox(pointers);\n iEvent.scale = 1;\n iEvent.ds = 0;\n iEvent.angle = utils.pointer.touchAngle(pointers, undefined, deltaSource);\n iEvent.da = 0;\n }\n else if (ending || event instanceof InteractEvent) {\n iEvent.distance = interaction.prevEvent.distance;\n iEvent.box = interaction.prevEvent.box;\n iEvent.scale = interaction.prevEvent.scale;\n iEvent.ds = iEvent.scale - 1;\n iEvent.angle = interaction.prevEvent.angle;\n iEvent.da = iEvent.angle - interaction.gesture.startAngle;\n }\n else {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource);\n iEvent.box = utils.pointer.touchBBox(pointers);\n iEvent.scale = iEvent.distance / interaction.gesture.startDistance;\n iEvent.angle = utils.pointer.touchAngle(pointers, interaction.gesture.prevAngle, deltaSource);\n\n iEvent.ds = iEvent.scale - interaction.gesture.prevScale;\n iEvent.da = iEvent.angle - interaction.gesture.prevAngle;\n }\n}\n\nexport default { install };\n","import * as utils from '@interactjs/utils';\n\nfunction install (scope) {\n const {\n actions,\n browser,\n /** @lends Interactable */\n Interactable,\n interactions,\n defaults,\n } = scope;\n\n // Less Precision with touch input\n const defaultMargin = browser.supportsTouch || browser.supportsPointerEvent? 20: 10;\n\n const resize = {\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 },\n\n checker: function (pointer, event, interactable, element, interaction, rect) {\n if (!rect) { return null; }\n\n const page = utils.extend({}, interaction.coords.cur.page);\n const options = interactable.options;\n\n if (options.resize.enabled) {\n const resizeOptions = options.resize;\n const resizeEdges = { left: false, right: false, top: false, bottom: false };\n\n // if using resize.edges\n if (utils.is.object(resizeOptions.edges)) {\n for (const edge in resizeEdges) {\n resizeEdges[edge] = checkResizeEdge(edge,\n resizeOptions.edges[edge],\n page,\n interaction._eventTarget,\n element,\n rect,\n resizeOptions.margin || defaultMargin);\n }\n\n resizeEdges.left = resizeEdges.left && !resizeEdges.right;\n resizeEdges.top = resizeEdges.top && !resizeEdges.bottom;\n\n if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n return {\n name: 'resize',\n edges: resizeEdges,\n };\n }\n }\n else {\n const right = options.resize.axis !== 'y' && page.x > (rect.right - defaultMargin);\n const bottom = options.resize.axis !== 'x' && page.y > (rect.bottom - defaultMargin);\n\n if (right || bottom) {\n return {\n name: 'resize',\n axes: (right? 'x' : '') + (bottom? 'y' : ''),\n };\n }\n }\n }\n\n return null;\n },\n\n cursors: (browser.isIe9 ? {\n x : 'e-resize',\n y : 's-resize',\n xy: 'se-resize',\n\n top : 'n-resize',\n left : 'w-resize',\n bottom : 's-resize',\n right : 'e-resize',\n topleft : 'se-resize',\n bottomright: 'se-resize',\n topright : 'ne-resize',\n bottomleft : 'ne-resize',\n } : {\n x : 'ew-resize',\n y : 'ns-resize',\n xy: 'nwse-resize',\n\n top : 'ns-resize',\n left : 'ew-resize',\n bottom : 'ns-resize',\n right : 'ew-resize',\n topleft : 'nwse-resize',\n bottomright: 'nwse-resize',\n topright : 'nesw-resize',\n bottomleft : 'nesw-resize',\n }),\n\n getCursor: function (action) {\n if (action.axis) {\n return resize.cursors[action.name + action.axis];\n }\n else if (action.edges) {\n let cursorKey = '';\n const edgeNames = ['top', 'bottom', 'left', 'right'];\n\n for (let i = 0; i < 4; i++) {\n if (action.edges[edgeNames[i]]) {\n cursorKey += edgeNames[i];\n }\n }\n\n return resize.cursors[cursorKey];\n }\n },\n };\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 (options) {\n if (utils.is.object(options)) {\n this.options.resize.enabled = options.enabled === false? false: true;\n this.setPerAction('resize', options);\n this.setOnEvents('resize', options);\n\n if (/^x$|^y$|^xy$/.test(options.axis)) {\n this.options.resize.axis = options.axis;\n }\n else if (options.axis === null) {\n this.options.resize.axis = defaults.resize.axis;\n }\n\n if (utils.is.bool(options.preserveAspectRatio)) {\n this.options.resize.preserveAspectRatio = options.preserveAspectRatio;\n }\n else if (utils.is.bool(options.square)) {\n this.options.resize.square = options.square;\n }\n\n return this;\n }\n if (utils.is.bool(options)) {\n this.options.resize.enabled = options;\n\n return this;\n }\n return this.options.resize;\n };\n\n interactions.signals.on('new', function (interaction) {\n interaction.resizeAxes = 'xy';\n });\n\n interactions.signals.on('action-start', start);\n interactions.signals.on('action-move', move);\n\n interactions.signals.on('action-start', updateEventAxes);\n interactions.signals.on('action-move', updateEventAxes);\n\n actions.resize = resize;\n actions.names.push('resize');\n utils.arr.merge(actions.eventTypes, [\n 'resizestart',\n 'resizemove',\n 'resizeinertiastart',\n 'resizeresume',\n 'resizeend',\n ]);\n actions.methodDict.resize = 'resizable';\n\n defaults.resize = resize.defaults;\n}\n\nfunction checkResizeEdge (name, value, page, element, interactableElement, rect, margin) {\n // false, '', undefined, null\n if (!value) { return false; }\n\n // true value, use pointer coords and element rect\n if (value === true) {\n // if dimensions are negative, \"switch\" edges\n const width = utils.is.number(rect.width )? rect.width : rect.right - rect.left;\n const height = utils.is.number(rect.height)? rect.height : rect.bottom - rect.top ;\n\n if (width < 0) {\n if (name === 'left' ) { name = 'right'; }\n else if (name === 'right') { name = 'left' ; }\n }\n if (height < 0) {\n if (name === 'top' ) { name = 'bottom'; }\n else if (name === 'bottom') { name = 'top' ; }\n }\n\n if (name === 'left' ) { return page.x < ((width >= 0? rect.left: rect.right ) + margin); }\n if (name === 'top' ) { return page.y < ((height >= 0? rect.top : rect.bottom) + margin); }\n\n if (name === 'right' ) { return page.x > ((width >= 0? rect.right : rect.left) - margin); }\n if (name === 'bottom') { return page.y > ((height >= 0? rect.bottom: rect.top ) - margin); }\n }\n\n // the remaining checks require an element\n if (!utils.is.element(element)) { return false; }\n\n return utils.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 : utils.dom.matchesUpTo(element, value, interactableElement);\n}\n\nfunction start ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n return;\n }\n\n const startRect = interaction.target.getRect(interaction.element);\n const resizeOptions = interaction.target.options.resize;\n\n /*\n * When using the `resizable.square` or `resizable.preserveAspectRatio` options, resizing from one edge\n * will affect another. E.g. with `resizable.square`, resizing to make the right edge larger will make\n * the bottom edge larger by the same amount. We call these 'linked' edges. Any linked edges will depend\n * on the active edges and the edge being interacted with.\n */\n if (resizeOptions.square || resizeOptions.preserveAspectRatio) {\n const linkedEdges = utils.extend({}, interaction.prepared.edges);\n\n linkedEdges.top = linkedEdges.top || (linkedEdges.left && !linkedEdges.bottom);\n linkedEdges.left = linkedEdges.left || (linkedEdges.top && !linkedEdges.right );\n linkedEdges.bottom = linkedEdges.bottom || (linkedEdges.right && !linkedEdges.top );\n linkedEdges.right = linkedEdges.right || (linkedEdges.bottom && !linkedEdges.left );\n\n interaction.prepared._linkedEdges = linkedEdges;\n }\n else {\n interaction.prepared._linkedEdges = null;\n }\n\n // if using `resizable.preserveAspectRatio` option, record aspect ratio at the start of the resize\n if (resizeOptions.preserveAspectRatio) {\n interaction.resizeStartAspectRatio = startRect.width / startRect.height;\n }\n\n interaction.resizeRects = {\n start : startRect,\n current : utils.extend({}, startRect),\n inverted : utils.extend({}, startRect),\n previous : utils.extend({}, startRect),\n delta : {\n left: 0, right : 0, width : 0,\n top : 0, bottom: 0, height: 0,\n },\n };\n\n iEvent.rect = interaction.resizeRects.inverted;\n iEvent.deltaRect = interaction.resizeRects.delta;\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return; }\n\n const resizeOptions = interaction.target.options.resize;\n const invert = resizeOptions.invert;\n const invertible = invert === 'reposition' || invert === 'negate';\n\n let edges = interaction.prepared.edges;\n\n // eslint-disable-next-line no-shadow\n const start = interaction.resizeRects.start;\n const current = interaction.resizeRects.current;\n const inverted = interaction.resizeRects.inverted;\n const deltaRect = interaction.resizeRects.delta;\n const previous = utils.extend(interaction.resizeRects.previous, inverted);\n const originalEdges = edges;\n\n const eventDelta = utils.extend({}, iEvent.delta);\n\n if (resizeOptions.preserveAspectRatio || resizeOptions.square) {\n // `resize.preserveAspectRatio` takes precedence over `resize.square`\n const startAspectRatio = resizeOptions.preserveAspectRatio\n ? interaction.resizeStartAspectRatio\n : 1;\n\n edges = interaction.prepared._linkedEdges;\n\n if ((originalEdges.left && originalEdges.bottom)\n || (originalEdges.right && originalEdges.top)) {\n eventDelta.y = -eventDelta.x / startAspectRatio;\n }\n else if (originalEdges.left || originalEdges.right ) { eventDelta.y = eventDelta.x / startAspectRatio; }\n else if (originalEdges.top || originalEdges.bottom) { eventDelta.x = eventDelta.y * startAspectRatio; }\n }\n\n // update the 'current' rect without modifications\n if (edges.top ) { current.top += eventDelta.y; }\n if (edges.bottom) { current.bottom += eventDelta.y; }\n if (edges.left ) { current.left += eventDelta.x; }\n if (edges.right ) { current.right += eventDelta.x; }\n\n if (invertible) {\n // if invertible, copy the current rect\n utils.extend(inverted, current);\n\n if (invert === 'reposition') {\n // swap edge values if necessary to keep width/height positive\n let swap;\n\n if (inverted.top > inverted.bottom) {\n swap = inverted.top;\n\n inverted.top = inverted.bottom;\n inverted.bottom = swap;\n }\n if (inverted.left > inverted.right) {\n swap = inverted.left;\n\n inverted.left = inverted.right;\n inverted.right = swap;\n }\n }\n }\n else {\n // if not invertible, restrict to minimum of 0x0 rect\n inverted.top = Math.min(current.top, start.bottom);\n inverted.bottom = Math.max(current.bottom, start.top);\n inverted.left = Math.min(current.left, start.right);\n inverted.right = Math.max(current.right, start.left);\n }\n\n inverted.width = inverted.right - inverted.left;\n inverted.height = inverted.bottom - inverted.top ;\n\n for (const edge in inverted) {\n deltaRect[edge] = inverted[edge] - previous[edge];\n }\n\n iEvent.edges = interaction.prepared.edges;\n iEvent.rect = inverted;\n iEvent.deltaRect = deltaRect;\n}\n\nfunction updateEventAxes ({ interaction, iEvent, action }) {\n if (action !== 'resize' || !interaction.resizeAxes) { return; }\n\n const options = interaction.target.options;\n\n if (options.resize.square) {\n if (interaction.resizeAxes === 'y') {\n iEvent.delta.x = iEvent.delta.y;\n }\n else {\n iEvent.delta.y = iEvent.delta.x;\n }\n iEvent.axes = 'xy';\n }\n else {\n iEvent.axes = interaction.resizeAxes;\n\n if (interaction.resizeAxes === 'x') {\n iEvent.delta.y = 0;\n }\n else if (interaction.resizeAxes === 'y') {\n iEvent.delta.x = 0;\n }\n }\n}\n\nexport default { install };\n","import gesture from './gesture';\nimport resize from './resize';\nimport drag from './drag';\nimport drop from './drop';\n\nfunction install (scope) {\n gesture.install(scope);\n resize.install(scope);\n drag.install(scope);\n drop.install(scope);\n}\n\nexport {\n gesture,\n resize,\n drag,\n drop,\n install,\n};\n","import raf from '@interactjs/utils/raf';\nimport { getWindow } from '@interactjs/utils/window';\nimport * as is from '@interactjs/utils/is';\nimport * as domUtils from '@interactjs/utils/domUtils';\nimport { getStringOptionResult } from '@interactjs/utils/rect';\n\nfunction install (scope) {\n const {\n interactions,\n defaults,\n actions,\n } = scope;\n\n const autoScroll = scope.autoScroll = {\n defaults: {\n enabled : false,\n container: null, // the item that is scrolled (Window or HTMLElement)\n margin : 60,\n speed : 300, // the scroll speed in pixels per second\n },\n\n interaction: null,\n i: null, // the handle returned by window.setInterval\n x: 0, y: 0, // Direction each pulse is to scroll in\n\n isScrolling: false,\n prevTime: 0,\n\n start: function (interaction) {\n autoScroll.isScrolling = true;\n raf.cancel(autoScroll.i);\n\n interaction.autoScroll = autoScroll;\n autoScroll.interaction = interaction;\n autoScroll.prevTime = new Date().getTime();\n autoScroll.i = raf.request(autoScroll.scroll);\n },\n\n stop: function () {\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: function () {\n const { interaction } = autoScroll;\n const { target: interactable, element } = interaction;\n const options = interactable.options[autoScroll.interaction.prepared.name].autoScroll;\n const container = getContainer(options.container, interactable, element);\n const now = new Date().getTime();\n // change in time in seconds\n const dt = (now - autoScroll.prevTime) / 1000;\n // displacement\n const s = options.speed * dt;\n\n if (s >= 1) {\n const scrollBy = {\n x: autoScroll.x * s,\n y: autoScroll.y * s,\n };\n\n if (scrollBy.x || scrollBy.y) {\n const prevScroll = getScroll(container);\n\n if (is.window(container)) {\n container.scrollBy(scrollBy.x, scrollBy.y);\n }\n else if (container) {\n container.scrollLeft += scrollBy.x;\n container.scrollTop += scrollBy.y;\n }\n\n const curScroll = getScroll(container);\n const delta = {\n x: curScroll.x - prevScroll.x,\n y: curScroll.y - prevScroll.y,\n };\n\n if (delta.x || delta.y) {\n interactable.fire({\n type: 'autoscroll',\n target: element,\n interactable,\n delta,\n interaction,\n container,\n });\n }\n }\n\n autoScroll.prevTime = now;\n }\n\n if (autoScroll.isScrolling) {\n raf.cancel(autoScroll.i);\n autoScroll.i = raf.request(autoScroll.scroll);\n }\n },\n check: function (interactable, actionName) {\n const options = interactable.options;\n\n return options[actionName].autoScroll && options[actionName].autoScroll.enabled;\n },\n onInteractionMove: function ({ interaction, pointer }) {\n if (!(interaction.interacting()\n && autoScroll.check(interaction.target, interaction.prepared.name))) {\n return;\n }\n\n if (interaction.simulation) {\n autoScroll.x = autoScroll.y = 0;\n return;\n }\n\n let top;\n let right;\n let bottom;\n let left;\n\n const { target: interactable, element } = interaction;\n const options = interactable.options[interaction.prepared.name].autoScroll;\n const container = getContainer(options.container, interactable, element);\n\n if (is.window(container)) {\n left = pointer.clientX < autoScroll.margin;\n top = pointer.clientY < autoScroll.margin;\n right = pointer.clientX > container.innerWidth - autoScroll.margin;\n bottom = pointer.clientY > container.innerHeight - autoScroll.margin;\n }\n else {\n const rect = domUtils.getElementClientRect(container);\n\n left = pointer.clientX < rect.left + autoScroll.margin;\n top = pointer.clientY < rect.top + autoScroll.margin;\n right = pointer.clientX > rect.right - autoScroll.margin;\n bottom = pointer.clientY > rect.bottom - autoScroll.margin;\n }\n\n autoScroll.x = (right ? 1: left? -1: 0);\n autoScroll.y = (bottom? 1: top? -1: 0);\n\n if (!autoScroll.isScrolling) {\n // set the autoScroll properties to those of the target\n autoScroll.margin = options.margin;\n autoScroll.speed = options.speed;\n\n autoScroll.start(interaction);\n }\n },\n };\n\n interactions.signals.on('new', function (interaction) {\n interaction.autoScroll = null;\n });\n\n interactions.signals.on('stop', autoScroll.stop);\n\n interactions.signals.on('action-move', autoScroll.onInteractionMove);\n\n actions.eventTypes.push('autoscroll');\n defaults.perAction.autoScroll = autoScroll.defaults;\n}\n\nexport function getContainer (value, interactable, element) {\n return (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element);\n}\n\nexport function getScroll (container) {\n if (is.window(container)) { container = window.document.body; }\n\n return { x: container.scrollLeft, y: container.scrollTop };\n}\n\nexport function getScrollSize (container) {\n if (is.window(container)) { container = window.document.body; }\n\n return { x: container.scrollWidth, y: container.scrollHeight };\n}\n\nexport function getScrollSizeDelta ({ interaction, element }, func) {\n const scrollOptions = interaction && interaction.target.options[interaction.prepared.name].autoScroll;\n\n if (!scrollOptions || !scrollOptions.enabled) {\n func();\n return { x: 0, y: 0 };\n }\n\n const scrollContainer = getContainer(\n scrollOptions.container,\n interaction.target,\n element\n );\n\n const prevSize = getScroll(scrollContainer);\n func();\n const curSize = getScroll(scrollContainer);\n\n return {\n x: curSize.x - prevSize.x,\n y: curSize.y - prevSize.y,\n };\n}\n\nexport default { install };\n","import * as is from '@interactjs/utils/is';\nimport * as domUtils from '@interactjs/utils/domUtils';\n\nimport { warnOnce } from '@interactjs/utils';\n\nfunction install (scope) {\n const {\n /** @lends Interactable */\n Interactable,\n actions,\n } = scope;\n\n Interactable.prototype.getAction = function (pointer, event, interaction, element) {\n const action = this.defaultActionChecker(pointer, event, interaction, element);\n\n if (this.options.actionChecker) {\n return this.options.actionChecker(pointer, event, action, this, element, interaction);\n }\n\n return action;\n };\n\n /**\n * ```js\n * interact(element, { ignoreFrom: document.getElementById('no-action') });\n * // or\n * interact(element).ignoreFrom('input, textarea, a');\n * ```\n * @deprecated\n * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n * of it's parents match the given CSS selector or Element, no\n * drag/resize/gesture is started.\n *\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to not ignore any elements\n * @return {string | Element | object} The current ignoreFrom value or this\n * Interactable\n */\n Interactable.prototype.ignoreFrom = warnOnce(function (newValue) {\n return this._backCompatOption('ignoreFrom', newValue);\n }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).');\n\n /**\n * ```js\n *\n * @deprecated\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to allow from any element\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */\n Interactable.prototype.allowFrom = warnOnce(function (newValue) {\n return this._backCompatOption('allowFrom', newValue);\n }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).');\n\n Interactable.prototype.testIgnore = function (ignoreFrom, interactableElement, element) {\n if (!ignoreFrom || !is.element(element)) { return false; }\n\n if (is.string(ignoreFrom)) {\n return domUtils.matchesUpTo(element, ignoreFrom, interactableElement);\n }\n else if (is.element(ignoreFrom)) {\n return domUtils.nodeContains(ignoreFrom, element);\n }\n\n return false;\n };\n\n Interactable.prototype.testAllow = function (allowFrom, interactableElement, element) {\n if (!allowFrom) { return true; }\n\n if (!is.element(element)) { return false; }\n\n if (is.string(allowFrom)) {\n return domUtils.matchesUpTo(element, allowFrom, interactableElement);\n }\n else if (is.element(allowFrom)) {\n return domUtils.nodeContains(allowFrom, element);\n }\n\n return false;\n };\n\n Interactable.prototype.testIgnoreAllow = function (options, interactableElement, eventTarget) {\n return (!this.testIgnore(options.ignoreFrom, interactableElement, eventTarget)\n && this.testAllow(options.allowFrom, interactableElement, eventTarget));\n };\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 * Gets 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 = function (checker) {\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\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 = function (newValue) {\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\n Interactable.prototype.defaultActionChecker = function (pointer, event, interaction, element) {\n const rect = this.getRect(element);\n const buttons = event.buttons || ({\n 0: 1,\n 1: 4,\n 3: 8,\n 4: 16,\n })[event.button];\n let action = null;\n\n for (const actionName of actions.names) {\n // check mouseButton setting if the pointer is down\n if (interaction.pointerIsDown\n && /mouse|pointer/.test(interaction.pointerType)\n && (buttons & this.options[actionName].mouseButtons) === 0) {\n continue;\n }\n\n action = actions[actionName].checker(pointer, event, this, element, interaction, rect);\n\n if (action) {\n return action;\n }\n }\n };\n}\n\nexport default { install };\n","import * as utils from '@interactjs/utils';\nimport InteractableMethods from './InteractableMethods';\n\nfunction install (scope) {\n const {\n interact,\n interactions,\n defaults,\n Signals,\n } = scope;\n\n interact.use(InteractableMethods);\n\n // set cursor style on mousedown\n interactions.signals.on('down', function ({ interaction, pointer, event, eventTarget }) {\n if (interaction.interacting()) { return; }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope);\n prepare(interaction, actionInfo, scope);\n });\n\n // set cursor style on mousemove\n interactions.signals.on('move', function ({ interaction, pointer, event, eventTarget }) {\n if (interaction.pointerType !== 'mouse'\n || interaction.pointerIsDown\n || interaction.interacting()) { return; }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope);\n prepare(interaction, actionInfo, scope);\n });\n\n interactions.signals.on('move', function (arg) {\n const { interaction, event } = arg;\n\n if (!interaction.pointerIsDown\n || interaction.interacting()\n || !interaction.pointerWasMoved\n || !interaction.prepared.name) {\n return;\n }\n\n scope.autoStart.signals.fire('before-start', arg);\n\n const target = interaction.target;\n\n if (interaction.prepared.name && target) {\n // check manualStart and interaction limit\n if (target.options[interaction.prepared.name].manualStart\n || !withinInteractionLimit(target, interaction.element, interaction.prepared, scope)) {\n interaction.stop(event);\n }\n else {\n interaction.start(interaction.prepared, target, interaction.element);\n }\n }\n });\n\n interactions.signals.on('stop', function ({ interaction }) {\n const target = interaction.target;\n\n if (target && target.options.styleCursor) {\n setCursor(interaction.element, '', scope);\n }\n });\n\n interact.maxInteractions = maxInteractions;\n\n defaults.base.actionChecker = null;\n defaults.base.styleCursor = true;\n\n utils.extend(defaults.perAction, {\n manualStart: false,\n max: Infinity,\n maxPerElement: 1,\n allowFrom: null,\n ignoreFrom: null,\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons: 1,\n });\n\n /**\n * Returns or sets the maximum number of concurrent interactions allowed. By\n * default only 1 interaction is allowed at a time (for backwards\n * compatibility). To allow multiple interactions on the same Interactables and\n * elements, you need to enable it in the draggable, resizable and gesturable\n * `'max'` and `'maxPerElement'` options.\n *\n * @alias module:interact.maxInteractions\n *\n * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n */\n interact.maxInteractions = newValue => maxInteractions(newValue, scope);\n\n scope.autoStart = {\n // Allow this many interactions to happen simultaneously\n maxInteractions: Infinity,\n withinInteractionLimit,\n cursorElement: null,\n signals: new Signals(),\n };\n}\n\n// Check if the current target supports the action.\n// If so, return the validated action. Otherwise, return null\nfunction validateAction (action, interactable, element, eventTarget, scope) {\n if (utils.is.object(action)\n && interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget)\n && interactable.options[action.name].enabled\n && withinInteractionLimit(interactable, element, action, scope)) {\n return action;\n }\n\n return null;\n}\n\nfunction validateSelector (interaction, pointer, event, matches, matchElements, eventTarget, scope) {\n for (let i = 0, len = matches.length; i < len; i++) {\n const match = matches[i];\n const matchElement = matchElements[i];\n const action = validateAction(\n match.getAction(pointer, event, interaction, matchElement),\n match,\n matchElement,\n eventTarget,\n scope);\n\n if (action) {\n return {\n action,\n target: match,\n element: matchElement,\n };\n }\n }\n\n return {};\n}\n\nfunction getActionInfo (interaction, pointer, event, eventTarget, scope) {\n let matches = [];\n let matchElements = [];\n\n let element = eventTarget;\n\n function pushMatches (interactable) {\n matches.push(interactable);\n matchElements.push(element);\n }\n\n while (utils.is.element(element)) {\n matches = [];\n matchElements = [];\n\n scope.interactables.forEachMatch(element, pushMatches);\n\n const actionInfo = validateSelector(interaction, pointer, event, matches, matchElements, eventTarget, scope);\n\n if (actionInfo.action\n && !actionInfo.target.options[actionInfo.action.name].manualStart) {\n return actionInfo;\n }\n\n element = utils.dom.parentNode(element);\n }\n\n return {};\n}\n\nfunction prepare (interaction, { action, target, element }, scope) {\n action = action || {};\n\n if (interaction.target && interaction.target.options.styleCursor) {\n setCursor(interaction.element, '', scope);\n }\n\n interaction.target = target;\n interaction.element = element;\n utils.copyAction(interaction.prepared, action);\n\n if (target && target.options.styleCursor) {\n const cursor = action? scope.actions[action.name].getCursor(action) : '';\n setCursor(interaction.element, cursor, scope);\n }\n\n scope.autoStart.signals.fire('prepared', { interaction: interaction });\n}\n\nfunction withinInteractionLimit (interactable, element, action, scope) {\n const options = interactable.options;\n const maxActions = options[action.name].max;\n const maxPerElement = options[action.name].maxPerElement;\n const autoStartMax = scope.autoStart.maxInteractions;\n let activeInteractions = 0;\n let targetCount = 0;\n let targetElementCount = 0;\n\n // no actions if any of these values == 0\n if (!(maxActions && maxPerElement && autoStartMax)) { return; }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name;\n\n if (!interaction.interacting()) { continue; }\n\n activeInteractions++;\n\n if (activeInteractions >= autoStartMax) {\n return false;\n }\n\n if (interaction.target !== interactable) { continue; }\n\n targetCount += (otherAction === action.name)|0;\n\n if (targetCount >= maxActions) {\n return false;\n }\n\n if (interaction.element === element) {\n targetElementCount++;\n\n if (otherAction === action.name && targetElementCount >= maxPerElement) {\n return false;\n }\n }\n }\n\n return autoStartMax > 0;\n}\n\nfunction maxInteractions (newValue, scope) {\n if (utils.is.number(newValue)) {\n scope.autoStart.maxInteractions = newValue;\n\n return this;\n }\n\n return scope.autoStart.maxInteractions;\n}\n\nfunction setCursor (element, cursor, scope) {\n if (scope.autoStart.cursorElement) {\n scope.autoStart.cursorElement.style.cursor = '';\n }\n\n element.ownerDocument.documentElement.style.cursor = cursor;\n element.style.cursor = cursor;\n scope.autoStart.cursorElement = cursor ? element : null;\n}\n\nexport default {\n install,\n maxInteractions,\n withinInteractionLimit,\n validateAction,\n};\n","import * as is from '@interactjs/utils/is';\nimport autoStart from './base';\n\nimport { parentNode } from '@interactjs/utils/domUtils';\n\nfunction install (scope) {\n scope.autoStart.signals.on('before-start', function ({ interaction, eventTarget, dx, dy }) {\n if (interaction.prepared.name !== 'drag') { return; }\n\n // check if a drag is in the correct axis\n const absX = Math.abs(dx);\n const absY = Math.abs(dy);\n const targetOptions = interaction.target.options.drag;\n const startAxis = targetOptions.startAxis;\n const currentAxis = (absX > absY ? 'x' : absX < absY ? 'y' : 'xy');\n\n interaction.prepared.axis = targetOptions.lockAxis === 'start'\n ? currentAxis[0] // always lock to one axis even if currentAxis === 'xy'\n : targetOptions.lockAxis;\n\n // if the movement isn't in the startAxis of the interactable\n if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n // cancel the prepared action\n interaction.prepared.name = null;\n\n // then try to get a drag from another ineractable\n let element = eventTarget;\n\n const getDraggable = function (interactable) {\n if (interactable === interaction.target) { return; }\n\n const options = interaction.target.options.drag;\n\n if (!options.manualStart\n && interactable.testIgnoreAllow(options, element, eventTarget)) {\n\n const action = interactable.getAction(\n interaction.downPointer, interaction.downEvent, interaction, element);\n\n if (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.prepared.name = 'drag';\n interaction.target = interactable;\n interaction.element = element;\n break;\n }\n\n element = parentNode(element);\n }\n }\n });\n\n function checkStartAxis (startAxis, interactable) {\n if (!interactable) { return false; }\n\n const thisAxis = interactable.options.drag.startAxis;\n\n return (startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis);\n }\n}\n\nexport default { install };\n","function install (scope) {\n const {\n autoStart,\n interactions,\n defaults,\n } = scope;\n\n defaults.perAction.hold = 0;\n defaults.perAction.delay = 0;\n\n interactions.signals.on('new', function (interaction) {\n interaction.autoStartHoldTimer = null;\n });\n\n autoStart.signals.on('prepared', function ({ interaction }) {\n const hold = getHoldDuration(interaction);\n\n if (hold > 0) {\n interaction.autoStartHoldTimer = setTimeout(() => {\n interaction.start(interaction.prepared, interaction.target, interaction.element);\n }, hold);\n }\n });\n\n interactions.signals.on('move', function ({ interaction, duplicate }) {\n if (interaction.pointerWasMoved && !duplicate) {\n clearTimeout(interaction.autoStartHoldTimer);\n }\n });\n\n // prevent regular down->move autoStart\n autoStart.signals.on('before-start', function ({ interaction }) {\n const hold = getHoldDuration(interaction);\n\n if (hold > 0) {\n interaction.prepared.name = null;\n }\n });\n}\n\nfunction getHoldDuration (interaction) {\n const actionName = interaction.prepared && interaction.prepared.name;\n\n if (!actionName) { return null; }\n\n const options = interaction.target.options;\n\n return options[actionName].hold || options[actionName].delay;\n}\n\nexport default {\n install,\n getHoldDuration,\n};\n","import autoStart from './base';\nimport hold from './hold';\nimport dragAxis from './dragAxis';\n\nfunction install (scope) {\n autoStart.install(scope);\n hold.install(scope);\n dragAxis.install(scope);\n}\n\nexport {\n autoStart,\n hold,\n dragAxis,\n install,\n};\n","import * as is from '@interactjs/utils/is';\nimport events from '@interactjs/utils/events';\n\nimport { nodeContains, matchesSelector } from '@interactjs/utils/domUtils';\nimport { getWindow } from '@interactjs/utils/window';\n\nfunction preventDefault (interactable, newValue) {\n if (/^(always|never|auto)$/.test(newValue)) {\n interactable.options.preventDefault = newValue;\n return interactable;\n }\n\n if (is.bool(newValue)) {\n interactable.options.preventDefault = newValue? 'always' : 'never';\n return interactable;\n }\n\n return interactable.options.preventDefault;\n}\n\nfunction checkAndPreventDefault (interactable, scope, event) {\n const setting = interactable.options.preventDefault;\n\n if (setting === 'never') { return; }\n\n if (setting === 'always') {\n event.preventDefault();\n return;\n }\n\n // setting === 'auto'\n\n // if the browser supports passive event listeners and isn't running on iOS,\n // don't preventDefault of touch{start,move} events. CSS touch-action and\n // user-select should be used instead of calling event.preventDefault().\n if (events.supportsPassive && /^touch(start|move)$/.test(event.type)) {\n const doc = getWindow(event.target).document;\n const docOptions = scope.getDocOptions(doc);\n\n if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) {\n return;\n }\n }\n\n // don't preventDefault of pointerdown events\n if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) {\n return;\n }\n\n // don't preventDefault on editable elements\n if (is.element(event.target)\n && matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')) {\n return;\n }\n\n event.preventDefault();\n}\n\nfunction onInteractionEvent ({ interaction, event }) {\n if (interaction.target) {\n interaction.target.checkAndPreventDefault(event);\n }\n}\n\nexport function install (scope) {\n /** @lends Interactable */\n const Interactable = scope.Interactable;\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 = function (newValue) {\n return preventDefault(this, newValue);\n };\n\n Interactable.prototype.checkAndPreventDefault = function (event) {\n return checkAndPreventDefault(this, scope, event);\n };\n\n for (const eventSignal of ['down', 'move', 'up', 'cancel']) {\n scope.interactions.signals.on(eventSignal, onInteractionEvent);\n }\n\n // prevent native HTML5 drag on interact.js target elements\n scope.interactions.eventMap.dragstart = function preventNativeDrag (event) {\n for (const interaction of scope.interactions.list) {\n\n if (interaction.element\n && (interaction.element === event.target\n || nodeContains(interaction.element, event.target))) {\n\n interaction.target.checkAndPreventDefault(event);\n return;\n }\n }\n };\n}\n\nexport default { install };\n","import extend from '@interactjs/utils/extend';\n\nfunction install (scope) {\n const {\n interactions,\n } = scope;\n\n scope.defaults.perAction.modifiers = [];\n scope.modifiers = {};\n\n interactions.signals.on('new', function (interaction) {\n interaction.modifiers = {\n startOffset: { left: 0, right: 0, top: 0, bottom: 0 },\n offsets : {},\n states : null,\n result : null,\n };\n });\n\n interactions.signals.on('before-action-start' , arg =>\n start(arg, arg.interaction.coords.start.page, scope.modifiers));\n\n interactions.signals.on('action-resume', arg => {\n beforeMove(arg);\n start(arg, arg.interaction.coords.cur.page, scope.modifiers);\n });\n\n interactions.signals.on('before-action-move', beforeMove);\n interactions.signals.on('before-action-end', beforeEnd);\n\n interactions.signals.on('before-action-start', setCoords);\n interactions.signals.on('before-action-move', setCoords);\n\n interactions.signals.on('after-action-start', restoreCoords);\n interactions.signals.on('after-action-move', restoreCoords);\n interactions.signals.on('stop', stop);\n}\n\nfunction startAll (arg) {\n for (const state of arg.states) {\n if (state.methods.start) {\n arg.state = state;\n state.methods.start(arg);\n }\n }\n}\n\nfunction getRectOffset (rect, coords) {\n return rect\n ? {\n left : coords.x - rect.left,\n top : coords.y - rect.top,\n right : rect.right - coords.x,\n bottom: rect.bottom - coords.y,\n }\n : {\n left : 0,\n top : 0,\n right : 0,\n bottom: 0,\n };\n}\n\nfunction start ({ interaction, phase }, pageCoords, registeredModifiers) {\n const { target: interactable, element } = interaction;\n const modifierList = getModifierList(interaction, registeredModifiers);\n const states = prepareStates(modifierList);\n\n const rect = extend({}, interactable.getRect(element));\n\n if (!('width' in rect)) { rect.width = rect.right - rect.left; }\n if (!('height' in rect)) { rect.height = rect.bottom - rect.top ; }\n\n const startOffset = getRectOffset(rect, pageCoords);\n\n interaction.modifiers.startOffset = startOffset;\n interaction.modifiers.startDelta = { x: 0, y: 0 };\n\n const arg = {\n interaction,\n interactable,\n element,\n pageCoords,\n phase,\n rect,\n startOffset,\n states,\n preEnd: false,\n requireEndOnly: false,\n };\n\n interaction.modifiers.states = states;\n interaction.modifiers.result = null;\n startAll(arg);\n\n arg.pageCoords = extend({}, interaction.coords.start.page);\n\n const result = interaction.modifiers.result = setAll(arg);\n\n return result;\n}\n\nfunction setAll (arg) {\n const { interaction, phase, preEnd, requireEndOnly, rect, skipModifiers } = arg;\n\n const states = skipModifiers\n ? arg.states.slice(interaction.modifiers.skip)\n : arg.states;\n\n arg.coords = extend({}, arg.pageCoords);\n arg.rect = extend({}, rect);\n\n const result = {\n delta: { x: 0, y: 0 },\n coords: arg.coords,\n changed: true,\n };\n\n for (const state of states) {\n const { options } = state;\n\n if (!state.methods.set ||\n !shouldDo(options, preEnd, requireEndOnly, phase)) { continue; }\n\n arg.state = state;\n state.methods.set(arg);\n }\n\n result.delta.x = arg.coords.x - arg.pageCoords.x;\n result.delta.y = arg.coords.y - arg.pageCoords.y;\n\n const prevCoords = interaction.modifiers.result\n ? interaction.modifiers.result.coords\n : interaction.coords.prev.page;\n\n result.changed = (\n prevCoords.x !== result.coords.x ||\n prevCoords.y !== result.coords.y);\n\n return result;\n}\n\nfunction prepareStates (modifierList) {\n const states = [];\n\n for (let index = 0; index < modifierList.length; index++) {\n const { options, methods } = modifierList[index];\n\n if (options && options.enabled === false) { continue; }\n\n const state = {\n options,\n methods,\n index,\n };\n\n states.push(state);\n }\n\n return states;\n}\n\nfunction beforeMove ({ interaction, phase, preEnd, skipModifiers }) {\n const { target: interactable, element } = interaction;\n const modifierResult = setAll(\n {\n interaction,\n interactable,\n element,\n preEnd,\n phase,\n pageCoords: interaction.coords.cur.page,\n rect: interactable.getRect(element),\n states: interaction.modifiers.states,\n requireEndOnly: false,\n skipModifiers,\n });\n\n interaction.modifiers.result = modifierResult;\n\n // don't fire an action move if a modifier would keep the event in the same\n // cordinates as before\n if (!modifierResult.changed && interaction.interacting()) {\n return false;\n }\n}\n\nfunction beforeEnd (arg) {\n const { interaction, event, noPreEnd } = arg;\n const states = interaction.modifiers.states;\n\n if (noPreEnd || !states || !states.length) {\n return;\n }\n\n let didPreEnd = false;\n\n for (const state of states) {\n arg.state = state;\n const { options, methods } = state;\n\n const endResult = methods.beforeEnd && methods.beforeEnd(arg);\n\n if (endResult === false) {\n return false;\n }\n\n // if the endOnly option is true for any modifier\n if (!didPreEnd && shouldDo(options, true, true)) {\n // fire a move event at the modified coordinates\n interaction.move({ event, preEnd: true });\n didPreEnd = true;\n }\n }\n}\n\nfunction stop (arg) {\n const { interaction } = arg;\n const states = interaction.modifiers.states;\n\n if (!states || !states.length) {\n return;\n }\n\n const modifierArg = extend({\n states,\n interactable: interaction.target,\n element: interaction.element,\n }, arg);\n\n\n restoreCoords(arg);\n\n for (const state of states) {\n modifierArg.state = state;\n\n if (state.methods.stop) { state.methods.stop(modifierArg); }\n }\n\n arg.interaction.modifiers.states = null;\n}\n\nfunction setCoords (arg) {\n const { interaction, phase } = arg;\n const curCoords = arg.curCoords || interaction.coords.cur;\n const startCoords = arg.startCoords || interaction.coords.start;\n const { result, startDelta } = interaction.modifiers;\n const curDelta = result.delta;\n\n if (phase === 'start') {\n extend(interaction.modifiers.startDelta, result.delta);\n }\n\n for (const [coordsSet, delta] of [[startCoords, startDelta], [curCoords, curDelta]]) {\n coordsSet.page.x += delta.x;\n coordsSet.page.y += delta.y;\n coordsSet.client.x += delta.x;\n coordsSet.client.y += delta.y;\n }\n}\n\nfunction restoreCoords ({ interaction: { coords, modifiers } }) {\n const { startDelta, result: { delta: curDelta } } = modifiers;\n\n for (const [coordsSet, delta] of [[coords.start, startDelta], [coords.cur, curDelta]]) {\n coordsSet.page.x -= delta.x;\n coordsSet.page.y -= delta.y;\n coordsSet.client.x -= delta.x;\n coordsSet.client.y -= delta.y;\n }\n\n}\n\nfunction getModifierList (interaction, registeredModifiers) {\n const actionOptions = interaction.target.options[interaction.prepared.name];\n const actionModifiers = actionOptions.modifiers;\n\n if (actionModifiers && actionModifiers.length) {\n return actionModifiers.map(modifier => {\n if (!modifier.methods && modifier.type) {\n return registeredModifiers[modifier.type](modifier);\n }\n\n return modifier;\n });\n }\n\n return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize']\n .map(type => {\n const options = actionOptions[type];\n\n return options && options.enabled && {\n options,\n methods: options._methods,\n };\n })\n .filter(m => !!m);\n}\n\nfunction shouldDo (options, preEnd, requireEndOnly, phase) {\n return options\n ? options.enabled !== false &&\n (preEnd || !options.endOnly) &&\n (!requireEndOnly || options.endOnly) &&\n (options.setStart || phase !== 'start')\n : !requireEndOnly;\n}\n\nfunction makeModifier (module, 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 => {\n options = options || {};\n\n // add missing defaults to options\n options.enabled = options.enabled !== false;\n\n for (const prop in defaults) {\n if (!(prop in options)) {\n options[prop] = defaults[prop];\n }\n }\n\n return { options, methods };\n };\n\n if (typeof name === 'string') {\n Object.defineProperty(\n modifier,\n 'name',\n { value: name });\n\n // for backwrads compatibility\n modifier._defaults = defaults;\n modifier._methods = methods;\n }\n\n return modifier;\n}\n\nexport default {\n install,\n startAll,\n setAll,\n prepareStates,\n start,\n beforeMove,\n beforeEnd,\n stop,\n shouldDo,\n getModifierList,\n getRectOffset,\n makeModifier,\n};\n","import modifiers from '@interactjs/modifiers/base';\nimport * as utils from '@interactjs/utils';\nimport raf from '@interactjs/utils/raf';\n\nfunction install (scope) {\n const {\n interactions,\n defaults,\n } = scope;\n\n interactions.signals.on('new', function (interaction) {\n interaction.inertia = {\n active : false,\n smoothEnd : false,\n allowResume: false,\n\n startEvent: null,\n upCoords : {},\n\n xe: 0, ye: 0,\n sx: 0, sy: 0,\n\n t0: 0,\n vx0: 0, vys: 0,\n duration: 0,\n\n lambda_v0: 0,\n one_ve_v0: 0,\n i : null,\n };\n });\n\n interactions.signals.on('before-action-end', arg => release(arg, scope));\n interactions.signals.on('down' , arg => resume (arg, scope));\n interactions.signals.on('stop' , arg => stop (arg, scope));\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\nfunction resume ({ interaction, event, pointer, eventTarget }, scope) {\n const state = interaction.inertia;\n\n // Check if the down event hits the current inertia target\n if (state.active) {\n let element = eventTarget;\n\n // climb up the DOM tree from the event target\n while (utils.is.element(element)) {\n\n // if interaction element is the current inertia target element\n if (element === interaction.element) {\n // stop inertia\n raf.cancel(state.i);\n state.active = false;\n interaction.simulation = null;\n\n // update pointers to the down event's coordinates\n interaction.updatePointer(pointer, event, eventTarget, true);\n utils.pointer.setCoords(\n interaction.coords.cur,\n interaction.pointers.map(p => p.pointer)\n );\n\n // fire appropriate signals\n const signalArg = {\n interaction,\n };\n\n scope.interactions.signals.fire('action-resume', signalArg);\n\n // fire a reume event\n const resumeEvent = new scope.InteractEvent(\n interaction, event, interaction.prepared.name, 'resume', interaction.element);\n\n interaction._fireEvent(resumeEvent);\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur);\n break;\n }\n\n element = utils.dom.parentNode(element);\n }\n }\n}\n\nfunction release ({ interaction, event, noPreEnd }, scope) {\n const state = interaction.inertia;\n\n if (!interaction.interacting() ||\n (interaction.simulation && interaction.simulation.active) ||\n noPreEnd) {\n return;\n }\n\n const options = getOptions(interaction);\n\n const now = new Date().getTime();\n const { client: velocityClient } = interaction.coords.velocity;\n const pointerSpeed = utils.hypot(velocityClient.x, velocityClient.y);\n\n let smoothEnd = false;\n let modifierResult;\n\n // check if inertia should be started\n const inertiaPossible = (options && options.enabled\n && interaction.prepared.name !== 'gesture'\n && event !== state.startEvent);\n\n const inertia = (inertiaPossible\n && (now - interaction.coords.cur.timeStamp) < 50\n && pointerSpeed > options.minSpeed\n && pointerSpeed > options.endSpeed);\n\n const modifierArg = {\n interaction,\n pageCoords: utils.extend({}, interaction.coords.cur.page),\n states: inertiaPossible && interaction.modifiers.states.map(\n modifierStatus => utils.extend({}, modifierStatus)\n ),\n preEnd: true,\n requireEndOnly: true,\n };\n\n // smoothEnd\n if (inertiaPossible && !inertia) {\n modifierResult = modifiers.setAll(modifierArg);\n\n if (modifierResult.shouldMove) {\n smoothEnd = true;\n }\n }\n\n if (!(inertia || smoothEnd)) { return; }\n\n utils.pointer.copyCoords(state.upCoords, interaction.coords.cur);\n\n interaction.pointers[0].pointer = state.startEvent = new scope.InteractEvent(\n interaction, event, interaction.prepared.name, 'inertiastart', interaction.element);\n\n state.t0 = now;\n\n state.active = true;\n state.allowResume = options.allowResume;\n interaction.simulation = state;\n\n interaction.target.fire(state.startEvent);\n\n if (inertia) {\n state.vx0 = interaction.coords.velocity.client.x;\n state.vy0 = interaction.coords.velocity.client.y;\n state.v0 = pointerSpeed;\n\n calcInertia(interaction, state);\n\n utils.extend(modifierArg.pageCoords, interaction.coords.cur.page);\n\n modifierArg.pageCoords.x += state.xe;\n modifierArg.pageCoords.y += state.ye;\n\n modifierResult = modifiers.setAll(modifierArg);\n\n state.modifiedXe += modifierResult.delta.x;\n state.modifiedYe += modifierResult.delta.y;\n\n state.i = raf.request(() => inertiaTick(interaction));\n }\n else {\n state.smoothEnd = true;\n state.xe = modifierResult.delta.x;\n state.ye = modifierResult.delta.y;\n\n state.sx = state.sy = 0;\n\n state.i = raf.request(() => smothEndTick(interaction));\n }\n\n return false;\n}\n\nfunction stop ({ interaction }) {\n const state = interaction.inertia;\n\n if (state.active) {\n raf.cancel(state.i);\n state.active = false;\n interaction.simulation = null;\n }\n}\n\nfunction calcInertia (interaction, state) {\n const options = getOptions(interaction);\n const lambda = options.resistance;\n const inertiaDur = -Math.log(options.endSpeed / state.v0) / lambda;\n\n state.x0 = interaction.prevEvent.page.x;\n state.y0 = interaction.prevEvent.page.y;\n state.t0 = state.startEvent.timeStamp / 1000;\n state.sx = state.sy = 0;\n\n state.modifiedXe = state.xe = (state.vx0 - inertiaDur) / lambda;\n state.modifiedYe = state.ye = (state.vy0 - inertiaDur) / lambda;\n state.te = inertiaDur;\n\n state.lambda_v0 = lambda / state.v0;\n state.one_ve_v0 = 1 - options.endSpeed / state.v0;\n}\n\nfunction inertiaTick (interaction) {\n updateInertiaCoords(interaction);\n utils.pointer.setCoordDeltas(interaction.coords.delta, interaction.coords.prev, interaction.coords.cur);\n utils.pointer.setCoordVelocity(interaction.coords.velocity, interaction.coords.delta);\n\n const state = interaction.inertia;\n const options = getOptions(interaction);\n const lambda = options.resistance;\n const t = new Date().getTime() / 1000 - state.t0;\n\n if (t < state.te) {\n\n const progress = 1 - (Math.exp(-lambda * t) - state.lambda_v0) / state.one_ve_v0;\n\n if (state.modifiedXe === state.xe && state.modifiedYe === state.ye) {\n state.sx = state.xe * progress;\n state.sy = state.ye * progress;\n }\n else {\n const quadPoint = utils.getQuadraticCurvePoint(\n 0, 0,\n state.xe, state.ye,\n state.modifiedXe, state.modifiedYe,\n progress);\n\n state.sx = quadPoint.x;\n state.sy = quadPoint.y;\n }\n\n interaction.move();\n\n state.i = raf.request(() => inertiaTick(interaction));\n }\n else {\n state.sx = state.modifiedXe;\n state.sy = state.modifiedYe;\n\n interaction.move();\n interaction.end(state.startEvent);\n state.active = false;\n interaction.simulation = null;\n }\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur);\n}\n\nfunction smothEndTick (interaction) {\n updateInertiaCoords(interaction);\n\n const state = interaction.inertia;\n const t = new Date().getTime() - state.t0;\n const { smoothEndDuration: duration } = getOptions(interaction);\n\n if (t < duration) {\n state.sx = utils.easeOutQuad(t, 0, state.xe, duration);\n state.sy = utils.easeOutQuad(t, 0, state.ye, duration);\n\n interaction.move();\n\n state.i = raf.request(() => smothEndTick(interaction));\n }\n else {\n state.sx = state.xe;\n state.sy = state.ye;\n\n interaction.move();\n interaction.end(state.startEvent);\n\n state.smoothEnd =\n state.active = false;\n interaction.simulation = null;\n }\n}\n\nfunction updateInertiaCoords (interaction) {\n const state = interaction.inertia;\n\n // return if inertia isn't running\n if (!state.active) { return; }\n\n const pageUp = state.upCoords.page;\n const clientUp = state.upCoords.client;\n\n utils.pointer.setCoords(interaction.coords.cur, [ {\n pageX : pageUp.x + state.sx,\n pageY : pageUp.y + state.sy,\n clientX: clientUp.x + state.sx,\n clientY: clientUp.y + state.sy,\n } ]);\n}\n\nfunction getOptions ({ target, prepared }) {\n return target && target.options && prepared.name && target.options[prepared.name].inertia;\n}\n\nexport default {\n install,\n calcInertia,\n inertiaTick,\n smothEndTick,\n updateInertiaCoords,\n};\n","import * as arr from '@interactjs/utils/arr';\nimport extend from '@interactjs/utils/extend';\nimport normalize from '@interactjs/utils/normalizeListeners';\n\nfunction fireUntilImmediateStopped (event, listeners) {\n for (const listener of listeners) {\n if (event.immediatePropagationStopped) { break; }\n\n listener(event);\n }\n}\n\nclass Eventable {\n\n constructor (options) {\n this.options = extend({}, options || {});\n this.types = {};\n this.propagationStopped = this.immediatePropagationStopped = false;\n }\n\n fire (event) {\n let listeners;\n const global = this.global;\n\n // Interactable#on() listeners\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, listener) {\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, listener) {\n const listeners = normalize(type, listener);\n\n for (type in listeners) {\n const eventList = this.types[type];\n\n if (!eventList || !eventList.length) { continue; }\n\n for (listener of listeners[type]) {\n const index = eventList.indexOf(listener);\n\n if (index !== -1) {\n eventList.splice(index, 1);\n }\n }\n }\n }\n}\n\nexport default Eventable;\n","import * as utils from './index';\n\nconst finder = {\n methodOrder: [ 'simulationResume', 'mouseOrPen', 'hasPointer', 'idle' ],\n\n search: function (details) {\n for (const method of finder.methodOrder) {\n const interaction = finder[method](details);\n\n if (interaction) {\n return interaction;\n }\n }\n },\n\n // try to resume simulation with a new pointer\n simulationResume: function ({ pointerType, eventType, eventTarget, scope }) {\n if (!/down|start/i.test(eventType)) {\n return null;\n }\n\n for (const interaction of scope.interactions.list) {\n let element = eventTarget;\n\n if (interaction.simulation && interaction.simulation.allowResume\n && (interaction.pointerType === pointerType)) {\n while (element) {\n // if the element is the interaction element\n if (element === interaction.element) {\n return interaction;\n }\n element = utils.dom.parentNode(element);\n }\n }\n }\n\n return null;\n },\n\n // if it's a mouse or pen interaction\n mouseOrPen: function ({ pointerId, pointerType, eventType, scope }) {\n if (pointerType !== 'mouse' && pointerType !== 'pen') {\n return null;\n }\n\n let firstNonActive;\n\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType) {\n // if it's a down event, skip interactions with running simulations\n if (interaction.simulation && !hasPointerId(interaction, pointerId)) { continue; }\n\n // if the interaction is active, return it immediately\n if (interaction.interacting()) {\n return interaction;\n }\n // otherwise save it and look for another active interaction\n else if (!firstNonActive) {\n firstNonActive = interaction;\n }\n }\n }\n\n // if no active mouse interaction was found use the first inactive mouse\n // interaction\n if (firstNonActive) {\n return firstNonActive;\n }\n\n // find any mouse or pen interaction.\n // ignore the interaction if the eventType is a *down, and a simulation\n // is active\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) {\n return interaction;\n }\n }\n\n return null;\n },\n\n // get interaction that has this pointer\n hasPointer: function ({ pointerId, scope }) {\n for (const interaction of scope.interactions.list) {\n if (hasPointerId(interaction, pointerId)) {\n return interaction;\n }\n }\n },\n\n // get first idle interaction with a matching pointerType\n idle: function ({ pointerType, scope }) {\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.target;\n // don't add this pointer if there is a target interactable and it\n // isn't gesturable\n if (target && !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, pointerId) {\n return utils.arr.some(interaction.pointers, ({ id }) => id === pointerId);\n}\n\nexport default finder;\n","import InteractionBase from './Interaction';\nimport events from '@interactjs/utils/events';\nimport finder from '@interactjs/utils/interactionFinder';\nimport browser from '@interactjs/utils/browser';\nimport domObjects from '@interactjs/utils/domObjects';\nimport pointerUtils from '@interactjs/utils/pointerUtils';\nimport Signals from '@interactjs/utils/Signals';\n\nconst methodNames = [\n 'pointerDown', 'pointerMove', 'pointerUp',\n 'updatePointer', 'removePointer', 'windowBlur',\n];\n\nfunction install (scope) {\n const signals = new Signals();\n\n const listeners = {};\n\n for (const method of methodNames) {\n listeners[method] = doOnInteractions(method, scope);\n }\n\n const eventMap = { /* 'eventType': listenerFunc */ };\n const pEventTypes = browser.pEventTypes;\n\n if (domObjects.PointerEvent) {\n eventMap[pEventTypes.down ] = listeners.pointerDown;\n eventMap[pEventTypes.move ] = listeners.pointerMove;\n eventMap[pEventTypes.up ] = listeners.pointerUp;\n eventMap[pEventTypes.cancel] = listeners.pointerUp;\n }\n else {\n eventMap.mousedown = listeners.pointerDown;\n eventMap.mousemove = listeners.pointerMove;\n eventMap.mouseup = listeners.pointerUp;\n\n eventMap.touchstart = listeners.pointerDown;\n eventMap.touchmove = listeners.pointerMove;\n eventMap.touchend = listeners.pointerUp;\n eventMap.touchcancel = listeners.pointerUp;\n }\n\n eventMap.blur = event => {\n for (const interaction of scope.interactions.list) {\n interaction.documentBlur(event);\n }\n };\n\n scope.signals.on('add-document' , onDocSignal);\n scope.signals.on('remove-document', onDocSignal);\n\n // for ignoring browser's simulated mouse events\n scope.prevTouchTime = 0;\n\n scope.Interaction = class Interaction extends InteractionBase {\n get pointerMoveTolerance () {\n return scope.interactions.pointerMoveTolerance;\n }\n\n set pointerMoveTolerance (value) {\n scope.interactions.pointerMoveTolerance = value;\n }\n };\n scope.interactions = {\n signals,\n // all active and idle interactions\n list: [],\n new (options) {\n options.signals = signals;\n\n return new scope.Interaction(options);\n },\n listeners,\n eventMap,\n pointerMoveTolerance: 1,\n };\n\n scope.actions = {\n names: [],\n methodDict: {},\n eventTypes: [],\n };\n}\n\nfunction doOnInteractions (method, scope) {\n return (function (event) {\n const interactions = scope.interactions.list;\n\n const pointerType = pointerUtils.getPointerType(event);\n const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event);\n const matches = []; // [ [pointer, interaction], ...]\n\n if (browser.supportsTouch && /touch/.test(event.type)) {\n scope.prevTouchTime = new Date().getTime();\n\n for (const changedTouch of event.changedTouches) {\n const pointer = changedTouch;\n const pointerId = pointerUtils.getPointerId(pointer);\n const searchDetails = {\n pointer,\n pointerId,\n pointerType,\n eventType: event.type,\n eventTarget,\n curEventTarget,\n scope,\n };\n const interaction = getInteraction(searchDetails);\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ]);\n }\n }\n else {\n let invalidPointer = false;\n\n if (!browser.supportsPointerEvent && /mouse/.test(event.type)) {\n // ignore mouse events while touch interactions are active\n for (let i = 0; i < interactions.length && !invalidPointer; i++) {\n invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown;\n }\n\n // try to ignore mouse events that are simulated by the browser\n // after a touch event\n invalidPointer = invalidPointer\n || (new Date().getTime() - scope.prevTouchTime < 500)\n // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated\n || event.timeStamp === 0;\n }\n\n if (!invalidPointer) {\n const searchDetails = {\n pointer: event,\n pointerId: pointerUtils.getPointerId(event),\n pointerType,\n eventType: event.type,\n curEventTarget,\n eventTarget,\n scope,\n };\n\n const interaction = getInteraction(searchDetails);\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ]);\n }\n }\n\n // eslint-disable-next-line no-shadow\n for (const [pointer, eventTarget, curEventTarget, interaction] of matches) {\n interaction[method](pointer, event, eventTarget, curEventTarget);\n }\n });\n}\n\nfunction getInteraction (searchDetails) {\n const { pointerType, scope } = searchDetails;\n\n const foundInteraction = finder.search(searchDetails);\n const signalArg = { interaction: foundInteraction, searchDetails };\n\n scope.interactions.signals.fire('find', signalArg);\n\n return signalArg.interaction || newInteraction({ pointerType }, scope);\n}\n\nexport function newInteraction (options, scope) {\n const interaction = scope.interactions.new(options);\n\n scope.interactions.list.push(interaction);\n return interaction;\n}\n\nfunction onDocSignal ({ doc, scope, options }, signalName) {\n const { eventMap } = scope.interactions;\n const eventMethod = signalName.indexOf('add') === 0\n ? events.add : events.remove;\n\n if (scope.browser.isIOS && !options.events) {\n options.events = { passive: false };\n }\n\n // delegate event listener\n for (const eventType in events.delegatedEvents) {\n eventMethod(doc, eventType, events.delegateListener);\n eventMethod(doc, eventType, events.delegateUseCapture, true);\n }\n\n const eventOptions = options && options.events;\n\n for (const eventType in eventMap) {\n eventMethod(doc, eventType, eventMap[eventType], eventOptions);\n }\n}\n\nexport default {\n install,\n onDocSignal,\n doOnInteractions,\n newInteraction,\n methodNames,\n};\n","import Eventable from './Eventable';\nimport defaults from './defaultOptions';\nimport * as utils from '@interactjs/utils';\nimport domObjects from '@interactjs/utils/domObjects';\n\nimport interactions from './interactions';\nimport InteractEvent from './InteractEvent';\nimport InteractableBase from './Interactable';\n\nconst {\n win,\n browser,\n raf,\n Signals,\n events,\n} = utils;\n\nexport function createScope () {\n const scope = {\n Signals,\n signals: new Signals(),\n browser,\n events,\n utils,\n defaults: utils.clone(defaults),\n Eventable,\n\n InteractEvent: InteractEvent,\n Interactable: class Interactable extends InteractableBase {\n get _defaults () { return scope.defaults; }\n\n set (options) {\n super.set(options);\n\n scope.interactables.signals.fire('set', {\n options,\n interactable: this,\n });\n\n return this;\n }\n\n unset () {\n super.unset();\n scope.interactables.signals.fire('unset', { interactable: this });\n }\n },\n\n interactables: {\n // all set interactables\n list: [],\n\n new (target, options) {\n options = utils.extend(options || {}, {\n actions: scope.actions,\n });\n\n const interactable = new scope.Interactable(target, options, scope.document);\n\n scope.addDocument(interactable._doc);\n\n scope.interactables.list.push(interactable);\n\n scope.interactables.signals.fire('new', {\n target,\n options,\n interactable: interactable,\n win: this._win,\n });\n\n return interactable;\n },\n\n indexOfElement (target, context) {\n context = context || scope.document;\n\n const list = this.list;\n\n for (let i = 0; i < list.length; i++) {\n const interactable = list[i];\n\n if (interactable.target === target && interactable._context === context) {\n return i;\n }\n }\n\n return -1;\n },\n\n get (element, options, dontCheckInContext) {\n const ret = this.list[this.indexOfElement(element, options && options.context)];\n\n return ret && (utils.is.string(element) || dontCheckInContext || ret.inContext(element))? ret : null;\n },\n\n forEachMatch (element, callback) {\n for (const interactable of this.list) {\n let ret;\n\n if ((utils.is.string(interactable.target)\n // target is a selector and the element matches\n ? (utils.is.element(element) && utils.dom.matchesSelector(element, interactable.target))\n // target is the element\n : element === interactable.target)\n // the element is in context\n && (interactable.inContext(element))) {\n ret = callback(interactable);\n }\n\n if (ret !== undefined) {\n return ret;\n }\n }\n },\n\n signals: new utils.Signals(),\n },\n\n // main document\n document: null,\n // all documents being listened to\n documents: [/* { doc, options } */],\n\n init (window) {\n return initScope(scope, window);\n },\n\n addDocument (doc, options) {\n // do nothing if document is already known\n if (scope.getDocIndex(doc) !== -1) { return false; }\n\n const window = win.getWindow(doc);\n\n options = options ? utils.extend({}, options) : {};\n\n scope.documents.push({ doc, options });\n events.documents.push(doc);\n\n // don't add an unload event for the main document\n // so that the page may be cached in browser history\n if (doc !== scope.document) {\n events.add(window, 'unload', scope.onWindowUnload);\n }\n\n scope.signals.fire('add-document', { doc, window, scope, options });\n },\n\n removeDocument (doc) {\n const index = scope.getDocIndex(doc);\n\n const window = win.getWindow(doc);\n const options = scope.documents[index].options;\n\n events.remove(window, 'unload', scope.onWindowUnload);\n\n scope.documents.splice(index, 1);\n events.documents.splice(index, 1);\n\n scope.signals.fire('remove-document', { doc, window, scope, options });\n },\n\n onWindowUnload (event) {\n scope.removeDocument(event.currentTarget.document);\n },\n\n getDocIndex (doc) {\n for (let i = 0; i < scope.documents.length; i++) {\n if (scope.documents[i].doc === doc) {\n return i;\n }\n }\n\n return -1;\n },\n\n getDocOptions (doc) {\n const docIndex = scope.getDocIndex(doc);\n\n return docIndex === -1 ? null : scope.documents[docIndex].options;\n },\n };\n\n return scope;\n}\n\nexport function initScope (scope, window) {\n win.init(window);\n domObjects.init(window);\n browser.init(window);\n raf.init(window);\n events.init(window);\n\n interactions.install(scope);\n scope.document = window.document;\n\n return scope;\n}\n","/** @module interact */\n\nimport browser from '@interactjs/utils/browser';\nimport events from '@interactjs/utils/events';\nimport * as utils from '@interactjs/utils';\nimport { createScope } from '@interactjs/core/scope';\n\nconst globalEvents = {};\nconst scope = createScope();\n\n/**\n * ```js\n * interact('#draggable').draggable(true);\n *\n * var rectables = interact('rect');\n * rectables\n * .gesturable(true)\n * .on('gesturemove', function (event) {\n * // ...\n * });\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @global\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\nfunction interact (target, options) {\n let interactable = scope.interactables.get(target, options);\n\n\n if (!interactable) {\n interactable = scope.interactables.new(target, options);\n interactable.events.global = globalEvents;\n }\n\n return interactable;\n}\n\nscope._plugins = [];\n\n/**\n * Use a plugin\n *\n * @alias module:interact.use\n *\n * @param {Object} plugin\n * @param {function} plugin.install\n * @return {interact}\n*/\ninteract.use = function (plugin) {\n if (scope._plugins.indexOf(plugin) !== -1) {\n return;\n }\n\n plugin.install(scope);\n scope._plugins.push(plugin);\n return interact;\n};\n\n/**\n * Check if an element or selector has been set with the {@link interact}\n * function\n *\n * @alias module:interact.isSet\n *\n * @param {Element} element The Element being searched for\n * @return {boolean} Indicates if the element or CSS selector was previously\n * passed to interact\n*/\ninteract.isSet = function (element, options) {\n return scope.interactables.indexOfElement(element, options && options.context) !== -1;\n};\n\n/**\n * Add a global listener for an InteractEvent or adds a DOM event to `document`\n *\n * @alias module:interact.on\n *\n * @param {string | array | object} type The types of events to listen for\n * @param {function} listener The function event (s)\n * @param {object | boolean} [options] object or useCapture flag for\n * addEventListener\n * @return {object} interact\n */\ninteract.on = function (type, listener, options) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/);\n }\n\n if (utils.is.array(type)) {\n for (const eventType of type) {\n interact.on(eventType, listener, options);\n }\n\n return interact;\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.on(prop, type[prop], listener);\n }\n\n return interact;\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (utils.arr.contains(scope.actions.eventTypes, type)) {\n // if this type of event was never bound\n if (!globalEvents[type]) {\n globalEvents[type] = [listener];\n }\n else {\n globalEvents[type].push(listener);\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n events.add(scope.document, type, listener, { options });\n }\n\n return interact;\n};\n\n/**\n * Removes a global InteractEvent listener or DOM event from `document`\n *\n * @alias module:interact.off\n *\n * @param {string | array | object} type The types of events that were listened\n * for\n * @param {function} listener The listener function to be removed\n * @param {object | boolean} options [options] object or useCapture flag for\n * removeEventListener\n * @return {object} interact\n */\ninteract.off = function (type, listener, options) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/);\n }\n\n if (utils.is.array(type)) {\n for (const eventType of type) {\n interact.off(eventType, listener, options);\n }\n\n return interact;\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.off(prop, type[prop], listener);\n }\n\n return interact;\n }\n\n if (!utils.arr.contains(scope.actions.eventTypes, type)) {\n events.remove(scope.document, type, listener, options);\n }\n else {\n let index;\n\n if (type in globalEvents\n && (index = globalEvents[type].indexOf(listener)) !== -1) {\n globalEvents[type].splice(index, 1);\n }\n }\n\n return interact;\n};\n\n/**\n * Returns an object which exposes internal data\n\n * @alias module:interact.debug\n *\n * @return {object} An object with properties that outline the current state\n * and expose internal functions and variables\n */\ninteract.debug = function () {\n return scope;\n};\n\n// expose the functions used to calculate multi-touch properties\ninteract.getPointerAverage = utils.pointer.pointerAverage;\ninteract.getTouchBBox = utils.pointer.touchBBox;\ninteract.getTouchDistance = utils.pointer.touchDistance;\ninteract.getTouchAngle = utils.pointer.touchAngle;\n\ninteract.getElementRect = utils.dom.getElementRect;\ninteract.getElementClientRect = utils.dom.getElementClientRect;\ninteract.matchesSelector = utils.dom.matchesSelector;\ninteract.closest = utils.dom.closest;\n\n/**\n * @alias module:interact.supportsTouch\n *\n * @return {boolean} Whether or not the browser supports touch input\n */\ninteract.supportsTouch = 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 */\ninteract.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 * @param {Event} event An event on which to call preventDefault()\n * @return {object} interact\n */\ninteract.stop = function (event) {\n for (const interaction of scope.interactions.list) {\n interaction.stop(event);\n }\n\n return interact;\n};\n\n/**\n * Returns or sets the distance the pointer must be moved before an action\n * sequence occurs. This also affects tolerance for tap events.\n *\n * @alias module:interact.pointerMoveTolerance\n *\n * @param {number} [newValue] The movement from the start position must be greater than this value\n * @return {interact | number}\n */\ninteract.pointerMoveTolerance = function (newValue) {\n if (utils.is.number(newValue)) {\n scope.interactions.pointerMoveTolerance = newValue;\n\n return interact;\n }\n\n return scope.interactions.pointerMoveTolerance;\n};\n\nscope.interactables.signals.on('unset', ({ interactable }) => {\n scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1);\n\n // Stop related interactions when an Interactable is unset\n for (const interaction of scope.interactions.list) {\n if (interaction.target === interactable && interaction.interacting() && interaction._ending) {\n interaction.stop();\n }\n }\n});\ninteract.addDocument = scope.addDocument;\ninteract.removeDocument = scope.removeDocument;\n\nscope.interact = interact;\n\nexport { scope };\nexport default interact;\n","import * as is from '@interactjs/utils/is';\nimport rectUtils from '@interactjs/utils/rect';\n\nfunction start ({ rect, startOffset, state }) {\n const { options } = state;\n const { elementRect } = options;\n const offset = {};\n\n if (rect && elementRect) {\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 else {\n offset.left = offset.top = offset.right = offset.bottom = 0;\n }\n\n state.offset = offset;\n}\n\nfunction set ({ coords, interaction, state }) {\n const { options, offset } = state;\n\n const restriction = getRestrictionRect(options.restriction, interaction, coords);\n\n if (!restriction) { return state; }\n\n const rect = restriction;\n\n // object is assumed to have\n // x, y, width, height or\n // left, top, right, bottom\n if ('x' in restriction && 'y' in restriction) {\n coords.x = Math.max(Math.min(rect.x + rect.width - offset.right , coords.x), rect.x + offset.left);\n coords.y = Math.max(Math.min(rect.y + rect.height - offset.bottom, coords.y), rect.y + offset.top );\n }\n else {\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}\n\nfunction getRestrictionRect (value, interaction, coords) {\n if (is.func(value)) {\n return rectUtils.resolveRectLike(value, interaction.target, interaction.element, [coords.x, coords.y, interaction]);\n } else {\n return rectUtils.resolveRectLike(value, interaction.target, interaction.element);\n }\n}\n\nconst restrict = {\n start,\n set,\n getRestrictionRect,\n defaults: {\n enabled: false,\n restriction: null,\n elementRect: null,\n },\n};\n\nexport default restrict;\n","// This module adds the options.resize.restrictEdges setting which sets min and\n// max for the top, left, bottom and right edges of the target being resized.\n//\n// interact(target).resize({\n// edges: { top: true, left: true },\n// restrictEdges: {\n// inner: { top: 200, left: 200, right: 400, bottom: 400 },\n// outer: { top: 0, left: 0, right: 600, bottom: 600 },\n// },\n// });\n\nimport extend from '@interactjs/utils/extend';\nimport rectUtils from '@interactjs/utils/rect';\nimport restrict from './pointer';\n\nconst { getRestrictionRect } = restrict;\nconst noInner = { top: +Infinity, left: +Infinity, bottom: -Infinity, right: -Infinity };\nconst noOuter = { top: -Infinity, left: -Infinity, bottom: +Infinity, right: +Infinity };\n\nfunction start ({ interaction, state }) {\n const { options } = state;\n const startOffset = interaction.modifiers.startOffset;\n let offset;\n\n if (options) {\n const offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page);\n\n offset = rectUtils.rectToXY(offsetRect);\n }\n\n offset = offset || { x: 0, y: 0 };\n\n state.offset = {\n top: offset.y + startOffset.top,\n left: offset.x + startOffset.left,\n bottom: offset.y - startOffset.bottom,\n right: offset.x - startOffset.right,\n };\n}\n\nfunction set ({ coords, interaction, state }) {\n const { offset, options } = state;\n const edges = interaction.prepared.linkedEdges || interaction.prepared.edges;\n\n if (!edges) {\n return;\n }\n\n const page = extend({}, coords);\n const inner = getRestrictionRect(options.inner, interaction, page) || {};\n const outer = getRestrictionRect(options.outer, interaction, page) || {};\n\n fixRect(inner, noInner);\n fixRect(outer, noOuter);\n\n if (edges.top) {\n coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top);\n }\n else if (edges.bottom) {\n coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom);\n }\n if (edges.left) {\n coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left);\n }\n else if (edges.right) {\n coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right);\n }\n}\n\nfunction fixRect (rect, defaults) {\n for (const edge of ['top', 'left', 'bottom', 'right']) {\n if (!(edge in rect)) {\n rect[edge] = defaults[edge];\n }\n }\n\n return rect;\n}\n\nconst restrictEdges = {\n noInner,\n noOuter,\n getRestrictionRect,\n start,\n set,\n defaults: {\n enabled: false,\n inner: null,\n outer: null,\n offset: null,\n },\n};\n\nexport default restrictEdges;\n","// This module adds the options.resize.restrictSize setting which sets min and\n// max width and height for the target being resized.\n//\n// interact(target).resize({\n// edges: { top: true, left: true },\n// restrictSize: {\n// min: { width: -600, height: -600 },\n// max: { width: 600, height: 600 },\n// },\n// });\n\nimport extend from '@interactjs/utils/extend';\nimport rectUtils from '@interactjs/utils/rect';\nimport restrictEdges from './edges';\n\nconst noMin = { width: -Infinity, height: -Infinity };\nconst noMax = { width: +Infinity, height: +Infinity };\n\nfunction start (arg) {\n return restrictEdges.start(arg);\n}\n\nfunction set (arg) {\n const { interaction, state } = arg;\n const { options } = state;\n const edges = interaction.prepared.linkedEdges || interaction.prepared.edges;\n\n if (!edges) {\n return;\n }\n\n const rect = rectUtils.xywhToTlbr(interaction.resizeRects.inverted);\n\n const minSize = rectUtils.tlbrToXywh(restrictEdges.getRestrictionRect(options.min, interaction)) || noMin;\n const maxSize = rectUtils.tlbrToXywh(restrictEdges.getRestrictionRect(options.max, interaction)) || noMax;\n\n state.options = {\n enabled: options.enabled,\n endOnly: options.endOnly,\n inner: extend({}, restrictEdges.noInner),\n outer: extend({}, restrictEdges.noOuter),\n };\n\n if (edges.top) {\n state.options.inner.top = rect.bottom - minSize.height;\n state.options.outer.top = rect.bottom - maxSize.height;\n }\n else if (edges.bottom) {\n state.options.inner.bottom = rect.top + minSize.height;\n state.options.outer.bottom = rect.top + maxSize.height;\n }\n if (edges.left) {\n state.options.inner.left = rect.right - minSize.width;\n state.options.outer.left = rect.right - maxSize.width;\n }\n else if (edges.right) {\n state.options.inner.right = rect.left + minSize.width;\n state.options.outer.right = rect.left + maxSize.width;\n }\n\n restrictEdges.set(arg);\n\n state.options = options;\n}\n\nconst restrictSize = {\n start,\n set,\n defaults: {\n enabled: false,\n min: null,\n max: null,\n },\n};\n\nexport default restrictSize;\n","import * as utils from '@interactjs/utils';\n\nfunction start ({ interaction, interactable, element, rect, state, startOffset }) {\n const { options } = state;\n const offsets = [];\n const optionsOrigin = utils.rect.rectToXY(utils.rect.resolveRectLike(options.origin));\n const origin = optionsOrigin || utils.getOriginXY(interactable, element, interaction.prepared.name);\n\n let snapOffset;\n\n if (options.offset === 'startCoords') {\n snapOffset = {\n x: interaction.coords.start.page.x - origin.x,\n y: interaction.coords.start.page.y - origin.y,\n };\n }\n else {\n const offsetRect = utils.rect.resolveRectLike(options.offset, interactable, element, [interaction]);\n\n snapOffset = utils.rect.rectToXY(offsetRect) || { x: 0, y: 0 };\n }\n\n const relativePoints = options.relativePoints || [];\n\n if (rect && options.relativePoints && options.relativePoints.length) {\n for (let index = 0; index < relativePoints.length; index++) {\n const relativePoint = relativePoints[index];\n\n offsets.push({\n index,\n relativePoint,\n x: startOffset.left - (rect.width * relativePoint.x) + snapOffset.x,\n y: startOffset.top - (rect.height * relativePoint.y) + snapOffset.y,\n });\n }\n }\n else {\n offsets.push(utils.extend({\n index: 0,\n relativePoint: null,\n }, snapOffset));\n }\n\n state.offsets = offsets;\n}\n\nfunction set ({ interaction, coords, state }) {\n const { options, offsets } = state;\n\n const origin = utils.getOriginXY(interaction.target, interaction.element, interaction.prepared.name);\n const page = utils.extend({}, coords);\n const targets = [];\n let target;\n let i;\n\n page.x -= origin.x;\n page.y -= origin.y;\n\n state.realX = page.x;\n state.realY = page.y;\n\n let len = options.targets? options.targets.length : 0;\n\n for (const offset of offsets) {\n\n const relativeX = page.x - offset.x;\n const relativeY = page.y - offset.y;\n\n for (let index = 0; index < options.targets.length; index++) {\n const snapTarget = options.targets[index];\n if (utils.is.func(snapTarget)) {\n target = snapTarget(relativeX, relativeY, interaction, offset, index);\n }\n else {\n target = snapTarget;\n }\n\n if (!target) { continue; }\n\n targets.push({\n x: utils.is.number(target.x) ? (target.x + offset.x) : relativeX,\n y: utils.is.number(target.y) ? (target.y + offset.y) : relativeY,\n\n range: utils.is.number(target.range)? target.range: options.range,\n });\n }\n }\n\n const closest = {\n target: null,\n inRange: false,\n distance: 0,\n range: 0,\n dx: 0,\n dy: 0,\n };\n\n for (i = 0, len = targets.length; i < len; i++) {\n target = targets[i];\n\n const range = target.range;\n const dx = target.x - page.x;\n const dy = target.y - page.y;\n const distance = utils.hypot(dx, dy);\n let inRange = distance <= range;\n\n // Infinite targets count as being out of range\n // compared to non infinite ones that are in range\n if (range === Infinity && closest.inRange && closest.range !== Infinity) {\n inRange = false;\n }\n\n if (!closest.target || (inRange\n // is the closest target in range?\n ? (closest.inRange && range !== Infinity\n // the pointer is relatively deeper in this target\n ? distance / range < closest.distance / closest.range\n // this target has Infinite range and the closest doesn't\n : (range === Infinity && closest.range !== Infinity) ||\n // OR this target is closer that the previous closest\n distance < closest.distance)\n // The other is not in range and the pointer is closer to this target\n : (!closest.inRange && distance < closest.distance))) {\n\n closest.target = target;\n closest.distance = distance;\n closest.range = range;\n closest.inRange = inRange;\n closest.dx = dx;\n closest.dy = dy;\n\n state.range = range;\n }\n }\n\n if (closest.inRange) {\n coords.x = closest.target.x;\n coords.y = closest.target.y;\n }\n\n state.closest = closest;\n}\n\nconst snap = {\n start,\n set,\n defaults: {\n enabled: false,\n range : Infinity,\n targets: null,\n offset: null,\n\n relativePoints: null,\n },\n};\n\nexport default snap;\n","// This module allows snapping of the size of targets during resize\n// interactions.\n\nimport extend from '@interactjs/utils/extend';\nimport * as is from '@interactjs/utils/is';\nimport snap from './pointer';\n\nfunction start (arg) {\n const { interaction, state } = arg;\n const { options } = state;\n const edges = interaction.prepared.edges;\n\n if (!edges) { return null; }\n\n arg.state = {\n options: {\n relativePoints: [{\n x: edges.left? 0 : 1,\n y: edges.top ? 0 : 1,\n }],\n origin: { x: 0, y: 0 },\n offset: options.offset || 'self',\n range: options.range,\n },\n };\n\n state.targetFields = state.targetFields || [\n ['width', 'height'],\n ['x', 'y'],\n ];\n\n snap.start(arg);\n state.offsets = arg.state.offsets;\n\n arg.state = state;\n}\n\nfunction set (arg) {\n const { interaction, state, coords } = arg;\n const { options, offsets } = state;\n const relative = {\n x: coords.x - offsets[0].x,\n y: coords.y - offsets[0].y,\n };\n\n state.options = extend({}, options);\n state.options.targets = [];\n\n for (const snapTarget of (options.targets || [])) {\n let target;\n\n if (is.func(snapTarget)) {\n target = snapTarget(relative.x, relative.y, interaction);\n }\n else {\n target = snapTarget;\n }\n\n if (!target) { continue; }\n\n for (const [xField, yField] of state.targetFields) {\n if (xField in target || yField in target) {\n target.x = target[xField];\n target.y = target[yField];\n\n break;\n }\n }\n\n state.options.targets.push(target);\n }\n\n snap.set(arg);\n\n state.options = options;\n}\n\nconst snapSize = {\n start,\n set,\n defaults: {\n enabled: false,\n range : Infinity,\n targets: null,\n offset: null,\n },\n};\n\nexport default snapSize;\n","/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * });\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * });\n */\n\nimport clone from '@interactjs/utils/clone';\nimport extend from '@interactjs/utils/extend';\nimport snapSize from './size';\n\nfunction install (scope) {\n const {\n defaults,\n } = scope;\n\n defaults.perAction.snapEdges = snapEdges.defaults;\n}\n\nfunction start (arg) {\n const edges = arg.interaction.prepared.edges;\n\n if (!edges) { return null; }\n\n arg.state.targetFields = arg.state.targetFields || [\n [edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom'],\n ];\n\n return snapSize.start(arg);\n}\n\nfunction set (arg) {\n return snapSize.set(arg);\n}\n\nfunction modifyCoords (arg) {\n snapSize.modifyCoords(arg);\n}\n\nconst snapEdges = {\n install,\n start,\n set,\n modifyCoords,\n defaults: extend(clone(snapSize.defaults), {\n offset: { x: 0, y: 0 },\n }),\n};\n\nexport default snapEdges;\n","import * as utils from '@interactjs/utils';\nimport PointerEvent from './PointerEvent';\n\nconst signals = new utils.Signals();\nconst simpleSignals = [ 'down', 'up', 'cancel' ];\nconst simpleEvents = [ 'down', 'up', 'cancel' ];\n\nconst pointerEvents = {\n install,\n signals,\n PointerEvent,\n fire,\n collectEventTargets,\n createSignalListener,\n defaults: {\n holdDuration: 600,\n ignoreFrom : null,\n allowFrom : null,\n origin : { x: 0, y: 0 },\n },\n types: [\n 'down',\n 'move',\n 'up',\n 'cancel',\n 'tap',\n 'doubletap',\n 'hold',\n ],\n};\n\nfunction fire (arg) {\n const {\n interaction, pointer, event, eventTarget,\n type = arg.pointerEvent.type,\n targets = collectEventTargets(arg),\n pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction),\n } = arg;\n\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n targets,\n type,\n pointerEvent,\n };\n\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i];\n\n for (const prop in target.props || {}) {\n pointerEvent[prop] = target.props[prop];\n }\n\n const origin = utils.getOriginXY(target.eventable, target.element);\n\n pointerEvent.subtractOrigin(origin);\n pointerEvent.eventable = target.eventable;\n pointerEvent.currentTarget = target.element;\n\n target.eventable.fire(pointerEvent);\n\n pointerEvent.addOrigin(origin);\n\n if (pointerEvent.immediatePropagationStopped\n || (pointerEvent.propagationStopped\n && (i + 1) < targets.length && targets[i + 1].element !== pointerEvent.currentTarget)) {\n break;\n }\n }\n\n signals.fire('fired', signalArg);\n\n if (type === 'tap') {\n // if pointerEvent should make a double tap, create and fire a doubletap\n // PointerEvent and use that as the prevTap\n const prevTap = pointerEvent.double\n ? fire({\n interaction, pointer, event, eventTarget,\n type: 'doubletap',\n })\n : pointerEvent;\n\n interaction.prevTap = prevTap;\n interaction.tapTime = prevTap.timeStamp;\n }\n\n return pointerEvent;\n}\n\nfunction collectEventTargets ({ interaction, pointer, event, eventTarget, type }) {\n const pointerIndex = interaction.getPointerIndex(pointer);\n const pointerInfo = interaction.pointers[pointerIndex];\n\n // do not fire a tap event if the pointer was moved before being lifted\n if (type === 'tap' && (interaction.pointerWasMoved\n // or if the pointerup target is different to the pointerdown target\n || !(pointerInfo && pointerInfo.downTarget === eventTarget))) {\n return [];\n }\n\n const path = utils.dom.getPath(eventTarget);\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n path,\n targets: [],\n element: null,\n };\n\n for (const element of path) {\n signalArg.element = element;\n\n signals.fire('collect-targets', signalArg);\n }\n\n if (type === 'hold') {\n signalArg.targets = signalArg.targets.filter(target =>\n target.eventable.options.holdDuration === interaction.pointers[pointerIndex].hold.duration);\n }\n\n return signalArg.targets;\n}\n\nfunction install (scope) {\n const {\n interactions,\n } = scope;\n\n scope.pointerEvents = pointerEvents;\n scope.defaults.pointerEvents = pointerEvents.defaults;\n\n interactions.signals.on('new', interaction => {\n interaction.prevTap = null; // the most recent tap event on this interaction\n interaction.tapTime = 0; // time of the most recent tap event\n });\n\n interactions.signals.on('update-pointer', function ({ down, pointerInfo }) {\n if (!down) {\n return;\n }\n\n pointerInfo.hold = { duration: Infinity, timeout: null };\n });\n\n interactions.signals.on('move', function ({ interaction, pointer, event, eventTarget, duplicateMove }) {\n const pointerIndex = interaction.getPointerIndex(pointer);\n\n if (!duplicateMove && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {\n if (interaction.pointerIsDown) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout);\n }\n\n fire({\n interaction, pointer, event, eventTarget,\n type: 'move',\n });\n }\n });\n\n interactions.signals.on('down', function ({ interaction, pointer, event, eventTarget, pointerIndex }) {\n const timer = interaction.pointers[pointerIndex].hold;\n const path = utils.dom.getPath(eventTarget);\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'hold',\n targets: [],\n path,\n element: null,\n };\n\n for (const element of path) {\n signalArg.element = element;\n\n signals.fire('collect-targets', signalArg);\n }\n\n if (!signalArg.targets.length) { return; }\n\n let minDuration = Infinity;\n\n for (const target of signalArg.targets) {\n const holdDuration = target.eventable.options.holdDuration;\n\n if (holdDuration < minDuration) {\n minDuration = holdDuration;\n }\n }\n\n timer.duration = minDuration;\n timer.timeout = setTimeout(function () {\n fire({\n interaction,\n eventTarget,\n pointer,\n event,\n type: 'hold',\n });\n }, minDuration);\n });\n\n interactions.signals.on('up', ({ interaction, pointer, event, eventTarget }) => {\n if (!interaction.pointerWasMoved) {\n fire({ interaction, eventTarget, pointer, event, type: 'tap' });\n }\n });\n\n for (const signalName of ['up', 'cancel']) {\n interactions.signals.on(signalName, function ({ interaction, pointerIndex }) {\n if (interaction.pointers[pointerIndex].hold) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout);\n }\n });\n }\n\n for (let i = 0; i < simpleSignals.length; i++) {\n interactions.signals.on(simpleSignals[i], createSignalListener(simpleEvents[i]));\n }\n}\n\nfunction createSignalListener (type) {\n return function ({ interaction, pointer, event, eventTarget }) {\n fire({ interaction, eventTarget, pointer, event, type });\n };\n}\n\nexport default pointerEvents;\n","function install (scope) {\n const {\n pointerEvents,\n interactions,\n } = scope;\n\n pointerEvents.signals.on('new', onNew);\n pointerEvents.signals.on('fired', arg => onFired(arg, pointerEvents));\n\n for (const signal of ['move', 'up', 'cancel', 'endall']) {\n interactions.signals.on(signal, endHoldRepeat);\n }\n\n // don't repeat by default\n pointerEvents.defaults.holdRepeatInterval = 0;\n pointerEvents.types.push('holdrepeat');\n}\n\nfunction onNew ({ pointerEvent }) {\n if (pointerEvent.type !== 'hold') { return; }\n\n pointerEvent.count = (pointerEvent.count || 0) + 1;\n}\n\nfunction onFired ({ interaction, pointerEvent, eventTarget, targets }, pointerEvents) {\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(function () {\n pointerEvents.fire({\n interaction,\n eventTarget,\n type: 'hold',\n pointer: pointerEvent,\n event: pointerEvent,\n });\n }, interval);\n}\n\nfunction endHoldRepeat ({ interaction }) {\n // set the interaction's holdStopTime property\n // to stop further holdRepeat events\n if (interaction.holdIntervalHandle) {\n clearInterval(interaction.holdIntervalHandle);\n interaction.holdIntervalHandle = null;\n }\n}\n\nexport default {\n install,\n};\n","import * as is from '@interactjs/utils/is';\nimport extend from '@interactjs/utils/extend';\nimport { merge } from '@interactjs/utils/arr';\n\nfunction install (scope) {\n const {\n pointerEvents,\n actions,\n Interactable,\n interactables,\n } = scope;\n\n pointerEvents.signals.on('collect-targets', function ({ targets, element, type, eventTarget }) {\n scope.interactables.forEachMatch(element, interactable => {\n const eventable = interactable.events;\n const options = eventable.options;\n\n if (\n eventable.types[type] &&\n eventable.types[type].length &&\n is.element(element) &&\n interactable.testIgnoreAllow(options, element, eventTarget)) {\n\n targets.push({\n element,\n eventable,\n props: { interactable },\n });\n }\n });\n });\n\n interactables.signals.on('new', function ({ interactable }) {\n interactable.events.getRect = function (element) {\n return interactable.getRect(element);\n };\n });\n\n interactables.signals.on('set', function ({ interactable, options }) {\n extend(interactable.events.options, pointerEvents.defaults);\n extend(interactable.events.options, options.pointerEvents || {});\n });\n\n merge(actions.eventTypes, pointerEvents.types);\n\n Interactable.prototype.pointerEvents = function (options) {\n extend(this.events.options, options);\n\n return this;\n };\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\nexport default {\n install,\n};\n","import pointerEvents from './base';\nimport holdRepeat from './holdRepeat';\nimport interactableTargets from './interactableTargets';\n\nfunction install (scope) {\n pointerEvents.install(scope);\n holdRepeat.install(scope);\n interactableTargets.install(scope);\n}\n\nexport {\n pointerEvents,\n holdRepeat,\n interactableTargets,\n install,\n};\n","import { newInteraction } from '@interactjs/core/interactions';\nimport {\n arr,\n is,\n extend,\n rect as rectUtils,\n pointer as pointerUtils,\n win,\n} from '@interactjs/utils';\n\nexport function install (scope) {\n const {\n actions,\n interactions,\n /** @lends Interactable */\n Interactable,\n } = scope;\n\n // add action reflow event types\n for (const actionName of actions.names) {\n actions.eventTypes.push(`${actionName}reflow`);\n }\n\n // remove completed reflow interactions\n interactions.signals.on('stop', ({ interaction }) => {\n if (interaction.pointerType === 'reflow') {\n interaction._reflowResolve();\n arr.remove(scope.interactions.list, interaction);\n }\n });\n\n /**\n * ```js\n * const interactable = interact(target);\n * const drag = { name: drag, axis: 'x' };\n * const resize = { name: resize, edges: { left: true, bottom: true };\n *\n * interactable.reflow(drag);\n * interactable.reflow(resize);\n * ```\n *\n * Start an action sequence to re-apply modifiers, check drops, etc.\n *\n * @param { Object } action The action to begin\n * @param { string } action.name The name of the action\n * @returns { Promise }\n */\n Interactable.prototype.reflow = function (action) {\n return reflow(this, action, scope);\n };\n}\n\nfunction reflow (interactable, action, scope) {\n const elements = is.string(interactable.target)\n ? arr.from(interactable._context.querySelectorAll(interactable.target))\n : [interactable.target];\n\n const Promise = win.window.Promise;\n const promises = Promise ? [] : null;\n\n for (const element of elements) {\n const rect = interactable.getRect(element);\n\n if (!rect) { break; }\n\n const runningInteraction = arr.find(\n scope.interactions.list,\n interaction => {\n return interaction.interacting() &&\n interaction.target === interactable &&\n interaction.element === element &&\n interaction.prepared.name === action.name;\n });\n let reflowPromise;\n\n if (runningInteraction) {\n runningInteraction.move();\n\n reflowPromise = runningInteraction._reflowPromise || new Promise(resolve => {\n runningInteraction._reflowResolve = resolve;\n });\n }\n else {\n const xywh = rectUtils.tlbrToXywh(rect);\n const coords = {\n page : { x: xywh.x, y: xywh.y },\n client : { x: xywh.x, y: xywh.y },\n timeStamp: Date.now(),\n };\n\n const event = pointerUtils.coordsToEvent(coords);\n reflowPromise = startReflow(scope, interactable, element, action, event);\n }\n\n if (promises) {\n promises.push(reflowPromise);\n }\n }\n\n return promises && Promise.all(promises).then(() => interactable);\n}\n\nfunction startReflow (scope, interactable, element, action, event) {\n const interaction = newInteraction({ pointerType: 'reflow' }, scope);\n const signalArg = {\n interaction,\n event,\n pointer: event,\n eventTarget: element,\n phase: 'reflow',\n };\n\n interaction.target = interactable;\n interaction.element = element;\n interaction.prepared = extend({}, action);\n interaction.prevEvent = event;\n interaction.updatePointer(event, event, element, true);\n\n interaction._doPhase(signalArg);\n\n const reflowPromise = win.window.Promise\n ? new win.window.Promise((resolve) => {\n interaction._reflowResolve = resolve;\n })\n : null;\n\n interaction._reflowPromise = reflowPromise;\n interaction.start(action, interactable, element);\n\n if (interaction._interacting) {\n interaction.move(signalArg);\n interaction.end(event);\n }\n else {\n interaction.stop();\n }\n\n interaction.removePointer(event, event);\n interaction.pointerIsDown = false;\n\n return reflowPromise;\n}\n\nexport default { install };\n","/* browser entry point */\n\nimport { default as interact, scope } from './interact';\nimport interactablePreventDefault from '@interactjs/core/interactablePreventDefault';\nimport inertia from '@interactjs/inertia';\nimport * as pointerEvents from '@interactjs/pointer-events';\nimport * as autoStart from '@interactjs/auto-start';\nimport * as actions from '@interactjs/actions';\nimport modifiersBase from '@interactjs/modifiers/base';\nimport * as modifiers from '@interactjs/modifiers';\nimport * as snappers from '@interactjs/utils/snappers';\nimport extend from '@interactjs/utils/extend';\nimport autoScroll from '@interactjs/auto-scroll';\nimport reflow from '@interactjs/reflow';\n\nexport function init (window) {\n scope.init(window);\n\n interact.use(interactablePreventDefault);\n\n // inertia\n interact.use(inertia);\n\n // pointerEvents\n interact.use(pointerEvents);\n\n // autoStart, hold\n interact.use(autoStart);\n\n // drag and drop, resize, gesture\n interact.use(actions);\n\n // snap, resize, etc.\n interact.use(modifiersBase);\n interact.modifiers = extend(scope.modifiers, modifiers);\n interact.snappers = snappers;\n interact.createSnapGrid = interact.snappers.grid;\n\n\n // for backwrads compatibility\n for (const type in modifiers) {\n const { _defaults, _methods } = modifiers[type];\n\n _defaults._methods = _methods;\n scope.defaults.perAction[type] = _defaults;\n }\n\n // autoScroll\n interact.use(autoScroll);\n\n // reflow\n interact.use(reflow);\n\n return interact;\n}\n\n// eslint-disable-next-line no-undef\ninteract.version = init.version = process.env.npm_package_version;\n\nexport default interact;\nexport { interact };\n","export default (thing) => !!(thing && thing.Window) && (thing instanceof thing.Window);\n","import win from './window';\nimport isWindow from './isWindow';\n\nexport const window = thing => thing === win.window || isWindow(thing);\n\nexport const docFrag = thing => object(thing) && thing.nodeType === 11;\n\nexport const object = thing => !!thing && (typeof thing === 'object');\n\nexport const func = thing => typeof thing === 'function';\n\nexport const number = thing => typeof thing === 'number' ;\n\nexport const bool = thing => typeof thing === 'boolean' ;\n\nexport const string = thing => typeof thing === 'string' ;\n\nexport const element = thing => {\n if (!thing || (typeof thing !== 'object')) { return false; }\n\n const _window = win.getWindow(thing) || win.window;\n\n return (/object|function/.test(typeof _window.Element)\n ? thing instanceof _window.Element //DOM2\n : thing.nodeType === 1 && typeof thing.nodeName === 'string');\n};\n\nexport const plainObject = thing => object(thing) &&\n !!thing.constructor &&\n thing.constructor.name === 'Object';\n\nexport const array = thing => (object(thing)\n && (typeof thing.length !== 'undefined')\n && func(thing.splice));\n","import * as arr from '@interactjs/utils/arr';\n\nclass DropEvent {\n /**\n * Class of events fired on dropzones during drags with acceptable targets.\n */\n constructor (dropStatus, dragEvent, type) {\n const { element, dropzone } = type === 'dragleave'\n ? dropStatus.prev\n : dropStatus.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.interaction = dragEvent.interaction;\n this.draggable = dragEvent.interactable;\n this.timeStamp = dragEvent.timeStamp;\n\n this.propagationStopped = this.immediatePropagationStopped = false;\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 { dropStatus } = this.interaction;\n\n if (\n (this.type !== 'dropactivate') && (\n !this.dropzone ||\n dropStatus.cur.dropzone !== this.dropzone ||\n dropStatus.cur.element !== this.target)) {\n return;\n }\n\n dropStatus.prev.dropzone = this.dropzone;\n dropStatus.prev.element = this.target;\n\n dropStatus.rejected = true;\n dropStatus.events.enter = null;\n\n this.stopImmediatePropagation();\n\n if (this.type === 'dropactivate') {\n const activeDrops = dropStatus.activeDrops;\n const index = arr.findIndex(activeDrops, ({ dropzone, element }) =>\n dropzone === this.dropzone && element === this.target);\n\n dropStatus.activeDrops = [\n ...activeDrops.slice(0, index),\n ...activeDrops.slice(index + 1),\n ];\n\n const deactivateEvent = new DropEvent(dropStatus, this.dragEvent, 'dropdeactivate');\n\n deactivateEvent.dropzone = this.dropzone;\n deactivateEvent.target = this.target;\n\n this.dropzone.fire(deactivateEvent);\n }\n else {\n this.dropzone.fire(new DropEvent(dropStatus, this.dragEvent, 'dragleave'));\n }\n }\n\n preventDefault () {}\n\n stopPropagation () {\n this.propagationStopped = true;\n }\n\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true;\n }\n}\n\nexport default DropEvent;\n","class Signals {\n constructor () {\n this.listeners = {\n // signalName: [listeners],\n };\n }\n\n on (name, listener) {\n if (!this.listeners[name]) {\n this.listeners[name] = [listener];\n return;\n }\n\n this.listeners[name].push(listener);\n }\n\n off (name, listener) {\n if (!this.listeners[name]) { return; }\n\n const index = this.listeners[name].indexOf(listener);\n\n if (index !== -1) {\n this.listeners[name].splice(index, 1);\n }\n }\n\n fire (name, arg) {\n const targetListeners = this.listeners[name];\n\n if (!targetListeners) { return; }\n\n for (const listener of targetListeners) {\n if (listener(arg, name) === false) {\n return false;\n }\n }\n }\n}\n\nexport default Signals;\n","export default (x, y) => Math.sqrt(x * x + y * y);\n","import hypot from './hypot';\nimport browser from './browser';\nimport dom from './domObjects';\nimport * as domUtils from './domUtils';\nimport domObjects from './domObjects';\nimport * as is from './is';\nimport pointerExtend from './pointerExtend';\n\nconst pointerUtils = {\n copyCoords: function (dest, src) {\n dest.page = dest.page || {};\n dest.page.x = src.page.x;\n dest.page.y = src.page.y;\n\n dest.client = dest.client || {};\n dest.client.x = src.client.x;\n dest.client.y = src.client.y;\n\n dest.timeStamp = src.timeStamp;\n },\n\n setCoordDeltas: function (targetObj, prev, cur) {\n targetObj.page.x = cur.page.x - prev.page.x;\n targetObj.page.y = cur.page.y - prev.page.y;\n targetObj.client.x = cur.client.x - prev.client.x;\n targetObj.client.y = cur.client.y - prev.client.y;\n targetObj.timeStamp = cur.timeStamp - prev.timeStamp;\n },\n\n setCoordVelocity (targetObj, delta) {\n const dt = Math.max(delta.timeStamp / 1000, 0.001);\n\n targetObj.page.x = delta.page.x / dt;\n targetObj.page.y = delta.page.y / dt;\n targetObj.client.x = delta.client.x / dt;\n targetObj.client.y = delta.client.y / dt;\n targetObj.timeStamp = dt;\n },\n\n isNativePointer: function (pointer) {\n return (pointer instanceof dom.Event || pointer instanceof dom.Touch);\n },\n\n // Get specified X/Y coords for mouse or event.touches[0]\n getXY: function (type, pointer, xy) {\n xy = xy || {};\n type = type || 'page';\n\n xy.x = pointer[type + 'X'];\n xy.y = pointer[type + 'Y'];\n\n return xy;\n },\n\n getPageXY: function (pointer, page) {\n page = page || {};\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n pointerUtils.getXY('screen', pointer, page);\n\n page.x += window.scrollX;\n page.y += window.scrollY;\n }\n else {\n pointerUtils.getXY('page', pointer, page);\n }\n\n return page;\n },\n\n getClientXY: function (pointer, client) {\n client = client || {};\n\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n pointerUtils.getXY('screen', pointer, client);\n }\n else {\n pointerUtils.getXY('client', pointer, client);\n }\n\n return client;\n },\n\n getPointerId: function (pointer) {\n return is.number(pointer.pointerId)? pointer.pointerId : pointer.identifier;\n },\n\n setCoords: function (targetObj, pointers, timeStamp) {\n const pointer = (pointers.length > 1\n ? pointerUtils.pointerAverage(pointers)\n : pointers[0]);\n\n const tmpXY = {};\n\n pointerUtils.getPageXY(pointer, tmpXY);\n targetObj.page.x = tmpXY.x;\n targetObj.page.y = tmpXY.y;\n\n pointerUtils.getClientXY(pointer, tmpXY);\n targetObj.client.x = tmpXY.x;\n targetObj.client.y = tmpXY.y;\n\n targetObj.timeStamp = is.number(timeStamp) ? timeStamp :new Date().getTime();\n },\n\n pointerExtend: pointerExtend,\n\n getTouchPair: function (event) {\n const touches = [];\n\n // array of touches is supplied\n if (is.array(event)) {\n touches[0] = event[0];\n touches[1] = event[1];\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0];\n touches[1] = event.changedTouches[0];\n }\n else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0];\n touches[1] = event.changedTouches[1];\n }\n }\n else {\n touches[0] = event.touches[0];\n touches[1] = event.touches[1];\n }\n }\n\n return touches;\n },\n\n pointerAverage: function (pointers) {\n const average = {\n pageX : 0,\n pageY : 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n };\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop] += pointer[prop];\n }\n }\n for (const prop in average) {\n average[prop] /= pointers.length;\n }\n\n return average;\n },\n\n touchBBox: function (event) {\n if (!event.length && !(event.touches && event.touches.length > 1)) {\n return;\n }\n\n const touches = pointerUtils.getTouchPair(event);\n const minX = Math.min(touches[0].pageX, touches[1].pageX);\n const minY = Math.min(touches[0].pageY, touches[1].pageY);\n const maxX = Math.max(touches[0].pageX, touches[1].pageX);\n const maxY = Math.max(touches[0].pageY, touches[1].pageY);\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n },\n\n touchDistance: function (event, deltaSource) {\n const sourceX = deltaSource + 'X';\n const sourceY = deltaSource + 'Y';\n const touches = pointerUtils.getTouchPair(event);\n\n\n const dx = touches[0][sourceX] - touches[1][sourceX];\n const dy = touches[0][sourceY] - touches[1][sourceY];\n\n return hypot(dx, dy);\n },\n\n touchAngle: function (event, prevAngle, deltaSource) {\n const sourceX = deltaSource + 'X';\n const sourceY = deltaSource + 'Y';\n const touches = pointerUtils.getTouchPair(event);\n const dx = touches[1][sourceX] - touches[0][sourceX];\n const dy = touches[1][sourceY] - touches[0][sourceY];\n const angle = 180 * Math.atan2(dy , dx) / Math.PI;\n\n return angle;\n },\n\n getPointerType: function (pointer) {\n return is.string(pointer.pointerType)\n ? pointer.pointerType\n : is.number(pointer.pointerType)\n ? [undefined, undefined,'touch', 'pen', 'mouse'][pointer.pointerType]\n // if the PointerEvent API isn't available, then the \"pointer\" must\n // be either a MouseEvent, TouchEvent, or Touch object\n : /touch/.test(pointer.type) || pointer instanceof domObjects.Touch\n ? 'touch'\n : 'mouse';\n },\n\n // [ event.target, event.currentTarget ]\n getEventTargets: function (event) {\n const path = is.func(event.composedPath) ? event.composedPath() : event.path;\n\n return [\n domUtils.getActualElement(path ? path[0] : event.target),\n domUtils.getActualElement(event.currentTarget),\n ];\n },\n\n newCoords () {\n return {\n page : { x: 0, y: 0 },\n client : { x: 0, y: 0 },\n timeStamp: 0,\n };\n },\n\n coordsToEvent: function ({ page, client, timeStamp }) {\n return {\n page,\n client,\n timeStamp,\n pageX: page.x,\n pageY: page.y,\n clientX: client.x,\n clientY: client.y,\n };\n },\n};\n\nexport default pointerUtils;\n","export default {\n base: {\n preventDefault: 'auto',\n deltaSource : 'page',\n },\n\n perAction: {\n enabled : false,\n origin: { x: 0, y: 0 },\n },\n};\n","import extend from '@interactjs/utils/extend';\nimport getOriginXY from '@interactjs/utils/getOriginXY';\nimport defaults from './defaultOptions';\nimport hypot from '@interactjs/utils/hypot';\n\nclass InteractEvent {\n /** */\n constructor (interaction, event, actionName, phase, element, related, preEnd, type) {\n element = element || interaction.element;\n\n const target = interaction.target;\n const deltaSource = (target && target.options || defaults).deltaSource;\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.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.button;\n this.buttons = event.buttons;\n this.target = element;\n this.currentTarget = element;\n this.relatedTarget = related || null;\n this.preEnd = preEnd;\n this.type = type || (actionName + (phase || ''));\n this.interaction = interaction;\n this.interactable = target;\n\n this.t0 = starting\n ? interaction.pointers[interaction.pointers.length - 1].downTime\n : prevEvent.t0;\n\n this.x0 = interaction.coords.start.page.x - origin.x;\n this.y0 = interaction.coords.start.page.y - origin.y;\n this.clientX0 = interaction.coords.start.client.x - origin.x;\n this.clientY0 = interaction.coords.start.client.y - origin.y;\n\n if (starting || ending) {\n this.delta = { x: 0, y: 0 };\n }\n else {\n this.delta = {\n x: this[deltaSource].x - prevEvent[deltaSource].x,\n y: this[deltaSource].y - prevEvent[deltaSource].y,\n };\n }\n\n this.dt = interaction.coords.delta.timeStamp;\n this.duration = this.timeStamp - this.t0;\n\n // velocity and speed in pixels per second\n this.velocity = extend({}, interaction.coords.velocity[deltaSource]);\n this.speed = hypot(this.velocity.x, this.velocity.y);\n\n this.swipe = (ending || phase === 'inertiastart')? this.getSwipe() : null;\n }\n\n get pageX () { return this.page.x; }\n get pageY () { return this.page.y; }\n set pageX (value) { this.page.x = value; }\n set pageY (value) { this.page.y = value; }\n\n get clientX () { return this.client.x; }\n get clientY () { return this.client.y; }\n set clientX (value) { this.client.x = value; }\n set clientY (value) { this.client.y = value; }\n\n get dx () { return this.delta.x; }\n get dy () { return this.delta.y; }\n set dx (value) { this.delta.x = value; }\n set dy (value) { this.delta.y = value; }\n\n get velocityX () { return this.velocity.x; }\n get velocityY () { return this.velocity.y; }\n set velocityX (value) { this.velocity.x = value; }\n set velocityY (value) { this.velocity.y = value; }\n\n getSwipe () {\n const interaction = this.interaction;\n\n if (interaction.prevEvent.speed < 600\n || this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n return null;\n }\n\n let angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI;\n const overlap = 22.5;\n\n if (angle < 0) {\n angle += 360;\n }\n\n const left = 135 - overlap <= angle && angle < 225 + overlap;\n const up = 225 - overlap <= angle && angle < 315 + overlap;\n\n const right = !left && (315 - overlap <= angle || angle < 45 + overlap);\n const down = !up && 45 - overlap <= angle && angle < 135 + overlap;\n\n return {\n up,\n down,\n left,\n right,\n angle,\n speed: interaction.prevEvent.speed,\n velocity: {\n x: interaction.prevEvent.velocityX,\n y: interaction.prevEvent.velocityY,\n },\n };\n }\n\n preventDefault () {}\n\n /** */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true;\n }\n\n /** */\n stopPropagation () {\n this.propagationStopped = true;\n }\n}\n\nexport default InteractEvent;\n","import clone from '@interactjs/utils/clone';\nimport * as is from '@interactjs/utils/is';\nimport events from '@interactjs/utils/events';\nimport extend from '@interactjs/utils/extend';\nimport * as arr from '@interactjs/utils/arr';\nimport normalizeListeners from '@interactjs/utils/normalizeListeners';\nimport Eventable from './Eventable';\n\nimport {\n getElementRect,\n nodeContains,\n trySelector,\n} from '@interactjs/utils/domUtils';\nimport { getWindow } from '@interactjs/utils/window';\nimport browser from '@interactjs/utils/browser';\n\nclass Interactable {\n get _defaults () {\n return {\n base: {},\n perAction: {},\n };\n }\n\n /** */\n constructor (target, options, defaultContext) {\n this._actions = options.actions;\n this.target = target;\n this.events = new Eventable();\n this._context = options.context || defaultContext;\n this._win = getWindow(trySelector(target)? this._context : target);\n this._doc = this._win.document;\n\n this.set(options);\n }\n\n setOnEvents (actionName, phases) {\n if (is.func(phases.onstart) ) { this.on(`${actionName}start` , phases.onstart ); }\n if (is.func(phases.onmove) ) { this.on(`${actionName}move` , phases.onmove ); }\n if (is.func(phases.onend) ) { this.on(`${actionName}end` , phases.onend ); }\n if (is.func(phases.oninertiastart)) { this.on(`${actionName}inertiastart`, phases.oninertiastart); }\n\n return this;\n }\n\n updatePerActionListeners (actionName, prev, cur) {\n if (is.array(prev)) {\n this.off(actionName, prev);\n }\n\n if (is.array(cur)) {\n this.on(actionName, cur);\n }\n }\n\n setPerAction (actionName, options) {\n const defaults = this._defaults;\n\n // for all the default per-action options\n for (const optionName in options) {\n const actionOptions = this.options[actionName];\n const optionValue = options[optionName];\n const isArray = is.array(optionValue);\n\n // remove old event listeners and add new ones\n if (optionName === 'listeners') {\n this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue);\n }\n\n // if the option value is an array\n if (isArray) {\n actionOptions[optionName] = arr.from(optionValue);\n }\n // if the option value is an object\n else if (!isArray && is.plainObject(optionValue)) {\n // copy the object\n actionOptions[optionName] = extend(\n actionOptions[optionName] || {},\n clone(optionValue));\n\n // set anabled field to true if it exists in the defaults\n if (is.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) {\n actionOptions[optionName].enabled = optionValue.enabled === false? false : true;\n }\n }\n // if the option value is a boolean and the default is an object\n else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n actionOptions[optionName].enabled = optionValue;\n }\n // if it's anything else, do a plain assignment\n else {\n actionOptions[optionName] = optionValue;\n }\n }\n }\n\n /**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {object} The object's bounding rectangle.\n */\n getRect (element) {\n element = element || this.target;\n\n if (is.string(this.target) && !(is.element(element))) {\n element = this._context.querySelector(this.target);\n }\n\n return getElementRect(element);\n }\n\n /**\n * Returns or sets the function used to calculate the interactable's\n * element's rectangle\n *\n * @param {function} [checker] A function which returns this Interactable's\n * bounding rectangle. See {@link Interactable.getRect}\n * @return {function | object} The checker function or this Interactable\n */\n rectChecker (checker) {\n if (is.func(checker)) {\n this.getRect = checker;\n\n return this;\n }\n\n if (checker === null) {\n delete this.options.getRect;\n\n return this;\n }\n\n return this.getRect;\n }\n\n _backCompatOption (optionName, newValue) {\n if (trySelector(newValue) || is.object(newValue)) {\n this.options[optionName] = newValue;\n\n for (const action of this._actions.names) {\n this.options[action][optionName] = newValue;\n }\n\n return this;\n }\n\n return this.options[optionName];\n }\n\n /**\n * Gets or sets the origin of the Interactable's element. The x and y\n * of the origin will be subtracted from action event coordinates.\n *\n * @param {Element | object | string} [origin] An HTML or SVG Element whose\n * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\n * or any CSS selector\n *\n * @return {object} The current origin or this Interactable\n */\n origin (newValue) {\n return this._backCompatOption('origin', newValue);\n }\n\n /**\n * Returns or sets the mouse coordinate types used to calculate the\n * movement of the pointer.\n *\n * @param {string} [newValue] Use 'client' if you will be scrolling while\n * interacting; Use 'page' if you want autoScroll to work\n * @return {string | object} The current deltaSource or this Interactable\n */\n deltaSource (newValue) {\n if (newValue === 'page' || newValue === 'client') {\n this.options.deltaSource = newValue;\n\n return this;\n }\n\n return this.options.deltaSource;\n }\n\n /**\n * Gets the selector context Node of the Interactable. The default is\n * `window.document`.\n *\n * @return {Node} The context Node of this Interactable\n */\n context () {\n return this._context;\n }\n\n inContext (element) {\n return (this._context === element.ownerDocument\n || nodeContains(this._context, element));\n }\n\n /**\n * Calls listeners for the given InteractEvent type bound globally\n * and directly to this Interactable\n *\n * @param {InteractEvent} iEvent The InteractEvent object to be fired on this\n * Interactable\n * @return {Interactable} this Interactable\n */\n fire (iEvent) {\n this.events.fire(iEvent);\n\n return this;\n }\n\n _onOff (method, typeArg, listenerArg, options) {\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg;\n listenerArg = null;\n }\n\n const addRemove = method === 'on' ? 'add' : 'remove';\n const listeners = normalizeListeners(typeArg, listenerArg);\n\n for (let type in listeners) {\n if (type === 'wheel') { type = browser.wheelEvent; }\n\n for (const listener of listeners[type]) {\n // if it is an action event type\n if (arr.contains(this._actions.eventTypes, type)) {\n this.events[method](type, listener);\n }\n // delegated event\n else if (is.string(this.target)) {\n events[`${addRemove}Delegate`](this.target, this._context, type, listener, options);\n }\n // remove listener from this Interatable's element\n else {\n events[addRemove](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, listener, options) {\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, listener, options) {\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) {\n const defaults = this._defaults;\n\n if (!is.object(options)) {\n options = {};\n }\n\n this.options = clone(defaults.base);\n\n for (const actionName in this._actions.methodDict) {\n const methodName = this._actions.methodDict[actionName];\n\n this.options[actionName] = {};\n this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults[actionName]));\n\n this[methodName](options[actionName]);\n }\n\n for (const setting in options) {\n if (is.func(this[setting])) {\n this[setting](options[setting]);\n }\n }\n\n return this;\n }\n\n /**\n * Remove this interactable from the list of interactables and remove it's\n * action capabilities and event listeners\n *\n * @return {interact}\n */\n unset () {\n events.remove(this.target, 'all');\n\n if (is.string(this.target)) {\n // remove delegated events\n for (const type in events.delegatedEvents) {\n const delegated = events.delegatedEvents[type];\n\n if (delegated.selectors[0] === this.target\n && delegated.contexts[0] === this._context) {\n\n delegated.selectors.splice(0, 1);\n delegated.contexts .splice(0, 1);\n delegated.listeners.splice(0, 1);\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegated[type] = null;\n }\n }\n\n events.remove(this._context, type, events.delegateListener);\n events.remove(this._context, type, events.delegateUseCapture, true);\n }\n }\n else {\n events.remove(this, 'all');\n }\n }\n}\n\nexport default Interactable;\n","import InteractEvent from './InteractEvent';\nimport * as utils from '@interactjs/utils';\n\nclass Interaction {\n get pointerMoveTolerance () {\n return 1;\n }\n\n /** */\n constructor ({ pointerType, signals }) {\n this._signals = signals;\n\n this.target = null; // current interactable being interacted with\n this.element = null; // the target element of the interactable\n this.prepared = { // action that's ready to be fired on next move event\n name : null,\n axis : null,\n edges: null,\n };\n\n // keep track of added pointers\n this.pointers = [/* { id, pointer, event, target, downTime }*/];\n\n this.coords = {\n // Starting InteractEvent pointer coordinates\n start: utils.pointer.newCoords(),\n // Previous native pointer move event coordinates\n prev: utils.pointer.newCoords(),\n // current native pointer move event coordinates\n cur: utils.pointer.newCoords(),\n // Change in coordinates and time of the pointer\n delta: utils.pointer.newCoords(),\n // pointer velocity\n velocity: utils.pointer.newCoords(),\n };\n\n this.downEvent = null; // pointerdown/mousedown/touchstart event\n this.downPointer = {};\n\n this._latestPointer = {\n pointer: null,\n event: null,\n eventTarget : null,\n };\n\n this.prevEvent = null; // previous action event\n\n this.pointerIsDown = false;\n this.pointerWasMoved = false;\n this._interacting = false;\n this._ending = false;\n\n this.pointerType = pointerType;\n\n this._signals.fire('new', this);\n }\n\n pointerDown (pointer, event, eventTarget) {\n const pointerIndex = this.updatePointer(pointer, event, eventTarget, true);\n\n this._signals.fire('down', {\n pointer,\n event,\n eventTarget,\n pointerIndex,\n interaction: this,\n });\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable({\n * // disable the default drag start by down->move\n * manualStart: true\n * })\n * // start dragging after the user holds the pointer down\n * .on('hold', function (event) {\n * var interaction = event.interaction;\n *\n * if (!interaction.interacting()) {\n * interaction.start({ name: 'drag' },\n * event.interactable,\n * event.currentTarget);\n * }\n * });\n * ```\n *\n * Start an action with the given Interactable and Element as tartgets. The\n * action must be enabled for the target Interactable and an appropriate\n * number of pointers must be held down - 1 for drag/resize, 2 for gesture.\n *\n * Use it with `interactable.able({ manualStart: false })` to always\n * [start actions manually](https://github.com/taye/interact.js/issues/114)\n *\n * @param {object} action The action to be performed - drag, resize, etc.\n * @param {Interactable} target The Interactable to target\n * @param {Element} element The DOM Element to target\n * @return {object} interact\n */\n start (action, target, element) {\n if (this.interacting()\n || !this.pointerIsDown\n || this.pointers.length < (action.name === 'gesture'? 2 : 1)) {\n return;\n }\n\n utils.copyAction(this.prepared, action);\n\n this.target = target;\n this.element = element;\n this._interacting = this._doPhase({\n interaction: this,\n event: this.downEvent,\n phase: 'start',\n });\n }\n\n pointerMove (pointer, event, eventTarget) {\n if (!this.simulation) {\n this.updatePointer(pointer, event, eventTarget, false);\n utils.pointer.setCoords(this.coords.cur, this.pointers.map(p => p.pointer));\n }\n\n const duplicateMove = (this.coords.cur.page.x === this.coords.prev.page.x\n && this.coords.cur.page.y === this.coords.prev.page.y\n && this.coords.cur.client.x === this.coords.prev.client.x\n && this.coords.cur.client.y === this.coords.prev.client.y);\n\n let dx;\n let dy;\n\n // register movement greater than pointerMoveTolerance\n if (this.pointerIsDown && !this.pointerWasMoved) {\n dx = this.coords.cur.client.x - this.coords.start.client.x;\n dy = this.coords.cur.client.y - this.coords.start.client.y;\n\n this.pointerWasMoved = utils.hypot(dx, dy) > this.pointerMoveTolerance;\n }\n\n const signalArg = {\n pointer,\n pointerIndex: this.getPointerIndex(pointer),\n event,\n eventTarget,\n dx,\n dy,\n duplicate: duplicateMove,\n interaction: this,\n };\n\n if (!duplicateMove) {\n // set pointer coordinate, time changes and velocity\n utils.pointer.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur);\n utils.pointer.setCoordVelocity(this.coords.velocity, this.coords.delta);\n }\n\n this._signals.fire('move', signalArg);\n\n if (!duplicateMove) {\n // if interacting, fire an 'action-move' signal etc\n if (this.interacting()) {\n this.move(signalArg);\n }\n\n if (this.pointerWasMoved) {\n utils.pointer.copyCoords(this.coords.prev, this.coords.cur);\n }\n }\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('dragmove', function (event) {\n * if (someCondition) {\n * // change the snap settings\n * event.interactable.draggable({ snap: { targets: [] }});\n * // fire another move event with re-calculated snap\n * event.interaction.move();\n * }\n * });\n * ```\n *\n * Force a move of the current action at the same coordinates. Useful if\n * snap/restrict has been changed and you want a movement with the new\n * settings.\n */\n move (signalArg) {\n signalArg = utils.extend({\n pointer: this._latestPointer.pointer,\n event: this._latestPointer.event,\n eventTarget: this._latestPointer.eventTarget,\n interaction: this,\n noBefore: false,\n }, signalArg || {});\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, event, eventTarget, curEventTarget) {\n const pointerIndex = this.getPointerIndex(pointer);\n\n this._signals.fire(/cancel$/i.test(event.type)? 'cancel' : 'up', {\n pointer,\n pointerIndex,\n event,\n eventTarget,\n curEventTarget,\n interaction: this,\n });\n\n if (!this.simulation) {\n this.end(event);\n }\n\n this.pointerIsDown = false;\n this.removePointer(pointer, event);\n }\n\n documentBlur (event) {\n this.end(event);\n this._signals.fire('blur', { event, interaction: this });\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('move', function (event) {\n * if (event.pageX > 1000) {\n * // end the current action\n * event.interaction.end();\n * // stop all further listeners from being called\n * event.stopImmediatePropagation();\n * }\n * });\n * ```\n *\n * @param {PointerEvent} [event]\n */\n end (event) {\n this._ending = true;\n event = event || this._latestPointer.event;\n let endPhaseResult;\n\n if (this.interacting()) {\n endPhaseResult = this._doPhase({\n event,\n interaction: this,\n phase: 'end',\n });\n }\n\n this._ending = false;\n\n if (endPhaseResult === true) {\n this.stop();\n }\n }\n\n currentAction () {\n return this._interacting? this.prepared.name: null;\n }\n\n interacting () {\n return this._interacting;\n }\n\n /** */\n stop () {\n this._signals.fire('stop', { interaction: this });\n\n this.target = this.element = null;\n\n this._interacting = false;\n this.prepared.name = this.prevEvent = null;\n }\n\n getPointerIndex (pointer) {\n const pointerId = utils.pointer.getPointerId(pointer);\n\n // mouse and pen interactions may have only one pointer\n return (this.pointerType === 'mouse' || this.pointerType === 'pen')\n ? 0\n : utils.arr.findIndex(this.pointers, curPointer => curPointer.id === pointerId);\n }\n\n getPointerInfo (pointer) {\n return this.pointers[this.getPointerIndex(pointer)];\n }\n\n updatePointer (pointer, event, eventTarget, down) {\n const id = utils.pointer.getPointerId(pointer);\n let pointerIndex = this.getPointerIndex(pointer);\n let pointerInfo = this.pointers[pointerIndex];\n\n if (!pointerInfo) {\n pointerInfo = {\n id,\n pointer,\n event,\n downTime: null,\n downTarget: null,\n };\n\n pointerIndex = this.pointers.length;\n this.pointers.push(pointerInfo);\n }\n else {\n pointerInfo.pointer = pointer;\n }\n\n if (down) {\n this.pointerIsDown = true;\n\n if (!this.interacting()) {\n utils.pointer.setCoords(this.coords.start, this.pointers.map(p => p.pointer));\n\n utils.pointer.copyCoords(this.coords.cur , this.coords.start);\n utils.pointer.copyCoords(this.coords.prev, this.coords.start);\n utils.pointer.pointerExtend(this.downPointer, pointer);\n\n this.downEvent = event;\n pointerInfo.downTime = this.coords.cur.timeStamp;\n pointerInfo.downTarget = eventTarget;\n\n this.pointerWasMoved = false;\n }\n }\n\n this._updateLatestPointer(pointer, event, eventTarget);\n\n this._signals.fire('update-pointer', {\n pointer,\n event,\n eventTarget,\n down,\n pointerInfo,\n pointerIndex,\n interaction: this,\n });\n\n return pointerIndex;\n }\n\n removePointer (pointer, event) {\n const pointerIndex = this.getPointerIndex(pointer);\n\n if (pointerIndex === -1) { return; }\n\n const pointerInfo = this.pointers[pointerIndex];\n\n this._signals.fire('remove-pointer', {\n pointer,\n event,\n pointerIndex,\n pointerInfo,\n interaction: this,\n });\n\n this.pointers.splice(pointerIndex, 1);\n }\n\n _updateLatestPointer (pointer, event, eventTarget) {\n this._latestPointer.pointer = pointer;\n this._latestPointer.event = event;\n this._latestPointer.eventTarget = eventTarget;\n }\n\n _createPreparedEvent (event, phase, preEnd, type) {\n const actionName = this.prepared.name;\n\n return new InteractEvent(this, event, actionName, phase, this.element, null, preEnd, type);\n }\n\n _fireEvent (iEvent) {\n this.target.fire(iEvent);\n\n if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n this.prevEvent = iEvent;\n }\n }\n\n _doPhase (signalArg) {\n const { event, phase, preEnd, type } = signalArg;\n\n if (!signalArg.noBefore) {\n const beforeResult = this._signals.fire(`before-action-${phase}`, signalArg);\n\n if (beforeResult === false) {\n return false;\n }\n }\n\n const iEvent = signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type);\n\n this._signals.fire(`action-${phase}`, signalArg);\n\n this._fireEvent(iEvent);\n\n this._signals.fire(`after-action-${phase}`, signalArg);\n\n return true;\n }\n}\n\n/**\n * @alias Interaction.prototype.move\n */\nInteraction.prototype.doMove = utils.warnOnce(\n function (signalArg) {\n this.move(signalArg);\n },\n 'The interaction.doMove() method has been renamed to interaction.move()');\n\nexport default Interaction;\n","import base from './base';\nimport snapModule from './snap/pointer';\nimport snapSizeModule from './snap/size';\nimport snapEdgesModule from './snap/edges';\nimport restrictModule from './restrict/pointer';\nimport restrictEdgesModule from './restrict/edges';\nimport restrictSizeModule from './restrict/size';\n\nconst { makeModifier } = base;\n\nexport const snap = makeModifier(snapModule, 'snap');\nexport const snapSize = makeModifier(snapSizeModule, 'snapSize');\nexport const snapEdges = makeModifier(snapEdgesModule, 'snapEdges');\nexport const restrict = makeModifier(restrictModule, 'restrict');\nexport const restrictEdges = makeModifier(restrictEdgesModule, 'restrictEdges');\nexport const restrictSize = makeModifier(restrictSizeModule, 'restrictSize');\n","import pointerUtils from '@interactjs/utils/pointerUtils';\n\nexport default class PointerEvent {\n /** */\n constructor (type, pointer, event, eventTarget, interaction) {\n pointerUtils.pointerExtend(this, event);\n\n if (event !== pointer) {\n pointerUtils.pointerExtend(this, pointer);\n }\n\n this.interaction = interaction;\n\n this.timeStamp = new Date().getTime();\n this.originalEvent = event;\n this.type = type;\n this.pointerId = pointerUtils.getPointerId(pointer);\n this.pointerType = pointerUtils.getPointerType(pointer);\n this.target = eventTarget;\n this.currentTarget = null;\n\n if (type === 'tap') {\n const pointerIndex = interaction.getPointerIndex(pointer);\n this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime;\n\n const interval = this.timeStamp - interaction.tapTime;\n\n this.double = !!(interaction.prevTap\n && interaction.prevTap.type !== 'doubletap'\n && interaction.prevTap.target === this.target\n && interval < 500);\n }\n else if (type === 'doubletap') {\n this.dt = pointer.timeStamp - interaction.tapTime;\n }\n }\n\n subtractOrigin ({ x: originX, y: originY }) {\n this.pageX -= originX;\n this.pageY -= originY;\n this.clientX -= originX;\n this.clientY -= originY;\n\n return this;\n }\n\n addOrigin ({ x: originX, y: originY }) {\n this.pageX += originX;\n this.pageY += originY;\n this.clientX += originX;\n this.clientY += originY;\n\n return this;\n }\n\n /** */\n preventDefault () {\n this.originalEvent.preventDefault();\n }\n\n /** */\n stopPropagation () {\n this.propagationStopped = true;\n }\n\n /** */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true;\n }\n}\n","export default (grid) => {\n const coordFields = [\n ['x', 'y'],\n ['left', 'top'],\n ['right', 'bottom'],\n ['width', 'height'],\n ].filter(([xField, yField]) => xField in grid || yField in grid);\n\n return function (x, y) {\n const {\n range,\n limits = {\n left : -Infinity,\n right : Infinity,\n top : -Infinity,\n bottom: Infinity,\n },\n offset = { x: 0, y: 0 },\n } = grid;\n\n const result = { range };\n\n for (const [xField, yField] of coordFields) {\n const gridx = Math.round((x - offset.x) / grid[xField]);\n const gridy = Math.round((y - offset.y) / grid[yField]);\n\n result[xField] = Math.max(limits.left, Math.min(limits.right , gridx * grid[xField] + offset.x));\n result[yField] = Math.max(limits.top, Math.min(limits.bottom , gridy * grid[yField] + offset.y));\n }\n\n return result;\n };\n};\n","import grid from './grid';\n\nexport {\n grid,\n};\n","/*\n * In a (windowless) server environment this file exports a factory function\n * that takes the window to use.\n *\n * var interact = require('interact.js')(windowObject);\n *\n * See https://github.com/taye/interact.js/issues/187\n */\n\nimport { init } from '@interactjs/interact';\n\nconst win = typeof window === 'object' && window;\nconst exported = win ? init(win) : init;\n\nexport default exported;\n\nif (typeof module === 'object' && !!module) {\n module.exports = exported;\n}\n","\nreturn _$interactjs_24;\n\n});\n"]} \ No newline at end of file +{"version":3,"sources":["../../scripts/minHeader.js","../../scripts/header.js","../utils/arr.js","../utils/window.js","../actions/drag.js","../utils/domObjects.js","../utils/browser.js","../utils/clone.js","../utils/domUtils.js","../utils/pointerExtend.js","../utils/events.js","../utils/extend.js","../utils/rect.js","../utils/getOriginXY.js","../utils/normalizeListeners.js","../utils/raf.js","../utils/index.js","../actions/drop/index.js","../actions/gesture.js","../actions/resize.js","../actions/index.js","../autoScroll/index.js","../autoStart/InteractableMethods.js","../autoStart/base.js","../autoStart/dragAxis.js","../autoStart/hold.js","../autoStart/index.js","../core/interactablePreventDefault.js","../modifiers/base.js","../inertia/index.js","../core/Eventable.js","../utils/interactionFinder.js","../core/interactions.js","../core/scope.js","../interact/interact.js","../modifiers/restrict/pointer.js","../modifiers/restrict/edges.js","../modifiers/restrict/size.js","../modifiers/snap/pointer.js","../modifiers/snap/size.js","../modifiers/snap/edges.js","../pointerEvents/base.js","../pointerEvents/holdRepeat.js","../pointerEvents/interactableTargets.js","../pointerEvents/index.js","../reflow/index.js","../interact/index.js","../utils/isWindow.js","../utils/is.js","../actions/drop/DropEvent.js","../utils/Signals.js","../utils/hypot.js","../utils/pointerUtils.js","../core/defaultOptions.js","../core/InteractEvent.js","../core/Interactable.js","../core/Interaction.js","../modifiers/index.js","../pointerEvents/PointerEvent.js","../utils/snappers/grid.js","../utils/snappers/index.js","index.js","../../node_modules/browser-pack-flat/_postlude"],"names":[],"mappings":"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","file":"interact.min.js","sourceRoot":"","sourcesContent":["/* interact.js v1.4.0-alpha.16+sha.5b3c738-dirty | https://raw.github.com/taye/interact.js/master/LICENSE */\n","/**\n * interact.js v1.4.0-alpha.16+sha.5b3c738-dirty\n *\n * Copyright (c) 2012-2018 Taye Adeyemi \n * Released under the MIT License.\n * https://raw.github.com/taye/interact.js/master/LICENSE\n */\n","export function contains (array, target) {\n return array.indexOf(target) !== -1;\n}\n\nexport function remove (array, target) {\n return array.splice(array.indexOf(target), 1);\n}\n\nexport function merge (target, source) {\n for (const item of source) {\n target.push(item);\n }\n\n return target;\n}\n\nexport function from (source) {\n return merge([], source);\n}\n\nexport function findIndex (array, func) {\n for (let i = 0; i < array.length; i++) {\n if (func(array[i], i, array)) {\n return i;\n }\n }\n\n return -1;\n}\n\nexport function find (array, func) {\n return array[findIndex(array, func)];\n}\n\nexport function some (array, func) {\n return findIndex(array, func) !== -1;\n}\n","import isWindow from './isWindow';\n\nconst win = {\n getWindow,\n init,\n};\n\nexport function init (window) {\n // get wrapped window if using Shadow DOM polyfill\n\n win.realWindow = window;\n\n // create a TextNode\n const el = window.document.createTextNode('');\n\n // check if it's wrapped by a polyfill\n if (el.ownerDocument !== window.document\n && typeof window.wrap === 'function'\n && window.wrap(el) === el) {\n // use wrapped window\n window = window.wrap(window);\n }\n\n win.window = window;\n}\n\nif (typeof window === 'undefined') {\n win.window = undefined;\n win.realWindow = undefined;\n}\nelse {\n init(window);\n}\n\nexport function getWindow (node) {\n if (isWindow(node)) {\n return node;\n }\n\n const rootNode = (node.ownerDocument || node);\n\n return rootNode.defaultView || win.window;\n}\n\nwin.init = init;\n\nexport default win;\n","import * as is from '@interactjs/utils/is';\nimport * as arr from '@interactjs/utils/arr';\n\nfunction install (scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope;\n\n interactions.signals.on('before-action-move', beforeMove);\n interactions.signals.on('action-resume', beforeMove);\n\n // dragmove\n interactions.signals.on('action-move', move);\n\n Interactable.prototype.draggable = drag.draggable;\n\n actions.drag = drag;\n actions.names.push('drag');\n arr.merge(actions.eventTypes, [\n 'dragstart',\n 'dragmove',\n 'draginertiastart',\n 'dragresume',\n 'dragend',\n ]);\n actions.methodDict.drag = 'draggable';\n\n defaults.drag = drag.defaults;\n}\n\nfunction beforeMove ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return; }\n\n const axis = interaction.prepared.axis;\n\n if (axis === 'x') {\n interaction.coords.cur.page.y = interaction.coords.start.page.y;\n interaction.coords.cur.client.y = interaction.coords.start.client.y;\n\n interaction.coords.velocity.client.y = 0;\n interaction.coords.velocity.page.y = 0;\n }\n else if (axis === 'y') {\n interaction.coords.cur.page.x = interaction.coords.start.page.x;\n interaction.coords.cur.client.x = interaction.coords.start.client.x;\n\n interaction.coords.velocity.client.x = 0;\n interaction.coords.velocity.page.x = 0;\n }\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'drag') { return; }\n\n const axis = interaction.prepared.axis;\n\n if (axis === 'x' || axis === 'y') {\n const opposite = axis === 'x' ? 'y' : 'x';\n\n iEvent.page[opposite] = interaction.coords.start.page[opposite];\n iEvent.client[opposite] = interaction.coords.start.client[opposite];\n iEvent.delta[opposite] = 0;\n }\n}\n\n/**\n * ```js\n * interact(element).draggable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // the axis in which the first movement must be\n * // for the drag sequence to start\n * // 'xy' by default - any direction\n * startAxis: 'x' || 'y' || 'xy',\n *\n * // 'xy' by default - don't restrict to one axis (move in any direction)\n * // 'x' or 'y' to restrict movement to either axis\n * // 'start' to restrict movement to the axis the drag started in\n * lockAxis: 'x' || 'y' || 'xy' || 'start',\n *\n * // max number of drags that can happen concurrently\n * // with elements of this Interactable. Infinity by default\n * max: Infinity,\n *\n * // max number of drags that can target the same element+Interactable\n * // 1 by default\n * maxPerElement: 2\n * });\n *\n * var isDraggable = interact('element').draggable(); // true\n * ```\n *\n * Get or set whether drag actions can be performed on the target\n *\n * @alias Interactable.prototype.draggable\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on drag events (object makes the Interactable\n * draggable)\n * @return {boolean | Interactable} boolean indicating if this can be the\n * target of drag events, or this Interctable\n */\nfunction draggable (options) {\n if (is.object(options)) {\n this.options.drag.enabled = options.enabled === false? false: true;\n this.setPerAction('drag', options);\n this.setOnEvents('drag', options);\n\n if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n this.options.drag.lockAxis = options.lockAxis;\n }\n if (/^(xy|x|y)$/.test(options.startAxis)) {\n this.options.drag.startAxis = options.startAxis;\n }\n\n return this;\n }\n\n if (is.bool(options)) {\n this.options.drag.enabled = options;\n\n return this;\n }\n\n return this.options.drag;\n}\n\nconst drag = {\n install,\n draggable,\n beforeMove,\n move,\n defaults: {\n startAxis : 'xy',\n lockAxis : 'xy',\n },\n\n checker (pointer, event, interactable) {\n const dragOptions = interactable.options.drag;\n\n return dragOptions.enabled\n ? {\n name: 'drag',\n axis: (dragOptions.lockAxis === 'start'\n ? dragOptions.startAxis\n : dragOptions.lockAxis),\n }\n : null;\n },\n\n getCursor () {\n return 'move';\n },\n};\n\nexport default drag;\n","const domObjects = {\n init,\n};\n\nfunction blank () {}\n\nexport default domObjects;\n\nfunction init (window) {\n domObjects.document = window.document;\n domObjects.DocumentFragment = window.DocumentFragment || blank;\n domObjects.SVGElement = window.SVGElement || blank;\n domObjects.SVGSVGElement = window.SVGSVGElement || blank;\n domObjects.SVGElementInstance = window.SVGElementInstance || blank;\n domObjects.Element = window.Element || blank;\n domObjects.HTMLElement = window.HTMLElement || domObjects.Element;\n\n domObjects.Event = window.Event;\n domObjects.Touch = window.Touch || blank;\n domObjects.PointerEvent = (window.PointerEvent || window.MSPointerEvent);\n}\n","import win from './window';\nimport * as is from './is';\nimport domObjects from './domObjects';\n\nconst browser = {\n init,\n};\n\nexport default browser;\n\nfunction init (window) {\n const Element = domObjects.Element;\n const navigator = win.window.navigator;\n\n // Does the browser support touch input?\n browser.supportsTouch = !!(('ontouchstart' in window) || is.func(window.DocumentTouch)\n && domObjects.document instanceof window.DocumentTouch);\n\n // Does the browser support PointerEvents\n browser.supportsPointerEvent = !!domObjects.PointerEvent;\n\n browser.isIOS = (/iP(hone|od|ad)/.test(navigator.platform));\n\n // scrolling doesn't change the result of getClientRects on iOS 7\n browser.isIOS7 = (/iP(hone|od|ad)/.test(navigator.platform)\n && /OS 7[^\\d]/.test(navigator.appVersion));\n\n browser.isIe9 = /MSIE 9/.test(navigator.userAgent);\n\n // prefix matchesSelector\n browser.prefixedMatchesSelector = 'matches' in Element.prototype\n ? 'matches'\n : 'webkitMatchesSelector' in Element.prototype\n ? 'webkitMatchesSelector'\n : 'mozMatchesSelector' in Element.prototype\n ? 'mozMatchesSelector'\n : 'oMatchesSelector' in Element.prototype\n ? 'oMatchesSelector'\n : 'msMatchesSelector';\n\n browser.pEventTypes = (domObjects.PointerEvent\n ? (domObjects.PointerEvent === window.MSPointerEvent\n ? {\n up: 'MSPointerUp',\n down: 'MSPointerDown',\n over: 'mouseover',\n out: 'mouseout',\n move: 'MSPointerMove',\n cancel: 'MSPointerCancel',\n }\n : {\n up: 'pointerup',\n down: 'pointerdown',\n over: 'pointerover',\n out: 'pointerout',\n move: 'pointermove',\n cancel: 'pointercancel',\n })\n : null);\n\n // because Webkit and Opera still use 'mousewheel' event type\n browser.wheelEvent = 'onmousewheel' in domObjects.document? 'mousewheel': 'wheel';\n\n // Opera Mobile must be handled differently\n browser.isOperaMobile = (navigator.appName === 'Opera'\n && browser.supportsTouch\n && navigator.userAgent.match('Presto'));\n}\n","import * as is from './is';\nimport * as arr from './arr';\n\nexport default function clone (source) {\n const dest = {};\n\n for (const prop in source) {\n const value = source[prop];\n\n if (is.plainObject(value)) {\n dest[prop] = clone(value);\n }\n else if (is.array(value)) {\n dest[prop] = arr.from(value);\n }\n else {\n dest[prop] = value;\n }\n }\n\n return dest;\n}\n","import win from './window';\nimport browser from './browser';\nimport * as is from './is';\nimport domObjects from './domObjects';\n\nexport function nodeContains (parent, child) {\n while (child) {\n if (child === parent) {\n return true;\n }\n\n child = child.parentNode;\n }\n\n return false;\n}\n\nexport function closest (element, selector) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) { return element; }\n\n element = parentNode(element);\n }\n\n return null;\n}\n\nexport function parentNode (node) {\n let parent = node.parentNode;\n\n if (is.docFrag(parent)) {\n // skip past #shado-root fragments\n while ((parent = parent.host) && is.docFrag(parent)) {\n continue;\n }\n\n return parent;\n }\n\n return parent;\n}\n\nexport function matchesSelector (element, selector) {\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (win.window !== win.realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ');\n }\n\n return element[browser.prefixedMatchesSelector](selector);\n}\n\n// Test for the element that's \"above\" all other qualifiers\nexport function indexOfDeepestElement (elements) {\n let deepestZoneParents = [];\n let dropzoneParents = [];\n let dropzone;\n let deepestZone = elements[0];\n let index = deepestZone? 0: -1;\n let parent;\n let child;\n let i;\n let n;\n\n for (i = 1; i < elements.length; i++) {\n dropzone = elements[i];\n\n // an element might belong to multiple selector dropzones\n if (!dropzone || dropzone === deepestZone) {\n continue;\n }\n\n if (!deepestZone) {\n deepestZone = dropzone;\n index = i;\n continue;\n }\n\n // check if the deepest or current are document.documentElement or document.rootElement\n // - if the current dropzone is, do nothing and continue\n if (dropzone.parentNode === dropzone.ownerDocument) {\n continue;\n }\n // - if deepest is, update with the current dropzone and continue to next\n else if (deepestZone.parentNode === dropzone.ownerDocument) {\n deepestZone = dropzone;\n index = i;\n continue;\n }\n\n if (!deepestZoneParents.length) {\n parent = deepestZone;\n while (parent.parentNode && parent.parentNode !== parent.ownerDocument) {\n deepestZoneParents.unshift(parent);\n parent = parent.parentNode;\n }\n }\n\n // if this element is an svg element and the current deepest is\n // an HTMLElement\n if (deepestZone instanceof domObjects.HTMLElement\n && dropzone instanceof domObjects.SVGElement\n && !(dropzone instanceof domObjects.SVGSVGElement)) {\n\n if (dropzone === deepestZone.parentNode) {\n continue;\n }\n\n parent = dropzone.ownerSVGElement;\n }\n else {\n parent = dropzone;\n }\n\n dropzoneParents = [];\n\n while (parent.parentNode !== parent.ownerDocument) {\n dropzoneParents.unshift(parent);\n parent = parent.parentNode;\n }\n\n n = 0;\n\n // get (position of last common ancestor) + 1\n while (dropzoneParents[n] && dropzoneParents[n] === deepestZoneParents[n]) {\n n++;\n }\n\n const parents = [\n dropzoneParents[n - 1],\n dropzoneParents[n],\n deepestZoneParents[n],\n ];\n\n child = parents[0].lastChild;\n\n while (child) {\n if (child === parents[1]) {\n deepestZone = dropzone;\n index = i;\n deepestZoneParents = [];\n\n break;\n }\n else if (child === parents[2]) {\n break;\n }\n\n child = child.previousSibling;\n }\n }\n\n return index;\n}\n\nexport function matchesUpTo (element, selector, limit) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return true;\n }\n\n element = parentNode(element);\n\n if (element === limit) {\n return matchesSelector(element, selector);\n }\n }\n\n return false;\n}\n\nexport function getActualElement (element) {\n return (element instanceof domObjects.SVGElementInstance\n ? element.correspondingUseElement\n : element);\n}\n\nexport function getScrollXY (relevantWindow) {\n relevantWindow = relevantWindow || win.window;\n return {\n x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft,\n y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop,\n };\n}\n\nexport function getElementClientRect (element) {\n const clientRect = (element instanceof domObjects.SVGElement\n ? element.getBoundingClientRect()\n : element.getClientRects()[0]);\n\n return clientRect && {\n left : clientRect.left,\n right : clientRect.right,\n top : clientRect.top,\n bottom: clientRect.bottom,\n width : clientRect.width || clientRect.right - clientRect.left,\n height: clientRect.height || clientRect.bottom - clientRect.top,\n };\n}\n\nexport function getElementRect (element) {\n const clientRect = getElementClientRect(element);\n\n if (!browser.isIOS7 && clientRect) {\n const scroll = getScrollXY(win.getWindow(element));\n\n clientRect.left += scroll.x;\n clientRect.right += scroll.x;\n clientRect.top += scroll.y;\n clientRect.bottom += scroll.y;\n }\n\n return clientRect;\n}\n\nexport function getPath (element) {\n const path = [];\n\n while (element) {\n path.push(element);\n element = parentNode(element);\n }\n\n return path;\n}\n\nexport function trySelector (value) {\n if (!is.string(value)) { return false; }\n\n // an exception will be raised if it is invalid\n domObjects.document.querySelector(value);\n return true;\n}\n","export default function pointerExtend (dest, source) {\n for (const prop in source) {\n const prefixedPropREs = pointerExtend.prefixedPropREs;\n let deprecated = false;\n\n // skip deprecated prefixed properties\n for (const vendor in prefixedPropREs) {\n if (prop.indexOf(vendor) === 0 && prefixedPropREs[vendor].test(prop)) {\n deprecated = true;\n break;\n }\n }\n\n if (!deprecated && typeof source[prop] !== 'function') {\n dest[prop] = source[prop];\n }\n }\n return dest;\n}\n\npointerExtend.prefixedPropREs = {\n webkit: /(Movement[XY]|Radius[XY]|RotationAngle|Force)$/,\n};\n","import * as is from './is';\nimport * as domUtils from './domUtils';\nimport pointerUtils from './pointerUtils';\nimport pExtend from './pointerExtend';\n\nimport { contains } from './arr';\n\nconst elements = [];\nconst targets = [];\n\n// {\n// type: {\n// selectors: ['selector', ...],\n// contexts : [document, ...],\n// listeners: [[listener, capture, passive], ...]\n// }\n// }\nconst delegatedEvents = {};\nconst documents = [];\n\nfunction add (element, type, listener, optionalArg) {\n const options = getOptions(optionalArg);\n let elementIndex = elements.indexOf(element);\n let target = targets[elementIndex];\n\n if (!target) {\n target = {\n events: {},\n typeCount: 0,\n };\n\n elementIndex = elements.push(element) - 1;\n targets.push(target);\n }\n\n if (!target.events[type]) {\n target.events[type] = [];\n target.typeCount++;\n }\n\n if (!contains(target.events[type], listener)) {\n element.addEventListener(type, listener, events.supportsOptions? options : !!options.capture);\n target.events[type].push(listener);\n }\n}\n\nfunction remove (element, type, listener, optionalArg) {\n const options = getOptions(optionalArg);\n const elementIndex = elements.indexOf(element);\n const target = targets[elementIndex];\n\n if (!target || !target.events) {\n return;\n }\n\n if (type === 'all') {\n for (type in target.events) {\n if (target.events.hasOwnProperty(type)) {\n remove(element, type, 'all');\n }\n }\n return;\n }\n\n if (target.events[type]) {\n const len = target.events[type].length;\n\n if (listener === 'all') {\n for (let i = 0; i < len; i++) {\n remove(element, type, target.events[type][i], options);\n }\n return;\n }\n else {\n for (let i = 0; i < len; i++) {\n if (target.events[type][i] === listener) {\n element.removeEventListener(type, listener, events.supportsOptions? options : !!options.capture);\n target.events[type].splice(i, 1);\n\n break;\n }\n }\n }\n\n if (target.events[type] && target.events[type].length === 0) {\n target.events[type] = null;\n target.typeCount--;\n }\n }\n\n if (!target.typeCount) {\n targets.splice(elementIndex, 1);\n elements.splice(elementIndex, 1);\n }\n}\n\nfunction addDelegate (selector, context, type, listener, optionalArg) {\n const options = getOptions(optionalArg);\n if (!delegatedEvents[type]) {\n delegatedEvents[type] = {\n selectors: [],\n contexts : [],\n listeners: [],\n };\n\n // add delegate listener functions\n for (const doc of documents) {\n add(doc, type, delegateListener);\n add(doc, type, delegateUseCapture, true);\n }\n }\n\n const delegated = delegatedEvents[type];\n let index;\n\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n if (delegated.selectors[index] === selector\n && delegated.contexts[index] === context) {\n break;\n }\n }\n\n if (index === -1) {\n index = delegated.selectors.length;\n\n delegated.selectors.push(selector);\n delegated.contexts .push(context);\n delegated.listeners.push([]);\n }\n\n // keep listener and capture and passive flags\n delegated.listeners[index].push([listener, !!options.capture, options.passive]);\n}\n\nfunction removeDelegate (selector, context, type, listener, optionalArg) {\n const options = getOptions(optionalArg);\n const delegated = delegatedEvents[type];\n let matchFound = false;\n let index;\n\n if (!delegated) { return; }\n\n // count from last index of delegated to 0\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n // look for matching selector and context Node\n if (delegated.selectors[index] === selector\n && delegated.contexts[index] === context) {\n\n const listeners = delegated.listeners[index];\n\n // each item of the listeners array is an array: [function, capture, passive]\n for (let i = listeners.length - 1; i >= 0; i--) {\n const [fn, capture, passive] = listeners[i];\n\n // check if the listener functions and capture and passive flags match\n if (fn === listener && capture === !!options.capture && passive === options.passive) {\n // remove the listener from the array of listeners\n listeners.splice(i, 1);\n\n // if all listeners for this interactable have been removed\n // remove the interactable from the delegated arrays\n if (!listeners.length) {\n delegated.selectors.splice(index, 1);\n delegated.contexts .splice(index, 1);\n delegated.listeners.splice(index, 1);\n\n // remove delegate function from context\n remove(context, type, delegateListener);\n remove(context, type, delegateUseCapture, true);\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegatedEvents[type] = null;\n }\n }\n\n // only remove one listener\n matchFound = true;\n break;\n }\n }\n\n if (matchFound) { break; }\n }\n }\n}\n\n// bound to the interactable context when a DOM event\n// listener is added to a selector interactable\nfunction delegateListener (event, optionalArg) {\n const options = getOptions(optionalArg);\n const fakeEvent = {};\n const delegated = delegatedEvents[event.type];\n const [eventTarget] = (pointerUtils.getEventTargets(event));\n let element = eventTarget;\n\n // duplicate the event so that currentTarget can be changed\n pExtend(fakeEvent, event);\n\n fakeEvent.originalEvent = event;\n fakeEvent.preventDefault = preventOriginalDefault;\n\n // climb up document tree looking for selector matches\n while (is.element(element)) {\n for (let i = 0; i < delegated.selectors.length; i++) {\n const selector = delegated.selectors[i];\n const context = delegated.contexts[i];\n\n if (domUtils.matchesSelector(element, selector)\n && domUtils.nodeContains(context, eventTarget)\n && domUtils.nodeContains(context, element)) {\n\n const listeners = delegated.listeners[i];\n\n fakeEvent.currentTarget = element;\n\n for (let j = 0; j < listeners.length; j++) {\n const [fn, capture, passive] = listeners[j];\n\n if (capture === !!options.capture && passive === options.passive) {\n fn(fakeEvent);\n }\n }\n }\n }\n\n element = domUtils.parentNode(element);\n }\n}\n\nfunction delegateUseCapture (event) {\n return delegateListener.call(this, event, true);\n}\n\nfunction preventOriginalDefault () {\n this.originalEvent.preventDefault();\n}\n\nfunction getOptions (param) {\n return is.object(param)? param : { capture: param };\n}\n\nconst events = {\n add,\n remove,\n\n addDelegate,\n removeDelegate,\n\n delegateListener,\n delegateUseCapture,\n delegatedEvents,\n documents,\n\n supportsOptions: false,\n supportsPassive: false,\n\n _elements: elements,\n _targets: targets,\n\n init (window) {\n window.document.createElement('div').addEventListener('test', null, {\n get capture () { return (events.supportsOptions = true); },\n get passive () { return (events.supportsPassive = true); },\n });\n },\n};\n\nexport default events;\n","export default function extend (dest, source) {\n for (const prop in source) {\n dest[prop] = source[prop];\n }\n return dest;\n}\n","import extend from './extend';\nimport * as is from './is';\nimport {\n closest,\n parentNode,\n getElementRect,\n} from './domUtils';\n\nexport function getStringOptionResult (value, interactable, element) {\n if (!is.string(value)) {\n return null;\n }\n\n if (value === 'parent') {\n value = parentNode(element);\n }\n else if (value === 'self') {\n value = interactable.getRect(element);\n }\n else {\n value = closest(element, value);\n }\n\n return value;\n}\n\nexport function resolveRectLike (value, interactable, element, functionArgs) {\n value = getStringOptionResult(value, interactable, element) || value;\n\n if (is.func(value)) {\n value = value.apply(null, functionArgs);\n }\n\n if (is.element(value)) {\n value = getElementRect(value);\n }\n\n return value;\n}\n\nexport function rectToXY (rect) {\n return rect && {\n x: 'x' in rect ? rect.x : rect.left,\n y: 'y' in rect ? rect.y : rect.top,\n };\n}\n\nexport function xywhToTlbr (rect) {\n if (rect && !('left' in rect && 'top' in rect)) {\n rect = extend({}, rect);\n\n rect.left = rect.x || 0;\n rect.top = rect.y || 0;\n rect.right = rect.right || (rect.left + rect.width);\n rect.bottom = rect.bottom || (rect.top + rect.height);\n }\n\n return rect;\n}\n\nexport function tlbrToXywh (rect) {\n if (rect && !('x' in rect && 'y' in rect)) {\n rect = extend({}, rect);\n\n rect.x = rect.left || 0;\n rect.y = rect.top || 0;\n rect.width = rect.width || (rect.right - rect.x);\n rect.height = rect.height || (rect.bottom - rect.y);\n }\n\n return rect;\n}\n\nexport default {\n getStringOptionResult,\n resolveRectLike,\n rectToXY,\n xywhToTlbr,\n tlbrToXywh,\n};\n","import {\n resolveRectLike,\n rectToXY,\n} from './rect';\n\nexport default function (target, element, action) {\n const actionOptions = target.options[action];\n const actionOrigin = actionOptions && actionOptions.origin;\n const origin = actionOrigin || target.options.origin;\n\n const originRect = resolveRectLike(origin, target, element, [target && element]);\n\n return rectToXY(originRect) || { x: 0, y: 0 };\n}\n","import * as is from './is';\nimport extend from './extend';\n\nexport default function normalize (type, listener, result) {\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((acc, t) => extend(acc, normalize(t, listener, result)), {});\n }\n\n // ({ type: fn }) -> ('', { type: fn })\n if (is.object(type)) {\n listener = type;\n type = '';\n }\n\n if (is.func(listener)) {\n result[type] = result[type] || [];\n result[type].push(listener);\n }\n else if (is.array(listener)) {\n for (const l of listener) {\n normalize(type, l, result);\n }\n }\n else if (is.object(listener)) {\n for (const prefix in listener) {\n const combinedTypes = split(prefix).map(p => `${type}${p}`);\n\n normalize(combinedTypes, listener[prefix], result);\n }\n }\n\n return result;\n}\n\nfunction split (type) {\n return type.trim().split(/ +/);\n}\n","let lastTime = 0;\nlet request;\nlet cancel;\n\nfunction init (window) {\n request = window.requestAnimationFrame;\n cancel = window.cancelAnimationFrame;\n\n if (!request) {\n const vendors = ['ms', 'moz', 'webkit', 'o'];\n\n for (const vendor of vendors) {\n request = window[`${vendor}RequestAnimationFrame`];\n cancel = window[`${vendor}CancelAnimationFrame`] || window[`${vendor}CancelRequestAnimationFrame`];\n }\n }\n\n if (!request) {\n request = callback => {\n const currTime = new Date().getTime();\n const timeToCall = Math.max(0, 16 - (currTime - lastTime));\n const token = setTimeout(function () { callback(currTime + timeToCall); },\n timeToCall);\n\n lastTime = currTime + timeToCall;\n return token;\n };\n\n cancel = token => clearTimeout(token);\n }\n}\n\nexport default {\n request: callback => request(callback),\n cancel: token => cancel(token),\n init,\n};\n","import win from './window';\n\nexport function warnOnce (method, message) {\n let warned = false;\n\n return function () {\n if (!warned) {\n win.window.console.warn(message);\n warned = true;\n }\n\n return method.apply(this, arguments);\n };\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nexport function _getQBezierValue (t, p1, p2, p3) {\n const iT = 1 - t;\n return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3;\n}\n\nexport function getQuadraticCurvePoint (startX, startY, cpX, cpY, endX, endY, position) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY),\n };\n}\n\n// http://gizma.com/easing/\nexport function easeOutQuad (t, b, c, d) {\n t /= d;\n return -c * t*(t-2) + b;\n}\n\nexport function copyAction (dest, src) {\n dest.name = src.name;\n dest.axis = src.axis;\n dest.edges = src.edges;\n\n return dest;\n}\n\nimport * as arr from './arr';\nimport * as dom from './domUtils';\nimport * as is from './is';\n\nexport {\n win,\n arr,\n dom,\n is,\n};\n\nexport { default as browser } from './browser';\nexport { default as Signals } from './Signals';\nexport { default as raf } from './raf';\nexport { default as extend } from './extend';\nexport { default as clone } from './clone';\nexport { default as getOriginXY } from './getOriginXY';\nexport { default as pointer } from './pointerUtils';\nexport { default as rect } from './rect';\nexport { default as events } from './events';\nexport { default as hypot } from './hypot';\nexport { default as normalizeListeners } from './normalizeListeners';\n","import * as utils from '@interactjs/utils';\nimport DropEvent from './DropEvent';\n\nfunction install (scope) {\n const {\n actions,\n /** @lends module:interact */\n interact,\n /** @lends Interactable */\n Interactable,\n interactions,\n defaults,\n } = scope;\n\n interactions.signals.on('after-action-start', function ({ interaction, event, iEvent: dragEvent }) {\n if (interaction.prepared.name !== 'drag') { return; }\n\n const { dropStatus } = interaction;\n\n // reset active dropzones\n dropStatus.activeDrops = null;\n dropStatus.events = null;\n\n if (!scope.dynamicDrop) {\n dropStatus.activeDrops = getActiveDrops(scope, interaction.element);\n }\n\n dropStatus.events = getDropEvents(interaction, event, dragEvent);\n\n if (dropStatus.events.activate) {\n fireActivationEvents(dropStatus.activeDrops, dropStatus.events.activate);\n }\n });\n\n interactions.signals.on('action-move', arg => onEventCreated(arg, scope));\n interactions.signals.on('action-end' , arg => onEventCreated(arg, scope));\n\n interactions.signals.on('after-action-move', function ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return; }\n\n fireDropEvents(interaction, interaction.dropStatus.events);\n interaction.dropStatus.events = {};\n });\n\n interactions.signals.on('after-action-end', function ({ interaction }) {\n if (interaction.prepared.name === 'drag') {\n fireDropEvents(interaction, interaction.dropStatus.events);\n }\n });\n\n interactions.signals.on('stop', function ({ interaction }) {\n interaction.dropStatus.activeDrops = null;\n interaction.dropStatus.events = null;\n });\n\n interactions.signals.on('new', function (interaction) {\n interaction.dropStatus = {\n cur: {\n dropzone : null, // the dropzone a drag target might be dropped into\n element : null, // the element at the time of checking\n },\n prev: {\n dropzone : null, // the dropzone that was recently dragged away from\n element : null, // the element at the time of checking\n },\n rejected : false, // wheather the potential drop was rejected from a listener\n events : null, // the drop events related to the current drag event\n activeDrops: null, // an array of { dropzone, element, rect }\n };\n });\n\n interactions.signals.on('stop', function ({ interaction: { dropStatus } }) {\n dropStatus.cur.dropzone = dropStatus.cur.element =\n dropStatus.prev.dropzone = dropStatus.prev.element = null;\n dropStatus.rejected = false;\n });\n\n Interactable.prototype.dropzone = function (options) {\n return dropzoneMethod(this, options);\n };\n\n Interactable.prototype.dropCheck = function (dragEvent, event, draggable, draggableElement, dropElement, rect) {\n return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect);\n };\n\n /**\n * Returns or sets whether the dimensions of dropzone elements are calculated\n * on every dragmove or only on dragstart for the default dropChecker\n *\n * @param {boolean} [newValue] True to check on each move. False to check only\n * before start\n * @return {boolean | interact} The current setting or interact\n */\n interact.dynamicDrop = function (newValue) {\n if (utils.is.bool(newValue)) {\n //if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n // calcRects(dropzones);\n //}\n\n scope.dynamicDrop = newValue;\n\n return interact;\n }\n return scope.dynamicDrop;\n };\n\n utils.arr.merge(actions.eventTypes, [\n 'dragenter',\n 'dragleave',\n 'dropactivate',\n 'dropdeactivate',\n 'dropmove',\n 'drop',\n ]);\n actions.methodDict.drop = 'dropzone';\n\n scope.dynamicDrop = false;\n\n defaults.drop = drop.defaults;\n}\n\nfunction collectDrops ({ interactables }, draggableElement) {\n const drops = [];\n\n // collect all dropzones and their elements which qualify for a drop\n for (const dropzone of interactables.list) {\n if (!dropzone.options.drop.enabled) { continue; }\n\n const accept = dropzone.options.drop.accept;\n\n // test the draggable draggableElement against the dropzone's accept setting\n if ((utils.is.element(accept) && accept !== draggableElement)\n || (utils.is.string(accept)\n && !utils.dom.matchesSelector(draggableElement, accept))\n || (utils.is.func(accept) && !accept({ dropzone, draggableElement }))) {\n\n continue;\n }\n\n // query for new elements if necessary\n const dropElements = utils.is.string(dropzone.target)\n ? dropzone._context.querySelectorAll(dropzone.target)\n : utils.is.array(dropzone.target) ? dropzone.target : [dropzone.target];\n\n for (const dropzoneElement of dropElements) {\n if (dropzoneElement !== draggableElement) {\n drops.push({\n dropzone,\n element: dropzoneElement,\n });\n }\n }\n }\n\n return drops;\n}\n\nfunction fireActivationEvents (activeDrops, event) {\n // loop through all active dropzones and trigger event\n for (const { dropzone, element } of activeDrops) {\n event.dropzone = dropzone;\n\n // set current element as event target\n event.target = element;\n dropzone.fire(event);\n event.propagationStopped = event.immediatePropagationStopped = false;\n }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops (scope, dragElement) {\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 ({ dropStatus, target: draggable, element: dragElement }, dragEvent, pointerEvent) {\n const validDrops = [];\n\n // collect all dropzones and their elements which qualify for a drop\n for (const { dropzone, element: dropzoneElement, rect } of dropStatus.activeDrops) {\n validDrops.push(dropzone.dropCheck(dragEvent, pointerEvent, draggable, dragElement, dropzoneElement, rect)\n ? dropzoneElement\n : null);\n }\n\n // get the most appropriate dropzone based on DOM depth and order\n const dropIndex = utils.dom.indexOfDeepestElement(validDrops);\n\n return dropStatus.activeDrops[dropIndex] || null;\n}\n\nfunction getDropEvents (interaction, pointerEvent, dragEvent) {\n const { dropStatus } = 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(dropStatus, dragEvent, 'dropactivate');\n\n dropEvents.activate.target = null;\n dropEvents.activate.dropzone = null;\n }\n if (dragEvent.type === 'dragend') {\n dropEvents.deactivate = new DropEvent(dropStatus, dragEvent, 'dropdeactivate');\n\n dropEvents.deactivate.target = null;\n dropEvents.deactivate.dropzone = null;\n }\n\n if (dropStatus.rejected) {\n return dropEvents;\n }\n\n if (dropStatus.cur.element !== dropStatus.prev.element) {\n // if there was a previous dropzone, create a dragleave event\n if (dropStatus.prev.dropzone) {\n dropEvents.leave = new DropEvent(dropStatus, dragEvent, 'dragleave');\n\n dragEvent.dragLeave = dropEvents.leave.target = dropStatus.prev.element;\n dragEvent.prevDropzone = dropEvents.leave.dropzone = dropStatus.prev.dropzone;\n }\n // if dropzone is not null, create a dragenter event\n if (dropStatus.cur.dropzone) {\n dropEvents.enter = new DropEvent(dropStatus, dragEvent, 'dragenter');\n\n dragEvent.dragEnter = dropStatus.cur.element;\n dragEvent.dropzone = dropStatus.cur.dropzone;\n }\n }\n\n if (dragEvent.type === 'dragend' && dropStatus.cur.dropzone) {\n dropEvents.drop = new DropEvent(dropStatus, dragEvent, 'drop');\n\n dragEvent.dropzone = dropStatus.cur.dropzone;\n dragEvent.relatedTarget = dropStatus.cur.element;\n }\n if (dragEvent.type === 'dragmove' && dropStatus.cur.dropzone) {\n dropEvents.move = new DropEvent(dropStatus, dragEvent, 'dropmove');\n\n dropEvents.move.dragmove = dragEvent;\n dragEvent.dropzone = dropStatus.cur.dropzone;\n }\n\n return dropEvents;\n}\n\nfunction fireDropEvents (interaction, events) {\n const { dropStatus } = interaction;\n const {\n activeDrops,\n cur,\n prev,\n } = dropStatus;\n\n if (events.leave) { prev.dropzone.fire(events.leave); }\n if (events.move ) { cur.dropzone.fire(events.move ); }\n if (events.enter) { cur.dropzone.fire(events.enter); }\n if (events.drop ) { cur.dropzone.fire(events.drop ); }\n\n if (events.deactivate) {\n fireActivationEvents(activeDrops, events.deactivate);\n }\n\n dropStatus.prev.dropzone = cur.dropzone;\n dropStatus.prev.element = cur.element;\n}\n\nfunction onEventCreated ({ interaction, iEvent, event }, scope) {\n if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') { return; }\n\n const { dropStatus } = interaction;\n\n if (scope.dynamicDrop) {\n dropStatus.activeDrops = getActiveDrops(scope, interaction.target, interaction.element);\n }\n\n const dragEvent = iEvent;\n const dropResult = getDrop(interaction, dragEvent, event);\n\n // update rejected status\n dropStatus.rejected = dropStatus.rejected &&\n !!dropResult &&\n dropResult.dropzone === dropStatus.cur.dropzone &&\n dropResult.element === dropStatus.cur.element;\n\n dropStatus.cur.dropzone = dropResult && dropResult.dropzone;\n dropStatus.cur.element = dropResult && dropResult.element;\n\n dropStatus.events = getDropEvents(interaction, event, dragEvent);\n}\n\n/**\n * ```js\n * interact(target)\n * .dropChecker(function(dragEvent, // related dragmove or dragend event\n * event, // TouchEvent/PointerEvent/MouseEvent\n * dropped, // bool result of the default checker\n * dropzone, // dropzone Interactable\n * dropElement, // dropzone elemnt\n * draggable, // draggable Interactable\n * draggableElement) {// draggable element\n *\n * return dropped && event.target.hasAttribute('allow-drop');\n * }\n * ```\n *\n * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param {boolean | object | null} [options] The new options to be set.\n * @return {boolean | Interactable} The current setting or this Interactable\n */\nfunction dropzoneMethod (interactable, options) {\n if (utils.is.object(options)) {\n interactable.options.drop.enabled = options.enabled === false? false: true;\n\n if (options.listeners) {\n const normalized = utils.normalizeListeners(options.listeners);\n // rename 'drop' to '' as it will be prefixed with 'drop'\n const corrected = Object.keys(normalized).reduce((acc, type) => {\n const correctedType = /^(enter|leave)/.test(type)\n ? `drag${type}`\n : /^(activate|deactivate|move)/.test(type)\n ? `drop${type}`\n : type;\n\n acc[correctedType] = normalized[type];\n\n return acc;\n }, {});\n\n interactable.off(interactable.options.drop.listeners);\n interactable.on(corrected);\n interactable.options.drop.listeners = corrected;\n }\n\n if (utils.is.func(options.ondrop) ) { interactable.on('drop' , options.ondrop ); }\n if (utils.is.func(options.ondropactivate) ) { interactable.on('dropactivate' , options.ondropactivate ); }\n if (utils.is.func(options.ondropdeactivate)) { interactable.on('dropdeactivate', options.ondropdeactivate); }\n if (utils.is.func(options.ondragenter) ) { interactable.on('dragenter' , options.ondragenter ); }\n if (utils.is.func(options.ondragleave) ) { interactable.on('dragleave' , options.ondragleave ); }\n if (utils.is.func(options.ondropmove) ) { interactable.on('dropmove' , options.ondropmove ); }\n\n if (/^(pointer|center)$/.test(options.overlap)) {\n interactable.options.drop.overlap = options.overlap;\n }\n else if (utils.is.number(options.overlap)) {\n interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0);\n }\n if ('accept' in options) {\n interactable.options.drop.accept = options.accept;\n }\n if ('checker' in options) {\n interactable.options.drop.checker = options.checker;\n }\n\n\n return interactable;\n }\n\n if (utils.is.bool(options)) {\n interactable.options.drop.enabled = options;\n\n return interactable;\n }\n\n return interactable.options.drop;\n}\n\nfunction dropCheckMethod (interactable, dragEvent, event, draggable, draggableElement, dropElement, rect) {\n let dropped = false;\n\n // if the dropzone has no rect (eg. display: none)\n // call the custom dropChecker or just return false\n if (!(rect = rect || interactable.getRect(dropElement))) {\n return (interactable.options.drop.checker\n ? interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n : false);\n }\n\n const dropOverlap = interactable.options.drop.overlap;\n\n if (dropOverlap === 'pointer') {\n const origin = utils.getOriginXY(draggable, draggableElement, 'drag');\n const page = utils.pointer.getPageXY(dragEvent);\n\n page.x += origin.x;\n page.y += origin.y;\n\n const horizontal = (page.x > rect.left) && (page.x < rect.right);\n const vertical = (page.y > rect.top ) && (page.y < rect.bottom);\n\n dropped = horizontal && vertical;\n }\n\n const dragRect = draggable.getRect(draggableElement);\n\n if (dragRect && dropOverlap === 'center') {\n const cx = dragRect.left + dragRect.width / 2;\n const cy = dragRect.top + dragRect.height / 2;\n\n dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom;\n }\n\n if (dragRect && utils.is.number(dropOverlap)) {\n const overlapArea = (Math.max(0, Math.min(rect.right , dragRect.right ) - Math.max(rect.left, dragRect.left))\n * Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top , dragRect.top )));\n\n const overlapRatio = overlapArea / (dragRect.width * dragRect.height);\n\n dropped = overlapRatio >= dropOverlap;\n }\n\n if (interactable.options.drop.checker) {\n dropped = interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement);\n }\n\n return dropped;\n}\n\n\nconst drop = {\n install,\n getActiveDrops,\n getDrop,\n getDropEvents,\n fireDropEvents,\n defaults: {\n enabled: false,\n accept : null,\n overlap: 'pointer',\n },\n};\n\nexport default drop;\n","import * as utils from '@interactjs/utils';\nimport InteractEvent from '@interactjs/core/InteractEvent';\n\nfunction install (scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope;\n\n const gesture = {\n defaults: {\n },\n\n checker: function (pointer, event, interactable, element, interaction) {\n if (interaction.pointers.length >= 2) {\n return { name: 'gesture' };\n }\n\n return null;\n },\n\n getCursor: function () {\n return '';\n },\n };\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 (options) {\n if (utils.is.object(options)) {\n this.options.gesture.enabled = options.enabled === false? false: true;\n this.setPerAction('gesture', options);\n this.setOnEvents('gesture', options);\n\n return this;\n }\n\n if (utils.is.bool(options)) {\n this.options.gesture.enabled = options;\n\n return this;\n }\n\n return this.options.gesture;\n };\n\n interactions.signals.on('action-start', updateGestureProps);\n interactions.signals.on('action-move', updateGestureProps);\n interactions.signals.on('action-end', updateGestureProps);\n\n interactions.signals.on('action-start', start);\n interactions.signals.on('action-move', move);\n\n interactions.signals.on('new', function (interaction) {\n interaction.gesture = {\n start: { x: 0, y: 0 },\n\n startDistance: 0, // distance between two touches of touchStart\n prevDistance : 0,\n distance : 0,\n\n scale: 1, // gesture.distance / gesture.startDistance\n\n startAngle: 0, // angle of line joining two touches\n prevAngle : 0, // angle of the previous gesture event\n };\n });\n\n actions.gesture = gesture;\n actions.names.push('gesture');\n utils.arr.merge(actions.eventTypes, [\n 'gesturestart',\n 'gesturemove',\n 'gestureend',\n ]);\n actions.methodDict.gesture = 'gesturable';\n\n defaults.gesture = gesture.defaults;\n}\n\nfunction start ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'gesture') { return; }\n\n iEvent.ds = 0;\n\n interaction.gesture.startDistance = interaction.gesture.prevDistance = iEvent.distance;\n interaction.gesture.startAngle = interaction.gesture.prevAngle = iEvent.angle;\n interaction.gesture.scale = 1;\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'gesture') { return; }\n\n iEvent.ds = iEvent.scale - interaction.gesture.scale;\n\n interaction.target.fire(iEvent);\n\n interaction.gesture.prevAngle = iEvent.angle;\n interaction.gesture.prevDistance = iEvent.distance;\n\n if (iEvent.scale !== Infinity\n && iEvent.scale !== null\n && iEvent.scale !== undefined\n && !isNaN(iEvent.scale)) {\n\n interaction.gesture.scale = iEvent.scale;\n }\n}\n\nfunction updateGestureProps ({ interaction, iEvent, event, phase }) {\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.target.options.deltaSource;\n\n iEvent.touches = [pointers[0].pointer, pointers[1].pointer];\n\n if (starting) {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource);\n iEvent.box = utils.pointer.touchBBox(pointers);\n iEvent.scale = 1;\n iEvent.ds = 0;\n iEvent.angle = utils.pointer.touchAngle(pointers, undefined, deltaSource);\n iEvent.da = 0;\n }\n else if (ending || event instanceof InteractEvent) {\n iEvent.distance = interaction.prevEvent.distance;\n iEvent.box = interaction.prevEvent.box;\n iEvent.scale = interaction.prevEvent.scale;\n iEvent.ds = iEvent.scale - 1;\n iEvent.angle = interaction.prevEvent.angle;\n iEvent.da = iEvent.angle - interaction.gesture.startAngle;\n }\n else {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource);\n iEvent.box = utils.pointer.touchBBox(pointers);\n iEvent.scale = iEvent.distance / interaction.gesture.startDistance;\n iEvent.angle = utils.pointer.touchAngle(pointers, interaction.gesture.prevAngle, deltaSource);\n\n iEvent.ds = iEvent.scale - interaction.gesture.prevScale;\n iEvent.da = iEvent.angle - interaction.gesture.prevAngle;\n }\n}\n\nexport default { install };\n","import * as utils from '@interactjs/utils';\n\nfunction install (scope) {\n const {\n actions,\n browser,\n /** @lends Interactable */\n Interactable,\n interactions,\n defaults,\n } = scope;\n\n // Less Precision with touch input\n const defaultMargin = browser.supportsTouch || browser.supportsPointerEvent? 20: 10;\n\n const resize = {\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 },\n\n checker: function (pointer, event, interactable, element, interaction, rect) {\n if (!rect) { return null; }\n\n const page = utils.extend({}, interaction.coords.cur.page);\n const options = interactable.options;\n\n if (options.resize.enabled) {\n const resizeOptions = options.resize;\n const resizeEdges = { left: false, right: false, top: false, bottom: false };\n\n // if using resize.edges\n if (utils.is.object(resizeOptions.edges)) {\n for (const edge in resizeEdges) {\n resizeEdges[edge] = checkResizeEdge(edge,\n resizeOptions.edges[edge],\n page,\n interaction._eventTarget,\n element,\n rect,\n resizeOptions.margin || defaultMargin);\n }\n\n resizeEdges.left = resizeEdges.left && !resizeEdges.right;\n resizeEdges.top = resizeEdges.top && !resizeEdges.bottom;\n\n if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n return {\n name: 'resize',\n edges: resizeEdges,\n };\n }\n }\n else {\n const right = options.resize.axis !== 'y' && page.x > (rect.right - defaultMargin);\n const bottom = options.resize.axis !== 'x' && page.y > (rect.bottom - defaultMargin);\n\n if (right || bottom) {\n return {\n name: 'resize',\n axes: (right? 'x' : '') + (bottom? 'y' : ''),\n };\n }\n }\n }\n\n return null;\n },\n\n cursors: (browser.isIe9 ? {\n x : 'e-resize',\n y : 's-resize',\n xy: 'se-resize',\n\n top : 'n-resize',\n left : 'w-resize',\n bottom : 's-resize',\n right : 'e-resize',\n topleft : 'se-resize',\n bottomright: 'se-resize',\n topright : 'ne-resize',\n bottomleft : 'ne-resize',\n } : {\n x : 'ew-resize',\n y : 'ns-resize',\n xy: 'nwse-resize',\n\n top : 'ns-resize',\n left : 'ew-resize',\n bottom : 'ns-resize',\n right : 'ew-resize',\n topleft : 'nwse-resize',\n bottomright: 'nwse-resize',\n topright : 'nesw-resize',\n bottomleft : 'nesw-resize',\n }),\n\n getCursor: function (action) {\n if (action.axis) {\n return resize.cursors[action.name + action.axis];\n }\n else if (action.edges) {\n let cursorKey = '';\n const edgeNames = ['top', 'bottom', 'left', 'right'];\n\n for (let i = 0; i < 4; i++) {\n if (action.edges[edgeNames[i]]) {\n cursorKey += edgeNames[i];\n }\n }\n\n return resize.cursors[cursorKey];\n }\n },\n };\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 (options) {\n if (utils.is.object(options)) {\n this.options.resize.enabled = options.enabled === false? false: true;\n this.setPerAction('resize', options);\n this.setOnEvents('resize', options);\n\n if (/^x$|^y$|^xy$/.test(options.axis)) {\n this.options.resize.axis = options.axis;\n }\n else if (options.axis === null) {\n this.options.resize.axis = defaults.resize.axis;\n }\n\n if (utils.is.bool(options.preserveAspectRatio)) {\n this.options.resize.preserveAspectRatio = options.preserveAspectRatio;\n }\n else if (utils.is.bool(options.square)) {\n this.options.resize.square = options.square;\n }\n\n return this;\n }\n if (utils.is.bool(options)) {\n this.options.resize.enabled = options;\n\n return this;\n }\n return this.options.resize;\n };\n\n interactions.signals.on('new', function (interaction) {\n interaction.resizeAxes = 'xy';\n });\n\n interactions.signals.on('action-start', start);\n interactions.signals.on('action-move', move);\n\n interactions.signals.on('action-start', updateEventAxes);\n interactions.signals.on('action-move', updateEventAxes);\n\n actions.resize = resize;\n actions.names.push('resize');\n utils.arr.merge(actions.eventTypes, [\n 'resizestart',\n 'resizemove',\n 'resizeinertiastart',\n 'resizeresume',\n 'resizeend',\n ]);\n actions.methodDict.resize = 'resizable';\n\n defaults.resize = resize.defaults;\n}\n\nfunction checkResizeEdge (name, value, page, element, interactableElement, rect, margin) {\n // false, '', undefined, null\n if (!value) { return false; }\n\n // true value, use pointer coords and element rect\n if (value === true) {\n // if dimensions are negative, \"switch\" edges\n const width = utils.is.number(rect.width )? rect.width : rect.right - rect.left;\n const height = utils.is.number(rect.height)? rect.height : rect.bottom - rect.top ;\n\n // don't use margin greater than half the relevent dimension\n margin = Math.min(margin, (name === 'left' || name === 'right' ? width : height) / 2);\n\n if (width < 0) {\n if (name === 'left' ) { name = 'right'; }\n else if (name === 'right') { name = 'left' ; }\n }\n if (height < 0) {\n if (name === 'top' ) { name = 'bottom'; }\n else if (name === 'bottom') { name = 'top' ; }\n }\n\n if (name === 'left' ) { return page.x < ((width >= 0? rect.left: rect.right ) + margin); }\n if (name === 'top' ) { return page.y < ((height >= 0? rect.top : rect.bottom) + margin); }\n\n if (name === 'right' ) { return page.x > ((width >= 0? rect.right : rect.left) - margin); }\n if (name === 'bottom') { return page.y > ((height >= 0? rect.bottom: rect.top ) - margin); }\n }\n\n // the remaining checks require an element\n if (!utils.is.element(element)) { return false; }\n\n return utils.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 : utils.dom.matchesUpTo(element, value, interactableElement);\n}\n\nfunction start ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n return;\n }\n\n const startRect = interaction.target.getRect(interaction.element);\n const resizeOptions = interaction.target.options.resize;\n\n /*\n * When using the `resizable.square` or `resizable.preserveAspectRatio` options, resizing from one edge\n * will affect another. E.g. with `resizable.square`, resizing to make the right edge larger will make\n * the bottom edge larger by the same amount. We call these 'linked' edges. Any linked edges will depend\n * on the active edges and the edge being interacted with.\n */\n if (resizeOptions.square || resizeOptions.preserveAspectRatio) {\n const linkedEdges = utils.extend({}, interaction.prepared.edges);\n\n linkedEdges.top = linkedEdges.top || (linkedEdges.left && !linkedEdges.bottom);\n linkedEdges.left = linkedEdges.left || (linkedEdges.top && !linkedEdges.right );\n linkedEdges.bottom = linkedEdges.bottom || (linkedEdges.right && !linkedEdges.top );\n linkedEdges.right = linkedEdges.right || (linkedEdges.bottom && !linkedEdges.left );\n\n interaction.prepared._linkedEdges = linkedEdges;\n }\n else {\n interaction.prepared._linkedEdges = null;\n }\n\n // if using `resizable.preserveAspectRatio` option, record aspect ratio at the start of the resize\n if (resizeOptions.preserveAspectRatio) {\n interaction.resizeStartAspectRatio = startRect.width / startRect.height;\n }\n\n interaction.resizeRects = {\n start : startRect,\n current : utils.extend({}, startRect),\n inverted : utils.extend({}, startRect),\n previous : utils.extend({}, startRect),\n delta : {\n left: 0, right : 0, width : 0,\n top : 0, bottom: 0, height: 0,\n },\n };\n\n iEvent.rect = interaction.resizeRects.inverted;\n iEvent.deltaRect = interaction.resizeRects.delta;\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return; }\n\n const resizeOptions = interaction.target.options.resize;\n const invert = resizeOptions.invert;\n const invertible = invert === 'reposition' || invert === 'negate';\n\n let edges = interaction.prepared.edges;\n\n // eslint-disable-next-line no-shadow\n const start = interaction.resizeRects.start;\n const current = interaction.resizeRects.current;\n const inverted = interaction.resizeRects.inverted;\n const deltaRect = interaction.resizeRects.delta;\n const previous = utils.extend(interaction.resizeRects.previous, inverted);\n const originalEdges = edges;\n\n const eventDelta = utils.extend({}, iEvent.delta);\n\n if (resizeOptions.preserveAspectRatio || resizeOptions.square) {\n // `resize.preserveAspectRatio` takes precedence over `resize.square`\n const startAspectRatio = resizeOptions.preserveAspectRatio\n ? interaction.resizeStartAspectRatio\n : 1;\n\n edges = interaction.prepared._linkedEdges;\n\n if ((originalEdges.left && originalEdges.bottom)\n || (originalEdges.right && originalEdges.top)) {\n eventDelta.y = -eventDelta.x / startAspectRatio;\n }\n else if (originalEdges.left || originalEdges.right ) { eventDelta.y = eventDelta.x / startAspectRatio; }\n else if (originalEdges.top || originalEdges.bottom) { eventDelta.x = eventDelta.y * startAspectRatio; }\n }\n\n // update the 'current' rect without modifications\n if (edges.top ) { current.top += eventDelta.y; }\n if (edges.bottom) { current.bottom += eventDelta.y; }\n if (edges.left ) { current.left += eventDelta.x; }\n if (edges.right ) { current.right += eventDelta.x; }\n\n if (invertible) {\n // if invertible, copy the current rect\n utils.extend(inverted, current);\n\n if (invert === 'reposition') {\n // swap edge values if necessary to keep width/height positive\n let swap;\n\n if (inverted.top > inverted.bottom) {\n swap = inverted.top;\n\n inverted.top = inverted.bottom;\n inverted.bottom = swap;\n }\n if (inverted.left > inverted.right) {\n swap = inverted.left;\n\n inverted.left = inverted.right;\n inverted.right = swap;\n }\n }\n }\n else {\n // if not invertible, restrict to minimum of 0x0 rect\n inverted.top = Math.min(current.top, start.bottom);\n inverted.bottom = Math.max(current.bottom, start.top);\n inverted.left = Math.min(current.left, start.right);\n inverted.right = Math.max(current.right, start.left);\n }\n\n inverted.width = inverted.right - inverted.left;\n inverted.height = inverted.bottom - inverted.top ;\n\n for (const edge in inverted) {\n deltaRect[edge] = inverted[edge] - previous[edge];\n }\n\n iEvent.edges = interaction.prepared.edges;\n iEvent.rect = inverted;\n iEvent.deltaRect = deltaRect;\n}\n\nfunction updateEventAxes ({ interaction, iEvent, action }) {\n if (action !== 'resize' || !interaction.resizeAxes) { return; }\n\n const options = interaction.target.options;\n\n if (options.resize.square) {\n if (interaction.resizeAxes === 'y') {\n iEvent.delta.x = iEvent.delta.y;\n }\n else {\n iEvent.delta.y = iEvent.delta.x;\n }\n iEvent.axes = 'xy';\n }\n else {\n iEvent.axes = interaction.resizeAxes;\n\n if (interaction.resizeAxes === 'x') {\n iEvent.delta.y = 0;\n }\n else if (interaction.resizeAxes === 'y') {\n iEvent.delta.x = 0;\n }\n }\n}\n\nexport default { install };\n","import gesture from './gesture';\nimport resize from './resize';\nimport drag from './drag';\nimport drop from './drop';\n\nfunction install (scope) {\n gesture.install(scope);\n resize.install(scope);\n drag.install(scope);\n drop.install(scope);\n}\n\nexport {\n gesture,\n resize,\n drag,\n drop,\n install,\n};\n","import raf from '@interactjs/utils/raf';\nimport { getWindow } from '@interactjs/utils/window';\nimport * as is from '@interactjs/utils/is';\nimport * as domUtils from '@interactjs/utils/domUtils';\nimport { getStringOptionResult } from '@interactjs/utils/rect';\n\nfunction install (scope) {\n const {\n interactions,\n defaults,\n actions,\n } = scope;\n\n const autoScroll = scope.autoScroll = {\n defaults: {\n enabled : false,\n container: null, // the item that is scrolled (Window or HTMLElement)\n margin : 60,\n speed : 300, // the scroll speed in pixels per second\n },\n\n interaction: null,\n i: null, // the handle returned by window.setInterval\n x: 0, y: 0, // Direction each pulse is to scroll in\n\n isScrolling: false,\n prevTime: 0,\n\n start: function (interaction) {\n autoScroll.isScrolling = true;\n raf.cancel(autoScroll.i);\n\n interaction.autoScroll = autoScroll;\n autoScroll.interaction = interaction;\n autoScroll.prevTime = new Date().getTime();\n autoScroll.i = raf.request(autoScroll.scroll);\n },\n\n stop: function () {\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: function () {\n const { interaction } = autoScroll;\n const { target: interactable, element } = interaction;\n const options = interactable.options[autoScroll.interaction.prepared.name].autoScroll;\n const container = getContainer(options.container, interactable, element);\n const now = new Date().getTime();\n // change in time in seconds\n const dt = (now - autoScroll.prevTime) / 1000;\n // displacement\n const s = options.speed * dt;\n\n if (s >= 1) {\n const scrollBy = {\n x: autoScroll.x * s,\n y: autoScroll.y * s,\n };\n\n if (scrollBy.x || scrollBy.y) {\n const prevScroll = getScroll(container);\n\n if (is.window(container)) {\n container.scrollBy(scrollBy.x, scrollBy.y);\n }\n else if (container) {\n container.scrollLeft += scrollBy.x;\n container.scrollTop += scrollBy.y;\n }\n\n const curScroll = getScroll(container);\n const delta = {\n x: curScroll.x - prevScroll.x,\n y: curScroll.y - prevScroll.y,\n };\n\n if (delta.x || delta.y) {\n interactable.fire({\n type: 'autoscroll',\n target: element,\n interactable,\n delta,\n interaction,\n container,\n });\n }\n }\n\n autoScroll.prevTime = now;\n }\n\n if (autoScroll.isScrolling) {\n raf.cancel(autoScroll.i);\n autoScroll.i = raf.request(autoScroll.scroll);\n }\n },\n check: function (interactable, actionName) {\n const options = interactable.options;\n\n return options[actionName].autoScroll && options[actionName].autoScroll.enabled;\n },\n onInteractionMove: function ({ interaction, pointer }) {\n if (!(interaction.interacting()\n && autoScroll.check(interaction.target, interaction.prepared.name))) {\n return;\n }\n\n if (interaction.simulation) {\n autoScroll.x = autoScroll.y = 0;\n return;\n }\n\n let top;\n let right;\n let bottom;\n let left;\n\n const { target: interactable, element } = interaction;\n const options = interactable.options[interaction.prepared.name].autoScroll;\n const container = getContainer(options.container, interactable, element);\n\n if (is.window(container)) {\n left = pointer.clientX < autoScroll.margin;\n top = pointer.clientY < autoScroll.margin;\n right = pointer.clientX > container.innerWidth - autoScroll.margin;\n bottom = pointer.clientY > container.innerHeight - autoScroll.margin;\n }\n else {\n const rect = domUtils.getElementClientRect(container);\n\n left = pointer.clientX < rect.left + autoScroll.margin;\n top = pointer.clientY < rect.top + autoScroll.margin;\n right = pointer.clientX > rect.right - autoScroll.margin;\n bottom = pointer.clientY > rect.bottom - autoScroll.margin;\n }\n\n autoScroll.x = (right ? 1: left? -1: 0);\n autoScroll.y = (bottom? 1: top? -1: 0);\n\n if (!autoScroll.isScrolling) {\n // set the autoScroll properties to those of the target\n autoScroll.margin = options.margin;\n autoScroll.speed = options.speed;\n\n autoScroll.start(interaction);\n }\n },\n };\n\n interactions.signals.on('new', function (interaction) {\n interaction.autoScroll = null;\n });\n\n interactions.signals.on('stop', autoScroll.stop);\n\n interactions.signals.on('action-move', autoScroll.onInteractionMove);\n\n actions.eventTypes.push('autoscroll');\n defaults.perAction.autoScroll = autoScroll.defaults;\n}\n\nexport function getContainer (value, interactable, element) {\n return (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element);\n}\n\nexport function getScroll (container) {\n if (is.window(container)) { container = window.document.body; }\n\n return { x: container.scrollLeft, y: container.scrollTop };\n}\n\nexport function getScrollSize (container) {\n if (is.window(container)) { container = window.document.body; }\n\n return { x: container.scrollWidth, y: container.scrollHeight };\n}\n\nexport function getScrollSizeDelta ({ interaction, element }, func) {\n const scrollOptions = interaction && interaction.target.options[interaction.prepared.name].autoScroll;\n\n if (!scrollOptions || !scrollOptions.enabled) {\n func();\n return { x: 0, y: 0 };\n }\n\n const scrollContainer = getContainer(\n scrollOptions.container,\n interaction.target,\n element\n );\n\n const prevSize = getScroll(scrollContainer);\n func();\n const curSize = getScroll(scrollContainer);\n\n return {\n x: curSize.x - prevSize.x,\n y: curSize.y - prevSize.y,\n };\n}\n\nexport default { install };\n","import * as is from '@interactjs/utils/is';\nimport * as domUtils from '@interactjs/utils/domUtils';\n\nimport { warnOnce } from '@interactjs/utils';\n\nfunction install (scope) {\n const {\n /** @lends Interactable */\n Interactable,\n actions,\n } = scope;\n\n Interactable.prototype.getAction = function (pointer, event, interaction, element) {\n const action = this.defaultActionChecker(pointer, event, interaction, element);\n\n if (this.options.actionChecker) {\n return this.options.actionChecker(pointer, event, action, this, element, interaction);\n }\n\n return action;\n };\n\n /**\n * ```js\n * interact(element, { ignoreFrom: document.getElementById('no-action') });\n * // or\n * interact(element).ignoreFrom('input, textarea, a');\n * ```\n * @deprecated\n * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n * of it's parents match the given CSS selector or Element, no\n * drag/resize/gesture is started.\n *\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to not ignore any elements\n * @return {string | Element | object} The current ignoreFrom value or this\n * Interactable\n */\n Interactable.prototype.ignoreFrom = warnOnce(function (newValue) {\n return this._backCompatOption('ignoreFrom', newValue);\n }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).');\n\n /**\n * ```js\n *\n * @deprecated\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to allow from any element\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */\n Interactable.prototype.allowFrom = warnOnce(function (newValue) {\n return this._backCompatOption('allowFrom', newValue);\n }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).');\n\n Interactable.prototype.testIgnore = function (ignoreFrom, interactableElement, element) {\n if (!ignoreFrom || !is.element(element)) { return false; }\n\n if (is.string(ignoreFrom)) {\n return domUtils.matchesUpTo(element, ignoreFrom, interactableElement);\n }\n else if (is.element(ignoreFrom)) {\n return domUtils.nodeContains(ignoreFrom, element);\n }\n\n return false;\n };\n\n Interactable.prototype.testAllow = function (allowFrom, interactableElement, element) {\n if (!allowFrom) { return true; }\n\n if (!is.element(element)) { return false; }\n\n if (is.string(allowFrom)) {\n return domUtils.matchesUpTo(element, allowFrom, interactableElement);\n }\n else if (is.element(allowFrom)) {\n return domUtils.nodeContains(allowFrom, element);\n }\n\n return false;\n };\n\n Interactable.prototype.testIgnoreAllow = function (options, interactableElement, eventTarget) {\n return (!this.testIgnore(options.ignoreFrom, interactableElement, eventTarget)\n && this.testAllow(options.allowFrom, interactableElement, eventTarget));\n };\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 * Gets 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 = function (checker) {\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\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 = function (newValue) {\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\n Interactable.prototype.defaultActionChecker = function (pointer, event, interaction, element) {\n const rect = this.getRect(element);\n const buttons = event.buttons || ({\n 0: 1,\n 1: 4,\n 3: 8,\n 4: 16,\n })[event.button];\n let action = null;\n\n for (const actionName of actions.names) {\n // check mouseButton setting if the pointer is down\n if (interaction.pointerIsDown\n && /mouse|pointer/.test(interaction.pointerType)\n && (buttons & this.options[actionName].mouseButtons) === 0) {\n continue;\n }\n\n action = actions[actionName].checker(pointer, event, this, element, interaction, rect);\n\n if (action) {\n return action;\n }\n }\n };\n}\n\nexport default { install };\n","import * as utils from '@interactjs/utils';\nimport InteractableMethods from './InteractableMethods';\n\nfunction install (scope) {\n const {\n interact,\n interactions,\n defaults,\n Signals,\n } = scope;\n\n interact.use(InteractableMethods);\n\n // set cursor style on mousedown\n interactions.signals.on('down', function ({ interaction, pointer, event, eventTarget }) {\n if (interaction.interacting()) { return; }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope);\n prepare(interaction, actionInfo, scope);\n });\n\n // set cursor style on mousemove\n interactions.signals.on('move', function ({ interaction, pointer, event, eventTarget }) {\n if (interaction.pointerType !== 'mouse'\n || interaction.pointerIsDown\n || interaction.interacting()) { return; }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope);\n prepare(interaction, actionInfo, scope);\n });\n\n interactions.signals.on('move', function (arg) {\n const { interaction, event } = arg;\n\n if (!interaction.pointerIsDown\n || interaction.interacting()\n || !interaction.pointerWasMoved\n || !interaction.prepared.name) {\n return;\n }\n\n scope.autoStart.signals.fire('before-start', arg);\n\n const target = interaction.target;\n\n if (interaction.prepared.name && target) {\n // check manualStart and interaction limit\n if (target.options[interaction.prepared.name].manualStart\n || !withinInteractionLimit(target, interaction.element, interaction.prepared, scope)) {\n interaction.stop(event);\n }\n else {\n interaction.start(interaction.prepared, target, interaction.element);\n }\n }\n });\n\n interactions.signals.on('stop', function ({ interaction }) {\n const target = interaction.target;\n\n if (target && target.options.styleCursor) {\n setCursor(interaction.element, '', scope);\n }\n });\n\n interact.maxInteractions = maxInteractions;\n\n defaults.base.actionChecker = null;\n defaults.base.styleCursor = true;\n\n utils.extend(defaults.perAction, {\n manualStart: false,\n max: Infinity,\n maxPerElement: 1,\n allowFrom: null,\n ignoreFrom: null,\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons: 1,\n });\n\n /**\n * Returns or sets the maximum number of concurrent interactions allowed. By\n * default only 1 interaction is allowed at a time (for backwards\n * compatibility). To allow multiple interactions on the same Interactables and\n * elements, you need to enable it in the draggable, resizable and gesturable\n * `'max'` and `'maxPerElement'` options.\n *\n * @alias module:interact.maxInteractions\n *\n * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n */\n interact.maxInteractions = newValue => maxInteractions(newValue, scope);\n\n scope.autoStart = {\n // Allow this many interactions to happen simultaneously\n maxInteractions: Infinity,\n withinInteractionLimit,\n cursorElement: null,\n signals: new Signals(),\n };\n}\n\n// Check if the current target supports the action.\n// If so, return the validated action. Otherwise, return null\nfunction validateAction (action, interactable, element, eventTarget, scope) {\n if (utils.is.object(action)\n && interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget)\n && interactable.options[action.name].enabled\n && withinInteractionLimit(interactable, element, action, scope)) {\n return action;\n }\n\n return null;\n}\n\nfunction validateSelector (interaction, pointer, event, matches, matchElements, eventTarget, scope) {\n for (let i = 0, len = matches.length; i < len; i++) {\n const match = matches[i];\n const matchElement = matchElements[i];\n const action = validateAction(\n match.getAction(pointer, event, interaction, matchElement),\n match,\n matchElement,\n eventTarget,\n scope);\n\n if (action) {\n return {\n action,\n target: match,\n element: matchElement,\n };\n }\n }\n\n return {};\n}\n\nfunction getActionInfo (interaction, pointer, event, eventTarget, scope) {\n let matches = [];\n let matchElements = [];\n\n let element = eventTarget;\n\n function pushMatches (interactable) {\n matches.push(interactable);\n matchElements.push(element);\n }\n\n while (utils.is.element(element)) {\n matches = [];\n matchElements = [];\n\n scope.interactables.forEachMatch(element, pushMatches);\n\n const actionInfo = validateSelector(interaction, pointer, event, matches, matchElements, eventTarget, scope);\n\n if (actionInfo.action\n && !actionInfo.target.options[actionInfo.action.name].manualStart) {\n return actionInfo;\n }\n\n element = utils.dom.parentNode(element);\n }\n\n return {};\n}\n\nfunction prepare (interaction, { action, target, element }, scope) {\n action = action || {};\n\n if (interaction.target && interaction.target.options.styleCursor) {\n setCursor(interaction.element, '', scope);\n }\n\n interaction.target = target;\n interaction.element = element;\n utils.copyAction(interaction.prepared, action);\n\n if (target && target.options.styleCursor) {\n const cursor = action? scope.actions[action.name].getCursor(action) : '';\n setCursor(interaction.element, cursor, scope);\n }\n\n scope.autoStart.signals.fire('prepared', { interaction: interaction });\n}\n\nfunction withinInteractionLimit (interactable, element, action, scope) {\n const options = interactable.options;\n const maxActions = options[action.name].max;\n const maxPerElement = options[action.name].maxPerElement;\n const autoStartMax = scope.autoStart.maxInteractions;\n let activeInteractions = 0;\n let targetCount = 0;\n let targetElementCount = 0;\n\n // no actions if any of these values == 0\n if (!(maxActions && maxPerElement && autoStartMax)) { return; }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name;\n\n if (!interaction.interacting()) { continue; }\n\n activeInteractions++;\n\n if (activeInteractions >= autoStartMax) {\n return false;\n }\n\n if (interaction.target !== interactable) { continue; }\n\n targetCount += (otherAction === action.name)|0;\n\n if (targetCount >= maxActions) {\n return false;\n }\n\n if (interaction.element === element) {\n targetElementCount++;\n\n if (otherAction === action.name && targetElementCount >= maxPerElement) {\n return false;\n }\n }\n }\n\n return autoStartMax > 0;\n}\n\nfunction maxInteractions (newValue, scope) {\n if (utils.is.number(newValue)) {\n scope.autoStart.maxInteractions = newValue;\n\n return this;\n }\n\n return scope.autoStart.maxInteractions;\n}\n\nfunction setCursor (element, cursor, scope) {\n if (scope.autoStart.cursorElement) {\n scope.autoStart.cursorElement.style.cursor = '';\n }\n\n element.ownerDocument.documentElement.style.cursor = cursor;\n element.style.cursor = cursor;\n scope.autoStart.cursorElement = cursor ? element : null;\n}\n\nexport default {\n install,\n maxInteractions,\n withinInteractionLimit,\n validateAction,\n};\n","import * as is from '@interactjs/utils/is';\nimport autoStart from './base';\n\nimport { parentNode } from '@interactjs/utils/domUtils';\n\nfunction install (scope) {\n scope.autoStart.signals.on('before-start', function ({ interaction, eventTarget, dx, dy }) {\n if (interaction.prepared.name !== 'drag') { return; }\n\n // check if a drag is in the correct axis\n const absX = Math.abs(dx);\n const absY = Math.abs(dy);\n const targetOptions = interaction.target.options.drag;\n const startAxis = targetOptions.startAxis;\n const currentAxis = (absX > absY ? 'x' : absX < absY ? 'y' : 'xy');\n\n interaction.prepared.axis = targetOptions.lockAxis === 'start'\n ? currentAxis[0] // always lock to one axis even if currentAxis === 'xy'\n : targetOptions.lockAxis;\n\n // if the movement isn't in the startAxis of the interactable\n if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n // cancel the prepared action\n interaction.prepared.name = null;\n\n // then try to get a drag from another ineractable\n let element = eventTarget;\n\n const getDraggable = function (interactable) {\n if (interactable === interaction.target) { return; }\n\n const options = interaction.target.options.drag;\n\n if (!options.manualStart\n && interactable.testIgnoreAllow(options, element, eventTarget)) {\n\n const action = interactable.getAction(\n interaction.downPointer, interaction.downEvent, interaction, element);\n\n if (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.prepared.name = 'drag';\n interaction.target = interactable;\n interaction.element = element;\n break;\n }\n\n element = parentNode(element);\n }\n }\n });\n\n function checkStartAxis (startAxis, interactable) {\n if (!interactable) { return false; }\n\n const thisAxis = interactable.options.drag.startAxis;\n\n return (startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis);\n }\n}\n\nexport default { install };\n","function install (scope) {\n const {\n autoStart,\n interactions,\n defaults,\n } = scope;\n\n defaults.perAction.hold = 0;\n defaults.perAction.delay = 0;\n\n interactions.signals.on('new', function (interaction) {\n interaction.autoStartHoldTimer = null;\n });\n\n autoStart.signals.on('prepared', function ({ interaction }) {\n const hold = getHoldDuration(interaction);\n\n if (hold > 0) {\n interaction.autoStartHoldTimer = setTimeout(() => {\n interaction.start(interaction.prepared, interaction.target, interaction.element);\n }, hold);\n }\n });\n\n interactions.signals.on('move', function ({ interaction, duplicate }) {\n if (interaction.pointerWasMoved && !duplicate) {\n clearTimeout(interaction.autoStartHoldTimer);\n }\n });\n\n // prevent regular down->move autoStart\n autoStart.signals.on('before-start', function ({ interaction }) {\n const hold = getHoldDuration(interaction);\n\n if (hold > 0) {\n interaction.prepared.name = null;\n }\n });\n}\n\nfunction getHoldDuration (interaction) {\n const actionName = interaction.prepared && interaction.prepared.name;\n\n if (!actionName) { return null; }\n\n const options = interaction.target.options;\n\n return options[actionName].hold || options[actionName].delay;\n}\n\nexport default {\n install,\n getHoldDuration,\n};\n","import autoStart from './base';\nimport hold from './hold';\nimport dragAxis from './dragAxis';\n\nfunction install (scope) {\n autoStart.install(scope);\n hold.install(scope);\n dragAxis.install(scope);\n}\n\nexport {\n autoStart,\n hold,\n dragAxis,\n install,\n};\n","import * as is from '@interactjs/utils/is';\nimport events from '@interactjs/utils/events';\n\nimport { nodeContains, matchesSelector } from '@interactjs/utils/domUtils';\nimport { getWindow } from '@interactjs/utils/window';\n\nfunction preventDefault (interactable, newValue) {\n if (/^(always|never|auto)$/.test(newValue)) {\n interactable.options.preventDefault = newValue;\n return interactable;\n }\n\n if (is.bool(newValue)) {\n interactable.options.preventDefault = newValue? 'always' : 'never';\n return interactable;\n }\n\n return interactable.options.preventDefault;\n}\n\nfunction checkAndPreventDefault (interactable, scope, event) {\n const setting = interactable.options.preventDefault;\n\n if (setting === 'never') { return; }\n\n if (setting === 'always') {\n event.preventDefault();\n return;\n }\n\n // setting === 'auto'\n\n // if the browser supports passive event listeners and isn't running on iOS,\n // don't preventDefault of touch{start,move} events. CSS touch-action and\n // user-select should be used instead of calling event.preventDefault().\n if (events.supportsPassive && /^touch(start|move)$/.test(event.type)) {\n const doc = getWindow(event.target).document;\n const docOptions = scope.getDocOptions(doc);\n\n if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) {\n return;\n }\n }\n\n // don't preventDefault of pointerdown events\n if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) {\n return;\n }\n\n // don't preventDefault on editable elements\n if (is.element(event.target)\n && matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')) {\n return;\n }\n\n event.preventDefault();\n}\n\nfunction onInteractionEvent ({ interaction, event }) {\n if (interaction.target) {\n interaction.target.checkAndPreventDefault(event);\n }\n}\n\nexport function install (scope) {\n /** @lends Interactable */\n const Interactable = scope.Interactable;\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 = function (newValue) {\n return preventDefault(this, newValue);\n };\n\n Interactable.prototype.checkAndPreventDefault = function (event) {\n return checkAndPreventDefault(this, scope, event);\n };\n\n for (const eventSignal of ['down', 'move', 'up', 'cancel']) {\n scope.interactions.signals.on(eventSignal, onInteractionEvent);\n }\n\n // prevent native HTML5 drag on interact.js target elements\n scope.interactions.eventMap.dragstart = function preventNativeDrag (event) {\n for (const interaction of scope.interactions.list) {\n\n if (interaction.element\n && (interaction.element === event.target\n || nodeContains(interaction.element, event.target))) {\n\n interaction.target.checkAndPreventDefault(event);\n return;\n }\n }\n };\n}\n\nexport default { install };\n","import extend from '@interactjs/utils/extend';\n\nfunction install (scope) {\n const {\n interactions,\n } = scope;\n\n scope.defaults.perAction.modifiers = [];\n scope.modifiers = {};\n\n interactions.signals.on('new', function (interaction) {\n interaction.modifiers = {\n startOffset: { left: 0, right: 0, top: 0, bottom: 0 },\n offsets : {},\n states : null,\n result : null,\n };\n });\n\n interactions.signals.on('before-action-start' , arg =>\n start(arg, arg.interaction.coords.start.page, scope.modifiers));\n\n interactions.signals.on('action-resume', arg => {\n beforeMove(arg);\n start(arg, arg.interaction.coords.cur.page, scope.modifiers);\n });\n\n interactions.signals.on('before-action-move', beforeMove);\n interactions.signals.on('before-action-end', beforeEnd);\n\n interactions.signals.on('before-action-start', setCoords);\n interactions.signals.on('before-action-move', setCoords);\n\n interactions.signals.on('after-action-start', restoreCoords);\n interactions.signals.on('after-action-move', restoreCoords);\n interactions.signals.on('stop', stop);\n}\n\nfunction startAll (arg) {\n for (const state of arg.states) {\n if (state.methods.start) {\n arg.state = state;\n state.methods.start(arg);\n }\n }\n}\n\nfunction getRectOffset (rect, coords) {\n return rect\n ? {\n left : coords.x - rect.left,\n top : coords.y - rect.top,\n right : rect.right - coords.x,\n bottom: rect.bottom - coords.y,\n }\n : {\n left : 0,\n top : 0,\n right : 0,\n bottom: 0,\n };\n}\n\nfunction start ({ interaction, phase }, pageCoords, registeredModifiers) {\n const { target: interactable, element } = interaction;\n const modifierList = getModifierList(interaction, registeredModifiers);\n const states = prepareStates(modifierList);\n\n const rect = extend({}, interactable.getRect(element));\n\n if (!('width' in rect)) { rect.width = rect.right - rect.left; }\n if (!('height' in rect)) { rect.height = rect.bottom - rect.top ; }\n\n const startOffset = getRectOffset(rect, pageCoords);\n\n interaction.modifiers.startOffset = startOffset;\n interaction.modifiers.startDelta = { x: 0, y: 0 };\n\n const arg = {\n interaction,\n interactable,\n element,\n pageCoords,\n phase,\n rect,\n startOffset,\n states,\n preEnd: false,\n requireEndOnly: false,\n };\n\n interaction.modifiers.states = states;\n interaction.modifiers.result = null;\n startAll(arg);\n\n arg.pageCoords = extend({}, interaction.coords.start.page);\n\n const result = interaction.modifiers.result = setAll(arg);\n\n return result;\n}\n\nfunction setAll (arg) {\n const { interaction, phase, preEnd, requireEndOnly, rect, skipModifiers } = arg;\n\n const states = skipModifiers\n ? arg.states.slice(interaction.modifiers.skip)\n : arg.states;\n\n arg.coords = extend({}, arg.pageCoords);\n arg.rect = extend({}, rect);\n\n const result = {\n delta: { x: 0, y: 0 },\n coords: arg.coords,\n changed: true,\n };\n\n for (const state of states) {\n const { options } = state;\n\n if (!state.methods.set ||\n !shouldDo(options, preEnd, requireEndOnly, phase)) { continue; }\n\n arg.state = state;\n state.methods.set(arg);\n }\n\n result.delta.x = arg.coords.x - arg.pageCoords.x;\n result.delta.y = arg.coords.y - arg.pageCoords.y;\n\n const prevCoords = interaction.modifiers.result\n ? interaction.modifiers.result.coords\n : interaction.coords.prev.page;\n\n result.changed = (\n prevCoords.x !== result.coords.x ||\n prevCoords.y !== result.coords.y);\n\n return result;\n}\n\nfunction prepareStates (modifierList) {\n const states = [];\n\n for (let index = 0; index < modifierList.length; index++) {\n const { options, methods } = modifierList[index];\n\n if (options && options.enabled === false) { continue; }\n\n const state = {\n options,\n methods,\n index,\n };\n\n states.push(state);\n }\n\n return states;\n}\n\nfunction beforeMove ({ interaction, phase, preEnd, skipModifiers }) {\n const { target: interactable, element } = interaction;\n const modifierResult = setAll(\n {\n interaction,\n interactable,\n element,\n preEnd,\n phase,\n pageCoords: interaction.coords.cur.page,\n rect: interactable.getRect(element),\n states: interaction.modifiers.states,\n requireEndOnly: false,\n skipModifiers,\n });\n\n interaction.modifiers.result = modifierResult;\n\n // don't fire an action move if a modifier would keep the event in the same\n // cordinates as before\n if (!modifierResult.changed && interaction.interacting()) {\n return false;\n }\n}\n\nfunction beforeEnd (arg) {\n const { interaction, event, noPreEnd } = arg;\n const states = interaction.modifiers.states;\n\n if (noPreEnd || !states || !states.length) {\n return;\n }\n\n let didPreEnd = false;\n\n for (const state of states) {\n arg.state = state;\n const { options, methods } = state;\n\n const endResult = methods.beforeEnd && methods.beforeEnd(arg);\n\n if (endResult === false) {\n return false;\n }\n\n // if the endOnly option is true for any modifier\n if (!didPreEnd && shouldDo(options, true, true)) {\n // fire a move event at the modified coordinates\n interaction.move({ event, preEnd: true });\n didPreEnd = true;\n }\n }\n}\n\nfunction stop (arg) {\n const { interaction } = arg;\n const states = interaction.modifiers.states;\n\n if (!states || !states.length) {\n return;\n }\n\n const modifierArg = extend({\n states,\n interactable: interaction.target,\n element: interaction.element,\n }, arg);\n\n\n restoreCoords(arg);\n\n for (const state of states) {\n modifierArg.state = state;\n\n if (state.methods.stop) { state.methods.stop(modifierArg); }\n }\n\n arg.interaction.modifiers.states = null;\n}\n\nfunction setCoords (arg) {\n const { interaction, phase } = arg;\n const curCoords = arg.curCoords || interaction.coords.cur;\n const startCoords = arg.startCoords || interaction.coords.start;\n const { result, startDelta } = interaction.modifiers;\n const curDelta = result.delta;\n\n if (phase === 'start') {\n extend(interaction.modifiers.startDelta, result.delta);\n }\n\n for (const [coordsSet, delta] of [[startCoords, startDelta], [curCoords, curDelta]]) {\n coordsSet.page.x += delta.x;\n coordsSet.page.y += delta.y;\n coordsSet.client.x += delta.x;\n coordsSet.client.y += delta.y;\n }\n}\n\nfunction restoreCoords ({ interaction: { coords, modifiers } }) {\n const { startDelta, result: { delta: curDelta } } = modifiers;\n\n for (const [coordsSet, delta] of [[coords.start, startDelta], [coords.cur, curDelta]]) {\n coordsSet.page.x -= delta.x;\n coordsSet.page.y -= delta.y;\n coordsSet.client.x -= delta.x;\n coordsSet.client.y -= delta.y;\n }\n\n}\n\nfunction getModifierList (interaction, registeredModifiers) {\n const actionOptions = interaction.target.options[interaction.prepared.name];\n const actionModifiers = actionOptions.modifiers;\n\n if (actionModifiers && actionModifiers.length) {\n return actionModifiers.map(modifier => {\n if (!modifier.methods && modifier.type) {\n return registeredModifiers[modifier.type](modifier);\n }\n\n return modifier;\n });\n }\n\n return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize']\n .map(type => {\n const options = actionOptions[type];\n\n return options && options.enabled && {\n options,\n methods: options._methods,\n };\n })\n .filter(m => !!m);\n}\n\nfunction shouldDo (options, preEnd, requireEndOnly, phase) {\n return options\n ? options.enabled !== false &&\n (preEnd || !options.endOnly) &&\n (!requireEndOnly || options.endOnly) &&\n (options.setStart || phase !== 'start')\n : !requireEndOnly;\n}\n\nfunction makeModifier (module, 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 => {\n options = options || {};\n\n // add missing defaults to options\n options.enabled = options.enabled !== false;\n\n for (const prop in defaults) {\n if (!(prop in options)) {\n options[prop] = defaults[prop];\n }\n }\n\n return { options, methods };\n };\n\n if (typeof name === 'string') {\n Object.defineProperty(\n modifier,\n 'name',\n { value: name });\n\n // for backwrads compatibility\n modifier._defaults = defaults;\n modifier._methods = methods;\n }\n\n return modifier;\n}\n\nexport default {\n install,\n startAll,\n setAll,\n prepareStates,\n start,\n beforeMove,\n beforeEnd,\n stop,\n shouldDo,\n getModifierList,\n getRectOffset,\n makeModifier,\n};\n","import modifiers from '@interactjs/modifiers/base';\nimport * as utils from '@interactjs/utils';\nimport raf from '@interactjs/utils/raf';\n\nfunction install (scope) {\n const {\n interactions,\n defaults,\n } = scope;\n\n interactions.signals.on('new', function (interaction) {\n interaction.inertia = {\n active : false,\n smoothEnd : false,\n allowResume: false,\n\n startEvent: null,\n upCoords : {},\n\n xe: 0, ye: 0,\n sx: 0, sy: 0,\n\n t0: 0,\n vx0: 0, vys: 0,\n duration: 0,\n\n lambda_v0: 0,\n one_ve_v0: 0,\n i : null,\n };\n });\n\n interactions.signals.on('before-action-end', arg => release(arg, scope));\n interactions.signals.on('down' , arg => resume (arg, scope));\n interactions.signals.on('stop' , arg => stop (arg, scope));\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\nfunction resume ({ interaction, event, pointer, eventTarget }, scope) {\n const state = interaction.inertia;\n\n // Check if the down event hits the current inertia target\n if (state.active) {\n let element = eventTarget;\n\n // climb up the DOM tree from the event target\n while (utils.is.element(element)) {\n\n // if interaction element is the current inertia target element\n if (element === interaction.element) {\n // stop inertia\n raf.cancel(state.i);\n state.active = false;\n interaction.simulation = null;\n\n // update pointers to the down event's coordinates\n interaction.updatePointer(pointer, event, eventTarget, true);\n utils.pointer.setCoords(\n interaction.coords.cur,\n interaction.pointers.map(p => p.pointer)\n );\n\n // fire appropriate signals\n const signalArg = {\n interaction,\n };\n\n scope.interactions.signals.fire('action-resume', signalArg);\n\n // fire a reume event\n const resumeEvent = new scope.InteractEvent(\n interaction, event, interaction.prepared.name, 'resume', interaction.element);\n\n interaction._fireEvent(resumeEvent);\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur);\n break;\n }\n\n element = utils.dom.parentNode(element);\n }\n }\n}\n\nfunction release ({ interaction, event, noPreEnd }, scope) {\n const state = interaction.inertia;\n\n if (!interaction.interacting() ||\n (interaction.simulation && interaction.simulation.active) ||\n noPreEnd) {\n return;\n }\n\n const options = getOptions(interaction);\n\n const now = new Date().getTime();\n const { client: velocityClient } = interaction.coords.velocity;\n const pointerSpeed = utils.hypot(velocityClient.x, velocityClient.y);\n\n let smoothEnd = false;\n let modifierResult;\n\n // check if inertia should be started\n const inertiaPossible = (options && options.enabled\n && interaction.prepared.name !== 'gesture'\n && event !== state.startEvent);\n\n const inertia = (inertiaPossible\n && (now - interaction.coords.cur.timeStamp) < 50\n && pointerSpeed > options.minSpeed\n && pointerSpeed > options.endSpeed);\n\n const modifierArg = {\n interaction,\n pageCoords: utils.extend({}, interaction.coords.cur.page),\n states: inertiaPossible && interaction.modifiers.states.map(\n modifierStatus => utils.extend({}, modifierStatus)\n ),\n preEnd: true,\n requireEndOnly: true,\n };\n\n // smoothEnd\n if (inertiaPossible && !inertia) {\n modifierResult = modifiers.setAll(modifierArg);\n\n if (modifierResult.shouldMove) {\n smoothEnd = true;\n }\n }\n\n if (!(inertia || smoothEnd)) { return; }\n\n utils.pointer.copyCoords(state.upCoords, interaction.coords.cur);\n\n interaction.pointers[0].pointer = state.startEvent = new scope.InteractEvent(\n interaction, event, interaction.prepared.name, 'inertiastart', interaction.element);\n\n state.t0 = now;\n\n state.active = true;\n state.allowResume = options.allowResume;\n interaction.simulation = state;\n\n interaction.target.fire(state.startEvent);\n\n if (inertia) {\n state.vx0 = interaction.coords.velocity.client.x;\n state.vy0 = interaction.coords.velocity.client.y;\n state.v0 = pointerSpeed;\n\n calcInertia(interaction, state);\n\n utils.extend(modifierArg.pageCoords, interaction.coords.cur.page);\n\n modifierArg.pageCoords.x += state.xe;\n modifierArg.pageCoords.y += state.ye;\n\n modifierResult = modifiers.setAll(modifierArg);\n\n state.modifiedXe += modifierResult.delta.x;\n state.modifiedYe += modifierResult.delta.y;\n\n state.i = raf.request(() => inertiaTick(interaction));\n }\n else {\n state.smoothEnd = true;\n state.xe = modifierResult.delta.x;\n state.ye = modifierResult.delta.y;\n\n state.sx = state.sy = 0;\n\n state.i = raf.request(() => smothEndTick(interaction));\n }\n\n return false;\n}\n\nfunction stop ({ interaction }) {\n const state = interaction.inertia;\n\n if (state.active) {\n raf.cancel(state.i);\n state.active = false;\n interaction.simulation = null;\n }\n}\n\nfunction calcInertia (interaction, state) {\n const options = getOptions(interaction);\n const lambda = options.resistance;\n const inertiaDur = -Math.log(options.endSpeed / state.v0) / lambda;\n\n state.x0 = interaction.prevEvent.page.x;\n state.y0 = interaction.prevEvent.page.y;\n state.t0 = state.startEvent.timeStamp / 1000;\n state.sx = state.sy = 0;\n\n state.modifiedXe = state.xe = (state.vx0 - inertiaDur) / lambda;\n state.modifiedYe = state.ye = (state.vy0 - inertiaDur) / lambda;\n state.te = inertiaDur;\n\n state.lambda_v0 = lambda / state.v0;\n state.one_ve_v0 = 1 - options.endSpeed / state.v0;\n}\n\nfunction inertiaTick (interaction) {\n updateInertiaCoords(interaction);\n utils.pointer.setCoordDeltas(interaction.coords.delta, interaction.coords.prev, interaction.coords.cur);\n utils.pointer.setCoordVelocity(interaction.coords.velocity, interaction.coords.delta);\n\n const state = interaction.inertia;\n const options = getOptions(interaction);\n const lambda = options.resistance;\n const t = new Date().getTime() / 1000 - state.t0;\n\n if (t < state.te) {\n\n const progress = 1 - (Math.exp(-lambda * t) - state.lambda_v0) / state.one_ve_v0;\n\n if (state.modifiedXe === state.xe && state.modifiedYe === state.ye) {\n state.sx = state.xe * progress;\n state.sy = state.ye * progress;\n }\n else {\n const quadPoint = utils.getQuadraticCurvePoint(\n 0, 0,\n state.xe, state.ye,\n state.modifiedXe, state.modifiedYe,\n progress);\n\n state.sx = quadPoint.x;\n state.sy = quadPoint.y;\n }\n\n interaction.move();\n\n state.i = raf.request(() => inertiaTick(interaction));\n }\n else {\n state.sx = state.modifiedXe;\n state.sy = state.modifiedYe;\n\n interaction.move();\n interaction.end(state.startEvent);\n state.active = false;\n interaction.simulation = null;\n }\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur);\n}\n\nfunction smothEndTick (interaction) {\n updateInertiaCoords(interaction);\n\n const state = interaction.inertia;\n const t = new Date().getTime() - state.t0;\n const { smoothEndDuration: duration } = getOptions(interaction);\n\n if (t < duration) {\n state.sx = utils.easeOutQuad(t, 0, state.xe, duration);\n state.sy = utils.easeOutQuad(t, 0, state.ye, duration);\n\n interaction.move();\n\n state.i = raf.request(() => smothEndTick(interaction));\n }\n else {\n state.sx = state.xe;\n state.sy = state.ye;\n\n interaction.move();\n interaction.end(state.startEvent);\n\n state.smoothEnd =\n state.active = false;\n interaction.simulation = null;\n }\n}\n\nfunction updateInertiaCoords (interaction) {\n const state = interaction.inertia;\n\n // return if inertia isn't running\n if (!state.active) { return; }\n\n const pageUp = state.upCoords.page;\n const clientUp = state.upCoords.client;\n\n utils.pointer.setCoords(interaction.coords.cur, [ {\n pageX : pageUp.x + state.sx,\n pageY : pageUp.y + state.sy,\n clientX: clientUp.x + state.sx,\n clientY: clientUp.y + state.sy,\n } ]);\n}\n\nfunction getOptions ({ target, prepared }) {\n return target && target.options && prepared.name && target.options[prepared.name].inertia;\n}\n\nexport default {\n install,\n calcInertia,\n inertiaTick,\n smothEndTick,\n updateInertiaCoords,\n};\n","import * as arr from '@interactjs/utils/arr';\nimport extend from '@interactjs/utils/extend';\nimport normalize from '@interactjs/utils/normalizeListeners';\n\nfunction fireUntilImmediateStopped (event, listeners) {\n for (const listener of listeners) {\n if (event.immediatePropagationStopped) { break; }\n\n listener(event);\n }\n}\n\nclass Eventable {\n\n constructor (options) {\n this.options = extend({}, options || {});\n this.types = {};\n this.propagationStopped = this.immediatePropagationStopped = false;\n }\n\n fire (event) {\n let listeners;\n const global = this.global;\n\n // Interactable#on() listeners\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, listener) {\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, listener) {\n const listeners = normalize(type, listener);\n\n for (type in listeners) {\n const eventList = this.types[type];\n\n if (!eventList || !eventList.length) { continue; }\n\n for (listener of listeners[type]) {\n const index = eventList.indexOf(listener);\n\n if (index !== -1) {\n eventList.splice(index, 1);\n }\n }\n }\n }\n}\n\nexport default Eventable;\n","import * as utils from './index';\n\nconst finder = {\n methodOrder: [ 'simulationResume', 'mouseOrPen', 'hasPointer', 'idle' ],\n\n search: function (details) {\n for (const method of finder.methodOrder) {\n const interaction = finder[method](details);\n\n if (interaction) {\n return interaction;\n }\n }\n },\n\n // try to resume simulation with a new pointer\n simulationResume: function ({ pointerType, eventType, eventTarget, scope }) {\n if (!/down|start/i.test(eventType)) {\n return null;\n }\n\n for (const interaction of scope.interactions.list) {\n let element = eventTarget;\n\n if (interaction.simulation && interaction.simulation.allowResume\n && (interaction.pointerType === pointerType)) {\n while (element) {\n // if the element is the interaction element\n if (element === interaction.element) {\n return interaction;\n }\n element = utils.dom.parentNode(element);\n }\n }\n }\n\n return null;\n },\n\n // if it's a mouse or pen interaction\n mouseOrPen: function ({ pointerId, pointerType, eventType, scope }) {\n if (pointerType !== 'mouse' && pointerType !== 'pen') {\n return null;\n }\n\n let firstNonActive;\n\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType) {\n // if it's a down event, skip interactions with running simulations\n if (interaction.simulation && !hasPointerId(interaction, pointerId)) { continue; }\n\n // if the interaction is active, return it immediately\n if (interaction.interacting()) {\n return interaction;\n }\n // otherwise save it and look for another active interaction\n else if (!firstNonActive) {\n firstNonActive = interaction;\n }\n }\n }\n\n // if no active mouse interaction was found use the first inactive mouse\n // interaction\n if (firstNonActive) {\n return firstNonActive;\n }\n\n // find any mouse or pen interaction.\n // ignore the interaction if the eventType is a *down, and a simulation\n // is active\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) {\n return interaction;\n }\n }\n\n return null;\n },\n\n // get interaction that has this pointer\n hasPointer: function ({ pointerId, scope }) {\n for (const interaction of scope.interactions.list) {\n if (hasPointerId(interaction, pointerId)) {\n return interaction;\n }\n }\n },\n\n // get first idle interaction with a matching pointerType\n idle: function ({ pointerType, scope }) {\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.target;\n // don't add this pointer if there is a target interactable and it\n // isn't gesturable\n if (target && !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, pointerId) {\n return utils.arr.some(interaction.pointers, ({ id }) => id === pointerId);\n}\n\nexport default finder;\n","import InteractionBase from './Interaction';\nimport events from '@interactjs/utils/events';\nimport finder from '@interactjs/utils/interactionFinder';\nimport browser from '@interactjs/utils/browser';\nimport domObjects from '@interactjs/utils/domObjects';\nimport pointerUtils from '@interactjs/utils/pointerUtils';\nimport Signals from '@interactjs/utils/Signals';\n\nconst methodNames = [\n 'pointerDown', 'pointerMove', 'pointerUp',\n 'updatePointer', 'removePointer', 'windowBlur',\n];\n\nfunction install (scope) {\n const signals = new Signals();\n\n const listeners = {};\n\n for (const method of methodNames) {\n listeners[method] = doOnInteractions(method, scope);\n }\n\n const eventMap = { /* 'eventType': listenerFunc */ };\n const pEventTypes = browser.pEventTypes;\n\n if (domObjects.PointerEvent) {\n eventMap[pEventTypes.down ] = listeners.pointerDown;\n eventMap[pEventTypes.move ] = listeners.pointerMove;\n eventMap[pEventTypes.up ] = listeners.pointerUp;\n eventMap[pEventTypes.cancel] = listeners.pointerUp;\n }\n else {\n eventMap.mousedown = listeners.pointerDown;\n eventMap.mousemove = listeners.pointerMove;\n eventMap.mouseup = listeners.pointerUp;\n\n eventMap.touchstart = listeners.pointerDown;\n eventMap.touchmove = listeners.pointerMove;\n eventMap.touchend = listeners.pointerUp;\n eventMap.touchcancel = listeners.pointerUp;\n }\n\n eventMap.blur = event => {\n for (const interaction of scope.interactions.list) {\n interaction.documentBlur(event);\n }\n };\n\n scope.signals.on('add-document' , onDocSignal);\n scope.signals.on('remove-document', onDocSignal);\n\n // for ignoring browser's simulated mouse events\n scope.prevTouchTime = 0;\n\n scope.Interaction = class Interaction extends InteractionBase {\n get pointerMoveTolerance () {\n return scope.interactions.pointerMoveTolerance;\n }\n\n set pointerMoveTolerance (value) {\n scope.interactions.pointerMoveTolerance = value;\n }\n };\n scope.interactions = {\n signals,\n // all active and idle interactions\n list: [],\n new (options) {\n options.signals = signals;\n\n return new scope.Interaction(options);\n },\n listeners,\n eventMap,\n pointerMoveTolerance: 1,\n };\n\n scope.actions = {\n names: [],\n methodDict: {},\n eventTypes: [],\n };\n}\n\nfunction doOnInteractions (method, scope) {\n return (function (event) {\n const interactions = scope.interactions.list;\n\n const pointerType = pointerUtils.getPointerType(event);\n const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event);\n const matches = []; // [ [pointer, interaction], ...]\n\n if (browser.supportsTouch && /touch/.test(event.type)) {\n scope.prevTouchTime = new Date().getTime();\n\n for (const changedTouch of event.changedTouches) {\n const pointer = changedTouch;\n const pointerId = pointerUtils.getPointerId(pointer);\n const searchDetails = {\n pointer,\n pointerId,\n pointerType,\n eventType: event.type,\n eventTarget,\n curEventTarget,\n scope,\n };\n const interaction = getInteraction(searchDetails);\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ]);\n }\n }\n else {\n let invalidPointer = false;\n\n if (!browser.supportsPointerEvent && /mouse/.test(event.type)) {\n // ignore mouse events while touch interactions are active\n for (let i = 0; i < interactions.length && !invalidPointer; i++) {\n invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown;\n }\n\n // try to ignore mouse events that are simulated by the browser\n // after a touch event\n invalidPointer = invalidPointer\n || (new Date().getTime() - scope.prevTouchTime < 500)\n // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated\n || event.timeStamp === 0;\n }\n\n if (!invalidPointer) {\n const searchDetails = {\n pointer: event,\n pointerId: pointerUtils.getPointerId(event),\n pointerType,\n eventType: event.type,\n curEventTarget,\n eventTarget,\n scope,\n };\n\n const interaction = getInteraction(searchDetails);\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ]);\n }\n }\n\n // eslint-disable-next-line no-shadow\n for (const [pointer, eventTarget, curEventTarget, interaction] of matches) {\n interaction[method](pointer, event, eventTarget, curEventTarget);\n }\n });\n}\n\nfunction getInteraction (searchDetails) {\n const { pointerType, scope } = searchDetails;\n\n const foundInteraction = finder.search(searchDetails);\n const signalArg = { interaction: foundInteraction, searchDetails };\n\n scope.interactions.signals.fire('find', signalArg);\n\n return signalArg.interaction || newInteraction({ pointerType }, scope);\n}\n\nexport function newInteraction (options, scope) {\n const interaction = scope.interactions.new(options);\n\n scope.interactions.list.push(interaction);\n return interaction;\n}\n\nfunction onDocSignal ({ doc, scope, options }, signalName) {\n const { eventMap } = scope.interactions;\n const eventMethod = signalName.indexOf('add') === 0\n ? events.add : events.remove;\n\n if (scope.browser.isIOS && !options.events) {\n options.events = { passive: false };\n }\n\n // delegate event listener\n for (const eventType in events.delegatedEvents) {\n eventMethod(doc, eventType, events.delegateListener);\n eventMethod(doc, eventType, events.delegateUseCapture, true);\n }\n\n const eventOptions = options && options.events;\n\n for (const eventType in eventMap) {\n eventMethod(doc, eventType, eventMap[eventType], eventOptions);\n }\n}\n\nexport default {\n install,\n onDocSignal,\n doOnInteractions,\n newInteraction,\n methodNames,\n};\n","import Eventable from './Eventable';\nimport defaults from './defaultOptions';\nimport * as utils from '@interactjs/utils';\nimport domObjects from '@interactjs/utils/domObjects';\n\nimport interactions from './interactions';\nimport InteractEvent from './InteractEvent';\nimport InteractableBase from './Interactable';\n\nconst {\n win,\n browser,\n raf,\n Signals,\n events,\n} = utils;\n\nexport function createScope () {\n const scope = {\n Signals,\n signals: new Signals(),\n browser,\n events,\n utils,\n defaults: utils.clone(defaults),\n Eventable,\n\n InteractEvent: InteractEvent,\n Interactable: class Interactable extends InteractableBase {\n get _defaults () { return scope.defaults; }\n\n set (options) {\n super.set(options);\n\n scope.interactables.signals.fire('set', {\n options,\n interactable: this,\n });\n\n return this;\n }\n\n unset () {\n super.unset();\n scope.interactables.signals.fire('unset', { interactable: this });\n }\n },\n\n interactables: {\n // all set interactables\n list: [],\n\n new (target, options) {\n options = utils.extend(options || {}, {\n actions: scope.actions,\n });\n\n const interactable = new scope.Interactable(target, options, scope.document);\n\n scope.addDocument(interactable._doc);\n\n scope.interactables.list.push(interactable);\n\n scope.interactables.signals.fire('new', {\n target,\n options,\n interactable: interactable,\n win: this._win,\n });\n\n return interactable;\n },\n\n indexOfElement (target, context) {\n context = context || scope.document;\n\n const list = this.list;\n\n for (let i = 0; i < list.length; i++) {\n const interactable = list[i];\n\n if (interactable.target === target && interactable._context === context) {\n return i;\n }\n }\n\n return -1;\n },\n\n get (element, options, dontCheckInContext) {\n const ret = this.list[this.indexOfElement(element, options && options.context)];\n\n return ret && (utils.is.string(element) || dontCheckInContext || ret.inContext(element))? ret : null;\n },\n\n forEachMatch (element, callback) {\n for (const interactable of this.list) {\n let ret;\n\n if ((utils.is.string(interactable.target)\n // target is a selector and the element matches\n ? (utils.is.element(element) && utils.dom.matchesSelector(element, interactable.target))\n // target is the element\n : element === interactable.target)\n // the element is in context\n && (interactable.inContext(element))) {\n ret = callback(interactable);\n }\n\n if (ret !== undefined) {\n return ret;\n }\n }\n },\n\n signals: new utils.Signals(),\n },\n\n // main document\n document: null,\n // all documents being listened to\n documents: [/* { doc, options } */],\n\n init (window) {\n return initScope(scope, window);\n },\n\n addDocument (doc, options) {\n // do nothing if document is already known\n if (scope.getDocIndex(doc) !== -1) { return false; }\n\n const window = win.getWindow(doc);\n\n options = options ? utils.extend({}, options) : {};\n\n scope.documents.push({ doc, options });\n events.documents.push(doc);\n\n // don't add an unload event for the main document\n // so that the page may be cached in browser history\n if (doc !== scope.document) {\n events.add(window, 'unload', scope.onWindowUnload);\n }\n\n scope.signals.fire('add-document', { doc, window, scope, options });\n },\n\n removeDocument (doc) {\n const index = scope.getDocIndex(doc);\n\n const window = win.getWindow(doc);\n const options = scope.documents[index].options;\n\n events.remove(window, 'unload', scope.onWindowUnload);\n\n scope.documents.splice(index, 1);\n events.documents.splice(index, 1);\n\n scope.signals.fire('remove-document', { doc, window, scope, options });\n },\n\n onWindowUnload (event) {\n scope.removeDocument(event.currentTarget.document);\n },\n\n getDocIndex (doc) {\n for (let i = 0; i < scope.documents.length; i++) {\n if (scope.documents[i].doc === doc) {\n return i;\n }\n }\n\n return -1;\n },\n\n getDocOptions (doc) {\n const docIndex = scope.getDocIndex(doc);\n\n return docIndex === -1 ? null : scope.documents[docIndex].options;\n },\n };\n\n return scope;\n}\n\nexport function initScope (scope, window) {\n win.init(window);\n domObjects.init(window);\n browser.init(window);\n raf.init(window);\n events.init(window);\n\n interactions.install(scope);\n scope.document = window.document;\n\n return scope;\n}\n","/** @module interact */\n\nimport browser from '@interactjs/utils/browser';\nimport events from '@interactjs/utils/events';\nimport * as utils from '@interactjs/utils';\nimport { createScope } from '@interactjs/core/scope';\n\nconst globalEvents = {};\nconst scope = createScope();\n\n/**\n * ```js\n * interact('#draggable').draggable(true);\n *\n * var rectables = interact('rect');\n * rectables\n * .gesturable(true)\n * .on('gesturemove', function (event) {\n * // ...\n * });\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @global\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\nfunction interact (target, options) {\n let interactable = scope.interactables.get(target, options);\n\n\n if (!interactable) {\n interactable = scope.interactables.new(target, options);\n interactable.events.global = globalEvents;\n }\n\n return interactable;\n}\n\nscope._plugins = [];\n\n/**\n * Use a plugin\n *\n * @alias module:interact.use\n *\n * @param {Object} plugin\n * @param {function} plugin.install\n * @return {interact}\n*/\ninteract.use = function (plugin) {\n if (scope._plugins.indexOf(plugin) !== -1) {\n return;\n }\n\n plugin.install(scope);\n scope._plugins.push(plugin);\n return interact;\n};\n\n/**\n * Check if an element or selector has been set with the {@link interact}\n * function\n *\n * @alias module:interact.isSet\n *\n * @param {Element} element The Element being searched for\n * @return {boolean} Indicates if the element or CSS selector was previously\n * passed to interact\n*/\ninteract.isSet = function (element, options) {\n return scope.interactables.indexOfElement(element, options && options.context) !== -1;\n};\n\n/**\n * Add a global listener for an InteractEvent or adds a DOM event to `document`\n *\n * @alias module:interact.on\n *\n * @param {string | array | object} type The types of events to listen for\n * @param {function} listener The function event (s)\n * @param {object | boolean} [options] object or useCapture flag for\n * addEventListener\n * @return {object} interact\n */\ninteract.on = function (type, listener, options) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/);\n }\n\n if (utils.is.array(type)) {\n for (const eventType of type) {\n interact.on(eventType, listener, options);\n }\n\n return interact;\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.on(prop, type[prop], listener);\n }\n\n return interact;\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (utils.arr.contains(scope.actions.eventTypes, type)) {\n // if this type of event was never bound\n if (!globalEvents[type]) {\n globalEvents[type] = [listener];\n }\n else {\n globalEvents[type].push(listener);\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n events.add(scope.document, type, listener, { options });\n }\n\n return interact;\n};\n\n/**\n * Removes a global InteractEvent listener or DOM event from `document`\n *\n * @alias module:interact.off\n *\n * @param {string | array | object} type The types of events that were listened\n * for\n * @param {function} listener The listener function to be removed\n * @param {object | boolean} options [options] object or useCapture flag for\n * removeEventListener\n * @return {object} interact\n */\ninteract.off = function (type, listener, options) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/);\n }\n\n if (utils.is.array(type)) {\n for (const eventType of type) {\n interact.off(eventType, listener, options);\n }\n\n return interact;\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.off(prop, type[prop], listener);\n }\n\n return interact;\n }\n\n if (!utils.arr.contains(scope.actions.eventTypes, type)) {\n events.remove(scope.document, type, listener, options);\n }\n else {\n let index;\n\n if (type in globalEvents\n && (index = globalEvents[type].indexOf(listener)) !== -1) {\n globalEvents[type].splice(index, 1);\n }\n }\n\n return interact;\n};\n\n/**\n * Returns an object which exposes internal data\n\n * @alias module:interact.debug\n *\n * @return {object} An object with properties that outline the current state\n * and expose internal functions and variables\n */\ninteract.debug = function () {\n return scope;\n};\n\n// expose the functions used to calculate multi-touch properties\ninteract.getPointerAverage = utils.pointer.pointerAverage;\ninteract.getTouchBBox = utils.pointer.touchBBox;\ninteract.getTouchDistance = utils.pointer.touchDistance;\ninteract.getTouchAngle = utils.pointer.touchAngle;\n\ninteract.getElementRect = utils.dom.getElementRect;\ninteract.getElementClientRect = utils.dom.getElementClientRect;\ninteract.matchesSelector = utils.dom.matchesSelector;\ninteract.closest = utils.dom.closest;\n\n/**\n * @alias module:interact.supportsTouch\n *\n * @return {boolean} Whether or not the browser supports touch input\n */\ninteract.supportsTouch = 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 */\ninteract.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 * @param {Event} event An event on which to call preventDefault()\n * @return {object} interact\n */\ninteract.stop = function (event) {\n for (const interaction of scope.interactions.list) {\n interaction.stop(event);\n }\n\n return interact;\n};\n\n/**\n * Returns or sets the distance the pointer must be moved before an action\n * sequence occurs. This also affects tolerance for tap events.\n *\n * @alias module:interact.pointerMoveTolerance\n *\n * @param {number} [newValue] The movement from the start position must be greater than this value\n * @return {interact | number}\n */\ninteract.pointerMoveTolerance = function (newValue) {\n if (utils.is.number(newValue)) {\n scope.interactions.pointerMoveTolerance = newValue;\n\n return interact;\n }\n\n return scope.interactions.pointerMoveTolerance;\n};\n\nscope.interactables.signals.on('unset', ({ interactable }) => {\n scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1);\n\n // Stop related interactions when an Interactable is unset\n for (const interaction of scope.interactions.list) {\n if (interaction.target === interactable && interaction.interacting() && interaction._ending) {\n interaction.stop();\n }\n }\n});\ninteract.addDocument = scope.addDocument;\ninteract.removeDocument = scope.removeDocument;\n\nscope.interact = interact;\n\nexport { scope };\nexport default interact;\n","import * as is from '@interactjs/utils/is';\nimport rectUtils from '@interactjs/utils/rect';\n\nfunction start ({ rect, startOffset, state }) {\n const { options } = state;\n const { elementRect } = options;\n const offset = {};\n\n if (rect && elementRect) {\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 else {\n offset.left = offset.top = offset.right = offset.bottom = 0;\n }\n\n state.offset = offset;\n}\n\nfunction set ({ coords, interaction, state }) {\n const { options, offset } = state;\n\n const restriction = getRestrictionRect(options.restriction, interaction, coords);\n\n if (!restriction) { return state; }\n\n const rect = restriction;\n\n // object is assumed to have\n // x, y, width, height or\n // left, top, right, bottom\n if ('x' in restriction && 'y' in restriction) {\n coords.x = Math.max(Math.min(rect.x + rect.width - offset.right , coords.x), rect.x + offset.left);\n coords.y = Math.max(Math.min(rect.y + rect.height - offset.bottom, coords.y), rect.y + offset.top );\n }\n else {\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}\n\nfunction getRestrictionRect (value, interaction, coords) {\n if (is.func(value)) {\n return rectUtils.resolveRectLike(value, interaction.target, interaction.element, [coords.x, coords.y, interaction]);\n } else {\n return rectUtils.resolveRectLike(value, interaction.target, interaction.element);\n }\n}\n\nconst restrict = {\n start,\n set,\n getRestrictionRect,\n defaults: {\n enabled: false,\n restriction: null,\n elementRect: null,\n },\n};\n\nexport default restrict;\n","// This module adds the options.resize.restrictEdges setting which sets min and\n// max for the top, left, bottom and right edges of the target being resized.\n//\n// interact(target).resize({\n// edges: { top: true, left: true },\n// restrictEdges: {\n// inner: { top: 200, left: 200, right: 400, bottom: 400 },\n// outer: { top: 0, left: 0, right: 600, bottom: 600 },\n// },\n// });\n\nimport extend from '@interactjs/utils/extend';\nimport rectUtils from '@interactjs/utils/rect';\nimport restrict from './pointer';\n\nconst { getRestrictionRect } = restrict;\nconst noInner = { top: +Infinity, left: +Infinity, bottom: -Infinity, right: -Infinity };\nconst noOuter = { top: -Infinity, left: -Infinity, bottom: +Infinity, right: +Infinity };\n\nfunction start ({ interaction, state }) {\n const { options } = state;\n const startOffset = interaction.modifiers.startOffset;\n let offset;\n\n if (options) {\n const offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page);\n\n offset = rectUtils.rectToXY(offsetRect);\n }\n\n offset = offset || { x: 0, y: 0 };\n\n state.offset = {\n top: offset.y + startOffset.top,\n left: offset.x + startOffset.left,\n bottom: offset.y - startOffset.bottom,\n right: offset.x - startOffset.right,\n };\n}\n\nfunction set ({ coords, interaction, state }) {\n const { offset, options } = state;\n const edges = interaction.prepared.linkedEdges || interaction.prepared.edges;\n\n if (!edges) {\n return;\n }\n\n const page = extend({}, coords);\n const inner = getRestrictionRect(options.inner, interaction, page) || {};\n const outer = getRestrictionRect(options.outer, interaction, page) || {};\n\n fixRect(inner, noInner);\n fixRect(outer, noOuter);\n\n if (edges.top) {\n coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top);\n }\n else if (edges.bottom) {\n coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom);\n }\n if (edges.left) {\n coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left);\n }\n else if (edges.right) {\n coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right);\n }\n}\n\nfunction fixRect (rect, defaults) {\n for (const edge of ['top', 'left', 'bottom', 'right']) {\n if (!(edge in rect)) {\n rect[edge] = defaults[edge];\n }\n }\n\n return rect;\n}\n\nconst restrictEdges = {\n noInner,\n noOuter,\n getRestrictionRect,\n start,\n set,\n defaults: {\n enabled: false,\n inner: null,\n outer: null,\n offset: null,\n },\n};\n\nexport default restrictEdges;\n","// This module adds the options.resize.restrictSize setting which sets min and\n// max width and height for the target being resized.\n//\n// interact(target).resize({\n// edges: { top: true, left: true },\n// restrictSize: {\n// min: { width: -600, height: -600 },\n// max: { width: 600, height: 600 },\n// },\n// });\n\nimport extend from '@interactjs/utils/extend';\nimport rectUtils from '@interactjs/utils/rect';\nimport restrictEdges from './edges';\n\nconst noMin = { width: -Infinity, height: -Infinity };\nconst noMax = { width: +Infinity, height: +Infinity };\n\nfunction start (arg) {\n return restrictEdges.start(arg);\n}\n\nfunction set (arg) {\n const { interaction, state } = arg;\n const { options } = state;\n const edges = interaction.prepared.linkedEdges || interaction.prepared.edges;\n\n if (!edges) {\n return;\n }\n\n const rect = rectUtils.xywhToTlbr(interaction.resizeRects.inverted);\n\n const minSize = rectUtils.tlbrToXywh(restrictEdges.getRestrictionRect(options.min, interaction)) || noMin;\n const maxSize = rectUtils.tlbrToXywh(restrictEdges.getRestrictionRect(options.max, interaction)) || noMax;\n\n state.options = {\n enabled: options.enabled,\n endOnly: options.endOnly,\n inner: extend({}, restrictEdges.noInner),\n outer: extend({}, restrictEdges.noOuter),\n };\n\n if (edges.top) {\n state.options.inner.top = rect.bottom - minSize.height;\n state.options.outer.top = rect.bottom - maxSize.height;\n }\n else if (edges.bottom) {\n state.options.inner.bottom = rect.top + minSize.height;\n state.options.outer.bottom = rect.top + maxSize.height;\n }\n if (edges.left) {\n state.options.inner.left = rect.right - minSize.width;\n state.options.outer.left = rect.right - maxSize.width;\n }\n else if (edges.right) {\n state.options.inner.right = rect.left + minSize.width;\n state.options.outer.right = rect.left + maxSize.width;\n }\n\n restrictEdges.set(arg);\n\n state.options = options;\n}\n\nconst restrictSize = {\n start,\n set,\n defaults: {\n enabled: false,\n min: null,\n max: null,\n },\n};\n\nexport default restrictSize;\n","import * as utils from '@interactjs/utils';\n\nfunction start ({ interaction, interactable, element, rect, state, startOffset }) {\n const { options } = state;\n const offsets = [];\n const optionsOrigin = utils.rect.rectToXY(utils.rect.resolveRectLike(options.origin));\n const origin = optionsOrigin || utils.getOriginXY(interactable, element, interaction.prepared.name);\n\n let snapOffset;\n\n if (options.offset === 'startCoords') {\n snapOffset = {\n x: interaction.coords.start.page.x - origin.x,\n y: interaction.coords.start.page.y - origin.y,\n };\n }\n else {\n const offsetRect = utils.rect.resolveRectLike(options.offset, interactable, element, [interaction]);\n\n snapOffset = utils.rect.rectToXY(offsetRect) || { x: 0, y: 0 };\n }\n\n const relativePoints = options.relativePoints || [];\n\n if (rect && options.relativePoints && options.relativePoints.length) {\n for (let index = 0; index < relativePoints.length; index++) {\n const relativePoint = relativePoints[index];\n\n offsets.push({\n index,\n relativePoint,\n x: startOffset.left - (rect.width * relativePoint.x) + snapOffset.x,\n y: startOffset.top - (rect.height * relativePoint.y) + snapOffset.y,\n });\n }\n }\n else {\n offsets.push(utils.extend({\n index: 0,\n relativePoint: null,\n }, snapOffset));\n }\n\n state.offsets = offsets;\n}\n\nfunction set ({ interaction, coords, state }) {\n const { options, offsets } = state;\n\n const origin = utils.getOriginXY(interaction.target, interaction.element, interaction.prepared.name);\n const page = utils.extend({}, coords);\n const targets = [];\n let target;\n let i;\n\n page.x -= origin.x;\n page.y -= origin.y;\n\n state.realX = page.x;\n state.realY = page.y;\n\n let len = options.targets? options.targets.length : 0;\n\n for (const offset of offsets) {\n\n const relativeX = page.x - offset.x;\n const relativeY = page.y - offset.y;\n\n for (let index = 0; index < options.targets.length; index++) {\n const snapTarget = options.targets[index];\n if (utils.is.func(snapTarget)) {\n target = snapTarget(relativeX, relativeY, interaction, offset, index);\n }\n else {\n target = snapTarget;\n }\n\n if (!target) { continue; }\n\n targets.push({\n x: utils.is.number(target.x) ? (target.x + offset.x) : relativeX,\n y: utils.is.number(target.y) ? (target.y + offset.y) : relativeY,\n\n range: utils.is.number(target.range)? target.range: options.range,\n });\n }\n }\n\n const closest = {\n target: null,\n inRange: false,\n distance: 0,\n range: 0,\n dx: 0,\n dy: 0,\n };\n\n for (i = 0, len = targets.length; i < len; i++) {\n target = targets[i];\n\n const range = target.range;\n const dx = target.x - page.x;\n const dy = target.y - page.y;\n const distance = utils.hypot(dx, dy);\n let inRange = distance <= range;\n\n // Infinite targets count as being out of range\n // compared to non infinite ones that are in range\n if (range === Infinity && closest.inRange && closest.range !== Infinity) {\n inRange = false;\n }\n\n if (!closest.target || (inRange\n // is the closest target in range?\n ? (closest.inRange && range !== Infinity\n // the pointer is relatively deeper in this target\n ? distance / range < closest.distance / closest.range\n // this target has Infinite range and the closest doesn't\n : (range === Infinity && closest.range !== Infinity) ||\n // OR this target is closer that the previous closest\n distance < closest.distance)\n // The other is not in range and the pointer is closer to this target\n : (!closest.inRange && distance < closest.distance))) {\n\n closest.target = target;\n closest.distance = distance;\n closest.range = range;\n closest.inRange = inRange;\n closest.dx = dx;\n closest.dy = dy;\n\n state.range = range;\n }\n }\n\n if (closest.inRange) {\n coords.x = closest.target.x;\n coords.y = closest.target.y;\n }\n\n state.closest = closest;\n}\n\nconst snap = {\n start,\n set,\n defaults: {\n enabled: false,\n range : Infinity,\n targets: null,\n offset: null,\n\n relativePoints: null,\n },\n};\n\nexport default snap;\n","// This module allows snapping of the size of targets during resize\n// interactions.\n\nimport extend from '@interactjs/utils/extend';\nimport * as is from '@interactjs/utils/is';\nimport snap from './pointer';\n\nfunction start (arg) {\n const { interaction, state } = arg;\n const { options } = state;\n const edges = interaction.prepared.edges;\n\n if (!edges) { return null; }\n\n arg.state = {\n options: {\n relativePoints: [{\n x: edges.left? 0 : 1,\n y: edges.top ? 0 : 1,\n }],\n origin: { x: 0, y: 0 },\n offset: options.offset || 'self',\n range: options.range,\n },\n };\n\n state.targetFields = state.targetFields || [\n ['width', 'height'],\n ['x', 'y'],\n ];\n\n snap.start(arg);\n state.offsets = arg.state.offsets;\n\n arg.state = state;\n}\n\nfunction set (arg) {\n const { interaction, state, coords } = arg;\n const { options, offsets } = state;\n const relative = {\n x: coords.x - offsets[0].x,\n y: coords.y - offsets[0].y,\n };\n\n state.options = extend({}, options);\n state.options.targets = [];\n\n for (const snapTarget of (options.targets || [])) {\n let target;\n\n if (is.func(snapTarget)) {\n target = snapTarget(relative.x, relative.y, interaction);\n }\n else {\n target = snapTarget;\n }\n\n if (!target) { continue; }\n\n for (const [xField, yField] of state.targetFields) {\n if (xField in target || yField in target) {\n target.x = target[xField];\n target.y = target[yField];\n\n break;\n }\n }\n\n state.options.targets.push(target);\n }\n\n snap.set(arg);\n\n state.options = options;\n}\n\nconst snapSize = {\n start,\n set,\n defaults: {\n enabled: false,\n range : Infinity,\n targets: null,\n offset: null,\n },\n};\n\nexport default snapSize;\n","/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * });\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * });\n */\n\nimport clone from '@interactjs/utils/clone';\nimport extend from '@interactjs/utils/extend';\nimport snapSize from './size';\n\nfunction install (scope) {\n const {\n defaults,\n } = scope;\n\n defaults.perAction.snapEdges = snapEdges.defaults;\n}\n\nfunction start (arg) {\n const edges = arg.interaction.prepared.edges;\n\n if (!edges) { return null; }\n\n arg.state.targetFields = arg.state.targetFields || [\n [edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom'],\n ];\n\n return snapSize.start(arg);\n}\n\nfunction set (arg) {\n return snapSize.set(arg);\n}\n\nfunction modifyCoords (arg) {\n snapSize.modifyCoords(arg);\n}\n\nconst snapEdges = {\n install,\n start,\n set,\n modifyCoords,\n defaults: extend(clone(snapSize.defaults), {\n offset: { x: 0, y: 0 },\n }),\n};\n\nexport default snapEdges;\n","import * as utils from '@interactjs/utils';\nimport PointerEvent from './PointerEvent';\n\nconst signals = new utils.Signals();\nconst simpleSignals = [ 'down', 'up', 'cancel' ];\nconst simpleEvents = [ 'down', 'up', 'cancel' ];\n\nconst pointerEvents = {\n install,\n signals,\n PointerEvent,\n fire,\n collectEventTargets,\n createSignalListener,\n defaults: {\n holdDuration: 600,\n ignoreFrom : null,\n allowFrom : null,\n origin : { x: 0, y: 0 },\n },\n types: [\n 'down',\n 'move',\n 'up',\n 'cancel',\n 'tap',\n 'doubletap',\n 'hold',\n ],\n};\n\nfunction fire (arg) {\n const {\n interaction, pointer, event, eventTarget,\n type = arg.pointerEvent.type,\n targets = collectEventTargets(arg),\n pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction),\n } = arg;\n\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n targets,\n type,\n pointerEvent,\n };\n\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i];\n\n for (const prop in target.props || {}) {\n pointerEvent[prop] = target.props[prop];\n }\n\n const origin = utils.getOriginXY(target.eventable, target.element);\n\n pointerEvent.subtractOrigin(origin);\n pointerEvent.eventable = target.eventable;\n pointerEvent.currentTarget = target.element;\n\n target.eventable.fire(pointerEvent);\n\n pointerEvent.addOrigin(origin);\n\n if (pointerEvent.immediatePropagationStopped\n || (pointerEvent.propagationStopped\n && (i + 1) < targets.length && targets[i + 1].element !== pointerEvent.currentTarget)) {\n break;\n }\n }\n\n signals.fire('fired', signalArg);\n\n if (type === 'tap') {\n // if pointerEvent should make a double tap, create and fire a doubletap\n // PointerEvent and use that as the prevTap\n const prevTap = pointerEvent.double\n ? fire({\n interaction, pointer, event, eventTarget,\n type: 'doubletap',\n })\n : pointerEvent;\n\n interaction.prevTap = prevTap;\n interaction.tapTime = prevTap.timeStamp;\n }\n\n return pointerEvent;\n}\n\nfunction collectEventTargets ({ interaction, pointer, event, eventTarget, type }) {\n const pointerIndex = interaction.getPointerIndex(pointer);\n const pointerInfo = interaction.pointers[pointerIndex];\n\n // do not fire a tap event if the pointer was moved before being lifted\n if (type === 'tap' && (interaction.pointerWasMoved\n // or if the pointerup target is different to the pointerdown target\n || !(pointerInfo && pointerInfo.downTarget === eventTarget))) {\n return [];\n }\n\n const path = utils.dom.getPath(eventTarget);\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n path,\n targets: [],\n element: null,\n };\n\n for (const element of path) {\n signalArg.element = element;\n\n signals.fire('collect-targets', signalArg);\n }\n\n if (type === 'hold') {\n signalArg.targets = signalArg.targets.filter(target =>\n target.eventable.options.holdDuration === interaction.pointers[pointerIndex].hold.duration);\n }\n\n return signalArg.targets;\n}\n\nfunction install (scope) {\n const {\n interactions,\n } = scope;\n\n scope.pointerEvents = pointerEvents;\n scope.defaults.pointerEvents = pointerEvents.defaults;\n\n interactions.signals.on('new', interaction => {\n interaction.prevTap = null; // the most recent tap event on this interaction\n interaction.tapTime = 0; // time of the most recent tap event\n });\n\n interactions.signals.on('update-pointer', function ({ down, pointerInfo }) {\n if (!down) {\n return;\n }\n\n pointerInfo.hold = { duration: Infinity, timeout: null };\n });\n\n interactions.signals.on('move', function ({ interaction, pointer, event, eventTarget, duplicateMove }) {\n const pointerIndex = interaction.getPointerIndex(pointer);\n\n if (!duplicateMove && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {\n if (interaction.pointerIsDown) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout);\n }\n\n fire({\n interaction, pointer, event, eventTarget,\n type: 'move',\n });\n }\n });\n\n interactions.signals.on('down', function ({ interaction, pointer, event, eventTarget, pointerIndex }) {\n const timer = interaction.pointers[pointerIndex].hold;\n const path = utils.dom.getPath(eventTarget);\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'hold',\n targets: [],\n path,\n element: null,\n };\n\n for (const element of path) {\n signalArg.element = element;\n\n signals.fire('collect-targets', signalArg);\n }\n\n if (!signalArg.targets.length) { return; }\n\n let minDuration = Infinity;\n\n for (const target of signalArg.targets) {\n const holdDuration = target.eventable.options.holdDuration;\n\n if (holdDuration < minDuration) {\n minDuration = holdDuration;\n }\n }\n\n timer.duration = minDuration;\n timer.timeout = setTimeout(function () {\n fire({\n interaction,\n eventTarget,\n pointer,\n event,\n type: 'hold',\n });\n }, minDuration);\n });\n\n interactions.signals.on('up', ({ interaction, pointer, event, eventTarget }) => {\n if (!interaction.pointerWasMoved) {\n fire({ interaction, eventTarget, pointer, event, type: 'tap' });\n }\n });\n\n for (const signalName of ['up', 'cancel']) {\n interactions.signals.on(signalName, function ({ interaction, pointerIndex }) {\n if (interaction.pointers[pointerIndex].hold) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout);\n }\n });\n }\n\n for (let i = 0; i < simpleSignals.length; i++) {\n interactions.signals.on(simpleSignals[i], createSignalListener(simpleEvents[i]));\n }\n}\n\nfunction createSignalListener (type) {\n return function ({ interaction, pointer, event, eventTarget }) {\n fire({ interaction, eventTarget, pointer, event, type });\n };\n}\n\nexport default pointerEvents;\n","function install (scope) {\n const {\n pointerEvents,\n interactions,\n } = scope;\n\n pointerEvents.signals.on('new', onNew);\n pointerEvents.signals.on('fired', arg => onFired(arg, pointerEvents));\n\n for (const signal of ['move', 'up', 'cancel', 'endall']) {\n interactions.signals.on(signal, endHoldRepeat);\n }\n\n // don't repeat by default\n pointerEvents.defaults.holdRepeatInterval = 0;\n pointerEvents.types.push('holdrepeat');\n}\n\nfunction onNew ({ pointerEvent }) {\n if (pointerEvent.type !== 'hold') { return; }\n\n pointerEvent.count = (pointerEvent.count || 0) + 1;\n}\n\nfunction onFired ({ interaction, pointerEvent, eventTarget, targets }, pointerEvents) {\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(function () {\n pointerEvents.fire({\n interaction,\n eventTarget,\n type: 'hold',\n pointer: pointerEvent,\n event: pointerEvent,\n });\n }, interval);\n}\n\nfunction endHoldRepeat ({ interaction }) {\n // set the interaction's holdStopTime property\n // to stop further holdRepeat events\n if (interaction.holdIntervalHandle) {\n clearInterval(interaction.holdIntervalHandle);\n interaction.holdIntervalHandle = null;\n }\n}\n\nexport default {\n install,\n};\n","import * as is from '@interactjs/utils/is';\nimport extend from '@interactjs/utils/extend';\nimport { merge } from '@interactjs/utils/arr';\n\nfunction install (scope) {\n const {\n pointerEvents,\n actions,\n Interactable,\n interactables,\n } = scope;\n\n pointerEvents.signals.on('collect-targets', function ({ targets, element, type, eventTarget }) {\n scope.interactables.forEachMatch(element, interactable => {\n const eventable = interactable.events;\n const options = eventable.options;\n\n if (\n eventable.types[type] &&\n eventable.types[type].length &&\n is.element(element) &&\n interactable.testIgnoreAllow(options, element, eventTarget)) {\n\n targets.push({\n element,\n eventable,\n props: { interactable },\n });\n }\n });\n });\n\n interactables.signals.on('new', function ({ interactable }) {\n interactable.events.getRect = function (element) {\n return interactable.getRect(element);\n };\n });\n\n interactables.signals.on('set', function ({ interactable, options }) {\n extend(interactable.events.options, pointerEvents.defaults);\n extend(interactable.events.options, options.pointerEvents || {});\n });\n\n merge(actions.eventTypes, pointerEvents.types);\n\n Interactable.prototype.pointerEvents = function (options) {\n extend(this.events.options, options);\n\n return this;\n };\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\nexport default {\n install,\n};\n","import pointerEvents from './base';\nimport holdRepeat from './holdRepeat';\nimport interactableTargets from './interactableTargets';\n\nfunction install (scope) {\n pointerEvents.install(scope);\n holdRepeat.install(scope);\n interactableTargets.install(scope);\n}\n\nexport {\n pointerEvents,\n holdRepeat,\n interactableTargets,\n install,\n};\n","import { newInteraction } from '@interactjs/core/interactions';\nimport {\n arr,\n is,\n extend,\n rect as rectUtils,\n pointer as pointerUtils,\n win,\n} from '@interactjs/utils';\n\nexport function install (scope) {\n const {\n actions,\n interactions,\n /** @lends Interactable */\n Interactable,\n } = scope;\n\n // add action reflow event types\n for (const actionName of actions.names) {\n actions.eventTypes.push(`${actionName}reflow`);\n }\n\n // remove completed reflow interactions\n interactions.signals.on('stop', ({ interaction }) => {\n if (interaction.pointerType === 'reflow') {\n interaction._reflowResolve();\n arr.remove(scope.interactions.list, interaction);\n }\n });\n\n /**\n * ```js\n * const interactable = interact(target);\n * const drag = { name: drag, axis: 'x' };\n * const resize = { name: resize, edges: { left: true, bottom: true };\n *\n * interactable.reflow(drag);\n * interactable.reflow(resize);\n * ```\n *\n * Start an action sequence to re-apply modifiers, check drops, etc.\n *\n * @param { Object } action The action to begin\n * @param { string } action.name The name of the action\n * @returns { Promise }\n */\n Interactable.prototype.reflow = function (action) {\n return reflow(this, action, scope);\n };\n}\n\nfunction reflow (interactable, action, scope) {\n const elements = is.string(interactable.target)\n ? arr.from(interactable._context.querySelectorAll(interactable.target))\n : [interactable.target];\n\n const Promise = win.window.Promise;\n const promises = Promise ? [] : null;\n\n for (const element of elements) {\n const rect = interactable.getRect(element);\n\n if (!rect) { break; }\n\n const runningInteraction = arr.find(\n scope.interactions.list,\n interaction => {\n return interaction.interacting() &&\n interaction.target === interactable &&\n interaction.element === element &&\n interaction.prepared.name === action.name;\n });\n let reflowPromise;\n\n if (runningInteraction) {\n runningInteraction.move();\n\n reflowPromise = runningInteraction._reflowPromise || new Promise(resolve => {\n runningInteraction._reflowResolve = resolve;\n });\n }\n else {\n const xywh = rectUtils.tlbrToXywh(rect);\n const coords = {\n page : { x: xywh.x, y: xywh.y },\n client : { x: xywh.x, y: xywh.y },\n timeStamp: Date.now(),\n };\n\n const event = pointerUtils.coordsToEvent(coords);\n reflowPromise = startReflow(scope, interactable, element, action, event);\n }\n\n if (promises) {\n promises.push(reflowPromise);\n }\n }\n\n return promises && Promise.all(promises).then(() => interactable);\n}\n\nfunction startReflow (scope, interactable, element, action, event) {\n const interaction = newInteraction({ pointerType: 'reflow' }, scope);\n const signalArg = {\n interaction,\n event,\n pointer: event,\n eventTarget: element,\n phase: 'reflow',\n };\n\n interaction.target = interactable;\n interaction.element = element;\n interaction.prepared = extend({}, action);\n interaction.prevEvent = event;\n interaction.updatePointer(event, event, element, true);\n\n interaction._doPhase(signalArg);\n\n const reflowPromise = win.window.Promise\n ? new win.window.Promise((resolve) => {\n interaction._reflowResolve = resolve;\n })\n : null;\n\n interaction._reflowPromise = reflowPromise;\n interaction.start(action, interactable, element);\n\n if (interaction._interacting) {\n interaction.move(signalArg);\n interaction.end(event);\n }\n else {\n interaction.stop();\n }\n\n interaction.removePointer(event, event);\n interaction.pointerIsDown = false;\n\n return reflowPromise;\n}\n\nexport default { install };\n","/* browser entry point */\n\nimport { default as interact, scope } from './interact';\nimport interactablePreventDefault from '@interactjs/core/interactablePreventDefault';\nimport inertia from '@interactjs/inertia';\nimport * as pointerEvents from '@interactjs/pointer-events';\nimport * as autoStart from '@interactjs/auto-start';\nimport * as actions from '@interactjs/actions';\nimport modifiersBase from '@interactjs/modifiers/base';\nimport * as modifiers from '@interactjs/modifiers';\nimport * as snappers from '@interactjs/utils/snappers';\nimport extend from '@interactjs/utils/extend';\nimport autoScroll from '@interactjs/auto-scroll';\nimport reflow from '@interactjs/reflow';\n\nexport function init (window) {\n scope.init(window);\n\n interact.use(interactablePreventDefault);\n\n // inertia\n interact.use(inertia);\n\n // pointerEvents\n interact.use(pointerEvents);\n\n // autoStart, hold\n interact.use(autoStart);\n\n // drag and drop, resize, gesture\n interact.use(actions);\n\n // snap, resize, etc.\n interact.use(modifiersBase);\n interact.modifiers = extend(scope.modifiers, modifiers);\n interact.snappers = snappers;\n interact.createSnapGrid = interact.snappers.grid;\n\n\n // for backwrads compatibility\n for (const type in modifiers) {\n const { _defaults, _methods } = modifiers[type];\n\n _defaults._methods = _methods;\n scope.defaults.perAction[type] = _defaults;\n }\n\n // autoScroll\n interact.use(autoScroll);\n\n // reflow\n interact.use(reflow);\n\n return interact;\n}\n\n// eslint-disable-next-line no-undef\ninteract.version = init.version = process.env.npm_package_version;\n\nexport default interact;\nexport { interact };\n","export default (thing) => !!(thing && thing.Window) && (thing instanceof thing.Window);\n","import win from './window';\nimport isWindow from './isWindow';\n\nexport const window = thing => thing === win.window || isWindow(thing);\n\nexport const docFrag = thing => object(thing) && thing.nodeType === 11;\n\nexport const object = thing => !!thing && (typeof thing === 'object');\n\nexport const func = thing => typeof thing === 'function';\n\nexport const number = thing => typeof thing === 'number' ;\n\nexport const bool = thing => typeof thing === 'boolean' ;\n\nexport const string = thing => typeof thing === 'string' ;\n\nexport const element = thing => {\n if (!thing || (typeof thing !== 'object')) { return false; }\n\n const _window = win.getWindow(thing) || win.window;\n\n return (/object|function/.test(typeof _window.Element)\n ? thing instanceof _window.Element //DOM2\n : thing.nodeType === 1 && typeof thing.nodeName === 'string');\n};\n\nexport const plainObject = thing => object(thing) &&\n !!thing.constructor &&\n thing.constructor.name === 'Object';\n\nexport const array = thing => (object(thing)\n && (typeof thing.length !== 'undefined')\n && func(thing.splice));\n","import * as arr from '@interactjs/utils/arr';\n\nclass DropEvent {\n /**\n * Class of events fired on dropzones during drags with acceptable targets.\n */\n constructor (dropStatus, dragEvent, type) {\n const { element, dropzone } = type === 'dragleave'\n ? dropStatus.prev\n : dropStatus.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.interaction = dragEvent.interaction;\n this.draggable = dragEvent.interactable;\n this.timeStamp = dragEvent.timeStamp;\n\n this.propagationStopped = this.immediatePropagationStopped = false;\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 { dropStatus } = this.interaction;\n\n if (\n (this.type !== 'dropactivate') && (\n !this.dropzone ||\n dropStatus.cur.dropzone !== this.dropzone ||\n dropStatus.cur.element !== this.target)) {\n return;\n }\n\n dropStatus.prev.dropzone = this.dropzone;\n dropStatus.prev.element = this.target;\n\n dropStatus.rejected = true;\n dropStatus.events.enter = null;\n\n this.stopImmediatePropagation();\n\n if (this.type === 'dropactivate') {\n const activeDrops = dropStatus.activeDrops;\n const index = arr.findIndex(activeDrops, ({ dropzone, element }) =>\n dropzone === this.dropzone && element === this.target);\n\n dropStatus.activeDrops = [\n ...activeDrops.slice(0, index),\n ...activeDrops.slice(index + 1),\n ];\n\n const deactivateEvent = new DropEvent(dropStatus, this.dragEvent, 'dropdeactivate');\n\n deactivateEvent.dropzone = this.dropzone;\n deactivateEvent.target = this.target;\n\n this.dropzone.fire(deactivateEvent);\n }\n else {\n this.dropzone.fire(new DropEvent(dropStatus, this.dragEvent, 'dragleave'));\n }\n }\n\n preventDefault () {}\n\n stopPropagation () {\n this.propagationStopped = true;\n }\n\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true;\n }\n}\n\nexport default DropEvent;\n","class Signals {\n constructor () {\n this.listeners = {\n // signalName: [listeners],\n };\n }\n\n on (name, listener) {\n if (!this.listeners[name]) {\n this.listeners[name] = [listener];\n return;\n }\n\n this.listeners[name].push(listener);\n }\n\n off (name, listener) {\n if (!this.listeners[name]) { return; }\n\n const index = this.listeners[name].indexOf(listener);\n\n if (index !== -1) {\n this.listeners[name].splice(index, 1);\n }\n }\n\n fire (name, arg) {\n const targetListeners = this.listeners[name];\n\n if (!targetListeners) { return; }\n\n for (const listener of targetListeners) {\n if (listener(arg, name) === false) {\n return false;\n }\n }\n }\n}\n\nexport default Signals;\n","export default (x, y) => Math.sqrt(x * x + y * y);\n","import hypot from './hypot';\nimport browser from './browser';\nimport dom from './domObjects';\nimport * as domUtils from './domUtils';\nimport domObjects from './domObjects';\nimport * as is from './is';\nimport pointerExtend from './pointerExtend';\n\nconst pointerUtils = {\n copyCoords: function (dest, src) {\n dest.page = dest.page || {};\n dest.page.x = src.page.x;\n dest.page.y = src.page.y;\n\n dest.client = dest.client || {};\n dest.client.x = src.client.x;\n dest.client.y = src.client.y;\n\n dest.timeStamp = src.timeStamp;\n },\n\n setCoordDeltas: function (targetObj, prev, cur) {\n targetObj.page.x = cur.page.x - prev.page.x;\n targetObj.page.y = cur.page.y - prev.page.y;\n targetObj.client.x = cur.client.x - prev.client.x;\n targetObj.client.y = cur.client.y - prev.client.y;\n targetObj.timeStamp = cur.timeStamp - prev.timeStamp;\n },\n\n setCoordVelocity (targetObj, delta) {\n const dt = Math.max(delta.timeStamp / 1000, 0.001);\n\n targetObj.page.x = delta.page.x / dt;\n targetObj.page.y = delta.page.y / dt;\n targetObj.client.x = delta.client.x / dt;\n targetObj.client.y = delta.client.y / dt;\n targetObj.timeStamp = dt;\n },\n\n isNativePointer: function (pointer) {\n return (pointer instanceof dom.Event || pointer instanceof dom.Touch);\n },\n\n // Get specified X/Y coords for mouse or event.touches[0]\n getXY: function (type, pointer, xy) {\n xy = xy || {};\n type = type || 'page';\n\n xy.x = pointer[type + 'X'];\n xy.y = pointer[type + 'Y'];\n\n return xy;\n },\n\n getPageXY: function (pointer, page) {\n page = page || {};\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n pointerUtils.getXY('screen', pointer, page);\n\n page.x += window.scrollX;\n page.y += window.scrollY;\n }\n else {\n pointerUtils.getXY('page', pointer, page);\n }\n\n return page;\n },\n\n getClientXY: function (pointer, client) {\n client = client || {};\n\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n pointerUtils.getXY('screen', pointer, client);\n }\n else {\n pointerUtils.getXY('client', pointer, client);\n }\n\n return client;\n },\n\n getPointerId: function (pointer) {\n return is.number(pointer.pointerId)? pointer.pointerId : pointer.identifier;\n },\n\n setCoords: function (targetObj, pointers, timeStamp) {\n const pointer = (pointers.length > 1\n ? pointerUtils.pointerAverage(pointers)\n : pointers[0]);\n\n const tmpXY = {};\n\n pointerUtils.getPageXY(pointer, tmpXY);\n targetObj.page.x = tmpXY.x;\n targetObj.page.y = tmpXY.y;\n\n pointerUtils.getClientXY(pointer, tmpXY);\n targetObj.client.x = tmpXY.x;\n targetObj.client.y = tmpXY.y;\n\n targetObj.timeStamp = is.number(timeStamp) ? timeStamp :new Date().getTime();\n },\n\n pointerExtend: pointerExtend,\n\n getTouchPair: function (event) {\n const touches = [];\n\n // array of touches is supplied\n if (is.array(event)) {\n touches[0] = event[0];\n touches[1] = event[1];\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0];\n touches[1] = event.changedTouches[0];\n }\n else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0];\n touches[1] = event.changedTouches[1];\n }\n }\n else {\n touches[0] = event.touches[0];\n touches[1] = event.touches[1];\n }\n }\n\n return touches;\n },\n\n pointerAverage: function (pointers) {\n const average = {\n pageX : 0,\n pageY : 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n };\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop] += pointer[prop];\n }\n }\n for (const prop in average) {\n average[prop] /= pointers.length;\n }\n\n return average;\n },\n\n touchBBox: function (event) {\n if (!event.length && !(event.touches && event.touches.length > 1)) {\n return;\n }\n\n const touches = pointerUtils.getTouchPair(event);\n const minX = Math.min(touches[0].pageX, touches[1].pageX);\n const minY = Math.min(touches[0].pageY, touches[1].pageY);\n const maxX = Math.max(touches[0].pageX, touches[1].pageX);\n const maxY = Math.max(touches[0].pageY, touches[1].pageY);\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n },\n\n touchDistance: function (event, deltaSource) {\n const sourceX = deltaSource + 'X';\n const sourceY = deltaSource + 'Y';\n const touches = pointerUtils.getTouchPair(event);\n\n\n const dx = touches[0][sourceX] - touches[1][sourceX];\n const dy = touches[0][sourceY] - touches[1][sourceY];\n\n return hypot(dx, dy);\n },\n\n touchAngle: function (event, prevAngle, deltaSource) {\n const sourceX = deltaSource + 'X';\n const sourceY = deltaSource + 'Y';\n const touches = pointerUtils.getTouchPair(event);\n const dx = touches[1][sourceX] - touches[0][sourceX];\n const dy = touches[1][sourceY] - touches[0][sourceY];\n const angle = 180 * Math.atan2(dy , dx) / Math.PI;\n\n return angle;\n },\n\n getPointerType: function (pointer) {\n return is.string(pointer.pointerType)\n ? pointer.pointerType\n : is.number(pointer.pointerType)\n ? [undefined, undefined,'touch', 'pen', 'mouse'][pointer.pointerType]\n // if the PointerEvent API isn't available, then the \"pointer\" must\n // be either a MouseEvent, TouchEvent, or Touch object\n : /touch/.test(pointer.type) || pointer instanceof domObjects.Touch\n ? 'touch'\n : 'mouse';\n },\n\n // [ event.target, event.currentTarget ]\n getEventTargets: function (event) {\n const path = is.func(event.composedPath) ? event.composedPath() : event.path;\n\n return [\n domUtils.getActualElement(path ? path[0] : event.target),\n domUtils.getActualElement(event.currentTarget),\n ];\n },\n\n newCoords () {\n return {\n page : { x: 0, y: 0 },\n client : { x: 0, y: 0 },\n timeStamp: 0,\n };\n },\n\n coordsToEvent: function ({ page, client, timeStamp }) {\n return {\n page,\n client,\n timeStamp,\n get pageX () { return page.x; },\n get pageY () { return page.y; },\n get clientX () { return client.x; },\n get clientY () { return client.y; },\n };\n },\n};\n\nexport default pointerUtils;\n","export default {\n base: {\n preventDefault: 'auto',\n deltaSource : 'page',\n },\n\n perAction: {\n enabled : false,\n origin: { x: 0, y: 0 },\n },\n};\n","import extend from '@interactjs/utils/extend';\nimport getOriginXY from '@interactjs/utils/getOriginXY';\nimport defaults from './defaultOptions';\nimport hypot from '@interactjs/utils/hypot';\n\nclass InteractEvent {\n /** */\n constructor (interaction, event, actionName, phase, element, related, preEnd, type) {\n element = element || interaction.element;\n\n const target = interaction.target;\n const deltaSource = (target && target.options || defaults).deltaSource;\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.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.button;\n this.buttons = event.buttons;\n this.target = element;\n this.currentTarget = element;\n this.relatedTarget = related || null;\n this.preEnd = preEnd;\n this.type = type || (actionName + (phase || ''));\n this.interaction = interaction;\n this.interactable = target;\n\n this.t0 = starting\n ? interaction.pointers[interaction.pointers.length - 1].downTime\n : prevEvent.t0;\n\n this.x0 = interaction.coords.start.page.x - origin.x;\n this.y0 = interaction.coords.start.page.y - origin.y;\n this.clientX0 = interaction.coords.start.client.x - origin.x;\n this.clientY0 = interaction.coords.start.client.y - origin.y;\n\n if (starting || ending) {\n this.delta = { x: 0, y: 0 };\n }\n else {\n this.delta = {\n x: this[deltaSource].x - prevEvent[deltaSource].x,\n y: this[deltaSource].y - prevEvent[deltaSource].y,\n };\n }\n\n this.dt = interaction.coords.delta.timeStamp;\n this.duration = this.timeStamp - this.t0;\n\n // velocity and speed in pixels per second\n this.velocity = extend({}, interaction.coords.velocity[deltaSource]);\n this.speed = hypot(this.velocity.x, this.velocity.y);\n\n this.swipe = (ending || phase === 'inertiastart')? this.getSwipe() : null;\n }\n\n get pageX () { return this.page.x; }\n get pageY () { return this.page.y; }\n set pageX (value) { this.page.x = value; }\n set pageY (value) { this.page.y = value; }\n\n get clientX () { return this.client.x; }\n get clientY () { return this.client.y; }\n set clientX (value) { this.client.x = value; }\n set clientY (value) { this.client.y = value; }\n\n get dx () { return this.delta.x; }\n get dy () { return this.delta.y; }\n set dx (value) { this.delta.x = value; }\n set dy (value) { this.delta.y = value; }\n\n get velocityX () { return this.velocity.x; }\n get velocityY () { return this.velocity.y; }\n set velocityX (value) { this.velocity.x = value; }\n set velocityY (value) { this.velocity.y = value; }\n\n getSwipe () {\n const interaction = this.interaction;\n\n if (interaction.prevEvent.speed < 600\n || this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n return null;\n }\n\n let angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI;\n const overlap = 22.5;\n\n if (angle < 0) {\n angle += 360;\n }\n\n const left = 135 - overlap <= angle && angle < 225 + overlap;\n const up = 225 - overlap <= angle && angle < 315 + overlap;\n\n const right = !left && (315 - overlap <= angle || angle < 45 + overlap);\n const down = !up && 45 - overlap <= angle && angle < 135 + overlap;\n\n return {\n up,\n down,\n left,\n right,\n angle,\n speed: interaction.prevEvent.speed,\n velocity: {\n x: interaction.prevEvent.velocityX,\n y: interaction.prevEvent.velocityY,\n },\n };\n }\n\n preventDefault () {}\n\n /** */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true;\n }\n\n /** */\n stopPropagation () {\n this.propagationStopped = true;\n }\n}\n\nexport default InteractEvent;\n","import clone from '@interactjs/utils/clone';\nimport * as is from '@interactjs/utils/is';\nimport events from '@interactjs/utils/events';\nimport extend from '@interactjs/utils/extend';\nimport * as arr from '@interactjs/utils/arr';\nimport normalizeListeners from '@interactjs/utils/normalizeListeners';\nimport Eventable from './Eventable';\n\nimport {\n getElementRect,\n nodeContains,\n trySelector,\n} from '@interactjs/utils/domUtils';\nimport { getWindow } from '@interactjs/utils/window';\nimport browser from '@interactjs/utils/browser';\n\nclass Interactable {\n get _defaults () {\n return {\n base: {},\n perAction: {},\n };\n }\n\n /** */\n constructor (target, options, defaultContext) {\n this._actions = options.actions;\n this.target = target;\n this.events = new Eventable();\n this._context = options.context || defaultContext;\n this._win = getWindow(trySelector(target)? this._context : target);\n this._doc = this._win.document;\n\n this.set(options);\n }\n\n setOnEvents (actionName, phases) {\n if (is.func(phases.onstart) ) { this.on(`${actionName}start` , phases.onstart ); }\n if (is.func(phases.onmove) ) { this.on(`${actionName}move` , phases.onmove ); }\n if (is.func(phases.onend) ) { this.on(`${actionName}end` , phases.onend ); }\n if (is.func(phases.oninertiastart)) { this.on(`${actionName}inertiastart`, phases.oninertiastart); }\n\n return this;\n }\n\n updatePerActionListeners (actionName, prev, cur) {\n if (is.array(prev)) {\n this.off(actionName, prev);\n }\n\n if (is.array(cur)) {\n this.on(actionName, cur);\n }\n }\n\n setPerAction (actionName, options) {\n const defaults = this._defaults;\n\n // for all the default per-action options\n for (const optionName in options) {\n const actionOptions = this.options[actionName];\n const optionValue = options[optionName];\n const isArray = is.array(optionValue);\n\n // remove old event listeners and add new ones\n if (optionName === 'listeners') {\n this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue);\n }\n\n // if the option value is an array\n if (isArray) {\n actionOptions[optionName] = arr.from(optionValue);\n }\n // if the option value is an object\n else if (!isArray && is.plainObject(optionValue)) {\n // copy the object\n actionOptions[optionName] = extend(\n actionOptions[optionName] || {},\n clone(optionValue));\n\n // set anabled field to true if it exists in the defaults\n if (is.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) {\n actionOptions[optionName].enabled = optionValue.enabled === false? false : true;\n }\n }\n // if the option value is a boolean and the default is an object\n else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n actionOptions[optionName].enabled = optionValue;\n }\n // if it's anything else, do a plain assignment\n else {\n actionOptions[optionName] = optionValue;\n }\n }\n }\n\n /**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {object} The object's bounding rectangle.\n */\n getRect (element) {\n element = element || this.target;\n\n if (is.string(this.target) && !(is.element(element))) {\n element = this._context.querySelector(this.target);\n }\n\n return getElementRect(element);\n }\n\n /**\n * Returns or sets the function used to calculate the interactable's\n * element's rectangle\n *\n * @param {function} [checker] A function which returns this Interactable's\n * bounding rectangle. See {@link Interactable.getRect}\n * @return {function | object} The checker function or this Interactable\n */\n rectChecker (checker) {\n if (is.func(checker)) {\n this.getRect = checker;\n\n return this;\n }\n\n if (checker === null) {\n delete this.options.getRect;\n\n return this;\n }\n\n return this.getRect;\n }\n\n _backCompatOption (optionName, newValue) {\n if (trySelector(newValue) || is.object(newValue)) {\n this.options[optionName] = newValue;\n\n for (const action of this._actions.names) {\n this.options[action][optionName] = newValue;\n }\n\n return this;\n }\n\n return this.options[optionName];\n }\n\n /**\n * Gets or sets the origin of the Interactable's element. The x and y\n * of the origin will be subtracted from action event coordinates.\n *\n * @param {Element | object | string} [origin] An HTML or SVG Element whose\n * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\n * or any CSS selector\n *\n * @return {object} The current origin or this Interactable\n */\n origin (newValue) {\n return this._backCompatOption('origin', newValue);\n }\n\n /**\n * Returns or sets the mouse coordinate types used to calculate the\n * movement of the pointer.\n *\n * @param {string} [newValue] Use 'client' if you will be scrolling while\n * interacting; Use 'page' if you want autoScroll to work\n * @return {string | object} The current deltaSource or this Interactable\n */\n deltaSource (newValue) {\n if (newValue === 'page' || newValue === 'client') {\n this.options.deltaSource = newValue;\n\n return this;\n }\n\n return this.options.deltaSource;\n }\n\n /**\n * Gets the selector context Node of the Interactable. The default is\n * `window.document`.\n *\n * @return {Node} The context Node of this Interactable\n */\n context () {\n return this._context;\n }\n\n inContext (element) {\n return (this._context === element.ownerDocument\n || nodeContains(this._context, element));\n }\n\n /**\n * Calls listeners for the given InteractEvent type bound globally\n * and directly to this Interactable\n *\n * @param {InteractEvent} iEvent The InteractEvent object to be fired on this\n * Interactable\n * @return {Interactable} this Interactable\n */\n fire (iEvent) {\n this.events.fire(iEvent);\n\n return this;\n }\n\n _onOff (method, typeArg, listenerArg, options) {\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg;\n listenerArg = null;\n }\n\n const addRemove = method === 'on' ? 'add' : 'remove';\n const listeners = normalizeListeners(typeArg, listenerArg);\n\n for (let type in listeners) {\n if (type === 'wheel') { type = browser.wheelEvent; }\n\n for (const listener of listeners[type]) {\n // if it is an action event type\n if (arr.contains(this._actions.eventTypes, type)) {\n this.events[method](type, listener);\n }\n // delegated event\n else if (is.string(this.target)) {\n events[`${addRemove}Delegate`](this.target, this._context, type, listener, options);\n }\n // remove listener from this Interatable's element\n else {\n events[addRemove](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, listener, options) {\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, listener, options) {\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) {\n const defaults = this._defaults;\n\n if (!is.object(options)) {\n options = {};\n }\n\n this.options = clone(defaults.base);\n\n for (const actionName in this._actions.methodDict) {\n const methodName = this._actions.methodDict[actionName];\n\n this.options[actionName] = {};\n this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults[actionName]));\n\n this[methodName](options[actionName]);\n }\n\n for (const setting in options) {\n if (is.func(this[setting])) {\n this[setting](options[setting]);\n }\n }\n\n return this;\n }\n\n /**\n * Remove this interactable from the list of interactables and remove it's\n * action capabilities and event listeners\n *\n * @return {interact}\n */\n unset () {\n events.remove(this.target, 'all');\n\n if (is.string(this.target)) {\n // remove delegated events\n for (const type in events.delegatedEvents) {\n const delegated = events.delegatedEvents[type];\n\n if (delegated.selectors[0] === this.target\n && delegated.contexts[0] === this._context) {\n\n delegated.selectors.splice(0, 1);\n delegated.contexts .splice(0, 1);\n delegated.listeners.splice(0, 1);\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegated[type] = null;\n }\n }\n\n events.remove(this._context, type, events.delegateListener);\n events.remove(this._context, type, events.delegateUseCapture, true);\n }\n }\n else {\n events.remove(this, 'all');\n }\n }\n}\n\nexport default Interactable;\n","import InteractEvent from './InteractEvent';\nimport * as utils from '@interactjs/utils';\n\nclass Interaction {\n get pointerMoveTolerance () {\n return 1;\n }\n\n /** */\n constructor ({ pointerType, signals }) {\n this._signals = signals;\n\n this.target = null; // current interactable being interacted with\n this.element = null; // the target element of the interactable\n this.prepared = { // action that's ready to be fired on next move event\n name : null,\n axis : null,\n edges: null,\n };\n\n // keep track of added pointers\n this.pointers = [/* { id, pointer, event, target, downTime }*/];\n\n this.coords = {\n // Starting InteractEvent pointer coordinates\n start: utils.pointer.newCoords(),\n // Previous native pointer move event coordinates\n prev: utils.pointer.newCoords(),\n // current native pointer move event coordinates\n cur: utils.pointer.newCoords(),\n // Change in coordinates and time of the pointer\n delta: utils.pointer.newCoords(),\n // pointer velocity\n velocity: utils.pointer.newCoords(),\n };\n\n this.downEvent = null; // pointerdown/mousedown/touchstart event\n this.downPointer = {};\n\n this._latestPointer = {\n pointer: null,\n event: null,\n eventTarget : null,\n };\n\n this.prevEvent = null; // previous action event\n\n this.pointerIsDown = false;\n this.pointerWasMoved = false;\n this._interacting = false;\n this._ending = false;\n\n this.pointerType = pointerType;\n\n this._signals.fire('new', this);\n }\n\n pointerDown (pointer, event, eventTarget) {\n const pointerIndex = this.updatePointer(pointer, event, eventTarget, true);\n\n this._signals.fire('down', {\n pointer,\n event,\n eventTarget,\n pointerIndex,\n interaction: this,\n });\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable({\n * // disable the default drag start by down->move\n * manualStart: true\n * })\n * // start dragging after the user holds the pointer down\n * .on('hold', function (event) {\n * var interaction = event.interaction;\n *\n * if (!interaction.interacting()) {\n * interaction.start({ name: 'drag' },\n * event.interactable,\n * event.currentTarget);\n * }\n * });\n * ```\n *\n * Start an action with the given Interactable and Element as tartgets. The\n * action must be enabled for the target Interactable and an appropriate\n * number of pointers must be held down - 1 for drag/resize, 2 for gesture.\n *\n * Use it with `interactable.able({ manualStart: false })` to always\n * [start actions manually](https://github.com/taye/interact.js/issues/114)\n *\n * @param {object} action The action to be performed - drag, resize, etc.\n * @param {Interactable} target The Interactable to target\n * @param {Element} element The DOM Element to target\n * @return {object} interact\n */\n start (action, target, element) {\n if (this.interacting()\n || !this.pointerIsDown\n || this.pointers.length < (action.name === 'gesture'? 2 : 1)) {\n return;\n }\n\n utils.copyAction(this.prepared, action);\n\n this.target = target;\n this.element = element;\n this._interacting = this._doPhase({\n interaction: this,\n event: this.downEvent,\n phase: 'start',\n });\n }\n\n pointerMove (pointer, event, eventTarget) {\n if (!this.simulation) {\n this.updatePointer(pointer, event, eventTarget, false);\n utils.pointer.setCoords(this.coords.cur, this.pointers.map(p => p.pointer));\n }\n\n const duplicateMove = (this.coords.cur.page.x === this.coords.prev.page.x\n && this.coords.cur.page.y === this.coords.prev.page.y\n && this.coords.cur.client.x === this.coords.prev.client.x\n && this.coords.cur.client.y === this.coords.prev.client.y);\n\n let dx;\n let dy;\n\n // register movement greater than pointerMoveTolerance\n if (this.pointerIsDown && !this.pointerWasMoved) {\n dx = this.coords.cur.client.x - this.coords.start.client.x;\n dy = this.coords.cur.client.y - this.coords.start.client.y;\n\n this.pointerWasMoved = utils.hypot(dx, dy) > this.pointerMoveTolerance;\n }\n\n const signalArg = {\n pointer,\n pointerIndex: this.getPointerIndex(pointer),\n event,\n eventTarget,\n dx,\n dy,\n duplicate: duplicateMove,\n interaction: this,\n };\n\n if (!duplicateMove) {\n // set pointer coordinate, time changes and velocity\n utils.pointer.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur);\n utils.pointer.setCoordVelocity(this.coords.velocity, this.coords.delta);\n }\n\n this._signals.fire('move', signalArg);\n\n if (!duplicateMove) {\n // if interacting, fire an 'action-move' signal etc\n if (this.interacting()) {\n this.move(signalArg);\n }\n\n if (this.pointerWasMoved) {\n utils.pointer.copyCoords(this.coords.prev, this.coords.cur);\n }\n }\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('dragmove', function (event) {\n * if (someCondition) {\n * // change the snap settings\n * event.interactable.draggable({ snap: { targets: [] }});\n * // fire another move event with re-calculated snap\n * event.interaction.move();\n * }\n * });\n * ```\n *\n * Force a move of the current action at the same coordinates. Useful if\n * snap/restrict has been changed and you want a movement with the new\n * settings.\n */\n move (signalArg) {\n signalArg = utils.extend({\n pointer: this._latestPointer.pointer,\n event: this._latestPointer.event,\n eventTarget: this._latestPointer.eventTarget,\n interaction: this,\n noBefore: false,\n }, signalArg || {});\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, event, eventTarget, curEventTarget) {\n const pointerIndex = this.getPointerIndex(pointer);\n\n this._signals.fire(/cancel$/i.test(event.type)? 'cancel' : 'up', {\n pointer,\n pointerIndex,\n event,\n eventTarget,\n curEventTarget,\n interaction: this,\n });\n\n if (!this.simulation) {\n this.end(event);\n }\n\n this.pointerIsDown = false;\n this.removePointer(pointer, event);\n }\n\n documentBlur (event) {\n this.end(event);\n this._signals.fire('blur', { event, interaction: this });\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('move', function (event) {\n * if (event.pageX > 1000) {\n * // end the current action\n * event.interaction.end();\n * // stop all further listeners from being called\n * event.stopImmediatePropagation();\n * }\n * });\n * ```\n *\n * @param {PointerEvent} [event]\n */\n end (event) {\n this._ending = true;\n event = event || this._latestPointer.event;\n let endPhaseResult;\n\n if (this.interacting()) {\n endPhaseResult = this._doPhase({\n event,\n interaction: this,\n phase: 'end',\n });\n }\n\n this._ending = false;\n\n if (endPhaseResult === true) {\n this.stop();\n }\n }\n\n currentAction () {\n return this._interacting? this.prepared.name: null;\n }\n\n interacting () {\n return this._interacting;\n }\n\n /** */\n stop () {\n this._signals.fire('stop', { interaction: this });\n\n this.target = this.element = null;\n\n this._interacting = false;\n this.prepared.name = this.prevEvent = null;\n }\n\n getPointerIndex (pointer) {\n const pointerId = utils.pointer.getPointerId(pointer);\n\n // mouse and pen interactions may have only one pointer\n return (this.pointerType === 'mouse' || this.pointerType === 'pen')\n ? 0\n : utils.arr.findIndex(this.pointers, curPointer => curPointer.id === pointerId);\n }\n\n getPointerInfo (pointer) {\n return this.pointers[this.getPointerIndex(pointer)];\n }\n\n updatePointer (pointer, event, eventTarget, down) {\n const id = utils.pointer.getPointerId(pointer);\n let pointerIndex = this.getPointerIndex(pointer);\n let pointerInfo = this.pointers[pointerIndex];\n\n if (!pointerInfo) {\n pointerInfo = {\n id,\n pointer,\n event,\n downTime: null,\n downTarget: null,\n };\n\n pointerIndex = this.pointers.length;\n this.pointers.push(pointerInfo);\n }\n else {\n pointerInfo.pointer = pointer;\n }\n\n if (down) {\n this.pointerIsDown = true;\n\n if (!this.interacting()) {\n utils.pointer.setCoords(this.coords.start, this.pointers.map(p => p.pointer));\n\n utils.pointer.copyCoords(this.coords.cur , this.coords.start);\n utils.pointer.copyCoords(this.coords.prev, this.coords.start);\n utils.pointer.pointerExtend(this.downPointer, pointer);\n\n this.downEvent = event;\n pointerInfo.downTime = this.coords.cur.timeStamp;\n pointerInfo.downTarget = eventTarget;\n\n this.pointerWasMoved = false;\n }\n }\n\n this._updateLatestPointer(pointer, event, eventTarget);\n\n this._signals.fire('update-pointer', {\n pointer,\n event,\n eventTarget,\n down,\n pointerInfo,\n pointerIndex,\n interaction: this,\n });\n\n return pointerIndex;\n }\n\n removePointer (pointer, event) {\n const pointerIndex = this.getPointerIndex(pointer);\n\n if (pointerIndex === -1) { return; }\n\n const pointerInfo = this.pointers[pointerIndex];\n\n this._signals.fire('remove-pointer', {\n pointer,\n event,\n pointerIndex,\n pointerInfo,\n interaction: this,\n });\n\n this.pointers.splice(pointerIndex, 1);\n }\n\n _updateLatestPointer (pointer, event, eventTarget) {\n this._latestPointer.pointer = pointer;\n this._latestPointer.event = event;\n this._latestPointer.eventTarget = eventTarget;\n }\n\n _createPreparedEvent (event, phase, preEnd, type) {\n const actionName = this.prepared.name;\n\n return new InteractEvent(this, event, actionName, phase, this.element, null, preEnd, type);\n }\n\n _fireEvent (iEvent) {\n this.target.fire(iEvent);\n\n if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n this.prevEvent = iEvent;\n }\n }\n\n _doPhase (signalArg) {\n const { event, phase, preEnd, type } = signalArg;\n\n if (!signalArg.noBefore) {\n const beforeResult = this._signals.fire(`before-action-${phase}`, signalArg);\n\n if (beforeResult === false) {\n return false;\n }\n }\n\n const iEvent = signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type);\n\n this._signals.fire(`action-${phase}`, signalArg);\n\n this._fireEvent(iEvent);\n\n this._signals.fire(`after-action-${phase}`, signalArg);\n\n return true;\n }\n}\n\n/**\n * @alias Interaction.prototype.move\n */\nInteraction.prototype.doMove = utils.warnOnce(\n function (signalArg) {\n this.move(signalArg);\n },\n 'The interaction.doMove() method has been renamed to interaction.move()');\n\nexport default Interaction;\n","import base from './base';\nimport snapModule from './snap/pointer';\nimport snapSizeModule from './snap/size';\nimport snapEdgesModule from './snap/edges';\nimport restrictModule from './restrict/pointer';\nimport restrictEdgesModule from './restrict/edges';\nimport restrictSizeModule from './restrict/size';\n\nconst { makeModifier } = base;\n\nexport const snap = makeModifier(snapModule, 'snap');\nexport const snapSize = makeModifier(snapSizeModule, 'snapSize');\nexport const snapEdges = makeModifier(snapEdgesModule, 'snapEdges');\nexport const restrict = makeModifier(restrictModule, 'restrict');\nexport const restrictEdges = makeModifier(restrictEdgesModule, 'restrictEdges');\nexport const restrictSize = makeModifier(restrictSizeModule, 'restrictSize');\n","import pointerUtils from '@interactjs/utils/pointerUtils';\n\nexport default class PointerEvent {\n /** */\n constructor (type, pointer, event, eventTarget, interaction) {\n pointerUtils.pointerExtend(this, event);\n\n if (event !== pointer) {\n pointerUtils.pointerExtend(this, pointer);\n }\n\n this.interaction = interaction;\n\n this.timeStamp = new Date().getTime();\n this.originalEvent = event;\n this.type = type;\n this.pointerId = pointerUtils.getPointerId(pointer);\n this.pointerType = pointerUtils.getPointerType(pointer);\n this.target = eventTarget;\n this.currentTarget = null;\n\n if (type === 'tap') {\n const pointerIndex = interaction.getPointerIndex(pointer);\n this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime;\n\n const interval = this.timeStamp - interaction.tapTime;\n\n this.double = !!(interaction.prevTap\n && interaction.prevTap.type !== 'doubletap'\n && interaction.prevTap.target === this.target\n && interval < 500);\n }\n else if (type === 'doubletap') {\n this.dt = pointer.timeStamp - interaction.tapTime;\n }\n }\n\n subtractOrigin ({ x: originX, y: originY }) {\n this.pageX -= originX;\n this.pageY -= originY;\n this.clientX -= originX;\n this.clientY -= originY;\n\n return this;\n }\n\n addOrigin ({ x: originX, y: originY }) {\n this.pageX += originX;\n this.pageY += originY;\n this.clientX += originX;\n this.clientY += originY;\n\n return this;\n }\n\n /** */\n preventDefault () {\n this.originalEvent.preventDefault();\n }\n\n /** */\n stopPropagation () {\n this.propagationStopped = true;\n }\n\n /** */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true;\n }\n}\n","export default (grid) => {\n const coordFields = [\n ['x', 'y'],\n ['left', 'top'],\n ['right', 'bottom'],\n ['width', 'height'],\n ].filter(([xField, yField]) => xField in grid || yField in grid);\n\n return function (x, y) {\n const {\n range,\n limits = {\n left : -Infinity,\n right : Infinity,\n top : -Infinity,\n bottom: Infinity,\n },\n offset = { x: 0, y: 0 },\n } = grid;\n\n const result = { range };\n\n for (const [xField, yField] of coordFields) {\n const gridx = Math.round((x - offset.x) / grid[xField]);\n const gridy = Math.round((y - offset.y) / grid[yField]);\n\n result[xField] = Math.max(limits.left, Math.min(limits.right , gridx * grid[xField] + offset.x));\n result[yField] = Math.max(limits.top, Math.min(limits.bottom , gridy * grid[yField] + offset.y));\n }\n\n return result;\n };\n};\n","import grid from './grid';\n\nexport {\n grid,\n};\n","/*\n * In a (windowless) server environment this file exports a factory function\n * that takes the window to use.\n *\n * var interact = require('interact.js')(windowObject);\n *\n * See https://github.com/taye/interact.js/issues/187\n */\n\nimport { init } from '@interactjs/interact';\n\nconst win = typeof window === 'object' && window;\nconst exported = win ? init(win) : init;\n\nexport default exported;\n\nif (typeof module === 'object' && !!module) {\n module.exports = exported;\n}\n","\nreturn _$interactjs_24;\n\n});\n"]} \ No newline at end of file diff --git a/packages/interactjs/package.json b/packages/interactjs/package.json index efbb2d82d..c674d5b2b 100644 --- a/packages/interactjs/package.json +++ b/packages/interactjs/package.json @@ -1,6 +1,6 @@ { "name": "interactjs", - "version": "1.4.0-alpha.15+sha.8940ff6", + "version": "1.4.0-alpha.16+sha.5b3c738", "repository": { "type": "git", "url": "https://github.com/taye/interact.js.git" @@ -41,8 +41,8 @@ ], "license": "MIT", "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/interact": "1.4.0-alpha.15+sha.8940ff6" + "@interactjs/_dev": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/interact": "1.4.0-alpha.16+sha.5b3c738" }, "_dev": { "entries": "./index.js", diff --git a/packages/modifiers/package.json b/packages/modifiers/package.json index fbbb492a5..20627316c 100644 --- a/packages/modifiers/package.json +++ b/packages/modifiers/package.json @@ -1,14 +1,14 @@ { "name": "@interactjs/modifiers", - "version": "1.4.0-alpha.15+sha.8940ff6", + "version": "1.4.0-alpha.16+sha.5b3c738", "peerDependencies": { - "@interactjs/core": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/utils": "1.4.0-alpha.15+sha.8940ff6" + "@interactjs/core": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/utils": "1.4.0-alpha.16+sha.5b3c738" }, "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/core": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/utils": "1.4.0-alpha.15+sha.8940ff6" + "@interactjs/_dev": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/core": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/utils": "1.4.0-alpha.16+sha.5b3c738" }, "publishConfig": { "access": "public" diff --git a/packages/pointerEvents/package.json b/packages/pointerEvents/package.json index 9e76cfdab..7c900226e 100644 --- a/packages/pointerEvents/package.json +++ b/packages/pointerEvents/package.json @@ -1,14 +1,14 @@ { "name": "@interactjs/pointer-events", - "version": "1.4.0-alpha.15+sha.8940ff6", + "version": "1.4.0-alpha.16+sha.5b3c738", "peerDependencies": { - "@interactjs/core": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/utils": "1.4.0-alpha.15+sha.8940ff6" + "@interactjs/core": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/utils": "1.4.0-alpha.16+sha.5b3c738" }, "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/core": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/utils": "1.4.0-alpha.15+sha.8940ff6" + "@interactjs/_dev": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/core": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/utils": "1.4.0-alpha.16+sha.5b3c738" }, "publishConfig": { "access": "public" diff --git a/packages/reflow/package.json b/packages/reflow/package.json index 4e1de49db..709edde9f 100644 --- a/packages/reflow/package.json +++ b/packages/reflow/package.json @@ -1,14 +1,14 @@ { "name": "@interactjs/reflow", - "version": "1.4.0-alpha.15+sha.8940ff6", + "version": "1.4.0-alpha.16+sha.5b3c738", "peerDependencies": { - "@interactjs/core": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/utils": "1.4.0-alpha.15+sha.8940ff6" + "@interactjs/core": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/utils": "1.4.0-alpha.16+sha.5b3c738" }, "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/core": "1.4.0-alpha.15+sha.8940ff6", - "@interactjs/utils": "1.4.0-alpha.15+sha.8940ff6" + "@interactjs/_dev": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/core": "1.4.0-alpha.16+sha.5b3c738", + "@interactjs/utils": "1.4.0-alpha.16+sha.5b3c738" }, "publishConfig": { "access": "public" diff --git a/packages/utils/package.json b/packages/utils/package.json index fb2251b93..33bddbebe 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,8 +1,8 @@ { "name": "@interactjs/utils", - "version": "1.4.0-alpha.15+sha.8940ff6", + "version": "1.4.0-alpha.16+sha.5b3c738", "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.15+sha.8940ff6" + "@interactjs/_dev": "1.4.0-alpha.16+sha.5b3c738" }, "publishConfig": { "access": "public"