From b9e238e17b457e909af700daf1b1b1dbf6b42558 Mon Sep 17 00:00:00 2001 From: Taye Adeyemi Date: Fri, 8 Feb 2019 08:19:31 +0100 Subject: [PATCH] v1.4.0-alpha.28+sha.e624c4d --- lerna.json | 2 +- package-lock.json | 10 +- package.json | 2 +- packages/actions/drag.d.ts | 46 +- packages/actions/drag.js | 8 +- packages/actions/drop/index.d.ts | 19 +- packages/actions/drop/index.js | 34 +- packages/actions/gesture.d.ts | 28 +- packages/actions/gesture.js | 13 +- packages/actions/package.json | 12 +- packages/actions/resize.d.ts | 23 +- packages/actions/resize.js | 4 +- packages/actions/tests/drag.d.ts | 1 + packages/actions/tests/drag.js | 114 ++ packages/actions/tests/drop/DropEvent.d.ts | 1 + packages/actions/tests/drop/DropEvent.js | 75 ++ packages/actions/tests/drop/index.d.ts | 1 + packages/actions/tests/drop/index.js | 30 + packages/actions/tests/resize.d.ts | 1 + packages/actions/tests/resize.js | 40 + packages/auto-scroll/index.d.ts | 9 +- packages/auto-scroll/index.js | 4 +- packages/auto-scroll/package.json | 8 +- packages/auto-start/InteractableMethods.d.ts | 6 +- packages/auto-start/base.d.ts | 4 + packages/auto-start/base.js | 2 +- packages/auto-start/dragAxis.js | 2 +- packages/auto-start/package.json | 12 +- packages/auto-start/tests/hold.d.ts | 1 + packages/auto-start/tests/hold.js | 33 + packages/core/InteractEvent.d.ts | 17 +- packages/core/InteractEvent.js | 2 +- packages/core/Interactable.d.ts | 12 +- packages/core/Interactable.js | 4 +- packages/core/Interaction.d.ts | 26 +- packages/core/Interaction.js | 12 +- packages/core/defaultOptions.d.ts | 7 +- packages/core/defaultOptions.js | 3 +- packages/core/interactions.js | 2 +- packages/core/package.json | 8 +- packages/core/scope.d.ts | 5 +- packages/core/scope.js | 4 +- packages/core/tests/Eventable.d.ts | 1 + packages/core/tests/Eventable.js | 25 + packages/core/tests/Interactable.d.ts | 1 + packages/core/tests/Interactable.js | 98 ++ packages/core/tests/Interaction.d.ts | 1 + packages/core/tests/Interaction.js | 312 +++++ packages/core/tests/helpers.d.ts | 64 + packages/core/tests/helpers.js | 103 ++ packages/core/tests/interactions.d.ts | 1 + packages/core/tests/interactions.js | 41 + packages/inertia/index.d.ts | 2 +- packages/inertia/index.js | 4 +- packages/inertia/package.json | 16 +- packages/interact/package.json | 40 +- packages/interact/tests/interact.d.ts | 1 + packages/interact/tests/interact.js | 42 + .../docs/InteractEvent_InteractEvent.html | 2 +- .../interactjs/dist/docs/Interactable.html | 10 +- packages/interactjs/dist/docs/doclets.json | 2 +- .../interactjs/dist/docs/module-interact.html | 2 +- .../dist/docs/packages_actions_drag.ts.html | 7 +- .../docs/packages_actions_drop_index.ts.html | 53 +- .../docs/packages_actions_gesture.ts.html | 46 +- .../dist/docs/packages_actions_resize.ts.html | 33 +- .../docs/packages_auto-start_base.ts.html | 5 + .../docs/packages_core_InteractEvent.ts.html | 12 +- .../docs/packages_core_Interactable.ts.html | 12 +- .../docs/packages_core_Interaction.ts.html | 30 +- .../dist/docs/packages_reflow_index.ts.html | 8 +- packages/interactjs/dist/interact.js | 1035 +++++++++-------- packages/interactjs/dist/interact.js.map | 2 +- packages/interactjs/dist/interact.min.js | 10 +- packages/interactjs/dist/interact.min.js.map | 2 +- packages/interactjs/index.d.ts | 1 + packages/interactjs/index.js | 5 +- packages/interactjs/package.json | 12 +- packages/modifiers/base.d.ts | 11 +- packages/modifiers/base.js | 9 +- packages/modifiers/index.d.ts | 6 + packages/modifiers/package.json | 12 +- packages/modifiers/restrict/edges.d.ts | 9 +- packages/modifiers/restrict/edges.js | 4 +- packages/modifiers/tests/base.d.ts | 1 + packages/modifiers/tests/base.js | 108 ++ packages/modifiers/tests/restrict/edges.d.ts | 1 + packages/modifiers/tests/restrict/edges.js | 53 + packages/modifiers/tests/restrict/size.d.ts | 1 + packages/modifiers/tests/restrict/size.js | 53 + packages/modifiers/tests/snap/edges.d.ts | 1 + packages/modifiers/tests/snap/edges.js | 46 + packages/modifiers/tests/snap/pointer.d.ts | 1 + packages/modifiers/tests/snap/pointer.js | 58 + packages/modifiers/tests/snap/size.d.ts | 1 + packages/modifiers/tests/snap/size.js | 39 + packages/pointer-events/base.d.ts | 2 +- packages/pointer-events/base.js | 4 +- packages/pointer-events/holdRepeat.d.ts | 5 + packages/pointer-events/holdRepeat.js | 2 +- .../pointer-events/interactableTargets.d.ts | 2 +- packages/pointer-events/package.json | 12 +- .../pointer-events/tests/PointerEvent.d.ts | 1 + packages/pointer-events/tests/PointerEvent.js | 62 + packages/pointer-events/tests/base.d.ts | 1 + packages/pointer-events/tests/base.js | 128 ++ packages/pointer-events/tests/holdRepeat.d.ts | 1 + packages/pointer-events/tests/holdRepeat.js | 67 ++ packages/reflow/index.d.ts | 6 +- packages/reflow/index.js | 2 +- packages/reflow/package.json | 12 +- packages/reflow/tests/index.d.ts | 1 + packages/reflow/tests/index.js | 70 ++ packages/types/index.d.ts | 1 + packages/types/index.js | 2 + packages/types/interactjs-test.js | 26 +- packages/types/package.json | 24 +- packages/utils/Signals.d.ts | 4 +- packages/utils/Signals.js | 2 +- packages/utils/extend.js | 2 +- packages/utils/interactionFinder.d.ts | 33 +- packages/utils/interactionFinder.js | 3 +- packages/utils/package.json | 4 +- packages/utils/pointerUtils.d.ts | 12 +- packages/utils/pointerUtils.js | 4 +- packages/utils/tests/normalizeListeners.d.ts | 1 + packages/utils/tests/normalizeListeners.js | 44 + test/domator.d.ts | 5 + test/domator.js | 9 + test/index.d.ts | 7 + test/index.js | 24 + test/test.d.ts | 2 + test/test.js | 3 + 133 files changed, 2782 insertions(+), 910 deletions(-) create mode 100644 packages/actions/tests/drag.d.ts create mode 100644 packages/actions/tests/drag.js create mode 100644 packages/actions/tests/drop/DropEvent.d.ts create mode 100644 packages/actions/tests/drop/DropEvent.js create mode 100644 packages/actions/tests/drop/index.d.ts create mode 100644 packages/actions/tests/drop/index.js create mode 100644 packages/actions/tests/resize.d.ts create mode 100644 packages/actions/tests/resize.js create mode 100644 packages/auto-start/tests/hold.d.ts create mode 100644 packages/auto-start/tests/hold.js create mode 100644 packages/core/tests/Eventable.d.ts create mode 100644 packages/core/tests/Eventable.js create mode 100644 packages/core/tests/Interactable.d.ts create mode 100644 packages/core/tests/Interactable.js create mode 100644 packages/core/tests/Interaction.d.ts create mode 100644 packages/core/tests/Interaction.js create mode 100644 packages/core/tests/helpers.d.ts create mode 100644 packages/core/tests/helpers.js create mode 100644 packages/core/tests/interactions.d.ts create mode 100644 packages/core/tests/interactions.js create mode 100644 packages/interact/tests/interact.d.ts create mode 100644 packages/interact/tests/interact.js create mode 100644 packages/modifiers/tests/base.d.ts create mode 100644 packages/modifiers/tests/base.js create mode 100644 packages/modifiers/tests/restrict/edges.d.ts create mode 100644 packages/modifiers/tests/restrict/edges.js create mode 100644 packages/modifiers/tests/restrict/size.d.ts create mode 100644 packages/modifiers/tests/restrict/size.js create mode 100644 packages/modifiers/tests/snap/edges.d.ts create mode 100644 packages/modifiers/tests/snap/edges.js create mode 100644 packages/modifiers/tests/snap/pointer.d.ts create mode 100644 packages/modifiers/tests/snap/pointer.js create mode 100644 packages/modifiers/tests/snap/size.d.ts create mode 100644 packages/modifiers/tests/snap/size.js create mode 100644 packages/pointer-events/tests/PointerEvent.d.ts create mode 100644 packages/pointer-events/tests/PointerEvent.js create mode 100644 packages/pointer-events/tests/base.d.ts create mode 100644 packages/pointer-events/tests/base.js create mode 100644 packages/pointer-events/tests/holdRepeat.d.ts create mode 100644 packages/pointer-events/tests/holdRepeat.js create mode 100644 packages/reflow/tests/index.d.ts create mode 100644 packages/reflow/tests/index.js create mode 100644 packages/types/index.d.ts create mode 100644 packages/types/index.js create mode 100644 packages/utils/tests/normalizeListeners.d.ts create mode 100644 packages/utils/tests/normalizeListeners.js create mode 100644 test/domator.d.ts create mode 100644 test/domator.js create mode 100644 test/index.d.ts create mode 100644 test/index.js create mode 100644 test/test.d.ts create mode 100644 test/test.js diff --git a/lerna.json b/lerna.json index 7286433db..fe0af3545 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "1.4.0-alpha.27", + "version": "1.4.0-alpha.28", "packages": [ ".", "packages/*" diff --git a/package-lock.json b/package-lock.json index 1282d9184..86d86d44e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@interactjs/_dev", - "version": "1.4.0-alpha.27+sha.12b8f8f", + "version": "1.4.0-alpha.28+sha.e624c4d", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -7575,13 +7575,13 @@ "integrity": "sha1-hCRCjVtWOtjFx/vsB5uaiwnI3Po=" }, "jsdoc-stale": { - "version": "github:taye/jsdoc-stale#7c10d96cc969bc1f93dc87b11e7fce4eb4a378cd", + "version": "github:taye/jsdoc-stale#944bfbfb2d0acf03ef1ce1c35abaa01a2a77cce1", "from": "github:taye/jsdoc-stale#master", "requires": { "bulma": "^0.5.3", - "node-sass": "^4.11.0", - "superagent": "^3.8.3", - "walk-sync": "^0.3.4" + "node-sass": "^4.5.3", + "superagent": "^3.6.3", + "walk-sync": "^0.3.2" } }, "jsdom": { diff --git a/package.json b/package.json index ff3100ff4..7f47611a0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@interactjs/_dev", "private": "true", - "version": "1.4.0-alpha.27+sha.12b8f8f", + "version": "1.4.0-alpha.28+sha.e624c4d", "bin": { "_dev": "scripts/_dev", "@build": "scripts/build.js", diff --git a/packages/actions/drag.d.ts b/packages/actions/drag.d.ts index 9d97461a6..2f4eb92c8 100644 --- a/packages/actions/drag.d.ts +++ b/packages/actions/drag.d.ts @@ -18,7 +18,7 @@ declare module '@interactjs/core/scope' { } } export declare type DragEvent = Interact.InteractEvent; -export declare type DraggableMethod = (options?: Interact.OrBoolean | boolean) => Interact.Interactable | Interact.DropzoneOptions; +export declare type DraggableMethod = Interact.ActionMethod; declare function install(scope: Scope): void; declare function beforeMove({ interaction }: { interaction: any; @@ -27,52 +27,12 @@ declare function move({ iEvent, interaction }: { iEvent: any; interaction: any; }): void; -/** - * ```js - * interact(element).draggable({ - * onstart: function (event) {}, - * onmove : function (event) {}, - * onend : function (event) {}, - * - * // the axis in which the first movement must be - * // for the drag sequence to start - * // 'xy' by default - any direction - * startAxis: 'x' || 'y' || 'xy', - * - * // 'xy' by default - don't restrict to one axis (move in any direction) - * // 'x' or 'y' to restrict movement to either axis - * // 'start' to restrict movement to the axis the drag started in - * lockAxis: 'x' || 'y' || 'xy' || 'start', - * - * // max number of drags that can happen concurrently - * // with elements of this Interactable. Infinity by default - * max: Infinity, - * - * // max number of drags that can target the same element+Interactable - * // 1 by default - * maxPerElement: 2 - * }); - * - * var isDraggable = interact('element').draggable(); // true - * ``` - * - * Get or set whether drag actions can be performed on the target - * - * @alias Interactable.prototype.draggable - * - * @param {boolean | object} [options] true/false or An object with event - * listeners to be fired on drag events (object makes the Interactable - * draggable) - * @return {boolean | Interactable} boolean indicating if this can be the - * target of drag events, or this Interctable - */ -declare function draggable(this: Interact.Interactable, options?: Interact.DraggableOptions | boolean): import("@interactjs/core/Interactable").Interactable | import("../types").DraggableOptions; declare const drag: { install: typeof install; - draggable: typeof draggable; + draggable: import("../types/types").ActionMethod; beforeMove: typeof beforeMove; move: typeof move; - defaults: import("../types").DropzoneOptions; + defaults: import("../types/types").DropzoneOptions; checker(_pointer: any, _event: any, interactable: any): { name: string; axis: any; diff --git a/packages/actions/drag.js b/packages/actions/drag.js index c0996f61a..0faa63260 100644 --- a/packages/actions/drag.js +++ b/packages/actions/drag.js @@ -9,7 +9,7 @@ function install(scope) { // dragmove interactions.signals.on('action-move', move); Interactable.prototype.draggable = drag.draggable; - actions.drag = drag; + actions[ActionName.Drag] = drag; actions.names.push(ActionName.Drag); arr.merge(actions.eventTypes, [ 'dragstart', @@ -90,7 +90,7 @@ function move({ iEvent, interaction }) { * @return {boolean | Interactable} boolean indicating if this can be the * target of drag events, or this Interctable */ -function draggable(options) { +const draggable = function draggable(options) { if (is.object(options)) { this.options.drag.enabled = options.enabled !== false; this.setPerAction('drag', options); @@ -108,7 +108,7 @@ function draggable(options) { return this; } return this.options.drag; -} +}; const drag = { install, draggable, @@ -134,4 +134,4 @@ const drag = { }, }; export default drag; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRyYWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUyxNQUFNLHdCQUF3QixDQUFBO0FBQzFELE9BQU8sS0FBSyxHQUFHLE1BQU0sdUJBQXVCLENBQUE7QUFDNUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQXlCekMsVUFBa0IsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFBO0FBT2pDLFNBQVMsT0FBTyxDQUFFLEtBQVk7SUFDNUIsTUFBTSxFQUNKLE9BQU8sRUFDUCxZQUFZLEVBQ1osWUFBWSxFQUNaLFFBQVEsR0FDVCxHQUFHLEtBQUssQ0FBQTtJQUVULFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQ3pELFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUVwRCxXQUFXO0lBQ1gsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBRTVDLFlBQVksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUE7SUFFakQsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7SUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ25DLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRTtRQUM1QixXQUFXO1FBQ1gsVUFBVTtRQUNWLGtCQUFrQjtRQUNsQixZQUFZO1FBQ1osU0FBUztLQUNWLENBQUMsQ0FBQTtJQUNGLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQTtJQUVyQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFB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T0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0NBQ0YsQ0FBQTtBQUVELGVBQWUsSUFBSSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uTmFtZSwgU2NvcGUgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJ1xuaW1wb3J0ICogYXMgYXJyIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2FycidcbmltcG9ydCAqIGFzIGlzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2lzJ1xuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGFibGUnIHtcbiAgaW50ZXJmYWNlIEludGVyYWN0YWJsZSB7XG4gICAgZHJhZ2dhYmxlOiBEcmFnZ2FibGVNZXRob2RcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9kZWZhdWx0T3B0aW9ucycge1xuICBpbnRlcmZhY2UgQWN0aW9uRGVmYXVsdHMge1xuICAgIGRyYWc6IEludGVyYWN0LkRyYWdnYWJsZU9wdGlvbnNcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9zY29wZScge1xuICBpbnRlcmZhY2UgQWN0aW9ucyB7XG4gICAgW0FjdGlvbk5hbWUuRHJhZ10/OiB0eXBlb2YgZHJhZ1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvd1xuICBlbnVtIEFjdGlvbk5hbWUge1xuICAgIERyYWcgPSAnZHJhZydcbiAgfVxufVxuXG4oQWN0aW9uTmFtZSBhcyBhbnkpLkRyYWcgPSAnZHJhZydcblxuZXhwb3J0IHR5cGUgRHJhZ0V2ZW50ID0gSW50ZXJhY3QuSW50ZXJhY3RFdmVudDxBY3Rpb25OYW1lLkRyYWc+XG5cbmV4cG9ydCB0eXBlIERyYWdnYWJsZU1ldGhvZCA9IChvcHRpb25zPzogSW50ZXJhY3QuT3JCb29sZWFuPEludGVyYWN0LkRyYWdnYWJsZU9wdGlvbnM+IHwgYm9vbGVhbilcbiAgPT4gSW50ZXJhY3QuSW50ZXJhY3RhYmxlIHwgSW50ZXJhY3QuRHJvcHpvbmVPcHRpb25zXG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlOiBTY29wZSkge1xuICBjb25zdCB7XG4gICAgYWN0aW9ucyxcbiAgICBJbnRlcmFjdGFibGUsXG4gICAgaW50ZXJhY3Rpb25zLFxuICAgIGRlZmF1bHRzLFxuICB9ID0gc2NvcGVcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYmVmb3JlLWFjdGlvbi1tb3ZlJywgYmVmb3JlTW92ZSlcbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2FjdGlvbi1yZXN1bWUnLCBiZWZvcmVNb3ZlKVxuXG4gIC8vIGRyYWdtb3ZlXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tbW92ZScsIG1vdmUpXG5cbiAgSW50ZXJhY3RhYmxlLnByb3RvdHlwZS5kcmFnZ2FibGUgPSBkcmFnLmRyYWdnYWJsZVxuXG4gIGFjdGlvbnMuZHJhZyA9IGRyYWdcbiAgYWN0aW9ucy5uYW1lcy5wdXNoKEFjdGlvbk5hbWUuRHJhZylcbiAgYXJyLm1lcmdlKGFjdGlvbnMuZXZlbnRUeXBlcywgW1xuICAgICdkcmFnc3RhcnQnLFxuICAgICdkcmFnbW92ZScsXG4gICAgJ2RyYWdpbmVydGlhc3RhcnQnLFxuICAgICdkcmFncmVzdW1lJyxcbiAgICAnZHJhZ2VuZCcsXG4gIF0pXG4gIGFjdGlvbnMubWV0aG9kRGljdC5kcmFnID0gJ2RyYWdnYWJsZSdcblxuICBkZWZhdWx0cy5hY3Rpb25zLmRyYWcgPSBkcmFnLmRlZmF1bHRzXG59XG5cbmZ1bmN0aW9uIGJlZm9yZU1vdmUgKHsgaW50ZXJhY3Rpb24gfSkge1xuICBpZiAoaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSAhPT0gJ2RyYWcnKSB7IHJldHVybiB9XG5cbiAgY29uc3QgYXhpcyA9IGludGVyYWN0aW9uLnByZXBhcmVkLmF4aXNcblxuICBpZiAoYXhpcyA9PT0gJ3gnKSB7XG4gICAgaW50ZXJhY3Rpb24uY29vcmRzLmN1ci5wYWdlLnkgICA9IGludGVyYWN0aW9uLmNvb3Jkcy5zdGFydC5wYWdlLnlcbiAgICBpbnRlcmFjdGlvbi5jb29yZHMuY3VyLmNsaWVudC55ID0gaW50ZXJhY3Rpb24uY29vcmRzLnN0YXJ0LmNsaWVudC55XG5cbiAgICBpbnRlcmFjdGlvbi5jb29yZHMudmVsb2NpdHkuY2xpZW50LnkgPSAwXG4gICAgaW50ZXJhY3Rpb24uY29vcmRzLnZlbG9jaXR5LnBhZ2UueSAgID0gMFxuICB9XG4gIGVsc2UgaWYgKGF4aXMgPT09ICd5Jykge1xuICAgIGludGVyYWN0aW9uLmNvb3Jkcy5jdXIucGFnZS54ICAgPSBpbnRlcmFjdGlvbi5jb29yZHMuc3RhcnQucGFnZS54XG4gICAgaW50ZXJhY3Rpb24uY29vcmRzLmN1ci5jbGllbnQueCA9IGludGVyYWN0aW9uLmNvb3Jkcy5zdGFydC5jbGllbnQueFxuXG4gICAgaW50ZXJhY3Rpb24uY29vcmRzLnZlbG9jaXR5LmNsaWVudC54ID0gMFxuICAgIGludGVyYWN0aW9uLmNvb3Jkcy52ZWxvY2l0eS5wYWdlLnggICA9IDBcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3ZlICh7IGlFdmVudCwgaW50ZXJhY3Rpb24gfSkge1xuICBpZiAoaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSAhPT0gJ2RyYWcnKSB7IHJldHVybiB9XG5cbiAgY29uc3QgYXhpcyA9IGludGVyYWN0aW9uLnByZXBhcmVkLmF4aXNcblxuICBpZiAoYXhpcyA9PT0gJ3gnIHx8IGF4aXMgPT09ICd5Jykge1xuICAgIGNvbnN0IG9wcG9zaXRlID0gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnXG5cbiAgICBpRXZlbnQucGFnZVtvcHBvc2l0ZV0gICA9IGludGVyYWN0aW9uLmNvb3Jkcy5zdGFydC5wYWdlW29wcG9zaXRlXVxuICAgIGlFdmVudC5jbGllbnRbb3Bwb3NpdGVdID0gaW50ZXJhY3Rpb24uY29vcmRzLnN0YXJ0LmNsaWVudFtvcHBvc2l0ZV1cbiAgICBpRXZlbnQuZGVsdGFbb3Bwb3NpdGVdID0gMFxuICB9XG59XG5cbi8qKlxuICogYGBganNcbiAqIGludGVyYWN0KGVsZW1lbnQpLmRyYWdnYWJsZSh7XG4gKiAgICAgb25zdGFydDogZnVuY3Rpb24gKGV2ZW50KSB7fSxcbiAqICAgICBvbm1vdmUgOiBmdW5jdGlvbiAoZXZlbnQpIHt9LFxuICogICAgIG9uZW5kICA6IGZ1bmN0aW9uIChldmVudCkge30sXG4gKlxuICogICAgIC8vIHRoZSBheGlzIGluIHdoaWNoIHRoZSBmaXJzdCBtb3ZlbWVudCBtdXN0IGJlXG4gKiAgICAgLy8gZm9yIHRoZSBkcmFnIHNlcXVlbmNlIHRvIHN0YXJ0XG4gKiAgICAgLy8gJ3h5JyBieSBkZWZhdWx0IC0gYW55IGRpcmVjdGlvblxuICogICAgIHN0YXJ0QXhpczogJ3gnIHx8ICd5JyB8fCAneHknLFxuICpcbiAqICAgICAvLyAneHknIGJ5IGRlZmF1bHQgLSBkb24ndCByZXN0cmljdCB0byBvbmUgYXhpcyAobW92ZSBpbiBhbnkgZGlyZWN0aW9uKVxuICogICAgIC8vICd4JyBvciAneScgdG8gcmVzdHJpY3QgbW92ZW1lbnQgdG8gZWl0aGVyIGF4aXNcbiAqICAgICAvLyAnc3RhcnQnIHRvIHJlc3RyaWN0IG1vdmVtZW50IHRvIHRoZSBheGlzIHRoZSBkcmFnIHN0YXJ0ZWQgaW5cbiAqICAgICBsb2NrQXhpczogJ3gnIHx8ICd5JyB8fCAneHknIHx8ICdzdGFydCcsXG4gKlxuICogICAgIC8vIG1heCBudW1iZXIgb2YgZHJhZ3MgdGhhdCBjYW4gaGFwcGVuIGNvbmN1cnJlbnRseVxuICogICAgIC8vIHdpdGggZWxlbWVudHMgb2YgdGhpcyBJbnRlcmFjdGFibGUuIEluZmluaXR5IGJ5IGRlZmF1bHRcbiAqICAgICBtYXg6IEluZmluaXR5LFxuICpcbiAqICAgICAvLyBtYXggbnVtYmVyIG9mIGRyYWdzIHRoYXQgY2FuIHRhcmdldCB0aGUgc2FtZSBlbGVtZW50K0ludGVyYWN0YWJsZVxuICogICAgIC8vIDEgYnkgZGVmYXVsdFxuICogICAgIG1heFBlckVsZW1lbnQ6IDJcbiAqIH0pO1xuICpcbiAqIHZhciBpc0RyYWdnYWJsZSA9IGludGVyYWN0KCdlbGVtZW50JykuZHJhZ2dhYmxlKCk7IC8vIHRydWVcbiAqIGBgYFxuICpcbiAqIEdldCBvciBzZXQgd2hldGhlciBkcmFnIGFjdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCBvbiB0aGUgdGFyZ2V0XG4gKlxuICogQGFsaWFzIEludGVyYWN0YWJsZS5wcm90b3R5cGUuZHJhZ2dhYmxlXG4gKlxuICogQHBhcmFtIHtib29sZWFuIHwgb2JqZWN0fSBbb3B0aW9uc10gdHJ1ZS9mYWxzZSBvciBBbiBvYmplY3Qgd2l0aCBldmVudFxuICogbGlzdGVuZXJzIHRvIGJlIGZpcmVkIG9uIGRyYWcgZXZlbnRzIChvYmplY3QgbWFrZXMgdGhlIEludGVyYWN0YWJsZVxuICogZHJhZ2dhYmxlKVxuICogQHJldHVybiB7Ym9vbGVhbiB8IEludGVyYWN0YWJsZX0gYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoaXMgY2FuIGJlIHRoZVxuICogdGFyZ2V0IG9mIGRyYWcgZXZlbnRzLCBvciB0aGlzIEludGVyY3RhYmxlXG4gKi9cbmZ1bmN0aW9uIGRyYWdnYWJsZSAodGhpczogSW50ZXJhY3QuSW50ZXJhY3RhYmxlLCBvcHRpb25zPzogSW50ZXJhY3QuRHJhZ2dhYmxlT3B0aW9ucyB8IGJvb2xlYW4pIHtcbiAgaWYgKGlzLm9iamVjdChvcHRpb25zKSkge1xuICAgIHRoaXMub3B0aW9ucy5kcmFnLmVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlXG4gICAgdGhpcy5zZXRQZXJBY3Rpb24oJ2RyYWcnLCBvcHRpb25zKVxuICAgIHRoaXMuc2V0T25FdmVudHMoJ2RyYWcnLCBvcHRpb25zKVxuXG4gICAgaWYgKC9eKHh5fHh8eXxzdGFydCkkLy50ZXN0KG9wdGlvbnMubG9ja0F4aXMpKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuZHJhZy5sb2NrQXhpcyA9IG9wdGlvbnMubG9ja0F4aXNcbiAgICB9XG4gICAgaWYgKC9eKHh5fHh8eSkkLy50ZXN0KG9wdGlvbnMuc3RhcnRBeGlzKSkge1xuICAgICAgdGhpcy5vcHRpb25zLmRyYWcuc3RhcnRBeGlzID0gb3B0aW9ucy5zdGFydEF4aXNcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgaWYgKGlzLmJvb2wob3B0aW9ucykpIHtcbiAgICB0aGlzLm9wdGlvbnMuZHJhZy5lbmFibGVkID0gb3B0aW9uc1xuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHJldHVybiB0aGlzLm9wdGlvbnMuZHJhZ1xufVxuXG5jb25zdCBkcmFnID0ge1xuICBpbnN0YWxsLFxuICBkcmFnZ2FibGUsXG4gIGJlZm9yZU1vdmUsXG4gIG1vdmUsXG4gIGRlZmF1bHRzOiB7XG4gICAgc3RhcnRBeGlzIDogJ3h5JyxcbiAgICBsb2NrQXhpcyAgOiAneHknLFxuICB9IGFzIEludGVyYWN0LkRyb3B6b25lT3B0aW9ucyxcblxuICBjaGVja2VyIChfcG9pbnRlciwgX2V2ZW50LCBpbnRlcmFjdGFibGUpIHtcbiAgICBjb25zdCBkcmFnT3B0aW9ucyA9IGludGVyYWN0YWJsZS5vcHRpb25zLmRyYWdcblxuICAgIHJldHVybiBkcmFnT3B0aW9ucy5lbmFibGVkXG4gICAgICA/IHtcbiAgICAgICAgbmFtZTogJ2RyYWcnLFxuICAgICAgICBheGlzOiAoZHJhZ09wdGlvbnMubG9ja0F4aXMgPT09ICdzdGFydCdcbiAgICAgICAgICA/IGRyYWdPcHRpb25zLnN0YXJ0QXhpc1xuICAgICAgICAgIDogZHJhZ09wdGlvbnMubG9ja0F4aXMpLFxuICAgICAgfVxuICAgICAgOiBudWxsXG4gIH0sXG5cbiAgZ2V0Q3Vyc29yICgpIHtcbiAgICByZXR1cm4gJ21vdmUnXG4gIH0sXG59XG5cbmV4cG9ydCBkZWZhdWx0IGRyYWdcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRyYWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUyxNQUFNLHdCQUF3QixDQUFBO0FBQzFELE9BQU8sS0FBSyxHQUFHLE1BQU0sdUJBQXVCLENBQUE7QUFDNUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQXlCekMsVUFBa0IsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFBO0FBTWpDLFNBQVMsT0FBTyxDQUFFLEtBQVk7SUFDNUIsTUFBTSxFQUNKLE9BQU8sRUFDUCxZQUFZLEVBQ1osWUFBWSxFQUNaLFFBQVEsR0FDVCxHQUFHLEtBQUssQ0FBQTtJQUVULFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQ3pELFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUVwRCxXQUFXO0lBQ1gsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBRTVDLFlBQVksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUE7SUFFakQsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUE7SUFDL0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ25DLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRTtRQUM1QixXQUFXO1FBQ1gsVUFBVTtRQUNWLGtCQUFrQjtRQUNsQixZQUFZO1FBQ1osU0FBUztLQUNWLENBQUMsQ0FBQTtJQUNGLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQTtJQUVyQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksR0FB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LElBQUksQ0FBQTtJQUNWLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0NBQ0YsQ0FBQTtBQUVELGVBQWUsSUFBSSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uTmFtZSwgU2NvcGUgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJ1xuaW1wb3J0ICogYXMgYXJyIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2FycidcbmltcG9ydCAqIGFzIGlzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2lzJ1xuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGFibGUnIHtcbiAgaW50ZXJmYWNlIEludGVyYWN0YWJsZSB7XG4gICAgZHJhZ2dhYmxlOiBEcmFnZ2FibGVNZXRob2RcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9kZWZhdWx0T3B0aW9ucycge1xuICBpbnRlcmZhY2UgQWN0aW9uRGVmYXVsdHMge1xuICAgIGRyYWc6IEludGVyYWN0LkRyYWdnYWJsZU9wdGlvbnNcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9zY29wZScge1xuICBpbnRlcmZhY2UgQWN0aW9ucyB7XG4gICAgW0FjdGlvbk5hbWUuRHJhZ10/OiB0eXBlb2YgZHJhZ1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvd1xuICBlbnVtIEFjdGlvbk5hbWUge1xuICAgIERyYWcgPSAnZHJhZydcbiAgfVxufVxuXG4oQWN0aW9uTmFtZSBhcyBhbnkpLkRyYWcgPSAnZHJhZydcblxuZXhwb3J0IHR5cGUgRHJhZ0V2ZW50ID0gSW50ZXJhY3QuSW50ZXJhY3RFdmVudDxBY3Rpb25OYW1lLkRyYWc+XG5cbmV4cG9ydCB0eXBlIERyYWdnYWJsZU1ldGhvZCA9IEludGVyYWN0LkFjdGlvbk1ldGhvZDxJbnRlcmFjdC5EcmFnZ2FibGVPcHRpb25zPlxuXG5mdW5jdGlvbiBpbnN0YWxsIChzY29wZTogU2NvcGUpIHtcbiAgY29uc3Qge1xuICAgIGFjdGlvbnMsXG4gICAgSW50ZXJhY3RhYmxlLFxuICAgIGludGVyYWN0aW9ucyxcbiAgICBkZWZhdWx0cyxcbiAgfSA9IHNjb3BlXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2JlZm9yZS1hY3Rpb24tbW92ZScsIGJlZm9yZU1vdmUpXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tcmVzdW1lJywgYmVmb3JlTW92ZSlcblxuICAvLyBkcmFnbW92ZVxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYWN0aW9uLW1vdmUnLCBtb3ZlKVxuXG4gIEludGVyYWN0YWJsZS5wcm90b3R5cGUuZHJhZ2dhYmxlID0gZHJhZy5kcmFnZ2FibGVcblxuICBhY3Rpb25zW0FjdGlvbk5hbWUuRHJhZ10gPSBkcmFnXG4gIGFjdGlvbnMubmFtZXMucHVzaChBY3Rpb25OYW1lLkRyYWcpXG4gIGFyci5tZXJnZShhY3Rpb25zLmV2ZW50VHlwZXMsIFtcbiAgICAnZHJhZ3N0YXJ0JyxcbiAgICAnZHJhZ21vdmUnLFxuICAgICdkcmFnaW5lcnRpYXN0YXJ0JyxcbiAgICAnZHJhZ3Jlc3VtZScsXG4gICAgJ2RyYWdlbmQnLFxuICBdKVxuICBhY3Rpb25zLm1ldGhvZERpY3QuZHJhZyA9ICdkcmFnZ2FibGUnXG5cbiAgZGVmYXVsdHMuYWN0aW9ucy5kcmFnID0gZHJhZy5kZWZhdWx0c1xufVxuXG5mdW5jdGlvbiBiZWZvcmVNb3ZlICh7IGludGVyYWN0aW9uIH0pIHtcbiAgaWYgKGludGVyYWN0aW9uLnByZXBhcmVkLm5hbWUgIT09ICdkcmFnJykgeyByZXR1cm4gfVxuXG4gIGNvbnN0IGF4aXMgPSBpbnRlcmFjdGlvbi5wcmVwYXJlZC5heGlzXG5cbiAgaWYgKGF4aXMgPT09ICd4Jykge1xuICAgIGludGVyYWN0aW9uLmNvb3Jkcy5jdXIucGFnZS55ICAgPSBpbnRlcmFjdGlvbi5jb29yZHMuc3RhcnQucGFnZS55XG4gICAgaW50ZXJhY3Rpb24uY29vcmRzLmN1ci5jbGllbnQueSA9IGludGVyYWN0aW9uLmNvb3Jkcy5zdGFydC5jbGllbnQueVxuXG4gICAgaW50ZXJhY3Rpb24uY29vcmRzLnZlbG9jaXR5LmNsaWVudC55ID0gMFxuICAgIGludGVyYWN0aW9uLmNvb3Jkcy52ZWxvY2l0eS5wYWdlLnkgICA9IDBcbiAgfVxuICBlbHNlIGlmIChheGlzID09PSAneScpIHtcbiAgICBpbnRlcmFjdGlvbi5jb29yZHMuY3VyLnBhZ2UueCAgID0gaW50ZXJhY3Rpb24uY29vcmRzLnN0YXJ0LnBhZ2UueFxuICAgIGludGVyYWN0aW9uLmNvb3Jkcy5jdXIuY2xpZW50LnggPSBpbnRlcmFjdGlvbi5jb29yZHMuc3RhcnQuY2xpZW50LnhcblxuICAgIGludGVyYWN0aW9uLmNvb3Jkcy52ZWxvY2l0eS5jbGllbnQueCA9IDBcbiAgICBpbnRlcmFjdGlvbi5jb29yZHMudmVsb2NpdHkucGFnZS54ICAgPSAwXG4gIH1cbn1cblxuZnVuY3Rpb24gbW92ZSAoeyBpRXZlbnQsIGludGVyYWN0aW9uIH0pIHtcbiAgaWYgKGludGVyYWN0aW9uLnByZXBhcmVkLm5hbWUgIT09ICdkcmFnJykgeyByZXR1cm4gfVxuXG4gIGNvbnN0IGF4aXMgPSBpbnRlcmFjdGlvbi5wcmVwYXJlZC5heGlzXG5cbiAgaWYgKGF4aXMgPT09ICd4JyB8fCBheGlzID09PSAneScpIHtcbiAgICBjb25zdCBvcHBvc2l0ZSA9IGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4J1xuXG4gICAgaUV2ZW50LnBhZ2Vbb3Bwb3NpdGVdICAgPSBpbnRlcmFjdGlvbi5jb29yZHMuc3RhcnQucGFnZVtvcHBvc2l0ZV1cbiAgICBpRXZlbnQuY2xpZW50W29wcG9zaXRlXSA9IGludGVyYWN0aW9uLmNvb3Jkcy5zdGFydC5jbGllbnRbb3Bwb3NpdGVdXG4gICAgaUV2ZW50LmRlbHRhW29wcG9zaXRlXSA9IDBcbiAgfVxufVxuXG4vKipcbiAqIGBgYGpzXG4gKiBpbnRlcmFjdChlbGVtZW50KS5kcmFnZ2FibGUoe1xuICogICAgIG9uc3RhcnQ6IGZ1bmN0aW9uIChldmVudCkge30sXG4gKiAgICAgb25tb3ZlIDogZnVuY3Rpb24gKGV2ZW50KSB7fSxcbiAqICAgICBvbmVuZCAgOiBmdW5jdGlvbiAoZXZlbnQpIHt9LFxuICpcbiAqICAgICAvLyB0aGUgYXhpcyBpbiB3aGljaCB0aGUgZmlyc3QgbW92ZW1lbnQgbXVzdCBiZVxuICogICAgIC8vIGZvciB0aGUgZHJhZyBzZXF1ZW5jZSB0byBzdGFydFxuICogICAgIC8vICd4eScgYnkgZGVmYXVsdCAtIGFueSBkaXJlY3Rpb25cbiAqICAgICBzdGFydEF4aXM6ICd4JyB8fCAneScgfHwgJ3h5JyxcbiAqXG4gKiAgICAgLy8gJ3h5JyBieSBkZWZhdWx0IC0gZG9uJ3QgcmVzdHJpY3QgdG8gb25lIGF4aXMgKG1vdmUgaW4gYW55IGRpcmVjdGlvbilcbiAqICAgICAvLyAneCcgb3IgJ3knIHRvIHJlc3RyaWN0IG1vdmVtZW50IHRvIGVpdGhlciBheGlzXG4gKiAgICAgLy8gJ3N0YXJ0JyB0byByZXN0cmljdCBtb3ZlbWVudCB0byB0aGUgYXhpcyB0aGUgZHJhZyBzdGFydGVkIGluXG4gKiAgICAgbG9ja0F4aXM6ICd4JyB8fCAneScgfHwgJ3h5JyB8fCAnc3RhcnQnLFxuICpcbiAqICAgICAvLyBtYXggbnVtYmVyIG9mIGRyYWdzIHRoYXQgY2FuIGhhcHBlbiBjb25jdXJyZW50bHlcbiAqICAgICAvLyB3aXRoIGVsZW1lbnRzIG9mIHRoaXMgSW50ZXJhY3RhYmxlLiBJbmZpbml0eSBieSBkZWZhdWx0XG4gKiAgICAgbWF4OiBJbmZpbml0eSxcbiAqXG4gKiAgICAgLy8gbWF4IG51bWJlciBvZiBkcmFncyB0aGF0IGNhbiB0YXJnZXQgdGhlIHNhbWUgZWxlbWVudCtJbnRlcmFjdGFibGVcbiAqICAgICAvLyAxIGJ5IGRlZmF1bHRcbiAqICAgICBtYXhQZXJFbGVtZW50OiAyXG4gKiB9KTtcbiAqXG4gKiB2YXIgaXNEcmFnZ2FibGUgPSBpbnRlcmFjdCgnZWxlbWVudCcpLmRyYWdnYWJsZSgpOyAvLyB0cnVlXG4gKiBgYGBcbiAqXG4gKiBHZXQgb3Igc2V0IHdoZXRoZXIgZHJhZyBhY3Rpb25zIGNhbiBiZSBwZXJmb3JtZWQgb24gdGhlIHRhcmdldFxuICpcbiAqIEBhbGlhcyBJbnRlcmFjdGFibGUucHJvdG90eXBlLmRyYWdnYWJsZVxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbiB8IG9iamVjdH0gW29wdGlvbnNdIHRydWUvZmFsc2Ugb3IgQW4gb2JqZWN0IHdpdGggZXZlbnRcbiAqIGxpc3RlbmVycyB0byBiZSBmaXJlZCBvbiBkcmFnIGV2ZW50cyAob2JqZWN0IG1ha2VzIHRoZSBJbnRlcmFjdGFibGVcbiAqIGRyYWdnYWJsZSlcbiAqIEByZXR1cm4ge2Jvb2xlYW4gfCBJbnRlcmFjdGFibGV9IGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGlzIGNhbiBiZSB0aGVcbiAqIHRhcmdldCBvZiBkcmFnIGV2ZW50cywgb3IgdGhpcyBJbnRlcmN0YWJsZVxuICovXG5jb25zdCBkcmFnZ2FibGU6IERyYWdnYWJsZU1ldGhvZCA9IGZ1bmN0aW9uIGRyYWdnYWJsZSAodGhpczogSW50ZXJhY3QuSW50ZXJhY3RhYmxlLCBvcHRpb25zPzogSW50ZXJhY3QuRHJhZ2dhYmxlT3B0aW9ucyB8IGJvb2xlYW4pOiBhbnkge1xuICBpZiAoaXMub2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgdGhpcy5vcHRpb25zLmRyYWcuZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2VcbiAgICB0aGlzLnNldFBlckFjdGlvbignZHJhZycsIG9wdGlvbnMpXG4gICAgdGhpcy5zZXRPbkV2ZW50cygnZHJhZycsIG9wdGlvbnMpXG5cbiAgICBpZiAoL14oeHl8eHx5fHN0YXJ0KSQvLnRlc3Qob3B0aW9ucy5sb2NrQXhpcykpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5kcmFnLmxvY2tBeGlzID0gb3B0aW9ucy5sb2NrQXhpc1xuICAgIH1cbiAgICBpZiAoL14oeHl8eHx5KSQvLnRlc3Qob3B0aW9ucy5zdGFydEF4aXMpKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuZHJhZy5zdGFydEF4aXMgPSBvcHRpb25zLnN0YXJ0QXhpc1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBpZiAoaXMuYm9vbChvcHRpb25zKSkge1xuICAgIHRoaXMub3B0aW9ucy5kcmFnLmVuYWJsZWQgPSBvcHRpb25zXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgcmV0dXJuIHRoaXMub3B0aW9ucy5kcmFnXG59XG5cbmNvbnN0IGRyYWcgPSB7XG4gIGluc3RhbGwsXG4gIGRyYWdnYWJsZSxcbiAgYmVmb3JlTW92ZSxcbiAgbW92ZSxcbiAgZGVmYXVsdHM6IHtcbiAgICBzdGFydEF4aXMgOiAneHknLFxuICAgIGxvY2tBeGlzICA6ICd4eScsXG4gIH0gYXMgSW50ZXJhY3QuRHJvcHpvbmVPcHRpb25zLFxuXG4gIGNoZWNrZXIgKF9wb2ludGVyLCBfZXZlbnQsIGludGVyYWN0YWJsZSkge1xuICAgIGNvbnN0IGRyYWdPcHRpb25zID0gaW50ZXJhY3RhYmxlLm9wdGlvbnMuZHJhZ1xuXG4gICAgcmV0dXJuIGRyYWdPcHRpb25zLmVuYWJsZWRcbiAgICAgID8ge1xuICAgICAgICBuYW1lOiAnZHJhZycsXG4gICAgICAgIGF4aXM6IChkcmFnT3B0aW9ucy5sb2NrQXhpcyA9PT0gJ3N0YXJ0J1xuICAgICAgICAgID8gZHJhZ09wdGlvbnMuc3RhcnRBeGlzXG4gICAgICAgICAgOiBkcmFnT3B0aW9ucy5sb2NrQXhpcyksXG4gICAgICB9XG4gICAgICA6IG51bGxcbiAgfSxcblxuICBnZXRDdXJzb3IgKCkge1xuICAgIHJldHVybiAnbW92ZSdcbiAgfSxcbn1cblxuZXhwb3J0IGRlZmF1bHQgZHJhZ1xuIl19 \ No newline at end of file diff --git a/packages/actions/drop/index.d.ts b/packages/actions/drop/index.d.ts index 68d97e257..479d96751 100644 --- a/packages/actions/drop/index.d.ts +++ b/packages/actions/drop/index.d.ts @@ -1,3 +1,4 @@ +import Interactable from '@interactjs/core/Interactable'; import InteractEvent from '@interactjs/core/InteractEvent'; import { Scope } from '@interactjs/core/scope'; export declare type DropzoneMethod = (options?: Interact.DropzoneOptions | boolean) => Interact.Interactable | Interact.DropzoneOptions; @@ -10,7 +11,21 @@ declare module '@interactjs/core/Interactable' { declare module '@interactjs/core/Interaction' { interface Interaction { dropStatus?: { - [key: string]: any; + cur: { + dropzone: Interactable; + element: Element; + }; + prev: { + dropzone: Interactable; + element: Element; + }; + rejected: boolean; + events: any; + activeDrops: Array<{ + dropzone: Interactable; + Element: Element; + rect: Interact.Rect; + }>; }; } } @@ -51,6 +66,6 @@ declare const drop: { getDrop: typeof getDrop; getDropEvents: typeof getDropEvents; fireDropEvents: typeof fireDropEvents; - defaults: import("../../types").DropzoneOptions; + defaults: import("../../types/types").DropzoneOptions; }; export default drop; diff --git a/packages/actions/drop/index.js b/packages/actions/drop/index.js index 3f311d2ca..7a61f66ee 100644 --- a/packages/actions/drop/index.js +++ b/packages/actions/drop/index.js @@ -5,12 +5,25 @@ function install(scope) { /** @lends module:interact */ interact, /** @lends Interactable */ - Interactable, interactions, defaults, } = scope; + Interactable, // eslint-disable-line no-shadow + interactions, defaults, } = scope; interactions.signals.on('after-action-start', ({ interaction, event, iEvent: dragEvent }) => { if (interaction.prepared.name !== 'drag') { return; } - const { dropStatus } = interaction; + const dropStatus = interaction.dropStatus = interaction.dropStatus || { + cur: { + dropzone: null, + element: null, + }, + prev: { + dropzone: null, + element: null, + }, + rejected: null, + events: null, + activeDrops: null, + }; // reset active dropzones dropStatus.activeDrops = null; dropStatus.events = null; @@ -42,21 +55,6 @@ function install(scope) { interaction.dropStatus.activeDrops = null; interaction.dropStatus.events = null; }); - interactions.signals.on('new', (interaction) => { - interaction.dropStatus = { - cur: { - dropzone: null, - element: null, - }, - prev: { - dropzone: null, - element: null, - }, - rejected: false, - events: null, - activeDrops: null, - }; - }); interactions.signals.on('stop', ({ interaction: { dropStatus } }) => { dropStatus.cur.dropzone = dropStatus.cur.element = dropStatus.prev.dropzone = dropStatus.prev.element = null; @@ -411,4 +409,4 @@ const drop = { }, }; export default drop; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFBO0FBQzFDLE9BQU8sU0FBUyxNQUFNLGFBQWEsQ0FBQTtBQTBDbkMsU0FBUyxPQUFPLENBQUUsS0FBWTtJQUM1QixNQUFNLEVBQ0osT0FBTztJQUNQLDZCQUE2QjtJQUM3QixRQUFRO0lBQ1IsMEJBQTBCO0lBQzFCLFlBQVksRUFDWixZQUFZLEVBQ1osUUFBUSxHQUNULEdBQUcsS0FBSyxDQUFBO0lBRVQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7UUFDMUYsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7WUFBRSxPQUFNO1NBQUU7UUFFcEQsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLFdBQVcsQ0FBQTtRQUVsQyx5QkFBeUI7UUFDekIsVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUE7UUFDN0IsVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUE7UUFFeEIseUVBQXlFO1FBQ3pFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFO1lBQ3RCLFVBQVUsQ0FBQyxXQUFXLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7U0FDcEU7UUFFRCxVQUFVLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBRWhFLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDOUIsb0JBQW9CLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxD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TUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFJLENBQUMsQ0FBQTtRQUM5QyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxHQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1FBRTlDLE9BQU8sR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQTtLQUNyRjtJQUVELElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQzVDLE1BQU0sV0FBVyxHQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFN0csTUFBTSxZQUFZLEdBQUcsV0FBVyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFckUsT0FBTyxHQUFHLFlBQVksSUFBSSxXQUFXLENBQUE7S0FDdEM7SUFFRCxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNyQyxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUE7S0FDL0g7SUFFRCxPQUFPLE9BQU8sQ0FBQTtBQUNoQixDQUFDO0FBRUQsTUFBTSxJQUFJLEdBQUc7SUFDWCxPQUFPO0lBQ1AsY0FBYztJQUNkLE9BQU87SUFDUCxhQUFhO0lBQ2IsY0FBYztJQUNkLFFBQVEsRUFBRTtRQUNSLE9BQU8sRUFBRSxLQUFLO1FBQ2QsTUFBTSxFQUFHLElBQUk7UUFDYixPQUFPLEVBQUUsU0FBUztLQUNTO0NBQzlCLENBQUE7QUFFRCxlQUFlLElBQUksQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBJbnRlcmFjdEV2ZW50IGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3RFdmVudCdcbmltcG9ydCB7IFNjb3BlIH0gZnJvbSAnQGludGVyYWN0anMvY29yZS9zY29wZSdcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzJ1xuaW1wb3J0IERyb3BFdmVudCBmcm9tICcuL0Ryb3BFdmVudCdcblxuZXhwb3J0IHR5cGUgRHJvcHpvbmVNZXRob2QgPSAob3B0aW9ucz86IEludGVyYWN0LkRyb3B6b25lT3B0aW9ucyB8IGJvb2xlYW4pID0+IEludGVyYWN0LkludGVyYWN0YWJsZSB8IEludGVyYWN0LkRyb3B6b25lT3B0aW9uc1xuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGFibGUnIHtcbiAgaW50ZXJmYWNlIEludGVyYWN0YWJsZSB7XG4gICAgZHJvcHpvbmU6IERyb3B6b25lTWV0aG9kXG4gICAgZHJvcENoZWNrOiAoXG4gICAgICBkcmFnRXZlbnQ6IEludGVyYWN0RXZlbnQsXG4gICAgICBldmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZSxcbiAgICAgIGRyYWdnYWJsZTogSW50ZXJhY3RhYmxlLFxuICAgICAgZHJhZ2dhYmxlRWxlbWVudDogRWxlbWVudCxcbiAgICAgIGRyb3BFbGVtZW46IEVsZW1lbnQsXG4gICAgICByZWN0OiBhbnlcbiAgICApID0+IGJvb2xlYW5cbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbicge1xuICBpbnRlcmZhY2UgSW50ZXJhY3Rpb24ge1xuICAgIGRyb3BTdGF0dXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9XG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvZGVmYXVsdE9wdGlvbnMnIHtcbiAgaW50ZXJmYWNlIEFjdGlvbkRlZmF1bHRzIHtcbiAgICBkcm9wOiBJbnRlcmFjdC5Ecm9wem9uZU9wdGlvbnNcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9zY29wZScge1xuICBpbnRlcmZhY2UgU2NvcGUge1xuICAgIGR5bmFtaWNEcm9wPzogYm9vbGVhblxuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9pbnRlcmFjdC9pbnRlcmFjdCcge1xuICBpbnRlcmZhY2UgSW50ZXJhY3RTdGF0aWMge1xuICAgIGR5bmFtaWNEcm9wOiAobmV3VmFsdWU/OiBib29sZWFuKSA9PiBib29sZWFuIHwgSW50ZXJhY3QuaW50ZXJhY3RcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnN0YWxsIChzY29wZTogU2NvcGUpIHtcbiAgY29uc3Qge1xuICAgIGFjdGlvbnMsXG4gICAgLyoqIEBsZW5kcyBtb2R1bGU6aW50ZXJhY3QgKi9cbiAgICBpbnRlcmFjdCxcbiAgICAvKiogQGxlbmRzIEludGVyYWN0YWJsZSAqL1xuICAgIEludGVyYWN0YWJsZSxcbiAgICBpbnRlcmFjdGlvbnMsXG4gICAgZGVmYXVsdHMsXG4gIH0gPSBzY29wZVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhZnRlci1hY3Rpb24tc3RhcnQnLCAoeyBpbnRlcmFjdGlvbiwgZXZlbnQsIGlFdmVudDogZHJhZ0V2ZW50IH0pID0+IHtcbiAgICBpZiAoaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSAhPT0gJ2RyYWcnKSB7IHJldHVybiB9XG5cbiAgICBjb25zdCB7IGRyb3BTdGF0dXMgfSA9IGludGVyYWN0aW9uXG5cbiAgICAvLyByZXNldCBhY3RpdmUgZHJvcHpvbmVzXG4gICAgZHJvcFN0YXR1cy5hY3RpdmVEcm9wcyA9IG51bGxcbiAgICBkcm9wU3RhdHVzLmV2ZW50cyA9IG51bGxcblxuICAgIC8vIFRPRE86IG1heWJlIEludGVyYWN0aW9uPFQ6IFdpbmRvdyB8IERvY3VtZW50IHwgRWxlbWVudD4geyBlbGVtZW50OiBUIH1cbiAgICBpZiAoIXNjb3BlLmR5bmFtaWNEcm9wKSB7XG4gICAgICBkcm9wU3RhdHVzLmFjdGl2ZURyb3BzID0gZ2V0QWN0aXZlRHJvcHMoc2NvcGUsIGludGVyYWN0aW9uLmVsZW1lbnQpXG4gICAgfVxuXG4gICAgZHJvcFN0YXR1cy5ldmVudHMgPSBnZXREcm9wRXZlbnRzKGludGVyYWN0aW9uLCBldmVudCwgZHJhZ0V2ZW50KVxuXG4gICAgaWYgKGRyb3BTdGF0dXMuZXZlbnRzLmFjdGl2YXRlKSB7XG4gICAgICBmaXJlQWN0aXZhdGlvbkV2ZW50cyhkcm9wU3RhdHVzLmFjdGl2ZURyb3BzLCBkcm9wU3RhdHVzLmV2ZW50cy5hY3RpdmF0ZSlcbiAgICB9XG4gIH0pXG5cbiAgLy8gRklYTUUgcHJvcGVyIHNpZ25hbCB0eXBlc1xuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYWN0aW9uLW1vdmUnLCAoYXJnKSA9PiBvbkV2ZW50Q3JlYXRlZChhcmcgYXMgYW55LCBzY29wZSkpXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tZW5kJywgKGFyZykgPT4gb25FdmVudENyZWF0ZWQoYXJnIGFzIGFueSwgc2NvcGUpKVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhZnRlci1hY3Rpb24tbW92ZScsICh7IGludGVyYWN0aW9uIH0pID0+IHtcbiAgICBpZiAoaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSAhPT0gJ2RyYWcnKSB7IHJldHVybiB9XG5cbiAgICBmaXJlRHJvcEV2ZW50cyhpbnRlcmFjdGlvbiwgaW50ZXJhY3Rpb24uZHJvcFN0YXR1cy5ldmVudHMpXG4gICAgaW50ZXJhY3Rpb24uZHJvcFN0YXR1cy5ldmVudHMgPSB7fVxuICB9KVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhZnRlci1hY3Rpb24tZW5kJywgKHsgaW50ZXJhY3Rpb24gfSkgPT4ge1xuICAgIGlmIChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lID09PSAnZHJhZycpIHtcbiAgICAgIGZpcmVEcm9wRXZlbnRzKGludGVyYWN0aW9uLCBpbnRlcmFjdGlvbi5kcm9wU3RhdHVzLmV2ZW50cylcbiAgICB9XG4gIH0pXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ3N0b3AnLCAoeyBpbnRlcmFjdGlvbiB9KSA9PiB7XG4gICAgaW50ZXJhY3Rpb24uZHJvcFN0YXR1cy5hY3RpdmVEcm9wcyA9IG51bGxcbiAgICBpbnRlcmFjdGlvbi5kcm9wU3RhdHVzLmV2ZW50cyA9IG51bGxcbiAgfSlcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignbmV3JywgKGludGVyYWN0aW9uKSA9PiB7XG4gICAgaW50ZXJhY3Rpb24uZHJvcFN0YXR1cyA9IHtcbiAgICAgIGN1cjoge1xuICAgICAgICBkcm9wem9uZSA6IG51bGwsICAvLyB0aGUgZHJvcHpvbmUgYSBkcmFnIHRhcmdldCBtaWdodCBiZSBkcm9wcGVkIGludG9cbiAgICAgICAgZWxlbWVudCAgOiBudWxsLCAgLy8gdGhlIGVsZW1lbnQgYXQgdGhlIHRpbWUgb2YgY2hlY2tpbmdcbiAgICAgIH0sXG4gICAgICBwcmV2OiB7XG4gICAgICAgIGRyb3B6b25lIDogbnVsbCwgIC8vIHRoZSBkcm9wem9uZSB0aGF0IHdhcyByZWNlbnRseSBkcmFnZ2VkIGF3YXkgZnJvbVxuICAgICAgICBlbGVtZW50ICA6IG51bGwsICAvLyB0aGUgZWxlbWVudCBhdCB0aGUgdGltZSBvZiBjaGVja2luZ1xuICAgICAgfSxcbiAgICAgIHJlamVjdGVkICAgOiBmYWxzZSwgLy8gd2hlYXRoZXIgdGhlIHBvdGVudGlhbCBkcm9wIHdhcyByZWplY3RlZCBmcm9tIGEgbGlzdGVuZXJcbiAgICAgIGV2ZW50cyAgICAgOiBudWxsLCAgLy8gdGhlIGRyb3AgZXZlbnRzIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgZHJhZyBldmVudFxuICAgICAgYWN0aXZlRHJvcHM6IG51bGwsICAvLyBhbiBhcnJheSBvZiB7IGRyb3B6b25lLCBlbGVtZW50LCByZWN0IH1cbiAgICB9XG4gIH0pXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ3N0b3AnLCAoeyBpbnRlcmFjdGlvbjogeyBkcm9wU3RhdHVzIH0gfSkgPT4ge1xuICAgIGRyb3BTdGF0dXMuY3VyLmRyb3B6b25lID0gZHJvcFN0YXR1cy5jdXIuZWxlbWVudCA9XG4gICAgICBkcm9wU3RhdHVzLnByZXYuZHJvcHpvbmUgPSBkcm9wU3RhdHVzLnByZXYuZWxlbWVudCA9IG51bGxcbiAgICBkcm9wU3RhdHVzLnJlamVjdGVkID0gZmFsc2VcbiAgfSlcblxuICAvKipcbiAgICpcbiAgICogYGBganNcbiAgICogaW50ZXJhY3QoJy5kcm9wJykuZHJvcHpvbmUoe1xuICAgKiAgIGFjY2VwdDogJy5jYW4tZHJvcCcgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NpbmdsZS1kcm9wJyksXG4gICAqICAgb3ZlcmxhcDogJ3BvaW50ZXInIHx8ICdjZW50ZXInIHx8IHplcm9Ub09uZVxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBSZXR1cm5zIG9yIHNldHMgd2hldGhlciBkcmFnZ2FibGVzIGNhbiBiZSBkcm9wcGVkIG9udG8gdGhpcyB0YXJnZXQgdG9cbiAgICogdHJpZ2dlciBkcm9wIGV2ZW50c1xuICAgKlxuICAgKiBEcm9wem9uZXMgY2FuIHJlY2VpdmUgdGhlIGZvbGxvd2luZyBldmVudHM6XG4gICAqICAtIGBkcm9wYWN0aXZhdGVgIGFuZCBgZHJvcGRlYWN0aXZhdGVgIHdoZW4gYW4gYWNjZXB0YWJsZSBkcmFnIHN0YXJ0cyBhbmQgZW5kc1xuICAgKiAgLSBgZHJhZ2VudGVyYCBhbmQgYGRyYWdsZWF2ZWAgd2hlbiBhIGRyYWdnYWJsZSBlbnRlcnMgYW5kIGxlYXZlcyB0aGUgZHJvcHpvbmVcbiAgICogIC0gYGRyYWdtb3ZlYCB3aGVuIGEgZHJhZ2dhYmxlIHRoYXQgaGFzIGVudGVyZWQgdGhlIGRyb3B6b25lIGlzIG1vdmVkXG4gICAqICAtIGBkcm9wYCB3aGVuIGEgZHJhZ2dhYmxlIGlzIGRyb3BwZWQgaW50byB0aGlzIGRyb3B6b25lXG4gICAqXG4gICAqIFVzZSB0aGUgYGFjY2VwdGAgb3B0aW9uIHRvIGFsbG93IG9ubHkgZWxlbWVudHMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gQ1NTXG4gICAqIHNlbGVjdG9yIG9yIGVsZW1lbnQuIFRoZSB2YWx1ZSBjYW4gYmU6XG4gICAqXG4gICAqICAtICoqYW4gRWxlbWVudCoqIC0gb25seSB0aGF0IGVsZW1lbnQgY2FuIGJlIGRyb3BwZWQgaW50byB0aGlzIGRyb3B6b25lLlxuICAgKiAgLSAqKmEgc3RyaW5nKiosIC0gdGhlIGVsZW1lbnQgYmVpbmcgZHJhZ2dlZCBtdXN0IG1hdGNoIGl0IGFzIGEgQ1NTIHNlbGVjdG9yLlxuICAgKiAgLSAqKmBudWxsYCoqIC0gYWNjZXB0IG9wdGlvbnMgaXMgY2xlYXJlZCAtIGl0IGFjY2VwdHMgYW55IGVsZW1lbnQuXG4gICAqXG4gICAqIFVzZSB0aGUgYG92ZXJsYXBgIG9wdGlvbiB0byBzZXQgaG93IGRyb3BzIGFyZSBjaGVja2VkIGZvci4gVGhlIGFsbG93ZWRcbiAgICogdmFsdWVzIGFyZTpcbiAgICpcbiAgICogICAtIGAncG9pbnRlcidgLCB0aGUgcG9pbnRlciBtdXN0IGJlIG92ZXIgdGhlIGRyb3B6b25lIChkZWZhdWx0KVxuICAgKiAgIC0gYCdjZW50ZXInYCwgdGhlIGRyYWdnYWJsZSBlbGVtZW50J3MgY2VudGVyIG11c3QgYmUgb3ZlciB0aGUgZHJvcHpvbmVcbiAgICogICAtIGEgbnVtYmVyIGZyb20gMC0xIHdoaWNoIGlzIHRoZSBgKGludGVyc2VjdGlvbiBhcmVhKSAvIChkcmFnZ2FibGUgYXJlYSlgLlxuICAgKiAgIGUuZy4gYDAuNWAgZm9yIGRyb3AgdG8gaGFwcGVuIHdoZW4gaGFsZiBvZiB0aGUgYXJlYSBvZiB0aGUgZHJhZ2dhYmxlIGlzXG4gICAqICAgb3ZlciB0aGUgZHJvcHpvbmVcbiAgICpcbiAgICogVXNlIHRoZSBgY2hlY2tlcmAgb3B0aW9uIHRvIHNwZWNpZnkgYSBmdW5jdGlvbiB0byBjaGVjayBpZiBhIGRyYWdnZWQgZWxlbWVudFxuICAgKiBpcyBvdmVyIHRoaXMgSW50ZXJhY3RhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW4gfCBvYmplY3QgfCBudWxsfSBbb3B0aW9uc10gVGhlIG5ldyBvcHRpb25zIHRvIGJlIHNldC5cbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEludGVyYWN0YWJsZX0gVGhlIGN1cnJlbnQgc2V0dGluZyBvciB0aGlzIEludGVyYWN0YWJsZVxuICAgKi9cbiAgSW50ZXJhY3RhYmxlLnByb3RvdHlwZS5kcm9wem9uZSA9IGZ1bmN0aW9uICh0aGlzOiBJbnRlcmFjdC5JbnRlcmFjdGFibGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gZHJvcHpvbmVNZXRob2QodGhpcywgb3B0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBgYGBqc1xuICAgKiBpbnRlcmFjdCh0YXJnZXQpXG4gICAqIC5kcm9wQ2hlY2tlcihmdW5jdGlvbihkcmFnRXZlbnQsICAgICAgICAgLy8gcmVsYXRlZCBkcmFnbW92ZSBvciBkcmFnZW5kIGV2ZW50XG4gICAqICAgICAgICAgICAgICAgICAgICAgICBldmVudCwgICAgICAgICAgICAgLy8gVG91Y2hFdmVudC9Qb2ludGVyRXZlbnQvTW91c2VFdmVudFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgZHJvcHBlZCwgICAgICAgICAgIC8vIGJvb2wgcmVzdWx0IG9mIHRoZSBkZWZhdWx0IGNoZWNrZXJcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGRyb3B6b25lLCAgICAgICAgICAvLyBkcm9wem9uZSBJbnRlcmFjdGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGRyb3BFbGVtZW50LCAgICAgICAvLyBkcm9wem9uZSBlbGVtbnRcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGRyYWdnYWJsZSwgICAgICAgICAvLyBkcmFnZ2FibGUgSW50ZXJhY3RhYmxlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGVFbGVtZW50KSB7Ly8gZHJhZ2dhYmxlIGVsZW1lbnRcbiAgICpcbiAgICogICByZXR1cm4gZHJvcHBlZCAmJiBldmVudC50YXJnZXQuaGFzQXR0cmlidXRlKCdhbGxvdy1kcm9wJyk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBJbnRlcmFjdGFibGUucHJvdG90eXBlLmRyb3BDaGVjayA9IGZ1bmN0aW9uICh0aGlzOiBJbnRlcmFjdC5JbnRlcmFjdGFibGUsIGRyYWdFdmVudCwgZXZlbnQsIGRyYWdnYWJsZSwgZHJhZ2dhYmxlRWxlbWVudCwgZHJvcEVsZW1lbnQsIHJlY3QpIHtcbiAgICByZXR1cm4gZHJvcENoZWNrTWV0aG9kKHRoaXMsIGRyYWdFdmVudCwgZXZlbnQsIGRyYWdnYWJsZSwgZHJhZ2dhYmxlRWxlbWVudCwgZHJvcEVsZW1lbnQsIHJlY3QpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBvciBzZXRzIHdoZXRoZXIgdGhlIGRpbWVuc2lvbnMgb2YgZHJvcHpvbmUgZWxlbWVudHMgYXJlIGNhbGN1bGF0ZWRcbiAgICogb24gZXZlcnkgZHJhZ21vdmUgb3Igb25seSBvbiBkcmFnc3RhcnQgZm9yIHRoZSBkZWZhdWx0IGRyb3BDaGVja2VyXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW25ld1ZhbHVlXSBUcnVlIHRvIGNoZWNrIG9uIGVhY2ggbW92ZS4gRmFsc2UgdG8gY2hlY2sgb25seVxuICAgKiBiZWZvcmUgc3RhcnRcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IGludGVyYWN0fSBUaGUgY3VycmVudCBzZXR0aW5nIG9yIGludGVyYWN0XG4gICAqL1xuICBpbnRlcmFjdC5keW5hbWljRHJvcCA9IGZ1bmN0aW9uIChuZXdWYWx1ZT86IGJvb2xlYW4pIHtcbiAgICBpZiAodXRpbHMuaXMuYm9vbChuZXdWYWx1ZSkpIHtcbiAgICAgIC8vIGlmIChkcmFnZ2luZyAmJiBzY29wZS5keW5hbWljRHJvcCAhPT0gbmV3VmFsdWUgJiYgIW5ld1ZhbHVlKSB7XG4gICAgICAvLyAgY2FsY1JlY3RzKGRyb3B6b25lcyk7XG4gICAgICAvLyB9XG5cbiAgICAgIHNjb3BlLmR5bmFtaWNEcm9wID0gbmV3VmFsdWVcblxuICAgICAgcmV0dXJuIGludGVyYWN0XG4gICAgfVxuICAgIHJldHVybiBzY29wZS5keW5hbWljRHJvcFxuICB9XG5cbiAgdXRpbHMuYXJyLm1lcmdlKGFjdGlvbnMuZXZlbnRUeXBlcywgW1xuICAgICdkcmFnZW50ZXInLFxuICAgICdkcmFnbGVhdmUnLFxuICAgICdkcm9wYWN0aXZhdGUnLFxuICAgICdkcm9wZGVhY3RpdmF0ZScsXG4gICAgJ2Ryb3Btb3ZlJyxcbiAgICAnZHJvcCcsXG4gIF0pXG4gIGFjdGlvbnMubWV0aG9kRGljdC5kcm9wID0gJ2Ryb3B6b25lJ1xuXG4gIHNjb3BlLmR5bmFtaWNEcm9wID0gZmFsc2VcblxuICBkZWZhdWx0cy5hY3Rpb25zLmRyb3AgPSBkcm9wLmRlZmF1bHRzXG59XG5cbmZ1bmN0aW9uIGNvbGxlY3REcm9wcyAoeyBpbnRlcmFjdGFibGVzIH0sIGRyYWdnYWJsZUVsZW1lbnQpIHtcbiAgY29uc3QgZHJvcHMgPSBbXVxuXG4gIC8vIGNvbGxlY3QgYWxsIGRyb3B6b25lcyBhbmQgdGhlaXIgZWxlbWVudHMgd2hpY2ggcXVhbGlmeSBmb3IgYSBkcm9wXG4gIGZvciAoY29uc3QgZHJvcHpvbmUgb2YgaW50ZXJhY3RhYmxlcy5saXN0KSB7XG4gICAgaWYgKCFkcm9wem9uZS5vcHRpb25zLmRyb3AuZW5hYmxlZCkgeyBjb250aW51ZSB9XG5cbiAgICBjb25zdCBhY2NlcHQgPSBkcm9wem9uZS5vcHRpb25zLmRyb3AuYWNjZXB0XG5cbiAgICAvLyB0ZXN0IHRoZSBkcmFnZ2FibGUgZHJhZ2dhYmxlRWxlbWVudCBhZ2FpbnN0IHRoZSBkcm9wem9uZSdzIGFjY2VwdCBzZXR0aW5nXG4gICAgaWYgKCh1dGlscy5pcy5lbGVtZW50KGFjY2VwdCkgJiYgYWNjZXB0ICE9PSBkcmFnZ2FibGVFbGVtZW50KSB8fFxuICAgICAgICAodXRpbHMuaXMuc3RyaW5nKGFjY2VwdCkgJiZcbiAgICAgICAgIXV0aWxzLmRvbS5tYXRjaGVzU2VsZWN0b3IoZHJhZ2dhYmxlRWxlbWVudCwgYWNjZXB0KSkgfHxcbiAgICAgICAgKHV0aWxzLmlzLmZ1bmMoYWNjZXB0KSAmJiAhYWNjZXB0KHsgZHJvcHpvbmUsIGRyYWdnYWJsZUVsZW1lbnQgfSkpKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIC8vIHF1ZXJ5IGZvciBuZXcgZWxlbWVudHMgaWYgbmVjZXNzYXJ5XG4gICAgY29uc3QgZHJvcEVsZW1lbnRzID0gdXRpbHMuaXMuc3RyaW5nKGRyb3B6b25lLnRhcmdldClcbiAgICAgID8gZHJvcHpvbmUuX2NvbnRleHQucXVlcnlTZWxlY3RvckFsbChkcm9wem9uZS50YXJnZXQpXG4gICAgICA6IHV0aWxzLmlzLmFycmF5KGRyb3B6b25lLnRhcmdldCkgPyBkcm9wem9uZS50YXJnZXQgOiBbZHJvcHpvbmUudGFyZ2V0XVxuXG4gICAgZm9yIChjb25zdCBkcm9wem9uZUVsZW1lbnQgb2YgZHJvcEVsZW1lbnRzKSB7XG4gICAgICBpZiAoZHJvcHpvbmVFbGVtZW50ICE9PSBkcmFnZ2FibGVFbGVtZW50KSB7XG4gICAgICAgIGRyb3BzLnB1c2goe1xuICAgICAgICAgIGRyb3B6b25lLFxuICAgICAgICAgIGVsZW1lbnQ6IGRyb3B6b25lRWxlbWVudCxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZHJvcHNcbn1cblxuZnVuY3Rpb24gZmlyZUFjdGl2YXRpb25FdmVudHMgKGFjdGl2ZURyb3BzLCBldmVudCkge1xuICAvLyBsb29wIHRocm91Z2ggYWxsIGFjdGl2ZSBkcm9wem9uZXMgYW5kIHRyaWdnZXIgZXZlbnRcbiAgZm9yIChjb25zdCB7IGRyb3B6b25lLCBlbGVtZW50IH0gb2YgYWN0aXZlRHJvcHMpIHtcbiAgICBldmVudC5kcm9wem9uZSA9IGRyb3B6b25lXG5cbiAgICAvLyBzZXQgY3VycmVudCBlbGVtZW50IGFzIGV2ZW50IHRhcmdldFxuICAgIGV2ZW50LnRhcmdldCA9IGVsZW1lbnRcbiAgICBkcm9wem9uZS5maXJlKGV2ZW50KVxuICAgIGV2ZW50LnByb3BhZ2F0aW9uU3RvcHBlZCA9IGV2ZW50LmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IGZhbHNlXG4gIH1cbn1cblxuLy8gcmV0dXJuIGEgbmV3IGFycmF5IG9mIHBvc3NpYmxlIGRyb3BzLiBnZXRBY3RpdmVEcm9wcyBzaG91bGQgYWx3YXlzIGJlXG4vLyBjYWxsZWQgd2hlbiBhIGRyYWcgaGFzIGp1c3Qgc3RhcnRlZCBvciBhIGRyYWcgZXZlbnQgaGFwcGVucyB3aGlsZVxuLy8gZHluYW1pY0Ryb3AgaXMgdHJ1ZVxuZnVuY3Rpb24gZ2V0QWN0aXZlRHJvcHMgKHNjb3BlOiBTY29wZSwgZHJhZ0VsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgLy8gZ2V0IGRyb3B6b25lcyBhbmQgdGhlaXIgZWxlbWVudHMgdGhhdCBjb3VsZCByZWNlaXZlIHRoZSBkcmFnZ2FibGVcbiAgY29uc3QgYWN0aXZlRHJvcHMgPSBjb2xsZWN0RHJvcHMoc2NvcGUsIGRyYWdFbGVtZW50KVxuXG4gIGZvciAoY29uc3QgYWN0aXZlRHJvcCBvZiBhY3RpdmVEcm9wcykge1xuICAgIGFjdGl2ZURyb3AucmVjdCA9IGFjdGl2ZURyb3AuZHJvcHpvbmUuZ2V0UmVjdChhY3RpdmVEcm9wLmVsZW1lbnQpXG4gIH1cblxuICByZXR1cm4gYWN0aXZlRHJvcHNcbn1cblxuZnVuY3Rpb24gZ2V0RHJvcCAoeyBkcm9wU3RhdHVzLCB0YXJnZXQ6IGRyYWdnYWJsZSwgZWxlbWVudDogZHJhZ0VsZW1lbnQgfSwgZHJhZ0V2ZW50LCBwb2ludGVyRXZlbnQpIHtcbiAgY29uc3QgdmFsaWREcm9wcyA9IFtdXG5cbiAgLy8gY29sbGVjdCBhbGwgZHJvcHpvbmVzIGFuZCB0aGVpciBlbGVtZW50cyB3aGljaCBxdWFsaWZ5IGZvciBhIGRyb3BcbiAgZm9yIChjb25zdCB7IGRyb3B6b25lLCBlbGVtZW50OiBkcm9wem9uZUVsZW1lbnQsIHJlY3QgfSBvZiBkcm9wU3RhdHVzLmFjdGl2ZURyb3BzKSB7XG4gICAgdmFsaWREcm9wcy5wdXNoKGRyb3B6b25lLmRyb3BDaGVjayhkcmFnRXZlbnQsIHBvaW50ZXJFdmVudCwgZHJhZ2dhYmxlLCBkcmFnRWxlbWVudCwgZHJvcHpvbmVFbGVtZW50LCByZWN0KVxuICAgICAgPyBkcm9wem9uZUVsZW1lbnRcbiAgICAgIDogbnVsbClcbiAgfVxuXG4gIC8vIGdldCB0aGUgbW9zdCBhcHByb3ByaWF0ZSBkcm9wem9uZSBiYXNlZCBvbiBET00gZGVwdGggYW5kIG9yZGVyXG4gIGNvbnN0IGRyb3BJbmRleCA9IHV0aWxzLmRvbS5pbmRleE9mRGVlcGVzdEVsZW1lbnQodmFsaWREcm9wcylcblxuICByZXR1cm4gZHJvcFN0YXR1cy5hY3RpdmVEcm9wc1tkcm9wSW5kZXhdIHx8IG51bGxcbn1cblxuZnVuY3Rpb24gZ2V0RHJvcEV2ZW50cyAoaW50ZXJhY3Rpb24sIF9wb2ludGVyRXZlbnQsIGRyYWdFdmVudCkge1xuICBjb25zdCB7IGRyb3BTdGF0dXMgfSA9IGludGVyYWN0aW9uXG4gIGNvbnN0IGRyb3BFdmVudHMgPSB7XG4gICAgZW50ZXIgICAgIDogbnVsbCxcbiAgICBsZWF2ZSAgICAgOiBudWxsLFxuICAgIGFjdGl2YXRlICA6IG51bGwsXG4gICAgZGVhY3RpdmF0ZTogbnVsbCxcbiAgICBtb3ZlICAgICAgOiBudWxsLFxuICAgIGRyb3AgICAgICA6IG51bGwsXG4gIH1cblxuICBpZiAoZHJhZ0V2ZW50LnR5cGUgPT09ICdkcmFnc3RhcnQnKSB7XG4gICAgZHJvcEV2ZW50cy5hY3RpdmF0ZSA9IG5ldyBEcm9wRXZlbnQoZHJvcFN0YXR1cywgZHJhZ0V2ZW50LCAnZHJvcGFjdGl2YXRlJylcblxuICAgIGRyb3BFdmVudHMuYWN0aXZhdGUudGFyZ2V0ICAgPSBudWxsXG4gICAgZHJvcEV2ZW50cy5hY3RpdmF0ZS5kcm9wem9uZSA9IG51bGxcbiAgfVxuICBpZiAoZHJhZ0V2ZW50LnR5cGUgPT09ICdkcmFnZW5kJykge1xuICAgIGRyb3BFdmVudHMuZGVhY3RpdmF0ZSA9IG5ldyBEcm9wRXZlbnQoZHJvcFN0YXR1cywgZHJhZ0V2ZW50LCAnZHJvcGRlYWN0aXZhdGUnKVxuXG4gICAgZHJvcEV2ZW50cy5kZWFjdGl2YXRlLnRhcmdldCAgID0gbnVsbFxuICAgIGRyb3BFdmVudHMuZGVhY3RpdmF0ZS5kcm9wem9uZSA9IG51bGxcbiAgfVxuXG4gIGlmIChkcm9wU3RhdHVzLnJlamVjdGVkKSB7XG4gICAgcmV0dXJuIGRyb3BFdmVudHNcbiAgfVxuXG4gIGlmIChkcm9wU3RhdHVzLmN1ci5lbGVtZW50ICE9PSBkcm9wU3RhdHVzLnByZXYuZWxlbWVudCkge1xuICAgIC8vIGlmIHRoZXJlIHdhcyBhIHByZXZpb3VzIGRyb3B6b25lLCBjcmVhdGUgYSBkcmFnbGVhdmUgZXZlbnRcbiAgICBpZiAoZHJvcFN0YXR1cy5wcmV2LmRyb3B6b25lKSB7XG4gICAgICBkcm9wRXZlbnRzLmxlYXZlID0gbmV3IERyb3BFdmVudChkcm9wU3RhdHVzLCBkcmFnRXZlbnQsICdkcmFnbGVhdmUnKVxuXG4gICAgICBkcmFnRXZlbnQuZHJhZ0xlYXZlICAgID0gZHJvcEV2ZW50cy5sZWF2ZS50YXJnZXQgICA9IGRyb3BTdGF0dXMucHJldi5lbGVtZW50XG4gICAgICBkcmFnRXZlbnQucHJldkRyb3B6b25lID0gZHJvcEV2ZW50cy5sZWF2ZS5kcm9wem9uZSA9IGRyb3BTdGF0dXMucHJldi5kcm9wem9uZVxuICAgIH1cbiAgICAvLyBpZiBkcm9wem9uZSBpcyBub3QgbnVsbCwgY3JlYXRlIGEgZHJhZ2VudGVyIGV2ZW50XG4gICAgaWYgKGRyb3BTdGF0dXMuY3VyLmRyb3B6b25lKSB7XG4gICAgICBkcm9wRXZlbnRzLmVudGVyID0gbmV3IERyb3BFdmVudChkcm9wU3RhdHVzLCBkcmFnRXZlbnQsICdkcmFnZW50ZXInKVxuXG4gICAgICBkcmFnRXZlbnQuZHJhZ0VudGVyID0gZHJvcFN0YXR1cy5jdXIuZWxlbWVudFxuICAgICAgZHJhZ0V2ZW50LmRyb3B6b25lID0gZHJvcFN0YXR1cy5jdXIuZHJvcHpvbmVcbiAgICB9XG4gIH1cblxuICBpZiAoZHJhZ0V2ZW50LnR5cGUgPT09ICdkcmFnZW5kJyAmJiBkcm9wU3RhdHVzLmN1ci5kcm9wem9uZSkge1xuICAgIGRyb3BFdmVudHMuZHJvcCA9IG5ldyBEcm9wRXZlbnQoZHJvcFN0YXR1cywgZHJhZ0V2ZW50LCAnZHJvcCcpXG5cbiAgICBkcmFnRXZlbnQuZHJvcHpvbmUgPSBkcm9wU3RhdHVzLmN1ci5kcm9wem9uZVxuICAgIGRyYWdFdmVudC5yZWxhdGVkVGFyZ2V0ID0gZHJvcFN0YXR1cy5jdXIuZWxlbWVudFxuICB9XG4gIGlmIChkcmFnRXZlbnQudHlwZSA9PT0gJ2RyYWdtb3ZlJyAmJiBkcm9wU3RhdHVzLmN1ci5kcm9wem9uZSkge1xuICAgIGRyb3BFdmVudHMubW92ZSA9IG5ldyBEcm9wRXZlbnQoZHJvcFN0YXR1cywgZHJhZ0V2ZW50LCAnZHJvcG1vdmUnKVxuXG4gICAgZHJvcEV2ZW50cy5tb3ZlLmRyYWdtb3ZlID0gZHJhZ0V2ZW50XG4gICAgZHJhZ0V2ZW50LmRyb3B6b25lID0gZHJvcFN0YXR1cy5jdXIuZHJvcHpvbmVcbiAgfVxuXG4gIHJldHVybiBkcm9wRXZlbnRzXG59XG5cbmZ1bmN0aW9uIGZpcmVEcm9wRXZlbnRzIChpbnRlcmFjdGlvbiwgZXZlbnRzKSB7XG4gIGNvbnN0IHsgZHJvcFN0YXR1cyB9ID0gaW50ZXJhY3Rpb25cbiAgY29uc3Qge1xuICAgIGFjdGl2ZURyb3BzLFxuICAgIGN1cixcbiAgICBwcmV2LFxuICB9ID0gZHJvcFN0YXR1c1xuXG4gIGlmIChldmVudHMubGVhdmUpIHsgcHJldi5kcm9wem9uZS5maXJlKGV2ZW50cy5sZWF2ZSkgfVxuICBpZiAoZXZlbnRzLm1vdmUpIHsgY3VyLmRyb3B6b25lLmZpcmUoZXZlbnRzLm1vdmUpIH1cbiAgaWYgKGV2ZW50cy5lbnRlcikgeyBjdXIuZHJvcHpvbmUuZmlyZShldmVudHMuZW50ZXIpIH1cbiAgaWYgKGV2ZW50cy5kcm9wKSB7IGN1ci5kcm9wem9uZS5maXJlKGV2ZW50cy5kcm9wKSB9XG5cbiAgaWYgKGV2ZW50cy5kZWFjdGl2YXRlKSB7XG4gICAgZmlyZUFjdGl2YXRpb25FdmVudHMoYWN0aXZlRHJvcHMsIGV2ZW50cy5kZWFjdGl2YXRlKVxuICB9XG5cbiAgZHJvcFN0YXR1cy5wcmV2LmRyb3B6b25lICA9IGN1ci5kcm9wem9uZVxuICBkcm9wU3RhdHVzLnByZXYuZWxlbWVudCA9IGN1ci5lbGVtZW50XG59XG5cbmZ1bmN0aW9uIG9uRXZlbnRDcmVhdGVkICh7IGludGVyYWN0aW9uLCBpRXZlbnQsIGV2ZW50IH0sIHNjb3BlKSB7XG4gIGlmIChpRXZlbnQudHlwZSAhPT0gJ2RyYWdtb3ZlJyAmJiBpRXZlbnQudHlwZSAhPT0gJ2RyYWdlbmQnKSB7IHJldHVybiB9XG5cbiAgY29uc3QgeyBkcm9wU3RhdHVzIH0gPSBpbnRlcmFjdGlvblxuXG4gIGlmIChzY29wZS5keW5hbWljRHJvcCkge1xuICAgIGRyb3BTdGF0dXMuYWN0aXZlRHJvcHMgPSBnZXRBY3RpdmVEcm9wcyhzY29wZSwgaW50ZXJhY3Rpb24uZWxlbWVudClcbiAgfVxuXG4gIGNvbnN0IGRyYWdFdmVudCA9IGlFdmVudFxuICBjb25zdCBkcm9wUmVzdWx0ID0gZ2V0RHJvcChpbnRlcmFjdGlvbiwgZHJhZ0V2ZW50LCBldmVudClcblxuICAvLyB1cGRhdGUgcmVqZWN0ZWQgc3RhdHVzXG4gIGRyb3BTdGF0dXMucmVqZWN0ZWQgPSBkcm9wU3RhdHVzLnJlamVjdGVkICYmXG4gICAgISFkcm9wUmVzdWx0ICYmXG4gICAgZHJvcFJlc3VsdC5kcm9wem9uZSA9PT0gZHJvcFN0YXR1cy5jdXIuZHJvcHpvbmUgJiZcbiAgICBkcm9wUmVzdWx0LmVsZW1lbnQgPT09IGRyb3BTdGF0dXMuY3VyLmVsZW1lbnRcblxuICBkcm9wU3RhdHVzLmN1ci5kcm9wem9uZSAgPSBkcm9wUmVzdWx0ICYmIGRyb3BSZXN1bHQuZHJvcHpvbmVcbiAgZHJvcFN0YXR1cy5jdXIuZWxlbWVudCA9IGRyb3BSZXN1bHQgJiYgZHJvcFJlc3VsdC5lbGVtZW50XG5cbiAgZHJvcFN0YXR1cy5ldmVudHMgPSBnZXREcm9wRXZlbnRzKGludGVyYWN0aW9uLCBldmVudCwgZHJhZ0V2ZW50KVxufVxuXG5mdW5jdGlvbiBkcm9wem9uZU1ldGhvZCAoaW50ZXJhY3RhYmxlOiBJbnRlcmFjdC5JbnRlcmFjdGFibGUsIG9wdGlvbnM6IEludGVyYWN0LkRyb3B6b25lT3B0aW9ucyB8IGJvb2xlYW4pIHtcbiAgaWYgKHV0aWxzLmlzLm9iamVjdChvcHRpb25zKSkge1xuICAgIGludGVyYWN0YWJsZS5vcHRpb25zLmRyb3AuZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2VcblxuICAgIGlmIChvcHRpb25zLmxpc3RlbmVycykge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IHV0aWxzLm5vcm1hbGl6ZUxpc3RlbmVycyhvcHRpb25zLmxpc3RlbmVycylcbiAgICAgIC8vIHJlbmFtZSAnZHJvcCcgdG8gJycgYXMgaXQgd2lsbCBiZSBwcmVmaXhlZCB3aXRoICdkcm9wJ1xuICAgICAgY29uc3QgY29ycmVjdGVkID0gT2JqZWN0LmtleXMobm9ybWFsaXplZCkucmVkdWNlKChhY2MsIHR5cGUpID0+IHtcbiAgICAgICAgY29uc3QgY29ycmVjdGVkVHlwZSA9IC9eKGVudGVyfGxlYXZlKS8udGVzdCh0eXBlKVxuICAgICAgICAgID8gYGRyYWcke3R5cGV9YFxuICAgICAgICAgIDogL14oYWN0aXZhdGV8ZGVhY3RpdmF0ZXxtb3ZlKS8udGVzdCh0eXBlKVxuICAgICAgICAgICAgPyBgZHJvcCR7dHlwZX1gXG4gICAgICAgICAgICA6IHR5cGVcblxuICAgICAgICBhY2NbY29ycmVjdGVkVHlwZV0gPSBub3JtYWxpemVkW3R5cGVdXG5cbiAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgfSwge30pXG5cbiAgICAgIGludGVyYWN0YWJsZS5vZmYoaW50ZXJhY3RhYmxlLm9wdGlvbnMuZHJvcC5saXN0ZW5lcnMpXG4gICAgICBpbnRlcmFjdGFibGUub24oY29ycmVjdGVkKVxuICAgICAgaW50ZXJhY3RhYmxlLm9wdGlvbnMuZHJvcC5saXN0ZW5lcnMgPSBjb3JyZWN0ZWRcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXMuZnVuYyhvcHRpb25zLm9uZHJvcCkpIHsgaW50ZXJhY3RhYmxlLm9uKCdkcm9wJywgb3B0aW9ucy5vbmRyb3ApIH1cbiAgICBpZiAodXRpbHMuaXMuZnVuYyhvcHRpb25zLm9uZHJvcGFjdGl2YXRlKSkgeyBpbnRlcmFjdGFibGUub24oJ2Ryb3BhY3RpdmF0ZScsIG9wdGlvbnMub25kcm9wYWN0aXZhdGUpIH1cbiAgICBpZiAodXRpbHMuaXMuZnVuYyhvcHRpb25zLm9uZHJvcGRlYWN0aXZhdGUpKSB7IGludGVyYWN0YWJsZS5vbignZHJvcGRlYWN0aXZhdGUnLCBvcHRpb25zLm9uZHJvcGRlYWN0aXZhdGUpIH1cbiAgICBpZiAodXRpbHMuaXMuZnVuYyhvcHRpb25zLm9uZHJhZ2VudGVyKSkgeyBpbnRlcmFjdGFibGUub24oJ2RyYWdlbnRlcicsIG9wdGlvbnMub25kcmFnZW50ZXIpIH1cbiAgICBpZiAodXRpbHMuaXMuZnVuYyhvcHRpb25zLm9uZHJhZ2xlYXZlKSkgeyBpbnRlcmFjdGFibGUub24oJ2RyYWdsZWF2ZScsIG9wdGlvbnMub25kcmFnbGVhdmUpIH1cbiAgICBpZiAodXRpbHMuaXMuZnVuYyhvcHRpb25zLm9uZHJvcG1vdmUpKSB7IGludGVyYWN0YWJsZS5vbignZHJvcG1vdmUnLCBvcHRpb25zLm9uZHJvcG1vdmUpIH1cblxuICAgIGlmICgvXihwb2ludGVyfGNlbnRlcikkLy50ZXN0KG9wdGlvbnMub3ZlcmxhcCBhcyBzdHJpbmcpKSB7XG4gICAgICBpbnRlcmFjdGFibGUub3B0aW9ucy5kcm9wLm92ZXJsYXAgPSBvcHRpb25zLm92ZXJsYXBcbiAgICB9XG4gICAgZWxzZSBpZiAodXRpbHMuaXMubnVtYmVyKG9wdGlvbnMub3ZlcmxhcCkpIHtcbiAgICAgIGludGVyYWN0YWJsZS5vcHRpb25zLmRyb3Aub3ZlcmxhcCA9IE1hdGgubWF4KE1hdGgubWluKDEsIG9wdGlvbnMub3ZlcmxhcCksIDApXG4gICAgfVxuICAgIGlmICgnYWNjZXB0JyBpbiBvcHRpb25zKSB7XG4gICAgICBpbnRlcmFjdGFibGUub3B0aW9ucy5kcm9wLmFjY2VwdCA9IG9wdGlvbnMuYWNjZXB0XG4gICAgfVxuICAgIGlmICgnY2hlY2tlcicgaW4gb3B0aW9ucykge1xuICAgICAgaW50ZXJhY3RhYmxlLm9wdGlvbnMuZHJvcC5jaGVja2VyID0gb3B0aW9ucy5jaGVja2VyXG4gICAgfVxuXG4gICAgcmV0dXJuIGludGVyYWN0YWJsZVxuICB9XG5cbiAgaWYgKHV0aWxzLmlzLmJvb2wob3B0aW9ucykpIHtcbiAgICBpbnRlcmFjdGFibGUub3B0aW9ucy5kcm9wLmVuYWJsZWQgPSBvcHRpb25zXG5cbiAgICByZXR1cm4gaW50ZXJhY3RhYmxlXG4gIH1cblxuICByZXR1cm4gaW50ZXJhY3RhYmxlLm9wdGlvbnMuZHJvcFxufVxuXG5mdW5jdGlvbiBkcm9wQ2hlY2tNZXRob2QgKFxuICBpbnRlcmFjdGFibGU6IEludGVyYWN0LkludGVyYWN0YWJsZSxcbiAgZHJhZ0V2ZW50OiBJbnRlcmFjdEV2ZW50LFxuICBldmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZSxcbiAgZHJhZ2dhYmxlOiBJbnRlcmFjdC5JbnRlcmFjdGFibGUsXG4gIGRyYWdnYWJsZUVsZW1lbnQ6IEVsZW1lbnQsXG4gIGRyb3BFbGVtZW50OiBFbGVtZW50LFxuICByZWN0OiBhbnlcbikge1xuICBsZXQgZHJvcHBlZCA9IGZhbHNlXG5cbiAgLy8gaWYgdGhlIGRyb3B6b25lIGhhcyBubyByZWN0IChlZy4gZGlzcGxheTogbm9uZSlcbiAgLy8gY2FsbCB0aGUgY3VzdG9tIGRyb3BDaGVja2VyIG9yIGp1c3QgcmV0dXJuIGZhbHNlXG4gIGlmICghKHJlY3QgPSByZWN0IHx8IGludGVyYWN0YWJsZS5nZXRSZWN0KGRyb3BFbGVtZW50KSkpIHtcbiAgICByZXR1cm4gKGludGVyYWN0YWJsZS5vcHRpb25zLmRyb3AuY2hlY2tlclxuICAgICAgPyBpbnRlcmFjdGFibGUub3B0aW9ucy5kcm9wLmNoZWNrZXIoZHJhZ0V2ZW50LCBldmVudCwgZHJvcHBlZCwgaW50ZXJhY3RhYmxlLCBkcm9wRWxlbWVudCwgZHJhZ2dhYmxlLCBkcmFnZ2FibGVFbGVtZW50KVxuICAgICAgOiBmYWxzZSlcbiAgfVxuXG4gIGNvbnN0IGRyb3BPdmVybGFwID0gaW50ZXJhY3RhYmxlLm9wdGlvbnMuZHJvcC5vdmVybGFwXG5cbiAgaWYgKGRyb3BPdmVybGFwID09PSAncG9pbnRlcicpIHtcbiAgICBjb25zdCBvcmlnaW4gPSB1dGlscy5nZXRPcmlnaW5YWShkcmFnZ2FibGUsIGRyYWdnYWJsZUVsZW1lbnQsICdkcmFnJylcbiAgICBjb25zdCBwYWdlID0gdXRpbHMucG9pbnRlci5nZXRQYWdlWFkoZHJhZ0V2ZW50KVxuXG4gICAgcGFnZS54ICs9IG9yaWdpbi54XG4gICAgcGFnZS55ICs9IG9yaWdpbi55XG5cbiAgICBjb25zdCBob3Jpem9udGFsID0gKHBhZ2UueCA+IHJlY3QubGVmdCkgJiYgKHBhZ2UueCA8IHJlY3QucmlnaHQpXG4gICAgY29uc3QgdmVydGljYWwgICA9IChwYWdlLnkgPiByZWN0LnRvcCkgJiYgKHBhZ2UueSA8IHJlY3QuYm90dG9tKVxuXG4gICAgZHJvcHBlZCA9IGhvcml6b250YWwgJiYgdmVydGljYWxcbiAgfVxuXG4gIGNvbnN0IGRyYWdSZWN0ID0gZHJhZ2dhYmxlLmdldFJlY3QoZHJhZ2dhYmxlRWxlbWVudClcblxuICBpZiAoZHJhZ1JlY3QgJiYgZHJvcE92ZXJsYXAgPT09ICdjZW50ZXInKSB7XG4gICAgY29uc3QgY3ggPSBkcmFnUmVjdC5sZWZ0ICsgZHJhZ1JlY3Qud2lkdGggIC8gMlxuICAgIGNvbnN0IGN5ID0gZHJhZ1JlY3QudG9wICArIGRyYWdSZWN0LmhlaWdodCAvIDJcblxuICAgIGRyb3BwZWQgPSBjeCA+PSByZWN0LmxlZnQgJiYgY3ggPD0gcmVjdC5yaWdodCAmJiBjeSA+PSByZWN0LnRvcCAmJiBjeSA8PSByZWN0LmJvdHRvbVxuICB9XG5cbiAgaWYgKGRyYWdSZWN0ICYmIHV0aWxzLmlzLm51bWJlcihkcm9wT3ZlcmxhcCkpIHtcbiAgICBjb25zdCBvdmVybGFwQXJlYSAgPSAoTWF0aC5tYXgoMCwgTWF0aC5taW4ocmVjdC5yaWdodCwgZHJhZ1JlY3QucmlnaHQpIC0gTWF0aC5tYXgocmVjdC5sZWZ0LCBkcmFnUmVjdC5sZWZ0KSkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCgwLCBNYXRoLm1pbihyZWN0LmJvdHRvbSwgZHJhZ1JlY3QuYm90dG9tKSAtIE1hdGgubWF4KHJlY3QudG9wLCBkcmFnUmVjdC50b3ApKSlcblxuICAgIGNvbnN0IG92ZXJsYXBSYXRpbyA9IG92ZXJsYXBBcmVhIC8gKGRyYWdSZWN0LndpZHRoICogZHJhZ1JlY3QuaGVpZ2h0KVxuXG4gICAgZHJvcHBlZCA9IG92ZXJsYXBSYXRpbyA+PSBkcm9wT3ZlcmxhcFxuICB9XG5cbiAgaWYgKGludGVyYWN0YWJsZS5vcHRpb25zLmRyb3AuY2hlY2tlcikge1xuICAgIGRyb3BwZWQgPSBpbnRlcmFjdGFibGUub3B0aW9ucy5kcm9wLmNoZWNrZXIoZHJhZ0V2ZW50LCBldmVudCwgZHJvcHBlZCwgaW50ZXJhY3RhYmxlLCBkcm9wRWxlbWVudCwgZHJhZ2dhYmxlLCBkcmFnZ2FibGVFbGVtZW50KVxuICB9XG5cbiAgcmV0dXJuIGRyb3BwZWRcbn1cblxuY29uc3QgZHJvcCA9IHtcbiAgaW5zdGFsbCxcbiAgZ2V0QWN0aXZlRHJvcHMsXG4gIGdldERyb3AsXG4gIGdldERyb3BFdmVudHMsXG4gIGZpcmVEcm9wRXZlbnRzLFxuICBkZWZhdWx0czoge1xuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGFjY2VwdCA6IG51bGwsXG4gICAgb3ZlcmxhcDogJ3BvaW50ZXInLFxuICB9IGFzIEludGVyYWN0LkRyb3B6b25lT3B0aW9ucyxcbn1cblxuZXhwb3J0IGRlZmF1bHQgZHJvcFxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFBO0FBQzFDLE9BQU8sU0FBUyxNQUFNLGFBQWEsQ0FBQTtBQTBEbkMsU0FBUyxPQUFPLENBQUUsS0FBWTtJQUM1QixNQUFNLEVBQ0osT0FBTztJQUNQLDZCQUE2QjtJQUM3QixRQUFRO0lBQ1IsMEJBQTBCO0lBQzFCLFlBQVksRUFBRSxnQ0FBZ0M7SUFDOUMsWUFBWSxFQUNaLFFBQVEsR0FDVCxHQUFHLEtBQUssQ0FBQTtJQUVULFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO1FBQzFGLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQUUsT0FBTTtTQUFFO1FBRXBELE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLFVBQVUsSUFBSTtZQUNwRSxHQUFHLEVBQUU7Z0JBQ0gsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsT0FBTyxFQUFFLElBQUk7YUFDZDtZQUNELElBQUksRUFBRTtnQkFDSixRQUFRLEVBQUUsSUFBSTtnQkFDZCxPQUFPLEVBQUUsSUFBSTthQUNkO1lBQ0QsUUFBUSxFQUFFLElBQUk7WUFDZCxNQUFNLEVBQUUsSUFBSTtZQUNaLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQUE7UUFFRCx5QkFBeUI7UUFDekIsVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUE7UUFDN0IsVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUE7UUFFeEIseUVBQXlFO1FBQ3pFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFO1lBQ3RCLFVBQVUsQ0FBQyxXQUFXLEdBQUcsY0FB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QUcsUUFBUSxDQUFDLEdBQUcsR0FBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtRQUU5QyxPQUFPLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUE7S0FDckY7SUFFRCxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUM1QyxNQUFNLFdBQVcsR0FBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRTdHLE1BQU0sWUFBWSxHQUFHLFdBQVcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRXJFLE9BQU8sR0FBRyxZQUFZLElBQUksV0FBVyxDQUFBO0tBQ3RDO0lBRUQsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDckMsT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO0tBQy9IO0lBRUQsT0FBTyxPQUFPLENBQUE7QUFDaEIsQ0FBQztBQUVELE1BQU0sSUFBSSxHQUFHO0lBQ1gsT0FBTztJQUNQLGNBQWM7SUFDZCxPQUFPO0lBQ1AsYUFBYTtJQUNiLGNBQWM7SUFDZCxRQUFRLEVBQUU7UUFDUixPQUFPLEVBQUUsS0FBSztRQUNkLE1BQU0sRUFBRyxJQUFJO1FBQ2IsT0FBTyxFQUFFLFNBQVM7S0FDUztDQUM5QixDQUFBO0FBRUQsZUFBZSxJQUFJLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSW50ZXJhY3RhYmxlIGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3RhYmxlJ1xuaW1wb3J0IEludGVyYWN0RXZlbnQgZnJvbSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdEV2ZW50J1xuaW1wb3J0IHsgU2NvcGUgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJ1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMnXG5pbXBvcnQgRHJvcEV2ZW50IGZyb20gJy4vRHJvcEV2ZW50J1xuXG5leHBvcnQgdHlwZSBEcm9wem9uZU1ldGhvZCA9IChvcHRpb25zPzogSW50ZXJhY3QuRHJvcHpvbmVPcHRpb25zIHwgYm9vbGVhbikgPT4gSW50ZXJhY3QuSW50ZXJhY3RhYmxlIHwgSW50ZXJhY3QuRHJvcHpvbmVPcHRpb25zXG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0YWJsZScge1xuICBpbnRlcmZhY2UgSW50ZXJhY3RhYmxlIHtcbiAgICBkcm9wem9uZTogRHJvcHpvbmVNZXRob2RcbiAgICBkcm9wQ2hlY2s6IChcbiAgICAgIGRyYWdFdmVudDogSW50ZXJhY3RFdmVudCxcbiAgICAgIGV2ZW50OiBJbnRlcmFjdC5Qb2ludGVyRXZlbnRUeXBlLFxuICAgICAgZHJhZ2dhYmxlOiBJbnRlcmFjdGFibGUsXG4gICAgICBkcmFnZ2FibGVFbGVtZW50OiBFbGVtZW50LFxuICAgICAgZHJvcEVsZW1lbjogRWxlbWVudCxcbiAgICAgIHJlY3Q6IGFueVxuICAgICkgPT4gYm9vbGVhblxuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0aW9uJyB7XG4gIGludGVyZmFjZSBJbnRlcmFjdGlvbiB7XG4gICAgZHJvcFN0YXR1cz86IHtcbiAgICAgIGN1cjoge1xuICAgICAgICBkcm9wem9uZTogSW50ZXJhY3RhYmxlLCAgIC8vIHRoZSBkcm9wem9uZSBhIGRyYWcgdGFyZ2V0IG1pZ2h0IGJlIGRyb3BwZWQgaW50b1xuICAgICAgICBlbGVtZW50OiBFbGVtZW50LCAgICAgICAgIC8vIHRoZSBlbGVtZW50IGF0IHRoZSB0aW1lIG9mIGNoZWNraW5nXG4gICAgICB9LFxuICAgICAgcHJldjoge1xuICAgICAgICBkcm9wem9uZTogSW50ZXJhY3RhYmxlLCAgIC8vIHRoZSBkcm9wem9uZSB0aGF0IHdhcyByZWNlbnRseSBkcmFnZ2VkIGF3YXkgZnJvbVxuICAgICAgICBlbGVtZW50OiBFbGVtZW50LCAgICAgICAgIC8vIHRoZSBlbGVtZW50IGF0IHRoZSB0aW1lIG9mIGNoZWNraW5nXG4gICAgICB9LFxuICAgICAgcmVqZWN0ZWQ6IGJvb2xlYW4sICAgICAgICAgIC8vIHdoZWF0aGVyIHRoZSBwb3RlbnRpYWwgZHJvcCB3YXMgcmVqZWN0ZWQgZnJvbSBhIGxpc3RlbmVyXG4gICAgICBldmVudHM6IGFueSwgICAgICAgICAgICAgICAgLy8gdGhlIGRyb3AgZXZlbnRzIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgZHJhZyBldmVudFxuICAgICAgYWN0aXZlRHJvcHM6IEFycmF5PHtcbiAgICAgICAgZHJvcHpvbmU6IEludGVyYWN0YWJsZVxuICAgICAgICBFbGVtZW50OiBFbGVtZW50XG4gICAgICAgIHJlY3Q6IEludGVyYWN0LlJlY3RcbiAgICAgIH0+LFxuICAgIH1cbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9kZWZhdWx0T3B0aW9ucycge1xuICBpbnRlcmZhY2UgQWN0aW9uRGVmYXVsdHMge1xuICAgIGRyb3A6IEludGVyYWN0LkRyb3B6b25lT3B0aW9uc1xuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJyB7XG4gIGludGVyZmFjZSBTY29wZSB7XG4gICAgZHluYW1pY0Ryb3A/OiBib29sZWFuXG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2ludGVyYWN0L2ludGVyYWN0JyB7XG4gIGludGVyZmFjZSBJbnRlcmFjdFN0YXRpYyB7XG4gICAgZHluYW1pY0Ryb3A6IChuZXdWYWx1ZT86IGJvb2xlYW4pID0+IGJvb2xlYW4gfCBJbnRlcmFjdC5pbnRlcmFjdFxuICB9XG59XG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlOiBTY29wZSkge1xuICBjb25zdCB7XG4gICAgYWN0aW9ucyxcbiAgICAvKiogQGxlbmRzIG1vZHVsZTppbnRlcmFjdCAqL1xuICAgIGludGVyYWN0LFxuICAgIC8qKiBAbGVuZHMgSW50ZXJhY3RhYmxlICovXG4gICAgSW50ZXJhY3RhYmxlLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNoYWRvd1xuICAgIGludGVyYWN0aW9ucyxcbiAgICBkZWZhdWx0cyxcbiAgfSA9IHNjb3BlXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2FmdGVyLWFjdGlvbi1zdGFydCcsICh7IGludGVyYWN0aW9uLCBldmVudCwgaUV2ZW50OiBkcmFnRXZlbnQgfSkgPT4ge1xuICAgIGlmIChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lICE9PSAnZHJhZycpIHsgcmV0dXJuIH1cblxuICAgIGNvbnN0IGRyb3BTdGF0dXMgPSBpbnRlcmFjdGlvbi5kcm9wU3RhdHVzID0gaW50ZXJhY3Rpb24uZHJvcFN0YXR1cyB8fCB7XG4gICAgICBjdXI6IHtcbiAgICAgICAgZHJvcHpvbmU6IG51bGwsXG4gICAgICAgIGVsZW1lbnQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgcHJldjoge1xuICAgICAgICBkcm9wem9uZTogbnVsbCxcbiAgICAgICAgZWxlbWVudDogbnVsbCxcbiAgICAgIH0sXG4gICAgICByZWplY3RlZDogbnVsbCxcbiAgICAgIGV2ZW50czogbnVsbCxcbiAgICAgIGFjdGl2ZURyb3BzOiBudWxsLFxuICAgIH1cblxuICAgIC8vIHJlc2V0IGFjdGl2ZSBkcm9wem9uZXNcbiAgICBkcm9wU3RhdHVzLmFjdGl2ZURyb3BzID0gbnVsbFxuICAgIGRyb3BTdGF0dXMuZXZlbnRzID0gbnVsbFxuXG4gICAgLy8gVE9ETzogbWF5YmUgSW50ZXJhY3Rpb248VDogV2luZG93IHwgRG9jdW1lbnQgfCBFbGVtZW50PiB7IGVsZW1lbnQ6IFQgfVxuICAgIGlmICghc2NvcGUuZHluYW1pY0Ryb3ApIHtcbiAgICAgIGRyb3BTdGF0dXMuYWN0aXZlRHJvcHMgPSBnZXRBY3RpdmVEcm9wcyhzY29wZSwgaW50ZXJhY3Rpb24uZWxlbWVudClcbiAgICB9XG5cbiAgICBkcm9wU3RhdHVzLmV2ZW50cyA9IGdldERyb3BFdmVudHMoaW50ZXJhY3Rpb24sIGV2ZW50LCBkcmFnRXZlbnQpXG5cbiAgICBpZiAoZHJvcFN0YXR1cy5ldmVudHMuYWN0aXZhdGUpIHtcbiAgICAgIGZpcmVBY3RpdmF0aW9uRXZlbnRzKGRyb3BTdGF0dXMuYWN0aXZlRHJvcHMsIGRyb3BTdGF0dXMuZXZlbnRzLmFjdGl2YXRlKVxuICAgIH1cbiAgfSlcblxuICAvLyBGSVhNRSBwcm9wZXIgc2lnbmFsIHR5cGVzXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tbW92ZScsIChhcmcpID0+IG9uRXZlbnRDcmVhdGVkKGFyZyBhcyBhbnksIHNjb3BlKSlcbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2FjdGlvbi1lbmQnLCAoYXJnKSA9PiBvbkV2ZW50Q3JlYXRlZChhcmcgYXMgYW55LCBzY29wZSkpXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2FmdGVyLWFjdGlvbi1tb3ZlJywgKHsgaW50ZXJhY3Rpb24gfSkgPT4ge1xuICAgIGlmIChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lICE9PSAnZHJhZycpIHsgcmV0dXJuIH1cblxuICAgIGZpcmVEcm9wRXZlbnRzKGludGVyYWN0aW9uLCBpbnRlcmFjdGlvbi5kcm9wU3RhdHVzLmV2ZW50cylcbiAgICBpbnRlcmFjdGlvbi5kcm9wU3RhdHVzLmV2ZW50cyA9IHt9XG4gIH0pXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2FmdGVyLWFjdGlvbi1lbmQnLCAoeyBpbnRlcmFjdGlvbiB9KSA9PiB7XG4gICAgaWYgKGludGVyYWN0aW9uLnByZXBhcmVkLm5hbWUgPT09ICdkcmFnJykge1xuICAgICAgZmlyZURyb3BFdmVudHMoaW50ZXJhY3Rpb24sIGludGVyYWN0aW9uLmRyb3BTdGF0dXMuZXZlbnRzKVxuICAgIH1cbiAgfSlcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignc3RvcCcsICh7IGludGVyYWN0aW9uIH0pID0+IHtcbiAgICBpbnRlcmFjdGlvbi5kcm9wU3RhdHVzLmFjdGl2ZURyb3BzID0gbnVsbFxuICAgIGludGVyYWN0aW9uLmRyb3BTdGF0dXMuZXZlbnRzID0gbnVsbFxuICB9KVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdzdG9wJywgKHsgaW50ZXJhY3Rpb246IHsgZHJvcFN0YXR1cyB9IH0pID0+IHtcbiAgICBkcm9wU3RhdHVzLmN1ci5kcm9wem9uZSA9IGRyb3BTdGF0dXMuY3VyLmVsZW1lbnQgPVxuICAgICAgZHJvcFN0YXR1cy5wcmV2LmRyb3B6b25lID0gZHJvcFN0YXR1cy5wcmV2LmVsZW1lbnQgPSBudWxsXG4gICAgZHJvcFN0YXR1cy5yZWplY3RlZCA9IGZhbHNlXG4gIH0pXG5cbiAgLyoqXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGludGVyYWN0KCcuZHJvcCcpLmRyb3B6b25lKHtcbiAgICogICBhY2NlcHQ6ICcuY2FuLWRyb3AnIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaW5nbGUtZHJvcCcpLFxuICAgKiAgIG92ZXJsYXA6ICdwb2ludGVyJyB8fCAnY2VudGVyJyB8fCB6ZXJvVG9PbmVcbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogUmV0dXJucyBvciBzZXRzIHdoZXRoZXIgZHJhZ2dhYmxlcyBjYW4gYmUgZHJvcHBlZCBvbnRvIHRoaXMgdGFyZ2V0IHRvXG4gICAqIHRyaWdnZXIgZHJvcCBldmVudHNcbiAgICpcbiAgICogRHJvcHpvbmVzIGNhbiByZWNlaXZlIHRoZSBmb2xsb3dpbmcgZXZlbnRzOlxuICAgKiAgLSBgZHJvcGFjdGl2YXRlYCBhbmQgYGRyb3BkZWFjdGl2YXRlYCB3aGVuIGFuIGFjY2VwdGFibGUgZHJhZyBzdGFydHMgYW5kIGVuZHNcbiAgICogIC0gYGRyYWdlbnRlcmAgYW5kIGBkcmFnbGVhdmVgIHdoZW4gYSBkcmFnZ2FibGUgZW50ZXJzIGFuZCBsZWF2ZXMgdGhlIGRyb3B6b25lXG4gICAqICAtIGBkcmFnbW92ZWAgd2hlbiBhIGRyYWdnYWJsZSB0aGF0IGhhcyBlbnRlcmVkIHRoZSBkcm9wem9uZSBpcyBtb3ZlZFxuICAgKiAgLSBgZHJvcGAgd2hlbiBhIGRyYWdnYWJsZSBpcyBkcm9wcGVkIGludG8gdGhpcyBkcm9wem9uZVxuICAgKlxuICAgKiBVc2UgdGhlIGBhY2NlcHRgIG9wdGlvbiB0byBhbGxvdyBvbmx5IGVsZW1lbnRzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIENTU1xuICAgKiBzZWxlY3RvciBvciBlbGVtZW50LiBUaGUgdmFsdWUgY2FuIGJlOlxuICAgKlxuICAgKiAgLSAqKmFuIEVsZW1lbnQqKiAtIG9ubHkgdGhhdCBlbGVtZW50IGNhbiBiZSBkcm9wcGVkIGludG8gdGhpcyBkcm9wem9uZS5cbiAgICogIC0gKiphIHN0cmluZyoqLCAtIHRoZSBlbGVtZW50IGJlaW5nIGRyYWdnZWQgbXVzdCBtYXRjaCBpdCBhcyBhIENTUyBzZWxlY3Rvci5cbiAgICogIC0gKipgbnVsbGAqKiAtIGFjY2VwdCBvcHRpb25zIGlzIGNsZWFyZWQgLSBpdCBhY2NlcHRzIGFueSBlbGVtZW50LlxuICAgKlxuICAgKiBVc2UgdGhlIGBvdmVybGFwYCBvcHRpb24gdG8gc2V0IGhvdyBkcm9wcyBhcmUgY2hlY2tlZCBmb3IuIFRoZSBhbGxvd2VkXG4gICAqIHZhbHVlcyBhcmU6XG4gICAqXG4gICAqICAgLSBgJ3BvaW50ZXInYCwgdGhlIHBvaW50ZXIgbXVzdCBiZSBvdmVyIHRoZSBkcm9wem9uZSAoZGVmYXVsdClcbiAgICogICAtIGAnY2VudGVyJ2AsIHRoZSBkcmFnZ2FibGUgZWxlbWVudCdzIGNlbnRlciBtdXN0IGJlIG92ZXIgdGhlIGRyb3B6b25lXG4gICAqICAgLSBhIG51bWJlciBmcm9tIDAtMSB3aGljaCBpcyB0aGUgYChpbnRlcnNlY3Rpb24gYXJlYSkgLyAoZHJhZ2dhYmxlIGFyZWEpYC5cbiAgICogICBlLmcuIGAwLjVgIGZvciBkcm9wIHRvIGhhcHBlbiB3aGVuIGhhbGYgb2YgdGhlIGFyZWEgb2YgdGhlIGRyYWdnYWJsZSBpc1xuICAgKiAgIG92ZXIgdGhlIGRyb3B6b25lXG4gICAqXG4gICAqIFVzZSB0aGUgYGNoZWNrZXJgIG9wdGlvbiB0byBzcGVjaWZ5IGEgZnVuY3Rpb24gdG8gY2hlY2sgaWYgYSBkcmFnZ2VkIGVsZW1lbnRcbiAgICogaXMgb3ZlciB0aGlzIEludGVyYWN0YWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFuIHwgb2JqZWN0IHwgbnVsbH0gW29wdGlvbnNdIFRoZSBuZXcgb3B0aW9ucyB0byBiZSBzZXQuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBJbnRlcmFjdGFibGV9IFRoZSBjdXJyZW50IHNldHRpbmcgb3IgdGhpcyBJbnRlcmFjdGFibGVcbiAgICovXG4gIEludGVyYWN0YWJsZS5wcm90b3R5cGUuZHJvcHpvbmUgPSBmdW5jdGlvbiAodGhpczogSW50ZXJhY3QuSW50ZXJhY3RhYmxlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGRyb3B6b25lTWV0aG9kKHRoaXMsIG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogYGBganNcbiAgICogaW50ZXJhY3QodGFyZ2V0KVxuICAgKiAuZHJvcENoZWNrZXIoZnVuY3Rpb24oZHJhZ0V2ZW50LCAgICAgICAgIC8vIHJlbGF0ZWQgZHJhZ21vdmUgb3IgZHJhZ2VuZCBldmVudFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQsICAgICAgICAgICAgIC8vIFRvdWNoRXZlbnQvUG9pbnRlckV2ZW50L01vdXNlRXZlbnRcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGRyb3BwZWQsICAgICAgICAgICAvLyBib29sIHJlc3VsdCBvZiB0aGUgZGVmYXVsdCBjaGVja2VyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBkcm9wem9uZSwgICAgICAgICAgLy8gZHJvcHpvbmUgSW50ZXJhY3RhYmxlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBkcm9wRWxlbWVudCwgICAgICAgLy8gZHJvcHpvbmUgZWxlbW50XG4gICAqICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGUsICAgICAgICAgLy8gZHJhZ2dhYmxlIEludGVyYWN0YWJsZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgZHJhZ2dhYmxlRWxlbWVudCkgey8vIGRyYWdnYWJsZSBlbGVtZW50XG4gICAqXG4gICAqICAgcmV0dXJuIGRyb3BwZWQgJiYgZXZlbnQudGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnYWxsb3ctZHJvcCcpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgSW50ZXJhY3RhYmxlLnByb3RvdHlwZS5kcm9wQ2hlY2sgPSBmdW5jdGlvbiAodGhpczogSW50ZXJhY3QuSW50ZXJhY3RhYmxlLCBkcmFnRXZlbnQsIGV2ZW50LCBkcmFnZ2FibGUsIGRyYWdnYWJsZUVsZW1lbnQsIGRyb3BFbGVtZW50LCByZWN0KSB7XG4gICAgcmV0dXJuIGRyb3BDaGVja01ldGhvZCh0aGlzLCBkcmFnRXZlbnQsIGV2ZW50LCBkcmFnZ2FibGUsIGRyYWdnYWJsZUVsZW1lbnQsIGRyb3BFbGVtZW50LCByZWN0KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgb3Igc2V0cyB3aGV0aGVyIHRoZSBkaW1lbnNpb25zIG9mIGRyb3B6b25lIGVsZW1lbnRzIGFyZSBjYWxjdWxhdGVkXG4gICAqIG9uIGV2ZXJ5IGRyYWdtb3ZlIG9yIG9ubHkgb24gZHJhZ3N0YXJ0IGZvciB0aGUgZGVmYXVsdCBkcm9wQ2hlY2tlclxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtuZXdWYWx1ZV0gVHJ1ZSB0byBjaGVjayBvbiBlYWNoIG1vdmUuIEZhbHNlIHRvIGNoZWNrIG9ubHlcbiAgICogYmVmb3JlIHN0YXJ0XG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBpbnRlcmFjdH0gVGhlIGN1cnJlbnQgc2V0dGluZyBvciBpbnRlcmFjdFxuICAgKi9cbiAgaW50ZXJhY3QuZHluYW1pY0Ryb3AgPSBmdW5jdGlvbiAobmV3VmFsdWU/OiBib29sZWFuKSB7XG4gICAgaWYgKHV0aWxzLmlzLmJvb2wobmV3VmFsdWUpKSB7XG4gICAgICAvLyBpZiAoZHJhZ2dpbmcgJiYgc2NvcGUuZHluYW1pY0Ryb3AgIT09IG5ld1ZhbHVlICYmICFuZXdWYWx1ZSkge1xuICAgICAgLy8gIGNhbGNSZWN0cyhkcm9wem9uZXMpO1xuICAgICAgLy8gfVxuXG4gICAgICBzY29wZS5keW5hbWljRHJvcCA9IG5ld1ZhbHVlXG5cbiAgICAgIHJldHVybiBpbnRlcmFjdFxuICAgIH1cbiAgICByZXR1cm4gc2NvcGUuZHluYW1pY0Ryb3BcbiAgfVxuXG4gIHV0aWxzLmFyci5tZXJnZShhY3Rpb25zLmV2ZW50VHlwZXMsIFtcbiAgICAnZHJhZ2VudGVyJyxcbiAgICAnZHJhZ2xlYXZlJyxcbiAgICAnZHJvcGFjdGl2YXRlJyxcbiAgICAnZHJvcGRlYWN0aXZhdGUnLFxuICAgICdkcm9wbW92ZScsXG4gICAgJ2Ryb3AnLFxuICBdKVxuICBhY3Rpb25zLm1ldGhvZERpY3QuZHJvcCA9ICdkcm9wem9uZSdcblxuICBzY29wZS5keW5hbWljRHJvcCA9IGZhbHNlXG5cbiAgZGVmYXVsdHMuYWN0aW9ucy5kcm9wID0gZHJvcC5kZWZhdWx0c1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0RHJvcHMgKHsgaW50ZXJhY3RhYmxlcyB9LCBkcmFnZ2FibGVFbGVtZW50KSB7XG4gIGNvbnN0IGRyb3BzID0gW11cblxuICAvLyBjb2xsZWN0IGFsbCBkcm9wem9uZXMgYW5kIHRoZWlyIGVsZW1lbnRzIHdoaWNoIHF1YWxpZnkgZm9yIGEgZHJvcFxuICBmb3IgKGNvbnN0IGRyb3B6b25lIG9mIGludGVyYWN0YWJsZXMubGlzdCkge1xuICAgIGlmICghZHJvcHpvbmUub3B0aW9ucy5kcm9wLmVuYWJsZWQpIHsgY29udGludWUgfVxuXG4gICAgY29uc3QgYWNjZXB0ID0gZHJvcHpvbmUub3B0aW9ucy5kcm9wLmFjY2VwdFxuXG4gICAgLy8gdGVzdCB0aGUgZHJhZ2dhYmxlIGRyYWdnYWJsZUVsZW1lbnQgYWdhaW5zdCB0aGUgZHJvcHpvbmUncyBhY2NlcHQgc2V0dGluZ1xuICAgIGlmICgodXRpbHMuaXMuZWxlbWVudChhY2NlcHQpICYmIGFjY2VwdCAhPT0gZHJhZ2dhYmxlRWxlbWVudCkgfHxcbiAgICAgICAgKHV0aWxzLmlzLnN0cmluZyhhY2NlcHQpICYmXG4gICAgICAgICF1dGlscy5kb20ubWF0Y2hlc1NlbGVjdG9yKGRyYWdnYWJsZUVsZW1lbnQsIGFjY2VwdCkpIHx8XG4gICAgICAgICh1dGlscy5pcy5mdW5jKGFjY2VwdCkgJiYgIWFjY2VwdCh7IGRyb3B6b25lLCBkcmFnZ2FibGVFbGVtZW50IH0pKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICAvLyBxdWVyeSBmb3IgbmV3IGVsZW1lbnRzIGlmIG5lY2Vzc2FyeVxuICAgIGNvbnN0IGRyb3BFbGVtZW50cyA9IHV0aWxzLmlzLnN0cmluZyhkcm9wem9uZS50YXJnZXQpXG4gICAgICA/IGRyb3B6b25lLl9jb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoZHJvcHpvbmUudGFyZ2V0KVxuICAgICAgOiB1dGlscy5pcy5hcnJheShkcm9wem9uZS50YXJnZXQpID8gZHJvcHpvbmUudGFyZ2V0IDogW2Ryb3B6b25lLnRhcmdldF1cblxuICAgIGZvciAoY29uc3QgZHJvcHpvbmVFbGVtZW50IG9mIGRyb3BFbGVtZW50cykge1xuICAgICAgaWYgKGRyb3B6b25lRWxlbWVudCAhPT0gZHJhZ2dhYmxlRWxlbWVudCkge1xuICAgICAgICBkcm9wcy5wdXNoKHtcbiAgICAgICAgICBkcm9wem9uZSxcbiAgICAgICAgICBlbGVtZW50OiBkcm9wem9uZUVsZW1lbnQsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRyb3BzXG59XG5cbmZ1bmN0aW9uIGZpcmVBY3RpdmF0aW9uRXZlbnRzIChhY3RpdmVEcm9wcywgZXZlbnQpIHtcbiAgLy8gbG9vcCB0aHJvdWdoIGFsbCBhY3RpdmUgZHJvcHpvbmVzIGFuZCB0cmlnZ2VyIGV2ZW50XG4gIGZvciAoY29uc3QgeyBkcm9wem9uZSwgZWxlbWVudCB9IG9mIGFjdGl2ZURyb3BzKSB7XG4gICAgZXZlbnQuZHJvcHpvbmUgPSBkcm9wem9uZVxuXG4gICAgLy8gc2V0IGN1cnJlbnQgZWxlbWVudCBhcyBldmVudCB0YXJnZXRcbiAgICBldmVudC50YXJnZXQgPSBlbGVtZW50XG4gICAgZHJvcHpvbmUuZmlyZShldmVudClcbiAgICBldmVudC5wcm9wYWdhdGlvblN0b3BwZWQgPSBldmVudC5pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSBmYWxzZVxuICB9XG59XG5cbi8vIHJldHVybiBhIG5ldyBhcnJheSBvZiBwb3NzaWJsZSBkcm9wcy4gZ2V0QWN0aXZlRHJvcHMgc2hvdWxkIGFsd2F5cyBiZVxuLy8gY2FsbGVkIHdoZW4gYSBkcmFnIGhhcyBqdXN0IHN0YXJ0ZWQgb3IgYSBkcmFnIGV2ZW50IGhhcHBlbnMgd2hpbGVcbi8vIGR5bmFtaWNEcm9wIGlzIHRydWVcbmZ1bmN0aW9uIGdldEFjdGl2ZURyb3BzIChzY29wZTogU2NvcGUsIGRyYWdFbGVtZW50OiBFbGVtZW50KSB7XG4gIC8vIGdldCBkcm9wem9uZXMgYW5kIHRoZWlyIGVsZW1lbnRzIHRoYXQgY291bGQgcmVjZWl2ZSB0aGUgZHJhZ2dhYmxlXG4gIGNvbnN0IGFjdGl2ZURyb3BzID0gY29sbGVjdERyb3BzKHNjb3BlLCBkcmFnRWxlbWVudClcblxuICBmb3IgKGNvbnN0IGFjdGl2ZURyb3Agb2YgYWN0aXZlRHJvcHMpIHtcbiAgICBhY3RpdmVEcm9wLnJlY3QgPSBhY3RpdmVEcm9wLmRyb3B6b25lLmdldFJlY3QoYWN0aXZlRHJvcC5lbGVtZW50KVxuICB9XG5cbiAgcmV0dXJuIGFjdGl2ZURyb3BzXG59XG5cbmZ1bmN0aW9uIGdldERyb3AgKHsgZHJvcFN0YXR1cywgdGFyZ2V0OiBkcmFnZ2FibGUsIGVsZW1lbnQ6IGRyYWdFbGVtZW50IH0sIGRyYWdFdmVudCwgcG9pbnRlckV2ZW50KSB7XG4gIGNvbnN0IHZhbGlkRHJvcHMgPSBbXVxuXG4gIC8vIGNvbGxlY3QgYWxsIGRyb3B6b25lcyBhbmQgdGhlaXIgZWxlbWVudHMgd2hpY2ggcXVhbGlmeSBmb3IgYSBkcm9wXG4gIGZvciAoY29uc3QgeyBkcm9wem9uZSwgZWxlbWVudDogZHJvcHpvbmVFbGVtZW50LCByZWN0IH0gb2YgZHJvcFN0YXR1cy5hY3RpdmVEcm9wcykge1xuICAgIHZhbGlkRHJvcHMucHVzaChkcm9wem9uZS5kcm9wQ2hlY2soZHJhZ0V2ZW50LCBwb2ludGVyRXZlbnQsIGRyYWdnYWJsZSwgZHJhZ0VsZW1lbnQsIGRyb3B6b25lRWxlbWVudCwgcmVjdClcbiAgICAgID8gZHJvcHpvbmVFbGVtZW50XG4gICAgICA6IG51bGwpXG4gIH1cblxuICAvLyBnZXQgdGhlIG1vc3QgYXBwcm9wcmlhdGUgZHJvcHpvbmUgYmFzZWQgb24gRE9NIGRlcHRoIGFuZCBvcmRlclxuICBjb25zdCBkcm9wSW5kZXggPSB1dGlscy5kb20uaW5kZXhPZkRlZXBlc3RFbGVtZW50KHZhbGlkRHJvcHMpXG5cbiAgcmV0dXJuIGRyb3BTdGF0dXMuYWN0aXZlRHJvcHNbZHJvcEluZGV4XSB8fCBudWxsXG59XG5cbmZ1bmN0aW9uIGdldERyb3BFdmVudHMgKGludGVyYWN0aW9uLCBfcG9pbnRlckV2ZW50LCBkcmFnRXZlbnQpIHtcbiAgY29uc3QgeyBkcm9wU3RhdHVzIH0gPSBpbnRlcmFjdGlvblxuICBjb25zdCBkcm9wRXZlbnRzID0ge1xuICAgIGVudGVyICAgICA6IG51bGwsXG4gICAgbGVhdmUgICAgIDogbnVsbCxcbiAgICBhY3RpdmF0ZSAgOiBudWxsLFxuICAgIGRlYWN0aXZhdGU6IG51bGwsXG4gICAgbW92ZSAgICAgIDogbnVsbCxcbiAgICBkcm9wICAgICAgOiBudWxsLFxuICB9XG5cbiAgaWYgKGRyYWdFdmVudC50eXBlID09PSAnZHJhZ3N0YXJ0Jykge1xuICAgIGRyb3BFdmVudHMuYWN0aXZhdGUgPSBuZXcgRHJvcEV2ZW50KGRyb3BTdGF0dXMsIGRyYWdFdmVudCwgJ2Ryb3BhY3RpdmF0ZScpXG5cbiAgICBkcm9wRXZlbnRzLmFjdGl2YXRlLnRhcmdldCAgID0gbnVsbFxuICAgIGRyb3BFdmVudHMuYWN0aXZhdGUuZHJvcHpvbmUgPSBudWxsXG4gIH1cbiAgaWYgKGRyYWdFdmVudC50eXBlID09PSAnZHJhZ2VuZCcpIHtcbiAgICBkcm9wRXZlbnRzLmRlYWN0aXZhdGUgPSBuZXcgRHJvcEV2ZW50KGRyb3BTdGF0dXMsIGRyYWdFdmVudCwgJ2Ryb3BkZWFjdGl2YXRlJylcblxuICAgIGRyb3BFdmVudHMuZGVhY3RpdmF0ZS50YXJnZXQgICA9IG51bGxcbiAgICBkcm9wRXZlbnRzLmRlYWN0aXZhdGUuZHJvcHpvbmUgPSBudWxsXG4gIH1cblxuICBpZiAoZHJvcFN0YXR1cy5yZWplY3RlZCkge1xuICAgIHJldHVybiBkcm9wRXZlbnRzXG4gIH1cblxuICBpZiAoZHJvcFN0YXR1cy5jdXIuZWxlbWVudCAhPT0gZHJvcFN0YXR1cy5wcmV2LmVsZW1lbnQpIHtcbiAgICAvLyBpZiB0aGVyZSB3YXMgYSBwcmV2aW91cyBkcm9wem9uZSwgY3JlYXRlIGEgZHJhZ2xlYXZlIGV2ZW50XG4gICAgaWYgKGRyb3BTdGF0dXMucHJldi5kcm9wem9uZSkge1xuICAgICAgZHJvcEV2ZW50cy5sZWF2ZSA9IG5ldyBEcm9wRXZlbnQoZHJvcFN0YXR1cywgZHJhZ0V2ZW50LCAnZHJhZ2xlYXZlJylcblxuICAgICAgZHJhZ0V2ZW50LmRyYWdMZWF2ZSAgICA9IGRyb3BFdmVudHMubGVhdmUudGFyZ2V0ICAgPSBkcm9wU3RhdHVzLnByZXYuZWxlbWVudFxuICAgICAgZHJhZ0V2ZW50LnByZXZEcm9wem9uZSA9IGRyb3BFdmVudHMubGVhdmUuZHJvcHpvbmUgPSBkcm9wU3RhdHVzLnByZXYuZHJvcHpvbmVcbiAgICB9XG4gICAgLy8gaWYgZHJvcHpvbmUgaXMgbm90IG51bGwsIGNyZWF0ZSBhIGRyYWdlbnRlciBldmVudFxuICAgIGlmIChkcm9wU3RhdHVzLmN1ci5kcm9wem9uZSkge1xuICAgICAgZHJvcEV2ZW50cy5lbnRlciA9IG5ldyBEcm9wRXZlbnQoZHJvcFN0YXR1cywgZHJhZ0V2ZW50LCAnZHJhZ2VudGVyJylcblxuICAgICAgZHJhZ0V2ZW50LmRyYWdFbnRlciA9IGRyb3BTdGF0dXMuY3VyLmVsZW1lbnRcbiAgICAgIGRyYWdFdmVudC5kcm9wem9uZSA9IGRyb3BTdGF0dXMuY3VyLmRyb3B6b25lXG4gICAgfVxuICB9XG5cbiAgaWYgKGRyYWdFdmVudC50eXBlID09PSAnZHJhZ2VuZCcgJiYgZHJvcFN0YXR1cy5jdXIuZHJvcHpvbmUpIHtcbiAgICBkcm9wRXZlbnRzLmRyb3AgPSBuZXcgRHJvcEV2ZW50KGRyb3BTdGF0dXMsIGRyYWdFdmVudCwgJ2Ryb3AnKVxuXG4gICAgZHJhZ0V2ZW50LmRyb3B6b25lID0gZHJvcFN0YXR1cy5jdXIuZHJvcHpvbmVcbiAgICBkcmFnRXZlbnQucmVsYXRlZFRhcmdldCA9IGRyb3BTdGF0dXMuY3VyLmVsZW1lbnRcbiAgfVxuICBpZiAoZHJhZ0V2ZW50LnR5cGUgPT09ICdkcmFnbW92ZScgJiYgZHJvcFN0YXR1cy5jdXIuZHJvcHpvbmUpIHtcbiAgICBkcm9wRXZlbnRzLm1vdmUgPSBuZXcgRHJvcEV2ZW50KGRyb3BTdGF0dXMsIGRyYWdFdmVudCwgJ2Ryb3Btb3ZlJylcblxuICAgIGRyb3BFdmVudHMubW92ZS5kcmFnbW92ZSA9IGRyYWdFdmVudFxuICAgIGRyYWdFdmVudC5kcm9wem9uZSA9IGRyb3BTdGF0dXMuY3VyLmRyb3B6b25lXG4gIH1cblxuICByZXR1cm4gZHJvcEV2ZW50c1xufVxuXG5mdW5jdGlvbiBmaXJlRHJvcEV2ZW50cyAoaW50ZXJhY3Rpb24sIGV2ZW50cykge1xuICBjb25zdCB7IGRyb3BTdGF0dXMgfSA9IGludGVyYWN0aW9uXG4gIGNvbnN0IHtcbiAgICBhY3RpdmVEcm9wcyxcbiAgICBjdXIsXG4gICAgcHJldixcbiAgfSA9IGRyb3BTdGF0dXNcblxuICBpZiAoZXZlbnRzLmxlYXZlKSB7IHByZXYuZHJvcHpvbmUuZmlyZShldmVudHMubGVhdmUpIH1cbiAgaWYgKGV2ZW50cy5tb3ZlKSB7IGN1ci5kcm9wem9uZS5maXJlKGV2ZW50cy5tb3ZlKSB9XG4gIGlmIChldmVudHMuZW50ZXIpIHsgY3VyLmRyb3B6b25lLmZpcmUoZXZlbnRzLmVudGVyKSB9XG4gIGlmIChldmVudHMuZHJvcCkgeyBjdXIuZHJvcHpvbmUuZmlyZShldmVudHMuZHJvcCkgfVxuXG4gIGlmIChldmVudHMuZGVhY3RpdmF0ZSkge1xuICAgIGZpcmVBY3RpdmF0aW9uRXZlbnRzKGFjdGl2ZURyb3BzLCBldmVudHMuZGVhY3RpdmF0ZSlcbiAgfVxuXG4gIGRyb3BTdGF0dXMucHJldi5kcm9wem9uZSAgPSBjdXIuZHJvcHpvbmVcbiAgZHJvcFN0YXR1cy5wcmV2LmVsZW1lbnQgPSBjdXIuZWxlbWVudFxufVxuXG5mdW5jdGlvbiBvbkV2ZW50Q3JlYXRlZCAoeyBpbnRlcmFjdGlvbiwgaUV2ZW50LCBldmVudCB9LCBzY29wZSkge1xuICBpZiAoaUV2ZW50LnR5cGUgIT09ICdkcmFnbW92ZScgJiYgaUV2ZW50LnR5cGUgIT09ICdkcmFnZW5kJykgeyByZXR1cm4gfVxuXG4gIGNvbnN0IHsgZHJvcFN0YXR1cyB9ID0gaW50ZXJhY3Rpb25cblxuICBpZiAoc2NvcGUuZHluYW1pY0Ryb3ApIHtcbiAgICBkcm9wU3RhdHVzLmFjdGl2ZURyb3BzID0gZ2V0QWN0aXZlRHJvcHMoc2NvcGUsIGludGVyYWN0aW9uLmVsZW1lbnQpXG4gIH1cblxuICBjb25zdCBkcmFnRXZlbnQgPSBpRXZlbnRcbiAgY29uc3QgZHJvcFJlc3VsdCA9IGdldERyb3AoaW50ZXJhY3Rpb24sIGRyYWdFdmVudCwgZXZlbnQpXG5cbiAgLy8gdXBkYXRlIHJlamVjdGVkIHN0YXR1c1xuICBkcm9wU3RhdHVzLnJlamVjdGVkID0gZHJvcFN0YXR1cy5yZWplY3RlZCAmJlxuICAgICEhZHJvcFJlc3VsdCAmJlxuICAgIGRyb3BSZXN1bHQuZHJvcHpvbmUgPT09IGRyb3BTdGF0dXMuY3VyLmRyb3B6b25lICYmXG4gICAgZHJvcFJlc3VsdC5lbGVtZW50ID09PSBkcm9wU3RhdHVzLmN1ci5lbGVtZW50XG5cbiAgZHJvcFN0YXR1cy5jdXIuZHJvcHpvbmUgID0gZHJvcFJlc3VsdCAmJiBkcm9wUmVzdWx0LmRyb3B6b25lXG4gIGRyb3BTdGF0dXMuY3VyLmVsZW1lbnQgPSBkcm9wUmVzdWx0ICYmIGRyb3BSZXN1bHQuZWxlbWVudFxuXG4gIGRyb3BTdGF0dXMuZXZlbnRzID0gZ2V0RHJvcEV2ZW50cyhpbnRlcmFjdGlvbiwgZXZlbnQsIGRyYWdFdmVudClcbn1cblxuZnVuY3Rpb24gZHJvcHpvbmVNZXRob2QgKGludGVyYWN0YWJsZTogSW50ZXJhY3QuSW50ZXJhY3RhYmxlLCBvcHRpb25zOiBJbnRlcmFjdC5Ecm9wem9uZU9wdGlvbnMgfCBib29sZWFuKSB7XG4gIGlmICh1dGlscy5pcy5vYmplY3Qob3B0aW9ucykpIHtcbiAgICBpbnRlcmFjdGFibGUub3B0aW9ucy5kcm9wLmVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlXG5cbiAgICBpZiAob3B0aW9ucy5saXN0ZW5lcnMpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB1dGlscy5ub3JtYWxpemVMaXN0ZW5lcnMob3B0aW9ucy5saXN0ZW5lcnMpXG4gICAgICAvLyByZW5hbWUgJ2Ryb3AnIHRvICcnIGFzIGl0IHdpbGwgYmUgcHJlZml4ZWQgd2l0aCAnZHJvcCdcbiAgICAgIGNvbnN0IGNvcnJlY3RlZCA9IE9iamVjdC5rZXlzKG5vcm1hbGl6ZWQpLnJlZHVjZSgoYWNjLCB0eXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvcnJlY3RlZFR5cGUgPSAvXihlbnRlcnxsZWF2ZSkvLnRlc3QodHlwZSlcbiAgICAgICAgICA/IGBkcmFnJHt0eXBlfWBcbiAgICAgICAgICA6IC9eKGFjdGl2YXRlfGRlYWN0aXZhdGV8bW92ZSkvLnRlc3QodHlwZSlcbiAgICAgICAgICAgID8gYGRyb3Ake3R5cGV9YFxuICAgICAgICAgICAgOiB0eXBlXG5cbiAgICAgICAgYWNjW2NvcnJlY3RlZFR5cGVdID0gbm9ybWFsaXplZFt0eXBlXVxuXG4gICAgICAgIHJldHVybiBhY2NcbiAgICAgIH0sIHt9KVxuXG4gICAgICBpbnRlcmFjdGFibGUub2ZmKGludGVyYWN0YWJsZS5vcHRpb25zLmRyb3AubGlzdGVuZXJzKVxuICAgICAgaW50ZXJhY3RhYmxlLm9uKGNvcnJlY3RlZClcbiAgICAgIGludGVyYWN0YWJsZS5vcHRpb25zLmRyb3AubGlzdGVuZXJzID0gY29ycmVjdGVkXG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzLmZ1bmMob3B0aW9ucy5vbmRyb3ApKSB7IGludGVyYWN0YWJsZS5vbignZHJvcCcsIG9wdGlvbnMub25kcm9wKSB9XG4gICAgaWYgKHV0aWxzLmlzLmZ1bmMob3B0aW9ucy5vbmRyb3BhY3RpdmF0ZSkpIHsgaW50ZXJhY3RhYmxlLm9uKCdkcm9wYWN0aXZhdGUnLCBvcHRpb25zLm9uZHJvcGFjdGl2YXRlKSB9XG4gICAgaWYgKHV0aWxzLmlzLmZ1bmMob3B0aW9ucy5vbmRyb3BkZWFjdGl2YXRlKSkgeyBpbnRlcmFjdGFibGUub24oJ2Ryb3BkZWFjdGl2YXRlJywgb3B0aW9ucy5vbmRyb3BkZWFjdGl2YXRlKSB9XG4gICAgaWYgKHV0aWxzLmlzLmZ1bmMob3B0aW9ucy5vbmRyYWdlbnRlcikpIHsgaW50ZXJhY3RhYmxlLm9uKCdkcmFnZW50ZXInLCBvcHRpb25zLm9uZHJhZ2VudGVyKSB9XG4gICAgaWYgKHV0aWxzLmlzLmZ1bmMob3B0aW9ucy5vbmRyYWdsZWF2ZSkpIHsgaW50ZXJhY3RhYmxlLm9uKCdkcmFnbGVhdmUnLCBvcHRpb25zLm9uZHJhZ2xlYXZlKSB9XG4gICAgaWYgKHV0aWxzLmlzLmZ1bmMob3B0aW9ucy5vbmRyb3Btb3ZlKSkgeyBpbnRlcmFjdGFibGUub24oJ2Ryb3Btb3ZlJywgb3B0aW9ucy5vbmRyb3Btb3ZlKSB9XG5cbiAgICBpZiAoL14ocG9pbnRlcnxjZW50ZXIpJC8udGVzdChvcHRpb25zLm92ZXJsYXAgYXMgc3RyaW5nKSkge1xuICAgICAgaW50ZXJhY3RhYmxlLm9wdGlvbnMuZHJvcC5vdmVybGFwID0gb3B0aW9ucy5vdmVybGFwXG4gICAgfVxuICAgIGVsc2UgaWYgKHV0aWxzLmlzLm51bWJlcihvcHRpb25zLm92ZXJsYXApKSB7XG4gICAgICBpbnRlcmFjdGFibGUub3B0aW9ucy5kcm9wLm92ZXJsYXAgPSBNYXRoLm1heChNYXRoLm1pbigxLCBvcHRpb25zLm92ZXJsYXApLCAwKVxuICAgIH1cbiAgICBpZiAoJ2FjY2VwdCcgaW4gb3B0aW9ucykge1xuICAgICAgaW50ZXJhY3RhYmxlLm9wdGlvbnMuZHJvcC5hY2NlcHQgPSBvcHRpb25zLmFjY2VwdFxuICAgIH1cbiAgICBpZiAoJ2NoZWNrZXInIGluIG9wdGlvbnMpIHtcbiAgICAgIGludGVyYWN0YWJsZS5vcHRpb25zLmRyb3AuY2hlY2tlciA9IG9wdGlvbnMuY2hlY2tlclxuICAgIH1cblxuICAgIHJldHVybiBpbnRlcmFjdGFibGVcbiAgfVxuXG4gIGlmICh1dGlscy5pcy5ib29sKG9wdGlvbnMpKSB7XG4gICAgaW50ZXJhY3RhYmxlLm9wdGlvbnMuZHJvcC5lbmFibGVkID0gb3B0aW9uc1xuXG4gICAgcmV0dXJuIGludGVyYWN0YWJsZVxuICB9XG5cbiAgcmV0dXJuIGludGVyYWN0YWJsZS5vcHRpb25zLmRyb3Bcbn1cblxuZnVuY3Rpb24gZHJvcENoZWNrTWV0aG9kIChcbiAgaW50ZXJhY3RhYmxlOiBJbnRlcmFjdC5JbnRlcmFjdGFibGUsXG4gIGRyYWdFdmVudDogSW50ZXJhY3RFdmVudCxcbiAgZXZlbnQ6IEludGVyYWN0LlBvaW50ZXJFdmVudFR5cGUsXG4gIGRyYWdnYWJsZTogSW50ZXJhY3QuSW50ZXJhY3RhYmxlLFxuICBkcmFnZ2FibGVFbGVtZW50OiBFbGVtZW50LFxuICBkcm9wRWxlbWVudDogRWxlbWVudCxcbiAgcmVjdDogYW55XG4pIHtcbiAgbGV0IGRyb3BwZWQgPSBmYWxzZVxuXG4gIC8vIGlmIHRoZSBkcm9wem9uZSBoYXMgbm8gcmVjdCAoZWcuIGRpc3BsYXk6IG5vbmUpXG4gIC8vIGNhbGwgdGhlIGN1c3RvbSBkcm9wQ2hlY2tlciBvciBqdXN0IHJldHVybiBmYWxzZVxuICBpZiAoIShyZWN0ID0gcmVjdCB8fCBpbnRlcmFjdGFibGUuZ2V0UmVjdChkcm9wRWxlbWVudCkpKSB7XG4gICAgcmV0dXJuIChpbnRlcmFjdGFibGUub3B0aW9ucy5kcm9wLmNoZWNrZXJcbiAgICAgID8gaW50ZXJhY3RhYmxlLm9wdGlvbnMuZHJvcC5jaGVja2VyKGRyYWdFdmVudCwgZXZlbnQsIGRyb3BwZWQsIGludGVyYWN0YWJsZSwgZHJvcEVsZW1lbnQsIGRyYWdnYWJsZSwgZHJhZ2dhYmxlRWxlbWVudClcbiAgICAgIDogZmFsc2UpXG4gIH1cblxuICBjb25zdCBkcm9wT3ZlcmxhcCA9IGludGVyYWN0YWJsZS5vcHRpb25zLmRyb3Aub3ZlcmxhcFxuXG4gIGlmIChkcm9wT3ZlcmxhcCA9PT0gJ3BvaW50ZXInKSB7XG4gICAgY29uc3Qgb3JpZ2luID0gdXRpbHMuZ2V0T3JpZ2luWFkoZHJhZ2dhYmxlLCBkcmFnZ2FibGVFbGVtZW50LCAnZHJhZycpXG4gICAgY29uc3QgcGFnZSA9IHV0aWxzLnBvaW50ZXIuZ2V0UGFnZVhZKGRyYWdFdmVudClcblxuICAgIHBhZ2UueCArPSBvcmlnaW4ueFxuICAgIHBhZ2UueSArPSBvcmlnaW4ueVxuXG4gICAgY29uc3QgaG9yaXpvbnRhbCA9IChwYWdlLnggPiByZWN0LmxlZnQpICYmIChwYWdlLnggPCByZWN0LnJpZ2h0KVxuICAgIGNvbnN0IHZlcnRpY2FsICAgPSAocGFnZS55ID4gcmVjdC50b3ApICYmIChwYWdlLnkgPCByZWN0LmJvdHRvbSlcblxuICAgIGRyb3BwZWQgPSBob3Jpem9udGFsICYmIHZlcnRpY2FsXG4gIH1cblxuICBjb25zdCBkcmFnUmVjdCA9IGRyYWdnYWJsZS5nZXRSZWN0KGRyYWdnYWJsZUVsZW1lbnQpXG5cbiAgaWYgKGRyYWdSZWN0ICYmIGRyb3BPdmVybGFwID09PSAnY2VudGVyJykge1xuICAgIGNvbnN0IGN4ID0gZHJhZ1JlY3QubGVmdCArIGRyYWdSZWN0LndpZHRoICAvIDJcbiAgICBjb25zdCBjeSA9IGRyYWdSZWN0LnRvcCAgKyBkcmFnUmVjdC5oZWlnaHQgLyAyXG5cbiAgICBkcm9wcGVkID0gY3ggPj0gcmVjdC5sZWZ0ICYmIGN4IDw9IHJlY3QucmlnaHQgJiYgY3kgPj0gcmVjdC50b3AgJiYgY3kgPD0gcmVjdC5ib3R0b21cbiAgfVxuXG4gIGlmIChkcmFnUmVjdCAmJiB1dGlscy5pcy5udW1iZXIoZHJvcE92ZXJsYXApKSB7XG4gICAgY29uc3Qgb3ZlcmxhcEFyZWEgID0gKE1hdGgubWF4KDAsIE1hdGgubWluKHJlY3QucmlnaHQsIGRyYWdSZWN0LnJpZ2h0KSAtIE1hdGgubWF4KHJlY3QubGVmdCwgZHJhZ1JlY3QubGVmdCkpICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoMCwgTWF0aC5taW4ocmVjdC5ib3R0b20sIGRyYWdSZWN0LmJvdHRvbSkgLSBNYXRoLm1heChyZWN0LnRvcCwgZHJhZ1JlY3QudG9wKSkpXG5cbiAgICBjb25zdCBvdmVybGFwUmF0aW8gPSBvdmVybGFwQXJlYSAvIChkcmFnUmVjdC53aWR0aCAqIGRyYWdSZWN0LmhlaWdodClcblxuICAgIGRyb3BwZWQgPSBvdmVybGFwUmF0aW8gPj0gZHJvcE92ZXJsYXBcbiAgfVxuXG4gIGlmIChpbnRlcmFjdGFibGUub3B0aW9ucy5kcm9wLmNoZWNrZXIpIHtcbiAgICBkcm9wcGVkID0gaW50ZXJhY3RhYmxlLm9wdGlvbnMuZHJvcC5jaGVja2VyKGRyYWdFdmVudCwgZXZlbnQsIGRyb3BwZWQsIGludGVyYWN0YWJsZSwgZHJvcEVsZW1lbnQsIGRyYWdnYWJsZSwgZHJhZ2dhYmxlRWxlbWVudClcbiAgfVxuXG4gIHJldHVybiBkcm9wcGVkXG59XG5cbmNvbnN0IGRyb3AgPSB7XG4gIGluc3RhbGwsXG4gIGdldEFjdGl2ZURyb3BzLFxuICBnZXREcm9wLFxuICBnZXREcm9wRXZlbnRzLFxuICBmaXJlRHJvcEV2ZW50cyxcbiAgZGVmYXVsdHM6IHtcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBhY2NlcHQgOiBudWxsLFxuICAgIG92ZXJsYXA6ICdwb2ludGVyJyxcbiAgfSBhcyBJbnRlcmFjdC5Ecm9wem9uZU9wdGlvbnMsXG59XG5cbmV4cG9ydCBkZWZhdWx0IGRyb3BcbiJdfQ== \ No newline at end of file diff --git a/packages/actions/gesture.d.ts b/packages/actions/gesture.d.ts index 89475fcbd..d975fcd39 100644 --- a/packages/actions/gesture.d.ts +++ b/packages/actions/gesture.d.ts @@ -1,5 +1,16 @@ import { ActionName, Scope } from '@interactjs/core/scope'; -export declare type GesturableMethod = (options?: Interact.GesturableOptions | boolean) => Interact.Interactable | Interact.GesturableOptions; +export declare type GesturableMethod = Interact.ActionMethod; +declare module '@interactjs/core/Interaction' { + interface Interaction { + gesture?: { + startAngle: number; + startDistance: number; + prevScale: number; + prevAngle: number; + prevDistance: number; + }; + } +} declare module '@interactjs/core/Interactable' { interface Interactable { gesturable: GesturableMethod; @@ -18,7 +29,20 @@ declare module '@interactjs/core/scope' { Gesture = "gesture" } } -export declare type GestureEvent = Interact.InteractEvent; +export interface GestureEvent extends Interact.InteractEvent { + distance: number; + angle: number; + da: number; + scale: number; + ds: number; + box: Interact.Rect; + touches: Interact.PointerType[]; +} +export interface GestureSignalArg extends Interact.SignalArg { + iEvent: GestureEvent; + interaction: Interact.Interaction; + event: Interact.PointerEventType | GestureEvent; +} declare function install(scope: Scope): void; declare const gesture: { install: typeof install; diff --git a/packages/actions/gesture.js b/packages/actions/gesture.js index 9a2cd3077..8bbb27278 100644 --- a/packages/actions/gesture.js +++ b/packages/actions/gesture.js @@ -111,7 +111,7 @@ function updateGestureProps({ interaction, iEvent, event, phase }) { const starting = phase === 'start'; const ending = phase === 'end'; const deltaSource = interaction.target.options.deltaSource; - iEvent.touches = [pointers[0].pointer, pointers[1].pointer]; + iEvent.touches = [pointers[0], pointers[1]]; if (starting) { iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource); iEvent.box = utils.pointer.touchBBox(pointers); @@ -121,11 +121,12 @@ function updateGestureProps({ interaction, iEvent, event, phase }) { iEvent.da = 0; } else if (ending || event instanceof InteractEvent) { - iEvent.distance = interaction.prevEvent.distance; - iEvent.box = interaction.prevEvent.box; - iEvent.scale = interaction.prevEvent.scale; + const prevEvent = interaction.prevEvent; + iEvent.distance = prevEvent.distance; + iEvent.box = prevEvent.box; + iEvent.scale = prevEvent.scale; iEvent.ds = iEvent.scale - 1; - iEvent.angle = interaction.prevEvent.angle; + iEvent.angle = prevEvent.angle; iEvent.da = iEvent.angle - interaction.gesture.startAngle; } else { @@ -138,4 +139,4 @@ function updateGestureProps({ interaction, iEvent, event, phase }) { } } export default gesture; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VzdHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImdlc3R1cmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxhQUFhLE1BQU0sZ0NBQWdDLENBQUE7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBUyxNQUFNLHdCQUF3QixDQUFBO0FBQzFELE9BQU8sS0FBSyxLQUFLLE1BQU0sbUJBQW1CLENBQUE7QUEyQnpDLFVBQWtCLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQTtBQUl2QyxTQUFTLE9BQU8sQ0FBRSxLQUFZO0lBQzVCLE1BQU0sRUFDSixPQUFPLEVBQ1AsWUFBWSxFQUNaLFlBQVksRUFDWixRQUFRLEdBQ1QsR0FBRyxLQUFLLENBQUE7SUFFVDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXNCRztJQUNILFlBQVksQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLFVBQXVDLE9BQTZDO1FBQ3RILElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFBO1lBQ3hELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBRXBDLE9BQU8sSUFBSSxDQUFBO1NBQ1o7UUFFRCxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUE7WUFFdEMsT0FBTyxJQUFJLENBQUE7U0FDWjtRQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUEyQixDQUFBO0lBQ2pELENBQUMsQ0FBQTtJQUVELFlBQVksQ0FBQyxPQUFPLENB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QUFhLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBQ3BFLE1BQU0sQ0FBQyxHQUFHLEdBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDbkQsTUFBTSxDQUFDLEtBQUssR0FBTSxDQUFDLENBQUE7UUFDbkIsTUFBTSxDQUFDLEVBQUUsR0FBUyxDQUFDLENBQUE7UUFDbkIsTUFBTSxDQUFDLEtBQUssR0FBTSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUE7UUFDakUsTUFBTSxDQUFDLEVBQUUsR0FBUyxDQUFDLENBQUE7S0FDcEI7U0FDSSxJQUFJLE1BQU0sSUFBSSxLQUFLLFlBQVksYUFBYSxFQUFFO1FBQ2pELE1BQU0sQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUE7UUFDaEQsTUFBTSxDQUFDLEdBQUcsR0FBUSxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQTtRQUMzQyxNQUFNLENBQUMsS0FBSyxHQUFNLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFBO1FBQzdDLE1BQU0sQ0FBQyxFQUFFLEdBQVMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUE7UUFDbEMsTUFBTSxDQUFDLEtBQUssR0FBTSxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQTtRQUM3QyxNQUFNLENBQUMsRUFBRSxHQUFTLE1BQU0sQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUE7S0FDaEU7U0FDSTtRQUNILE1BQU0sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBQ3BFLE1BQU0sQ0FBQyxHQUFHLEdBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDbkQsTUFBTSxDQUFDLEtBQUssR0FBTSxNQUFNLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFBO1FBQ3JFLE1BQU0sQ0FBQyxLQUFLLEdBQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBRWpFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQTtRQUN4RCxNQUFNLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUE7S0FDekQ7QUFDSCxDQUFDO0FBRUQsZUFBZSxPQUFPLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSW50ZXJhY3RFdmVudCBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0RXZlbnQnXG5pbXBvcnQgeyBBY3Rpb25OYW1lLCBTY29wZSB9IGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvc2NvcGUnXG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscydcblxuZXhwb3J0IHR5cGUgR2VzdHVyYWJsZU1ldGhvZCA9IChvcHRpb25zPzogSW50ZXJhY3QuR2VzdHVyYWJsZU9wdGlvbnMgfCBib29sZWFuKSA9PiBJbnRlcmFjdC5JbnRlcmFjdGFibGUgfCBJbnRlcmFjdC5HZXN0dXJhYmxlT3B0aW9uc1xuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGFibGUnIHtcbiAgaW50ZXJmYWNlIEludGVyYWN0YWJsZSB7XG4gICAgZ2VzdHVyYWJsZTogR2VzdHVyYWJsZU1ldGhvZFxuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL2RlZmF1bHRPcHRpb25zJyB7XG4gIGludGVyZmFjZSBBY3Rpb25EZWZhdWx0cyB7XG4gICAgZ2VzdHVyZTogSW50ZXJhY3QuR2VzdHVyYWJsZU9wdGlvbnNcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9zY29wZScge1xuICBpbnRlcmZhY2UgQWN0aW9ucyB7XG4gICAgW0FjdGlvbk5hbWUuR2VzdHVyZV0/OiB0eXBlb2YgZ2VzdHVyZVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvd1xuICBlbnVtIEFjdGlvbk5hbWUge1xuICAgIEdlc3R1cmUgPSAnZ2VzdHVyZSdcbiAgfVxufVxuXG4oQWN0aW9uTmFtZSBhcyBhbnkpLkdlc3R1cmUgPSAnZ2VzdHVyZSdcblxuZXhwb3J0IHR5cGUgR2VzdHVyZUV2ZW50ID0gSW50ZXJhY3QuSW50ZXJhY3RFdmVudDxBY3Rpb25OYW1lLkdlc3R1cmU+XG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlOiBTY29wZSkge1xuICBjb25zdCB7XG4gICAgYWN0aW9ucyxcbiAgICBJbnRlcmFjdGFibGUsXG4gICAgaW50ZXJhY3Rpb25zLFxuICAgIGRlZmF1bHRzLFxuICB9ID0gc2NvcGVcblxuICAvKipcbiAgICogYGBganNcbiAgICogaW50ZXJhY3QoZWxlbWVudCkuZ2VzdHVyYWJsZSh7XG4gICAqICAgICBvbnN0YXJ0OiBmdW5jdGlvbiAoZXZlbnQpIHt9LFxuICAgKiAgICAgb25tb3ZlIDogZnVuY3Rpb24gKGV2ZW50KSB7fSxcbiAgICogICAgIG9uZW5kICA6IGZ1bmN0aW9uIChldmVudCkge30sXG4gICAqXG4gICAqICAgICAvLyBsaW1pdCBtdWx0aXBsZSBnZXN0dXJlcy5cbiAgICogICAgIC8vIFNlZSB0aGUgZXhwbGFuYXRpb24gaW4ge0BsaW5rIEludGVyYWN0YWJsZS5kcmFnZ2FibGV9IGV4YW1wbGVcbiAgICogICAgIG1heDogSW5maW5pdHksXG4gICAqICAgICBtYXhQZXJFbGVtZW50OiAxLFxuICAgKiB9KTtcbiAgICpcbiAgICogdmFyIGlzR2VzdHVyZWFibGUgPSBpbnRlcmFjdChlbGVtZW50KS5nZXN0dXJhYmxlKCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciBtdWx0aXRvdWNoIGdlc3R1cmVzIGNhbiBiZSBwZXJmb3JtZWQgb24gdGhlIHRhcmdldFxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW4gfCBvYmplY3R9IFtvcHRpb25zXSB0cnVlL2ZhbHNlIG9yIEFuIG9iamVjdCB3aXRoIGV2ZW50XG4gICAqIGxpc3RlbmVycyB0byBiZSBmaXJlZCBvbiBnZXN0dXJlIGV2ZW50cyAobWFrZXMgdGhlIEludGVyYWN0YWJsZSBnZXN0dXJhYmxlKVxuICAgKiBAcmV0dXJuIHtib29sZWFuIHwgSW50ZXJhY3RhYmxlfSBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGlzIGNhbiBiZSB0aGVcbiAgICogdGFyZ2V0IG9mIGdlc3R1cmUgZXZlbnRzLCBvciB0aGlzIEludGVyYWN0YWJsZVxuICAgKi9cbiAgSW50ZXJhY3RhYmxlLnByb3RvdHlwZS5nZXN0dXJhYmxlID0gZnVuY3Rpb24gKHRoaXM6IEludGVyYWN0LkludGVyYWN0YWJsZSwgb3B0aW9uczogSW50ZXJhY3QuR2VzdHVyYWJsZU9wdGlvbnMgfCBib29sZWFuKSB7XG4gICAgaWYgKHV0aWxzLmlzLm9iamVjdChvcHRpb25zKSkge1xuICAgICAgdGhpcy5vcHRpb25zLmdlc3R1cmUuZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2VcbiAgICAgIHRoaXMuc2V0UGVyQWN0aW9uKCdnZXN0dXJlJywgb3B0aW9ucylcbiAgICAgIHRoaXMuc2V0T25FdmVudHMoJ2dlc3R1cmUnLCBvcHRpb25zKVxuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pcy5ib29sKG9wdGlvbnMpKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuZ2VzdHVyZS5lbmFibGVkID0gb3B0aW9uc1xuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZ2VzdHVyZSBhcyBJbnRlcmFjdC5PcHRpb25zXG4gIH1cblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYWN0aW9uLXN0YXJ0JywgdXBkYXRlR2VzdHVyZVByb3BzKVxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYWN0aW9uLW1vdmUnLCB1cGRhdGVHZXN0dXJlUHJvcHMpXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tZW5kJywgdXBkYXRlR2VzdHVyZVByb3BzKVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tc3RhcnQnLCBzdGFydClcbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2FjdGlvbi1tb3ZlJywgbW92ZSlcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignbmV3JywgKGludGVyYWN0aW9uKSA9PiB7XG4gICAgaW50ZXJhY3Rpb24uZ2VzdHVyZSA9IHtcbiAgICAgIHN0YXJ0OiB7IHg6IDAsIHk6IDAgfSxcblxuICAgICAgc3RhcnREaXN0YW5jZTogMCwgICAvLyBkaXN0YW5jZSBiZXR3ZWVuIHR3byB0b3VjaGVzIG9mIHRvdWNoU3RhcnRcbiAgICAgIHByZXZEaXN0YW5jZSA6IDAsXG4gICAgICBkaXN0YW5jZSAgICAgOiAwLFxuXG4gICAgICBzY2FsZTogMSwgICAgICAgICAgIC8vIGdlc3R1cmUuZGlzdGFuY2UgLyBnZXN0dXJlLnN0YXJ0RGlzdGFuY2VcblxuICAgICAgc3RhcnRBbmdsZTogMCwgICAgICAvLyBhbmdsZSBvZiBsaW5lIGpvaW5pbmcgdHdvIHRvdWNoZXNcbiAgICAgIHByZXZBbmdsZSA6IDAsICAgICAgLy8gYW5nbGUgb2YgdGhlIHByZXZpb3VzIGdlc3R1cmUgZXZlbnRcbiAgICB9XG4gIH0pXG5cbiAgYWN0aW9uc1tBY3Rpb25OYW1lLkdlc3R1cmVdID0gZ2VzdHVyZVxuICBhY3Rpb25zLm5hbWVzLnB1c2goQWN0aW9uTmFtZS5HZXN0dXJlKVxuICB1dGlscy5hcnIubWVyZ2UoYWN0aW9ucy5ldmVudFR5cGVzLCBbXG4gICAgJ2dlc3R1cmVzdGFydCcsXG4gICAgJ2dlc3R1cmVtb3ZlJyxcbiAgICAnZ2VzdHVyZWVuZCcsXG4gIF0pXG4gIGFjdGlvbnMubWV0aG9kRGljdC5nZXN0dXJlID0gJ2dlc3R1cmFibGUnXG5cbiAgZGVmYXVsdHMuYWN0aW9ucy5nZXN0dXJlID0gZ2VzdHVyZS5kZWZhdWx0c1xufVxuXG5jb25zdCBnZXN0dXJlID0ge1xuICBpbnN0YWxsLFxuICBkZWZhdWx0czoge1xuICB9LFxuXG4gIGNoZWNrZXIgKF9wb2ludGVyLCBfZXZlbnQsIF9pbnRlcmFjdGFibGUsIF9lbGVtZW50LCBpbnRlcmFjdGlvbjogeyBwb2ludGVyczogeyBsZW5ndGg6IG51bWJlcjsgfTsgfSkge1xuICAgIGlmIChpbnRlcmFjdGlvbi5wb2ludGVycy5sZW5ndGggPj0gMikge1xuICAgICAgcmV0dXJuIHsgbmFtZTogJ2dlc3R1cmUnIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9LFxuXG4gIGdldEN1cnNvciAoKSB7XG4gICAgcmV0dXJuICcnXG4gIH0sXG59XG5cbmZ1bmN0aW9uIHN0YXJ0ICh7IGlFdmVudCwgaW50ZXJhY3Rpb24gfSkge1xuICBpZiAoaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSAhPT0gJ2dlc3R1cmUnKSB7IHJldHVybiB9XG5cbiAgaUV2ZW50LmRzID0gMFxuXG4gIGludGVyYWN0aW9uLmdlc3R1cmUuc3RhcnREaXN0YW5jZSA9IGludGVyYWN0aW9uLmdlc3R1cmUucHJldkRpc3RhbmNlID0gaUV2ZW50LmRpc3RhbmNlXG4gIGludGVyYWN0aW9uLmdlc3R1cmUuc3RhcnRBbmdsZSA9IGludGVyYWN0aW9uLmdlc3R1cmUucHJldkFuZ2xlID0gaUV2ZW50LmFuZ2xlXG4gIGludGVyYWN0aW9uLmdlc3R1cmUuc2NhbGUgPSAxXG59XG5cbmZ1bmN0aW9uIG1vdmUgKHsgaUV2ZW50LCBpbnRlcmFjdGlvbiB9KSB7XG4gIGlmIChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lICE9PSAnZ2VzdHVyZScpIHsgcmV0dXJuIH1cblxuICBpRXZlbnQuZHMgPSBpRXZlbnQuc2NhbGUgLSBpbnRlcmFjdGlvbi5nZXN0dXJlLnNjYWxlXG5cbiAgaW50ZXJhY3Rpb24udGFyZ2V0LmZpcmUoaUV2ZW50KVxuXG4gIGludGVyYWN0aW9uLmdlc3R1cmUucHJldkFuZ2xlID0gaUV2ZW50LmFuZ2xlXG4gIGludGVyYWN0aW9uLmdlc3R1cmUucHJldkRpc3RhbmNlID0gaUV2ZW50LmRpc3RhbmNlXG5cbiAgaWYgKGlFdmVudC5zY2FsZSAhPT0gSW5maW5pdHkgJiZcbiAgICAgIGlFdmVudC5zY2FsZSAhPT0gbnVsbCAmJlxuICAgICAgaUV2ZW50LnNjYWxlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICFpc05hTihpRXZlbnQuc2NhbGUpKSB7XG4gICAgaW50ZXJhY3Rpb24uZ2VzdHVyZS5zY2FsZSA9IGlFdmVudC5zY2FsZVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUdlc3R1cmVQcm9wcyAoeyBpbnRlcmFjdGlvbiwgaUV2ZW50LCBldmVudCwgcGhhc2UgfSkge1xuICBpZiAoaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSAhPT0gJ2dlc3R1cmUnKSB7IHJldHVybiB9XG5cbiAgY29uc3QgcG9pbnRlcnMgPSBpbnRlcmFjdGlvbi5wb2ludGVycy5tYXAoKHApID0+IHAucG9pbnRlcilcbiAgY29uc3Qgc3RhcnRpbmcgPSBwaGFzZSA9PT0gJ3N0YXJ0J1xuICBjb25zdCBlbmRpbmcgPSBwaGFzZSA9PT0gJ2VuZCdcbiAgY29uc3QgZGVsdGFTb3VyY2UgPSBpbnRlcmFjdGlvbi50YXJnZXQub3B0aW9ucy5kZWx0YVNvdXJjZVxuXG4gIGlFdmVudC50b3VjaGVzID0gW3BvaW50ZXJzWzBdLnBvaW50ZXIsIHBvaW50ZXJzWzFdLnBvaW50ZXJdXG5cbiAgaWYgKHN0YXJ0aW5nKSB7XG4gICAgaUV2ZW50LmRpc3RhbmNlID0gdXRpbHMucG9pbnRlci50b3VjaERpc3RhbmNlKHBvaW50ZXJzLCBkZWx0YVNvdXJjZSlcbiAgICBpRXZlbnQuYm94ICAgICAgPSB1dGlscy5wb2ludGVyLnRvdWNoQkJveChwb2ludGVycylcbiAgICBpRXZlbnQuc2NhbGUgICAgPSAxXG4gICAgaUV2ZW50LmRzICAgICAgID0gMFxuICAgIGlFdmVudC5hbmdsZSAgICA9IHV0aWxzLnBvaW50ZXIudG91Y2hBbmdsZShwb2ludGVycywgZGVsdGFTb3VyY2UpXG4gICAgaUV2ZW50LmRhICAgICAgID0gMFxuICB9XG4gIGVsc2UgaWYgKGVuZGluZyB8fCBldmVudCBpbnN0YW5jZW9mIEludGVyYWN0RXZlbnQpIHtcbiAgICBpRXZlbnQuZGlzdGFuY2UgPSBpbnRlcmFjdGlvbi5wcmV2RXZlbnQuZGlzdGFuY2VcbiAgICBpRXZlbnQuYm94ICAgICAgPSBpbnRlcmFjdGlvbi5wcmV2RXZlbnQuYm94XG4gICAgaUV2ZW50LnNjYWxlICAgID0gaW50ZXJhY3Rpb24ucHJldkV2ZW50LnNjYWxlXG4gICAgaUV2ZW50LmRzICAgICAgID0gaUV2ZW50LnNjYWxlIC0gMVxuICAgIGlFdmVudC5hbmdsZSAgICA9IGludGVyYWN0aW9uLnByZXZFdmVudC5hbmdsZVxuICAgIGlFdmVudC5kYSAgICAgICA9IGlFdmVudC5hbmdsZSAtIGludGVyYWN0aW9uLmdlc3R1cmUuc3RhcnRBbmdsZVxuICB9XG4gIGVsc2Uge1xuICAgIGlFdmVudC5kaXN0YW5jZSA9IHV0aWxzLnBvaW50ZXIudG91Y2hEaXN0YW5jZShwb2ludGVycywgZGVsdGFTb3VyY2UpXG4gICAgaUV2ZW50LmJveCAgICAgID0gdXRpbHMucG9pbnRlci50b3VjaEJCb3gocG9pbnRlcnMpXG4gICAgaUV2ZW50LnNjYWxlICAgID0gaUV2ZW50LmRpc3RhbmNlIC8gaW50ZXJhY3Rpb24uZ2VzdHVyZS5zdGFydERpc3RhbmNlXG4gICAgaUV2ZW50LmFuZ2xlICAgID0gdXRpbHMucG9pbnRlci50b3VjaEFuZ2xlKHBvaW50ZXJzLCBkZWx0YVNvdXJjZSlcblxuICAgIGlFdmVudC5kcyA9IGlFdmVudC5zY2FsZSAtIGludGVyYWN0aW9uLmdlc3R1cmUucHJldlNjYWxlXG4gICAgaUV2ZW50LmRhID0gaUV2ZW50LmFuZ2xlIC0gaW50ZXJhY3Rpb24uZ2VzdHVyZS5wcmV2QW5nbGVcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBnZXN0dXJlXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VzdHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImdlc3R1cmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxhQUFhLE1BQU0sZ0NBQWdDLENBQUE7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBUyxNQUFNLHdCQUF3QixDQUFBO0FBQzFELE9BQU8sS0FBSyxLQUFLLE1BQU0sbUJBQW1CLENBQUE7QUF1Q3pDLFVBQWtCLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQTtBQWtCdkMsU0FBUyxPQUFPLENBQUUsS0FBWTtJQUM1QixNQUFNLEVBQ0osT0FBTyxFQUNQLFlBQVksRUFDWixZQUFZLEVBQ1osUUFBUSxHQUNULEdBQUcsS0FBSyxDQUFBO0lBRVQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FzQkc7SUFDSCxZQUFZLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxVQUF1QyxPQUE2QztRQUN0SCxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQTtZQUN4RCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUVwQyxPQUFPLElBQUksQ0FBQTtTQUNaO1FBRUQsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO1lBRXRDLE9BQU8sSUFBSSxDQUFBO1NBQ1o7UUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBMkIsQ0FBQTtJQUNqRCxDQUFxQixDQUFBO0lBRXJCLFlBQVksQ0FBQyxPQUFP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T0FBTyxDQUFDLGFBQWEsQ0FBQTtRQUNyRSxNQUFNLENBQUMsS0FBSyxHQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQTtRQUVqRSxNQUFNLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUE7UUFDeEQsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFBO0tBQ3pEO0FBQ0gsQ0FBQztBQUVELGVBQWUsT0FBTyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEludGVyYWN0RXZlbnQgZnJvbSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdEV2ZW50J1xuaW1wb3J0IHsgQWN0aW9uTmFtZSwgU2NvcGUgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJ1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMnXG5cbmV4cG9ydCB0eXBlIEdlc3R1cmFibGVNZXRob2QgPSBJbnRlcmFjdC5BY3Rpb25NZXRob2Q8SW50ZXJhY3QuR2VzdHVyYWJsZU9wdGlvbnM+XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0aW9uJyB7XG4gIGludGVyZmFjZSBJbnRlcmFjdGlvbiB7XG4gICAgZ2VzdHVyZT86IHtcbiAgICAgIHN0YXJ0QW5nbGU6IG51bWJlclxuICAgICAgc3RhcnREaXN0YW5jZTogbnVtYmVyXG4gICAgICBwcmV2U2NhbGU6IG51bWJlclxuICAgICAgcHJldkFuZ2xlOiBudW1iZXJcbiAgICAgIHByZXZEaXN0YW5jZTogbnVtYmVyXG4gICAgfVxuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0YWJsZScge1xuICBpbnRlcmZhY2UgSW50ZXJhY3RhYmxlIHtcbiAgICBnZXN0dXJhYmxlOiBHZXN0dXJhYmxlTWV0aG9kXG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvZGVmYXVsdE9wdGlvbnMnIHtcbiAgaW50ZXJmYWNlIEFjdGlvbkRlZmF1bHRzIHtcbiAgICBnZXN0dXJlOiBJbnRlcmFjdC5HZXN0dXJhYmxlT3B0aW9uc1xuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJyB7XG4gIGludGVyZmFjZSBBY3Rpb25zIHtcbiAgICBbQWN0aW9uTmFtZS5HZXN0dXJlXT86IHR5cGVvZiBnZXN0dXJlXG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG4gIGVudW0gQWN0aW9uTmFtZSB7XG4gICAgR2VzdHVyZSA9ICdnZXN0dXJlJ1xuICB9XG59XG5cbihBY3Rpb25OYW1lIGFzIGFueSkuR2VzdHVyZSA9ICdnZXN0dXJlJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEdlc3R1cmVFdmVudCBleHRlbmRzIEludGVyYWN0LkludGVyYWN0RXZlbnQ8QWN0aW9uTmFtZS5HZXN0dXJlPiB7XG4gIGRpc3RhbmNlOiBudW1iZXJcbiAgYW5nbGU6IG51bWJlclxuICBkYTogbnVtYmVyIC8vIGFuZ2xlIGNoYW5nZVxuICBzY2FsZTogbnVtYmVyIC8vIHJhdGlvIG9mIGRpc3RhbmNlIHN0YXJ0IHRvIGN1cnJlbnQgZXZlbnRcbiAgZHM6IG51bWJlciAvLyBzY2FsZSBjaGFuZ2VcbiAgYm94OiBJbnRlcmFjdC5SZWN0IC8vIGVuY2xvc2luZyBib3ggb2YgYWxsIHBvaW50c1xuICB0b3VjaGVzOiBJbnRlcmFjdC5Qb2ludGVyVHlwZVtdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VzdHVyZVNpZ25hbEFyZyBleHRlbmRzIEludGVyYWN0LlNpZ25hbEFyZyB7XG4gIGlFdmVudDogR2VzdHVyZUV2ZW50XG4gIGludGVyYWN0aW9uOiBJbnRlcmFjdC5JbnRlcmFjdGlvbjxBY3Rpb25OYW1lLkdlc3R1cmU+XG4gIGV2ZW50OiBJbnRlcmFjdC5Qb2ludGVyRXZlbnRUeXBlIHwgR2VzdHVyZUV2ZW50XG59XG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlOiBTY29wZSkge1xuICBjb25zdCB7XG4gICAgYWN0aW9ucyxcbiAgICBJbnRlcmFjdGFibGUsXG4gICAgaW50ZXJhY3Rpb25zLFxuICAgIGRlZmF1bHRzLFxuICB9ID0gc2NvcGVcblxuICAvKipcbiAgICogYGBganNcbiAgICogaW50ZXJhY3QoZWxlbWVudCkuZ2VzdHVyYWJsZSh7XG4gICAqICAgICBvbnN0YXJ0OiBmdW5jdGlvbiAoZXZlbnQpIHt9LFxuICAgKiAgICAgb25tb3ZlIDogZnVuY3Rpb24gKGV2ZW50KSB7fSxcbiAgICogICAgIG9uZW5kICA6IGZ1bmN0aW9uIChldmVudCkge30sXG4gICAqXG4gICAqICAgICAvLyBsaW1pdCBtdWx0aXBsZSBnZXN0dXJlcy5cbiAgICogICAgIC8vIFNlZSB0aGUgZXhwbGFuYXRpb24gaW4ge0BsaW5rIEludGVyYWN0YWJsZS5kcmFnZ2FibGV9IGV4YW1wbGVcbiAgICogICAgIG1heDogSW5maW5pdHksXG4gICAqICAgICBtYXhQZXJFbGVtZW50OiAxLFxuICAgKiB9KTtcbiAgICpcbiAgICogdmFyIGlzR2VzdHVyZWFibGUgPSBpbnRlcmFjdChlbGVtZW50KS5nZXN0dXJhYmxlKCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciBtdWx0aXRvdWNoIGdlc3R1cmVzIGNhbiBiZSBwZXJmb3JtZWQgb24gdGhlIHRhcmdldFxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW4gfCBvYmplY3R9IFtvcHRpb25zXSB0cnVlL2ZhbHNlIG9yIEFuIG9iamVjdCB3aXRoIGV2ZW50XG4gICAqIGxpc3RlbmVycyB0byBiZSBmaXJlZCBvbiBnZXN0dXJlIGV2ZW50cyAobWFrZXMgdGhlIEludGVyYWN0YWJsZSBnZXN0dXJhYmxlKVxuICAgKiBAcmV0dXJuIHtib29sZWFuIHwgSW50ZXJhY3RhYmxlfSBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGlzIGNhbiBiZSB0aGVcbiAgICogdGFyZ2V0IG9mIGdlc3R1cmUgZXZlbnRzLCBvciB0aGlzIEludGVyYWN0YWJsZVxuICAgKi9cbiAgSW50ZXJhY3RhYmxlLnByb3RvdHlwZS5nZXN0dXJhYmxlID0gZnVuY3Rpb24gKHRoaXM6IEludGVyYWN0LkludGVyYWN0YWJsZSwgb3B0aW9uczogSW50ZXJhY3QuR2VzdHVyYWJsZU9wdGlvbnMgfCBib29sZWFuKSB7XG4gICAgaWYgKHV0aWxzLmlzLm9iamVjdChvcHRpb25zKSkge1xuICAgICAgdGhpcy5vcHRpb25zLmdlc3R1cmUuZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2VcbiAgICAgIHRoaXMuc2V0UGVyQWN0aW9uKCdnZXN0dXJlJywgb3B0aW9ucylcbiAgICAgIHRoaXMuc2V0T25FdmVudHMoJ2dlc3R1cmUnLCBvcHRpb25zKVxuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pcy5ib29sKG9wdGlvbnMpKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuZ2VzdHVyZS5lbmFibGVkID0gb3B0aW9uc1xuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZ2VzdHVyZSBhcyBJbnRlcmFjdC5PcHRpb25zXG4gIH0gYXMgR2VzdHVyYWJsZU1ldGhvZFxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tc3RhcnQnLCB1cGRhdGVHZXN0dXJlUHJvcHMpXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tbW92ZScsIHVwZGF0ZUdlc3R1cmVQcm9wcylcbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2FjdGlvbi1lbmQnLCB1cGRhdGVHZXN0dXJlUHJvcHMpXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2FjdGlvbi1zdGFydCcsIHN0YXJ0KVxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYWN0aW9uLW1vdmUnLCBtb3ZlKVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCduZXcnLCAoaW50ZXJhY3Rpb24pID0+IHtcbiAgICBpbnRlcmFjdGlvbi5nZXN0dXJlID0ge1xuICAgICAgc3RhcnQ6IHsgeDogMCwgeTogMCB9LFxuXG4gICAgICBzdGFydERpc3RhbmNlOiAwLCAgIC8vIGRpc3RhbmNlIGJldHdlZW4gdHdvIHRvdWNoZXMgb2YgdG91Y2hTdGFydFxuICAgICAgcHJldkRpc3RhbmNlIDogMCxcbiAgICAgIGRpc3RhbmNlICAgICA6IDAsXG5cbiAgICAgIHNjYWxlOiAxLCAgICAgICAgICAgLy8gZ2VzdHVyZS5kaXN0YW5jZSAvIGdlc3R1cmUuc3RhcnREaXN0YW5jZVxuXG4gICAgICBzdGFydEFuZ2xlOiAwLCAgICAgIC8vIGFuZ2xlIG9mIGxpbmUgam9pbmluZyB0d28gdG91Y2hlc1xuICAgICAgcHJldkFuZ2xlIDogMCwgICAgICAvLyBhbmdsZSBvZiB0aGUgcHJldmlvdXMgZ2VzdHVyZSBldmVudFxuICAgIH1cbiAgfSlcblxuICBhY3Rpb25zW0FjdGlvbk5hbWUuR2VzdHVyZV0gPSBnZXN0dXJlXG4gIGFjdGlvbnMubmFtZXMucHVzaChBY3Rpb25OYW1lLkdlc3R1cmUpXG4gIHV0aWxzLmFyci5tZXJnZShhY3Rpb25zLmV2ZW50VHlwZXMsIFtcbiAgICAnZ2VzdHVyZXN0YXJ0JyxcbiAgICAnZ2VzdHVyZW1vdmUnLFxuICAgICdnZXN0dXJlZW5kJyxcbiAgXSlcbiAgYWN0aW9ucy5tZXRob2REaWN0Lmdlc3R1cmUgPSAnZ2VzdHVyYWJsZSdcblxuICBkZWZhdWx0cy5hY3Rpb25zLmdlc3R1cmUgPSBnZXN0dXJlLmRlZmF1bHRzXG59XG5cbmNvbnN0IGdlc3R1cmUgPSB7XG4gIGluc3RhbGwsXG4gIGRlZmF1bHRzOiB7XG4gIH0sXG5cbiAgY2hlY2tlciAoX3BvaW50ZXIsIF9ldmVudCwgX2ludGVyYWN0YWJsZSwgX2VsZW1lbnQsIGludGVyYWN0aW9uOiB7IHBvaW50ZXJzOiB7IGxlbmd0aDogbnVtYmVyOyB9OyB9KSB7XG4gICAgaWYgKGludGVyYWN0aW9uLnBvaW50ZXJzLmxlbmd0aCA+PSAyKSB7XG4gICAgICByZXR1cm4geyBuYW1lOiAnZ2VzdHVyZScgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH0sXG5cbiAgZ2V0Q3Vyc29yICgpIHtcbiAgICByZXR1cm4gJydcbiAgfSxcbn1cblxuZnVuY3Rpb24gc3RhcnQgKHsgaUV2ZW50LCBpbnRlcmFjdGlvbiB9KSB7XG4gIGlmIChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lICE9PSAnZ2VzdHVyZScpIHsgcmV0dXJuIH1cblxuICBpRXZlbnQuZHMgPSAwXG5cbiAgaW50ZXJhY3Rpb24uZ2VzdHVyZS5zdGFydERpc3RhbmNlID0gaW50ZXJhY3Rpb24uZ2VzdHVyZS5wcmV2RGlzdGFuY2UgPSBpRXZlbnQuZGlzdGFuY2VcbiAgaW50ZXJhY3Rpb24uZ2VzdHVyZS5zdGFydEFuZ2xlID0gaW50ZXJhY3Rpb24uZ2VzdHVyZS5wcmV2QW5nbGUgPSBpRXZlbnQuYW5nbGVcbiAgaW50ZXJhY3Rpb24uZ2VzdHVyZS5zY2FsZSA9IDFcbn1cblxuZnVuY3Rpb24gbW92ZSAoeyBpRXZlbnQsIGludGVyYWN0aW9uIH0pIHtcbiAgaWYgKGludGVyYWN0aW9uLnByZXBhcmVkLm5hbWUgIT09ICdnZXN0dXJlJykgeyByZXR1cm4gfVxuXG4gIGlFdmVudC5kcyA9IGlFdmVudC5zY2FsZSAtIGludGVyYWN0aW9uLmdlc3R1cmUuc2NhbGVcblxuICBpbnRlcmFjdGlvbi50YXJnZXQuZmlyZShpRXZlbnQpXG5cbiAgaW50ZXJhY3Rpb24uZ2VzdHVyZS5wcmV2QW5nbGUgPSBpRXZlbnQuYW5nbGVcbiAgaW50ZXJhY3Rpb24uZ2VzdHVyZS5wcmV2RGlzdGFuY2UgPSBpRXZlbnQuZGlzdGFuY2VcblxuICBpZiAoaUV2ZW50LnNjYWxlICE9PSBJbmZpbml0eSAmJlxuICAgICAgaUV2ZW50LnNjYWxlICE9PSBudWxsICYmXG4gICAgICBpRXZlbnQuc2NhbGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgIWlzTmFOKGlFdmVudC5zY2FsZSkpIHtcbiAgICBpbnRlcmFjdGlvbi5nZXN0dXJlLnNjYWxlID0gaUV2ZW50LnNjYWxlXG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlR2VzdHVyZVByb3BzICh7IGludGVyYWN0aW9uLCBpRXZlbnQsIGV2ZW50LCBwaGFzZSB9OiBHZXN0dXJlU2lnbmFsQXJnKSB7XG4gIGlmIChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lICE9PSAnZ2VzdHVyZScpIHsgcmV0dXJuIH1cblxuICBjb25zdCBwb2ludGVycyA9IGludGVyYWN0aW9uLnBvaW50ZXJzLm1hcCgocCkgPT4gcC5wb2ludGVyKVxuICBjb25zdCBzdGFydGluZyA9IHBoYXNlID09PSAnc3RhcnQnXG4gIGNvbnN0IGVuZGluZyA9IHBoYXNlID09PSAnZW5kJ1xuICBjb25zdCBkZWx0YVNvdXJjZSA9IGludGVyYWN0aW9uLnRhcmdldC5vcHRpb25zLmRlbHRhU291cmNlXG5cbiAgaUV2ZW50LnRvdWNoZXMgPSBbcG9pbnRlcnNbMF0sIHBvaW50ZXJzWzFdXVxuXG4gIGlmIChzdGFydGluZykge1xuICAgIGlFdmVudC5kaXN0YW5jZSA9IHV0aWxzLnBvaW50ZXIudG91Y2hEaXN0YW5jZShwb2ludGVycywgZGVsdGFTb3VyY2UpXG4gICAgaUV2ZW50LmJveCAgICAgID0gdXRpbHMucG9pbnRlci50b3VjaEJCb3gocG9pbnRlcnMpXG4gICAgaUV2ZW50LnNjYWxlICAgID0gMVxuICAgIGlFdmVudC5kcyAgICAgICA9IDBcbiAgICBpRXZlbnQuYW5nbGUgICAgPSB1dGlscy5wb2ludGVyLnRvdWNoQW5nbGUocG9pbnRlcnMsIGRlbHRhU291cmNlKVxuICAgIGlFdmVudC5kYSAgICAgICA9IDBcbiAgfVxuICBlbHNlIGlmIChlbmRpbmcgfHwgZXZlbnQgaW5zdGFuY2VvZiBJbnRlcmFjdEV2ZW50KSB7XG4gICAgY29uc3QgcHJldkV2ZW50ID0gaW50ZXJhY3Rpb24ucHJldkV2ZW50IGFzIEdlc3R1cmVFdmVudFxuXG4gICAgaUV2ZW50LmRpc3RhbmNlID0gcHJldkV2ZW50LmRpc3RhbmNlXG4gICAgaUV2ZW50LmJveCAgICAgID0gcHJldkV2ZW50LmJveFxuICAgIGlFdmVudC5zY2FsZSAgICA9IHByZXZFdmVudC5zY2FsZVxuICAgIGlFdmVudC5kcyAgICAgICA9IGlFdmVudC5zY2FsZSAtIDFcbiAgICBpRXZlbnQuYW5nbGUgICAgPSBwcmV2RXZlbnQuYW5nbGVcbiAgICBpRXZlbnQuZGEgICAgICAgPSBpRXZlbnQuYW5nbGUgLSBpbnRlcmFjdGlvbi5nZXN0dXJlLnN0YXJ0QW5nbGVcbiAgfVxuICBlbHNlIHtcbiAgICBpRXZlbnQuZGlzdGFuY2UgPSB1dGlscy5wb2ludGVyLnRvdWNoRGlzdGFuY2UocG9pbnRlcnMsIGRlbHRhU291cmNlKVxuICAgIGlFdmVudC5ib3ggICAgICA9IHV0aWxzLnBvaW50ZXIudG91Y2hCQm94KHBvaW50ZXJzKVxuICAgIGlFdmVudC5zY2FsZSAgICA9IGlFdmVudC5kaXN0YW5jZSAvIGludGVyYWN0aW9uLmdlc3R1cmUuc3RhcnREaXN0YW5jZVxuICAgIGlFdmVudC5hbmdsZSAgICA9IHV0aWxzLnBvaW50ZXIudG91Y2hBbmdsZShwb2ludGVycywgZGVsdGFTb3VyY2UpXG5cbiAgICBpRXZlbnQuZHMgPSBpRXZlbnQuc2NhbGUgLSBpbnRlcmFjdGlvbi5nZXN0dXJlLnByZXZTY2FsZVxuICAgIGlFdmVudC5kYSA9IGlFdmVudC5hbmdsZSAtIGludGVyYWN0aW9uLmdlc3R1cmUucHJldkFuZ2xlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2VzdHVyZVxuIl19 \ No newline at end of file diff --git a/packages/actions/package.json b/packages/actions/package.json index 386622e75..e5b078aaf 100644 --- a/packages/actions/package.json +++ b/packages/actions/package.json @@ -1,14 +1,14 @@ { "name": "@interactjs/actions", - "version": "1.4.0-alpha.27+sha.12b8f8f", + "version": "1.4.0-alpha.28+sha.e624c4d", "peerDependencies": { - "@interactjs/core": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/utils": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/core": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/utils": "1.4.0-alpha.28+sha.e624c4d" }, "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/core": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/utils": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/_dev": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/core": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/utils": "1.4.0-alpha.28+sha.e624c4d" }, "publishConfig": { "access": "public" diff --git a/packages/actions/resize.d.ts b/packages/actions/resize.d.ts index e25e1d880..432d8522a 100644 --- a/packages/actions/resize.d.ts +++ b/packages/actions/resize.d.ts @@ -1,7 +1,7 @@ -import { Action, Interaction } from '@interactjs/core/Interaction'; +import { ActionProps, Interaction } from '@interactjs/core/Interaction'; import { ActionName, Scope } from '@interactjs/core/scope'; export declare type EdgeName = 'top' | 'left' | 'bottom' | 'right'; -export declare type ResizableMethod = (options?: Interact.OrBoolean | boolean) => Interact.Interactable | Interact.ResizableOptions; +export declare type ResizableMethod = Interact.ActionMethod; declare module '@interactjs/core/Interactable' { interface Interactable { resizable: ResizableMethod; @@ -10,6 +10,19 @@ declare module '@interactjs/core/Interactable' { declare module '@interactjs/core/Interaction' { interface Interaction { resizeAxes: 'x' | 'y' | 'xy'; + resizeRects: { + start: Interact.Rect; + current: Interact.Rect; + inverted: Interact.Rect; + previous: Interact.Rect; + delta: Interact.Rect; + }; + resizeStartAspectRatio: number; + } + interface ActionProps { + _linkedEdges?: { + [key: string]: boolean; + }; } } declare module '@interactjs/core/defaultOptions' { @@ -32,8 +45,8 @@ export interface ResizeEvent extends Interact.InteractEvent { declare function install(scope: Scope): void; declare const resize: { install: typeof install; - defaults: import("../types").ResizableOptions; - checker(_pointer: import("../types").PointerType, _event: import("../types").PointerEventType, interactable: import("@interactjs/core/Interactable").Interactable, element: Element, interaction: Interaction, rect: import("../types").Rect): { + defaults: import("../types/types").ResizableOptions; + checker(_pointer: import("../types/types").PointerType, _event: import("../types/types").PointerEventType, interactable: import("@interactjs/core/Interactable").Interactable, element: Element, interaction: Interaction, rect: import("../types/types").Rect): { name: string; edges: { [edge: string]: boolean; @@ -57,7 +70,7 @@ declare const resize: { topright: string; bottomleft: string; }; - getCursor(action: Action): string; + getCursor(action: ActionProps): string; defaultMargin: number; }; export default resize; diff --git a/packages/actions/resize.js b/packages/actions/resize.js index 0743a8cbe..e74f6cb08 100644 --- a/packages/actions/resize.js +++ b/packages/actions/resize.js @@ -156,7 +156,7 @@ function resizable(interactable, options, scope) { interactable.options.resize.enabled = options.enabled !== false; interactable.setPerAction('resize', options); interactable.setOnEvents('resize', options); - if (/^x$|^y$|^xy$/.test(options.axis)) { + if (utils.is.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) { interactable.options.resize.axis = options.axis; } else if (options.axis === null) { @@ -403,4 +403,4 @@ function updateEventAxes({ interaction, iEvent, action }) { } } export default resize; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVzaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQVMsTUFBTSx3QkFBd0IsQ0FBQTtBQUMxRCxPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFBO0FBa0N6QyxVQUFrQixDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUE7QUFPckMsU0FBUyxPQUFPLENBQUUsS0FBWTtJQUM1QixNQUFNLEVBQ0osT0FBTyxFQUNQLE9BQU87SUFDUCwwQkFBMEI7SUFDMUIsWUFBWSxFQUFFLDJDQUEyQztJQUN6RCxZQUFZLEVBQ1osUUFBUSxHQUNULEdBQUcsS0FBSyxDQUFBO0lBRVQsa0NBQWtDO0lBRWxDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO1FBQzdDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO0lBQy9CLENBQUMsQ0FBQyxDQUFBO0lBRUYsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQzlDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUU1QyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDLENBQUE7SUFDeEQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFBO0lBRXZELE1BQU0sQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3JDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBRXRGOzs7Ozs7Ozs7Ozs7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QUFJLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQTtRQUVwQyxJQUFJLFdBQVcsQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFO1lBQ2xDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtTQUNuQjthQUNJLElBQUksV0FBVyxDQUFDLFVBQVUsS0FBSyxHQUFHLEVBQUU7WUFDdkMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1NBQ25CO0tBQ0Y7QUFDSCxDQUFDO0FBRUQsZUFBZSxNQUFNLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb24sIEludGVyYWN0aW9uIH0gZnJvbSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbidcbmltcG9ydCB7IEFjdGlvbk5hbWUsIFNjb3BlIH0gZnJvbSAnQGludGVyYWN0anMvY29yZS9zY29wZSdcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzJ1xuXG5leHBvcnQgdHlwZSBFZGdlTmFtZSA9ICd0b3AnIHwgJ2xlZnQnIHwgJ2JvdHRvbScgfCAncmlnaHQnXG5leHBvcnQgdHlwZSBSZXNpemFibGVNZXRob2QgPSAob3B0aW9ucz86IEludGVyYWN0Lk9yQm9vbGVhbjxJbnRlcmFjdC5SZXNpemFibGVPcHRpb25zPiB8IGJvb2xlYW4pID0+IEludGVyYWN0LkludGVyYWN0YWJsZSB8IEludGVyYWN0LlJlc2l6YWJsZU9wdGlvbnNcblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3RhYmxlJyB7XG4gIGludGVyZmFjZSBJbnRlcmFjdGFibGUge1xuICAgIHJlc2l6YWJsZTogUmVzaXphYmxlTWV0aG9kXG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3Rpb24nIHtcbiAgaW50ZXJmYWNlIEludGVyYWN0aW9uIHtcbiAgICByZXNpemVBeGVzOiAneCcgfCAneScgfCAneHknXG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvZGVmYXVsdE9wdGlvbnMnIHtcbiAgaW50ZXJmYWNlIEFjdGlvbkRlZmF1bHRzIHtcbiAgICByZXNpemU6IEludGVyYWN0LlJlc2l6YWJsZU9wdGlvbnNcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9zY29wZScge1xuICBpbnRlcmZhY2UgQWN0aW9ucyB7XG4gICAgW0FjdGlvbk5hbWUuUmVzaXplXT86IHR5cGVvZiByZXNpemVcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3dcbiAgZW51bSBBY3Rpb25OYW1lIHtcbiAgICBSZXNpemUgPSAncmVzaXplJ1xuICB9XG59XG5cbihBY3Rpb25OYW1lIGFzIGFueSkuUmVzaXplID0gJ3Jlc2l6ZSdcblxuZXhwb3J0IGludGVyZmFjZSBSZXNpemVFdmVudCBleHRlbmRzIEludGVyYWN0LkludGVyYWN0RXZlbnQ8QWN0aW9uTmFtZS5SZXNpemU+IHtcbiAgZGVsdGFSZWN0PzogSW50ZXJhY3QuUmVjdFxuICByZWN0PzogSW50ZXJhY3QuUmVjdFxufVxuXG5mdW5jdGlvbiBpbnN0YWxsIChzY29wZTogU2NvcGUpIHtcbiAgY29uc3Qge1xuICAgIGFjdGlvbnMsXG4gICAgYnJvd3NlcixcbiAgICAvKiogQGxlbmRzIEludGVyYWN0YWJsZSAqL1xuICAgIEludGVyYWN0YWJsZSwgLy8gdHNsaW50OmRpc2FibGUtbGluZSBuby1zaGFkb3dlZC12YXJpYWJsZVxuICAgIGludGVyYWN0aW9ucyxcbiAgICBkZWZhdWx0cyxcbiAgfSA9IHNjb3BlXG5cbiAgLy8gTGVzcyBQcmVjaXNpb24gd2l0aCB0b3VjaCBpbnB1dFxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCduZXcnLCAoaW50ZXJhY3Rpb24pID0+IHtcbiAgICBpbnRlcmFjdGlvbi5yZXNpemVBeGVzID0gJ3h5J1xuICB9KVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tc3RhcnQnLCBzdGFydClcbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2FjdGlvbi1tb3ZlJywgbW92ZSlcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYWN0aW9uLXN0YXJ0JywgdXBkYXRlRXZlbnRBeGVzKVxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYWN0aW9uLW1vdmUnLCB1cGRhdGVFdmVudEF4ZXMpXG5cbiAgcmVzaXplLmN1cnNvcnMgPSBpbml0Q3Vyc29ycyhicm93c2VyKVxuICByZXNpemUuZGVmYXVsdE1hcmdpbiA9IGJyb3dzZXIuc3VwcG9ydHNUb3VjaCB8fCBicm93c2VyLnN1cHBvcnRzUG9pbnRlckV2ZW50ID8gMjAgOiAxMFxuXG4gIC8qKlxuICAgKiBgYGBqc1xuICAgKiBpbnRlcmFjdChlbGVtZW50KS5yZXNpemFibGUoe1xuICAgKiAgIG9uc3RhcnQ6IGZ1bmN0aW9uIChldmVudCkge30sXG4gICAqICAgb25tb3ZlIDogZnVuY3Rpb24gKGV2ZW50KSB7fSxcbiAgICogICBvbmVuZCAgOiBmdW5jdGlvbiAoZXZlbnQpIHt9LFxuICAgKlxuICAgKiAgIGVkZ2VzOiB7XG4gICAqICAgICB0b3AgICA6IHRydWUsICAgICAgIC8vIFVzZSBwb2ludGVyIGNvb3JkcyB0byBjaGVjayBmb3IgcmVzaXplLlxuICAgKiAgICAgbGVmdCAgOiBmYWxzZSwgICAgICAvLyBEaXNhYmxlIHJlc2l6aW5nIGZyb20gbGVmdCBlZGdlLlxuICAgKiAgICAgYm90dG9tOiAnLnJlc2l6ZS1zJywvLyBSZXNpemUgaWYgcG9pbnRlciB0YXJnZXQgbWF0Y2hlcyBzZWxlY3RvclxuICAgKiAgICAgcmlnaHQgOiBoYW5kbGVFbCAgICAvLyBSZXNpemUgaWYgcG9pbnRlciB0YXJnZXQgaXMgdGhlIGdpdmVuIEVsZW1lbnRcbiAgICogICB9LFxuICAgKlxuICAgKiAgICAgLy8gV2lkdGggYW5kIGhlaWdodCBjYW4gYmUgYWRqdXN0ZWQgaW5kZXBlbmRlbnRseS4gV2hlbiBgdHJ1ZWAsIHdpZHRoIGFuZFxuICAgKiAgICAgLy8gaGVpZ2h0IGFyZSBhZGp1c3RlZCBhdCBhIDE6MSByYXRpby5cbiAgICogICAgIHNxdWFyZTogZmFsc2UsXG4gICAqXG4gICAqICAgICAvLyBXaWR0aCBhbmQgaGVpZ2h0IGNhbiBiZSBhZGp1c3RlZCBpbmRlcGVuZGVudGx5LiBXaGVuIGB0cnVlYCwgd2lkdGggYW5kXG4gICAqICAgICAvLyBoZWlnaHQgbWFpbnRhaW4gdGhlIGFzcGVjdCByYXRpbyB0aGV5IGhhZCB3aGVuIHJlc2l6aW5nIHN0YXJ0ZWQuXG4gICAqICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvOiBmYWxzZSxcbiAgICpcbiAgICogICAvLyBhIHZhbHVlIG9mICdub25lJyB3aWxsIGxpbWl0IHRoZSByZXNpemUgcmVjdCB0byBhIG1pbmltdW0gb2YgMHgwXG4gICAqICAgLy8gJ25lZ2F0ZScgd2lsbCBhbGxvdyB0aGUgcmVjdCB0byBoYXZlIG5lZ2F0aXZlIHdpZHRoL2hlaWdodFxuICAgKiAgIC8vICdyZXBvc2l0aW9uJyB3aWxsIGtlZXAgdGhlIHdpZHRoL2hlaWdodCBwb3NpdGl2ZSBieSBzd2FwcGluZ1xuICAgKiAgIC8vIHRoZSB0b3AgYW5kIGJvdHRvbSBlZGdlcyBhbmQvb3Igc3dhcHBpbmcgdGhlIGxlZnQgYW5kIHJpZ2h0IGVkZ2VzXG4gICAqICAgaW52ZXJ0OiAnbm9uZScgfHwgJ25lZ2F0ZScgfHwgJ3JlcG9zaXRpb24nXG4gICAqXG4gICAqICAgLy8gbGltaXQgbXVsdGlwbGUgcmVzaXplcy5cbiAgICogICAvLyBTZWUgdGhlIGV4cGxhbmF0aW9uIGluIHRoZSB7QGxpbmsgSW50ZXJhY3RhYmxlLmRyYWdnYWJsZX0gZXhhbXBsZVxuICAgKiAgIG1heDogSW5maW5pdHksXG4gICAqICAgbWF4UGVyRWxlbWVudDogMSxcbiAgICogfSk7XG4gICAqXG4gICAqIHZhciBpc1Jlc2l6ZWFibGUgPSBpbnRlcmFjdChlbGVtZW50KS5yZXNpemFibGUoKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHJlc2l6ZSBhY3Rpb25zIGNhbiBiZSBwZXJmb3JtZWQgb24gdGhlIHRhcmdldFxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW4gfCBvYmplY3R9IFtvcHRpb25zXSB0cnVlL2ZhbHNlIG9yIEFuIG9iamVjdCB3aXRoIGV2ZW50XG4gICAqIGxpc3RlbmVycyB0byBiZSBmaXJlZCBvbiByZXNpemUgZXZlbnRzIChvYmplY3QgbWFrZXMgdGhlIEludGVyYWN0YWJsZVxuICAgKiByZXNpemFibGUpXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBJbnRlcmFjdGFibGV9IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoaXMgY2FuIGJlIHRoZVxuICAgKiB0YXJnZXQgb2YgcmVzaXplIGVsZW1lbnRzLCBvciB0aGlzIEludGVyYWN0YWJsZVxuICAgKi9cbiAgSW50ZXJhY3RhYmxlLnByb3RvdHlwZS5yZXNpemFibGUgPSBmdW5jdGlvbiAodGhpczogSW50ZXJhY3QuSW50ZXJhY3RhYmxlLCBvcHRpb25zOiBJbnRlcmFjdC5SZXN0cmljdE9wdGlvbiB8IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gcmVzaXphYmxlKHRoaXMsIG9wdGlvbnMsIHNjb3BlKVxuICB9XG5cbiAgYWN0aW9uc1tBY3Rpb25OYW1lLlJlc2l6ZV0gPSByZXNpemVcbiAgYWN0aW9ucy5uYW1lcy5wdXNoKEFjdGlvbk5hbWUuUmVzaXplKVxuICB1dGlscy5hcnIubWVyZ2UoYWN0aW9ucy5ldmVudFR5cGVzLCBbXG4gICAgJ3Jlc2l6ZXN0YXJ0JyxcbiAgICAncmVzaXplbW92ZScsXG4gICAgJ3Jlc2l6ZWluZXJ0aWFzdGFydCcsXG4gICAgJ3Jlc2l6ZXJlc3VtZScsXG4gICAgJ3Jlc2l6ZWVuZCcsXG4gIF0pXG4gIGFjdGlvbnMubWV0aG9kRGljdC5yZXNpemUgPSAncmVzaXphYmxlJ1xuXG4gIGRlZmF1bHRzLmFjdGlvbnMucmVzaXplID0gcmVzaXplLmRlZmF1bHRzXG59XG5cbmNvbnN0IHJlc2l6ZSA9IHtcbiAgaW5zdGFsbCxcbiAgZGVmYXVsdHM6IHtcbiAgICBzcXVhcmU6IGZhbHNlLFxuICAgIHByZXNlcnZlQXNwZWN0UmF0aW86IGZhbHNlLFxuICAgIGF4aXM6ICd4eScsXG5cbiAgICAvLyB1c2UgZGVmYXVsdCBtYXJnaW5cbiAgICBtYXJnaW46IE5hTixcblxuICAgIC8vIG9iamVjdCB3aXRoIHByb3BzIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSB3aGljaCBhcmVcbiAgICAvLyB0cnVlL2ZhbHNlIHZhbHVlcyB0byByZXNpemUgd2hlbiB0aGUgcG9pbnRlciBpcyBvdmVyIHRoYXQgZWRnZSxcbiAgICAvLyBDU1Mgc2VsZWN0b3JzIHRvIG1hdGNoIHRoZSBoYW5kbGVzIGZvciBlYWNoIGRpcmVjdGlvblxuICAgIC8vIG9yIHRoZSBFbGVtZW50cyBmb3IgZWFjaCBoYW5kbGVcbiAgICBlZGdlczogbnVsbCxcblxuICAgIC8vIGEgdmFsdWUgb2YgJ25vbmUnIHdpbGwgbGltaXQgdGhlIHJlc2l6ZSByZWN0IHRvIGEgbWluaW11bSBvZiAweDBcbiAgICAvLyAnbmVnYXRlJyB3aWxsIGFsb3cgdGhlIHJlY3QgdG8gaGF2ZSBuZWdhdGl2ZSB3aWR0aC9oZWlnaHRcbiAgICAvLyAncmVwb3NpdGlvbicgd2lsbCBrZWVwIHRoZSB3aWR0aC9oZWlnaHQgcG9zaXRpdmUgYnkgc3dhcHBpbmdcbiAgICAvLyB0aGUgdG9wIGFuZCBib3R0b20gZWRnZXMgYW5kL29yIHN3YXBwaW5nIHRoZSBsZWZ0IGFuZCByaWdodCBlZGdlc1xuICAgIGludmVydDogJ25vbmUnLFxuICB9IGFzIEludGVyYWN0LlJlc2l6YWJsZU9wdGlvbnMsXG5cbiAgY2hlY2tlciAoXG4gICAgX3BvaW50ZXI6IEludGVyYWN0LlBvaW50ZXJUeXBlLFxuICAgIF9ldmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZSxcbiAgICBpbnRlcmFjdGFibGU6IEludGVyYWN0LkludGVyYWN0YWJsZSxcbiAgICBlbGVtZW50OiBFbGVtZW50LFxuICAgIGludGVyYWN0aW9uOiBJbnRlcmFjdGlvbixcbiAgICByZWN0OiBJbnRlcmFjdC5SZWN0XG4gICkge1xuICAgIGlmICghcmVjdCkgeyByZXR1cm4gbnVsbCB9XG5cbiAgICBjb25zdCBwYWdlID0gdXRpbHMuZXh0ZW5kKHt9LCBpbnRlcmFjdGlvbi5jb29yZHMuY3VyLnBhZ2UpXG4gICAgY29uc3Qgb3B0aW9ucyA9IGludGVyYWN0YWJsZS5vcHRpb25zXG5cbiAgICBpZiAob3B0aW9ucy5yZXNpemUuZW5hYmxlZCkge1xuICAgICAgY29uc3QgcmVzaXplT3B0aW9ucyA9IG9wdGlvbnMucmVzaXplXG4gICAgICBjb25zdCByZXNpemVFZGdlczogeyBbZWRnZTogc3RyaW5nXTogYm9vbGVhbiB9ID0geyBsZWZ0OiBmYWxzZSwgcmlnaHQ6IGZhbHNlLCB0b3A6IGZhbHNlLCBib3R0b206IGZhbHNlIH1cblxuICAgICAgLy8gaWYgdXNpbmcgcmVzaXplLmVkZ2VzXG4gICAgICBpZiAodXRpbHMuaXMub2JqZWN0KHJlc2l6ZU9wdGlvbnMuZWRnZXMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZWRnZSBpbiByZXNpemVFZGdlcykge1xuICAgICAgICAgIHJlc2l6ZUVkZ2VzW2VkZ2VdID0gY2hlY2tSZXNpemVFZGdlKGVkZ2UsXG4gICAgICAgICAgICByZXNpemVPcHRpb25zLmVkZ2VzW2VkZ2VdLFxuICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgIGludGVyYWN0aW9uLl9sYXRlc3RQb2ludGVyLmV2ZW50VGFyZ2V0LFxuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIHJlY3QsXG4gICAgICAgICAgICByZXNpemVPcHRpb25zLm1hcmdpbiB8fCB0aGlzLmRlZmF1bHRNYXJnaW4pXG4gICAgICAgIH1cblxuICAgICAgICByZXNpemVFZGdlcy5sZWZ0ID0gcmVzaXplRWRnZXMubGVmdCAmJiAhcmVzaXplRWRnZXMucmlnaHRcbiAgICAgICAgcmVzaXplRWRnZXMudG9wICA9IHJlc2l6ZUVkZ2VzLnRvcCAgJiYgIXJlc2l6ZUVkZ2VzLmJvdHRvbVxuXG4gICAgICAgIGlmIChyZXNpemVFZGdlcy5sZWZ0IHx8IHJlc2l6ZUVkZ2VzLnJpZ2h0IHx8IHJlc2l6ZUVkZ2VzLnRvcCB8fCByZXNpemVFZGdlcy5ib3R0b20pIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogJ3Jlc2l6ZScsXG4gICAgICAgICAgICBlZGdlczogcmVzaXplRWRnZXMsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgcmlnaHQgID0gb3B0aW9ucy5yZXNpemUuYXhpcyAhPT0gJ3knICYmIHBhZ2UueCA+IChyZWN0LnJpZ2h0ICAtIHRoaXMuZGVmYXVsdE1hcmdpbilcbiAgICAgICAgY29uc3QgYm90dG9tID0gb3B0aW9ucy5yZXNpemUuYXhpcyAhPT0gJ3gnICYmIHBhZ2UueSA+IChyZWN0LmJvdHRvbSAtIHRoaXMuZGVmYXVsdE1hcmdpbilcblxuICAgICAgICBpZiAocmlnaHQgfHwgYm90dG9tKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6ICdyZXNpemUnLFxuICAgICAgICAgICAgYXhlczogKHJpZ2h0ID8gJ3gnIDogJycpICsgKGJvdHRvbSA/ICd5JyA6ICcnKSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9LFxuXG4gIGN1cnNvcnM6IG51bGwgYXMgdW5rbm93biBhcyBSZXR1cm5UeXBlPHR5cGVvZiBpbml0Q3Vyc29ycz4sXG5cbiAgZ2V0Q3Vyc29yIChhY3Rpb246IEFjdGlvbikge1xuICAgIGNvbnN0IGN1cnNvcnMgPSByZXNpemUuY3Vyc29ycyBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG4gICAgaWYgKGFjdGlvbi5heGlzKSB7XG4gICAgICByZXR1cm4gY3Vyc29yc1thY3Rpb24ubmFtZSArIGFjdGlvbi5heGlzXVxuICAgIH1cbiAgICBlbHNlIGlmIChhY3Rpb24uZWRnZXMpIHtcbiAgICAgIGxldCBjdXJzb3JLZXkgPSAnJ1xuICAgICAgY29uc3QgZWRnZU5hbWVzID0gWyd0b3AnLCAnYm90dG9tJywgJ2xlZnQnLCAncmlnaHQnXVxuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICBpZiAoYWN0aW9uLmVkZ2VzW2VkZ2VOYW1lc1tpXV0pIHtcbiAgICAgICAgICBjdXJzb3JLZXkgKz0gZWRnZU5hbWVzW2ldXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGN1cnNvcnNbY3Vyc29yS2V5XVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH0sXG5cbiAgZGVmYXVsdE1hcmdpbjogbnVsbCBhcyB1bmtub3duIGFzIG51bWJlcixcbn1cblxuZnVuY3Rpb24gcmVzaXphYmxlIChpbnRlcmFjdGFibGU6IEludGVyYWN0LkludGVyYWN0YWJsZSwgb3B0aW9uczogSW50ZXJhY3QuT3JCb29sZWFuPEludGVyYWN0LlJlc2l6YWJsZU9wdGlvbnM+IHwgYm9vbGVhbiwgc2NvcGU6IFNjb3BlKSB7XG4gIGlmICh1dGlscy5pcy5vYmplY3Qob3B0aW9ucykpIHtcbiAgICBpbnRlcmFjdGFibGUub3B0aW9ucy5yZXNpemUuZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2VcbiAgICBpbnRlcmFjdGFibGUuc2V0UGVyQWN0aW9uKCdyZXNpemUnLCBvcHRpb25zKVxuICAgIGludGVyYWN0YWJsZS5zZXRPbkV2ZW50cygncmVzaXplJywgb3B0aW9ucylcblxuICAgIGlmICgvXngkfF55JHxeeHkkLy50ZXN0KG9wdGlvbnMuYXhpcyBhcyBzdHJpbmcpKSB7XG4gICAgICBpbnRlcmFjdGFibGUub3B0aW9ucy5yZXNpemUuYXhpcyA9IG9wdGlvbnMuYXhpc1xuICAgIH1cbiAgICBlbHNlIGlmIChvcHRpb25zLmF4aXMgPT09IG51bGwpIHtcbiAgICAgIGludGVyYWN0YWJsZS5vcHRpb25zLnJlc2l6ZS5heGlzID0gc2NvcGUuZGVmYXVsdHMuYWN0aW9ucy5yZXNpemUuYXhpc1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pcy5ib29sKG9wdGlvbnMucHJlc2VydmVBc3BlY3RSYXRpbykpIHtcbiAgICAgIGludGVyYWN0YWJsZS5vcHRpb25zLnJlc2l6ZS5wcmVzZXJ2ZUFzcGVjdFJhdGlvID0gb3B0aW9ucy5wcmVzZXJ2ZUFzcGVjdFJhdGlvXG4gICAgfVxuICAgIGVsc2UgaWYgKHV0aWxzLmlzLmJvb2wob3B0aW9ucy5zcXVhcmUpKSB7XG4gICAgICBpbnRlcmFjdGFibGUub3B0aW9ucy5yZXNpemUuc3F1YXJlID0gb3B0aW9ucy5zcXVhcmVcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJhY3RhYmxlXG4gIH1cbiAgaWYgKHV0aWxzLmlzLmJvb2wob3B0aW9ucykpIHtcbiAgICBpbnRlcmFjdGFibGUub3B0aW9ucy5yZXNpemUuZW5hYmxlZCA9IG9wdGlvbnNcblxuICAgIHJldHVybiBpbnRlcmFjdGFibGVcbiAgfVxuICByZXR1cm4gaW50ZXJhY3RhYmxlLm9wdGlvbnMucmVzaXplXG59XG5cbmZ1bmN0aW9uIGNoZWNrUmVzaXplRWRnZSAobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBwYWdlOiBJbnRlcmFjdC5Qb2ludCwgZWxlbWVudDogTm9kZSwgaW50ZXJhY3RhYmxlRWxlbWVudDogRWxlbWVudCwgcmVjdDogSW50ZXJhY3QuUmVjdCwgbWFyZ2luOiBudW1iZXIpIHtcbiAgLy8gZmFsc2UsICcnLCB1bmRlZmluZWQsIG51bGxcbiAgaWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2UgfVxuXG4gIC8vIHRydWUgdmFsdWUsIHVzZSBwb2ludGVyIGNvb3JkcyBhbmQgZWxlbWVudCByZWN0XG4gIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgIC8vIGlmIGRpbWVuc2lvbnMgYXJlIG5lZ2F0aXZlLCBcInN3aXRjaFwiIGVkZ2VzXG4gICAgY29uc3Qgd2lkdGggID0gdXRpbHMuaXMubnVtYmVyKHJlY3Qud2lkdGgpID8gcmVjdC53aWR0aCAgOiByZWN0LnJpZ2h0ICAtIHJlY3QubGVmdFxuICAgIGNvbnN0IGhlaWdodCA9IHV0aWxzLmlzLm51bWJlcihyZWN0LmhlaWdodCkgPyByZWN0LmhlaWdodCA6IHJlY3QuYm90dG9tIC0gcmVjdC50b3BcblxuICAgIC8vIGRvbid0IHVzZSBtYXJnaW4gZ3JlYXRlciB0aGFuIGhhbGYgdGhlIHJlbGV2ZW50IGRpbWVuc2lvblxuICAgIG1hcmdpbiA9IE1hdGgubWluKG1hcmdpbiwgKG5hbWUgPT09ICdsZWZ0JyB8fCBuYW1lID09PSAncmlnaHQnID8gd2lkdGggOiBoZWlnaHQpIC8gMilcblxuICAgIGlmICh3aWR0aCA8IDApIHtcbiAgICAgIGlmICAgICAgKG5hbWUgPT09ICdsZWZ0JykgIHsgbmFtZSA9ICdyaWdodCcgfVxuICAgICAgZWxzZSBpZiAobmFtZSA9PT0gJ3JpZ2h0JykgeyBuYW1lID0gJ2xlZnQnICB9XG4gICAgfVxuICAgIGlmIChoZWlnaHQgPCAwKSB7XG4gICAgICBpZiAgICAgIChuYW1lID09PSAndG9wJykgICAgeyBuYW1lID0gJ2JvdHRvbScgfVxuICAgICAgZWxzZSBpZiAobmFtZSA9PT0gJ2JvdHRvbScpIHsgbmFtZSA9ICd0b3AnICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmFtZSA9PT0gJ2xlZnQnKSB7IHJldHVybiBwYWdlLnggPCAoKHdpZHRoICA+PSAwID8gcmVjdC5sZWZ0IDogcmVjdC5yaWdodCkgKyBtYXJnaW4pIH1cbiAgICBpZiAobmFtZSA9PT0gJ3RvcCcpIHsgcmV0dXJuIHBhZ2UueSA8ICgoaGVpZ2h0ID49IDAgPyByZWN0LnRvcCA6IHJlY3QuYm90dG9tKSArIG1hcmdpbikgfVxuXG4gICAgaWYgKG5hbWUgPT09ICdyaWdodCcpIHsgcmV0dXJuIHBhZ2UueCA+ICgod2lkdGggID49IDAgPyByZWN0LnJpZ2h0IDogcmVjdC5sZWZ0KSAtIG1hcmdpbikgfVxuICAgIGlmIChuYW1lID09PSAnYm90dG9tJykgeyByZXR1cm4gcGFnZS55ID4gKChoZWlnaHQgPj0gMCA/IHJlY3QuYm90dG9tIDogcmVjdC50b3ApIC0gbWFyZ2luKSB9XG4gIH1cblxuICAvLyB0aGUgcmVtYWluaW5nIGNoZWNrcyByZXF1aXJlIGFuIGVsZW1lbnRcbiAgaWYgKCF1dGlscy5pcy5lbGVtZW50KGVsZW1lbnQpKSB7IHJldHVybiBmYWxzZSB9XG5cbiAgcmV0dXJuIHV0aWxzLmlzLmVsZW1lbnQodmFsdWUpXG4gIC8vIHRoZSB2YWx1ZSBpcyBhbiBlbGVtZW50IHRvIHVzZSBhcyBhIHJlc2l6ZSBoYW5kbGVcbiAgICA/IHZhbHVlID09PSBlbGVtZW50XG4gICAgLy8gb3RoZXJ3aXNlIGNoZWNrIGlmIGVsZW1lbnQgbWF0Y2hlcyB2YWx1ZSBhcyBzZWxlY3RvclxuICAgIDogdXRpbHMuZG9tLm1hdGNoZXNVcFRvKGVsZW1lbnQsIHZhbHVlLCBpbnRlcmFjdGFibGVFbGVtZW50KVxufVxuXG5mdW5jdGlvbiBpbml0Q3Vyc29ycyAoYnJvd3NlcjogdHlwZW9mIGltcG9ydCAoJ0BpbnRlcmFjdGpzL3V0aWxzL2Jyb3dzZXInKS5kZWZhdWx0KSB7XG4gIHJldHVybiAoYnJvd3Nlci5pc0llOSA/IHtcbiAgICB4IDogJ2UtcmVzaXplJyxcbiAgICB5IDogJ3MtcmVzaXplJyxcbiAgICB4eTogJ3NlLXJlc2l6ZScsXG5cbiAgICB0b3AgICAgICAgIDogJ24tcmVzaXplJyxcbiAgICBsZWZ0ICAgICAgIDogJ3ctcmVzaXplJyxcbiAgICBib3R0b20gICAgIDogJ3MtcmVzaXplJyxcbiAgICByaWdodCAgICAgIDogJ2UtcmVzaXplJyxcbiAgICB0b3BsZWZ0ICAgIDogJ3NlLXJlc2l6ZScsXG4gICAgYm90dG9tcmlnaHQ6ICdzZS1yZXNpemUnLFxuICAgIHRvcHJpZ2h0ICAgOiAnbmUtcmVzaXplJyxcbiAgICBib3R0b21sZWZ0IDogJ25lLXJlc2l6ZScsXG4gIH0gOiB7XG4gICAgeCA6ICdldy1yZXNpemUnLFxuICAgIHkgOiAnbnMtcmVzaXplJyxcbiAgICB4eTogJ253c2UtcmVzaXplJyxcblxuICAgIHRvcCAgICAgICAgOiAnbnMtcmVzaXplJyxcbiAgICBsZWZ0ICAgICAgIDogJ2V3LXJlc2l6ZScsXG4gICAgYm90dG9tICAgICA6ICducy1yZXNpemUnLFxuICAgIHJpZ2h0ICAgICAgOiAnZXctcmVzaXplJyxcbiAgICB0b3BsZWZ0ICAgIDogJ253c2UtcmVzaXplJyxcbiAgICBib3R0b21yaWdodDogJ253c2UtcmVzaXplJyxcbiAgICB0b3ByaWdodCAgIDogJ25lc3ctcmVzaXplJyxcbiAgICBib3R0b21sZWZ0IDogJ25lc3ctcmVzaXplJyxcbiAgfSlcbn1cblxuZnVuY3Rpb24gc3RhcnQgKHsgaUV2ZW50LCBpbnRlcmFjdGlvbiB9KSB7XG4gIGlmIChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lICE9PSAncmVzaXplJyB8fCAhaW50ZXJhY3Rpb24ucHJlcGFyZWQuZWRnZXMpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHN0YXJ0UmVjdCA9IGludGVyYWN0aW9uLnRhcmdldC5nZXRSZWN0KGludGVyYWN0aW9uLmVsZW1lbnQpXG4gIGNvbnN0IHJlc2l6ZU9wdGlvbnMgPSBpbnRlcmFjdGlvbi50YXJnZXQub3B0aW9ucy5yZXNpemVcblxuICAvKlxuICAgKiBXaGVuIHVzaW5nIHRoZSBgcmVzaXphYmxlLnNxdWFyZWAgb3IgYHJlc2l6YWJsZS5wcmVzZXJ2ZUFzcGVjdFJhdGlvYCBvcHRpb25zLCByZXNpemluZyBmcm9tIG9uZSBlZGdlXG4gICAqIHdpbGwgYWZmZWN0IGFub3RoZXIuIEUuZy4gd2l0aCBgcmVzaXphYmxlLnNxdWFyZWAsIHJlc2l6aW5nIHRvIG1ha2UgdGhlIHJpZ2h0IGVkZ2UgbGFyZ2VyIHdpbGwgbWFrZVxuICAgKiB0aGUgYm90dG9tIGVkZ2UgbGFyZ2VyIGJ5IHRoZSBzYW1lIGFtb3VudC4gV2UgY2FsbCB0aGVzZSAnbGlua2VkJyBlZGdlcy4gQW55IGxpbmtlZCBlZGdlcyB3aWxsIGRlcGVuZFxuICAgKiBvbiB0aGUgYWN0aXZlIGVkZ2VzIGFuZCB0aGUgZWRnZSBiZWluZyBpbnRlcmFjdGVkIHdpdGguXG4gICAqL1xuICBpZiAocmVzaXplT3B0aW9ucy5zcXVhcmUgfHwgcmVzaXplT3B0aW9ucy5wcmVzZXJ2ZUFzcGVjdFJhdGlvKSB7XG4gICAgY29uc3QgbGlua2VkRWRnZXMgPSB1dGlscy5leHRlbmQoe30sIGludGVyYWN0aW9uLnByZXBhcmVkLmVkZ2VzKVxuXG4gICAgbGlua2VkRWRnZXMudG9wICAgID0gbGlua2VkRWRnZXMudG9wICAgIHx8IChsaW5rZWRFZGdlcy5sZWZ0ICAgJiYgIWxpbmtlZEVkZ2VzLmJvdHRvbSlcbiAgICBsaW5rZWRFZGdlcy5sZWZ0ICAgPSBsaW5rZWRFZGdlcy5sZWZ0ICAgfHwgKGxpbmtlZEVkZ2VzLnRvcCAgICAmJiAhbGlua2VkRWRnZXMucmlnaHQpXG4gICAgbGlua2VkRWRnZXMuYm90dG9tID0gbGlua2VkRWRnZXMuYm90dG9tIHx8IChsaW5rZWRFZGdlcy5yaWdodCAgJiYgIWxpbmtlZEVkZ2VzLnRvcClcbiAgICBsaW5rZWRFZGdlcy5yaWdodCAgPSBsaW5rZWRFZGdlcy5yaWdodCAgfHwgKGxpbmtlZEVkZ2VzLmJvdHRvbSAmJiAhbGlua2VkRWRnZXMubGVmdClcblxuICAgIGludGVyYWN0aW9uLnByZXBhcmVkLl9saW5rZWRFZGdlcyA9IGxpbmtlZEVkZ2VzXG4gIH1cbiAgZWxzZSB7XG4gICAgaW50ZXJhY3Rpb24ucHJlcGFyZWQuX2xpbmtlZEVkZ2VzID0gbnVsbFxuICB9XG5cbiAgLy8gaWYgdXNpbmcgYHJlc2l6YWJsZS5wcmVzZXJ2ZUFzcGVjdFJhdGlvYCBvcHRpb24sIHJlY29yZCBhc3BlY3QgcmF0aW8gYXQgdGhlIHN0YXJ0IG9mIHRoZSByZXNpemVcbiAgaWYgKHJlc2l6ZU9wdGlvbnMucHJlc2VydmVBc3BlY3RSYXRpbykge1xuICAgIGludGVyYWN0aW9uLnJlc2l6ZVN0YXJ0QXNwZWN0UmF0aW8gPSBzdGFydFJlY3Qud2lkdGggLyBzdGFydFJlY3QuaGVpZ2h0XG4gIH1cblxuICBpbnRlcmFjdGlvbi5yZXNpemVSZWN0cyA9IHtcbiAgICBzdGFydCAgICAgOiBzdGFydFJlY3QsXG4gICAgY3VycmVudCAgIDogdXRpbHMuZXh0ZW5kKHt9LCBzdGFydFJlY3QpLFxuICAgIGludmVydGVkICA6IHV0aWxzLmV4dGVuZCh7fSwgc3RhcnRSZWN0KSxcbiAgICBwcmV2aW91cyAgOiB1dGlscy5leHRlbmQoe30sIHN0YXJ0UmVjdCksXG4gICAgZGVsdGEgICAgIDoge1xuICAgICAgbGVmdDogMCxcbiAgICAgIHJpZ2h0IDogMCxcbiAgICAgIHdpZHRoIDogMCxcbiAgICAgIHRvcCA6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgfSxcbiAgfVxuXG4gIGlFdmVudC5yZWN0ID0gaW50ZXJhY3Rpb24ucmVzaXplUmVjdHMuaW52ZXJ0ZWRcbiAgaUV2ZW50LmRlbHRhUmVjdCA9IGludGVyYWN0aW9uLnJlc2l6ZVJlY3RzLmRlbHRhXG59XG5cbmZ1bmN0aW9uIG1vdmUgKHsgaUV2ZW50LCBpbnRlcmFjdGlvbiB9KSB7XG4gIGlmIChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lICE9PSAncmVzaXplJyB8fCAhaW50ZXJhY3Rpb24ucHJlcGFyZWQuZWRnZXMpIHsgcmV0dXJuIH1cblxuICBjb25zdCByZXNpemVPcHRpb25zID0gaW50ZXJhY3Rpb24udGFyZ2V0Lm9wdGlvbnMucmVzaXplXG4gIGNvbnN0IGludmVydCA9IHJlc2l6ZU9wdGlvbnMuaW52ZXJ0XG4gIGNvbnN0IGludmVydGlibGUgPSBpbnZlcnQgPT09ICdyZXBvc2l0aW9uJyB8fCBpbnZlcnQgPT09ICduZWdhdGUnXG5cbiAgbGV0IGVkZ2VzID0gaW50ZXJhY3Rpb24ucHJlcGFyZWQuZWRnZXNcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG4gIGNvbnN0IHN0YXJ0ICAgICAgPSBpbnRlcmFjdGlvbi5yZXNpemVSZWN0cy5zdGFydFxuICBjb25zdCBjdXJyZW50ICAgID0gaW50ZXJhY3Rpb24ucmVzaXplUmVjdHMuY3VycmVudFxuICBjb25zdCBpbnZlcnRlZCAgID0gaW50ZXJhY3Rpb24ucmVzaXplUmVjdHMuaW52ZXJ0ZWRcbiAgY29uc3QgZGVsdGFSZWN0ICA9IGludGVyYWN0aW9uLnJlc2l6ZVJlY3RzLmRlbHRhXG4gIGNvbnN0IHByZXZpb3VzICAgPSB1dGlscy5leHRlbmQoaW50ZXJhY3Rpb24ucmVzaXplUmVjdHMucHJldmlvdXMsIGludmVydGVkKVxuICBjb25zdCBvcmlnaW5hbEVkZ2VzID0gZWRnZXNcblxuICBjb25zdCBldmVudERlbHRhID0gdXRpbHMuZXh0ZW5kKHt9LCBpRXZlbnQuZGVsdGEpXG5cbiAgaWYgKHJlc2l6ZU9wdGlvbnMucHJlc2VydmVBc3BlY3RSYXRpbyB8fCByZXNpemVPcHRpb25zLnNxdWFyZSkge1xuICAgIC8vIGByZXNpemUucHJlc2VydmVBc3BlY3RSYXRpb2AgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGByZXNpemUuc3F1YXJlYFxuICAgIGNvbnN0IHN0YXJ0QXNwZWN0UmF0aW8gPSByZXNpemVPcHRpb25zLnByZXNlcnZlQXNwZWN0UmF0aW9cbiAgICAgID8gaW50ZXJhY3Rpb24ucmVzaXplU3RhcnRBc3BlY3RSYXRpb1xuICAgICAgOiAxXG5cbiAgICBlZGdlcyA9IGludGVyYWN0aW9uLnByZXBhcmVkLl9saW5rZWRFZGdlc1xuXG4gICAgaWYgKChvcmlnaW5hbEVkZ2VzLmxlZnQgJiYgb3JpZ2luYWxFZGdlcy5ib3R0b20pIHx8XG4gICAgICAgIChvcmlnaW5hbEVkZ2VzLnJpZ2h0ICYmIG9yaWdpbmFsRWRnZXMudG9wKSkge1xuICAgICAgZXZlbnREZWx0YS55ID0gLWV2ZW50RGVsdGEueCAvIHN0YXJ0QXNwZWN0UmF0aW9cbiAgICB9XG4gICAgZWxzZSBpZiAob3JpZ2luYWxFZGdlcy5sZWZ0IHx8IG9yaWdpbmFsRWRnZXMucmlnaHQpIHsgZXZlbnREZWx0YS55ID0gZXZlbnREZWx0YS54IC8gc3RhcnRBc3BlY3RSYXRpbyB9XG4gICAgZWxzZSBpZiAob3JpZ2luYWxFZGdlcy50b3AgIHx8IG9yaWdpbmFsRWRnZXMuYm90dG9tKSB7IGV2ZW50RGVsdGEueCA9IGV2ZW50RGVsdGEueSAqIHN0YXJ0QXNwZWN0UmF0aW8gfVxuICB9XG5cbiAgLy8gdXBkYXRlIHRoZSAnY3VycmVudCcgcmVjdCB3aXRob3V0IG1vZGlmaWNhdGlvbnNcbiAgaWYgKGVkZ2VzLnRvcCkgeyBjdXJyZW50LnRvcCAgICArPSBldmVudERlbHRhLnkgfVxuICBpZiAoZWRnZXMuYm90dG9tKSB7IGN1cnJlbnQuYm90dG9tICs9IGV2ZW50RGVsdGEueSB9XG4gIGlmIChlZGdlcy5sZWZ0KSB7IGN1cnJlbnQubGVmdCAgICs9IGV2ZW50RGVsdGEueCB9XG4gIGlmIChlZGdlcy5yaWdodCkgeyBjdXJyZW50LnJpZ2h0ICArPSBldmVudERlbHRhLnggfVxuXG4gIGlmIChpbnZlcnRpYmxlKSB7XG4gICAgLy8gaWYgaW52ZXJ0aWJsZSwgY29weSB0aGUgY3VycmVudCByZWN0XG4gICAgdXRpbHMuZXh0ZW5kKGludmVydGVkLCBjdXJyZW50KVxuXG4gICAgaWYgKGludmVydCA9PT0gJ3JlcG9zaXRpb24nKSB7XG4gICAgICAvLyBzd2FwIGVkZ2UgdmFsdWVzIGlmIG5lY2Vzc2FyeSB0byBrZWVwIHdpZHRoL2hlaWdodCBwb3NpdGl2ZVxuICAgICAgbGV0IHN3YXBcblxuICAgICAgaWYgKGludmVydGVkLnRvcCA+IGludmVydGVkLmJvdHRvbSkge1xuICAgICAgICBzd2FwID0gaW52ZXJ0ZWQudG9wXG5cbiAgICAgICAgaW52ZXJ0ZWQudG9wID0gaW52ZXJ0ZWQuYm90dG9tXG4gICAgICAgIGludmVydGVkLmJvdHRvbSA9IHN3YXBcbiAgICAgIH1cbiAgICAgIGlmIChpbnZlcnRlZC5sZWZ0ID4gaW52ZXJ0ZWQucmlnaHQpIHtcbiAgICAgICAgc3dhcCA9IGludmVydGVkLmxlZnRcblxuICAgICAgICBpbnZlcnRlZC5sZWZ0ID0gaW52ZXJ0ZWQucmlnaHRcbiAgICAgICAgaW52ZXJ0ZWQucmlnaHQgPSBzd2FwXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIC8vIGlmIG5vdCBpbnZlcnRpYmxlLCByZXN0cmljdCB0byBtaW5pbXVtIG9mIDB4MCByZWN0XG4gICAgaW52ZXJ0ZWQudG9wICAgID0gTWF0aC5taW4oY3VycmVudC50b3AsIHN0YXJ0LmJvdHRvbSlcbiAgICBpbnZlcnRlZC5ib3R0b20gPSBNYXRoLm1heChjdXJyZW50LmJvdHRvbSwgc3RhcnQudG9wKVxuICAgIGludmVydGVkLmxlZnQgICA9IE1hdGgubWluKGN1cnJlbnQubGVmdCwgc3RhcnQucmlnaHQpXG4gICAgaW52ZXJ0ZWQucmlnaHQgID0gTWF0aC5tYXgoY3VycmVudC5yaWdodCwgc3RhcnQubGVmdClcbiAgfVxuXG4gIGludmVydGVkLndpZHRoICA9IGludmVydGVkLnJpZ2h0ICAtIGludmVydGVkLmxlZnRcbiAgaW52ZXJ0ZWQuaGVpZ2h0ID0gaW52ZXJ0ZWQuYm90dG9tIC0gaW52ZXJ0ZWQudG9wXG5cbiAgZm9yIChjb25zdCBlZGdlIGluIGludmVydGVkKSB7XG4gICAgZGVsdGFSZWN0W2VkZ2VdID0gaW52ZXJ0ZWRbZWRnZV0gLSBwcmV2aW91c1tlZGdlXVxuICB9XG5cbiAgaUV2ZW50LmVkZ2VzID0gaW50ZXJhY3Rpb24ucHJlcGFyZWQuZWRnZXNcbiAgaUV2ZW50LnJlY3QgPSBpbnZlcnRlZFxuICBpRXZlbnQuZGVsdGFSZWN0ID0gZGVsdGFSZWN0XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUV2ZW50QXhlcyAoeyBpbnRlcmFjdGlvbiwgaUV2ZW50LCBhY3Rpb24gfSkge1xuICBpZiAoYWN0aW9uICE9PSAncmVzaXplJyB8fCAhaW50ZXJhY3Rpb24ucmVzaXplQXhlcykgeyByZXR1cm4gfVxuXG4gIGNvbnN0IG9wdGlvbnMgPSBpbnRlcmFjdGlvbi50YXJnZXQub3B0aW9uc1xuXG4gIGlmIChvcHRpb25zLnJlc2l6ZS5zcXVhcmUpIHtcbiAgICBpZiAoaW50ZXJhY3Rpb24ucmVzaXplQXhlcyA9PT0gJ3knKSB7XG4gICAgICBpRXZlbnQuZGVsdGEueCA9IGlFdmVudC5kZWx0YS55XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaUV2ZW50LmRlbHRhLnkgPSBpRXZlbnQuZGVsdGEueFxuICAgIH1cbiAgICBpRXZlbnQuYXhlcyA9ICd4eSdcbiAgfVxuICBlbHNlIHtcbiAgICBpRXZlbnQuYXhlcyA9IGludGVyYWN0aW9uLnJlc2l6ZUF4ZXNcblxuICAgIGlmIChpbnRlcmFjdGlvbi5yZXNpemVBeGVzID09PSAneCcpIHtcbiAgICAgIGlFdmVudC5kZWx0YS55ID0gMFxuICAgIH1cbiAgICBlbHNlIGlmIChpbnRlcmFjdGlvbi5yZXNpemVBeGVzID09PSAneScpIHtcbiAgICAgIGlFdmVudC5kZWx0YS54ID0gMFxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCByZXNpemVcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVzaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQVMsTUFBTSx3QkFBd0IsQ0FBQTtBQUMxRCxPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFBO0FBK0N6QyxVQUFrQixDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUE7QUFPckMsU0FBUyxPQUFPLENBQUUsS0FBWTtJQUM1QixNQUFNLEVBQ0osT0FBTyxFQUNQLE9BQU87SUFDUCwwQkFBMEI7SUFDMUIsWUFBWSxFQUFFLDJDQUEyQztJQUN6RCxZQUFZLEVBQ1osUUFBUSxHQUNULEdBQUcsS0FBSyxDQUFBO0lBRVQsa0NBQWtDO0lBRWxDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO1FBQzdDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO0lBQy9CLENBQUMsQ0FBQyxDQUFBO0lBRUYsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQzlDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUU1QyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDLENBQUE7SUFDeEQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFBO0lBRXZELE1BQU0sQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3JDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBRXRGOzs7Ozs7Ozs7Ozs7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QUNELE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO0tBQ25CO1NBQ0k7UUFDSCxNQUFNLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUE7UUFFcEMsSUFBSSxXQUFXLENBQUMsVUFBVSxLQUFLLEdBQUcsRUFBRTtZQUNsQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7U0FDbkI7YUFDSSxJQUFJLFdBQVcsQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFO1lBQ3ZDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtTQUNuQjtLQUNGO0FBQ0gsQ0FBQztBQUVELGVBQWUsTUFBTSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uUHJvcHMsIEludGVyYWN0aW9uIH0gZnJvbSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbidcbmltcG9ydCB7IEFjdGlvbk5hbWUsIFNjb3BlIH0gZnJvbSAnQGludGVyYWN0anMvY29yZS9zY29wZSdcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzJ1xuXG5leHBvcnQgdHlwZSBFZGdlTmFtZSA9ICd0b3AnIHwgJ2xlZnQnIHwgJ2JvdHRvbScgfCAncmlnaHQnXG5cbmV4cG9ydCB0eXBlIFJlc2l6YWJsZU1ldGhvZCA9IEludGVyYWN0LkFjdGlvbk1ldGhvZDxJbnRlcmFjdC5SZXNpemFibGVPcHRpb25zPlxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGFibGUnIHtcbiAgaW50ZXJmYWNlIEludGVyYWN0YWJsZSB7XG4gICAgcmVzaXphYmxlOiBSZXNpemFibGVNZXRob2RcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbicge1xuICBpbnRlcmZhY2UgSW50ZXJhY3Rpb24ge1xuICAgIHJlc2l6ZUF4ZXM6ICd4JyB8ICd5JyB8ICd4eSdcbiAgICByZXNpemVSZWN0czoge1xuICAgICAgc3RhcnQ6IEludGVyYWN0LlJlY3RcbiAgICAgIGN1cnJlbnQ6IEludGVyYWN0LlJlY3RcbiAgICAgIGludmVydGVkOiBJbnRlcmFjdC5SZWN0XG4gICAgICBwcmV2aW91czogSW50ZXJhY3QuUmVjdFxuICAgICAgZGVsdGE6IEludGVyYWN0LlJlY3RcbiAgICB9XG4gICAgcmVzaXplU3RhcnRBc3BlY3RSYXRpbzogbnVtYmVyXG4gIH1cblxuICBpbnRlcmZhY2UgQWN0aW9uUHJvcHMge1xuICAgIF9saW5rZWRFZGdlcz86IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9XG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvZGVmYXVsdE9wdGlvbnMnIHtcbiAgaW50ZXJmYWNlIEFjdGlvbkRlZmF1bHRzIHtcbiAgICByZXNpemU6IEludGVyYWN0LlJlc2l6YWJsZU9wdGlvbnNcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9zY29wZScge1xuICBpbnRlcmZhY2UgQWN0aW9ucyB7XG4gICAgW0FjdGlvbk5hbWUuUmVzaXplXT86IHR5cGVvZiByZXNpemVcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3dcbiAgZW51bSBBY3Rpb25OYW1lIHtcbiAgICBSZXNpemUgPSAncmVzaXplJ1xuICB9XG59XG5cbihBY3Rpb25OYW1lIGFzIGFueSkuUmVzaXplID0gJ3Jlc2l6ZSdcblxuZXhwb3J0IGludGVyZmFjZSBSZXNpemVFdmVudCBleHRlbmRzIEludGVyYWN0LkludGVyYWN0RXZlbnQ8QWN0aW9uTmFtZS5SZXNpemU+IHtcbiAgZGVsdGFSZWN0PzogSW50ZXJhY3QuUmVjdFxuICByZWN0PzogSW50ZXJhY3QuUmVjdFxufVxuXG5mdW5jdGlvbiBpbnN0YWxsIChzY29wZTogU2NvcGUpIHtcbiAgY29uc3Qge1xuICAgIGFjdGlvbnMsXG4gICAgYnJvd3NlcixcbiAgICAvKiogQGxlbmRzIEludGVyYWN0YWJsZSAqL1xuICAgIEludGVyYWN0YWJsZSwgLy8gdHNsaW50OmRpc2FibGUtbGluZSBuby1zaGFkb3dlZC12YXJpYWJsZVxuICAgIGludGVyYWN0aW9ucyxcbiAgICBkZWZhdWx0cyxcbiAgfSA9IHNjb3BlXG5cbiAgLy8gTGVzcyBQcmVjaXNpb24gd2l0aCB0b3VjaCBpbnB1dFxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCduZXcnLCAoaW50ZXJhY3Rpb24pID0+IHtcbiAgICBpbnRlcmFjdGlvbi5yZXNpemVBeGVzID0gJ3h5J1xuICB9KVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tc3RhcnQnLCBzdGFydClcbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2FjdGlvbi1tb3ZlJywgbW92ZSlcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYWN0aW9uLXN0YXJ0JywgdXBkYXRlRXZlbnRBeGVzKVxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYWN0aW9uLW1vdmUnLCB1cGRhdGVFdmVudEF4ZXMpXG5cbiAgcmVzaXplLmN1cnNvcnMgPSBpbml0Q3Vyc29ycyhicm93c2VyKVxuICByZXNpemUuZGVmYXVsdE1hcmdpbiA9IGJyb3dzZXIuc3VwcG9ydHNUb3VjaCB8fCBicm93c2VyLnN1cHBvcnRzUG9pbnRlckV2ZW50ID8gMjAgOiAxMFxuXG4gIC8qKlxuICAgKiBgYGBqc1xuICAgKiBpbnRlcmFjdChlbGVtZW50KS5yZXNpemFibGUoe1xuICAgKiAgIG9uc3RhcnQ6IGZ1bmN0aW9uIChldmVudCkge30sXG4gICAqICAgb25tb3ZlIDogZnVuY3Rpb24gKGV2ZW50KSB7fSxcbiAgICogICBvbmVuZCAgOiBmdW5jdGlvbiAoZXZlbnQpIHt9LFxuICAgKlxuICAgKiAgIGVkZ2VzOiB7XG4gICAqICAgICB0b3AgICA6IHRydWUsICAgICAgIC8vIFVzZSBwb2ludGVyIGNvb3JkcyB0byBjaGVjayBmb3IgcmVzaXplLlxuICAgKiAgICAgbGVmdCAgOiBmYWxzZSwgICAgICAvLyBEaXNhYmxlIHJlc2l6aW5nIGZyb20gbGVmdCBlZGdlLlxuICAgKiAgICAgYm90dG9tOiAnLnJlc2l6ZS1zJywvLyBSZXNpemUgaWYgcG9pbnRlciB0YXJnZXQgbWF0Y2hlcyBzZWxlY3RvclxuICAgKiAgICAgcmlnaHQgOiBoYW5kbGVFbCAgICAvLyBSZXNpemUgaWYgcG9pbnRlciB0YXJnZXQgaXMgdGhlIGdpdmVuIEVsZW1lbnRcbiAgICogICB9LFxuICAgKlxuICAgKiAgICAgLy8gV2lkdGggYW5kIGhlaWdodCBjYW4gYmUgYWRqdXN0ZWQgaW5kZXBlbmRlbnRseS4gV2hlbiBgdHJ1ZWAsIHdpZHRoIGFuZFxuICAgKiAgICAgLy8gaGVpZ2h0IGFyZSBhZGp1c3RlZCBhdCBhIDE6MSByYXRpby5cbiAgICogICAgIHNxdWFyZTogZmFsc2UsXG4gICAqXG4gICAqICAgICAvLyBXaWR0aCBhbmQgaGVpZ2h0IGNhbiBiZSBhZGp1c3RlZCBpbmRlcGVuZGVudGx5LiBXaGVuIGB0cnVlYCwgd2lkdGggYW5kXG4gICAqICAgICAvLyBoZWlnaHQgbWFpbnRhaW4gdGhlIGFzcGVjdCByYXRpbyB0aGV5IGhhZCB3aGVuIHJlc2l6aW5nIHN0YXJ0ZWQuXG4gICAqICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvOiBmYWxzZSxcbiAgICpcbiAgICogICAvLyBhIHZhbHVlIG9mICdub25lJyB3aWxsIGxpbWl0IHRoZSByZXNpemUgcmVjdCB0byBhIG1pbmltdW0gb2YgMHgwXG4gICAqICAgLy8gJ25lZ2F0ZScgd2lsbCBhbGxvdyB0aGUgcmVjdCB0byBoYXZlIG5lZ2F0aXZlIHdpZHRoL2hlaWdodFxuICAgKiAgIC8vICdyZXBvc2l0aW9uJyB3aWxsIGtlZXAgdGhlIHdpZHRoL2hlaWdodCBwb3NpdGl2ZSBieSBzd2FwcGluZ1xuICAgKiAgIC8vIHRoZSB0b3AgYW5kIGJvdHRvbSBlZGdlcyBhbmQvb3Igc3dhcHBpbmcgdGhlIGxlZnQgYW5kIHJpZ2h0IGVkZ2VzXG4gICAqICAgaW52ZXJ0OiAnbm9uZScgfHwgJ25lZ2F0ZScgfHwgJ3JlcG9zaXRpb24nXG4gICAqXG4gICAqICAgLy8gbGltaXQgbXVsdGlwbGUgcmVzaXplcy5cbiAgICogICAvLyBTZWUgdGhlIGV4cGxhbmF0aW9uIGluIHRoZSB7QGxpbmsgSW50ZXJhY3RhYmxlLmRyYWdnYWJsZX0gZXhhbXBsZVxuICAgKiAgIG1heDogSW5maW5pdHksXG4gICAqICAgbWF4UGVyRWxlbWVudDogMSxcbiAgICogfSk7XG4gICAqXG4gICAqIHZhciBpc1Jlc2l6ZWFibGUgPSBpbnRlcmFjdChlbGVtZW50KS5yZXNpemFibGUoKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHJlc2l6ZSBhY3Rpb25zIGNhbiBiZSBwZXJmb3JtZWQgb24gdGhlIHRhcmdldFxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW4gfCBvYmplY3R9IFtvcHRpb25zXSB0cnVlL2ZhbHNlIG9yIEFuIG9iamVjdCB3aXRoIGV2ZW50XG4gICAqIGxpc3RlbmVycyB0byBiZSBmaXJlZCBvbiByZXNpemUgZXZlbnRzIChvYmplY3QgbWFrZXMgdGhlIEludGVyYWN0YWJsZVxuICAgKiByZXNpemFibGUpXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBJbnRlcmFjdGFibGV9IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoaXMgY2FuIGJlIHRoZVxuICAgKiB0YXJnZXQgb2YgcmVzaXplIGVsZW1lbnRzLCBvciB0aGlzIEludGVyYWN0YWJsZVxuICAgKi9cbiAgSW50ZXJhY3RhYmxlLnByb3RvdHlwZS5yZXNpemFibGUgPSBmdW5jdGlvbiAodGhpczogSW50ZXJhY3QuSW50ZXJhY3RhYmxlLCBvcHRpb25zOiBJbnRlcmFjdC5SZXNpemFibGVPcHRpb25zIHwgYm9vbGVhbikge1xuICAgIHJldHVybiByZXNpemFibGUodGhpcywgb3B0aW9ucywgc2NvcGUpXG4gIH0gYXMgUmVzaXphYmxlTWV0aG9kXG5cbiAgYWN0aW9uc1tBY3Rpb25OYW1lLlJlc2l6ZV0gPSByZXNpemVcbiAgYWN0aW9ucy5uYW1lcy5wdXNoKEFjdGlvbk5hbWUuUmVzaXplKVxuICB1dGlscy5hcnIubWVyZ2UoYWN0aW9ucy5ldmVudFR5cGVzLCBbXG4gICAgJ3Jlc2l6ZXN0YXJ0JyxcbiAgICAncmVzaXplbW92ZScsXG4gICAgJ3Jlc2l6ZWluZXJ0aWFzdGFydCcsXG4gICAgJ3Jlc2l6ZXJlc3VtZScsXG4gICAgJ3Jlc2l6ZWVuZCcsXG4gIF0pXG4gIGFjdGlvbnMubWV0aG9kRGljdC5yZXNpemUgPSAncmVzaXphYmxlJ1xuXG4gIGRlZmF1bHRzLmFjdGlvbnMucmVzaXplID0gcmVzaXplLmRlZmF1bHRzXG59XG5cbmNvbnN0IHJlc2l6ZSA9IHtcbiAgaW5zdGFsbCxcbiAgZGVmYXVsdHM6IHtcbiAgICBzcXVhcmU6IGZhbHNlLFxuICAgIHByZXNlcnZlQXNwZWN0UmF0aW86IGZhbHNlLFxuICAgIGF4aXM6ICd4eScsXG5cbiAgICAvLyB1c2UgZGVmYXVsdCBtYXJnaW5cbiAgICBtYXJnaW46IE5hTixcblxuICAgIC8vIG9iamVjdCB3aXRoIHByb3BzIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSB3aGljaCBhcmVcbiAgICAvLyB0cnVlL2ZhbHNlIHZhbHVlcyB0byByZXNpemUgd2hlbiB0aGUgcG9pbnRlciBpcyBvdmVyIHRoYXQgZWRnZSxcbiAgICAvLyBDU1Mgc2VsZWN0b3JzIHRvIG1hdGNoIHRoZSBoYW5kbGVzIGZvciBlYWNoIGRpcmVjdGlvblxuICAgIC8vIG9yIHRoZSBFbGVtZW50cyBmb3IgZWFjaCBoYW5kbGVcbiAgICBlZGdlczogbnVsbCxcblxuICAgIC8vIGEgdmFsdWUgb2YgJ25vbmUnIHdpbGwgbGltaXQgdGhlIHJlc2l6ZSByZWN0IHRvIGEgbWluaW11bSBvZiAweDBcbiAgICAvLyAnbmVnYXRlJyB3aWxsIGFsb3cgdGhlIHJlY3QgdG8gaGF2ZSBuZWdhdGl2ZSB3aWR0aC9oZWlnaHRcbiAgICAvLyAncmVwb3NpdGlvbicgd2lsbCBrZWVwIHRoZSB3aWR0aC9oZWlnaHQgcG9zaXRpdmUgYnkgc3dhcHBpbmdcbiAgICAvLyB0aGUgdG9wIGFuZCBib3R0b20gZWRnZXMgYW5kL29yIHN3YXBwaW5nIHRoZSBsZWZ0IGFuZCByaWdodCBlZGdlc1xuICAgIGludmVydDogJ25vbmUnLFxuICB9IGFzIEludGVyYWN0LlJlc2l6YWJsZU9wdGlvbnMsXG5cbiAgY2hlY2tlciAoXG4gICAgX3BvaW50ZXI6IEludGVyYWN0LlBvaW50ZXJUeXBlLFxuICAgIF9ldmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZSxcbiAgICBpbnRlcmFjdGFibGU6IEludGVyYWN0LkludGVyYWN0YWJsZSxcbiAgICBlbGVtZW50OiBFbGVtZW50LFxuICAgIGludGVyYWN0aW9uOiBJbnRlcmFjdGlvbixcbiAgICByZWN0OiBJbnRlcmFjdC5SZWN0XG4gICkge1xuICAgIGlmICghcmVjdCkgeyByZXR1cm4gbnVsbCB9XG5cbiAgICBjb25zdCBwYWdlID0gdXRpbHMuZXh0ZW5kKHt9LCBpbnRlcmFjdGlvbi5jb29yZHMuY3VyLnBhZ2UpXG4gICAgY29uc3Qgb3B0aW9ucyA9IGludGVyYWN0YWJsZS5vcHRpb25zXG5cbiAgICBpZiAob3B0aW9ucy5yZXNpemUuZW5hYmxlZCkge1xuICAgICAgY29uc3QgcmVzaXplT3B0aW9ucyA9IG9wdGlvbnMucmVzaXplXG4gICAgICBjb25zdCByZXNpemVFZGdlczogeyBbZWRnZTogc3RyaW5nXTogYm9vbGVhbiB9ID0geyBsZWZ0OiBmYWxzZSwgcmlnaHQ6IGZhbHNlLCB0b3A6IGZhbHNlLCBib3R0b206IGZhbHNlIH1cblxuICAgICAgLy8gaWYgdXNpbmcgcmVzaXplLmVkZ2VzXG4gICAgICBpZiAodXRpbHMuaXMub2JqZWN0KHJlc2l6ZU9wdGlvbnMuZWRnZXMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZWRnZSBpbiByZXNpemVFZGdlcykge1xuICAgICAgICAgIHJlc2l6ZUVkZ2VzW2VkZ2VdID0gY2hlY2tSZXNpemVFZGdlKGVkZ2UsXG4gICAgICAgICAgICByZXNpemVPcHRpb25zLmVkZ2VzW2VkZ2VdLFxuICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgIGludGVyYWN0aW9uLl9sYXRlc3RQb2ludGVyLmV2ZW50VGFyZ2V0LFxuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIHJlY3QsXG4gICAgICAgICAgICByZXNpemVPcHRpb25zLm1hcmdpbiB8fCB0aGlzLmRlZmF1bHRNYXJnaW4pXG4gICAgICAgIH1cblxuICAgICAgICByZXNpemVFZGdlcy5sZWZ0ID0gcmVzaXplRWRnZXMubGVmdCAmJiAhcmVzaXplRWRnZXMucmlnaHRcbiAgICAgICAgcmVzaXplRWRnZXMudG9wICA9IHJlc2l6ZUVkZ2VzLnRvcCAgJiYgIXJlc2l6ZUVkZ2VzLmJvdHRvbVxuXG4gICAgICAgIGlmIChyZXNpemVFZGdlcy5sZWZ0IHx8IHJlc2l6ZUVkZ2VzLnJpZ2h0IHx8IHJlc2l6ZUVkZ2VzLnRvcCB8fCByZXNpemVFZGdlcy5ib3R0b20pIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogJ3Jlc2l6ZScsXG4gICAgICAgICAgICBlZGdlczogcmVzaXplRWRnZXMsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgcmlnaHQgID0gb3B0aW9ucy5yZXNpemUuYXhpcyAhPT0gJ3knICYmIHBhZ2UueCA+IChyZWN0LnJpZ2h0ICAtIHRoaXMuZGVmYXVsdE1hcmdpbilcbiAgICAgICAgY29uc3QgYm90dG9tID0gb3B0aW9ucy5yZXNpemUuYXhpcyAhPT0gJ3gnICYmIHBhZ2UueSA+IChyZWN0LmJvdHRvbSAtIHRoaXMuZGVmYXVsdE1hcmdpbilcblxuICAgICAgICBpZiAocmlnaHQgfHwgYm90dG9tKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6ICdyZXNpemUnLFxuICAgICAgICAgICAgYXhlczogKHJpZ2h0ID8gJ3gnIDogJycpICsgKGJvdHRvbSA/ICd5JyA6ICcnKSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9LFxuXG4gIGN1cnNvcnM6IG51bGwgYXMgdW5rbm93biBhcyBSZXR1cm5UeXBlPHR5cGVvZiBpbml0Q3Vyc29ycz4sXG5cbiAgZ2V0Q3Vyc29yIChhY3Rpb246IEFjdGlvblByb3BzKSB7XG4gICAgY29uc3QgY3Vyc29ycyA9IHJlc2l6ZS5jdXJzb3JzIGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cbiAgICBpZiAoYWN0aW9uLmF4aXMpIHtcbiAgICAgIHJldHVybiBjdXJzb3JzW2FjdGlvbi5uYW1lICsgYWN0aW9uLmF4aXNdXG4gICAgfVxuICAgIGVsc2UgaWYgKGFjdGlvbi5lZGdlcykge1xuICAgICAgbGV0IGN1cnNvcktleSA9ICcnXG4gICAgICBjb25zdCBlZGdlTmFtZXMgPSBbJ3RvcCcsICdib3R0b20nLCAnbGVmdCcsICdyaWdodCddXG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgIGlmIChhY3Rpb24uZWRnZXNbZWRnZU5hbWVzW2ldXSkge1xuICAgICAgICAgIGN1cnNvcktleSArPSBlZGdlTmFtZXNbaV1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3Vyc29yc1tjdXJzb3JLZXldXG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfSxcblxuICBkZWZhdWx0TWFyZ2luOiBudWxsIGFzIHVua25vd24gYXMgbnVtYmVyLFxufVxuXG5mdW5jdGlvbiByZXNpemFibGUgKGludGVyYWN0YWJsZTogSW50ZXJhY3QuSW50ZXJhY3RhYmxlLCBvcHRpb25zOiBJbnRlcmFjdC5PckJvb2xlYW48SW50ZXJhY3QuUmVzaXphYmxlT3B0aW9ucz4gfCBib29sZWFuLCBzY29wZTogU2NvcGUpIHtcbiAgaWYgKHV0aWxzLmlzLm9iamVjdChvcHRpb25zKSkge1xuICAgIGludGVyYWN0YWJsZS5vcHRpb25zLnJlc2l6ZS5lbmFibGVkID0gb3B0aW9ucy5lbmFibGVkICE9PSBmYWxzZVxuICAgIGludGVyYWN0YWJsZS5zZXRQZXJBY3Rpb24oJ3Jlc2l6ZScsIG9wdGlvbnMpXG4gICAgaW50ZXJhY3RhYmxlLnNldE9uRXZlbnRzKCdyZXNpemUnLCBvcHRpb25zKVxuXG4gICAgaWYgKHV0aWxzLmlzLnN0cmluZyhvcHRpb25zLmF4aXMpICYmIC9eeCR8XnkkfF54eSQvLnRlc3Qob3B0aW9ucy5heGlzKSkge1xuICAgICAgaW50ZXJhY3RhYmxlLm9wdGlvbnMucmVzaXplLmF4aXMgPSBvcHRpb25zLmF4aXNcbiAgICB9XG4gICAgZWxzZSBpZiAob3B0aW9ucy5heGlzID09PSBudWxsKSB7XG4gICAgICBpbnRlcmFjdGFibGUub3B0aW9ucy5yZXNpemUuYXhpcyA9IHNjb3BlLmRlZmF1bHRzLmFjdGlvbnMucmVzaXplLmF4aXNcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXMuYm9vbChvcHRpb25zLnByZXNlcnZlQXNwZWN0UmF0aW8pKSB7XG4gICAgICBpbnRlcmFjdGFibGUub3B0aW9ucy5yZXNpemUucHJlc2VydmVBc3BlY3RSYXRpbyA9IG9wdGlvbnMucHJlc2VydmVBc3BlY3RSYXRpb1xuICAgIH1cbiAgICBlbHNlIGlmICh1dGlscy5pcy5ib29sKG9wdGlvbnMuc3F1YXJlKSkge1xuICAgICAgaW50ZXJhY3RhYmxlLm9wdGlvbnMucmVzaXplLnNxdWFyZSA9IG9wdGlvbnMuc3F1YXJlXG4gICAgfVxuXG4gICAgcmV0dXJuIGludGVyYWN0YWJsZVxuICB9XG4gIGlmICh1dGlscy5pcy5ib29sKG9wdGlvbnMpKSB7XG4gICAgaW50ZXJhY3RhYmxlLm9wdGlvbnMucmVzaXplLmVuYWJsZWQgPSBvcHRpb25zXG5cbiAgICByZXR1cm4gaW50ZXJhY3RhYmxlXG4gIH1cbiAgcmV0dXJuIGludGVyYWN0YWJsZS5vcHRpb25zLnJlc2l6ZVxufVxuXG5mdW5jdGlvbiBjaGVja1Jlc2l6ZUVkZ2UgKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgcGFnZTogSW50ZXJhY3QuUG9pbnQsIGVsZW1lbnQ6IE5vZGUsIGludGVyYWN0YWJsZUVsZW1lbnQ6IEVsZW1lbnQsIHJlY3Q6IEludGVyYWN0LlJlY3QsIG1hcmdpbjogbnVtYmVyKSB7XG4gIC8vIGZhbHNlLCAnJywgdW5kZWZpbmVkLCBudWxsXG4gIGlmICghdmFsdWUpIHsgcmV0dXJuIGZhbHNlIH1cblxuICAvLyB0cnVlIHZhbHVlLCB1c2UgcG9pbnRlciBjb29yZHMgYW5kIGVsZW1lbnQgcmVjdFxuICBpZiAodmFsdWUgPT09IHRydWUpIHtcbiAgICAvLyBpZiBkaW1lbnNpb25zIGFyZSBuZWdhdGl2ZSwgXCJzd2l0Y2hcIiBlZGdlc1xuICAgIGNvbnN0IHdpZHRoICA9IHV0aWxzLmlzLm51bWJlcihyZWN0LndpZHRoKSA/IHJlY3Qud2lkdGggIDogcmVjdC5yaWdodCAgLSByZWN0LmxlZnRcbiAgICBjb25zdCBoZWlnaHQgPSB1dGlscy5pcy5udW1iZXIocmVjdC5oZWlnaHQpID8gcmVjdC5oZWlnaHQgOiByZWN0LmJvdHRvbSAtIHJlY3QudG9wXG5cbiAgICAvLyBkb24ndCB1c2UgbWFyZ2luIGdyZWF0ZXIgdGhhbiBoYWxmIHRoZSByZWxldmVudCBkaW1lbnNpb25cbiAgICBtYXJnaW4gPSBNYXRoLm1pbihtYXJnaW4sIChuYW1lID09PSAnbGVmdCcgfHwgbmFtZSA9PT0gJ3JpZ2h0JyA/IHdpZHRoIDogaGVpZ2h0KSAvIDIpXG5cbiAgICBpZiAod2lkdGggPCAwKSB7XG4gICAgICBpZiAgICAgIChuYW1lID09PSAnbGVmdCcpICB7IG5hbWUgPSAncmlnaHQnIH1cbiAgICAgIGVsc2UgaWYgKG5hbWUgPT09ICdyaWdodCcpIHsgbmFtZSA9ICdsZWZ0JyAgfVxuICAgIH1cbiAgICBpZiAoaGVpZ2h0IDwgMCkge1xuICAgICAgaWYgICAgICAobmFtZSA9PT0gJ3RvcCcpICAgIHsgbmFtZSA9ICdib3R0b20nIH1cbiAgICAgIGVsc2UgaWYgKG5hbWUgPT09ICdib3R0b20nKSB7IG5hbWUgPSAndG9wJyAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5hbWUgPT09ICdsZWZ0JykgeyByZXR1cm4gcGFnZS54IDwgKCh3aWR0aCAgPj0gMCA/IHJlY3QubGVmdCA6IHJlY3QucmlnaHQpICsgbWFyZ2luKSB9XG4gICAgaWYgKG5hbWUgPT09ICd0b3AnKSB7IHJldHVybiBwYWdlLnkgPCAoKGhlaWdodCA+PSAwID8gcmVjdC50b3AgOiByZWN0LmJvdHRvbSkgKyBtYXJnaW4pIH1cblxuICAgIGlmIChuYW1lID09PSAncmlnaHQnKSB7IHJldHVybiBwYWdlLnggPiAoKHdpZHRoICA+PSAwID8gcmVjdC5yaWdodCA6IHJlY3QubGVmdCkgLSBtYXJnaW4pIH1cbiAgICBpZiAobmFtZSA9PT0gJ2JvdHRvbScpIHsgcmV0dXJuIHBhZ2UueSA+ICgoaGVpZ2h0ID49IDAgPyByZWN0LmJvdHRvbSA6IHJlY3QudG9wKSAtIG1hcmdpbikgfVxuICB9XG5cbiAgLy8gdGhlIHJlbWFpbmluZyBjaGVja3MgcmVxdWlyZSBhbiBlbGVtZW50XG4gIGlmICghdXRpbHMuaXMuZWxlbWVudChlbGVtZW50KSkgeyByZXR1cm4gZmFsc2UgfVxuXG4gIHJldHVybiB1dGlscy5pcy5lbGVtZW50KHZhbHVlKVxuICAvLyB0aGUgdmFsdWUgaXMgYW4gZWxlbWVudCB0byB1c2UgYXMgYSByZXNpemUgaGFuZGxlXG4gICAgPyB2YWx1ZSA9PT0gZWxlbWVudFxuICAgIC8vIG90aGVyd2lzZSBjaGVjayBpZiBlbGVtZW50IG1hdGNoZXMgdmFsdWUgYXMgc2VsZWN0b3JcbiAgICA6IHV0aWxzLmRvbS5tYXRjaGVzVXBUbyhlbGVtZW50LCB2YWx1ZSwgaW50ZXJhY3RhYmxlRWxlbWVudClcbn1cblxuZnVuY3Rpb24gaW5pdEN1cnNvcnMgKGJyb3dzZXI6IHR5cGVvZiBpbXBvcnQgKCdAaW50ZXJhY3Rqcy91dGlscy9icm93c2VyJykuZGVmYXVsdCkge1xuICByZXR1cm4gKGJyb3dzZXIuaXNJZTkgPyB7XG4gICAgeCA6ICdlLXJlc2l6ZScsXG4gICAgeSA6ICdzLXJlc2l6ZScsXG4gICAgeHk6ICdzZS1yZXNpemUnLFxuXG4gICAgdG9wICAgICAgICA6ICduLXJlc2l6ZScsXG4gICAgbGVmdCAgICAgICA6ICd3LXJlc2l6ZScsXG4gICAgYm90dG9tICAgICA6ICdzLXJlc2l6ZScsXG4gICAgcmlnaHQgICAgICA6ICdlLXJlc2l6ZScsXG4gICAgdG9wbGVmdCAgICA6ICdzZS1yZXNpemUnLFxuICAgIGJvdHRvbXJpZ2h0OiAnc2UtcmVzaXplJyxcbiAgICB0b3ByaWdodCAgIDogJ25lLXJlc2l6ZScsXG4gICAgYm90dG9tbGVmdCA6ICduZS1yZXNpemUnLFxuICB9IDoge1xuICAgIHggOiAnZXctcmVzaXplJyxcbiAgICB5IDogJ25zLXJlc2l6ZScsXG4gICAgeHk6ICdud3NlLXJlc2l6ZScsXG5cbiAgICB0b3AgICAgICAgIDogJ25zLXJlc2l6ZScsXG4gICAgbGVmdCAgICAgICA6ICdldy1yZXNpemUnLFxuICAgIGJvdHRvbSAgICAgOiAnbnMtcmVzaXplJyxcbiAgICByaWdodCAgICAgIDogJ2V3LXJlc2l6ZScsXG4gICAgdG9wbGVmdCAgICA6ICdud3NlLXJlc2l6ZScsXG4gICAgYm90dG9tcmlnaHQ6ICdud3NlLXJlc2l6ZScsXG4gICAgdG9wcmlnaHQgICA6ICduZXN3LXJlc2l6ZScsXG4gICAgYm90dG9tbGVmdCA6ICduZXN3LXJlc2l6ZScsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHN0YXJ0ICh7IGlFdmVudCwgaW50ZXJhY3Rpb24gfTogSW50ZXJhY3QuU2lnbmFsQXJnKSB7XG4gIGlmIChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lICE9PSAncmVzaXplJyB8fCAhaW50ZXJhY3Rpb24ucHJlcGFyZWQuZWRnZXMpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHN0YXJ0UmVjdCA9IGludGVyYWN0aW9uLnRhcmdldC5nZXRSZWN0KGludGVyYWN0aW9uLmVsZW1lbnQpXG4gIGNvbnN0IHJlc2l6ZU9wdGlvbnMgPSBpbnRlcmFjdGlvbi50YXJnZXQub3B0aW9ucy5yZXNpemVcblxuICAvKlxuICAgKiBXaGVuIHVzaW5nIHRoZSBgcmVzaXphYmxlLnNxdWFyZWAgb3IgYHJlc2l6YWJsZS5wcmVzZXJ2ZUFzcGVjdFJhdGlvYCBvcHRpb25zLCByZXNpemluZyBmcm9tIG9uZSBlZGdlXG4gICAqIHdpbGwgYWZmZWN0IGFub3RoZXIuIEUuZy4gd2l0aCBgcmVzaXphYmxlLnNxdWFyZWAsIHJlc2l6aW5nIHRvIG1ha2UgdGhlIHJpZ2h0IGVkZ2UgbGFyZ2VyIHdpbGwgbWFrZVxuICAgKiB0aGUgYm90dG9tIGVkZ2UgbGFyZ2VyIGJ5IHRoZSBzYW1lIGFtb3VudC4gV2UgY2FsbCB0aGVzZSAnbGlua2VkJyBlZGdlcy4gQW55IGxpbmtlZCBlZGdlcyB3aWxsIGRlcGVuZFxuICAgKiBvbiB0aGUgYWN0aXZlIGVkZ2VzIGFuZCB0aGUgZWRnZSBiZWluZyBpbnRlcmFjdGVkIHdpdGguXG4gICAqL1xuICBpZiAocmVzaXplT3B0aW9ucy5zcXVhcmUgfHwgcmVzaXplT3B0aW9ucy5wcmVzZXJ2ZUFzcGVjdFJhdGlvKSB7XG4gICAgY29uc3QgbGlua2VkRWRnZXMgPSB1dGlscy5leHRlbmQoe30sIGludGVyYWN0aW9uLnByZXBhcmVkLmVkZ2VzKVxuXG4gICAgbGlua2VkRWRnZXMudG9wICAgID0gbGlua2VkRWRnZXMudG9wICAgIHx8IChsaW5rZWRFZGdlcy5sZWZ0ICAgJiYgIWxpbmtlZEVkZ2VzLmJvdHRvbSlcbiAgICBsaW5rZWRFZGdlcy5sZWZ0ICAgPSBsaW5rZWRFZGdlcy5sZWZ0ICAgfHwgKGxpbmtlZEVkZ2VzLnRvcCAgICAmJiAhbGlua2VkRWRnZXMucmlnaHQpXG4gICAgbGlua2VkRWRnZXMuYm90dG9tID0gbGlua2VkRWRnZXMuYm90dG9tIHx8IChsaW5rZWRFZGdlcy5yaWdodCAgJiYgIWxpbmtlZEVkZ2VzLnRvcClcbiAgICBsaW5rZWRFZGdlcy5yaWdodCAgPSBsaW5rZWRFZGdlcy5yaWdodCAgfHwgKGxpbmtlZEVkZ2VzLmJvdHRvbSAmJiAhbGlua2VkRWRnZXMubGVmdClcblxuICAgIGludGVyYWN0aW9uLnByZXBhcmVkLl9saW5rZWRFZGdlcyA9IGxpbmtlZEVkZ2VzXG4gIH1cbiAgZWxzZSB7XG4gICAgaW50ZXJhY3Rpb24ucHJlcGFyZWQuX2xpbmtlZEVkZ2VzID0gbnVsbFxuICB9XG5cbiAgLy8gaWYgdXNpbmcgYHJlc2l6YWJsZS5wcmVzZXJ2ZUFzcGVjdFJhdGlvYCBvcHRpb24sIHJlY29yZCBhc3BlY3QgcmF0aW8gYXQgdGhlIHN0YXJ0IG9mIHRoZSByZXNpemVcbiAgaWYgKHJlc2l6ZU9wdGlvbnMucHJlc2VydmVBc3BlY3RSYXRpbykge1xuICAgIGludGVyYWN0aW9uLnJlc2l6ZVN0YXJ0QXNwZWN0UmF0aW8gPSBzdGFydFJlY3Qud2lkdGggLyBzdGFydFJlY3QuaGVpZ2h0XG4gIH1cblxuICBpbnRlcmFjdGlvbi5yZXNpemVSZWN0cyA9IHtcbiAgICBzdGFydCAgICAgOiBzdGFydFJlY3QsXG4gICAgY3VycmVudCAgIDogdXRpbHMuZXh0ZW5kKHt9LCBzdGFydFJlY3QpLFxuICAgIGludmVydGVkICA6IHV0aWxzLmV4dGVuZCh7fSwgc3RhcnRSZWN0KSxcbiAgICBwcmV2aW91cyAgOiB1dGlscy5leHRlbmQoe30sIHN0YXJ0UmVjdCksXG4gICAgZGVsdGEgICAgIDoge1xuICAgICAgbGVmdDogMCxcbiAgICAgIHJpZ2h0IDogMCxcbiAgICAgIHdpZHRoIDogMCxcbiAgICAgIHRvcCA6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgfSxcbiAgfTtcblxuICAoaUV2ZW50IGFzIFJlc2l6ZUV2ZW50KS5yZWN0ID0gaW50ZXJhY3Rpb24ucmVzaXplUmVjdHMuaW52ZXJ0ZWQ7XG4gIChpRXZlbnQgYXMgUmVzaXplRXZlbnQpLmRlbHRhUmVjdCA9IGludGVyYWN0aW9uLnJlc2l6ZVJlY3RzLmRlbHRhXG59XG5cbmZ1bmN0aW9uIG1vdmUgKHsgaUV2ZW50LCBpbnRlcmFjdGlvbiB9KSB7XG4gIGlmIChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lICE9PSAncmVzaXplJyB8fCAhaW50ZXJhY3Rpb24ucHJlcGFyZWQuZWRnZXMpIHsgcmV0dXJuIH1cblxuICBjb25zdCByZXNpemVPcHRpb25zID0gaW50ZXJhY3Rpb24udGFyZ2V0Lm9wdGlvbnMucmVzaXplXG4gIGNvbnN0IGludmVydCA9IHJlc2l6ZU9wdGlvbnMuaW52ZXJ0XG4gIGNvbnN0IGludmVydGlibGUgPSBpbnZlcnQgPT09ICdyZXBvc2l0aW9uJyB8fCBpbnZlcnQgPT09ICduZWdhdGUnXG5cbiAgbGV0IGVkZ2VzID0gaW50ZXJhY3Rpb24ucHJlcGFyZWQuZWRnZXNcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG4gIGNvbnN0IHN0YXJ0ICAgICAgPSBpbnRlcmFjdGlvbi5yZXNpemVSZWN0cy5zdGFydFxuICBjb25zdCBjdXJyZW50ICAgID0gaW50ZXJhY3Rpb24ucmVzaXplUmVjdHMuY3VycmVudFxuICBjb25zdCBpbnZlcnRlZCAgID0gaW50ZXJhY3Rpb24ucmVzaXplUmVjdHMuaW52ZXJ0ZWRcbiAgY29uc3QgZGVsdGFSZWN0ICA9IGludGVyYWN0aW9uLnJlc2l6ZVJlY3RzLmRlbHRhXG4gIGNvbnN0IHByZXZpb3VzICAgPSB1dGlscy5leHRlbmQoaW50ZXJhY3Rpb24ucmVzaXplUmVjdHMucHJldmlvdXMsIGludmVydGVkKVxuICBjb25zdCBvcmlnaW5hbEVkZ2VzID0gZWRnZXNcblxuICBjb25zdCBldmVudERlbHRhID0gdXRpbHMuZXh0ZW5kKHt9LCBpRXZlbnQuZGVsdGEpXG5cbiAgaWYgKHJlc2l6ZU9wdGlvbnMucHJlc2VydmVBc3BlY3RSYXRpbyB8fCByZXNpemVPcHRpb25zLnNxdWFyZSkge1xuICAgIC8vIGByZXNpemUucHJlc2VydmVBc3BlY3RSYXRpb2AgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGByZXNpemUuc3F1YXJlYFxuICAgIGNvbnN0IHN0YXJ0QXNwZWN0UmF0aW8gPSByZXNpemVPcHRpb25zLnByZXNlcnZlQXNwZWN0UmF0aW9cbiAgICAgID8gaW50ZXJhY3Rpb24ucmVzaXplU3RhcnRBc3BlY3RSYXRpb1xuICAgICAgOiAxXG5cbiAgICBlZGdlcyA9IGludGVyYWN0aW9uLnByZXBhcmVkLl9saW5rZWRFZGdlc1xuXG4gICAgaWYgKChvcmlnaW5hbEVkZ2VzLmxlZnQgJiYgb3JpZ2luYWxFZGdlcy5ib3R0b20pIHx8XG4gICAgICAgIChvcmlnaW5hbEVkZ2VzLnJpZ2h0ICYmIG9yaWdpbmFsRWRnZXMudG9wKSkge1xuICAgICAgZXZlbnREZWx0YS55ID0gLWV2ZW50RGVsdGEueCAvIHN0YXJ0QXNwZWN0UmF0aW9cbiAgICB9XG4gICAgZWxzZSBpZiAob3JpZ2luYWxFZGdlcy5sZWZ0IHx8IG9yaWdpbmFsRWRnZXMucmlnaHQpIHsgZXZlbnREZWx0YS55ID0gZXZlbnREZWx0YS54IC8gc3RhcnRBc3BlY3RSYXRpbyB9XG4gICAgZWxzZSBpZiAob3JpZ2luYWxFZGdlcy50b3AgIHx8IG9yaWdpbmFsRWRnZXMuYm90dG9tKSB7IGV2ZW50RGVsdGEueCA9IGV2ZW50RGVsdGEueSAqIHN0YXJ0QXNwZWN0UmF0aW8gfVxuICB9XG5cbiAgLy8gdXBkYXRlIHRoZSAnY3VycmVudCcgcmVjdCB3aXRob3V0IG1vZGlmaWNhdGlvbnNcbiAgaWYgKGVkZ2VzLnRvcCkgeyBjdXJyZW50LnRvcCAgICArPSBldmVudERlbHRhLnkgfVxuICBpZiAoZWRnZXMuYm90dG9tKSB7IGN1cnJlbnQuYm90dG9tICs9IGV2ZW50RGVsdGEueSB9XG4gIGlmIChlZGdlcy5sZWZ0KSB7IGN1cnJlbnQubGVmdCAgICs9IGV2ZW50RGVsdGEueCB9XG4gIGlmIChlZGdlcy5yaWdodCkgeyBjdXJyZW50LnJpZ2h0ICArPSBldmVudERlbHRhLnggfVxuXG4gIGlmIChpbnZlcnRpYmxlKSB7XG4gICAgLy8gaWYgaW52ZXJ0aWJsZSwgY29weSB0aGUgY3VycmVudCByZWN0XG4gICAgdXRpbHMuZXh0ZW5kKGludmVydGVkLCBjdXJyZW50KVxuXG4gICAgaWYgKGludmVydCA9PT0gJ3JlcG9zaXRpb24nKSB7XG4gICAgICAvLyBzd2FwIGVkZ2UgdmFsdWVzIGlmIG5lY2Vzc2FyeSB0byBrZWVwIHdpZHRoL2hlaWdodCBwb3NpdGl2ZVxuICAgICAgbGV0IHN3YXBcblxuICAgICAgaWYgKGludmVydGVkLnRvcCA+IGludmVydGVkLmJvdHRvbSkge1xuICAgICAgICBzd2FwID0gaW52ZXJ0ZWQudG9wXG5cbiAgICAgICAgaW52ZXJ0ZWQudG9wID0gaW52ZXJ0ZWQuYm90dG9tXG4gICAgICAgIGludmVydGVkLmJvdHRvbSA9IHN3YXBcbiAgICAgIH1cbiAgICAgIGlmIChpbnZlcnRlZC5sZWZ0ID4gaW52ZXJ0ZWQucmlnaHQpIHtcbiAgICAgICAgc3dhcCA9IGludmVydGVkLmxlZnRcblxuICAgICAgICBpbnZlcnRlZC5sZWZ0ID0gaW52ZXJ0ZWQucmlnaHRcbiAgICAgICAgaW52ZXJ0ZWQucmlnaHQgPSBzd2FwXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIC8vIGlmIG5vdCBpbnZlcnRpYmxlLCByZXN0cmljdCB0byBtaW5pbXVtIG9mIDB4MCByZWN0XG4gICAgaW52ZXJ0ZWQudG9wICAgID0gTWF0aC5taW4oY3VycmVudC50b3AsIHN0YXJ0LmJvdHRvbSlcbiAgICBpbnZlcnRlZC5ib3R0b20gPSBNYXRoLm1heChjdXJyZW50LmJvdHRvbSwgc3RhcnQudG9wKVxuICAgIGludmVydGVkLmxlZnQgICA9IE1hdGgubWluKGN1cnJlbnQubGVmdCwgc3RhcnQucmlnaHQpXG4gICAgaW52ZXJ0ZWQucmlnaHQgID0gTWF0aC5tYXgoY3VycmVudC5yaWdodCwgc3RhcnQubGVmdClcbiAgfVxuXG4gIGludmVydGVkLndpZHRoICA9IGludmVydGVkLnJpZ2h0ICAtIGludmVydGVkLmxlZnRcbiAgaW52ZXJ0ZWQuaGVpZ2h0ID0gaW52ZXJ0ZWQuYm90dG9tIC0gaW52ZXJ0ZWQudG9wXG5cbiAgZm9yIChjb25zdCBlZGdlIGluIGludmVydGVkKSB7XG4gICAgZGVsdGFSZWN0W2VkZ2VdID0gaW52ZXJ0ZWRbZWRnZV0gLSBwcmV2aW91c1tlZGdlXVxuICB9XG5cbiAgaUV2ZW50LmVkZ2VzID0gaW50ZXJhY3Rpb24ucHJlcGFyZWQuZWRnZXNcbiAgaUV2ZW50LnJlY3QgPSBpbnZlcnRlZFxuICBpRXZlbnQuZGVsdGFSZWN0ID0gZGVsdGFSZWN0XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUV2ZW50QXhlcyAoeyBpbnRlcmFjdGlvbiwgaUV2ZW50LCBhY3Rpb24gfSkge1xuICBpZiAoYWN0aW9uICE9PSAncmVzaXplJyB8fCAhaW50ZXJhY3Rpb24ucmVzaXplQXhlcykgeyByZXR1cm4gfVxuXG4gIGNvbnN0IG9wdGlvbnMgPSBpbnRlcmFjdGlvbi50YXJnZXQub3B0aW9uc1xuXG4gIGlmIChvcHRpb25zLnJlc2l6ZS5zcXVhcmUpIHtcbiAgICBpZiAoaW50ZXJhY3Rpb24ucmVzaXplQXhlcyA9PT0gJ3knKSB7XG4gICAgICBpRXZlbnQuZGVsdGEueCA9IGlFdmVudC5kZWx0YS55XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaUV2ZW50LmRlbHRhLnkgPSBpRXZlbnQuZGVsdGEueFxuICAgIH1cbiAgICBpRXZlbnQuYXhlcyA9ICd4eSdcbiAgfVxuICBlbHNlIHtcbiAgICBpRXZlbnQuYXhlcyA9IGludGVyYWN0aW9uLnJlc2l6ZUF4ZXNcblxuICAgIGlmIChpbnRlcmFjdGlvbi5yZXNpemVBeGVzID09PSAneCcpIHtcbiAgICAgIGlFdmVudC5kZWx0YS55ID0gMFxuICAgIH1cbiAgICBlbHNlIGlmIChpbnRlcmFjdGlvbi5yZXNpemVBeGVzID09PSAneScpIHtcbiAgICAgIGlFdmVudC5kZWx0YS54ID0gMFxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCByZXNpemVcbiJdfQ== \ No newline at end of file diff --git a/packages/actions/tests/drag.d.ts b/packages/actions/tests/drag.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/actions/tests/drag.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/actions/tests/drag.js b/packages/actions/tests/drag.js new file mode 100644 index 000000000..ff9f25253 --- /dev/null +++ b/packages/actions/tests/drag.js @@ -0,0 +1,114 @@ +import test from '@interactjs/_dev/test/test'; +import interactions from '@interactjs/core/interactions'; +import { ActionName } from '@interactjs/core/scope'; +import * as helpers from '@interactjs/core/tests/helpers'; +import { extend } from '@interactjs/utils'; +import pointerUtils from '@interactjs/utils/pointerUtils'; +import drag from '../drag'; +test('drag action init', (t) => { + const scope = helpers.mockScope(); + drag.install(scope); + t.ok(scope.actions.names.includes(ActionName.Drag), '"drag" in actions.names'); + t.equal(scope.actions.methodDict.drag, 'draggable'); + t.equal(typeof scope.Interactable.prototype.draggable, 'function'); + t.end(); +}); +test('Interactable.draggable method', (t) => { + const interactable = { + options: { + drag: {}, + }, + draggable: drag.draggable, + setPerAction: () => { calledSetPerAction = true; }, + setOnEvents: () => { calledSetOnEvents = true; }, + }; + let calledSetPerAction = false; + let calledSetOnEvents = false; + t.equal(interactable.draggable(), interactable.options.drag, 'interactable.draggable() returns interactable.options.drag object'); + interactable.draggable(true); + t.ok(interactable.options.drag.enabled, 'calling `interactable.draggable(true)` enables dragging'); + interactable.draggable(false); + t.notOk(interactable.options.drag.enabled, 'calling `interactable.draggable(false)` disables dragging'); + interactable.draggable({}); + t.ok(interactable.options.drag.enabled, 'calling `interactable.draggable({})` enables dragging'); + t.ok(calledSetOnEvents, 'calling `interactable.draggable({})` calls this.setOnEvents'); + t.ok(calledSetPerAction, 'calling `interactable.draggable({})` calls this.setPerAction'); + interactable.draggable({ enabled: false }); + t.notOk(interactable.options.drag.enabled, 'calling `interactable.draggable({ enabled: false })` disables dragging'); + const axisSettings = { + lockAxis: ['x', 'y', 'xy', 'start'], + startAxis: ['x', 'y', 'xy'], + }; + for (const axis in axisSettings) { + for (const value of axisSettings[axis]) { + const options = {}; + options[axis] = value; + interactable.draggable(options); + t.equal(interactable.options.drag[axis], value, '`' + axis + ': "' + value + '"` is set correctly'); + delete interactable.options.drag[axis]; + } + } + t.end(); +}); +test('drag axis', (t) => { + const scope = helpers.mockScope(); + interactions.install(scope); + drag.install(scope); + const interaction = scope.interactions.new({}); + const element = {}; + const interactable = { + options: { + drag: {}, + }, + target: element, + }; + const iEvent = { page: {}, client: {}, delta: {}, type: 'dragmove' }; + const opposites = { x: 'y', y: 'x' }; + const eventCoords = { + page: { x: -1, y: -2 }, + client: { x: -3, y: -4 }, + delta: { x: -5, y: -6 }, + }; + const coords = helpers.newCoordsSet(); + resetCoords(); + interaction.prepared = { name: 'drag', axis: 'xy' }; + interaction.target = interactable; + t.test('xy (any direction)', (tt) => { + scope.interactions.signals.fire('before-action-move', { interaction }); + tt.deepEqual(interaction.coords.start, coords.start, 'coords.start is not modified'); + tt.deepEqual(interaction.coords.delta, coords.delta, 'coords.delta is not modified'); + scope.interactions.signals.fire('action-move', { iEvent, interaction }); + tt.deepEqual(iEvent.page, eventCoords.page, 'page coords are not modified'); + tt.deepEqual(iEvent.delta, eventCoords.delta, 'delta is not modified'); + tt.end(); + }); + for (const axis in opposites) { + const opposite = opposites[axis]; + t.test(axis + '-axis', (tt) => { + resetCoords(); + interaction.prepared.axis = axis; + scope.interactions.signals.fire('action-move', { iEvent, interaction }); + tt.deepEqual(iEvent.delta, { + [opposite]: 0, + [axis]: eventCoords.delta[axis], + }, `opposite axis (${opposite}) delta is 0; target axis (${axis}) delta is not modified`); + tt.deepEqual(iEvent.page, { + [opposite]: coords.start.page[opposite], + [axis]: eventCoords.page[axis], + }, `page.${opposite} is coords.start value`); + tt.equal(iEvent.page[axis], eventCoords.page[axis], `page.${axis} is not modified`); + tt.equal(iEvent.client[opposite], coords.start.client[opposite], `client.${opposite} is coords.start value`); + tt.equal(iEvent.client[axis], eventCoords.client[axis], `client.${axis} is not modified`); + tt.end(); + }); + } + t.end(); + function resetCoords() { + pointerUtils.copyCoords(iEvent, eventCoords); + extend(iEvent.delta, eventCoords.delta); + for (const prop in coords) { + pointerUtils.copyCoords(interaction.coords[prop], coords[prop]); + } + } +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRyYWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sNEJBQTRCLENBQUE7QUFDN0MsT0FBTyxZQUFZLE1BQU0sK0JBQStCLENBQUE7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ25ELE9BQU8sS0FBSyxPQUFPLE1BQU0sZ0NBQWdDLENBQUE7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQzFDLE9BQU8sWUFBWSxNQUFNLGdDQUFnQyxDQUFBO0FBQ3pELE9BQU8sSUFBSSxNQUFNLFNBQVMsQ0FBQTtBQUUxQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtJQUM3QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUE7SUFFakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUVuQixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUseUJBQXlCLENBQUMsQ0FBQTtJQUM5RSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUNuRCxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBRWxFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7SUFDMUMsTUFBTSxZQUFZLEdBQUc7UUFDbkIsT0FBTyxFQUFFO1lBQ1AsSUFBSSxF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TUFBTSxFQUFFO1lBQ3pCLFlBQVksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtTQUNoRTtJQUNILENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0ZXN0IGZyb20gJ0BpbnRlcmFjdGpzL19kZXYvdGVzdC90ZXN0J1xuaW1wb3J0IGludGVyYWN0aW9ucyBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL2ludGVyYWN0aW9ucydcbmltcG9ydCB7IEFjdGlvbk5hbWUgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJ1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Rlc3RzL2hlbHBlcnMnXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tICdAaW50ZXJhY3Rqcy91dGlscydcbmltcG9ydCBwb2ludGVyVXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvcG9pbnRlclV0aWxzJ1xuaW1wb3J0IGRyYWcgZnJvbSAnLi4vZHJhZydcblxudGVzdCgnZHJhZyBhY3Rpb24gaW5pdCcsICh0KSA9PiB7XG4gIGNvbnN0IHNjb3BlID0gaGVscGVycy5tb2NrU2NvcGUoKVxuXG4gIGRyYWcuaW5zdGFsbChzY29wZSlcblxuICB0Lm9rKHNjb3BlLmFjdGlvbnMubmFtZXMuaW5jbHVkZXMoQWN0aW9uTmFtZS5EcmFnKSwgJ1wiZHJhZ1wiIGluIGFjdGlvbnMubmFtZXMnKVxuICB0LmVxdWFsKHNjb3BlLmFjdGlvbnMubWV0aG9kRGljdC5kcmFnLCAnZHJhZ2dhYmxlJylcbiAgdC5lcXVhbCh0eXBlb2Ygc2NvcGUuSW50ZXJhY3RhYmxlLnByb3RvdHlwZS5kcmFnZ2FibGUsICdmdW5jdGlvbicpXG5cbiAgdC5lbmQoKVxufSlcblxudGVzdCgnSW50ZXJhY3RhYmxlLmRyYWdnYWJsZSBtZXRob2QnLCAodCkgPT4ge1xuICBjb25zdCBpbnRlcmFjdGFibGUgPSB7XG4gICAgb3B0aW9uczoge1xuICAgICAgZHJhZzoge30sXG4gICAgfSxcbiAgICBkcmFnZ2FibGU6IGRyYWcuZHJhZ2dhYmxlLFxuICAgIHNldFBlckFjdGlvbjogKCkgPT4geyBjYWxsZWRTZXRQZXJBY3Rpb24gPSB0cnVlIH0sXG4gICAgc2V0T25FdmVudHM6ICgpID0+IHsgY2FsbGVkU2V0T25FdmVudHMgPSB0cnVlIH0sXG4gIH0gYXMgdW5rbm93biBhcyBJbnRlcmFjdC5JbnRlcmFjdGFibGVcbiAgbGV0IGNhbGxlZFNldFBlckFjdGlvbiA9IGZhbHNlXG4gIGxldCBjYWxsZWRTZXRPbkV2ZW50cyA9IGZhbHNlXG5cbiAgdC5lcXVhbChpbnRlcmFjdGFibGUuZHJhZ2dhYmxlKCksIGludGVyYWN0YWJsZS5vcHRpb25zLmRyYWcsXG4gICAgJ2ludGVyYWN0YWJsZS5kcmFnZ2FibGUoKSByZXR1cm5zIGludGVyYWN0YWJsZS5vcHRpb25zLmRyYWcgb2JqZWN0JylcblxuICBpbnRlcmFjdGFibGUuZHJhZ2dhYmxlKHRydWUpXG4gIHQub2soaW50ZXJhY3RhYmxlLm9wdGlvbnMuZHJhZy5lbmFibGVkLFxuICAgICdjYWxsaW5nIGBpbnRlcmFjdGFibGUuZHJhZ2dhYmxlKHRydWUpYCBlbmFibGVzIGRyYWdnaW5nJylcblxuICBpbnRlcmFjdGFibGUuZHJhZ2dhYmxlKGZhbHNlKVxuICB0Lm5vdE9rKGludGVyYWN0YWJsZS5vcHRpb25zLmRyYWcuZW5hYmxlZCxcbiAgICAnY2FsbGluZyBgaW50ZXJhY3RhYmxlLmRyYWdnYWJsZShmYWxzZSlgIGRpc2FibGVzIGRyYWdnaW5nJylcblxuICBpbnRlcmFjdGFibGUuZHJhZ2dhYmxlKHt9KVxuICB0Lm9rKGludGVyYWN0YWJsZS5vcHRpb25zLmRyYWcuZW5hYmxlZCxcbiAgICAnY2FsbGluZyBgaW50ZXJhY3RhYmxlLmRyYWdnYWJsZSh7fSlgIGVuYWJsZXMgZHJhZ2dpbmcnKVxuICB0Lm9rKGNhbGxlZFNldE9uRXZlbnRzLFxuICAgICdjYWxsaW5nIGBpbnRlcmFjdGFibGUuZHJhZ2dhYmxlKHt9KWAgY2FsbHMgdGhpcy5zZXRPbkV2ZW50cycpXG4gIHQub2soY2FsbGVkU2V0UGVyQWN0aW9uLFxuICAgICdjYWxsaW5nIGBpbnRlcmFjdGFibGUuZHJhZ2dhYmxlKHt9KWAgY2FsbHMgdGhpcy5zZXRQZXJBY3Rpb24nKVxuXG4gIGludGVyYWN0YWJsZS5kcmFnZ2FibGUoeyBlbmFibGVkOiBmYWxzZSB9KVxuICB0Lm5vdE9rKGludGVyYWN0YWJsZS5vcHRpb25zLmRyYWcuZW5hYmxlZCxcbiAgICAnY2FsbGluZyBgaW50ZXJhY3RhYmxlLmRyYWdnYWJsZSh7IGVuYWJsZWQ6IGZhbHNlIH0pYCBkaXNhYmxlcyBkcmFnZ2luZycpXG5cbiAgY29uc3QgYXhpc1NldHRpbmdzID0ge1xuICAgIGxvY2tBeGlzOiBbJ3gnLCAneScsICd4eScsICdzdGFydCddLFxuICAgIHN0YXJ0QXhpczogWyd4JywgJ3knLCAneHknXSxcbiAgfVxuXG4gIGZvciAoY29uc3QgYXhpcyBpbiBheGlzU2V0dGluZ3MpIHtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGF4aXNTZXR0aW5nc1theGlzXSkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9XG5cbiAgICAgIG9wdGlvbnNbYXhpc10gPSB2YWx1ZVxuXG4gICAgICBpbnRlcmFjdGFibGUuZHJhZ2dhYmxlKG9wdGlvbnMpXG4gICAgICB0LmVxdWFsKGludGVyYWN0YWJsZS5vcHRpb25zLmRyYWdbYXhpc10sIHZhbHVlLFxuICAgICAgICAnYCcgKyBheGlzICsgJzogXCInICsgdmFsdWUgKyAnXCJgIGlzIHNldCBjb3JyZWN0bHknKVxuXG4gICAgICBkZWxldGUgaW50ZXJhY3RhYmxlLm9wdGlvbnMuZHJhZ1theGlzXVxuICAgIH1cbiAgfVxuXG4gIHQuZW5kKClcbn0pXG5cbnRlc3QoJ2RyYWcgYXhpcycsICh0KSA9PiB7XG4gIGNvbnN0IHNjb3BlID0gaGVscGVycy5tb2NrU2NvcGUoKVxuXG4gIGludGVyYWN0aW9ucy5pbnN0YWxsKHNjb3BlKVxuICBkcmFnLmluc3RhbGwoc2NvcGUpXG5cbiAgY29uc3QgaW50ZXJhY3Rpb24gPSBzY29wZS5pbnRlcmFjdGlvbnMubmV3KHt9KVxuICBjb25zdCBlbGVtZW50ID0ge31cbiAgY29uc3QgaW50ZXJhY3RhYmxlID0ge1xuICAgIG9wdGlvbnM6IHtcbiAgICAgIGRyYWc6IHt9LFxuICAgIH0sXG4gICAgdGFyZ2V0OiBlbGVtZW50LFxuICB9IGFzIEludGVyYWN0LkludGVyYWN0YWJsZVxuICBjb25zdCBpRXZlbnQgPSB7IHBhZ2U6IHt9LCBjbGllbnQ6IHt9LCBkZWx0YToge30sIHR5cGU6ICdkcmFnbW92ZScgfSBhcyBJbnRlcmFjdC5JbnRlcmFjdEV2ZW50XG5cbiAgY29uc3Qgb3Bwb3NpdGVzID0geyB4OiAneScsIHk6ICd4JyB9XG4gIGNvbnN0IGV2ZW50Q29vcmRzID0ge1xuICAgIHBhZ2U6IHsgeDogLTEsIHk6IC0yIH0sXG4gICAgY2xpZW50OiB7IHg6IC0zLCB5OiAtNCB9LFxuICAgIGRlbHRhOiB7IHg6IC01LCB5OiAtNiB9LFxuICB9XG4gIGNvbnN0IGNvb3JkcyA9IGhlbHBlcnMubmV3Q29vcmRzU2V0KClcblxuICByZXNldENvb3JkcygpXG4gIGludGVyYWN0aW9uLnByZXBhcmVkID0geyBuYW1lOiAnZHJhZycsIGF4aXM6ICd4eScgfVxuICBpbnRlcmFjdGlvbi50YXJnZXQgPSBpbnRlcmFjdGFibGVcblxuICB0LnRlc3QoJ3h5IChhbnkgZGlyZWN0aW9uKScsICh0dCkgPT4ge1xuICAgIHNjb3BlLmludGVyYWN0aW9ucy5zaWduYWxzLmZpcmUoJ2JlZm9yZS1hY3Rpb24tbW92ZScsIHsgaW50ZXJhY3Rpb24gfSlcblxuICAgIHR0LmRlZXBFcXVhbChpbnRlcmFjdGlvbi5jb29yZHMuc3RhcnQsIGNvb3Jkcy5zdGFydCxcbiAgICAgICdjb29yZHMuc3RhcnQgaXMgbm90IG1vZGlmaWVkJylcbiAgICB0dC5kZWVwRXF1YWwoaW50ZXJhY3Rpb24uY29vcmRzLmRlbHRhLCBjb29yZHMuZGVsdGEsXG4gICAgICAnY29vcmRzLmRlbHRhIGlzIG5vdCBtb2RpZmllZCcpXG5cbiAgICBzY29wZS5pbnRlcmFjdGlvbnMuc2lnbmFscy5maXJlKCdhY3Rpb24tbW92ZScsIHsgaUV2ZW50LCBpbnRlcmFjdGlvbiB9KVxuXG4gICAgdHQuZGVlcEVxdWFsKGlFdmVudC5wYWdlLCBldmVudENvb3Jkcy5wYWdlLCAncGFnZSBjb29yZHMgYXJlIG5vdCBtb2RpZmllZCcpXG4gICAgdHQuZGVlcEVxdWFsKGlFdmVudC5kZWx0YSwgZXZlbnRDb29yZHMuZGVsdGEsICdkZWx0YSBpcyBub3QgbW9kaWZpZWQnKVxuXG4gICAgdHQuZW5kKClcbiAgfSlcblxuICBmb3IgKGNvbnN0IGF4aXMgaW4gb3Bwb3NpdGVzKSB7XG4gICAgY29uc3Qgb3Bwb3NpdGUgPSBvcHBvc2l0ZXNbYXhpc11cblxuICAgIHQudGVzdChheGlzICsgJy1heGlzJywgKHR0KSA9PiB7XG4gICAgICByZXNldENvb3JkcygpXG4gICAgICBpbnRlcmFjdGlvbi5wcmVwYXJlZC5heGlzID0gYXhpcyBhcyBhbnlcblxuICAgICAgc2NvcGUuaW50ZXJhY3Rpb25zLnNpZ25hbHMuZmlyZSgnYWN0aW9uLW1vdmUnLCB7IGlFdmVudCwgaW50ZXJhY3Rpb24gfSlcblxuICAgICAgdHQuZGVlcEVxdWFsKFxuICAgICAgICBpRXZlbnQuZGVsdGEsXG4gICAgICAgIHtcbiAgICAgICAgICBbb3Bwb3NpdGVdOiAwLFxuICAgICAgICAgIFtheGlzXTogZXZlbnRDb29yZHMuZGVsdGFbYXhpc10sXG4gICAgICAgIH0sXG4gICAgICAgIGBvcHBvc2l0ZSBheGlzICgke29wcG9zaXRlfSkgZGVsdGEgaXMgMDsgdGFyZ2V0IGF4aXMgKCR7YXhpc30pIGRlbHRhIGlzIG5vdCBtb2RpZmllZGApXG5cbiAgICAgIHR0LmRlZXBFcXVhbChcbiAgICAgICAgaUV2ZW50LnBhZ2UsXG4gICAgICAgIHtcbiAgICAgICAgICBbb3Bwb3NpdGVdOiBjb29yZHMuc3RhcnQucGFnZVtvcHBvc2l0ZV0sXG4gICAgICAgICAgW2F4aXNdOiBldmVudENvb3Jkcy5wYWdlW2F4aXNdLFxuICAgICAgICB9LFxuICAgICAgICBgcGFnZS4ke29wcG9zaXRlfSBpcyBjb29yZHMuc3RhcnQgdmFsdWVgXG4gICAgICApXG5cbiAgICAgIHR0LmVxdWFsKFxuICAgICAgICBpRXZlbnQucGFnZVtheGlzXSxcbiAgICAgICAgZXZlbnRDb29yZHMucGFnZVtheGlzXSxcbiAgICAgICAgYHBhZ2UuJHtheGlzfSBpcyBub3QgbW9kaWZpZWRgXG4gICAgICApXG5cbiAgICAgIHR0LmVxdWFsKFxuICAgICAgICBpRXZlbnQuY2xpZW50W29wcG9zaXRlXSxcbiAgICAgICAgY29vcmRzLnN0YXJ0LmNsaWVudFtvcHBvc2l0ZV0sXG4gICAgICAgIGBjbGllbnQuJHtvcHBvc2l0ZX0gaXMgY29vcmRzLnN0YXJ0IHZhbHVlYFxuICAgICAgKVxuICAgICAgdHQuZXF1YWwoXG4gICAgICAgIGlFdmVudC5jbGllbnRbYXhpc10sXG4gICAgICAgIGV2ZW50Q29vcmRzLmNsaWVudFtheGlzXSxcbiAgICAgICAgYGNsaWVudC4ke2F4aXN9IGlzIG5vdCBtb2RpZmllZGBcbiAgICAgIClcblxuICAgICAgdHQuZW5kKClcbiAgICB9KVxuICB9XG5cbiAgdC5lbmQoKVxuXG4gIGZ1bmN0aW9uIHJlc2V0Q29vcmRzICgpIHtcbiAgICBwb2ludGVyVXRpbHMuY29weUNvb3JkcyhpRXZlbnQsIGV2ZW50Q29vcmRzKVxuICAgIGV4dGVuZChpRXZlbnQuZGVsdGEsIGV2ZW50Q29vcmRzLmRlbHRhKVxuXG4gICAgZm9yIChjb25zdCBwcm9wIGluIGNvb3Jkcykge1xuICAgICAgcG9pbnRlclV0aWxzLmNvcHlDb29yZHMoaW50ZXJhY3Rpb24uY29vcmRzW3Byb3BdLCBjb29yZHNbcHJvcF0pXG4gICAgfVxuICB9XG59KVxuIl19 \ No newline at end of file diff --git a/packages/actions/tests/drop/DropEvent.d.ts b/packages/actions/tests/drop/DropEvent.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/actions/tests/drop/DropEvent.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/actions/tests/drop/DropEvent.js b/packages/actions/tests/drop/DropEvent.js new file mode 100644 index 000000000..4be774d40 --- /dev/null +++ b/packages/actions/tests/drop/DropEvent.js @@ -0,0 +1,75 @@ +import test from '@interactjs/_dev/test/test'; +import * as utils from '@interactjs/utils'; +import DropEvent from '../../drop/DropEvent'; +const dz1 = { target: 'dz1', fire(event) { this.fired = event; } }; +const dz2 = { target: 'dz2', fire(event) { this.fired = event; } }; +const el1 = Symbol('el1'); +const el2 = Symbol('el2'); +const interactable = Symbol('interactable'); +const dragElement = Symbol('drag-el'); +test('DropEvent constructor', (t) => { + const interaction = { dropStatus: {} }; + const dragEvent = Object.freeze({ interaction, interactable, target: dragElement, timeStamp: 10 }); + utils.extend(interaction.dropStatus, { + activeDrops: [ + { dropzone: dz1, element: el1 }, + { dropzone: dz2, element: el2 }, + ], + cur: { dropzone: dz1, element: el1 }, + prev: { dropzone: dz2, element: el2 }, + events: {}, + }); + const dropmove = new DropEvent(interaction.dropStatus, dragEvent, 'dropmove'); + t.equal(dropmove.target, el1, 'dropmove uses dropStatus.cur.element'); + t.equal(dropmove.dropzone, dz1, 'dropmove uses dropStatus.cur.dropzone'); + t.equal(dropmove.relatedTarget, dragElement); + const dragleave = new DropEvent(interaction.dropStatus, dragEvent, 'dragleave'); + t.equal(dragleave.target, el2, 'dropmove uses dropStatus.prev.element'); + t.equal(dragleave.dropzone, dz2, 'dropmove uses dropStatus.prev.dropzone'); + t.equal(dragleave.relatedTarget, dragElement); + t.end(); +}); +test('DropEvent.reject()', (t) => { + const interaction = { dropStatus: {} }; + const dragEvent = Object.freeze({ interaction, interactable, target: dragElement, timeStamp: 10 }); + utils.extend(interaction.dropStatus, { + activeDrops: [ + { dropzone: dz1, element: el1 }, + { dropzone: dz2, element: el2 }, + ], + cur: { dropzone: null, element: null }, + prev: { dropzone: null, element: null }, + events: {}, + }); + const dropactivate = new DropEvent(interaction.dropStatus, dragEvent, 'dropactivate'); + dropactivate.dropzone = dz1; + dropactivate.target = el1; + dropactivate.reject(); + t.ok(dropactivate.propagationStopped && dropactivate.immediatePropagationStopped, 'rejected event propagation is stopped'); + t.equal(dz1.fired.type, 'dropdeactivate', 'dropdeactivate is fired on rejected dropzone'); + t.deepEqual(interaction.dropStatus.activeDrops, [{ dropzone: dz2, element: el2 }], 'activeDrop of rejected dropactivate event is removed'); + t.deepEqual(interaction.dropStatus.cur, { dropzone: null, element: null }, 'dropStatus.cur dropzone and element are set to null after rejecting dropactivate'); + utils.extend(interaction.dropStatus, { + cur: { dropzone: dz1, element: el1 }, + prev: { dropzone: null, element: null }, + events: {}, + }); + const dropmove = new DropEvent(interaction.dropStatus, dragEvent, 'dropmove'); + dropmove.reject(); + t.deepEqual(interaction.dropStatus.cur, { dropzone: dz1, element: el1 }, 'dropStatus.cur remains the same after rejecting non activate event'); + t.ok(interaction.dropStatus.rejected, 'dropStatus.rejected === true'); + t.equal(dz1.fired.type, 'dragleave', 'dragleave is fired on rejected dropzone'); + t.end(); +}); +test('DropEvent.stop[Immediate]Propagation()', (t) => { + const dropEvent = new DropEvent({ cur: {} }, {}, 'dragmove'); + t.notOk(dropEvent.propagationStopped || dropEvent.immediatePropagationStopped); + dropEvent.stopPropagation(); + t.ok(dropEvent.propagationStopped); + t.notOk(dropEvent.immediatePropagationStopped); + dropEvent.propagationStopped = false; + dropEvent.stopImmediatePropagation(); + t.ok(dropEvent.propagationStopped && dropEvent.immediatePropagationStopped); + t.end(); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHJvcEV2ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiRHJvcEV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sS0FBSyxLQUFLLE1BQU0sbUJBQW1CLENBQUE7QUFDMUMsT0FBTyxTQUFTLE1BQU0sc0JBQXNCLENBQUE7QUFFNUMsTUFBTSxHQUFHLEdBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBRSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUN2RSxNQUFNLEdBQUcsR0FBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQSxDQUFDLENBQUMsRUFBRSxDQUFBO0FBQ3ZFLE1BQU0sR0FBRyxHQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUM5QixNQUFNLEdBQUcsR0FBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDOUIsTUFBTSxZQUFZLEdBQVEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0FBQ2hELE1BQU0sV0FBVyxHQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUUxQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtJQUNsQyxNQUFNLFdBQVcsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQTtJQUN0QyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBRWxHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRTtRQUNuQyxXQUFXLEVBQUU7WUFD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Q0FBQyx3Q0FBd0MsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO0lBQ25ELE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUU1RCxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsSUFBSSxTQUFTLENBQUMsMkJBQTJCLENBQUMsQ0FBQTtJQUU5RSxTQUFTLENBQUMsZUFBZSxFQUFFLENBQUE7SUFDM0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUNsQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFBO0lBRTlDLFNBQVMsQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUE7SUFFcEMsU0FBUyxDQUFDLHdCQUF3QixFQUFFLENBQUE7SUFDcEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLElBQUksU0FBUyxDQUFDLDJCQUEyQixDQUFDLENBQUE7SUFFM0UsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdGVzdCBmcm9tICdAaW50ZXJhY3Rqcy9fZGV2L3Rlc3QvdGVzdCdcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzJ1xuaW1wb3J0IERyb3BFdmVudCBmcm9tICcuLi8uLi9kcm9wL0Ryb3BFdmVudCdcblxuY29uc3QgZHoxOiBhbnkgPSB7IHRhcmdldDogJ2R6MScsIGZpcmUgKGV2ZW50KSB7IHRoaXMuZmlyZWQgPSBldmVudCB9IH1cbmNvbnN0IGR6MjogYW55ID0geyB0YXJnZXQ6ICdkejInLCBmaXJlIChldmVudCkgeyB0aGlzLmZpcmVkID0gZXZlbnQgfSB9XG5jb25zdCBlbDE6IGFueSA9IFN5bWJvbCgnZWwxJylcbmNvbnN0IGVsMjogYW55ID0gU3ltYm9sKCdlbDInKVxuY29uc3QgaW50ZXJhY3RhYmxlOiBhbnkgPSBTeW1ib2woJ2ludGVyYWN0YWJsZScpXG5jb25zdCBkcmFnRWxlbWVudDogYW55ID0gU3ltYm9sKCdkcmFnLWVsJylcblxudGVzdCgnRHJvcEV2ZW50IGNvbnN0cnVjdG9yJywgKHQpID0+IHtcbiAgY29uc3QgaW50ZXJhY3Rpb24gPSB7IGRyb3BTdGF0dXM6IHt9IH1cbiAgY29uc3QgZHJhZ0V2ZW50ID0gT2JqZWN0LmZyZWV6ZSh7IGludGVyYWN0aW9uLCBpbnRlcmFjdGFibGUsIHRhcmdldDogZHJhZ0VsZW1lbnQsIHRpbWVTdGFtcDogMTAgfSlcblxuICB1dGlscy5leHRlbmQoaW50ZXJhY3Rpb24uZHJvcFN0YXR1cywge1xuICAgIGFjdGl2ZURyb3BzOiBbXG4gICAgICB7IGRyb3B6b25lOiBkejEsIGVsZW1lbnQ6IGVsMSB9LFxuICAgICAgeyBkcm9wem9uZTogZHoyLCBlbGVtZW50OiBlbDIgfSxcbiAgICBdLFxuICAgIGN1ciA6IHsgZHJvcHpvbmU6IGR6MSwgZWxlbWVudDogZWwxIH0sXG4gICAgcHJldjogeyBkcm9wem9uZTogZHoyLCBlbGVtZW50OiBlbDIgfSxcbiAgICBldmVudHM6IHt9LFxuICB9KVxuXG4gIGNvbnN0IGRyb3Btb3ZlID0gbmV3IERyb3BFdmVudChpbnRlcmFjdGlvbi5kcm9wU3RhdHVzLCBkcmFnRXZlbnQsICdkcm9wbW92ZScpXG5cbiAgdC5lcXVhbChkcm9wbW92ZS50YXJnZXQsIGVsMSwgJ2Ryb3Btb3ZlIHVzZXMgZHJvcFN0YXR1cy5jdXIuZWxlbWVudCcpXG4gIHQuZXF1YWwoZHJvcG1vdmUuZHJvcHpvbmUsIGR6MSwgJ2Ryb3Btb3ZlIHVzZXMgZHJvcFN0YXR1cy5jdXIuZHJvcHpvbmUnKVxuICB0LmVxdWFsKGRyb3Btb3ZlLnJlbGF0ZWRUYXJnZXQsIGRyYWdFbGVtZW50KVxuXG4gIGNvbnN0IGRyYWdsZWF2ZSA9IG5ldyBEcm9wRXZlbnQoaW50ZXJhY3Rpb24uZHJvcFN0YXR1cywgZHJhZ0V2ZW50LCAnZHJhZ2xlYXZlJylcblxuICB0LmVxdWFsKGRyYWdsZWF2ZS50YXJnZXQsIGVsMiwgJ2Ryb3Btb3ZlIHVzZXMgZHJvcFN0YXR1cy5wcmV2LmVsZW1lbnQnKVxuICB0LmVxdWFsKGRyYWdsZWF2ZS5kcm9wem9uZSwgZHoyLCAnZHJvcG1vdmUgdXNlcyBkcm9wU3RhdHVzLnByZXYuZHJvcHpvbmUnKVxuICB0LmVxdWFsKGRyYWdsZWF2ZS5yZWxhdGVkVGFyZ2V0LCBkcmFnRWxlbWVudClcblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdEcm9wRXZlbnQucmVqZWN0KCknLCAodCkgPT4ge1xuICBjb25zdCBpbnRlcmFjdGlvbjogYW55ID0geyBkcm9wU3RhdHVzOiB7fSB9XG4gIGNvbnN0IGRyYWdFdmVudCA9IE9iamVjdC5mcmVlemUoeyBpbnRlcmFjdGlvbiwgaW50ZXJhY3RhYmxlLCB0YXJnZXQ6IGRyYWdFbGVtZW50LCB0aW1lU3RhbXA6IDEwIH0pXG5cbiAgdXRpbHMuZXh0ZW5kKGludGVyYWN0aW9uLmRyb3BTdGF0dXMsIHtcbiAgICBhY3RpdmVEcm9wczogW1xuICAgICAgeyBkcm9wem9uZTogZHoxLCBlbGVtZW50OiBlbDEgfSxcbiAgICAgIHsgZHJvcHpvbmU6IGR6MiwgZWxlbWVudDogZWwyIH0sXG4gICAgXSxcbiAgICBjdXIgOiB7IGRyb3B6b25lOiBudWxsLCBlbGVtZW50OiBudWxsIH0sXG4gICAgcHJldjogeyBkcm9wem9uZTogbnVsbCwgZWxlbWVudDogbnVsbCB9LFxuICAgIGV2ZW50czoge30sXG4gIH0pXG5cbiAgY29uc3QgZHJvcGFjdGl2YXRlID0gbmV3IERyb3BFdmVudChpbnRlcmFjdGlvbi5kcm9wU3RhdHVzLCBkcmFnRXZlbnQsICdkcm9wYWN0aXZhdGUnKVxuXG4gIGRyb3BhY3RpdmF0ZS5kcm9wem9uZSA9IGR6MVxuICBkcm9wYWN0aXZhdGUudGFyZ2V0ID0gZWwxXG4gIGRyb3BhY3RpdmF0ZS5yZWplY3QoKVxuXG4gIHQub2soZHJvcGFjdGl2YXRlLnByb3BhZ2F0aW9uU3RvcHBlZCAmJiBkcm9wYWN0aXZhdGUuaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkLFxuICAgICdyZWplY3RlZCBldmVudCBwcm9wYWdhdGlvbiBpcyBzdG9wcGVkJylcblxuICB0LmVxdWFsKGR6MS5maXJlZC50eXBlLCAnZHJvcGRlYWN0aXZhdGUnLCAnZHJvcGRlYWN0aXZhdGUgaXMgZmlyZWQgb24gcmVqZWN0ZWQgZHJvcHpvbmUnKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGludGVyYWN0aW9uLmRyb3BTdGF0dXMuYWN0aXZlRHJvcHMsXG4gICAgW3sgZHJvcHpvbmU6IGR6MiwgZWxlbWVudDogZWwyIH1dLFxuICAgICdhY3RpdmVEcm9wIG9mIHJlamVjdGVkIGRyb3BhY3RpdmF0ZSBldmVudCBpcyByZW1vdmVkJylcblxuICB0LmRlZXBFcXVhbChcbiAgICBpbnRlcmFjdGlvbi5kcm9wU3RhdHVzLmN1cixcbiAgICB7IGRyb3B6b25lOiBudWxsLCBlbGVtZW50OiBudWxsIH0sXG4gICAgJ2Ryb3BTdGF0dXMuY3VyIGRyb3B6b25lIGFuZCBlbGVtZW50IGFyZSBzZXQgdG8gbnVsbCBhZnRlciByZWplY3RpbmcgZHJvcGFjdGl2YXRlJylcblxuICB1dGlscy5leHRlbmQoaW50ZXJhY3Rpb24uZHJvcFN0YXR1cywge1xuICAgIGN1ciA6IHsgZHJvcHpvbmU6IGR6MSwgZWxlbWVudDogZWwxIH0sXG4gICAgcHJldjogeyBkcm9wem9uZTogbnVsbCwgZWxlbWVudDogbnVsbCB9LFxuICAgIGV2ZW50czoge30sXG4gIH0pXG5cbiAgY29uc3QgZHJvcG1vdmUgPSBuZXcgRHJvcEV2ZW50KGludGVyYWN0aW9uLmRyb3BTdGF0dXMsIGRyYWdFdmVudCwgJ2Ryb3Btb3ZlJylcblxuICBkcm9wbW92ZS5yZWplY3QoKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGludGVyYWN0aW9uLmRyb3BTdGF0dXMuY3VyLFxuICAgIHsgZHJvcHpvbmU6IGR6MSwgZWxlbWVudDogZWwxIH0sXG4gICAgJ2Ryb3BTdGF0dXMuY3VyIHJlbWFpbnMgdGhlIHNhbWUgYWZ0ZXIgcmVqZWN0aW5nIG5vbiBhY3RpdmF0ZSBldmVudCcpXG5cbiAgdC5vayhpbnRlcmFjdGlvbi5kcm9wU3RhdHVzLnJlamVjdGVkLCAnZHJvcFN0YXR1cy5yZWplY3RlZCA9PT0gdHJ1ZScpXG5cbiAgdC5lcXVhbChkejEuZmlyZWQudHlwZSwgJ2RyYWdsZWF2ZScsICdkcmFnbGVhdmUgaXMgZmlyZWQgb24gcmVqZWN0ZWQgZHJvcHpvbmUnKVxuXG4gIHQuZW5kKClcbn0pXG5cbnRlc3QoJ0Ryb3BFdmVudC5zdG9wW0ltbWVkaWF0ZV1Qcm9wYWdhdGlvbigpJywgKHQpID0+IHtcbiAgY29uc3QgZHJvcEV2ZW50ID0gbmV3IERyb3BFdmVudCh7IGN1cjoge30gfSwge30sICdkcmFnbW92ZScpXG5cbiAgdC5ub3RPayhkcm9wRXZlbnQucHJvcGFnYXRpb25TdG9wcGVkIHx8IGRyb3BFdmVudC5pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQpXG5cbiAgZHJvcEV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIHQub2soZHJvcEV2ZW50LnByb3BhZ2F0aW9uU3RvcHBlZClcbiAgdC5ub3RPayhkcm9wRXZlbnQuaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKVxuXG4gIGRyb3BFdmVudC5wcm9wYWdhdGlvblN0b3BwZWQgPSBmYWxzZVxuXG4gIGRyb3BFdmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuICB0Lm9rKGRyb3BFdmVudC5wcm9wYWdhdGlvblN0b3BwZWQgJiYgZHJvcEV2ZW50LmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZClcblxuICB0LmVuZCgpXG59KVxuIl19 \ No newline at end of file diff --git a/packages/actions/tests/drop/index.d.ts b/packages/actions/tests/drop/index.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/actions/tests/drop/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/actions/tests/drop/index.js b/packages/actions/tests/drop/index.js new file mode 100644 index 000000000..6ae197107 --- /dev/null +++ b/packages/actions/tests/drop/index.js @@ -0,0 +1,30 @@ +import test from '@interactjs/_dev/test/test'; +import * as helpers from '@interactjs/core/tests/helpers'; +import interactions from '@interactjs/core/interactions'; +import drop from '../../drop'; +test('actions/drop options', t => { + const scope = helpers.mockScope(); + scope.interact = {}; + interactions.install(scope); + drop.install(scope); + const interactable = scope.interactables.new('test'); + const funcs = Object.freeze({ + drop() { }, + activate() { }, + deactivate() { }, + dropmove() { }, + dragenter() { }, + dragleave() { }, + }); + interactable.dropzone({ + listeners: [funcs], + }); + t.equal(interactable.events.types.drop[0], funcs.drop); + t.equal(interactable.events.types.dropactivate[0], funcs.activate); + t.equal(interactable.events.types.dropdeactivate[0], funcs.deactivate); + t.equal(interactable.events.types.dropmove[0], funcs.dropmove); + t.equal(interactable.events.types.dragenter[0], funcs.dragenter); + t.equal(interactable.events.types.dragleave[0], funcs.dragleave); + t.end(); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSw0QkFBNEIsQ0FBQTtBQUM3QyxPQUFPLEtBQUssT0FBTyxNQUFNLGdDQUFnQyxDQUFBO0FBQ3pELE9BQU8sWUFBWSxNQUFNLCtCQUErQixDQUFBO0FBQ3hELE9BQU8sSUFBSSxNQUFNLFlBQVksQ0FBQTtBQUU3QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDL0IsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBQ2pDLEtBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFBO0lBQ25CLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUVuQixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUVwRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzFCLElBQUksS0FBSyxDQUFDO1FBQ1YsUUFBUSxLQUFLLENBQUM7UUFDZCxVQUFVLEtBQUssQ0FBQztRQUNoQixRQUFRLEtBQUssQ0FBQztRQUNkLFNBQVMsS0FBSyxDQUFDO1FBQ2YsU0FBUyxLQUFLLENBQUM7S0FDaEIsQ0FBQyxDQUFBO0lBRUYsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUNwQixTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUM7S0FDbkIsQ0FBQyxDQUFBO0lBRUYsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3RELENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNsRSxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDdEUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzlELENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNoRSxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7SUFFaEUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdGVzdCBmcm9tICdAaW50ZXJhY3Rqcy9fZGV2L3Rlc3QvdGVzdCdcbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnQGludGVyYWN0anMvY29yZS90ZXN0cy9oZWxwZXJzJ1xuaW1wb3J0IGludGVyYWN0aW9ucyBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL2ludGVyYWN0aW9ucydcbmltcG9ydCBkcm9wIGZyb20gJy4uLy4uL2Ryb3AnXG5cbnRlc3QoJ2FjdGlvbnMvZHJvcCBvcHRpb25zJywgdCA9PiB7XG4gIGNvbnN0IHNjb3BlID0gaGVscGVycy5tb2NrU2NvcGUoKVxuICBzY29wZS5pbnRlcmFjdCA9IHt9XG4gIGludGVyYWN0aW9ucy5pbnN0YWxsKHNjb3BlKVxuICBkcm9wLmluc3RhbGwoc2NvcGUpXG5cbiAgY29uc3QgaW50ZXJhY3RhYmxlID0gc2NvcGUuaW50ZXJhY3RhYmxlcy5uZXcoJ3Rlc3QnKVxuXG4gIGNvbnN0IGZ1bmNzID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgZHJvcCAoKSB7fSxcbiAgICBhY3RpdmF0ZSAoKSB7fSxcbiAgICBkZWFjdGl2YXRlICgpIHt9LFxuICAgIGRyb3Btb3ZlICgpIHt9LFxuICAgIGRyYWdlbnRlciAoKSB7fSxcbiAgICBkcmFnbGVhdmUgKCkge30sXG4gIH0pXG5cbiAgaW50ZXJhY3RhYmxlLmRyb3B6b25lKHtcbiAgICBsaXN0ZW5lcnM6IFtmdW5jc10sXG4gIH0pXG5cbiAgdC5lcXVhbChpbnRlcmFjdGFibGUuZXZlbnRzLnR5cGVzLmRyb3BbMF0sIGZ1bmNzLmRyb3ApXG4gIHQuZXF1YWwoaW50ZXJhY3RhYmxlLmV2ZW50cy50eXBlcy5kcm9wYWN0aXZhdGVbMF0sIGZ1bmNzLmFjdGl2YXRlKVxuICB0LmVxdWFsKGludGVyYWN0YWJsZS5ldmVudHMudHlwZXMuZHJvcGRlYWN0aXZhdGVbMF0sIGZ1bmNzLmRlYWN0aXZhdGUpXG4gIHQuZXF1YWwoaW50ZXJhY3RhYmxlLmV2ZW50cy50eXBlcy5kcm9wbW92ZVswXSwgZnVuY3MuZHJvcG1vdmUpXG4gIHQuZXF1YWwoaW50ZXJhY3RhYmxlLmV2ZW50cy50eXBlcy5kcmFnZW50ZXJbMF0sIGZ1bmNzLmRyYWdlbnRlcilcbiAgdC5lcXVhbChpbnRlcmFjdGFibGUuZXZlbnRzLnR5cGVzLmRyYWdsZWF2ZVswXSwgZnVuY3MuZHJhZ2xlYXZlKVxuXG4gIHQuZW5kKClcbn0pXG4iXX0= \ No newline at end of file diff --git a/packages/actions/tests/resize.d.ts b/packages/actions/tests/resize.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/actions/tests/resize.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/actions/tests/resize.js b/packages/actions/tests/resize.js new file mode 100644 index 000000000..4513cb2de --- /dev/null +++ b/packages/actions/tests/resize.js @@ -0,0 +1,40 @@ +import * as helpers from '@interactjs/core/tests/helpers'; +import pointerUtils from '@interactjs/utils/pointerUtils'; +import test from '@interactjs/_dev/test/test'; +import resize from '../resize'; +test('resize', t => { + const scope = helpers.mockScope(); + resize.install(scope); + t.ok(scope.actions.names.includes('resize'), '"resize" in actions.names'); + t.equal(scope.actions.methodDict.resize, 'resizable'); + t.equal(typeof scope.Interactable.prototype.resizable, 'function', 'Interactable.resizable method is added'); + const page = { x: 0, y: 0 }; + const event = pointerUtils.coordsToEvent({ page, client: page }); + const interactable = scope.interactables.new('test', {}) + .resizable({ + edges: { left: true, top: true, right: true, bottom: true }, + // use margin greater than width and height + margin: Infinity, + }); + const interaction = scope.interactions.new({}); + const rect = { left: 0, top: 0, right: 10, bottom: 10 }; + interaction.updatePointer(event, event, {}, true); + t.deepEqual(scope.actions.resize.checker(event, event, interactable, {}, interaction, rect), { + name: 'resize', + edges: { left: true, top: true, right: false, bottom: false }, + }); + page.x = 10; + interaction.updatePointer(event, event, {}, true); + t.deepEqual(scope.actions.resize.checker(event, event, interactable, {}, interaction, rect), { + name: 'resize', + edges: { left: false, top: true, right: true, bottom: false }, + }); + page.y = 10; + interaction.updatePointer(event, event, {}, true); + t.deepEqual(scope.actions.resize.checker(event, event, interactable, {}, interaction, rect), { + name: 'resize', + edges: { left: false, top: false, right: true, bottom: true }, + }); + t.end(); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVzaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZ0NBQWdDLENBQUE7QUFDekQsT0FBTyxZQUFZLE1BQU0sZ0NBQWdDLENBQUE7QUFDekQsT0FBTyxJQUFJLE1BQU0sNEJBQTRCLENBQUE7QUFDN0MsT0FBTyxNQUFNLE1BQU0sV0FBVyxDQUFBO0FBRTlCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDakIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBRWpDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFckIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsMkJBQTJCLENBQUMsQ0FBQTtJQUN6RSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUNyRCxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFBO0lBRTVHLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUE7SUFDM0IsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUNoRSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1NBQ3JELFNBQVMsQ0FBQztRQUNULEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7UUFDM0QsMkNBQTJDO1FBQzNDLE1BQU0sRUFBRSxRQUFRO0tBQ2pCLENBQUMsQ0FBQTtJQUNKLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQzlDLE1BQU0sSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFBO0lBRXZELFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFFakQsQ0FBQyxDQUFDLFNBQVMsQ0FDVCxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFDL0U7UUFDRSxJQUFJLEVBQUUsUUFBUTtRQUNkLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7S0FDOUQsQ0FDRixDQUFBO0lBRUQsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7SUFDWCxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBRWpELENBQUMsQ0FBQyxTQUFTLENBQ1QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQy9FO1FBQ0UsSUFBSSxFQUFFLFFBQVE7UUFDZCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO0tBQzlELENBQ0YsQ0FBQTtJQUVELElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQ1gsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUVqRCxDQUFDLENBQUMsU0FBUyxDQUNULEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUMvRTtRQUNFLElBQUksRUFBRSxRQUFRO1FBQ2QsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtLQUM5RCxDQUNGLENBQUE7SUFFRCxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7QUFDVCxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnQGludGVyYWN0anMvY29yZS90ZXN0cy9oZWxwZXJzJ1xuaW1wb3J0IHBvaW50ZXJVdGlscyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9wb2ludGVyVXRpbHMnXG5pbXBvcnQgdGVzdCBmcm9tICdAaW50ZXJhY3Rqcy9fZGV2L3Rlc3QvdGVzdCdcbmltcG9ydCByZXNpemUgZnJvbSAnLi4vcmVzaXplJ1xuXG50ZXN0KCdyZXNpemUnLCB0ID0+IHtcbiAgY29uc3Qgc2NvcGUgPSBoZWxwZXJzLm1vY2tTY29wZSgpXG5cbiAgcmVzaXplLmluc3RhbGwoc2NvcGUpXG5cbiAgdC5vayhzY29wZS5hY3Rpb25zLm5hbWVzLmluY2x1ZGVzKCdyZXNpemUnKSwgJ1wicmVzaXplXCIgaW4gYWN0aW9ucy5uYW1lcycpXG4gIHQuZXF1YWwoc2NvcGUuYWN0aW9ucy5tZXRob2REaWN0LnJlc2l6ZSwgJ3Jlc2l6YWJsZScpXG4gIHQuZXF1YWwodHlwZW9mIHNjb3BlLkludGVyYWN0YWJsZS5wcm90b3R5cGUucmVzaXphYmxlLCAnZnVuY3Rpb24nLCAnSW50ZXJhY3RhYmxlLnJlc2l6YWJsZSBtZXRob2QgaXMgYWRkZWQnKVxuXG4gIGNvbnN0IHBhZ2UgPSB7IHg6IDAsIHk6IDAgfVxuICBjb25zdCBldmVudCA9IHBvaW50ZXJVdGlscy5jb29yZHNUb0V2ZW50KHsgcGFnZSwgY2xpZW50OiBwYWdlIH0pXG4gIGNvbnN0IGludGVyYWN0YWJsZSA9IHNjb3BlLmludGVyYWN0YWJsZXMubmV3KCd0ZXN0Jywge30pXG4gICAgLnJlc2l6YWJsZSh7XG4gICAgICBlZGdlczogeyBsZWZ0OiB0cnVlLCB0b3A6IHRydWUsIHJpZ2h0OiB0cnVlLCBib3R0b206IHRydWUgfSxcbiAgICAgIC8vIHVzZSBtYXJnaW4gZ3JlYXRlciB0aGFuIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgIG1hcmdpbjogSW5maW5pdHksXG4gICAgfSlcbiAgY29uc3QgaW50ZXJhY3Rpb24gPSBzY29wZS5pbnRlcmFjdGlvbnMubmV3KHt9KVxuICBjb25zdCByZWN0ID0geyBsZWZ0OiAwLCB0b3A6IDAsIHJpZ2h0OiAxMCwgYm90dG9tOiAxMCB9XG5cbiAgaW50ZXJhY3Rpb24udXBkYXRlUG9pbnRlcihldmVudCwgZXZlbnQsIHt9LCB0cnVlKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIHNjb3BlLmFjdGlvbnMucmVzaXplLmNoZWNrZXIoZXZlbnQsIGV2ZW50LCBpbnRlcmFjdGFibGUsIHt9LCBpbnRlcmFjdGlvbiwgcmVjdCksXG4gICAge1xuICAgICAgbmFtZTogJ3Jlc2l6ZScsXG4gICAgICBlZGdlczogeyBsZWZ0OiB0cnVlLCB0b3A6IHRydWUsIHJpZ2h0OiBmYWxzZSwgYm90dG9tOiBmYWxzZSB9LFxuICAgIH0sXG4gIClcblxuICBwYWdlLnggPSAxMFxuICBpbnRlcmFjdGlvbi51cGRhdGVQb2ludGVyKGV2ZW50LCBldmVudCwge30sIHRydWUpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgc2NvcGUuYWN0aW9ucy5yZXNpemUuY2hlY2tlcihldmVudCwgZXZlbnQsIGludGVyYWN0YWJsZSwge30sIGludGVyYWN0aW9uLCByZWN0KSxcbiAgICB7XG4gICAgICBuYW1lOiAncmVzaXplJyxcbiAgICAgIGVkZ2VzOiB7IGxlZnQ6IGZhbHNlLCB0b3A6IHRydWUsIHJpZ2h0OiB0cnVlLCBib3R0b206IGZhbHNlIH0sXG4gICAgfSxcbiAgKVxuXG4gIHBhZ2UueSA9IDEwXG4gIGludGVyYWN0aW9uLnVwZGF0ZVBvaW50ZXIoZXZlbnQsIGV2ZW50LCB7fSwgdHJ1ZSlcblxuICB0LmRlZXBFcXVhbChcbiAgICBzY29wZS5hY3Rpb25zLnJlc2l6ZS5jaGVja2VyKGV2ZW50LCBldmVudCwgaW50ZXJhY3RhYmxlLCB7fSwgaW50ZXJhY3Rpb24sIHJlY3QpLFxuICAgIHtcbiAgICAgIG5hbWU6ICdyZXNpemUnLFxuICAgICAgZWRnZXM6IHsgbGVmdDogZmFsc2UsIHRvcDogZmFsc2UsIHJpZ2h0OiB0cnVlLCBib3R0b206IHRydWUgfSxcbiAgICB9LFxuICApXG5cbiAgdC5lbmQoKVxufSlcbiJdfQ== \ No newline at end of file diff --git a/packages/auto-scroll/index.d.ts b/packages/auto-scroll/index.d.ts index 59eb7294b..90b8bf844 100644 --- a/packages/auto-scroll/index.d.ts +++ b/packages/auto-scroll/index.d.ts @@ -4,6 +4,11 @@ declare module '@interactjs/core/scope' { autoScroll: typeof autoScroll; } } +declare module '@interactjs/core/Interaction' { + interface Interaction { + autoScroll?: typeof autoScroll; + } +} declare module '@interactjs/core/defaultOptions' { interface PerActionDefaults { autoScroll?: Interact.AutoScrollOption; @@ -11,7 +16,7 @@ declare module '@interactjs/core/defaultOptions' { } declare function install(scope: Scope): void; declare const autoScroll: { - defaults: import("../types").AutoScrollOption; + defaults: import("../types/types").AutoScrollOption; interaction: any; i: any; x: number; @@ -20,7 +25,7 @@ declare const autoScroll: { prevTime: number; margin: number; speed: number; - start(interaction: any): void; + start(interaction: import("@interactjs/core/Interaction").Interaction): void; stop(): void; scroll(): void; check(interactable: any, actionName: any): any; diff --git a/packages/auto-scroll/index.js b/packages/auto-scroll/index.js index 6add9da75..0ae8e42e5 100644 --- a/packages/auto-scroll/index.js +++ b/packages/auto-scroll/index.js @@ -6,7 +6,7 @@ import { getWindow } from '@interactjs/utils/window'; function install(scope) { const { interactions, defaults, actions, } = scope; scope.autoScroll = autoScroll; - interactions.signals.on('new', (interaction) => { + interactions.signals.on('new', ({ interaction }) => { interaction.autoScroll = null; }); interactions.signals.on('stop', autoScroll.stop); @@ -168,4 +168,4 @@ export function getScrollSizeDelta({ interaction, element }, func) { }; } export default { install }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssUUFBUSxNQUFNLDRCQUE0QixDQUFBO0FBQ3RELE9BQU8sS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDMUMsT0FBTyxHQUFHLE1BQU0sdUJBQXVCLENBQUE7QUFDdkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBZ0JwRCxTQUFTLE9BQU8sQ0FBRSxLQUFZO0lBQzVCLE1BQU0sRUFDSixZQUFZLEVBQ1osUUFBUSxFQUNSLE9BQU8sR0FDUixHQUFHLEtBQUssQ0FBQTtJQUVULEtBQUssQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO0lBRTdCLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO1FBQzdDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO0lBQy9CLENBQUMsQ0FBQyxDQUFBO0lBRUYsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUVoRCxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUE7SUFFcEUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDckMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQTtBQUNyRCxDQUFDO0FBRUQsTUFBTSxVQUFVLEdBQUc7SUFDakIsUUFBUSxFQUFFO1FBQ1IsT0FBTyxFQUFJLEtBQUs7UUFDaEIsTUFBTSxFQUFLLEVBQUU7UUFFYixvREFBb0Q7UUFDcEQsU0FBUyxFQUFF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TyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUN6QixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztLQUMxQixDQUFBO0FBQ0gsQ0FBQztBQUVELGVBQWUsRUFBRSxPQUFPLEVBQUUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGRvbVV0aWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2RvbVV0aWxzJ1xuaW1wb3J0ICogYXMgaXMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvaXMnXG5pbXBvcnQgcmFmIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL3JhZidcbmltcG9ydCB7IGdldFN0cmluZ09wdGlvblJlc3VsdCB9IGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL3JlY3QnXG5pbXBvcnQgeyBnZXRXaW5kb3cgfSBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy93aW5kb3cnXG5cbnR5cGUgU2NvcGUgPSBpbXBvcnQgKCdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJykuU2NvcGVcblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvc2NvcGUnIHtcbiAgaW50ZXJmYWNlIFNjb3BlIHtcbiAgICBhdXRvU2Nyb2xsOiB0eXBlb2YgYXV0b1Njcm9sbFxuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL2RlZmF1bHRPcHRpb25zJyB7XG4gIGludGVyZmFjZSBQZXJBY3Rpb25EZWZhdWx0cyB7XG4gICAgYXV0b1Njcm9sbD86IEludGVyYWN0LkF1dG9TY3JvbGxPcHRpb25cbiAgfVxufVxuXG5mdW5jdGlvbiBpbnN0YWxsIChzY29wZTogU2NvcGUpIHtcbiAgY29uc3Qge1xuICAgIGludGVyYWN0aW9ucyxcbiAgICBkZWZhdWx0cyxcbiAgICBhY3Rpb25zLFxuICB9ID0gc2NvcGVcblxuICBzY29wZS5hdXRvU2Nyb2xsID0gYXV0b1Njcm9sbFxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCduZXcnLCAoaW50ZXJhY3Rpb24pID0+IHtcbiAgICBpbnRlcmFjdGlvbi5hdXRvU2Nyb2xsID0gbnVsbFxuICB9KVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdzdG9wJywgYXV0b1Njcm9sbC5zdG9wKVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tbW92ZScsIGF1dG9TY3JvbGwub25JbnRlcmFjdGlvbk1vdmUpXG5cbiAgYWN0aW9ucy5ldmVudFR5cGVzLnB1c2goJ2F1dG9zY3JvbGwnKVxuICBkZWZhdWx0cy5wZXJBY3Rpb24uYXV0b1Njcm9sbCA9IGF1dG9TY3JvbGwuZGVmYXVsdHNcbn1cblxuY29uc3QgYXV0b1Njcm9sbCA9IHtcbiAgZGVmYXVsdHM6IHtcbiAgICBlbmFibGVkICA6IGZhbHNlLFxuICAgIG1hcmdpbiAgIDogNjAsXG5cbiAgICAvLyB0aGUgaXRlbSB0aGF0IGlzIHNjcm9sbGVkIChXaW5kb3cgb3IgSFRNTEVsZW1lbnQpXG4gICAgY29udGFpbmVyOiBudWxsIGFzIFdpbmRvdyB8IEVsZW1lbnQsXG5cbiAgICAvLyB0aGUgc2Nyb2xsIHNwZWVkIGluIHBpeGVscyBwZXIgc2Vjb25kXG4gICAgc3BlZWQgICAgOiAzMDAsXG4gIH0gYXMgSW50ZXJhY3QuQXV0b1Njcm9sbE9wdGlvbixcblxuICBpbnRlcmFjdGlvbjogbnVsbCxcbiAgaTogbnVsbCwgICAgLy8gdGhlIGhhbmRsZSByZXR1cm5lZCBieSB3aW5kb3cuc2V0SW50ZXJ2YWxcbiAgeDogMCxcbiAgeTogMCwgLy8gRGlyZWN0aW9uIGVhY2ggcHVsc2UgaXMgdG8gc2Nyb2xsIGluXG5cbiAgaXNTY3JvbGxpbmc6IGZhbHNlLFxuICBwcmV2VGltZTogMCxcbiAgbWFyZ2luOiAwLFxuICBzcGVlZDogMCxcblxuICBzdGFydCAoaW50ZXJhY3Rpb24pIHtcbiAgICBhdXRvU2Nyb2xsLmlzU2Nyb2xsaW5nID0gdHJ1ZVxuICAgIHJhZi5jYW5jZWwoYXV0b1Njcm9sbC5pKVxuXG4gICAgaW50ZXJhY3Rpb24uYXV0b1Njcm9sbCA9IGF1dG9TY3JvbGxcbiAgICBhdXRvU2Nyb2xsLmludGVyYWN0aW9uID0gaW50ZXJhY3Rpb25cbiAgICBhdXRvU2Nyb2xsLnByZXZUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICBhdXRvU2Nyb2xsLmkgPSByYWYucmVxdWVzdChhdXRvU2Nyb2xsLnNjcm9sbClcbiAgfSxcblxuICBzdG9wICgpIHtcbiAgICBhdXRvU2Nyb2xsLmlzU2Nyb2xsaW5nID0gZmFsc2VcbiAgICBpZiAoYXV0b1Njcm9sbC5pbnRlcmFjdGlvbikge1xuICAgICAgYXV0b1Njcm9sbC5pbnRlcmFjdGlvbi5hdXRvU2Nyb2xsID0gbnVsbFxuICAgIH1cbiAgICByYWYuY2FuY2VsKGF1dG9TY3JvbGwuaSlcbiAgfSxcblxuICAvLyBzY3JvbGwgdGhlIHdpbmRvdyBieSB0aGUgdmFsdWVzIGluIHNjcm9sbC54L3lcbiAgc2Nyb2xsICgpIHtcbiAgICBjb25zdCB7IGludGVyYWN0aW9uIH0gPSBhdXRvU2Nyb2xsXG4gICAgY29uc3QgeyB0YXJnZXQ6IGludGVyYWN0YWJsZSwgZWxlbWVudCB9ID0gaW50ZXJhY3Rpb25cbiAgICBjb25zdCBvcHRpb25zID0gaW50ZXJhY3RhYmxlLm9wdGlvbnNbYXV0b1Njcm9sbC5pbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lXS5hdXRvU2Nyb2xsXG4gICAgY29uc3QgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyKG9wdGlvbnMuY29udGFpbmVyLCBpbnRlcmFjdGFibGUsIGVsZW1lbnQpXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAvLyBjaGFuZ2UgaW4gdGltZSBpbiBzZWNvbmRzXG4gICAgY29uc3QgZHQgPSAobm93IC0gYXV0b1Njcm9sbC5wcmV2VGltZSkgLyAxMDAwXG4gICAgLy8gZGlzcGxhY2VtZW50XG4gICAgY29uc3QgcyA9IG9wdGlvbnMuc3BlZWQgKiBkdFxuXG4gICAgaWYgKHMgPj0gMSkge1xuICAgICAgY29uc3Qgc2Nyb2xsQnkgPSB7XG4gICAgICAgIHg6IGF1dG9TY3JvbGwueCAqIHMsXG4gICAgICAgIHk6IGF1dG9TY3JvbGwueSAqIHMsXG4gICAgICB9XG5cbiAgICAgIGlmIChzY3JvbGxCeS54IHx8IHNjcm9sbEJ5LnkpIHtcbiAgICAgICAgY29uc3QgcHJldlNjcm9sbCA9IGdldFNjcm9sbChjb250YWluZXIpXG5cbiAgICAgICAgaWYgKGlzLndpbmRvdyhjb250YWluZXIpKSB7XG4gICAgICAgICAgY29udGFpbmVyLnNjcm9sbEJ5KHNjcm9sbEJ5LngsIHNjcm9sbEJ5LnkpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29udGFpbmVyKSB7XG4gICAgICAgICAgY29udGFpbmVyLnNjcm9sbExlZnQgKz0gc2Nyb2xsQnkueFxuICAgICAgICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgICs9IHNjcm9sbEJ5LnlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1clNjcm9sbCA9IGdldFNjcm9sbChjb250YWluZXIpXG4gICAgICAgIGNvbnN0IGRlbHRhID0ge1xuICAgICAgICAgIHg6IGN1clNjcm9sbC54IC0gcHJldlNjcm9sbC54LFxuICAgICAgICAgIHk6IGN1clNjcm9sbC55IC0gcHJldlNjcm9sbC55LFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlbHRhLnggfHwgZGVsdGEueSkge1xuICAgICAgICAgIGludGVyYWN0YWJsZS5maXJlKHtcbiAgICAgICAgICAgIHR5cGU6ICdhdXRvc2Nyb2xsJyxcbiAgICAgICAgICAgIHRhcmdldDogZWxlbWVudCxcbiAgICAgICAgICAgIGludGVyYWN0YWJsZSxcbiAgICAgICAgICAgIGRlbHRhLFxuICAgICAgICAgICAgaW50ZXJhY3Rpb24sXG4gICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhdXRvU2Nyb2xsLnByZXZUaW1lID0gbm93XG4gICAgfVxuXG4gICAgaWYgKGF1dG9TY3JvbGwuaXNTY3JvbGxpbmcpIHtcbiAgICAgIHJhZi5jYW5jZWwoYXV0b1Njcm9sbC5pKVxuICAgICAgYXV0b1Njcm9sbC5pID0gcmFmLnJlcXVlc3QoYXV0b1Njcm9sbC5zY3JvbGwpXG4gICAgfVxuICB9LFxuICBjaGVjayAoaW50ZXJhY3RhYmxlLCBhY3Rpb25OYW1lKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGludGVyYWN0YWJsZS5vcHRpb25zXG5cbiAgICByZXR1cm4gb3B0aW9uc1thY3Rpb25OYW1lXS5hdXRvU2Nyb2xsICYmIG9wdGlvbnNbYWN0aW9uTmFtZV0uYXV0b1Njcm9sbC5lbmFibGVkXG4gIH0sXG4gIG9uSW50ZXJhY3Rpb25Nb3ZlICh7IGludGVyYWN0aW9uLCBwb2ludGVyIH0pIHtcbiAgICBpZiAoIShpbnRlcmFjdGlvbi5pbnRlcmFjdGluZygpICYmXG4gICAgICAgICAgYXV0b1Njcm9sbC5jaGVjayhpbnRlcmFjdGlvbi50YXJnZXQsIGludGVyYWN0aW9uLnByZXBhcmVkLm5hbWUpKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGludGVyYWN0aW9uLnNpbXVsYXRpb24pIHtcbiAgICAgIGF1dG9TY3JvbGwueCA9IGF1dG9TY3JvbGwueSA9IDBcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCB0b3BcbiAgICBsZXQgcmlnaHRcbiAgICBsZXQgYm90dG9tXG4gICAgbGV0IGxlZnRcblxuICAgIGNvbnN0IHsgdGFyZ2V0OiBpbnRlcmFjdGFibGUsIGVsZW1lbnQgfSA9IGludGVyYWN0aW9uXG4gICAgY29uc3Qgb3B0aW9ucyA9IGludGVyYWN0YWJsZS5vcHRpb25zW2ludGVyYWN0aW9uLnByZXBhcmVkLm5hbWVdLmF1dG9TY3JvbGxcbiAgICBjb25zdCBjb250YWluZXIgPSBnZXRDb250YWluZXIob3B0aW9ucy5jb250YWluZXIsIGludGVyYWN0YWJsZSwgZWxlbWVudClcblxuICAgIGlmIChpcy53aW5kb3coY29udGFpbmVyKSkge1xuICAgICAgbGVmdCAgID0gcG9pbnRlci5jbGllbnRYIDwgYXV0b1Njcm9sbC5tYXJnaW5cbiAgICAgIHRvcCAgICA9IHBvaW50ZXIuY2xpZW50WSA8IGF1dG9TY3JvbGwubWFyZ2luXG4gICAgICByaWdodCAgPSBwb2ludGVyLmNsaWVudFggPiBjb250YWluZXIuaW5uZXJXaWR0aCAgLSBhdXRvU2Nyb2xsLm1hcmdpblxuICAgICAgYm90dG9tID0gcG9pbnRlci5jbGllbnRZID4gY29udGFpbmVyLmlubmVySGVpZ2h0IC0gYXV0b1Njcm9sbC5tYXJnaW5cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCByZWN0ID0gZG9tVXRpbHMuZ2V0RWxlbWVudENsaWVudFJlY3QoY29udGFpbmVyKVxuXG4gICAgICBsZWZ0ICAgPSBwb2ludGVyLmNsaWVudFggPCByZWN0LmxlZnQgICArIGF1dG9TY3JvbGwubWFyZ2luXG4gICAgICB0b3AgICAgPSBwb2ludGVyLmNsaWVudFkgPCByZWN0LnRvcCAgICArIGF1dG9TY3JvbGwubWFyZ2luXG4gICAgICByaWdodCAgPSBwb2ludGVyLmNsaWVudFggPiByZWN0LnJpZ2h0ICAtIGF1dG9TY3JvbGwubWFyZ2luXG4gICAgICBib3R0b20gPSBwb2ludGVyLmNsaWVudFkgPiByZWN0LmJvdHRvbSAtIGF1dG9TY3JvbGwubWFyZ2luXG4gICAgfVxuXG4gICAgYXV0b1Njcm9sbC54ID0gKHJpZ2h0ID8gMSA6IGxlZnQgPyAtMSA6IDApXG4gICAgYXV0b1Njcm9sbC55ID0gKGJvdHRvbSA/IDEgOiAgdG9wID8gLTEgOiAwKVxuXG4gICAgaWYgKCFhdXRvU2Nyb2xsLmlzU2Nyb2xsaW5nKSB7XG4gICAgICAvLyBzZXQgdGhlIGF1dG9TY3JvbGwgcHJvcGVydGllcyB0byB0aG9zZSBvZiB0aGUgdGFyZ2V0XG4gICAgICBhdXRvU2Nyb2xsLm1hcmdpbiA9IG9wdGlvbnMubWFyZ2luXG4gICAgICBhdXRvU2Nyb2xsLnNwZWVkICA9IG9wdGlvbnMuc3BlZWRcblxuICAgICAgYXV0b1Njcm9sbC5zdGFydChpbnRlcmFjdGlvbilcbiAgICB9XG4gIH0sXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250YWluZXIgKHZhbHVlLCBpbnRlcmFjdGFibGUsIGVsZW1lbnQpIHtcbiAgcmV0dXJuIChpcy5zdHJpbmcodmFsdWUpID8gZ2V0U3RyaW5nT3B0aW9uUmVzdWx0KHZhbHVlLCBpbnRlcmFjdGFibGUsIGVsZW1lbnQpIDogdmFsdWUpIHx8IGdldFdpbmRvdyhlbGVtZW50KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Nyb2xsIChjb250YWluZXIpIHtcbiAgaWYgKGlzLndpbmRvdyhjb250YWluZXIpKSB7IGNvbnRhaW5lciA9IHdpbmRvdy5kb2N1bWVudC5ib2R5IH1cblxuICByZXR1cm4geyB4OiBjb250YWluZXIuc2Nyb2xsTGVmdCwgeTogY29udGFpbmVyLnNjcm9sbFRvcCB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY3JvbGxTaXplIChjb250YWluZXIpIHtcbiAgaWYgKGlzLndpbmRvdyhjb250YWluZXIpKSB7IGNvbnRhaW5lciA9IHdpbmRvdy5kb2N1bWVudC5ib2R5IH1cblxuICByZXR1cm4geyB4OiBjb250YWluZXIuc2Nyb2xsV2lkdGgsIHk6IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Nyb2xsU2l6ZURlbHRhICh7IGludGVyYWN0aW9uLCBlbGVtZW50IH0sIGZ1bmMpIHtcbiAgY29uc3Qgc2Nyb2xsT3B0aW9ucyA9IGludGVyYWN0aW9uICYmIGludGVyYWN0aW9uLnRhcmdldC5vcHRpb25zW2ludGVyYWN0aW9uLnByZXBhcmVkLm5hbWVdLmF1dG9TY3JvbGxcblxuICBpZiAoIXNjcm9sbE9wdGlvbnMgfHwgIXNjcm9sbE9wdGlvbnMuZW5hYmxlZCkge1xuICAgIGZ1bmMoKVxuICAgIHJldHVybiB7IHg6IDAsIHk6IDAgfVxuICB9XG5cbiAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyID0gZ2V0Q29udGFpbmVyKFxuICAgIHNjcm9sbE9wdGlvbnMuY29udGFpbmVyLFxuICAgIGludGVyYWN0aW9uLnRhcmdldCxcbiAgICBlbGVtZW50XG4gIClcblxuICBjb25zdCBwcmV2U2l6ZSA9IGdldFNjcm9sbChzY3JvbGxDb250YWluZXIpXG4gIGZ1bmMoKVxuICBjb25zdCBjdXJTaXplID0gZ2V0U2Nyb2xsKHNjcm9sbENvbnRhaW5lcilcblxuICByZXR1cm4ge1xuICAgIHg6IGN1clNpemUueCAtIHByZXZTaXplLngsXG4gICAgeTogY3VyU2l6ZS55IC0gcHJldlNpemUueSxcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7IGluc3RhbGwgfVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssUUFBUSxNQUFNLDRCQUE0QixDQUFBO0FBQ3RELE9BQU8sS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDMUMsT0FBTyxHQUFHLE1BQU0sdUJBQXVCLENBQUE7QUFDdkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBc0JwRCxTQUFTLE9BQU8sQ0FBRSxLQUFZO0lBQzVCLE1BQU0sRUFDSixZQUFZLEVBQ1osUUFBUSxFQUNSLE9BQU8sR0FDUixHQUFHLEtBQUssQ0FBQTtJQUVULEtBQUssQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO0lBRTdCLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRTtRQUNqRCxXQUFXLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQTtJQUMvQixDQUFDLENBQUMsQ0FBQTtJQUVGLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFaEQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0lBRXBFLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQ3JDLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUE7QUFDckQsQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHO0lBQ2pCLFFBQVEsRUFBRTtRQUNSLE9BQU8sRUFBSSxLQUFLO1FBQ2hCLE1BQU0sRUFBSyxFQUFFO1FBRWIsb0RBQW9EO1FBQ3BE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QUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ3pCLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0tBQzFCLENBQUE7QUFDSCxDQUFDO0FBRUQsZUFBZSxFQUFFLE9BQU8sRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZG9tVXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvZG9tVXRpbHMnXG5pbXBvcnQgKiBhcyBpcyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9pcydcbmltcG9ydCByYWYgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvcmFmJ1xuaW1wb3J0IHsgZ2V0U3RyaW5nT3B0aW9uUmVzdWx0IH0gZnJvbSAnQGludGVyYWN0anMvdXRpbHMvcmVjdCdcbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL3dpbmRvdydcblxudHlwZSBTY29wZSA9IGltcG9ydCAoJ0BpbnRlcmFjdGpzL2NvcmUvc2NvcGUnKS5TY29wZVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9zY29wZScge1xuICBpbnRlcmZhY2UgU2NvcGUge1xuICAgIGF1dG9TY3JvbGw6IHR5cGVvZiBhdXRvU2Nyb2xsXG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3Rpb24nIHtcbiAgaW50ZXJmYWNlIEludGVyYWN0aW9uIHtcbiAgICBhdXRvU2Nyb2xsPzogdHlwZW9mIGF1dG9TY3JvbGxcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9kZWZhdWx0T3B0aW9ucycge1xuICBpbnRlcmZhY2UgUGVyQWN0aW9uRGVmYXVsdHMge1xuICAgIGF1dG9TY3JvbGw/OiBJbnRlcmFjdC5BdXRvU2Nyb2xsT3B0aW9uXG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zdGFsbCAoc2NvcGU6IFNjb3BlKSB7XG4gIGNvbnN0IHtcbiAgICBpbnRlcmFjdGlvbnMsXG4gICAgZGVmYXVsdHMsXG4gICAgYWN0aW9ucyxcbiAgfSA9IHNjb3BlXG5cbiAgc2NvcGUuYXV0b1Njcm9sbCA9IGF1dG9TY3JvbGxcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignbmV3JywgKHsgaW50ZXJhY3Rpb24gfSkgPT4ge1xuICAgIGludGVyYWN0aW9uLmF1dG9TY3JvbGwgPSBudWxsXG4gIH0pXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ3N0b3AnLCBhdXRvU2Nyb2xsLnN0b3ApXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2FjdGlvbi1tb3ZlJywgYXV0b1Njcm9sbC5vbkludGVyYWN0aW9uTW92ZSlcblxuICBhY3Rpb25zLmV2ZW50VHlwZXMucHVzaCgnYXV0b3Njcm9sbCcpXG4gIGRlZmF1bHRzLnBlckFjdGlvbi5hdXRvU2Nyb2xsID0gYXV0b1Njcm9sbC5kZWZhdWx0c1xufVxuXG5jb25zdCBhdXRvU2Nyb2xsID0ge1xuICBkZWZhdWx0czoge1xuICAgIGVuYWJsZWQgIDogZmFsc2UsXG4gICAgbWFyZ2luICAgOiA2MCxcblxuICAgIC8vIHRoZSBpdGVtIHRoYXQgaXMgc2Nyb2xsZWQgKFdpbmRvdyBvciBIVE1MRWxlbWVudClcbiAgICBjb250YWluZXI6IG51bGwgYXMgV2luZG93IHwgRWxlbWVudCxcblxuICAgIC8vIHRoZSBzY3JvbGwgc3BlZWQgaW4gcGl4ZWxzIHBlciBzZWNvbmRcbiAgICBzcGVlZCAgICA6IDMwMCxcbiAgfSBhcyBJbnRlcmFjdC5BdXRvU2Nyb2xsT3B0aW9uLFxuXG4gIGludGVyYWN0aW9uOiBudWxsLFxuICBpOiBudWxsLCAgICAvLyB0aGUgaGFuZGxlIHJldHVybmVkIGJ5IHdpbmRvdy5zZXRJbnRlcnZhbFxuICB4OiAwLFxuICB5OiAwLCAvLyBEaXJlY3Rpb24gZWFjaCBwdWxzZSBpcyB0byBzY3JvbGwgaW5cblxuICBpc1Njcm9sbGluZzogZmFsc2UsXG4gIHByZXZUaW1lOiAwLFxuICBtYXJnaW46IDAsXG4gIHNwZWVkOiAwLFxuXG4gIHN0YXJ0IChpbnRlcmFjdGlvbjogSW50ZXJhY3QuSW50ZXJhY3Rpb24pIHtcbiAgICBhdXRvU2Nyb2xsLmlzU2Nyb2xsaW5nID0gdHJ1ZVxuICAgIHJhZi5jYW5jZWwoYXV0b1Njcm9sbC5pKVxuXG4gICAgaW50ZXJhY3Rpb24uYXV0b1Njcm9sbCA9IGF1dG9TY3JvbGxcbiAgICBhdXRvU2Nyb2xsLmludGVyYWN0aW9uID0gaW50ZXJhY3Rpb25cbiAgICBhdXRvU2Nyb2xsLnByZXZUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICBhdXRvU2Nyb2xsLmkgPSByYWYucmVxdWVzdChhdXRvU2Nyb2xsLnNjcm9sbClcbiAgfSxcblxuICBzdG9wICgpIHtcbiAgICBhdXRvU2Nyb2xsLmlzU2Nyb2xsaW5nID0gZmFsc2VcbiAgICBpZiAoYXV0b1Njcm9sbC5pbnRlcmFjdGlvbikge1xuICAgICAgYXV0b1Njcm9sbC5pbnRlcmFjdGlvbi5hdXRvU2Nyb2xsID0gbnVsbFxuICAgIH1cbiAgICByYWYuY2FuY2VsKGF1dG9TY3JvbGwuaSlcbiAgfSxcblxuICAvLyBzY3JvbGwgdGhlIHdpbmRvdyBieSB0aGUgdmFsdWVzIGluIHNjcm9sbC54L3lcbiAgc2Nyb2xsICgpIHtcbiAgICBjb25zdCB7IGludGVyYWN0aW9uIH0gPSBhdXRvU2Nyb2xsXG4gICAgY29uc3QgeyB0YXJnZXQ6IGludGVyYWN0YWJsZSwgZWxlbWVudCB9ID0gaW50ZXJhY3Rpb25cbiAgICBjb25zdCBvcHRpb25zID0gaW50ZXJhY3RhYmxlLm9wdGlvbnNbYXV0b1Njcm9sbC5pbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lXS5hdXRvU2Nyb2xsXG4gICAgY29uc3QgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyKG9wdGlvbnMuY29udGFpbmVyLCBpbnRlcmFjdGFibGUsIGVsZW1lbnQpXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAvLyBjaGFuZ2UgaW4gdGltZSBpbiBzZWNvbmRzXG4gICAgY29uc3QgZHQgPSAobm93IC0gYXV0b1Njcm9sbC5wcmV2VGltZSkgLyAxMDAwXG4gICAgLy8gZGlzcGxhY2VtZW50XG4gICAgY29uc3QgcyA9IG9wdGlvbnMuc3BlZWQgKiBkdFxuXG4gICAgaWYgKHMgPj0gMSkge1xuICAgICAgY29uc3Qgc2Nyb2xsQnkgPSB7XG4gICAgICAgIHg6IGF1dG9TY3JvbGwueCAqIHMsXG4gICAgICAgIHk6IGF1dG9TY3JvbGwueSAqIHMsXG4gICAgICB9XG5cbiAgICAgIGlmIChzY3JvbGxCeS54IHx8IHNjcm9sbEJ5LnkpIHtcbiAgICAgICAgY29uc3QgcHJldlNjcm9sbCA9IGdldFNjcm9sbChjb250YWluZXIpXG5cbiAgICAgICAgaWYgKGlzLndpbmRvdyhjb250YWluZXIpKSB7XG4gICAgICAgICAgY29udGFpbmVyLnNjcm9sbEJ5KHNjcm9sbEJ5LngsIHNjcm9sbEJ5LnkpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29udGFpbmVyKSB7XG4gICAgICAgICAgY29udGFpbmVyLnNjcm9sbExlZnQgKz0gc2Nyb2xsQnkueFxuICAgICAgICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgICs9IHNjcm9sbEJ5LnlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1clNjcm9sbCA9IGdldFNjcm9sbChjb250YWluZXIpXG4gICAgICAgIGNvbnN0IGRlbHRhID0ge1xuICAgICAgICAgIHg6IGN1clNjcm9sbC54IC0gcHJldlNjcm9sbC54LFxuICAgICAgICAgIHk6IGN1clNjcm9sbC55IC0gcHJldlNjcm9sbC55LFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlbHRhLnggfHwgZGVsdGEueSkge1xuICAgICAgICAgIGludGVyYWN0YWJsZS5maXJlKHtcbiAgICAgICAgICAgIHR5cGU6ICdhdXRvc2Nyb2xsJyxcbiAgICAgICAgICAgIHRhcmdldDogZWxlbWVudCxcbiAgICAgICAgICAgIGludGVyYWN0YWJsZSxcbiAgICAgICAgICAgIGRlbHRhLFxuICAgICAgICAgICAgaW50ZXJhY3Rpb24sXG4gICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhdXRvU2Nyb2xsLnByZXZUaW1lID0gbm93XG4gICAgfVxuXG4gICAgaWYgKGF1dG9TY3JvbGwuaXNTY3JvbGxpbmcpIHtcbiAgICAgIHJhZi5jYW5jZWwoYXV0b1Njcm9sbC5pKVxuICAgICAgYXV0b1Njcm9sbC5pID0gcmFmLnJlcXVlc3QoYXV0b1Njcm9sbC5zY3JvbGwpXG4gICAgfVxuICB9LFxuICBjaGVjayAoaW50ZXJhY3RhYmxlLCBhY3Rpb25OYW1lKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGludGVyYWN0YWJsZS5vcHRpb25zXG5cbiAgICByZXR1cm4gb3B0aW9uc1thY3Rpb25OYW1lXS5hdXRvU2Nyb2xsICYmIG9wdGlvbnNbYWN0aW9uTmFtZV0uYXV0b1Njcm9sbC5lbmFibGVkXG4gIH0sXG4gIG9uSW50ZXJhY3Rpb25Nb3ZlICh7IGludGVyYWN0aW9uLCBwb2ludGVyIH0pIHtcbiAgICBpZiAoIShpbnRlcmFjdGlvbi5pbnRlcmFjdGluZygpICYmXG4gICAgICAgICAgYXV0b1Njcm9sbC5jaGVjayhpbnRlcmFjdGlvbi50YXJnZXQsIGludGVyYWN0aW9uLnByZXBhcmVkLm5hbWUpKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGludGVyYWN0aW9uLnNpbXVsYXRpb24pIHtcbiAgICAgIGF1dG9TY3JvbGwueCA9IGF1dG9TY3JvbGwueSA9IDBcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCB0b3BcbiAgICBsZXQgcmlnaHRcbiAgICBsZXQgYm90dG9tXG4gICAgbGV0IGxlZnRcblxuICAgIGNvbnN0IHsgdGFyZ2V0OiBpbnRlcmFjdGFibGUsIGVsZW1lbnQgfSA9IGludGVyYWN0aW9uXG4gICAgY29uc3Qgb3B0aW9ucyA9IGludGVyYWN0YWJsZS5vcHRpb25zW2ludGVyYWN0aW9uLnByZXBhcmVkLm5hbWVdLmF1dG9TY3JvbGxcbiAgICBjb25zdCBjb250YWluZXIgPSBnZXRDb250YWluZXIob3B0aW9ucy5jb250YWluZXIsIGludGVyYWN0YWJsZSwgZWxlbWVudClcblxuICAgIGlmIChpcy53aW5kb3coY29udGFpbmVyKSkge1xuICAgICAgbGVmdCAgID0gcG9pbnRlci5jbGllbnRYIDwgYXV0b1Njcm9sbC5tYXJnaW5cbiAgICAgIHRvcCAgICA9IHBvaW50ZXIuY2xpZW50WSA8IGF1dG9TY3JvbGwubWFyZ2luXG4gICAgICByaWdodCAgPSBwb2ludGVyLmNsaWVudFggPiBjb250YWluZXIuaW5uZXJXaWR0aCAgLSBhdXRvU2Nyb2xsLm1hcmdpblxuICAgICAgYm90dG9tID0gcG9pbnRlci5jbGllbnRZID4gY29udGFpbmVyLmlubmVySGVpZ2h0IC0gYXV0b1Njcm9sbC5tYXJnaW5cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCByZWN0ID0gZG9tVXRpbHMuZ2V0RWxlbWVudENsaWVudFJlY3QoY29udGFpbmVyKVxuXG4gICAgICBsZWZ0ICAgPSBwb2ludGVyLmNsaWVudFggPCByZWN0LmxlZnQgICArIGF1dG9TY3JvbGwubWFyZ2luXG4gICAgICB0b3AgICAgPSBwb2ludGVyLmNsaWVudFkgPCByZWN0LnRvcCAgICArIGF1dG9TY3JvbGwubWFyZ2luXG4gICAgICByaWdodCAgPSBwb2ludGVyLmNsaWVudFggPiByZWN0LnJpZ2h0ICAtIGF1dG9TY3JvbGwubWFyZ2luXG4gICAgICBib3R0b20gPSBwb2ludGVyLmNsaWVudFkgPiByZWN0LmJvdHRvbSAtIGF1dG9TY3JvbGwubWFyZ2luXG4gICAgfVxuXG4gICAgYXV0b1Njcm9sbC54ID0gKHJpZ2h0ID8gMSA6IGxlZnQgPyAtMSA6IDApXG4gICAgYXV0b1Njcm9sbC55ID0gKGJvdHRvbSA/IDEgOiAgdG9wID8gLTEgOiAwKVxuXG4gICAgaWYgKCFhdXRvU2Nyb2xsLmlzU2Nyb2xsaW5nKSB7XG4gICAgICAvLyBzZXQgdGhlIGF1dG9TY3JvbGwgcHJvcGVydGllcyB0byB0aG9zZSBvZiB0aGUgdGFyZ2V0XG4gICAgICBhdXRvU2Nyb2xsLm1hcmdpbiA9IG9wdGlvbnMubWFyZ2luXG4gICAgICBhdXRvU2Nyb2xsLnNwZWVkICA9IG9wdGlvbnMuc3BlZWRcblxuICAgICAgYXV0b1Njcm9sbC5zdGFydChpbnRlcmFjdGlvbilcbiAgICB9XG4gIH0sXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250YWluZXIgKHZhbHVlLCBpbnRlcmFjdGFibGUsIGVsZW1lbnQpIHtcbiAgcmV0dXJuIChpcy5zdHJpbmcodmFsdWUpID8gZ2V0U3RyaW5nT3B0aW9uUmVzdWx0KHZhbHVlLCBpbnRlcmFjdGFibGUsIGVsZW1lbnQpIDogdmFsdWUpIHx8IGdldFdpbmRvdyhlbGVtZW50KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Nyb2xsIChjb250YWluZXIpIHtcbiAgaWYgKGlzLndpbmRvdyhjb250YWluZXIpKSB7IGNvbnRhaW5lciA9IHdpbmRvdy5kb2N1bWVudC5ib2R5IH1cblxuICByZXR1cm4geyB4OiBjb250YWluZXIuc2Nyb2xsTGVmdCwgeTogY29udGFpbmVyLnNjcm9sbFRvcCB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY3JvbGxTaXplIChjb250YWluZXIpIHtcbiAgaWYgKGlzLndpbmRvdyhjb250YWluZXIpKSB7IGNvbnRhaW5lciA9IHdpbmRvdy5kb2N1bWVudC5ib2R5IH1cblxuICByZXR1cm4geyB4OiBjb250YWluZXIuc2Nyb2xsV2lkdGgsIHk6IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Nyb2xsU2l6ZURlbHRhICh7IGludGVyYWN0aW9uLCBlbGVtZW50IH0sIGZ1bmMpIHtcbiAgY29uc3Qgc2Nyb2xsT3B0aW9ucyA9IGludGVyYWN0aW9uICYmIGludGVyYWN0aW9uLnRhcmdldC5vcHRpb25zW2ludGVyYWN0aW9uLnByZXBhcmVkLm5hbWVdLmF1dG9TY3JvbGxcblxuICBpZiAoIXNjcm9sbE9wdGlvbnMgfHwgIXNjcm9sbE9wdGlvbnMuZW5hYmxlZCkge1xuICAgIGZ1bmMoKVxuICAgIHJldHVybiB7IHg6IDAsIHk6IDAgfVxuICB9XG5cbiAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyID0gZ2V0Q29udGFpbmVyKFxuICAgIHNjcm9sbE9wdGlvbnMuY29udGFpbmVyLFxuICAgIGludGVyYWN0aW9uLnRhcmdldCxcbiAgICBlbGVtZW50XG4gIClcblxuICBjb25zdCBwcmV2U2l6ZSA9IGdldFNjcm9sbChzY3JvbGxDb250YWluZXIpXG4gIGZ1bmMoKVxuICBjb25zdCBjdXJTaXplID0gZ2V0U2Nyb2xsKHNjcm9sbENvbnRhaW5lcilcblxuICByZXR1cm4ge1xuICAgIHg6IGN1clNpemUueCAtIHByZXZTaXplLngsXG4gICAgeTogY3VyU2l6ZS55IC0gcHJldlNpemUueSxcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7IGluc3RhbGwgfVxuIl19 \ No newline at end of file diff --git a/packages/auto-scroll/package.json b/packages/auto-scroll/package.json index 71ba2b0d5..2f14fae35 100644 --- a/packages/auto-scroll/package.json +++ b/packages/auto-scroll/package.json @@ -1,12 +1,12 @@ { "name": "@interactjs/auto-scroll", - "version": "1.4.0-alpha.27+sha.12b8f8f", + "version": "1.4.0-alpha.28+sha.e624c4d", "peerDependencies": { - "@interactjs/utils": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/utils": "1.4.0-alpha.28+sha.e624c4d" }, "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/utils": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/_dev": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/utils": "1.4.0-alpha.28+sha.e624c4d" }, "publishConfig": { "access": "public" diff --git a/packages/auto-start/InteractableMethods.d.ts b/packages/auto-start/InteractableMethods.d.ts index 186ee0643..c0b12f412 100644 --- a/packages/auto-start/InteractableMethods.d.ts +++ b/packages/auto-start/InteractableMethods.d.ts @@ -1,7 +1,7 @@ declare type Scope = import('@interactjs/core/scope').Scope; -type Interaction = import('@interactjs/core/Interaction').default; -type Interactable = import('@interactjs/core/Interactable').default; -type IgnoreValue = string | Element | boolean; +declare type Interaction = import('@interactjs/core/Interaction').default; +declare type Interactable = import('@interactjs/core/Interactable').default; +declare type IgnoreValue = string | Element | boolean; declare module '@interactjs/core/Interactable' { interface Interactable { getAction: typeof getAction; diff --git a/packages/auto-start/base.d.ts b/packages/auto-start/base.d.ts index ec8e14146..439adc0e0 100644 --- a/packages/auto-start/base.d.ts +++ b/packages/auto-start/base.d.ts @@ -12,6 +12,10 @@ declare module '@interactjs/core/scope' { } } declare module '@interactjs/core/defaultOptions' { + interface BaseDefaults { + actionChecker?: any; + styleCursor?: any; + } interface PerActionDefaults { manualStart?: boolean; max?: number; diff --git a/packages/auto-start/base.js b/packages/auto-start/base.js index 397dd3696..dd4e9a5c0 100644 --- a/packages/auto-start/base.js +++ b/packages/auto-start/base.js @@ -199,4 +199,4 @@ export default { withinInteractionLimit, validateAction, }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQyxPQUFPLG1CQUFtQixNQUFNLHVCQUF1QixDQUFBO0FBc0N2RCxTQUFTLE9BQU8sQ0FBRSxLQUFZO0lBQzVCLE1BQU0sRUFDSixRQUFRLEVBQ1IsWUFBWSxFQUNaLFFBQVEsR0FDVCxHQUFHLEtBQUssQ0FBQTtJQUVULFFBQVEsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUVqQyxnQ0FBZ0M7SUFDaEMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFO1FBQy9FLElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQUUsT0FBTTtTQUFFO1FBRXpDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDakYsT0FBTyxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDekMsQ0FBQyxDQUFDLENBQUE7SUFFRixnQ0FBZ0M7SUFDaEMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFO1FBQy9FLElBQUksV0FBVyxDQUFDLFdBQVcsS0FBSyxPQUFPO1lBQ25DLFdBQVcsQ0FBQyxhQUFhO1lBQ3pCLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUFFLE9BQU07U0FBRTtRQUV6QyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVB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QUFRLEVBQUUsS0FBSztJQUN2QyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQzdCLEtBQUssQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQTtRQUUxQyxPQUFPLElBQUksQ0FBQTtLQUNaO0lBRUQsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQTtBQUN4QyxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLO0lBQ3hDLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUU7UUFDakMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUE7S0FDaEQ7SUFFRCxPQUFPLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtJQUMzRCxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7SUFDN0IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUN6RCxDQUFDO0FBRUQsZUFBZTtJQUNiLE9BQU87SUFDUCxlQUFlO0lBQ2Ysc0JBQXNCO0lBQ3RCLGNBQWM7Q0FDZixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMnXG5pbXBvcnQgSW50ZXJhY3RhYmxlTWV0aG9kcyBmcm9tICcuL0ludGVyYWN0YWJsZU1ldGhvZHMnXG50eXBlIFNjb3BlID0gaW1wb3J0ICgnQGludGVyYWN0anMvY29yZS9zY29wZScpLlNjb3BlXG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9pbnRlcmFjdC9pbnRlcmFjdCcge1xuICBpbnRlcmZhY2UgSW50ZXJhY3RTdGF0aWMge1xuICAgIG1heEludGVyYWN0aW9uczogKG5ld1ZhbHVlOiBhbnkpID0+IGFueVxuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJyB7XG4gIGludGVyZmFjZSBTY29wZSB7XG4gICAgYXV0b1N0YXJ0OiBBdXRvU3RhcnRcbiAgICBtYXhJbnRlcmFjdGlvbnM6ICguLi5hcmdzOiBhbnkpID0+IGFueVxuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL2RlZmF1bHRPcHRpb25zJyB7XG4gIGludGVyZmFjZSBQZXJBY3Rpb25EZWZhdWx0cyB7XG4gICAgbWFudWFsU3RhcnQ/OiBib29sZWFuXG4gICAgbWF4PzogbnVtYmVyXG4gICAgbWF4UGVyRWxlbWVudD86IG51bWJlclxuICAgIGFsbG93RnJvbT86IHN0cmluZyB8IEVsZW1lbnRcbiAgICBpZ25vcmVGcm9tPzogc3RyaW5nIHwgRWxlbWVudFxuXG4gICAgLy8gb25seSBhbGxvdyBsZWZ0IGJ1dHRvbiBieSBkZWZhdWx0XG4gICAgLy8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Nb3VzZUV2ZW50L2J1dHRvbnMjUmV0dXJuX3ZhbHVlXG4gICAgbW91c2VCdXR0b25zPzogMCB8IDEgfCAyIHwgNCB8IDE2XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRvU3RhcnQge1xuICAvLyBBbGxvdyB0aGlzIG1hbnkgaW50ZXJhY3Rpb25zIHRvIGhhcHBlbiBzaW11bHRhbmVvdXNseVxuICBtYXhJbnRlcmFjdGlvbnM6IG51bWJlclxuICB3aXRoaW5JbnRlcmFjdGlvbkxpbWl0OiB0eXBlb2Ygd2l0aGluSW50ZXJhY3Rpb25MaW1pdFxuICBjdXJzb3JFbGVtZW50OiBFbGVtZW50XG4gIHNpZ25hbHM6IHV0aWxzLlNpZ25hbHNcbn1cblxuZnVuY3Rpb24gaW5zdGFsbCAoc2NvcGU6IFNjb3BlKSB7XG4gIGNvbnN0IHtcbiAgICBpbnRlcmFjdCxcbiAgICBpbnRlcmFjdGlvbnMsXG4gICAgZGVmYXVsdHMsXG4gIH0gPSBzY29wZVxuXG4gIGludGVyYWN0LnVzZShJbnRlcmFjdGFibGVNZXRob2RzKVxuXG4gIC8vIHNldCBjdXJzb3Igc3R5bGUgb24gbW91c2Vkb3duXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdkb3duJywgKHsgaW50ZXJhY3Rpb24sIHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCB9KSA9PiB7XG4gICAgaWYgKGludGVyYWN0aW9uLmludGVyYWN0aW5nKCkpIHsgcmV0dXJuIH1cblxuICAgIGNvbnN0IGFjdGlvbkluZm8gPSBnZXRBY3Rpb25JbmZvKGludGVyYWN0aW9uLCBwb2ludGVyLCBldmVudCwgZXZlbnRUYXJnZXQsIHNjb3BlKVxuICAgIHByZXBhcmUoaW50ZXJhY3Rpb24sIGFjdGlvbkluZm8sIHNjb3BlKVxuICB9KVxuXG4gIC8vIHNldCBjdXJzb3Igc3R5bGUgb24gbW91c2Vtb3ZlXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdtb3ZlJywgKHsgaW50ZXJhY3Rpb24sIHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCB9KSA9PiB7XG4gICAgaWYgKGludGVyYWN0aW9uLnBvaW50ZXJUeXBlICE9PSAnbW91c2UnIHx8XG4gICAgICAgIGludGVyYWN0aW9uLnBvaW50ZXJJc0Rvd24gfHxcbiAgICAgICAgaW50ZXJhY3Rpb24uaW50ZXJhY3RpbmcoKSkgeyByZXR1cm4gfVxuXG4gICAgY29uc3QgYWN0aW9uSW5mbyA9IGdldEFjdGlvbkluZm8oaW50ZXJhY3Rpb24sIHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCwgc2NvcGUpXG4gICAgcHJlcGFyZShpbnRlcmFjdGlvbiwgYWN0aW9uSW5mbywgc2NvcGUpXG4gIH0pXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ21vdmUnLCAoYXJnKSA9PiB7XG4gICAgY29uc3QgeyBpbnRlcmFjdGlvbiB9ID0gYXJnXG5cbiAgICBpZiAoIWludGVyYWN0aW9uLnBvaW50ZXJJc0Rvd24gfHxcbiAgICAgICAgaW50ZXJhY3Rpb24uaW50ZXJhY3RpbmcoKSB8fFxuICAgICAgICAhaW50ZXJhY3Rpb24ucG9pbnRlcldhc01vdmVkIHx8XG4gICAgICAgICFpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzY29wZS5hdXRvU3RhcnQuc2lnbmFscy5maXJlKCdiZWZvcmUtc3RhcnQnLCBhcmcpXG5cbiAgICBjb25zdCB0YXJnZXQgPSBpbnRlcmFjdGlvbi50YXJnZXRcblxuICAgIGlmIChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lICYmIHRhcmdldCkge1xuICAgICAgLy8gY2hlY2sgbWFudWFsU3RhcnQgYW5kIGludGVyYWN0aW9uIGxpbWl0XG4gICAgICBpZiAodGFyZ2V0Lm9wdGlvbnNbaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZV0ubWFudWFsU3RhcnQgfHxcbiAgICAgICAgICAhd2l0aGluSW50ZXJhY3Rpb25MaW1pdCh0YXJnZXQsIGludGVyYWN0aW9uLmVsZW1lbnQsIGludGVyYWN0aW9uLnByZXBhcmVkLCBzY29wZSkpIHtcbiAgICAgICAgaW50ZXJhY3Rpb24uc3RvcCgpXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgaW50ZXJhY3Rpb24uc3RhcnQoaW50ZXJhY3Rpb24ucHJlcGFyZWQsIHRhcmdldCwgaW50ZXJhY3Rpb24uZWxlbWVudClcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ3N0b3AnLCAoeyBpbnRlcmFjdGlvbiB9KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gaW50ZXJhY3Rpb24udGFyZ2V0XG5cbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5vcHRpb25zLnN0eWxlQ3Vyc29yKSB7XG4gICAgICBzZXRDdXJzb3IoaW50ZXJhY3Rpb24uZWxlbWVudCwgJycsIHNjb3BlKVxuICAgIH1cbiAgfSlcblxuICBkZWZhdWx0cy5iYXNlLmFjdGlvbkNoZWNrZXIgPSBudWxsXG4gIGRlZmF1bHRzLmJhc2Uuc3R5bGVDdXJzb3IgPSB0cnVlXG5cbiAgdXRpbHMuZXh0ZW5kKGRlZmF1bHRzLnBlckFjdGlvbiwge1xuICAgIG1hbnVhbFN0YXJ0OiBmYWxzZSxcbiAgICBtYXg6IEluZmluaXR5LFxuICAgIG1heFBlckVsZW1lbnQ6IDEsXG4gICAgYWxsb3dGcm9tOiAgbnVsbCxcbiAgICBpZ25vcmVGcm9tOiBudWxsLFxuXG4gICAgLy8gb25seSBhbGxvdyBsZWZ0IGJ1dHRvbiBieSBkZWZhdWx0XG4gICAgLy8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Nb3VzZUV2ZW50L2J1dHRvbnMjUmV0dXJuX3ZhbHVlXG4gICAgbW91c2VCdXR0b25zOiAxLFxuICB9KTtcblxuICAvKipcbiAgICogUmV0dXJucyBvciBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IGludGVyYWN0aW9ucyBhbGxvd2VkLiAgQnlcbiAgICogZGVmYXVsdCBvbmx5IDEgaW50ZXJhY3Rpb24gaXMgYWxsb3dlZCBhdCBhIHRpbWUgKGZvciBiYWNrd2FyZHNcbiAgICogY29tcGF0aWJpbGl0eSkuIFRvIGFsbG93IG11bHRpcGxlIGludGVyYWN0aW9ucyBvbiB0aGUgc2FtZSBJbnRlcmFjdGFibGVzIGFuZFxuICAgKiBlbGVtZW50cywgeW91IG5lZWQgdG8gZW5hYmxlIGl0IGluIHRoZSBkcmFnZ2FibGUsIHJlc2l6YWJsZSBhbmQgZ2VzdHVyYWJsZVxuICAgKiBgJ21heCdgIGFuZCBgJ21heFBlckVsZW1lbnQnYCBvcHRpb25zLlxuICAgKlxuICAgKiBAYWxpYXMgbW9kdWxlOmludGVyYWN0Lm1heEludGVyYWN0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gW25ld1ZhbHVlXSBBbnkgbnVtYmVyLiBuZXdWYWx1ZSA8PSAwIG1lYW5zIG5vIGludGVyYWN0aW9ucy5cbiAgICovXG4gIChpbnRlcmFjdCBhcyBhbnkgLyogRklYTUUgKi8pLm1heEludGVyYWN0aW9ucyA9IChuZXdWYWx1ZSkgPT4gbWF4SW50ZXJhY3Rpb25zKG5ld1ZhbHVlLCBzY29wZSlcblxuICBzY29wZS5hdXRvU3RhcnQgPSB7XG4gICAgLy8gQWxsb3cgdGhpcyBtYW55IGludGVyYWN0aW9ucyB0byBoYXBwZW4gc2ltdWx0YW5lb3VzbHlcbiAgICBtYXhJbnRlcmFjdGlvbnM6IEluZmluaXR5LFxuICAgIHdpdGhpbkludGVyYWN0aW9uTGltaXQsXG4gICAgY3Vyc29yRWxlbWVudDogbnVsbCxcbiAgICBzaWduYWxzOiBuZXcgdXRpbHMuU2lnbmFscygpLFxuICB9XG59XG5cbi8vIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhcmdldCBzdXBwb3J0cyB0aGUgYWN0aW9uLlxuLy8gSWYgc28sIHJldHVybiB0aGUgdmFsaWRhdGVkIGFjdGlvbi4gT3RoZXJ3aXNlLCByZXR1cm4gbnVsbFxuZnVuY3Rpb24gdmFsaWRhdGVBY3Rpb24gKGFjdGlvbiwgaW50ZXJhY3RhYmxlLCBlbGVtZW50LCBldmVudFRhcmdldCwgc2NvcGUpIHtcbiAgaWYgKHV0aWxzLmlzLm9iamVjdChhY3Rpb24pICYmXG4gICAgICBpbnRlcmFjdGFibGUudGVzdElnbm9yZUFsbG93KGludGVyYWN0YWJsZS5vcHRpb25zW2FjdGlvbi5uYW1lXSwgZWxlbWVudCwgZXZlbnRUYXJnZXQpICYmXG4gICAgICBpbnRlcmFjdGFibGUub3B0aW9uc1thY3Rpb24ubmFtZV0uZW5hYmxlZCAmJlxuICAgICAgd2l0aGluSW50ZXJhY3Rpb25MaW1pdChpbnRlcmFjdGFibGUsIGVsZW1lbnQsIGFjdGlvbiwgc2NvcGUpKSB7XG4gICAgcmV0dXJuIGFjdGlvblxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTZWxlY3RvciAoaW50ZXJhY3Rpb24sIHBvaW50ZXIsIGV2ZW50LCBtYXRjaGVzLCBtYXRjaEVsZW1lbnRzLCBldmVudFRhcmdldCwgc2NvcGUpIHtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG1hdGNoZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoZXNbaV1cbiAgICBjb25zdCBtYXRjaEVsZW1lbnQgPSBtYXRjaEVsZW1lbnRzW2ldXG4gICAgY29uc3QgYWN0aW9uID0gdmFsaWRhdGVBY3Rpb24oXG4gICAgICBtYXRjaC5nZXRBY3Rpb24ocG9pbnRlciwgZXZlbnQsIGludGVyYWN0aW9uLCBtYXRjaEVsZW1lbnQpLFxuICAgICAgbWF0Y2gsXG4gICAgICBtYXRjaEVsZW1lbnQsXG4gICAgICBldmVudFRhcmdldCxcbiAgICAgIHNjb3BlKVxuXG4gICAgaWYgKGFjdGlvbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICB0YXJnZXQ6IG1hdGNoLFxuICAgICAgICBlbGVtZW50OiBtYXRjaEVsZW1lbnQsXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgYWN0aW9uOiBudWxsLCB0YXJnZXQ6IG51bGwsIGVsZW1lbnQ6IG51bGwgfVxufVxuXG5mdW5jdGlvbiBnZXRBY3Rpb25JbmZvIChpbnRlcmFjdGlvbiwgcG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0LCBzY29wZSkge1xuICBsZXQgbWF0Y2hlcyA9IFtdXG4gIGxldCBtYXRjaEVsZW1lbnRzID0gW11cblxuICBsZXQgZWxlbWVudCA9IGV2ZW50VGFyZ2V0XG5cbiAgZnVuY3Rpb24gcHVzaE1hdGNoZXMgKGludGVyYWN0YWJsZSkge1xuICAgIG1hdGNoZXMucHVzaChpbnRlcmFjdGFibGUpXG4gICAgbWF0Y2hFbGVtZW50cy5wdXNoKGVsZW1lbnQpXG4gIH1cblxuICB3aGlsZSAodXRpbHMuaXMuZWxlbWVudChlbGVtZW50KSkge1xuICAgIG1hdGNoZXMgPSBbXVxuICAgIG1hdGNoRWxlbWVudHMgPSBbXVxuXG4gICAgc2NvcGUuaW50ZXJhY3RhYmxlcy5mb3JFYWNoTWF0Y2goZWxlbWVudCwgcHVzaE1hdGNoZXMpXG5cbiAgICBjb25zdCBhY3Rpb25JbmZvID0gdmFsaWRhdGVTZWxlY3RvcihpbnRlcmFjdGlvbiwgcG9pbnRlciwgZXZlbnQsIG1hdGNoZXMsIG1hdGNoRWxlbWVudHMsIGV2ZW50VGFyZ2V0LCBzY29wZSlcblxuICAgIGlmIChhY3Rpb25JbmZvLmFjdGlvbiAmJlxuICAgICAgIWFjdGlvbkluZm8udGFyZ2V0Lm9wdGlvbnNbYWN0aW9uSW5mby5hY3Rpb24ubmFtZV0ubWFudWFsU3RhcnQpIHtcbiAgICAgIHJldHVybiBhY3Rpb25JbmZvXG4gICAgfVxuXG4gICAgZWxlbWVudCA9IHV0aWxzLmRvbS5wYXJlbnROb2RlKGVsZW1lbnQpXG4gIH1cblxuICByZXR1cm4geyBhY3Rpb246IG51bGwsIHRhcmdldDogbnVsbCwgZWxlbWVudDogbnVsbCB9XG59XG5cbmZ1bmN0aW9uIHByZXBhcmUgKGludGVyYWN0aW9uLCB7IGFjdGlvbiwgdGFyZ2V0LCBlbGVtZW50IH0sIHNjb3BlKSB7XG4gIGFjdGlvbiA9IGFjdGlvbiB8fCB7fVxuXG4gIGlmIChpbnRlcmFjdGlvbi50YXJnZXQgJiYgaW50ZXJhY3Rpb24udGFyZ2V0Lm9wdGlvbnMuc3R5bGVDdXJzb3IpIHtcbiAgICBzZXRDdXJzb3IoaW50ZXJhY3Rpb24uZWxlbWVudCwgJycsIHNjb3BlKVxuICB9XG5cbiAgaW50ZXJhY3Rpb24udGFyZ2V0ID0gdGFyZ2V0XG4gIGludGVyYWN0aW9uLmVsZW1lbnQgPSBlbGVtZW50XG4gIHV0aWxzLmNvcHlBY3Rpb24oaW50ZXJhY3Rpb24ucHJlcGFyZWQsIGFjdGlvbilcblxuICBpZiAodGFyZ2V0ICYmIHRhcmdldC5vcHRpb25zLnN0eWxlQ3Vyc29yKSB7XG4gICAgY29uc3QgY3Vyc29yID0gYWN0aW9uID8gc2NvcGUuYWN0aW9uc1thY3Rpb24ubmFtZV0uZ2V0Q3Vyc29yKGFjdGlvbikgOiAnJ1xuICAgIHNldEN1cnNvcihpbnRlcmFjdGlvbi5lbGVtZW50LCBjdXJzb3IsIHNjb3BlKVxuICB9XG5cbiAgc2NvcGUuYXV0b1N0YXJ0LnNpZ25hbHMuZmlyZSgncHJlcGFyZWQnLCB7IGludGVyYWN0aW9uIH0pXG59XG5cbmZ1bmN0aW9uIHdpdGhpbkludGVyYWN0aW9uTGltaXQgKGludGVyYWN0YWJsZSwgZWxlbWVudCwgYWN0aW9uLCBzY29wZSkge1xuICBjb25zdCBvcHRpb25zID0gaW50ZXJhY3RhYmxlLm9wdGlvbnNcbiAgY29uc3QgbWF4QWN0aW9ucyA9IG9wdGlvbnNbYWN0aW9uLm5hbWVdLm1heFxuICBjb25zdCBtYXhQZXJFbGVtZW50ID0gb3B0aW9uc1thY3Rpb24ubmFtZV0ubWF4UGVyRWxlbWVudFxuICBjb25zdCBhdXRvU3RhcnRNYXggPSBzY29wZS5hdXRvU3RhcnQubWF4SW50ZXJhY3Rpb25zXG4gIGxldCBhY3RpdmVJbnRlcmFjdGlvbnMgPSAwXG4gIGxldCB0YXJnZXRDb3VudCA9IDBcbiAgbGV0IHRhcmdldEVsZW1lbnRDb3VudCA9IDBcblxuICAvLyBubyBhY3Rpb25zIGlmIGFueSBvZiB0aGVzZSB2YWx1ZXMgPT0gMFxuICBpZiAoIShtYXhBY3Rpb25zICYmIG1heFBlckVsZW1lbnQgJiYgYXV0b1N0YXJ0TWF4KSkgeyByZXR1cm4gZmFsc2UgfVxuXG4gIGZvciAoY29uc3QgaW50ZXJhY3Rpb24gb2Ygc2NvcGUuaW50ZXJhY3Rpb25zLmxpc3QpIHtcbiAgICBjb25zdCBvdGhlckFjdGlvbiA9IGludGVyYWN0aW9uLnByZXBhcmVkLm5hbWVcblxuICAgIGlmICghaW50ZXJhY3Rpb24uaW50ZXJhY3RpbmcoKSkgeyBjb250aW51ZSB9XG5cbiAgICBhY3RpdmVJbnRlcmFjdGlvbnMrK1xuXG4gICAgaWYgKGFjdGl2ZUludGVyYWN0aW9ucyA+PSBhdXRvU3RhcnRNYXgpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmIChpbnRlcmFjdGlvbi50YXJnZXQgIT09IGludGVyYWN0YWJsZSkgeyBjb250aW51ZSB9XG5cbiAgICB0YXJnZXRDb3VudCArPSBvdGhlckFjdGlvbiA9PT0gYWN0aW9uLm5hbWUgPyAxIDogMFxuXG4gICAgaWYgKHRhcmdldENvdW50ID49IG1heEFjdGlvbnMpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmIChpbnRlcmFjdGlvbi5lbGVtZW50ID09PSBlbGVtZW50KSB7XG4gICAgICB0YXJnZXRFbGVtZW50Q291bnQrK1xuXG4gICAgICBpZiAob3RoZXJBY3Rpb24gPT09IGFjdGlvbi5uYW1lICYmIHRhcmdldEVsZW1lbnRDb3VudCA+PSBtYXhQZXJFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhdXRvU3RhcnRNYXggPiAwXG59XG5cbmZ1bmN0aW9uIG1heEludGVyYWN0aW9ucyAobmV3VmFsdWUsIHNjb3BlKSB7XG4gIGlmICh1dGlscy5pcy5udW1iZXIobmV3VmFsdWUpKSB7XG4gICAgc2NvcGUuYXV0b1N0YXJ0Lm1heEludGVyYWN0aW9ucyA9IG5ld1ZhbHVlXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgcmV0dXJuIHNjb3BlLmF1dG9TdGFydC5tYXhJbnRlcmFjdGlvbnNcbn1cblxuZnVuY3Rpb24gc2V0Q3Vyc29yIChlbGVtZW50LCBjdXJzb3IsIHNjb3BlKSB7XG4gIGlmIChzY29wZS5hdXRvU3RhcnQuY3Vyc29yRWxlbWVudCkge1xuICAgIHNjb3BlLmF1dG9TdGFydC5jdXJzb3JFbGVtZW50LnN0eWxlLmN1cnNvciA9ICcnXG4gIH1cblxuICBlbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvciA9IGN1cnNvclxuICBlbGVtZW50LnN0eWxlLmN1cnNvciA9IGN1cnNvclxuICBzY29wZS5hdXRvU3RhcnQuY3Vyc29yRWxlbWVudCA9IGN1cnNvciA/IGVsZW1lbnQgOiBudWxsXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5zdGFsbCxcbiAgbWF4SW50ZXJhY3Rpb25zLFxuICB3aXRoaW5JbnRlcmFjdGlvbkxpbWl0LFxuICB2YWxpZGF0ZUFjdGlvbixcbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQyxPQUFPLG1CQUFtQixNQUFNLHVCQUF1QixDQUFBO0FBMkN2RCxTQUFTLE9BQU8sQ0FBRSxLQUFZO0lBQzVCLE1BQU0sRUFDSixRQUFRLEVBQ1IsWUFBWSxFQUNaLFFBQVEsR0FDVCxHQUFHLEtBQUssQ0FBQTtJQUVULFFBQVEsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUVqQyxnQ0FBZ0M7SUFDaEMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFO1FBQy9FLElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQUUsT0FBTTtTQUFFO1FBRXpDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDakYsT0FBTyxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDekMsQ0FBQyxDQUFDLENBQUE7SUFFRixnQ0FBZ0M7SUFDaEMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFO1FBQy9FLElBQUksV0FBVyxDQUFDLFdBQVcsS0FBSyxPQUFPO1lBQ25DLFdBQVcsQ0FBQyxhQUFhO1lBQ3pCLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUFFLE9BQU07U0FBRTtRQUV6QyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVB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QUFRLEVBQUUsS0FBSztJQUN2QyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQzdCLEtBQUssQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQTtRQUUxQyxPQUFPLElBQUksQ0FBQTtLQUNaO0lBRUQsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQTtBQUN4QyxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLO0lBQ3hDLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUU7UUFDakMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUE7S0FDaEQ7SUFFRCxPQUFPLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtJQUMzRCxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7SUFDN0IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUN6RCxDQUFDO0FBRUQsZUFBZTtJQUNiLE9BQU87SUFDUCxlQUFlO0lBQ2Ysc0JBQXNCO0lBQ3RCLGNBQWM7Q0FDZixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMnXG5pbXBvcnQgSW50ZXJhY3RhYmxlTWV0aG9kcyBmcm9tICcuL0ludGVyYWN0YWJsZU1ldGhvZHMnXG50eXBlIFNjb3BlID0gaW1wb3J0ICgnQGludGVyYWN0anMvY29yZS9zY29wZScpLlNjb3BlXG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9pbnRlcmFjdC9pbnRlcmFjdCcge1xuICBpbnRlcmZhY2UgSW50ZXJhY3RTdGF0aWMge1xuICAgIG1heEludGVyYWN0aW9uczogKG5ld1ZhbHVlOiBhbnkpID0+IGFueVxuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJyB7XG4gIGludGVyZmFjZSBTY29wZSB7XG4gICAgYXV0b1N0YXJ0OiBBdXRvU3RhcnRcbiAgICBtYXhJbnRlcmFjdGlvbnM6ICguLi5hcmdzOiBhbnkpID0+IGFueVxuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL2RlZmF1bHRPcHRpb25zJyB7XG4gIGludGVyZmFjZSBCYXNlRGVmYXVsdHMge1xuICAgIGFjdGlvbkNoZWNrZXI/XG4gICAgc3R5bGVDdXJzb3I/XG4gIH1cblxuICBpbnRlcmZhY2UgUGVyQWN0aW9uRGVmYXVsdHMge1xuICAgIG1hbnVhbFN0YXJ0PzogYm9vbGVhblxuICAgIG1heD86IG51bWJlclxuICAgIG1heFBlckVsZW1lbnQ/OiBudW1iZXJcbiAgICBhbGxvd0Zyb20/OiBzdHJpbmcgfCBFbGVtZW50XG4gICAgaWdub3JlRnJvbT86IHN0cmluZyB8IEVsZW1lbnRcblxuICAgIC8vIG9ubHkgYWxsb3cgbGVmdCBidXR0b24gYnkgZGVmYXVsdFxuICAgIC8vIHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTW91c2VFdmVudC9idXR0b25zI1JldHVybl92YWx1ZVxuICAgIG1vdXNlQnV0dG9ucz86IDAgfCAxIHwgMiB8IDQgfCAxNlxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b1N0YXJ0IHtcbiAgLy8gQWxsb3cgdGhpcyBtYW55IGludGVyYWN0aW9ucyB0byBoYXBwZW4gc2ltdWx0YW5lb3VzbHlcbiAgbWF4SW50ZXJhY3Rpb25zOiBudW1iZXJcbiAgd2l0aGluSW50ZXJhY3Rpb25MaW1pdDogdHlwZW9mIHdpdGhpbkludGVyYWN0aW9uTGltaXRcbiAgY3Vyc29yRWxlbWVudDogRWxlbWVudFxuICBzaWduYWxzOiB1dGlscy5TaWduYWxzXG59XG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlOiBTY29wZSkge1xuICBjb25zdCB7XG4gICAgaW50ZXJhY3QsXG4gICAgaW50ZXJhY3Rpb25zLFxuICAgIGRlZmF1bHRzLFxuICB9ID0gc2NvcGVcblxuICBpbnRlcmFjdC51c2UoSW50ZXJhY3RhYmxlTWV0aG9kcylcblxuICAvLyBzZXQgY3Vyc29yIHN0eWxlIG9uIG1vdXNlZG93blxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignZG93bicsICh7IGludGVyYWN0aW9uLCBwb2ludGVyLCBldmVudCwgZXZlbnRUYXJnZXQgfSkgPT4ge1xuICAgIGlmIChpbnRlcmFjdGlvbi5pbnRlcmFjdGluZygpKSB7IHJldHVybiB9XG5cbiAgICBjb25zdCBhY3Rpb25JbmZvID0gZ2V0QWN0aW9uSW5mbyhpbnRlcmFjdGlvbiwgcG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0LCBzY29wZSlcbiAgICBwcmVwYXJlKGludGVyYWN0aW9uLCBhY3Rpb25JbmZvLCBzY29wZSlcbiAgfSlcblxuICAvLyBzZXQgY3Vyc29yIHN0eWxlIG9uIG1vdXNlbW92ZVxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignbW92ZScsICh7IGludGVyYWN0aW9uLCBwb2ludGVyLCBldmVudCwgZXZlbnRUYXJnZXQgfSkgPT4ge1xuICAgIGlmIChpbnRlcmFjdGlvbi5wb2ludGVyVHlwZSAhPT0gJ21vdXNlJyB8fFxuICAgICAgICBpbnRlcmFjdGlvbi5wb2ludGVySXNEb3duIHx8XG4gICAgICAgIGludGVyYWN0aW9uLmludGVyYWN0aW5nKCkpIHsgcmV0dXJuIH1cblxuICAgIGNvbnN0IGFjdGlvbkluZm8gPSBnZXRBY3Rpb25JbmZvKGludGVyYWN0aW9uLCBwb2ludGVyLCBldmVudCwgZXZlbnRUYXJnZXQsIHNjb3BlKVxuICAgIHByZXBhcmUoaW50ZXJhY3Rpb24sIGFjdGlvbkluZm8sIHNjb3BlKVxuICB9KVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdtb3ZlJywgKGFyZykgPT4ge1xuICAgIGNvbnN0IHsgaW50ZXJhY3Rpb24gfSA9IGFyZ1xuXG4gICAgaWYgKCFpbnRlcmFjdGlvbi5wb2ludGVySXNEb3duIHx8XG4gICAgICAgIGludGVyYWN0aW9uLmludGVyYWN0aW5nKCkgfHxcbiAgICAgICAgIWludGVyYWN0aW9uLnBvaW50ZXJXYXNNb3ZlZCB8fFxuICAgICAgICAhaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2NvcGUuYXV0b1N0YXJ0LnNpZ25hbHMuZmlyZSgnYmVmb3JlLXN0YXJ0JywgYXJnKVxuXG4gICAgY29uc3QgdGFyZ2V0ID0gaW50ZXJhY3Rpb24udGFyZ2V0XG5cbiAgICBpZiAoaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSAmJiB0YXJnZXQpIHtcbiAgICAgIC8vIGNoZWNrIG1hbnVhbFN0YXJ0IGFuZCBpbnRlcmFjdGlvbiBsaW1pdFxuICAgICAgaWYgKHRhcmdldC5vcHRpb25zW2ludGVyYWN0aW9uLnByZXBhcmVkLm5hbWVdLm1hbnVhbFN0YXJ0IHx8XG4gICAgICAgICAgIXdpdGhpbkludGVyYWN0aW9uTGltaXQodGFyZ2V0LCBpbnRlcmFjdGlvbi5lbGVtZW50LCBpbnRlcmFjdGlvbi5wcmVwYXJlZCwgc2NvcGUpKSB7XG4gICAgICAgIGludGVyYWN0aW9uLnN0b3AoKVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGludGVyYWN0aW9uLnN0YXJ0KGludGVyYWN0aW9uLnByZXBhcmVkLCB0YXJnZXQsIGludGVyYWN0aW9uLmVsZW1lbnQpXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdzdG9wJywgKHsgaW50ZXJhY3Rpb24gfSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGludGVyYWN0aW9uLnRhcmdldFxuXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQub3B0aW9ucy5zdHlsZUN1cnNvcikge1xuICAgICAgc2V0Q3Vyc29yKGludGVyYWN0aW9uLmVsZW1lbnQsICcnLCBzY29wZSlcbiAgICB9XG4gIH0pXG5cbiAgZGVmYXVsdHMuYmFzZS5hY3Rpb25DaGVja2VyID0gbnVsbFxuICBkZWZhdWx0cy5iYXNlLnN0eWxlQ3Vyc29yID0gdHJ1ZVxuXG4gIHV0aWxzLmV4dGVuZChkZWZhdWx0cy5wZXJBY3Rpb24sIHtcbiAgICBtYW51YWxTdGFydDogZmFsc2UsXG4gICAgbWF4OiBJbmZpbml0eSxcbiAgICBtYXhQZXJFbGVtZW50OiAxLFxuICAgIGFsbG93RnJvbTogIG51bGwsXG4gICAgaWdub3JlRnJvbTogbnVsbCxcblxuICAgIC8vIG9ubHkgYWxsb3cgbGVmdCBidXR0b24gYnkgZGVmYXVsdFxuICAgIC8vIHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTW91c2VFdmVudC9idXR0b25zI1JldHVybl92YWx1ZVxuICAgIG1vdXNlQnV0dG9uczogMSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgb3Igc2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBpbnRlcmFjdGlvbnMgYWxsb3dlZC4gIEJ5XG4gICAqIGRlZmF1bHQgb25seSAxIGludGVyYWN0aW9uIGlzIGFsbG93ZWQgYXQgYSB0aW1lIChmb3IgYmFja3dhcmRzXG4gICAqIGNvbXBhdGliaWxpdHkpLiBUbyBhbGxvdyBtdWx0aXBsZSBpbnRlcmFjdGlvbnMgb24gdGhlIHNhbWUgSW50ZXJhY3RhYmxlcyBhbmRcbiAgICogZWxlbWVudHMsIHlvdSBuZWVkIHRvIGVuYWJsZSBpdCBpbiB0aGUgZHJhZ2dhYmxlLCByZXNpemFibGUgYW5kIGdlc3R1cmFibGVcbiAgICogYCdtYXgnYCBhbmQgYCdtYXhQZXJFbGVtZW50J2Agb3B0aW9ucy5cbiAgICpcbiAgICogQGFsaWFzIG1vZHVsZTppbnRlcmFjdC5tYXhJbnRlcmFjdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtuZXdWYWx1ZV0gQW55IG51bWJlci4gbmV3VmFsdWUgPD0gMCBtZWFucyBubyBpbnRlcmFjdGlvbnMuXG4gICAqL1xuICAoaW50ZXJhY3QgYXMgYW55IC8qIEZJWE1FICovKS5tYXhJbnRlcmFjdGlvbnMgPSAobmV3VmFsdWUpID0+IG1heEludGVyYWN0aW9ucyhuZXdWYWx1ZSwgc2NvcGUpXG5cbiAgc2NvcGUuYXV0b1N0YXJ0ID0ge1xuICAgIC8vIEFsbG93IHRoaXMgbWFueSBpbnRlcmFjdGlvbnMgdG8gaGFwcGVuIHNpbXVsdGFuZW91c2x5XG4gICAgbWF4SW50ZXJhY3Rpb25zOiBJbmZpbml0eSxcbiAgICB3aXRoaW5JbnRlcmFjdGlvbkxpbWl0LFxuICAgIGN1cnNvckVsZW1lbnQ6IG51bGwsXG4gICAgc2lnbmFsczogbmV3IHV0aWxzLlNpZ25hbHMoKSxcbiAgfVxufVxuXG4vLyBDaGVjayBpZiB0aGUgY3VycmVudCB0YXJnZXQgc3VwcG9ydHMgdGhlIGFjdGlvbi5cbi8vIElmIHNvLCByZXR1cm4gdGhlIHZhbGlkYXRlZCBhY3Rpb24uIE90aGVyd2lzZSwgcmV0dXJuIG51bGxcbmZ1bmN0aW9uIHZhbGlkYXRlQWN0aW9uIChhY3Rpb24sIGludGVyYWN0YWJsZSwgZWxlbWVudCwgZXZlbnRUYXJnZXQsIHNjb3BlKSB7XG4gIGlmICh1dGlscy5pcy5vYmplY3QoYWN0aW9uKSAmJlxuICAgICAgaW50ZXJhY3RhYmxlLnRlc3RJZ25vcmVBbGxvdyhpbnRlcmFjdGFibGUub3B0aW9uc1thY3Rpb24ubmFtZV0sIGVsZW1lbnQsIGV2ZW50VGFyZ2V0KSAmJlxuICAgICAgaW50ZXJhY3RhYmxlLm9wdGlvbnNbYWN0aW9uLm5hbWVdLmVuYWJsZWQgJiZcbiAgICAgIHdpdGhpbkludGVyYWN0aW9uTGltaXQoaW50ZXJhY3RhYmxlLCBlbGVtZW50LCBhY3Rpb24sIHNjb3BlKSkge1xuICAgIHJldHVybiBhY3Rpb25cbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2VsZWN0b3IgKGludGVyYWN0aW9uLCBwb2ludGVyLCBldmVudCwgbWF0Y2hlcywgbWF0Y2hFbGVtZW50cywgZXZlbnRUYXJnZXQsIHNjb3BlKSB7XG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBtYXRjaGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaGVzW2ldXG4gICAgY29uc3QgbWF0Y2hFbGVtZW50ID0gbWF0Y2hFbGVtZW50c1tpXVxuICAgIGNvbnN0IGFjdGlvbiA9IHZhbGlkYXRlQWN0aW9uKFxuICAgICAgbWF0Y2guZ2V0QWN0aW9uKHBvaW50ZXIsIGV2ZW50LCBpbnRlcmFjdGlvbiwgbWF0Y2hFbGVtZW50KSxcbiAgICAgIG1hdGNoLFxuICAgICAgbWF0Y2hFbGVtZW50LFxuICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICBzY29wZSlcblxuICAgIGlmIChhY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgdGFyZ2V0OiBtYXRjaCxcbiAgICAgICAgZWxlbWVudDogbWF0Y2hFbGVtZW50LFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFjdGlvbjogbnVsbCwgdGFyZ2V0OiBudWxsLCBlbGVtZW50OiBudWxsIH1cbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uSW5mbyAoaW50ZXJhY3Rpb24sIHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCwgc2NvcGUpIHtcbiAgbGV0IG1hdGNoZXMgPSBbXVxuICBsZXQgbWF0Y2hFbGVtZW50cyA9IFtdXG5cbiAgbGV0IGVsZW1lbnQgPSBldmVudFRhcmdldFxuXG4gIGZ1bmN0aW9uIHB1c2hNYXRjaGVzIChpbnRlcmFjdGFibGUpIHtcbiAgICBtYXRjaGVzLnB1c2goaW50ZXJhY3RhYmxlKVxuICAgIG1hdGNoRWxlbWVudHMucHVzaChlbGVtZW50KVxuICB9XG5cbiAgd2hpbGUgKHV0aWxzLmlzLmVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBtYXRjaGVzID0gW11cbiAgICBtYXRjaEVsZW1lbnRzID0gW11cblxuICAgIHNjb3BlLmludGVyYWN0YWJsZXMuZm9yRWFjaE1hdGNoKGVsZW1lbnQsIHB1c2hNYXRjaGVzKVxuXG4gICAgY29uc3QgYWN0aW9uSW5mbyA9IHZhbGlkYXRlU2VsZWN0b3IoaW50ZXJhY3Rpb24sIHBvaW50ZXIsIGV2ZW50LCBtYXRjaGVzLCBtYXRjaEVsZW1lbnRzLCBldmVudFRhcmdldCwgc2NvcGUpXG5cbiAgICBpZiAoYWN0aW9uSW5mby5hY3Rpb24gJiZcbiAgICAgICFhY3Rpb25JbmZvLnRhcmdldC5vcHRpb25zW2FjdGlvbkluZm8uYWN0aW9uLm5hbWVdLm1hbnVhbFN0YXJ0KSB7XG4gICAgICByZXR1cm4gYWN0aW9uSW5mb1xuICAgIH1cblxuICAgIGVsZW1lbnQgPSB1dGlscy5kb20ucGFyZW50Tm9kZShlbGVtZW50KVxuICB9XG5cbiAgcmV0dXJuIHsgYWN0aW9uOiBudWxsLCB0YXJnZXQ6IG51bGwsIGVsZW1lbnQ6IG51bGwgfVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlIChpbnRlcmFjdGlvbiwgeyBhY3Rpb24sIHRhcmdldCwgZWxlbWVudCB9LCBzY29wZSkge1xuICBhY3Rpb24gPSBhY3Rpb24gfHwge31cblxuICBpZiAoaW50ZXJhY3Rpb24udGFyZ2V0ICYmIGludGVyYWN0aW9uLnRhcmdldC5vcHRpb25zLnN0eWxlQ3Vyc29yKSB7XG4gICAgc2V0Q3Vyc29yKGludGVyYWN0aW9uLmVsZW1lbnQsICcnLCBzY29wZSlcbiAgfVxuXG4gIGludGVyYWN0aW9uLnRhcmdldCA9IHRhcmdldFxuICBpbnRlcmFjdGlvbi5lbGVtZW50ID0gZWxlbWVudFxuICB1dGlscy5jb3B5QWN0aW9uKGludGVyYWN0aW9uLnByZXBhcmVkLCBhY3Rpb24pXG5cbiAgaWYgKHRhcmdldCAmJiB0YXJnZXQub3B0aW9ucy5zdHlsZUN1cnNvcikge1xuICAgIGNvbnN0IGN1cnNvciA9IGFjdGlvbiA/IHNjb3BlLmFjdGlvbnNbYWN0aW9uLm5hbWVdLmdldEN1cnNvcihhY3Rpb24pIDogJydcbiAgICBzZXRDdXJzb3IoaW50ZXJhY3Rpb24uZWxlbWVudCwgY3Vyc29yLCBzY29wZSlcbiAgfVxuXG4gIHNjb3BlLmF1dG9TdGFydC5zaWduYWxzLmZpcmUoJ3ByZXBhcmVkJywgeyBpbnRlcmFjdGlvbiB9KVxufVxuXG5mdW5jdGlvbiB3aXRoaW5JbnRlcmFjdGlvbkxpbWl0IChpbnRlcmFjdGFibGUsIGVsZW1lbnQsIGFjdGlvbiwgc2NvcGUpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGludGVyYWN0YWJsZS5vcHRpb25zXG4gIGNvbnN0IG1heEFjdGlvbnMgPSBvcHRpb25zW2FjdGlvbi5uYW1lXS5tYXhcbiAgY29uc3QgbWF4UGVyRWxlbWVudCA9IG9wdGlvbnNbYWN0aW9uLm5hbWVdLm1heFBlckVsZW1lbnRcbiAgY29uc3QgYXV0b1N0YXJ0TWF4ID0gc2NvcGUuYXV0b1N0YXJ0Lm1heEludGVyYWN0aW9uc1xuICBsZXQgYWN0aXZlSW50ZXJhY3Rpb25zID0gMFxuICBsZXQgdGFyZ2V0Q291bnQgPSAwXG4gIGxldCB0YXJnZXRFbGVtZW50Q291bnQgPSAwXG5cbiAgLy8gbm8gYWN0aW9ucyBpZiBhbnkgb2YgdGhlc2UgdmFsdWVzID09IDBcbiAgaWYgKCEobWF4QWN0aW9ucyAmJiBtYXhQZXJFbGVtZW50ICYmIGF1dG9TdGFydE1heCkpIHsgcmV0dXJuIGZhbHNlIH1cblxuICBmb3IgKGNvbnN0IGludGVyYWN0aW9uIG9mIHNjb3BlLmludGVyYWN0aW9ucy5saXN0KSB7XG4gICAgY29uc3Qgb3RoZXJBY3Rpb24gPSBpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lXG5cbiAgICBpZiAoIWludGVyYWN0aW9uLmludGVyYWN0aW5nKCkpIHsgY29udGludWUgfVxuXG4gICAgYWN0aXZlSW50ZXJhY3Rpb25zKytcblxuICAgIGlmIChhY3RpdmVJbnRlcmFjdGlvbnMgPj0gYXV0b1N0YXJ0TWF4KSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJhY3Rpb24udGFyZ2V0ICE9PSBpbnRlcmFjdGFibGUpIHsgY29udGludWUgfVxuXG4gICAgdGFyZ2V0Q291bnQgKz0gb3RoZXJBY3Rpb24gPT09IGFjdGlvbi5uYW1lID8gMSA6IDBcblxuICAgIGlmICh0YXJnZXRDb3VudCA+PSBtYXhBY3Rpb25zKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJhY3Rpb24uZWxlbWVudCA9PT0gZWxlbWVudCkge1xuICAgICAgdGFyZ2V0RWxlbWVudENvdW50KytcblxuICAgICAgaWYgKG90aGVyQWN0aW9uID09PSBhY3Rpb24ubmFtZSAmJiB0YXJnZXRFbGVtZW50Q291bnQgPj0gbWF4UGVyRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXV0b1N0YXJ0TWF4ID4gMFxufVxuXG5mdW5jdGlvbiBtYXhJbnRlcmFjdGlvbnMgKG5ld1ZhbHVlLCBzY29wZSkge1xuICBpZiAodXRpbHMuaXMubnVtYmVyKG5ld1ZhbHVlKSkge1xuICAgIHNjb3BlLmF1dG9TdGFydC5tYXhJbnRlcmFjdGlvbnMgPSBuZXdWYWx1ZVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHJldHVybiBzY29wZS5hdXRvU3RhcnQubWF4SW50ZXJhY3Rpb25zXG59XG5cbmZ1bmN0aW9uIHNldEN1cnNvciAoZWxlbWVudCwgY3Vyc29yLCBzY29wZSkge1xuICBpZiAoc2NvcGUuYXV0b1N0YXJ0LmN1cnNvckVsZW1lbnQpIHtcbiAgICBzY29wZS5hdXRvU3RhcnQuY3Vyc29yRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnJ1xuICB9XG5cbiAgZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3IgPSBjdXJzb3JcbiAgZWxlbWVudC5zdHlsZS5jdXJzb3IgPSBjdXJzb3JcbiAgc2NvcGUuYXV0b1N0YXJ0LmN1cnNvckVsZW1lbnQgPSBjdXJzb3IgPyBlbGVtZW50IDogbnVsbFxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluc3RhbGwsXG4gIG1heEludGVyYWN0aW9ucyxcbiAgd2l0aGluSW50ZXJhY3Rpb25MaW1pdCxcbiAgdmFsaWRhdGVBY3Rpb24sXG59XG4iXX0= \ No newline at end of file diff --git a/packages/auto-start/dragAxis.js b/packages/auto-start/dragAxis.js index 4acc879bc..6f8a19d38 100644 --- a/packages/auto-start/dragAxis.js +++ b/packages/auto-start/dragAxis.js @@ -60,4 +60,4 @@ function install(scope) { } } export default { install }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ0F4aXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkcmFnQXhpcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDMUMsT0FBTyxTQUFTLE1BQU0sUUFBUSxDQUFBO0FBSTlCLFNBQVMsT0FBTyxDQUFFLEtBQVk7SUFDNUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRyxDQUFDLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUNuRixJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUFFLE9BQU07U0FBRTtRQUVwRCx5Q0FBeUM7UUFDekMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3pCLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQTtRQUNyRCxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFBO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRWxFLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxRQUFRLEtBQUssT0FBTztZQUM1RCxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVEQUF1RDtZQUN4RSxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQTtRQUUxQiw2REFBNkQ7UUFDN0QsSUFBSSxXQUFXLEtBQUssSUFBSSxJQUFJLFNBQVMsS0FBSyxJQUFJLElBQUksU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUMzRSw2QkFBNkI7WUFDN0IsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1lBRWhDLGtEQUFrRDtZQUNsRCxJQUFJLE9BQU8sR0FBRyxXQUFXLENBQUE7WUFFekIsTUFBTSxZQUFZLEdBQUcsVUFBVSxZQUFZO2dCQUN6QyxJQUFJLFlBQVksS0FBSyxXQUFXLENBQUMsTUFBTSxFQUFFO29CQUFFLE9BQU07aUJBQUU7Z0JBRW5ELE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQTtnQkFFL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXO29CQUNwQixZQUFZLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLEVBQUU7b0JBQy9ELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQ25DLFdBQVcsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUE7b0JBRXZFLElBQUksTUFBTTt3QkFDTixNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU07d0JBQ3RCLGNBQWMsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDO3dCQUN6QyxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRTt3QkFDL0UsT0FBTyxZQUFZLENBQUE7cUJBQ3BCO2lCQUNGO1lBQ0gsQ0FBQyxDQUFBO1lBRUQsMEJBQTBCO1lBQzFCLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDMUIsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFBO2dCQUU1RSxJQUFJLFlBQVksRUFBRTtvQkFDaEIsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQTtvQkFDM0MsV0FBVyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUE7b0JBQ2pDLFdBQVcsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO29CQUM3QixNQUFLO2lCQUNOO2dCQUVELE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7YUFDOUI7U0FDRjtJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUYsU0FBUyxjQUFjLENBQUUsU0FBUyxFQUFFLFlBQVk7UUFDOUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUFFLE9BQU8sS0FBSyxDQUFBO1NBQUU7UUFFbkMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFBO1FBRXBELE9BQU8sQ0FBQyxTQUFTLEtBQUssSUFBSSxJQUFJLFFBQVEsS0FBSyxJQUFJLElBQUksUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFBO0lBQzVFLENBQUM7QUFDSCxDQUFDO0FBRUQsZUFBZSxFQUFFLE9BQU8sRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uTmFtZSB9IGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvc2NvcGUnXG5pbXBvcnQgeyBwYXJlbnROb2RlIH0gZnJvbSAnQGludGVyYWN0anMvdXRpbHMvZG9tVXRpbHMnXG5pbXBvcnQgKiBhcyBpcyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9pcydcbmltcG9ydCBhdXRvU3RhcnQgZnJvbSAnLi9iYXNlJ1xuXG50eXBlIFNjb3BlID0gaW1wb3J0ICgnQGludGVyYWN0anMvY29yZS9zY29wZScpLlNjb3BlXG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlOiBTY29wZSkge1xuICBzY29wZS5hdXRvU3RhcnQuc2lnbmFscy5vbignYmVmb3JlLXN0YXJ0JywgICh7IGludGVyYWN0aW9uLCBldmVudFRhcmdldCwgZHgsIGR5IH0pID0+IHtcbiAgICBpZiAoaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSAhPT0gJ2RyYWcnKSB7IHJldHVybiB9XG5cbiAgICAvLyBjaGVjayBpZiBhIGRyYWcgaXMgaW4gdGhlIGNvcnJlY3QgYXhpc1xuICAgIGNvbnN0IGFic1ggPSBNYXRoLmFicyhkeClcbiAgICBjb25zdCBhYnNZID0gTWF0aC5hYnMoZHkpXG4gICAgY29uc3QgdGFyZ2V0T3B0aW9ucyA9IGludGVyYWN0aW9uLnRhcmdldC5vcHRpb25zLmRyYWdcbiAgICBjb25zdCBzdGFydEF4aXMgPSB0YXJnZXRPcHRpb25zLnN0YXJ0QXhpc1xuICAgIGNvbnN0IGN1cnJlbnRBeGlzID0gKGFic1ggPiBhYnNZID8gJ3gnIDogYWJzWCA8IGFic1kgPyAneScgOiAneHknKVxuXG4gICAgaW50ZXJhY3Rpb24ucHJlcGFyZWQuYXhpcyA9IHRhcmdldE9wdGlvbnMubG9ja0F4aXMgPT09ICdzdGFydCdcbiAgICAgID8gY3VycmVudEF4aXNbMF0gLy8gYWx3YXlzIGxvY2sgdG8gb25lIGF4aXMgZXZlbiBpZiBjdXJyZW50QXhpcyA9PT0gJ3h5J1xuICAgICAgOiB0YXJnZXRPcHRpb25zLmxvY2tBeGlzXG5cbiAgICAvLyBpZiB0aGUgbW92ZW1lbnQgaXNuJ3QgaW4gdGhlIHN0YXJ0QXhpcyBvZiB0aGUgaW50ZXJhY3RhYmxlXG4gICAgaWYgKGN1cnJlbnRBeGlzICE9PSAneHknICYmIHN0YXJ0QXhpcyAhPT0gJ3h5JyAmJiBzdGFydEF4aXMgIT09IGN1cnJlbnRBeGlzKSB7XG4gICAgICAvLyBjYW5jZWwgdGhlIHByZXBhcmVkIGFjdGlvblxuICAgICAgaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSA9IG51bGxcblxuICAgICAgLy8gdGhlbiB0cnkgdG8gZ2V0IGEgZHJhZyBmcm9tIGFub3RoZXIgaW5lcmFjdGFibGVcbiAgICAgIGxldCBlbGVtZW50ID0gZXZlbnRUYXJnZXRcblxuICAgICAgY29uc3QgZ2V0RHJhZ2dhYmxlID0gZnVuY3Rpb24gKGludGVyYWN0YWJsZSkge1xuICAgICAgICBpZiAoaW50ZXJhY3RhYmxlID09PSBpbnRlcmFjdGlvbi50YXJnZXQpIHsgcmV0dXJuIH1cblxuICAgICAgICBjb25zdCBvcHRpb25zID0gaW50ZXJhY3Rpb24udGFyZ2V0Lm9wdGlvbnMuZHJhZ1xuXG4gICAgICAgIGlmICghb3B0aW9ucy5tYW51YWxTdGFydCAmJlxuICAgICAgICAgICAgaW50ZXJhY3RhYmxlLnRlc3RJZ25vcmVBbGxvdyhvcHRpb25zLCBlbGVtZW50LCBldmVudFRhcmdldCkpIHtcbiAgICAgICAgICBjb25zdCBhY3Rpb24gPSBpbnRlcmFjdGFibGUuZ2V0QWN0aW9uKFxuICAgICAgICAgICAgaW50ZXJhY3Rpb24uZG93blBvaW50ZXIsIGludGVyYWN0aW9uLmRvd25FdmVudCwgaW50ZXJhY3Rpb24sIGVsZW1lbnQpXG5cbiAgICAgICAgICBpZiAoYWN0aW9uICYmXG4gICAgICAgICAgICAgIGFjdGlvbi5uYW1lID09PSAnZHJhZycgJiZcbiAgICAgICAgICAgICAgY2hlY2tTdGFydEF4aXMoY3VycmVudEF4aXMsIGludGVyYWN0YWJsZSkgJiZcbiAgICAgICAgICAgICAgYXV0b1N0YXJ0LnZhbGlkYXRlQWN0aW9uKGFjdGlvbiwgaW50ZXJhY3RhYmxlLCBlbGVtZW50LCBldmVudFRhcmdldCwgc2NvcGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW50ZXJhY3RhYmxlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrIGFsbCBpbnRlcmFjdGFibGVzXG4gICAgICB3aGlsZSAoaXMuZWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBpbnRlcmFjdGFibGUgPSBzY29wZS5pbnRlcmFjdGFibGVzLmZvckVhY2hNYXRjaChlbGVtZW50LCBnZXREcmFnZ2FibGUpXG5cbiAgICAgICAgaWYgKGludGVyYWN0YWJsZSkge1xuICAgICAgICAgIGludGVyYWN0aW9uLnByZXBhcmVkLm5hbWUgPSBBY3Rpb25OYW1lLkRyYWdcbiAgICAgICAgICBpbnRlcmFjdGlvbi50YXJnZXQgPSBpbnRlcmFjdGFibGVcbiAgICAgICAgICBpbnRlcmFjdGlvbi5lbGVtZW50ID0gZWxlbWVudFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cblxuICAgICAgICBlbGVtZW50ID0gcGFyZW50Tm9kZShlbGVtZW50KVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICBmdW5jdGlvbiBjaGVja1N0YXJ0QXhpcyAoc3RhcnRBeGlzLCBpbnRlcmFjdGFibGUpIHtcbiAgICBpZiAoIWludGVyYWN0YWJsZSkgeyByZXR1cm4gZmFsc2UgfVxuXG4gICAgY29uc3QgdGhpc0F4aXMgPSBpbnRlcmFjdGFibGUub3B0aW9ucy5kcmFnLnN0YXJ0QXhpc1xuXG4gICAgcmV0dXJuIChzdGFydEF4aXMgPT09ICd4eScgfHwgdGhpc0F4aXMgPT09ICd4eScgfHwgdGhpc0F4aXMgPT09IHN0YXJ0QXhpcylcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7IGluc3RhbGwgfVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ0F4aXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkcmFnQXhpcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDMUMsT0FBTyxTQUFTLE1BQU0sUUFBUSxDQUFBO0FBSTlCLFNBQVMsT0FBTyxDQUFFLEtBQVk7SUFDNUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRyxDQUFDLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUNuRixJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUFFLE9BQU07U0FBRTtRQUVwRCx5Q0FBeUM7UUFDekMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3pCLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQTtRQUNyRCxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFBO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRWxFLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxRQUFRLEtBQUssT0FBTztZQUM1RCxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBZSxDQUFDLHVEQUF1RDtZQUN0RixDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQTtRQUUxQiw2REFBNkQ7UUFDN0QsSUFBSSxXQUFXLEtBQUssSUFBSSxJQUFJLFNBQVMsS0FBSyxJQUFJLElBQUksU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUMzRSw2QkFBNkI7WUFDN0IsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1lBRWhDLGtEQUFrRDtZQUNsRCxJQUFJLE9BQU8sR0FBRyxXQUFXLENBQUE7WUFFekIsTUFBTSxZQUFZLEdBQUcsVUFBVSxZQUFZO2dCQUN6QyxJQUFJLFlBQVksS0FBSyxXQUFXLENBQUMsTUFBTSxFQUFFO29CQUFFLE9BQU07aUJBQUU7Z0JBRW5ELE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQTtnQkFFL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXO29CQUNwQixZQUFZLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLEVBQUU7b0JBQy9ELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQ25DLFdBQVcsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUE7b0JBRXZFLElBQUksTUFBTTt3QkFDTixNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU07d0JBQ3RCLGNBQWMsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDO3dCQUN6QyxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRTt3QkFDL0UsT0FBTyxZQUFZLENBQUE7cUJBQ3BCO2lCQUNGO1lBQ0gsQ0FBQyxDQUFBO1lBRUQsMEJBQTBCO1lBQzFCLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDMUIsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFBO2dCQUU1RSxJQUFJLFlBQVksRUFBRTtvQkFDaEIsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQTtvQkFDM0MsV0FBVyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUE7b0JBQ2pDLFdBQVcsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO29CQUM3QixNQUFLO2lCQUNOO2dCQUVELE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7YUFDOUI7U0FDRjtJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUYsU0FBUyxjQUFjLENBQUUsU0FBUyxFQUFFLFlBQVk7UUFDOUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUFFLE9BQU8sS0FBSyxDQUFBO1NBQUU7UUFFbkMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFBO1FBRXBELE9BQU8sQ0FBQyxTQUFTLEtBQUssSUFBSSxJQUFJLFFBQVEsS0FBSyxJQUFJLElBQUksUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFBO0lBQzVFLENBQUM7QUFDSCxDQUFDO0FBRUQsZUFBZSxFQUFFLE9BQU8sRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uTmFtZSB9IGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvc2NvcGUnXG5pbXBvcnQgeyBwYXJlbnROb2RlIH0gZnJvbSAnQGludGVyYWN0anMvdXRpbHMvZG9tVXRpbHMnXG5pbXBvcnQgKiBhcyBpcyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9pcydcbmltcG9ydCBhdXRvU3RhcnQgZnJvbSAnLi9iYXNlJ1xuXG50eXBlIFNjb3BlID0gaW1wb3J0ICgnQGludGVyYWN0anMvY29yZS9zY29wZScpLlNjb3BlXG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlOiBTY29wZSkge1xuICBzY29wZS5hdXRvU3RhcnQuc2lnbmFscy5vbignYmVmb3JlLXN0YXJ0JywgICh7IGludGVyYWN0aW9uLCBldmVudFRhcmdldCwgZHgsIGR5IH0pID0+IHtcbiAgICBpZiAoaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSAhPT0gJ2RyYWcnKSB7IHJldHVybiB9XG5cbiAgICAvLyBjaGVjayBpZiBhIGRyYWcgaXMgaW4gdGhlIGNvcnJlY3QgYXhpc1xuICAgIGNvbnN0IGFic1ggPSBNYXRoLmFicyhkeClcbiAgICBjb25zdCBhYnNZID0gTWF0aC5hYnMoZHkpXG4gICAgY29uc3QgdGFyZ2V0T3B0aW9ucyA9IGludGVyYWN0aW9uLnRhcmdldC5vcHRpb25zLmRyYWdcbiAgICBjb25zdCBzdGFydEF4aXMgPSB0YXJnZXRPcHRpb25zLnN0YXJ0QXhpc1xuICAgIGNvbnN0IGN1cnJlbnRBeGlzID0gKGFic1ggPiBhYnNZID8gJ3gnIDogYWJzWCA8IGFic1kgPyAneScgOiAneHknKVxuXG4gICAgaW50ZXJhY3Rpb24ucHJlcGFyZWQuYXhpcyA9IHRhcmdldE9wdGlvbnMubG9ja0F4aXMgPT09ICdzdGFydCdcbiAgICAgID8gY3VycmVudEF4aXNbMF0gIGFzICd4JyB8ICd5JyAvLyBhbHdheXMgbG9jayB0byBvbmUgYXhpcyBldmVuIGlmIGN1cnJlbnRBeGlzID09PSAneHknXG4gICAgICA6IHRhcmdldE9wdGlvbnMubG9ja0F4aXNcblxuICAgIC8vIGlmIHRoZSBtb3ZlbWVudCBpc24ndCBpbiB0aGUgc3RhcnRBeGlzIG9mIHRoZSBpbnRlcmFjdGFibGVcbiAgICBpZiAoY3VycmVudEF4aXMgIT09ICd4eScgJiYgc3RhcnRBeGlzICE9PSAneHknICYmIHN0YXJ0QXhpcyAhPT0gY3VycmVudEF4aXMpIHtcbiAgICAgIC8vIGNhbmNlbCB0aGUgcHJlcGFyZWQgYWN0aW9uXG4gICAgICBpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lID0gbnVsbFxuXG4gICAgICAvLyB0aGVuIHRyeSB0byBnZXQgYSBkcmFnIGZyb20gYW5vdGhlciBpbmVyYWN0YWJsZVxuICAgICAgbGV0IGVsZW1lbnQgPSBldmVudFRhcmdldFxuXG4gICAgICBjb25zdCBnZXREcmFnZ2FibGUgPSBmdW5jdGlvbiAoaW50ZXJhY3RhYmxlKSB7XG4gICAgICAgIGlmIChpbnRlcmFjdGFibGUgPT09IGludGVyYWN0aW9uLnRhcmdldCkgeyByZXR1cm4gfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBpbnRlcmFjdGlvbi50YXJnZXQub3B0aW9ucy5kcmFnXG5cbiAgICAgICAgaWYgKCFvcHRpb25zLm1hbnVhbFN0YXJ0ICYmXG4gICAgICAgICAgICBpbnRlcmFjdGFibGUudGVzdElnbm9yZUFsbG93KG9wdGlvbnMsIGVsZW1lbnQsIGV2ZW50VGFyZ2V0KSkge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IGludGVyYWN0YWJsZS5nZXRBY3Rpb24oXG4gICAgICAgICAgICBpbnRlcmFjdGlvbi5kb3duUG9pbnRlciwgaW50ZXJhY3Rpb24uZG93bkV2ZW50LCBpbnRlcmFjdGlvbiwgZWxlbWVudClcblxuICAgICAgICAgIGlmIChhY3Rpb24gJiZcbiAgICAgICAgICAgICAgYWN0aW9uLm5hbWUgPT09ICdkcmFnJyAmJlxuICAgICAgICAgICAgICBjaGVja1N0YXJ0QXhpcyhjdXJyZW50QXhpcywgaW50ZXJhY3RhYmxlKSAmJlxuICAgICAgICAgICAgICBhdXRvU3RhcnQudmFsaWRhdGVBY3Rpb24oYWN0aW9uLCBpbnRlcmFjdGFibGUsIGVsZW1lbnQsIGV2ZW50VGFyZ2V0LCBzY29wZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcmFjdGFibGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gY2hlY2sgYWxsIGludGVyYWN0YWJsZXNcbiAgICAgIHdoaWxlIChpcy5lbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGludGVyYWN0YWJsZSA9IHNjb3BlLmludGVyYWN0YWJsZXMuZm9yRWFjaE1hdGNoKGVsZW1lbnQsIGdldERyYWdnYWJsZSlcblxuICAgICAgICBpZiAoaW50ZXJhY3RhYmxlKSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSA9IEFjdGlvbk5hbWUuRHJhZ1xuICAgICAgICAgIGludGVyYWN0aW9uLnRhcmdldCA9IGludGVyYWN0YWJsZVxuICAgICAgICAgIGludGVyYWN0aW9uLmVsZW1lbnQgPSBlbGVtZW50XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnQgPSBwYXJlbnROb2RlKGVsZW1lbnQpXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIGZ1bmN0aW9uIGNoZWNrU3RhcnRBeGlzIChzdGFydEF4aXMsIGludGVyYWN0YWJsZSkge1xuICAgIGlmICghaW50ZXJhY3RhYmxlKSB7IHJldHVybiBmYWxzZSB9XG5cbiAgICBjb25zdCB0aGlzQXhpcyA9IGludGVyYWN0YWJsZS5vcHRpb25zLmRyYWcuc3RhcnRBeGlzXG5cbiAgICByZXR1cm4gKHN0YXJ0QXhpcyA9PT0gJ3h5JyB8fCB0aGlzQXhpcyA9PT0gJ3h5JyB8fCB0aGlzQXhpcyA9PT0gc3RhcnRBeGlzKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHsgaW5zdGFsbCB9XG4iXX0= \ No newline at end of file diff --git a/packages/auto-start/package.json b/packages/auto-start/package.json index 6ec52bcd4..b24d70400 100644 --- a/packages/auto-start/package.json +++ b/packages/auto-start/package.json @@ -1,14 +1,14 @@ { "name": "@interactjs/auto-start", - "version": "1.4.0-alpha.27+sha.12b8f8f", + "version": "1.4.0-alpha.28+sha.e624c4d", "peerDependencies": { - "@interactjs/core": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/utils": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/core": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/utils": "1.4.0-alpha.28+sha.e624c4d" }, "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/core": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/utils": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/_dev": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/core": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/utils": "1.4.0-alpha.28+sha.e624c4d" }, "publishConfig": { "access": "public" diff --git a/packages/auto-start/tests/hold.d.ts b/packages/auto-start/tests/hold.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/auto-start/tests/hold.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/auto-start/tests/hold.js b/packages/auto-start/tests/hold.js new file mode 100644 index 000000000..208e5e8f7 --- /dev/null +++ b/packages/auto-start/tests/hold.js @@ -0,0 +1,33 @@ +import test from '@interactjs/_dev/test/test'; +import * as helpers from '@interactjs/core/tests/helpers'; +import Signals from '@interactjs/utils/Signals'; +import hold from '../hold'; +import { autoStart } from '../index'; +test('autoStart/hold', (t) => { + const scope = helpers.mockScope({ + autoStart: { + defaults: { + perAction: {}, + }, + signals: new Signals(), + }, + }); + const autoStartHold = hold; + autoStart.install(scope); + autoStartHold.install(scope); + t.equal(scope.defaults.perAction.hold, 0, 'sets scope.defaults.perAction.hold'); + t.equal(scope.defaults.perAction.delay, 0, 'backwards compatible "delay" alias.'); + const holdDuration = 1000; + const actionName = 'TEST_ACTION'; + const interaction = { + target: { options: { [actionName]: { hold: holdDuration } } }, + prepared: { name: actionName }, + }; + t.equal(autoStartHold.getHoldDuration(interaction), holdDuration, 'gets holdDuration'); + const delayDuration = 500; + interaction.target.options[actionName].delay = delayDuration; + delete interaction.target.options[actionName].hold; + t.equal(autoStartHold.getHoldDuration(interaction), delayDuration, 'gets holdDuration from "delay" value'); + t.end(); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9sZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhvbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sNEJBQTRCLENBQUE7QUFDN0MsT0FBTyxLQUFLLE9BQU8sTUFBTSxnQ0FBZ0MsQ0FBQTtBQUN6RCxPQUFPLE9BQU8sTUFBTSwyQkFBMkIsQ0FBQTtBQUMvQyxPQUFPLElBQUksTUFBTSxTQUFTLENBQUE7QUFDMUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUVwQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtJQUMzQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQzlCLFNBQVMsRUFBRTtZQUNULFFBQVEsRUFBRTtnQkFDUixTQUFTLEVBQUUsRUFBRTthQUNkO1lBQ0QsT0FBTyxFQUFFLElBQUksT0FBTyxFQUFFO1NBQ3ZCO0tBQ0YsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFBO0lBQzFCLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDeEIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUU1QixDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsb0NBQW9DLENBQUMsQ0FBQTtJQUMvRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUscUNBQXFDLENBQUMsQ0FBQTtJQUVqRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUE7SUFDekIsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFBO0lBQ2hDLE1BQU0sV0FBVyxHQUFRO1FBQ3ZCLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRTtRQUM3RCxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0tBQy9CLENBQUE7SUFFRCxDQUFDLENBQUMsS0FBSyxDQUNMLGFBQWEsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLEVBQzFDLFlBQVksRUFDWixtQkFBbUIsQ0FBQyxDQUFBO0lBRXRCLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQTtJQUV6QixXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFBO0lBQzVELE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFBO0lBRWxELENBQUMsQ0FBQyxLQUFLLENBQ0wsYUFBYSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsRUFDMUMsYUFBYSxFQUNiLHNDQUFzQyxDQUFDLENBQUE7SUFFekMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdGVzdCBmcm9tICdAaW50ZXJhY3Rqcy9fZGV2L3Rlc3QvdGVzdCdcbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnQGludGVyYWN0anMvY29yZS90ZXN0cy9oZWxwZXJzJ1xuaW1wb3J0IFNpZ25hbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvU2lnbmFscydcbmltcG9ydCBob2xkIGZyb20gJy4uL2hvbGQnXG5pbXBvcnQgeyBhdXRvU3RhcnQgfSBmcm9tICcuLi9pbmRleCdcblxudGVzdCgnYXV0b1N0YXJ0L2hvbGQnLCAodCkgPT4ge1xuICBjb25zdCBzY29wZSA9IGhlbHBlcnMubW9ja1Njb3BlKHtcbiAgICBhdXRvU3RhcnQ6IHtcbiAgICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIHBlckFjdGlvbjoge30sXG4gICAgICB9LFxuICAgICAgc2lnbmFsczogbmV3IFNpZ25hbHMoKSxcbiAgICB9LFxuICB9KVxuICBjb25zdCBhdXRvU3RhcnRIb2xkID0gaG9sZFxuICBhdXRvU3RhcnQuaW5zdGFsbChzY29wZSlcbiAgYXV0b1N0YXJ0SG9sZC5pbnN0YWxsKHNjb3BlKVxuXG4gIHQuZXF1YWwoc2NvcGUuZGVmYXVsdHMucGVyQWN0aW9uLmhvbGQsIDAsICdzZXRzIHNjb3BlLmRlZmF1bHRzLnBlckFjdGlvbi5ob2xkJylcbiAgdC5lcXVhbChzY29wZS5kZWZhdWx0cy5wZXJBY3Rpb24uZGVsYXksIDAsICdiYWNrd2FyZHMgY29tcGF0aWJsZSBcImRlbGF5XCIgYWxpYXMuJylcblxuICBjb25zdCBob2xkRHVyYXRpb24gPSAxMDAwXG4gIGNvbnN0IGFjdGlvbk5hbWUgPSAnVEVTVF9BQ1RJT04nXG4gIGNvbnN0IGludGVyYWN0aW9uOiBhbnkgPSB7XG4gICAgdGFyZ2V0OiB7IG9wdGlvbnM6IHsgW2FjdGlvbk5hbWVdOiB7IGhvbGQ6IGhvbGREdXJhdGlvbiB9IH0gfSxcbiAgICBwcmVwYXJlZDogeyBuYW1lOiBhY3Rpb25OYW1lIH0sXG4gIH1cblxuICB0LmVxdWFsKFxuICAgIGF1dG9TdGFydEhvbGQuZ2V0SG9sZER1cmF0aW9uKGludGVyYWN0aW9uKSxcbiAgICBob2xkRHVyYXRpb24sXG4gICAgJ2dldHMgaG9sZER1cmF0aW9uJylcblxuICBjb25zdCBkZWxheUR1cmF0aW9uID0gNTAwXG5cbiAgaW50ZXJhY3Rpb24udGFyZ2V0Lm9wdGlvbnNbYWN0aW9uTmFtZV0uZGVsYXkgPSBkZWxheUR1cmF0aW9uXG4gIGRlbGV0ZSBpbnRlcmFjdGlvbi50YXJnZXQub3B0aW9uc1thY3Rpb25OYW1lXS5ob2xkXG5cbiAgdC5lcXVhbChcbiAgICBhdXRvU3RhcnRIb2xkLmdldEhvbGREdXJhdGlvbihpbnRlcmFjdGlvbiksXG4gICAgZGVsYXlEdXJhdGlvbixcbiAgICAnZ2V0cyBob2xkRHVyYXRpb24gZnJvbSBcImRlbGF5XCIgdmFsdWUnKVxuXG4gIHQuZW5kKClcbn0pXG4iXX0= \ No newline at end of file diff --git a/packages/core/InteractEvent.d.ts b/packages/core/InteractEvent.d.ts index a17bdef4d..a8b881e9d 100644 --- a/packages/core/InteractEvent.d.ts +++ b/packages/core/InteractEvent.d.ts @@ -1,12 +1,13 @@ import Interactable from './Interactable'; import Interaction from './Interaction'; +import { ActionName } from './scope'; export declare enum EventPhase { Start = "start", Move = "move", End = "end", _NONE = "" } -export declare class InteractEvent { +export declare class InteractEvent { type: string; target: Element; relatedTarget: Element | null; @@ -20,7 +21,7 @@ export declare class InteractEvent; page: Interact.Point; client: Interact.Point; delta: Interact.Point; @@ -38,12 +39,6 @@ export declare class InteractEvent { protected readonly _defaults: Defaults; - options: Required; + readonly options: Required; readonly _actions: Actions; readonly target: Interact.Target; readonly events: Eventable; - readonly _context: Element; + readonly _context: Document | Element; readonly _win: Window; readonly _doc: Document; /** */ - constructor(target: Interact.Target, options: any, defaultContext: Element | Node); - setOnEvents(actionName: string, phases: { - [phase: string]: Interact.ListenersArg; - }): this; + constructor(target: Interact.Target, options: any, defaultContext: Document | Element); + setOnEvents(actionName: string, phases: NonNullable): this; updatePerActionListeners(actionName: any, prev: any, cur: any): void; setPerAction(actionName: any, options: Interact.OrBoolean): void; /** @@ -76,7 +74,7 @@ export declare class Interactable implements Partial { * * @return {Node} The context Node of this Interactable */ - context(): Element; + context(): Element | Document; inContext(element: any): boolean; /** * Calls listeners for the given InteractEvent type bound globally diff --git a/packages/core/Interactable.js b/packages/core/Interactable.js index 1f7114d9b..7721c4237 100644 --- a/packages/core/Interactable.js +++ b/packages/core/Interactable.js @@ -114,7 +114,7 @@ export class Interactable { return this; } if (checker === null) { - delete this.options.getRect; + delete this.getRect; return this; } return this.getRect; @@ -293,4 +293,4 @@ export class Interactable { } } export default Interactable; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJhY3RhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiSW50ZXJhY3RhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxHQUFHLE1BQU0sdUJBQXVCLENBQUE7QUFDNUMsT0FBTyxPQUFPLE1BQU0sMkJBQTJCLENBQUE7QUFDL0MsT0FBTyxLQUFLLE1BQU0seUJBQXlCLENBQUE7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFDdEYsT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUE7QUFDN0MsT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUE7QUFDN0MsT0FBTyxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUMxQyxPQUFPLGtCQUFrQixNQUFNLHNDQUFzQyxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUVwRCxPQUFPLFNBQVMsTUFBTSxhQUFhLENBQUE7QUFHbkMsTUFBTTtBQUNOLE1BQU0sT0FBTyxZQUFZO0lBaUJ2QixNQUFNO0lBQ04sWUFBYSxNQUF1QixFQUFFLE9BQVksRUFBRSxjQUE4QjtRQU56RSxXQUFNLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQTtRQU8vQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUE7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBSyxNQUFNLENBQUE7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLGNBQWMsQ0FBQTtRQUNqRCxJQUFJLENBQUMsSUFBSSxHQUFPLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3ZFLElBQUksQ0FBQyxJQUFJLEdBQU8sSUFBSSxDQUFDLElBQUksQ0FB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QUFRLEVBQUU7b0JBQzNDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtvQkFDaEMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO29CQUMvQixTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7b0JBRWhDLHNDQUFzQztvQkFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO3dCQUMvQixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFBO3FCQUN2QjtpQkFDRjtnQkFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO2dCQUMzRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQTthQUNwRTtTQUNGO2FBQ0k7WUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFjLEVBQUUsS0FBSyxDQUFDLENBQUE7U0FDMUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxlQUFlLFlBQVksQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFyciBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9hcnInXG5pbXBvcnQgYnJvd3NlciBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9icm93c2VyJ1xuaW1wb3J0IGNsb25lIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2Nsb25lJ1xuaW1wb3J0IHsgZ2V0RWxlbWVudFJlY3QsIG5vZGVDb250YWlucywgdHJ5U2VsZWN0b3IgfSBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9kb21VdGlscydcbmltcG9ydCBldmVudHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvZXZlbnRzJ1xuaW1wb3J0IGV4dGVuZCBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9leHRlbmQnXG5pbXBvcnQgKiBhcyBpcyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9pcydcbmltcG9ydCBub3JtYWxpemVMaXN0ZW5lcnMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvbm9ybWFsaXplTGlzdGVuZXJzJ1xuaW1wb3J0IHsgZ2V0V2luZG93IH0gZnJvbSAnQGludGVyYWN0anMvdXRpbHMvd2luZG93J1xuaW1wb3J0IHsgQWN0aW9uRGVmYXVsdHMsIERlZmF1bHRzLCBPcHRpb25zIH0gZnJvbSAnLi9kZWZhdWx0T3B0aW9ucydcbmltcG9ydCBFdmVudGFibGUgZnJvbSAnLi9FdmVudGFibGUnXG5pbXBvcnQgeyBBY3Rpb25zIH0gZnJvbSAnLi9zY29wZSdcblxuLyoqICovXG5leHBvcnQgY2xhc3MgSW50ZXJhY3RhYmxlIGltcGxlbWVudHMgUGFydGlhbDxFdmVudGFibGU+IHtcbiAgcHJvdGVjdGVkIGdldCBfZGVmYXVsdHMgKCk6IERlZmF1bHRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgYmFzZToge30sXG4gICAgICBwZXJBY3Rpb246IHt9LFxuICAgICAgYWN0aW9uczoge30gYXMgQWN0aW9uRGVmYXVsdHMsXG4gICAgfVxuICB9XG5cbiAgb3B0aW9ucyE6IFJlcXVpcmVkPE9wdGlvbnM+XG4gIHJlYWRvbmx5IF9hY3Rpb25zOiBBY3Rpb25zXG4gIHJlYWRvbmx5IHRhcmdldDogSW50ZXJhY3QuVGFyZ2V0XG4gIHJlYWRvbmx5IGV2ZW50cyA9IG5ldyBFdmVudGFibGUoKVxuICByZWFkb25seSBfY29udGV4dDogRWxlbWVudFxuICByZWFkb25seSBfd2luOiBXaW5kb3dcbiAgcmVhZG9ubHkgX2RvYzogRG9jdW1lbnRcblxuICAvKiogKi9cbiAgY29uc3RydWN0b3IgKHRhcmdldDogSW50ZXJhY3QuVGFyZ2V0LCBvcHRpb25zOiBhbnksIGRlZmF1bHRDb250ZXh0OiBFbGVtZW50IHwgTm9kZSkge1xuICAgIHRoaXMuX2FjdGlvbnMgPSBvcHRpb25zLmFjdGlvbnNcbiAgICB0aGlzLnRhcmdldCAgID0gdGFyZ2V0XG4gICAgdGhpcy5fY29udGV4dCA9IG9wdGlvbnMuY29udGV4dCB8fCBkZWZhdWx0Q29udGV4dFxuICAgIHRoaXMuX3dpbiAgICAgPSBnZXRXaW5kb3codHJ5U2VsZWN0b3IodGFyZ2V0KSA/IHRoaXMuX2NvbnRleHQgOiB0YXJnZXQpXG4gICAgdGhpcy5fZG9jICAgICA9IHRoaXMuX3dpbi5kb2N1bWVudFxuXG4gICAgdGhpcy5zZXQob3B0aW9ucylcbiAgfVxuXG4gIHNldE9uRXZlbnRzIChhY3Rpb25OYW1lOiBzdHJpbmcsIHBoYXNlczogeyBbcGhhc2U6IHN0cmluZ106IEludGVyYWN0Lkxpc3RlbmVyc0FyZyB9KSB7XG4gICAgaWYgKGlzLmZ1bmMocGhhc2VzLm9uc3RhcnQpKSB7IHRoaXMub24oYCR7YWN0aW9uTmFtZX1zdGFydGAsIHBoYXNlcy5vbnN0YXJ0KSB9XG4gICAgaWYgKGlzLmZ1bmMocGhhc2VzLm9ubW92ZSkpIHsgdGhpcy5vbihgJHthY3Rpb25OYW1lfW1vdmVgLCBwaGFzZXMub25tb3ZlKSB9XG4gICAgaWYgKGlzLmZ1bmMocGhhc2VzLm9uZW5kKSkgeyB0aGlzLm9uKGAke2FjdGlvbk5hbWV9ZW5kYCwgcGhhc2VzLm9uZW5kKSB9XG4gICAgaWYgKGlzLmZ1bmMocGhhc2VzLm9uaW5lcnRpYXN0YXJ0KSkgeyB0aGlzLm9uKGAke2FjdGlvbk5hbWV9aW5lcnRpYXN0YXJ0YCwgcGhhc2VzLm9uaW5lcnRpYXN0YXJ0KSB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgdXBkYXRlUGVyQWN0aW9uTGlzdGVuZXJzIChhY3Rpb25OYW1lLCBwcmV2LCBjdXIpIHtcbiAgICBpZiAoaXMuYXJyYXkocHJldikpIHtcbiAgICAgIHRoaXMub2ZmKGFjdGlvbk5hbWUsIHByZXYpXG4gICAgfVxuXG4gICAgaWYgKGlzLmFycmF5KGN1cikpIHtcbiAgICAgIHRoaXMub24oYWN0aW9uTmFtZSwgY3VyKVxuICAgIH1cbiAgfVxuXG4gIHNldFBlckFjdGlvbiAoYWN0aW9uTmFtZSwgb3B0aW9uczogSW50ZXJhY3QuT3JCb29sZWFuPE9wdGlvbnM+KSB7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB0aGlzLl9kZWZhdWx0c1xuXG4gICAgLy8gZm9yIGFsbCB0aGUgZGVmYXVsdCBwZXItYWN0aW9uIG9wdGlvbnNcbiAgICBmb3IgKGNvbnN0IG9wdGlvbk5hbWUgaW4gb3B0aW9ucykge1xuICAgICAgY29uc3QgYWN0aW9uT3B0aW9ucyA9IHRoaXMub3B0aW9uc1thY3Rpb25OYW1lXVxuICAgICAgY29uc3Qgb3B0aW9uVmFsdWUgPSBvcHRpb25zW29wdGlvbk5hbWVdXG4gICAgICBjb25zdCBpc0FycmF5ID0gaXMuYXJyYXkob3B0aW9uVmFsdWUpXG5cbiAgICAgIC8vIHJlbW92ZSBvbGQgZXZlbnQgbGlzdGVuZXJzIGFuZCBhZGQgbmV3IG9uZXNcbiAgICAgIGlmIChvcHRpb25OYW1lID09PSAnbGlzdGVuZXJzJykge1xuICAgICAgICB0aGlzLnVwZGF0ZVBlckFjdGlvbkxpc3RlbmVycyhhY3Rpb25OYW1lLCBhY3Rpb25PcHRpb25zLmxpc3RlbmVycywgb3B0aW9uVmFsdWUpXG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHRoZSBvcHRpb24gdmFsdWUgaXMgYW4gYXJyYXlcbiAgICAgIGlmIChpc0FycmF5KSB7XG4gICAgICAgIGFjdGlvbk9wdGlvbnNbb3B0aW9uTmFtZV0gPSBhcnIuZnJvbShvcHRpb25WYWx1ZSlcbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSBvcHRpb24gdmFsdWUgaXMgYW4gb2JqZWN0XG4gICAgICBlbHNlIGlmICghaXNBcnJheSAmJiBpcy5wbGFpbk9iamVjdChvcHRpb25WYWx1ZSkpIHtcbiAgICAgICAgLy8gY29weSB0aGUgb2JqZWN0XG4gICAgICAgIGFjdGlvbk9wdGlvbnNbb3B0aW9uTmFtZV0gPSBleHRlbmQoXG4gICAgICAgICAgYWN0aW9uT3B0aW9uc1tvcHRpb25OYW1lXSB8fCB7fSxcbiAgICAgICAgICBjbG9uZShvcHRpb25WYWx1ZSkpXG5cbiAgICAgICAgLy8gc2V0IGFuYWJsZWQgZmllbGQgdG8gdHJ1ZSBpZiBpdCBleGlzdHMgaW4gdGhlIGRlZmF1bHRzXG4gICAgICAgIGlmIChpcy5vYmplY3QoZGVmYXVsdHMucGVyQWN0aW9uW29wdGlvbk5hbWVdKSAmJiAnZW5hYmxlZCcgaW4gZGVmYXVsdHMucGVyQWN0aW9uW29wdGlvbk5hbWVdKSB7XG4gICAgICAgICAgYWN0aW9uT3B0aW9uc1tvcHRpb25OYW1lXS5lbmFibGVkID0gb3B0aW9uVmFsdWUuZW5hYmxlZCAhPT0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIG9wdGlvbiB2YWx1ZSBpcyBhIGJvb2xlYW4gYW5kIHRoZSBkZWZhdWx0IGlzIGFuIG9iamVjdFxuICAgICAgZWxzZSBpZiAoaXMuYm9vbChvcHRpb25WYWx1ZSkgJiYgaXMub2JqZWN0KGRlZmF1bHRzLnBlckFjdGlvbltvcHRpb25OYW1lXSkpIHtcbiAgICAgICAgYWN0aW9uT3B0aW9uc1tvcHRpb25OYW1lXS5lbmFibGVkID0gb3B0aW9uVmFsdWVcbiAgICAgIH1cbiAgICAgIC8vIGlmIGl0J3MgYW55dGhpbmcgZWxzZSwgZG8gYSBwbGFpbiBhc3NpZ25tZW50XG4gICAgICBlbHNlIHtcbiAgICAgICAgYWN0aW9uT3B0aW9uc1tvcHRpb25OYW1lXSA9IG9wdGlvblZhbHVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIGdldCBhbiBJbnRlcmFjdGFibGVzIGJvdW5kaW5nIHJlY3QuIENhbiBiZVxuICAgKiBvdmVycmlkZGVuIHVzaW5nIHtAbGluayBJbnRlcmFjdGFibGUucmVjdENoZWNrZXJ9LlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IFtlbGVtZW50XSBUaGUgZWxlbWVudCB0byBtZWFzdXJlLlxuICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSBvYmplY3QncyBib3VuZGluZyByZWN0YW5nbGUuXG4gICAqL1xuICBnZXRSZWN0IChlbGVtZW50OiBFbGVtZW50KSB7XG4gICAgZWxlbWVudCA9IGVsZW1lbnQgfHwgKGlzLmVsZW1lbnQodGhpcy50YXJnZXQpXG4gICAgICA/IHRoaXMudGFyZ2V0XG4gICAgICA6IG51bGwpXG5cbiAgICBpZiAoaXMuc3RyaW5nKHRoaXMudGFyZ2V0KSkge1xuICAgICAgZWxlbWVudCA9IGVsZW1lbnQgfHwgdGhpcy5fY29udGV4dC5xdWVyeVNlbGVjdG9yKHRoaXMudGFyZ2V0KVxuICAgIH1cblxuICAgIHJldHVybiBnZXRFbGVtZW50UmVjdChlbGVtZW50KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgb3Igc2V0cyB0aGUgZnVuY3Rpb24gdXNlZCB0byBjYWxjdWxhdGUgdGhlIGludGVyYWN0YWJsZSdzXG4gICAqIGVsZW1lbnQncyByZWN0YW5nbGVcbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2NoZWNrZXJdIEEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyB0aGlzIEludGVyYWN0YWJsZSdzXG4gICAqIGJvdW5kaW5nIHJlY3RhbmdsZS4gU2VlIHtAbGluayBJbnRlcmFjdGFibGUuZ2V0UmVjdH1cbiAgICogQHJldHVybiB7ZnVuY3Rpb24gfCBvYmplY3R9IFRoZSBjaGVja2VyIGZ1bmN0aW9uIG9yIHRoaXMgSW50ZXJhY3RhYmxlXG4gICAqL1xuICByZWN0Q2hlY2tlciAoY2hlY2tlcjogKGVsZW1lbnQ6IEVsZW1lbnQpID0+IGFueSkge1xuICAgIGlmIChpcy5mdW5jKGNoZWNrZXIpKSB7XG4gICAgICB0aGlzLmdldFJlY3QgPSBjaGVja2VyXG5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgaWYgKGNoZWNrZXIgPT09IG51bGwpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnMuZ2V0UmVjdFxuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFJlY3RcbiAgfVxuXG4gIF9iYWNrQ29tcGF0T3B0aW9uIChvcHRpb25OYW1lLCBuZXdWYWx1ZSkge1xuICAgIGlmICh0cnlTZWxlY3RvcihuZXdWYWx1ZSkgfHwgaXMub2JqZWN0KG5ld1ZhbHVlKSkge1xuICAgICAgdGhpcy5vcHRpb25zW29wdGlvbk5hbWVdID0gbmV3VmFsdWVcblxuICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5fYWN0aW9ucy5uYW1lcykge1xuICAgICAgICB0aGlzLm9wdGlvbnNbYWN0aW9uXVtvcHRpb25OYW1lXSA9IG5ld1ZhbHVlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMub3B0aW9uc1tvcHRpb25OYW1lXVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgb3JpZ2luIG9mIHRoZSBJbnRlcmFjdGFibGUncyBlbGVtZW50LiAgVGhlIHggYW5kIHlcbiAgICogb2YgdGhlIG9yaWdpbiB3aWxsIGJlIHN1YnRyYWN0ZWQgZnJvbSBhY3Rpb24gZXZlbnQgY29vcmRpbmF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudCB8IG9iamVjdCB8IHN0cmluZ30gW29yaWdpbl0gQW4gSFRNTCBvciBTVkcgRWxlbWVudCB3aG9zZVxuICAgKiByZWN0IHdpbGwgYmUgdXNlZCwgYW4gb2JqZWN0IGVnLiB7IHg6IDAsIHk6IDAgfSBvciBzdHJpbmcgJ3BhcmVudCcsICdzZWxmJ1xuICAgKiBvciBhbnkgQ1NTIHNlbGVjdG9yXG4gICAqXG4gICAqIEByZXR1cm4ge29iamVjdH0gVGhlIGN1cnJlbnQgb3JpZ2luIG9yIHRoaXMgSW50ZXJhY3RhYmxlXG4gICAqL1xuICBvcmlnaW4gKG5ld1ZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JhY2tDb21wYXRPcHRpb24oJ29yaWdpbicsIG5ld1ZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgb3Igc2V0cyB0aGUgbW91c2UgY29vcmRpbmF0ZSB0eXBlcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGVcbiAgICogbW92ZW1lbnQgb2YgdGhlIHBvaW50ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmV3VmFsdWVdIFVzZSAnY2xpZW50JyBpZiB5b3Ugd2lsbCBiZSBzY3JvbGxpbmcgd2hpbGVcbiAgICogaW50ZXJhY3Rpbmc7IFVzZSAncGFnZScgaWYgeW91IHdhbnQgYXV0b1Njcm9sbCB0byB3b3JrXG4gICAqIEByZXR1cm4ge3N0cmluZyB8IG9iamVjdH0gVGhlIGN1cnJlbnQgZGVsdGFTb3VyY2Ugb3IgdGhpcyBJbnRlcmFjdGFibGVcbiAgICovXG4gIGRlbHRhU291cmNlIChuZXdWYWx1ZSkge1xuICAgIGlmIChuZXdWYWx1ZSA9PT0gJ3BhZ2UnIHx8IG5ld1ZhbHVlID09PSAnY2xpZW50Jykge1xuICAgICAgdGhpcy5vcHRpb25zLmRlbHRhU291cmNlID0gbmV3VmFsdWVcblxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmRlbHRhU291cmNlXG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2VsZWN0b3IgY29udGV4dCBOb2RlIG9mIHRoZSBJbnRlcmFjdGFibGUuIFRoZSBkZWZhdWx0IGlzXG4gICAqIGB3aW5kb3cuZG9jdW1lbnRgLlxuICAgKlxuICAgKiBAcmV0dXJuIHtOb2RlfSBUaGUgY29udGV4dCBOb2RlIG9mIHRoaXMgSW50ZXJhY3RhYmxlXG4gICAqL1xuICBjb250ZXh0ICgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dFxuICB9XG5cbiAgaW5Db250ZXh0IChlbGVtZW50KSB7XG4gICAgcmV0dXJuICh0aGlzLl9jb250ZXh0ID09PSBlbGVtZW50Lm93bmVyRG9jdW1lbnQgfHxcbiAgICAgICAgICAgIG5vZGVDb250YWlucyh0aGlzLl9jb250ZXh0LCBlbGVtZW50KSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyBsaXN0ZW5lcnMgZm9yIHRoZSBnaXZlbiBJbnRlcmFjdEV2ZW50IHR5cGUgYm91bmQgZ2xvYmFsbHlcbiAgICogYW5kIGRpcmVjdGx5IHRvIHRoaXMgSW50ZXJhY3RhYmxlXG4gICAqXG4gICAqIEBwYXJhbSB7SW50ZXJhY3RFdmVudH0gaUV2ZW50IFRoZSBJbnRlcmFjdEV2ZW50IG9iamVjdCB0byBiZSBmaXJlZCBvbiB0aGlzXG4gICAqIEludGVyYWN0YWJsZVxuICAgKiBAcmV0dXJuIHtJbnRlcmFjdGFibGV9IHRoaXMgSW50ZXJhY3RhYmxlXG4gICAqL1xuICBmaXJlIChpRXZlbnQpIHtcbiAgICB0aGlzLmV2ZW50cy5maXJlKGlFdmVudClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBfb25PZmYgKG1ldGhvZDogJ29uJyB8ICdvZmYnLCB0eXBlQXJnOiBJbnRlcmFjdC5FdmVudFR5cGVzLCBsaXN0ZW5lckFyZz86IEludGVyYWN0Lkxpc3RlbmVyc0FyZyB8IG51bGwsIG9wdGlvbnM/OiBhbnkpIHtcbiAgICBpZiAoaXMub2JqZWN0KHR5cGVBcmcpICYmICFpcy5hcnJheSh0eXBlQXJnKSkge1xuICAgICAgb3B0aW9ucyA9IGxpc3RlbmVyQXJnXG4gICAgICBsaXN0ZW5lckFyZyA9IG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBhZGRSZW1vdmUgPSBtZXRob2QgPT09ICdvbicgPyAnYWRkJyA6ICdyZW1vdmUnXG4gICAgY29uc3QgbGlzdGVuZXJzID0gbm9ybWFsaXplTGlzdGVuZXJzKHR5cGVBcmcsIGxpc3RlbmVyQXJnKVxuXG4gICAgZm9yIChsZXQgdHlwZSBpbiBsaXN0ZW5lcnMpIHtcbiAgICAgIGlmICh0eXBlID09PSAnd2hlZWwnKSB7IHR5cGUgPSBicm93c2VyLndoZWVsRXZlbnQgfVxuXG4gICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIGxpc3RlbmVyc1t0eXBlXSkge1xuICAgICAgICAvLyBpZiBpdCBpcyBhbiBhY3Rpb24gZXZlbnQgdHlwZVxuICAgICAgICBpZiAoYXJyLmNvbnRhaW5zKHRoaXMuX2FjdGlvbnMuZXZlbnRUeXBlcywgdHlwZSkpIHtcbiAgICAgICAgICB0aGlzLmV2ZW50c1ttZXRob2RdKHR5cGUsIGxpc3RlbmVyKVxuICAgICAgICB9XG4gICAgICAgIC8vIGRlbGVnYXRlZCBldmVudFxuICAgICAgICBlbHNlIGlmIChpcy5zdHJpbmcodGhpcy50YXJnZXQpKSB7XG4gICAgICAgICAgZXZlbnRzW2Ake2FkZFJlbW92ZX1EZWxlZ2F0ZWBdKHRoaXMudGFyZ2V0LCB0aGlzLl9jb250ZXh0LCB0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgbGlzdGVuZXIgZnJvbSB0aGlzIEludGVyYXRhYmxlJ3MgZWxlbWVudFxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAoZXZlbnRzW2FkZFJlbW92ZV0gYXMgdHlwZW9mIGV2ZW50cy5yZW1vdmUpKHRoaXMudGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogQmluZHMgYSBsaXN0ZW5lciBmb3IgYW4gSW50ZXJhY3RFdmVudCwgcG9pbnRlckV2ZW50IG9yIERPTSBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBhcnJheSB8IG9iamVjdH0gdHlwZXMgVGhlIHR5cGVzIG9mIGV2ZW50cyB0byBsaXN0ZW5cbiAgICogZm9yXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24gfCBhcnJheSB8IG9iamVjdH0gW2xpc3RlbmVyXSBUaGUgZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb24ocylcbiAgICogQHBhcmFtIHtvYmplY3QgfCBib29sZWFufSBbb3B0aW9uc10gb3B0aW9ucyBvYmplY3Qgb3IgdXNlQ2FwdHVyZSBmbGFnIGZvclxuICAgKiBhZGRFdmVudExpc3RlbmVyXG4gICAqIEByZXR1cm4ge0ludGVyYWN0YWJsZX0gVGhpcyBJbnRlcmFjdGFibGVcbiAgICovXG4gIG9uICh0eXBlczogSW50ZXJhY3QuRXZlbnRUeXBlcywgbGlzdGVuZXI/OiBJbnRlcmFjdC5MaXN0ZW5lcnNBcmcsIG9wdGlvbnM/OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5fb25PZmYoJ29uJywgdHlwZXMsIGxpc3RlbmVyLCBvcHRpb25zKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYW4gSW50ZXJhY3RFdmVudCwgcG9pbnRlckV2ZW50IG9yIERPTSBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBhcnJheSB8IG9iamVjdH0gdHlwZXMgVGhlIHR5cGVzIG9mIGV2ZW50cyB0aGF0IHdlcmVcbiAgICogbGlzdGVuZWQgZm9yXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24gfCBhcnJheSB8IG9iamVjdH0gW2xpc3RlbmVyXSBUaGUgZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb24ocylcbiAgICogQHBhcmFtIHtvYmplY3QgfCBib29sZWFufSBbb3B0aW9uc10gb3B0aW9ucyBvYmplY3Qgb3IgdXNlQ2FwdHVyZSBmbGFnIGZvclxuICAgKiByZW1vdmVFdmVudExpc3RlbmVyXG4gICAqIEByZXR1cm4ge0ludGVyYWN0YWJsZX0gVGhpcyBJbnRlcmFjdGFibGVcbiAgICovXG4gIG9mZiAodHlwZXM6IHN0cmluZyB8IHN0cmluZ1tdIHwgSW50ZXJhY3QuRXZlbnRUeXBlcywgbGlzdGVuZXI/OiBJbnRlcmFjdC5MaXN0ZW5lcnNBcmcsIG9wdGlvbnM/OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5fb25PZmYoJ29mZicsIHR5cGVzLCBsaXN0ZW5lciwgb3B0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgb3B0aW9ucyBvZiB0aGlzIEludGVyYWN0YWJsZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBUaGUgbmV3IHNldHRpbmdzIHRvIGFwcGx5XG4gICAqIEByZXR1cm4ge29iamVjdH0gVGhpcyBJbnRlcmFjdGFibGVcbiAgICovXG4gIHNldCAob3B0aW9uczogSW50ZXJhY3QuT3B0aW9uc0FyZykge1xuICAgIGNvbnN0IGRlZmF1bHRzID0gdGhpcy5fZGVmYXVsdHNcblxuICAgIGlmICghaXMub2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgICBvcHRpb25zID0ge31cbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBjbG9uZShkZWZhdWx0cy5iYXNlKSBhcyBSZXF1aXJlZDxPcHRpb25zPlxuXG4gICAgZm9yIChjb25zdCBhY3Rpb25OYW1lIGluIHRoaXMuX2FjdGlvbnMubWV0aG9kRGljdCkge1xuICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IHRoaXMuX2FjdGlvbnMubWV0aG9kRGljdFthY3Rpb25OYW1lXVxuXG4gICAgICB0aGlzLm9wdGlvbnNbYWN0aW9uTmFtZV0gPSB7fVxuICAgICAgdGhpcy5zZXRQZXJBY3Rpb24oYWN0aW9uTmFtZSwgZXh0ZW5kKGV4dGVuZCh7fSwgZGVmYXVsdHMucGVyQWN0aW9uKSwgZGVmYXVsdHMuYWN0aW9uc1thY3Rpb25OYW1lXSkpXG5cbiAgICAgIHRoaXNbbWV0aG9kTmFtZV0ob3B0aW9uc1thY3Rpb25OYW1lXSlcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHNldHRpbmcgaW4gb3B0aW9ucykge1xuICAgICAgaWYgKGlzLmZ1bmModGhpc1tzZXR0aW5nXSkpIHtcbiAgICAgICAgdGhpc1tzZXR0aW5nXShvcHRpb25zW3NldHRpbmddKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoaXMgaW50ZXJhY3RhYmxlIGZyb20gdGhlIGxpc3Qgb2YgaW50ZXJhY3RhYmxlcyBhbmQgcmVtb3ZlIGl0J3NcbiAgICogYWN0aW9uIGNhcGFiaWxpdGllcyBhbmQgZXZlbnQgbGlzdGVuZXJzXG4gICAqXG4gICAqIEByZXR1cm4ge2ludGVyYWN0fVxuICAgKi9cbiAgdW5zZXQgKCkge1xuICAgIGV2ZW50cy5yZW1vdmUodGhpcy50YXJnZXQgYXMgTm9kZSwgJ2FsbCcpXG5cbiAgICBpZiAoaXMuc3RyaW5nKHRoaXMudGFyZ2V0KSkge1xuICAgICAgLy8gcmVtb3ZlIGRlbGVnYXRlZCBldmVudHNcbiAgICAgIGZvciAoY29uc3QgdHlwZSBpbiBldmVudHMuZGVsZWdhdGVkRXZlbnRzKSB7XG4gICAgICAgIGNvbnN0IGRlbGVnYXRlZCA9IGV2ZW50cy5kZWxlZ2F0ZWRFdmVudHNbdHlwZV1cblxuICAgICAgICBpZiAoZGVsZWdhdGVkLnNlbGVjdG9yc1swXSA9PT0gdGhpcy50YXJnZXQgJiZcbiAgICAgICAgICAgIGRlbGVnYXRlZC5jb250ZXh0c1swXSA9PT0gdGhpcy5fY29udGV4dCkge1xuICAgICAgICAgIGRlbGVnYXRlZC5zZWxlY3RvcnMuc3BsaWNlKDAsIDEpXG4gICAgICAgICAgZGVsZWdhdGVkLmNvbnRleHRzLnNwbGljZSgwLCAxKVxuICAgICAgICAgIGRlbGVnYXRlZC5saXN0ZW5lcnMuc3BsaWNlKDAsIDEpXG5cbiAgICAgICAgICAvLyByZW1vdmUgdGhlIGFycmF5cyBpZiB0aGV5IGFyZSBlbXB0eVxuICAgICAgICAgIGlmICghZGVsZWdhdGVkLnNlbGVjdG9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGRlbGVnYXRlZFt0eXBlXSA9IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBldmVudHMucmVtb3ZlKHRoaXMuX2NvbnRleHQsIHR5cGUsIGV2ZW50cy5kZWxlZ2F0ZUxpc3RlbmVyKVxuICAgICAgICBldmVudHMucmVtb3ZlKHRoaXMuX2NvbnRleHQsIHR5cGUsIGV2ZW50cy5kZWxlZ2F0ZVVzZUNhcHR1cmUsIHRydWUpXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZXZlbnRzLnJlbW92ZSh0aGlzLnRhcmdldCBhcyBOb2RlLCAnYWxsJylcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW50ZXJhY3RhYmxlXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJhY3RhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiSW50ZXJhY3RhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxHQUFHLE1BQU0sdUJBQXVCLENBQUE7QUFDNUMsT0FBTyxPQUFPLE1BQU0sMkJBQTJCLENBQUE7QUFDL0MsT0FBTyxLQUFLLE1BQU0seUJBQXlCLENBQUE7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFDdEYsT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUE7QUFDN0MsT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUE7QUFDN0MsT0FBTyxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUMxQyxPQUFPLGtCQUFrQixNQUFNLHNDQUFzQyxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUVwRCxPQUFPLFNBQVMsTUFBTSxhQUFhLENBQUE7QUFHbkMsTUFBTTtBQUNOLE1BQU0sT0FBTyxZQUFZO0lBaUJ2QixNQUFNO0lBQ04sWUFBYSxNQUF1QixFQUFFLE9BQVksRUFBRSxjQUFrQztRQU43RSxXQUFNLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQTtRQU8vQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUE7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBSyxNQUFNLENBQUE7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLGNBQWMsQ0FBQTtRQUNqRCxJQUFJLENBQUMsSUFBSSxHQUFPLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3ZFLElBQUksQ0FBQyxJQUFJLEdBQU8sSUFBSSxDQUFDLElBQUksQ0FB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b0JBQzNDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtvQkFDaEMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO29CQUMvQixTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7b0JBRWhDLHNDQUFzQztvQkFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO3dCQUMvQixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFBO3FCQUN2QjtpQkFDRjtnQkFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO2dCQUMzRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQTthQUNwRTtTQUNGO2FBQ0k7WUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFjLEVBQUUsS0FBSyxDQUFDLENBQUE7U0FDMUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxlQUFlLFlBQVksQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFyciBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9hcnInXG5pbXBvcnQgYnJvd3NlciBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9icm93c2VyJ1xuaW1wb3J0IGNsb25lIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2Nsb25lJ1xuaW1wb3J0IHsgZ2V0RWxlbWVudFJlY3QsIG5vZGVDb250YWlucywgdHJ5U2VsZWN0b3IgfSBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9kb21VdGlscydcbmltcG9ydCBldmVudHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvZXZlbnRzJ1xuaW1wb3J0IGV4dGVuZCBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9leHRlbmQnXG5pbXBvcnQgKiBhcyBpcyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9pcydcbmltcG9ydCBub3JtYWxpemVMaXN0ZW5lcnMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvbm9ybWFsaXplTGlzdGVuZXJzJ1xuaW1wb3J0IHsgZ2V0V2luZG93IH0gZnJvbSAnQGludGVyYWN0anMvdXRpbHMvd2luZG93J1xuaW1wb3J0IHsgQWN0aW9uRGVmYXVsdHMsIERlZmF1bHRzLCBPcHRpb25zIH0gZnJvbSAnLi9kZWZhdWx0T3B0aW9ucydcbmltcG9ydCBFdmVudGFibGUgZnJvbSAnLi9FdmVudGFibGUnXG5pbXBvcnQgeyBBY3Rpb25zIH0gZnJvbSAnLi9zY29wZSdcblxuLyoqICovXG5leHBvcnQgY2xhc3MgSW50ZXJhY3RhYmxlIGltcGxlbWVudHMgUGFydGlhbDxFdmVudGFibGU+IHtcbiAgcHJvdGVjdGVkIGdldCBfZGVmYXVsdHMgKCk6IERlZmF1bHRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgYmFzZToge30sXG4gICAgICBwZXJBY3Rpb246IHt9LFxuICAgICAgYWN0aW9uczoge30gYXMgQWN0aW9uRGVmYXVsdHMsXG4gICAgfVxuICB9XG5cbiAgcmVhZG9ubHkgb3B0aW9ucyE6IFJlcXVpcmVkPE9wdGlvbnM+XG4gIHJlYWRvbmx5IF9hY3Rpb25zOiBBY3Rpb25zXG4gIHJlYWRvbmx5IHRhcmdldDogSW50ZXJhY3QuVGFyZ2V0XG4gIHJlYWRvbmx5IGV2ZW50cyA9IG5ldyBFdmVudGFibGUoKVxuICByZWFkb25seSBfY29udGV4dDogRG9jdW1lbnQgfCBFbGVtZW50XG4gIHJlYWRvbmx5IF93aW46IFdpbmRvd1xuICByZWFkb25seSBfZG9jOiBEb2N1bWVudFxuXG4gIC8qKiAqL1xuICBjb25zdHJ1Y3RvciAodGFyZ2V0OiBJbnRlcmFjdC5UYXJnZXQsIG9wdGlvbnM6IGFueSwgZGVmYXVsdENvbnRleHQ6IERvY3VtZW50IHwgRWxlbWVudCkge1xuICAgIHRoaXMuX2FjdGlvbnMgPSBvcHRpb25zLmFjdGlvbnNcbiAgICB0aGlzLnRhcmdldCAgID0gdGFyZ2V0XG4gICAgdGhpcy5fY29udGV4dCA9IG9wdGlvbnMuY29udGV4dCB8fCBkZWZhdWx0Q29udGV4dFxuICAgIHRoaXMuX3dpbiAgICAgPSBnZXRXaW5kb3codHJ5U2VsZWN0b3IodGFyZ2V0KSA/IHRoaXMuX2NvbnRleHQgOiB0YXJnZXQpXG4gICAgdGhpcy5fZG9jICAgICA9IHRoaXMuX3dpbi5kb2N1bWVudFxuXG4gICAgdGhpcy5zZXQob3B0aW9ucylcbiAgfVxuXG4gIHNldE9uRXZlbnRzIChhY3Rpb25OYW1lOiBzdHJpbmcsIHBoYXNlczogTm9uTnVsbGFibGU8YW55Pikge1xuICAgIGlmIChpcy5mdW5jKHBoYXNlcy5vbnN0YXJ0KSkgeyB0aGlzLm9uKGAke2FjdGlvbk5hbWV9c3RhcnRgLCBwaGFzZXMub25zdGFydCkgfVxuICAgIGlmIChpcy5mdW5jKHBoYXNlcy5vbm1vdmUpKSB7IHRoaXMub24oYCR7YWN0aW9uTmFtZX1tb3ZlYCwgcGhhc2VzLm9ubW92ZSkgfVxuICAgIGlmIChpcy5mdW5jKHBoYXNlcy5vbmVuZCkpIHsgdGhpcy5vbihgJHthY3Rpb25OYW1lfWVuZGAsIHBoYXNlcy5vbmVuZCkgfVxuICAgIGlmIChpcy5mdW5jKHBoYXNlcy5vbmluZXJ0aWFzdGFydCkpIHsgdGhpcy5vbihgJHthY3Rpb25OYW1lfWluZXJ0aWFzdGFydGAsIHBoYXNlcy5vbmluZXJ0aWFzdGFydCkgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHVwZGF0ZVBlckFjdGlvbkxpc3RlbmVycyAoYWN0aW9uTmFtZSwgcHJldiwgY3VyKSB7XG4gICAgaWYgKGlzLmFycmF5KHByZXYpKSB7XG4gICAgICB0aGlzLm9mZihhY3Rpb25OYW1lLCBwcmV2KVxuICAgIH1cblxuICAgIGlmIChpcy5hcnJheShjdXIpKSB7XG4gICAgICB0aGlzLm9uKGFjdGlvbk5hbWUsIGN1cilcbiAgICB9XG4gIH1cblxuICBzZXRQZXJBY3Rpb24gKGFjdGlvbk5hbWUsIG9wdGlvbnM6IEludGVyYWN0Lk9yQm9vbGVhbjxPcHRpb25zPikge1xuICAgIGNvbnN0IGRlZmF1bHRzID0gdGhpcy5fZGVmYXVsdHNcblxuICAgIC8vIGZvciBhbGwgdGhlIGRlZmF1bHQgcGVyLWFjdGlvbiBvcHRpb25zXG4gICAgZm9yIChjb25zdCBvcHRpb25OYW1lIGluIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGFjdGlvbk9wdGlvbnMgPSB0aGlzLm9wdGlvbnNbYWN0aW9uTmFtZV1cbiAgICAgIGNvbnN0IG9wdGlvblZhbHVlID0gb3B0aW9uc1tvcHRpb25OYW1lXVxuICAgICAgY29uc3QgaXNBcnJheSA9IGlzLmFycmF5KG9wdGlvblZhbHVlKVxuXG4gICAgICAvLyByZW1vdmUgb2xkIGV2ZW50IGxpc3RlbmVycyBhbmQgYWRkIG5ldyBvbmVzXG4gICAgICBpZiAob3B0aW9uTmFtZSA9PT0gJ2xpc3RlbmVycycpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQZXJBY3Rpb25MaXN0ZW5lcnMoYWN0aW9uTmFtZSwgYWN0aW9uT3B0aW9ucy5saXN0ZW5lcnMsIG9wdGlvblZhbHVlKVxuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgb3B0aW9uIHZhbHVlIGlzIGFuIGFycmF5XG4gICAgICBpZiAoaXNBcnJheSkge1xuICAgICAgICBhY3Rpb25PcHRpb25zW29wdGlvbk5hbWVdID0gYXJyLmZyb20ob3B0aW9uVmFsdWUpXG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgb3B0aW9uIHZhbHVlIGlzIGFuIG9iamVjdFxuICAgICAgZWxzZSBpZiAoIWlzQXJyYXkgJiYgaXMucGxhaW5PYmplY3Qob3B0aW9uVmFsdWUpKSB7XG4gICAgICAgIC8vIGNvcHkgdGhlIG9iamVjdFxuICAgICAgICBhY3Rpb25PcHRpb25zW29wdGlvbk5hbWVdID0gZXh0ZW5kKFxuICAgICAgICAgIGFjdGlvbk9wdGlvbnNbb3B0aW9uTmFtZV0gfHwge30sXG4gICAgICAgICAgY2xvbmUob3B0aW9uVmFsdWUpKVxuXG4gICAgICAgIC8vIHNldCBhbmFibGVkIGZpZWxkIHRvIHRydWUgaWYgaXQgZXhpc3RzIGluIHRoZSBkZWZhdWx0c1xuICAgICAgICBpZiAoaXMub2JqZWN0KGRlZmF1bHRzLnBlckFjdGlvbltvcHRpb25OYW1lXSkgJiYgJ2VuYWJsZWQnIGluIGRlZmF1bHRzLnBlckFjdGlvbltvcHRpb25OYW1lXSkge1xuICAgICAgICAgIGFjdGlvbk9wdGlvbnNbb3B0aW9uTmFtZV0uZW5hYmxlZCA9IG9wdGlvblZhbHVlLmVuYWJsZWQgIT09IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSBvcHRpb24gdmFsdWUgaXMgYSBib29sZWFuIGFuZCB0aGUgZGVmYXVsdCBpcyBhbiBvYmplY3RcbiAgICAgIGVsc2UgaWYgKGlzLmJvb2wob3B0aW9uVmFsdWUpICYmIGlzLm9iamVjdChkZWZhdWx0cy5wZXJBY3Rpb25bb3B0aW9uTmFtZV0pKSB7XG4gICAgICAgIGFjdGlvbk9wdGlvbnNbb3B0aW9uTmFtZV0uZW5hYmxlZCA9IG9wdGlvblZhbHVlXG4gICAgICB9XG4gICAgICAvLyBpZiBpdCdzIGFueXRoaW5nIGVsc2UsIGRvIGEgcGxhaW4gYXNzaWdubWVudFxuICAgICAgZWxzZSB7XG4gICAgICAgIGFjdGlvbk9wdGlvbnNbb3B0aW9uTmFtZV0gPSBvcHRpb25WYWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBnZXQgYW4gSW50ZXJhY3RhYmxlcyBib3VuZGluZyByZWN0LiBDYW4gYmVcbiAgICogb3ZlcnJpZGRlbiB1c2luZyB7QGxpbmsgSW50ZXJhY3RhYmxlLnJlY3RDaGVja2VyfS5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBbZWxlbWVudF0gVGhlIGVsZW1lbnQgdG8gbWVhc3VyZS5cbiAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgb2JqZWN0J3MgYm91bmRpbmcgcmVjdGFuZ2xlLlxuICAgKi9cbiAgZ2V0UmVjdCAoZWxlbWVudDogRWxlbWVudCkge1xuICAgIGVsZW1lbnQgPSBlbGVtZW50IHx8IChpcy5lbGVtZW50KHRoaXMudGFyZ2V0KVxuICAgICAgPyB0aGlzLnRhcmdldFxuICAgICAgOiBudWxsKVxuXG4gICAgaWYgKGlzLnN0cmluZyh0aGlzLnRhcmdldCkpIHtcbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50IHx8IHRoaXMuX2NvbnRleHQucXVlcnlTZWxlY3Rvcih0aGlzLnRhcmdldClcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0RWxlbWVudFJlY3QoZWxlbWVudClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIG9yIHNldHMgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbnRlcmFjdGFibGUnc1xuICAgKiBlbGVtZW50J3MgcmVjdGFuZ2xlXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjaGVja2VyXSBBIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgdGhpcyBJbnRlcmFjdGFibGUnc1xuICAgKiBib3VuZGluZyByZWN0YW5nbGUuIFNlZSB7QGxpbmsgSW50ZXJhY3RhYmxlLmdldFJlY3R9XG4gICAqIEByZXR1cm4ge2Z1bmN0aW9uIHwgb2JqZWN0fSBUaGUgY2hlY2tlciBmdW5jdGlvbiBvciB0aGlzIEludGVyYWN0YWJsZVxuICAgKi9cbiAgcmVjdENoZWNrZXIgKGNoZWNrZXI6IChlbGVtZW50OiBFbGVtZW50KSA9PiBhbnkpIHtcbiAgICBpZiAoaXMuZnVuYyhjaGVja2VyKSkge1xuICAgICAgdGhpcy5nZXRSZWN0ID0gY2hlY2tlclxuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGlmIChjaGVja2VyID09PSBudWxsKSB7XG4gICAgICBkZWxldGUgdGhpcy5nZXRSZWN0XG5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVjdFxuICB9XG5cbiAgX2JhY2tDb21wYXRPcHRpb24gKG9wdGlvbk5hbWUsIG5ld1ZhbHVlKSB7XG4gICAgaWYgKHRyeVNlbGVjdG9yKG5ld1ZhbHVlKSB8fCBpcy5vYmplY3QobmV3VmFsdWUpKSB7XG4gICAgICB0aGlzLm9wdGlvbnNbb3B0aW9uTmFtZV0gPSBuZXdWYWx1ZVxuXG4gICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLl9hY3Rpb25zLm5hbWVzKSB7XG4gICAgICAgIHRoaXMub3B0aW9uc1thY3Rpb25dW29wdGlvbk5hbWVdID0gbmV3VmFsdWVcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zW29wdGlvbk5hbWVdXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBvcmlnaW4gb2YgdGhlIEludGVyYWN0YWJsZSdzIGVsZW1lbnQuICBUaGUgeCBhbmQgeVxuICAgKiBvZiB0aGUgb3JpZ2luIHdpbGwgYmUgc3VidHJhY3RlZCBmcm9tIGFjdGlvbiBldmVudCBjb29yZGluYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50IHwgb2JqZWN0IHwgc3RyaW5nfSBbb3JpZ2luXSBBbiBIVE1MIG9yIFNWRyBFbGVtZW50IHdob3NlXG4gICAqIHJlY3Qgd2lsbCBiZSB1c2VkLCBhbiBvYmplY3QgZWcuIHsgeDogMCwgeTogMCB9IG9yIHN0cmluZyAncGFyZW50JywgJ3NlbGYnXG4gICAqIG9yIGFueSBDU1Mgc2VsZWN0b3JcbiAgICpcbiAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgY3VycmVudCBvcmlnaW4gb3IgdGhpcyBJbnRlcmFjdGFibGVcbiAgICovXG4gIG9yaWdpbiAobmV3VmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fYmFja0NvbXBhdE9wdGlvbignb3JpZ2luJywgbmV3VmFsdWUpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBvciBzZXRzIHRoZSBtb3VzZSBjb29yZGluYXRlIHR5cGVzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZVxuICAgKiBtb3ZlbWVudCBvZiB0aGUgcG9pbnRlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtuZXdWYWx1ZV0gVXNlICdjbGllbnQnIGlmIHlvdSB3aWxsIGJlIHNjcm9sbGluZyB3aGlsZVxuICAgKiBpbnRlcmFjdGluZzsgVXNlICdwYWdlJyBpZiB5b3Ugd2FudCBhdXRvU2Nyb2xsIHRvIHdvcmtcbiAgICogQHJldHVybiB7c3RyaW5nIHwgb2JqZWN0fSBUaGUgY3VycmVudCBkZWx0YVNvdXJjZSBvciB0aGlzIEludGVyYWN0YWJsZVxuICAgKi9cbiAgZGVsdGFTb3VyY2UgKG5ld1ZhbHVlKSB7XG4gICAgaWYgKG5ld1ZhbHVlID09PSAncGFnZScgfHwgbmV3VmFsdWUgPT09ICdjbGllbnQnKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuZGVsdGFTb3VyY2UgPSBuZXdWYWx1ZVxuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZGVsdGFTb3VyY2VcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzZWxlY3RvciBjb250ZXh0IE5vZGUgb2YgdGhlIEludGVyYWN0YWJsZS4gVGhlIGRlZmF1bHQgaXNcbiAgICogYHdpbmRvdy5kb2N1bWVudGAuXG4gICAqXG4gICAqIEByZXR1cm4ge05vZGV9IFRoZSBjb250ZXh0IE5vZGUgb2YgdGhpcyBJbnRlcmFjdGFibGVcbiAgICovXG4gIGNvbnRleHQgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0XG4gIH1cblxuICBpbkNvbnRleHQgKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gKHRoaXMuX2NvbnRleHQgPT09IGVsZW1lbnQub3duZXJEb2N1bWVudCB8fFxuICAgICAgICAgICAgbm9kZUNvbnRhaW5zKHRoaXMuX2NvbnRleHQsIGVsZW1lbnQpKVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxzIGxpc3RlbmVycyBmb3IgdGhlIGdpdmVuIEludGVyYWN0RXZlbnQgdHlwZSBib3VuZCBnbG9iYWxseVxuICAgKiBhbmQgZGlyZWN0bHkgdG8gdGhpcyBJbnRlcmFjdGFibGVcbiAgICpcbiAgICogQHBhcmFtIHtJbnRlcmFjdEV2ZW50fSBpRXZlbnQgVGhlIEludGVyYWN0RXZlbnQgb2JqZWN0IHRvIGJlIGZpcmVkIG9uIHRoaXNcbiAgICogSW50ZXJhY3RhYmxlXG4gICAqIEByZXR1cm4ge0ludGVyYWN0YWJsZX0gdGhpcyBJbnRlcmFjdGFibGVcbiAgICovXG4gIGZpcmUgKGlFdmVudCkge1xuICAgIHRoaXMuZXZlbnRzLmZpcmUoaUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIF9vbk9mZiAobWV0aG9kOiAnb24nIHwgJ29mZicsIHR5cGVBcmc6IEludGVyYWN0LkV2ZW50VHlwZXMsIGxpc3RlbmVyQXJnPzogSW50ZXJhY3QuTGlzdGVuZXJzQXJnIHwgbnVsbCwgb3B0aW9ucz86IGFueSkge1xuICAgIGlmIChpcy5vYmplY3QodHlwZUFyZykgJiYgIWlzLmFycmF5KHR5cGVBcmcpKSB7XG4gICAgICBvcHRpb25zID0gbGlzdGVuZXJBcmdcbiAgICAgIGxpc3RlbmVyQXJnID0gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IGFkZFJlbW92ZSA9IG1ldGhvZCA9PT0gJ29uJyA/ICdhZGQnIDogJ3JlbW92ZSdcbiAgICBjb25zdCBsaXN0ZW5lcnMgPSBub3JtYWxpemVMaXN0ZW5lcnModHlwZUFyZywgbGlzdGVuZXJBcmcpXG5cbiAgICBmb3IgKGxldCB0eXBlIGluIGxpc3RlbmVycykge1xuICAgICAgaWYgKHR5cGUgPT09ICd3aGVlbCcpIHsgdHlwZSA9IGJyb3dzZXIud2hlZWxFdmVudCB9XG5cbiAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgbGlzdGVuZXJzW3R5cGVdKSB7XG4gICAgICAgIC8vIGlmIGl0IGlzIGFuIGFjdGlvbiBldmVudCB0eXBlXG4gICAgICAgIGlmIChhcnIuY29udGFpbnModGhpcy5fYWN0aW9ucy5ldmVudFR5cGVzLCB0eXBlKSkge1xuICAgICAgICAgIHRoaXMuZXZlbnRzW21ldGhvZF0odHlwZSwgbGlzdGVuZXIpXG4gICAgICAgIH1cbiAgICAgICAgLy8gZGVsZWdhdGVkIGV2ZW50XG4gICAgICAgIGVsc2UgaWYgKGlzLnN0cmluZyh0aGlzLnRhcmdldCkpIHtcbiAgICAgICAgICBldmVudHNbYCR7YWRkUmVtb3ZlfURlbGVnYXRlYF0odGhpcy50YXJnZXQsIHRoaXMuX2NvbnRleHQsIHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlbW92ZSBsaXN0ZW5lciBmcm9tIHRoaXMgSW50ZXJhdGFibGUncyBlbGVtZW50XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIChldmVudHNbYWRkUmVtb3ZlXSBhcyB0eXBlb2YgZXZlbnRzLnJlbW92ZSkodGhpcy50YXJnZXQsIHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBhIGxpc3RlbmVyIGZvciBhbiBJbnRlcmFjdEV2ZW50LCBwb2ludGVyRXZlbnQgb3IgRE9NIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IGFycmF5IHwgb2JqZWN0fSB0eXBlcyBUaGUgdHlwZXMgb2YgZXZlbnRzIHRvIGxpc3RlblxuICAgKiBmb3JcbiAgICogQHBhcmFtIHtmdW5jdGlvbiB8IGFycmF5IHwgb2JqZWN0fSBbbGlzdGVuZXJdIFRoZSBldmVudCBsaXN0ZW5lciBmdW5jdGlvbihzKVxuICAgKiBAcGFyYW0ge29iamVjdCB8IGJvb2xlYW59IFtvcHRpb25zXSBvcHRpb25zIG9iamVjdCBvciB1c2VDYXB0dXJlIGZsYWcgZm9yXG4gICAqIGFkZEV2ZW50TGlzdGVuZXJcbiAgICogQHJldHVybiB7SW50ZXJhY3RhYmxlfSBUaGlzIEludGVyYWN0YWJsZVxuICAgKi9cbiAgb24gKHR5cGVzOiBJbnRlcmFjdC5FdmVudFR5cGVzLCBsaXN0ZW5lcj86IEludGVyYWN0Lkxpc3RlbmVyc0FyZywgb3B0aW9ucz86IGFueSkge1xuICAgIHJldHVybiB0aGlzLl9vbk9mZignb24nLCB0eXBlcywgbGlzdGVuZXIsIG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbiBJbnRlcmFjdEV2ZW50LCBwb2ludGVyRXZlbnQgb3IgRE9NIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IGFycmF5IHwgb2JqZWN0fSB0eXBlcyBUaGUgdHlwZXMgb2YgZXZlbnRzIHRoYXQgd2VyZVxuICAgKiBsaXN0ZW5lZCBmb3JcbiAgICogQHBhcmFtIHtmdW5jdGlvbiB8IGFycmF5IHwgb2JqZWN0fSBbbGlzdGVuZXJdIFRoZSBldmVudCBsaXN0ZW5lciBmdW5jdGlvbihzKVxuICAgKiBAcGFyYW0ge29iamVjdCB8IGJvb2xlYW59IFtvcHRpb25zXSBvcHRpb25zIG9iamVjdCBvciB1c2VDYXB0dXJlIGZsYWcgZm9yXG4gICAqIHJlbW92ZUV2ZW50TGlzdGVuZXJcbiAgICogQHJldHVybiB7SW50ZXJhY3RhYmxlfSBUaGlzIEludGVyYWN0YWJsZVxuICAgKi9cbiAgb2ZmICh0eXBlczogc3RyaW5nIHwgc3RyaW5nW10gfCBJbnRlcmFjdC5FdmVudFR5cGVzLCBsaXN0ZW5lcj86IEludGVyYWN0Lkxpc3RlbmVyc0FyZywgb3B0aW9ucz86IGFueSkge1xuICAgIHJldHVybiB0aGlzLl9vbk9mZignb2ZmJywgdHlwZXMsIGxpc3RlbmVyLCBvcHRpb25zKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBvcHRpb25zIG9mIHRoaXMgSW50ZXJhY3RhYmxlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIFRoZSBuZXcgc2V0dGluZ3MgdG8gYXBwbHlcbiAgICogQHJldHVybiB7b2JqZWN0fSBUaGlzIEludGVyYWN0YWJsZVxuICAgKi9cbiAgc2V0IChvcHRpb25zOiBJbnRlcmFjdC5PcHRpb25zQXJnKSB7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB0aGlzLl9kZWZhdWx0c1xuXG4gICAgaWYgKCFpcy5vYmplY3Qob3B0aW9ucykpIHtcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgIH1cblxuICAgICh0aGlzLm9wdGlvbnMgYXMgUmVxdWlyZWQ8T3B0aW9ucz4pID0gY2xvbmUoZGVmYXVsdHMuYmFzZSkgYXMgUmVxdWlyZWQ8T3B0aW9ucz5cblxuICAgIGZvciAoY29uc3QgYWN0aW9uTmFtZSBpbiB0aGlzLl9hY3Rpb25zLm1ldGhvZERpY3QpIHtcbiAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSB0aGlzLl9hY3Rpb25zLm1ldGhvZERpY3RbYWN0aW9uTmFtZV1cblxuICAgICAgdGhpcy5vcHRpb25zW2FjdGlvbk5hbWVdID0ge31cbiAgICAgIHRoaXMuc2V0UGVyQWN0aW9uKGFjdGlvbk5hbWUsIGV4dGVuZChleHRlbmQoe30sIGRlZmF1bHRzLnBlckFjdGlvbiksIGRlZmF1bHRzLmFjdGlvbnNbYWN0aW9uTmFtZV0pKVxuXG4gICAgICB0aGlzW21ldGhvZE5hbWVdKG9wdGlvbnNbYWN0aW9uTmFtZV0pXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzZXR0aW5nIGluIG9wdGlvbnMpIHtcbiAgICAgIGlmIChpcy5mdW5jKHRoaXNbc2V0dGluZ10pKSB7XG4gICAgICAgIHRoaXNbc2V0dGluZ10ob3B0aW9uc1tzZXR0aW5nXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0aGlzIGludGVyYWN0YWJsZSBmcm9tIHRoZSBsaXN0IG9mIGludGVyYWN0YWJsZXMgYW5kIHJlbW92ZSBpdCdzXG4gICAqIGFjdGlvbiBjYXBhYmlsaXRpZXMgYW5kIGV2ZW50IGxpc3RlbmVyc1xuICAgKlxuICAgKiBAcmV0dXJuIHtpbnRlcmFjdH1cbiAgICovXG4gIHVuc2V0ICgpIHtcbiAgICBldmVudHMucmVtb3ZlKHRoaXMudGFyZ2V0IGFzIE5vZGUsICdhbGwnKVxuXG4gICAgaWYgKGlzLnN0cmluZyh0aGlzLnRhcmdldCkpIHtcbiAgICAgIC8vIHJlbW92ZSBkZWxlZ2F0ZWQgZXZlbnRzXG4gICAgICBmb3IgKGNvbnN0IHR5cGUgaW4gZXZlbnRzLmRlbGVnYXRlZEV2ZW50cykge1xuICAgICAgICBjb25zdCBkZWxlZ2F0ZWQgPSBldmVudHMuZGVsZWdhdGVkRXZlbnRzW3R5cGVdXG5cbiAgICAgICAgaWYgKGRlbGVnYXRlZC5zZWxlY3RvcnNbMF0gPT09IHRoaXMudGFyZ2V0ICYmXG4gICAgICAgICAgICBkZWxlZ2F0ZWQuY29udGV4dHNbMF0gPT09IHRoaXMuX2NvbnRleHQpIHtcbiAgICAgICAgICBkZWxlZ2F0ZWQuc2VsZWN0b3JzLnNwbGljZSgwLCAxKVxuICAgICAgICAgIGRlbGVnYXRlZC5jb250ZXh0cy5zcGxpY2UoMCwgMSlcbiAgICAgICAgICBkZWxlZ2F0ZWQubGlzdGVuZXJzLnNwbGljZSgwLCAxKVxuXG4gICAgICAgICAgLy8gcmVtb3ZlIHRoZSBhcnJheXMgaWYgdGhleSBhcmUgZW1wdHlcbiAgICAgICAgICBpZiAoIWRlbGVnYXRlZC5zZWxlY3RvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBkZWxlZ2F0ZWRbdHlwZV0gPSBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnRzLnJlbW92ZSh0aGlzLl9jb250ZXh0LCB0eXBlLCBldmVudHMuZGVsZWdhdGVMaXN0ZW5lcilcbiAgICAgICAgZXZlbnRzLnJlbW92ZSh0aGlzLl9jb250ZXh0LCB0eXBlLCBldmVudHMuZGVsZWdhdGVVc2VDYXB0dXJlLCB0cnVlKVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGV2ZW50cy5yZW1vdmUodGhpcy50YXJnZXQgYXMgTm9kZSwgJ2FsbCcpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVyYWN0YWJsZVxuIl19 \ No newline at end of file diff --git a/packages/core/Interaction.d.ts b/packages/core/Interaction.d.ts index 1441141a0..f2536b0e0 100644 --- a/packages/core/Interaction.d.ts +++ b/packages/core/Interaction.d.ts @@ -3,16 +3,18 @@ import Interactable from './Interactable'; import InteractEvent, { EventPhase } from './InteractEvent'; import PointerInfo from './PointerInfo'; import { ActionName } from './scope'; -export interface Action { - name: ActionName; +export interface ActionProps { + name: T; axis?: 'x' | 'y' | 'xy'; - edges?: Partial; + edges?: { + [edge in keyof Interact.Rect]?: boolean; + }; } -export declare class Interaction { +export declare class Interaction { target: Interactable; element: Element; _signals: utils.Signals; - prepared: Action; + prepared: ActionProps; pointerType: string; pointers: PointerInfo[]; downEvent: Interact.PointerEventType; @@ -22,7 +24,7 @@ export declare class Interaction { event: Interact.PointerEventType; eventTarget: Node; }; - prevEvent: InteractEvent; + prevEvent: InteractEvent; pointerIsDown: boolean; pointerWasMoved: boolean; _interacting: boolean; @@ -92,7 +94,7 @@ export declare class Interaction { }; /** */ constructor({ pointerType, signals }: { - pointerType: string; + pointerType?: string; signals: utils.Signals; }); pointerDown(pointer: any, event: any, eventTarget: any): void; @@ -166,19 +168,19 @@ export declare class Interaction { * * @param {PointerEvent} [event] */ - end(event: any): void; - currentAction(): ActionName; + end(event?: Interact.PointerEventType): void; + currentAction(): T; interacting(): boolean; /** */ stop(): void; getPointerIndex(pointer: any): number; getPointerInfo(pointer: any): PointerInfo; - updatePointer(pointer: any, event: any, eventTarget: any, down: any): number; + updatePointer(pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Window | Document | Element, down?: boolean): number; removePointer(pointer: any, event: any): void; _updateLatestPointer(pointer: any, event: any, eventTarget: any): void; - _createPreparedEvent(event: Interact.PointerEventType, phase: EventPhase, preEnd: boolean, type: string): InteractEvent; + _createPreparedEvent(event: Interact.PointerEventType, phase: EventPhase, preEnd: boolean, type: string): InteractEvent; _fireEvent(iEvent: any): void; - _doPhase(signalArg: any): boolean; + _doPhase(signalArg: Partial): boolean; } export default Interaction; export { PointerInfo }; diff --git a/packages/core/Interaction.js b/packages/core/Interaction.js index e1c95bc00..d5e84ed0a 100644 --- a/packages/core/Interaction.js +++ b/packages/core/Interaction.js @@ -1,5 +1,5 @@ import * as utils from '@interactjs/utils'; -import InteractEvent from './InteractEvent'; +import InteractEvent, { EventPhase } from './InteractEvent'; import PointerInfo from './PointerInfo'; export class Interaction { /** */ @@ -51,7 +51,7 @@ export class Interaction { }; this._signals = signals; this.pointerType = pointerType; - this._signals.fire('new', this); + this._signals.fire('new', { interaction: this }); } get pointerMoveTolerance() { return 1; @@ -109,7 +109,7 @@ export class Interaction { this._interacting = this._doPhase({ interaction: this, event: this.downEvent, - phase: 'start', + phase: EventPhase.Start, }); } pointerMove(pointer, event, eventTarget) { @@ -181,7 +181,7 @@ export class Interaction { interaction: this, noBefore: false, }, signalArg || {}); - signalArg.phase = 'move'; + signalArg.phase = EventPhase.Move; this._doPhase(signalArg); } // End interact move events and stop auto-scroll unless simulation is running @@ -232,7 +232,7 @@ export class Interaction { endPhaseResult = this._doPhase({ event, interaction: this, - phase: 'end', + phase: EventPhase.End, }); } this._ending = false; @@ -350,4 +350,4 @@ export class Interaction { } export default Interaction; export { PointerInfo }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJJbnRlcmFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFBO0FBRTFDLE9BQU8sYUFBNkIsTUFBTSxpQkFBaUIsQ0FBQTtBQUMzRCxPQUFPLFdBQVcsTUFBTSxlQUFlLENBQUE7QUFTdkMsTUFBTSxPQUFPLFdBQVc7SUF3RXRCLE1BQU07SUFDTixZQUFhLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBbUQ7UUF4RXRGLDZDQUE2QztRQUM3QyxXQUFNLEdBQWlCLElBQUksQ0FBQTtRQUUzQix5Q0FBeUM7UUFDekMsWUFBTyxHQUFZLElBQUksQ0FBQTtRQUl2QixxREFBcUQ7UUFDckQsYUFBUSxHQUFXO1lBQ2pCLElBQUksRUFBRyxJQUFJO1lBQ1gsSUFBSSxFQUFHLElBQUk7WUFDWCxLQUFLLEVBQUUsSUFBSTtTQUNaLENBQUE7UUFJRCwrQkFBK0I7UUFDL0IsYUFBUSxHQUFrQixFQUFFLENBQUE7UUFFNUIseUNBQXlDO1FBQ3pDLGNBQVMsR0FBOEIsSUFBSSxDQUFBO1FBRTNDLGdCQUFXLEdBQXlCLEVBQTBCLENBQUE7UUFFOUQsbUJBQWMsR0FJVjtZQUNGLE9BQU8sRUFBRSxJQUFJO1lBQ2IsS0FBSyxFQUFFLElBQUk7WUFDWCxXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFBO1FBRUQsd0JBQXdCO1FBQ3hCLGNBQVMsR0FBa0IsSUFBSSxDQUFBO1FBRS9CLGtCQUFhLEdBQUcsS0FBSyxDQUFBO1FBQ3JCLG9CQUFlLEdBQUcsS0FBSyxDQUFBO1FBQ3ZCLGlCQUFZLEdBQUcsS0FBSyxDQUFBO1FBQ3BCLFlBQU8sR0FBRyxLQUFLLENBQUE7UUFFZixlQUFVLEdBQUcsSUFBSSxDQUFBO1FBTWpCOztXQUVHO1FBQ0gsV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQ3JCLFVBQTZCLFNBQWM7WUFDekMsSUFBSSxDQUFDLElB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RjtBQUVELGVBQWUsV0FBVyxDQUFBO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0aWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzJ1xuaW1wb3J0IEludGVyYWN0YWJsZSBmcm9tICcuL0ludGVyYWN0YWJsZSdcbmltcG9ydCBJbnRlcmFjdEV2ZW50LCB7IEV2ZW50UGhhc2UgfSBmcm9tICcuL0ludGVyYWN0RXZlbnQnXG5pbXBvcnQgUG9pbnRlckluZm8gZnJvbSAnLi9Qb2ludGVySW5mbydcbmltcG9ydCB7IEFjdGlvbk5hbWUgfSBmcm9tICcuL3Njb3BlJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbiB7XG4gIG5hbWU6IEFjdGlvbk5hbWVcbiAgYXhpcz86ICd4JyB8ICd5JyB8ICd4eSdcbiAgZWRnZXM/OiBQYXJ0aWFsPEludGVyYWN0LlJlY3Q+XG59XG5cbmV4cG9ydCBjbGFzcyBJbnRlcmFjdGlvbiB7XG4gIC8vIGN1cnJlbnQgaW50ZXJhY3RhYmxlIGJlaW5nIGludGVyYWN0ZWQgd2l0aFxuICB0YXJnZXQ6IEludGVyYWN0YWJsZSA9IG51bGxcblxuICAvLyB0aGUgdGFyZ2V0IGVsZW1lbnQgb2YgdGhlIGludGVyYWN0YWJsZVxuICBlbGVtZW50OiBFbGVtZW50ID0gbnVsbFxuXG4gIF9zaWduYWxzOiB1dGlscy5TaWduYWxzXG5cbiAgLy8gYWN0aW9uIHRoYXQncyByZWFkeSB0byBiZSBmaXJlZCBvbiBuZXh0IG1vdmUgZXZlbnRcbiAgcHJlcGFyZWQ6IEFjdGlvbiA9IHtcbiAgICBuYW1lIDogbnVsbCxcbiAgICBheGlzIDogbnVsbCxcbiAgICBlZGdlczogbnVsbCxcbiAgfVxuXG4gIHBvaW50ZXJUeXBlOiBzdHJpbmdcblxuICAvLyBrZWVwIHRyYWNrIG9mIGFkZGVkIHBvaW50ZXJzXG4gIHBvaW50ZXJzOiBQb2ludGVySW5mb1tdID0gW11cblxuICAvLyBwb2ludGVyZG93bi9tb3VzZWRvd24vdG91Y2hzdGFydCBldmVudFxuICBkb3duRXZlbnQ6IEludGVyYWN0LlBvaW50ZXJFdmVudFR5cGUgPSBudWxsXG5cbiAgZG93blBvaW50ZXI6IEludGVyYWN0LlBvaW50ZXJUeXBlID0ge30gYXMgSW50ZXJhY3QuUG9pbnRlclR5cGVcblxuICBfbGF0ZXN0UG9pbnRlcjoge1xuICAgIHBvaW50ZXI6IEV2ZW50VGFyZ2V0XG4gICAgZXZlbnQ6IEludGVyYWN0LlBvaW50ZXJFdmVudFR5cGVcbiAgICBldmVudFRhcmdldDogTm9kZSxcbiAgfSA9IHtcbiAgICBwb2ludGVyOiBudWxsLFxuICAgIGV2ZW50OiBudWxsLFxuICAgIGV2ZW50VGFyZ2V0OiBudWxsLFxuICB9XG5cbiAgLy8gcHJldmlvdXMgYWN0aW9uIGV2ZW50XG4gIHByZXZFdmVudDogSW50ZXJhY3RFdmVudCA9IG51bGxcblxuICBwb2ludGVySXNEb3duID0gZmFsc2VcbiAgcG9pbnRlcldhc01vdmVkID0gZmFsc2VcbiAgX2ludGVyYWN0aW5nID0gZmFsc2VcbiAgX2VuZGluZyA9IGZhbHNlXG5cbiAgc2ltdWxhdGlvbiA9IG51bGxcblxuICBnZXQgcG9pbnRlck1vdmVUb2xlcmFuY2UgKCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICAvKipcbiAgICogQGFsaWFzIEludGVyYWN0aW9uLnByb3RvdHlwZS5tb3ZlXG4gICAqL1xuICBkb01vdmUgPSB1dGlscy53YXJuT25jZShcbiAgICBmdW5jdGlvbiAodGhpczogSW50ZXJhY3Rpb24sIHNpZ25hbEFyZzogYW55KSB7XG4gICAgICB0aGlzLm1vdmUoc2lnbmFsQXJnKVxuICAgIH0sXG4gICAgJ1RoZSBpbnRlcmFjdGlvbi5kb01vdmUoKSBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBpbnRlcmFjdGlvbi5tb3ZlKCknKVxuXG4gIGNvb3JkcyA9IHtcbiAgICAvLyBTdGFydGluZyBJbnRlcmFjdEV2ZW50IHBvaW50ZXIgY29vcmRpbmF0ZXNcbiAgICBzdGFydDogdXRpbHMucG9pbnRlci5uZXdDb29yZHMoKSxcbiAgICAvLyBQcmV2aW91cyBuYXRpdmUgcG9pbnRlciBtb3ZlIGV2ZW50IGNvb3JkaW5hdGVzXG4gICAgcHJldjogdXRpbHMucG9pbnRlci5uZXdDb29yZHMoKSxcbiAgICAvLyBjdXJyZW50IG5hdGl2ZSBwb2ludGVyIG1vdmUgZXZlbnQgY29vcmRpbmF0ZXNcbiAgICBjdXI6IHV0aWxzLnBvaW50ZXIubmV3Q29vcmRzKCksXG4gICAgLy8gQ2hhbmdlIGluIGNvb3JkaW5hdGVzIGFuZCB0aW1lIG9mIHRoZSBwb2ludGVyXG4gICAgZGVsdGE6IHV0aWxzLnBvaW50ZXIubmV3Q29vcmRzKCksXG4gICAgLy8gcG9pbnRlciB2ZWxvY2l0eVxuICAgIHZlbG9jaXR5OiB1dGlscy5wb2ludGVyLm5ld0Nvb3JkcygpLFxuICB9XG5cbiAgLyoqICovXG4gIGNvbnN0cnVjdG9yICh7IHBvaW50ZXJUeXBlLCBzaWduYWxzIH06IHsgcG9pbnRlclR5cGU6IHN0cmluZywgc2lnbmFsczogdXRpbHMuU2lnbmFscyB9KSB7XG4gICAgdGhpcy5fc2lnbmFscyA9IHNpZ25hbHNcbiAgICB0aGlzLnBvaW50ZXJUeXBlID0gcG9pbnRlclR5cGVcblxuICAgIHRoaXMuX3NpZ25hbHMuZmlyZSgnbmV3JywgdGhpcylcbiAgfVxuXG4gIHBvaW50ZXJEb3duIChwb2ludGVyLCBldmVudCwgZXZlbnRUYXJnZXQpIHtcbiAgICBjb25zdCBwb2ludGVySW5kZXggPSB0aGlzLnVwZGF0ZVBvaW50ZXIocG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0LCB0cnVlKVxuXG4gICAgdGhpcy5fc2lnbmFscy5maXJlKCdkb3duJywge1xuICAgICAgcG9pbnRlcixcbiAgICAgIGV2ZW50LFxuICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICBwb2ludGVySW5kZXgsXG4gICAgICBpbnRlcmFjdGlvbjogdGhpcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGBgYGpzXG4gICAqIGludGVyYWN0KHRhcmdldClcbiAgICogICAuZHJhZ2dhYmxlKHtcbiAgICogICAgIC8vIGRpc2FibGUgdGhlIGRlZmF1bHQgZHJhZyBzdGFydCBieSBkb3duLT5tb3ZlXG4gICAqICAgICBtYW51YWxTdGFydDogdHJ1ZVxuICAgKiAgIH0pXG4gICAqICAgLy8gc3RhcnQgZHJhZ2dpbmcgYWZ0ZXIgdGhlIHVzZXIgaG9sZHMgdGhlIHBvaW50ZXIgZG93blxuICAgKiAgIC5vbignaG9sZCcsIGZ1bmN0aW9uIChldmVudCkge1xuICAgKiAgICAgdmFyIGludGVyYWN0aW9uID0gZXZlbnQuaW50ZXJhY3Rpb247XG4gICAqXG4gICAqICAgICBpZiAoIWludGVyYWN0aW9uLmludGVyYWN0aW5nKCkpIHtcbiAgICogICAgICAgaW50ZXJhY3Rpb24uc3RhcnQoeyBuYW1lOiAnZHJhZycgfSxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuaW50ZXJhY3RhYmxlLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICogICAgIH1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBTdGFydCBhbiBhY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gSW50ZXJhY3RhYmxlIGFuZCBFbGVtZW50IGFzIHRhcnRnZXRzLiBUaGVcbiAgICogYWN0aW9uIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhlIHRhcmdldCBJbnRlcmFjdGFibGUgYW5kIGFuIGFwcHJvcHJpYXRlXG4gICAqIG51bWJlciBvZiBwb2ludGVycyBtdXN0IGJlIGhlbGQgZG93biAtIDEgZm9yIGRyYWcvcmVzaXplLCAyIGZvciBnZXN0dXJlLlxuICAgKlxuICAgKiBVc2UgaXQgd2l0aCBgaW50ZXJhY3RhYmxlLjxhY3Rpb24+YWJsZSh7IG1hbnVhbFN0YXJ0OiBmYWxzZSB9KWAgdG8gYWx3YXlzXG4gICAqIFtzdGFydCBhY3Rpb25zIG1hbnVhbGx5XShodHRwczovL2dpdGh1Yi5jb20vdGF5ZS9pbnRlcmFjdC5qcy9pc3N1ZXMvMTE0KVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYWN0aW9uICAgVGhlIGFjdGlvbiB0byBiZSBwZXJmb3JtZWQgLSBkcmFnLCByZXNpemUsIGV0Yy5cbiAgICogQHBhcmFtIHtJbnRlcmFjdGFibGV9IHRhcmdldCAgVGhlIEludGVyYWN0YWJsZSB0byB0YXJnZXRcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRoZSBET00gRWxlbWVudCB0byB0YXJnZXRcbiAgICogQHJldHVybiB7b2JqZWN0fSBpbnRlcmFjdFxuICAgKi9cbiAgc3RhcnQgKGFjdGlvbiwgdGFyZ2V0LCBlbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuaW50ZXJhY3RpbmcoKSB8fFxuICAgICAgICAhdGhpcy5wb2ludGVySXNEb3duIHx8XG4gICAgICAgIHRoaXMucG9pbnRlcnMubGVuZ3RoIDwgKGFjdGlvbi5uYW1lID09PSAnZ2VzdHVyZScgPyAyIDogMSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHV0aWxzLmNvcHlBY3Rpb24odGhpcy5wcmVwYXJlZCwgYWN0aW9uKVxuXG4gICAgdGhpcy50YXJnZXQgICAgICAgPSB0YXJnZXRcbiAgICB0aGlzLmVsZW1lbnQgICAgICA9IGVsZW1lbnRcbiAgICB0aGlzLl9pbnRlcmFjdGluZyA9IHRoaXMuX2RvUGhhc2Uoe1xuICAgICAgaW50ZXJhY3Rpb246IHRoaXMsXG4gICAgICBldmVudDogdGhpcy5kb3duRXZlbnQsXG4gICAgICBwaGFzZTogJ3N0YXJ0JyxcbiAgICB9KVxuICB9XG5cbiAgcG9pbnRlck1vdmUgKHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCkge1xuICAgIGlmICghdGhpcy5zaW11bGF0aW9uKSB7XG4gICAgICB0aGlzLnVwZGF0ZVBvaW50ZXIocG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0LCBmYWxzZSlcbiAgICAgIHV0aWxzLnBvaW50ZXIuc2V0Q29vcmRzKHRoaXMuY29vcmRzLmN1ciwgdGhpcy5wb2ludGVycy5tYXAoKHApID0+IHAucG9pbnRlcikpXG4gICAgfVxuXG4gICAgY29uc3QgZHVwbGljYXRlTW92ZSA9ICh0aGlzLmNvb3Jkcy5jdXIucGFnZS54ID09PSB0aGlzLmNvb3Jkcy5wcmV2LnBhZ2UueCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb29yZHMuY3VyLnBhZ2UueSA9PT0gdGhpcy5jb29yZHMucHJldi5wYWdlLnkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29vcmRzLmN1ci5jbGllbnQueCA9PT0gdGhpcy5jb29yZHMucHJldi5jbGllbnQueCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb29yZHMuY3VyLmNsaWVudC55ID09PSB0aGlzLmNvb3Jkcy5wcmV2LmNsaWVudC55KVxuXG4gICAgbGV0IGR4XG4gICAgbGV0IGR5XG5cbiAgICAvLyByZWdpc3RlciBtb3ZlbWVudCBncmVhdGVyIHRoYW4gcG9pbnRlck1vdmVUb2xlcmFuY2VcbiAgICBpZiAodGhpcy5wb2ludGVySXNEb3duICYmICF0aGlzLnBvaW50ZXJXYXNNb3ZlZCkge1xuICAgICAgZHggPSB0aGlzLmNvb3Jkcy5jdXIuY2xpZW50LnggLSB0aGlzLmNvb3Jkcy5zdGFydC5jbGllbnQueFxuICAgICAgZHkgPSB0aGlzLmNvb3Jkcy5jdXIuY2xpZW50LnkgLSB0aGlzLmNvb3Jkcy5zdGFydC5jbGllbnQueVxuXG4gICAgICB0aGlzLnBvaW50ZXJXYXNNb3ZlZCA9IHV0aWxzLmh5cG90KGR4LCBkeSkgPiB0aGlzLnBvaW50ZXJNb3ZlVG9sZXJhbmNlXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmFsQXJnID0ge1xuICAgICAgcG9pbnRlcixcbiAgICAgIHBvaW50ZXJJbmRleDogdGhpcy5nZXRQb2ludGVySW5kZXgocG9pbnRlciksXG4gICAgICBldmVudCxcbiAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgZHgsXG4gICAgICBkeSxcbiAgICAgIGR1cGxpY2F0ZTogZHVwbGljYXRlTW92ZSxcbiAgICAgIGludGVyYWN0aW9uOiB0aGlzLFxuICAgIH1cblxuICAgIGlmICghZHVwbGljYXRlTW92ZSkge1xuICAgICAgLy8gc2V0IHBvaW50ZXIgY29vcmRpbmF0ZSwgdGltZSBjaGFuZ2VzIGFuZCB2ZWxvY2l0eVxuICAgICAgdXRpbHMucG9pbnRlci5zZXRDb29yZERlbHRhcyh0aGlzLmNvb3Jkcy5kZWx0YSwgdGhpcy5jb29yZHMucHJldiwgdGhpcy5jb29yZHMuY3VyKVxuICAgICAgdXRpbHMucG9pbnRlci5zZXRDb29yZFZlbG9jaXR5KHRoaXMuY29vcmRzLnZlbG9jaXR5LCB0aGlzLmNvb3Jkcy5kZWx0YSlcbiAgICB9XG5cbiAgICB0aGlzLl9zaWduYWxzLmZpcmUoJ21vdmUnLCBzaWduYWxBcmcpXG5cbiAgICBpZiAoIWR1cGxpY2F0ZU1vdmUpIHtcbiAgICAgIC8vIGlmIGludGVyYWN0aW5nLCBmaXJlIGFuICdhY3Rpb24tbW92ZScgc2lnbmFsIGV0Y1xuICAgICAgaWYgKHRoaXMuaW50ZXJhY3RpbmcoKSkge1xuICAgICAgICB0aGlzLm1vdmUoc2lnbmFsQXJnKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wb2ludGVyV2FzTW92ZWQpIHtcbiAgICAgICAgdXRpbHMucG9pbnRlci5jb3B5Q29vcmRzKHRoaXMuY29vcmRzLnByZXYsIHRoaXMuY29vcmRzLmN1cilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogYGBganNcbiAgICogaW50ZXJhY3QodGFyZ2V0KVxuICAgKiAgIC5kcmFnZ2FibGUodHJ1ZSlcbiAgICogICAub24oJ2RyYWdtb3ZlJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAqICAgICBpZiAoc29tZUNvbmRpdGlvbikge1xuICAgKiAgICAgICAvLyBjaGFuZ2UgdGhlIHNuYXAgc2V0dGluZ3NcbiAgICogICAgICAgZXZlbnQuaW50ZXJhY3RhYmxlLmRyYWdnYWJsZSh7IHNuYXA6IHsgdGFyZ2V0czogW10gfX0pO1xuICAgKiAgICAgICAvLyBmaXJlIGFub3RoZXIgbW92ZSBldmVudCB3aXRoIHJlLWNhbGN1bGF0ZWQgc25hcFxuICAgKiAgICAgICBldmVudC5pbnRlcmFjdGlvbi5tb3ZlKCk7XG4gICAqICAgICB9XG4gICAqICAgfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBGb3JjZSBhIG1vdmUgb2YgdGhlIGN1cnJlbnQgYWN0aW9uIGF0IHRoZSBzYW1lIGNvb3JkaW5hdGVzLiBVc2VmdWwgaWZcbiAgICogc25hcC9yZXN0cmljdCBoYXMgYmVlbiBjaGFuZ2VkIGFuZCB5b3Ugd2FudCBhIG1vdmVtZW50IHdpdGggdGhlIG5ld1xuICAgKiBzZXR0aW5ncy5cbiAgICovXG4gIG1vdmUgKHNpZ25hbEFyZz8pIHtcbiAgICBzaWduYWxBcmcgPSB1dGlscy5leHRlbmQoe1xuICAgICAgcG9pbnRlcjogdGhpcy5fbGF0ZXN0UG9pbnRlci5wb2ludGVyLFxuICAgICAgZXZlbnQ6IHRoaXMuX2xhdGVzdFBvaW50ZXIuZXZlbnQsXG4gICAgICBldmVudFRhcmdldDogdGhpcy5fbGF0ZXN0UG9pbnRlci5ldmVudFRhcmdldCxcbiAgICAgIGludGVyYWN0aW9uOiB0aGlzLFxuICAgICAgbm9CZWZvcmU6IGZhbHNlLFxuICAgIH0sIHNpZ25hbEFyZyB8fCB7fSlcblxuICAgIHNpZ25hbEFyZy5waGFzZSA9ICdtb3ZlJ1xuXG4gICAgdGhpcy5fZG9QaGFzZShzaWduYWxBcmcpXG4gIH1cblxuICAvLyBFbmQgaW50ZXJhY3QgbW92ZSBldmVudHMgYW5kIHN0b3AgYXV0by1zY3JvbGwgdW5sZXNzIHNpbXVsYXRpb24gaXMgcnVubmluZ1xuICBwb2ludGVyVXAgKHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCwgY3VyRXZlbnRUYXJnZXQpIHtcbiAgICBsZXQgcG9pbnRlckluZGV4ID0gdGhpcy5nZXRQb2ludGVySW5kZXgocG9pbnRlcilcblxuICAgIGlmIChwb2ludGVySW5kZXggPT09IC0xKSB7XG4gICAgICBwb2ludGVySW5kZXggPSB0aGlzLnVwZGF0ZVBvaW50ZXIocG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0LCBmYWxzZSlcbiAgICB9XG5cbiAgICB0aGlzLl9zaWduYWxzLmZpcmUoL2NhbmNlbCQvaS50ZXN0KGV2ZW50LnR5cGUpID8gJ2NhbmNlbCcgOiAndXAnLCB7XG4gICAgICBwb2ludGVyLFxuICAgICAgcG9pbnRlckluZGV4LFxuICAgICAgZXZlbnQsXG4gICAgICBldmVudFRhcmdldCxcbiAgICAgIGN1ckV2ZW50VGFyZ2V0LFxuICAgICAgaW50ZXJhY3Rpb246IHRoaXMsXG4gICAgfSlcblxuICAgIGlmICghdGhpcy5zaW11bGF0aW9uKSB7XG4gICAgICB0aGlzLmVuZChldmVudClcbiAgICB9XG5cbiAgICB0aGlzLnBvaW50ZXJJc0Rvd24gPSBmYWxzZVxuICAgIHRoaXMucmVtb3ZlUG9pbnRlcihwb2ludGVyLCBldmVudClcbiAgfVxuXG4gIGRvY3VtZW50Qmx1ciAoZXZlbnQpIHtcbiAgICB0aGlzLmVuZChldmVudClcbiAgICB0aGlzLl9zaWduYWxzLmZpcmUoJ2JsdXInLCB7IGV2ZW50LCBpbnRlcmFjdGlvbjogdGhpcyB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGBgYGpzXG4gICAqIGludGVyYWN0KHRhcmdldClcbiAgICogICAuZHJhZ2dhYmxlKHRydWUpXG4gICAqICAgLm9uKCdtb3ZlJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAqICAgICBpZiAoZXZlbnQucGFnZVggPiAxMDAwKSB7XG4gICAqICAgICAgIC8vIGVuZCB0aGUgY3VycmVudCBhY3Rpb25cbiAgICogICAgICAgZXZlbnQuaW50ZXJhY3Rpb24uZW5kKCk7XG4gICAqICAgICAgIC8vIHN0b3AgYWxsIGZ1cnRoZXIgbGlzdGVuZXJzIGZyb20gYmVpbmcgY2FsbGVkXG4gICAqICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgKiAgICAgfVxuICAgKiAgIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHtQb2ludGVyRXZlbnR9IFtldmVudF1cbiAgICovXG4gIGVuZCAoZXZlbnQpIHtcbiAgICB0aGlzLl9lbmRpbmcgPSB0cnVlXG4gICAgZXZlbnQgPSBldmVudCB8fCB0aGlzLl9sYXRlc3RQb2ludGVyLmV2ZW50XG4gICAgbGV0IGVuZFBoYXNlUmVzdWx0XG5cbiAgICBpZiAodGhpcy5pbnRlcmFjdGluZygpKSB7XG4gICAgICBlbmRQaGFzZVJlc3VsdCA9IHRoaXMuX2RvUGhhc2Uoe1xuICAgICAgICBldmVudCxcbiAgICAgICAgaW50ZXJhY3Rpb246IHRoaXMsXG4gICAgICAgIHBoYXNlOiAnZW5kJyxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy5fZW5kaW5nID0gZmFsc2VcblxuICAgIGlmIChlbmRQaGFzZVJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zdG9wKClcbiAgICB9XG4gIH1cblxuICBjdXJyZW50QWN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5faW50ZXJhY3RpbmcgPyB0aGlzLnByZXBhcmVkLm5hbWUgOiBudWxsXG4gIH1cblxuICBpbnRlcmFjdGluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludGVyYWN0aW5nXG4gIH1cblxuICAvKiogKi9cbiAgc3RvcCAoKSB7XG4gICAgdGhpcy5fc2lnbmFscy5maXJlKCdzdG9wJywgeyBpbnRlcmFjdGlvbjogdGhpcyB9KVxuXG4gICAgdGhpcy50YXJnZXQgPSB0aGlzLmVsZW1lbnQgPSBudWxsXG5cbiAgICB0aGlzLl9pbnRlcmFjdGluZyA9IGZhbHNlXG4gICAgdGhpcy5wcmVwYXJlZC5uYW1lID0gdGhpcy5wcmV2RXZlbnQgPSBudWxsXG4gIH1cblxuICBnZXRQb2ludGVySW5kZXggKHBvaW50ZXIpIHtcbiAgICBjb25zdCBwb2ludGVySWQgPSB1dGlscy5wb2ludGVyLmdldFBvaW50ZXJJZChwb2ludGVyKVxuXG4gICAgLy8gbW91c2UgYW5kIHBlbiBpbnRlcmFjdGlvbnMgbWF5IGhhdmUgb25seSBvbmUgcG9pbnRlclxuICAgIHJldHVybiAodGhpcy5wb2ludGVyVHlwZSA9PT0gJ21vdXNlJyB8fCB0aGlzLnBvaW50ZXJUeXBlID09PSAncGVuJylcbiAgICAgID8gdGhpcy5wb2ludGVycy5sZW5ndGggLSAxXG4gICAgICA6IHV0aWxzLmFyci5maW5kSW5kZXgodGhpcy5wb2ludGVycywgKGN1clBvaW50ZXIpID0+IGN1clBvaW50ZXIuaWQgPT09IHBvaW50ZXJJZClcbiAgfVxuXG4gIGdldFBvaW50ZXJJbmZvIChwb2ludGVyKSB7XG4gICAgcmV0dXJuIHRoaXMucG9pbnRlcnNbdGhpcy5nZXRQb2ludGVySW5kZXgocG9pbnRlcildXG4gIH1cblxuICB1cGRhdGVQb2ludGVyIChwb2ludGVyLCBldmVudCwgZXZlbnRUYXJnZXQsIGRvd24pIHtcbiAgICBjb25zdCBpZCA9IHV0aWxzLnBvaW50ZXIuZ2V0UG9pbnRlcklkKHBvaW50ZXIpXG4gICAgbGV0IHBvaW50ZXJJbmRleCA9IHRoaXMuZ2V0UG9pbnRlckluZGV4KHBvaW50ZXIpXG4gICAgbGV0IHBvaW50ZXJJbmZvID0gdGhpcy5wb2ludGVyc1twb2ludGVySW5kZXhdXG5cbiAgICBkb3duID0gZG93biA9PT0gZmFsc2VcbiAgICAgID8gZmFsc2VcbiAgICAgIDogZG93biB8fCAvKGRvd258c3RhcnQpJC9pLnRlc3QoZXZlbnQudHlwZSlcblxuICAgIGlmICghcG9pbnRlckluZm8pIHtcbiAgICAgIHBvaW50ZXJJbmZvID0gbmV3IFBvaW50ZXJJbmZvKFxuICAgICAgICBpZCxcbiAgICAgICAgcG9pbnRlcixcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG51bGwsXG4gICAgICApXG5cbiAgICAgIHBvaW50ZXJJbmRleCA9IHRoaXMucG9pbnRlcnMubGVuZ3RoXG4gICAgICB0aGlzLnBvaW50ZXJzLnB1c2gocG9pbnRlckluZm8pXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcG9pbnRlckluZm8ucG9pbnRlciA9IHBvaW50ZXJcbiAgICB9XG5cbiAgICBpZiAoZG93bikge1xuICAgICAgdGhpcy5wb2ludGVySXNEb3duID0gdHJ1ZVxuXG4gICAgICBpZiAoIXRoaXMuaW50ZXJhY3RpbmcoKSkge1xuICAgICAgICB1dGlscy5wb2ludGVyLnNldENvb3Jkcyh0aGlzLmNvb3Jkcy5zdGFydCwgdGhpcy5wb2ludGVycy5tYXAoKHApID0+IHAucG9pbnRlcikpXG5cbiAgICAgICAgdXRpbHMucG9pbnRlci5jb3B5Q29vcmRzKHRoaXMuY29vcmRzLmN1ciwgdGhpcy5jb29yZHMuc3RhcnQpXG4gICAgICAgIHV0aWxzLnBvaW50ZXIuY29weUNvb3Jkcyh0aGlzLmNvb3Jkcy5wcmV2LCB0aGlzLmNvb3Jkcy5zdGFydClcbiAgICAgICAgdXRpbHMucG9pbnRlci5wb2ludGVyRXh0ZW5kKHRoaXMuZG93blBvaW50ZXIsIHBvaW50ZXIpXG5cbiAgICAgICAgdGhpcy5kb3duRXZlbnQgPSBldmVudFxuICAgICAgICBwb2ludGVySW5mby5kb3duVGltZSA9IHRoaXMuY29vcmRzLmN1ci50aW1lU3RhbXBcbiAgICAgICAgcG9pbnRlckluZm8uZG93blRhcmdldCA9IGV2ZW50VGFyZ2V0XG5cbiAgICAgICAgdGhpcy5wb2ludGVyV2FzTW92ZWQgPSBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUxhdGVzdFBvaW50ZXIocG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0KVxuXG4gICAgdGhpcy5fc2lnbmFscy5maXJlKCd1cGRhdGUtcG9pbnRlcicsIHtcbiAgICAgIHBvaW50ZXIsXG4gICAgICBldmVudCxcbiAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgZG93bixcbiAgICAgIHBvaW50ZXJJbmZvLFxuICAgICAgcG9pbnRlckluZGV4LFxuICAgICAgaW50ZXJhY3Rpb246IHRoaXMsXG4gICAgfSlcblxuICAgIHJldHVybiBwb2ludGVySW5kZXhcbiAgfVxuXG4gIHJlbW92ZVBvaW50ZXIgKHBvaW50ZXIsIGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRlckluZGV4ID0gdGhpcy5nZXRQb2ludGVySW5kZXgocG9pbnRlcilcblxuICAgIGlmIChwb2ludGVySW5kZXggPT09IC0xKSB7IHJldHVybiB9XG5cbiAgICBjb25zdCBwb2ludGVySW5mbyA9IHRoaXMucG9pbnRlcnNbcG9pbnRlckluZGV4XVxuXG4gICAgdGhpcy5fc2lnbmFscy5maXJlKCdyZW1vdmUtcG9pbnRlcicsIHtcbiAgICAgIHBvaW50ZXIsXG4gICAgICBldmVudCxcbiAgICAgIHBvaW50ZXJJbmRleCxcbiAgICAgIHBvaW50ZXJJbmZvLFxuICAgICAgaW50ZXJhY3Rpb246IHRoaXMsXG4gICAgfSlcblxuICAgIHRoaXMucG9pbnRlcnMuc3BsaWNlKHBvaW50ZXJJbmRleCwgMSlcbiAgfVxuXG4gIF91cGRhdGVMYXRlc3RQb2ludGVyIChwb2ludGVyLCBldmVudCwgZXZlbnRUYXJnZXQpIHtcbiAgICB0aGlzLl9sYXRlc3RQb2ludGVyLnBvaW50ZXIgPSBwb2ludGVyXG4gICAgdGhpcy5fbGF0ZXN0UG9pbnRlci5ldmVudCA9IGV2ZW50XG4gICAgdGhpcy5fbGF0ZXN0UG9pbnRlci5ldmVudFRhcmdldCA9IGV2ZW50VGFyZ2V0XG4gIH1cblxuICBfY3JlYXRlUHJlcGFyZWRFdmVudCAoZXZlbnQ6IEludGVyYWN0LlBvaW50ZXJFdmVudFR5cGUsIHBoYXNlOiBFdmVudFBoYXNlLCBwcmVFbmQ6IGJvb2xlYW4sIHR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IGFjdGlvbk5hbWUgPSB0aGlzLnByZXBhcmVkLm5hbWVcblxuICAgIHJldHVybiBuZXcgSW50ZXJhY3RFdmVudCh0aGlzLCBldmVudCwgYWN0aW9uTmFtZSwgcGhhc2UsIHRoaXMuZWxlbWVudCwgbnVsbCwgcHJlRW5kLCB0eXBlKVxuICB9XG5cbiAgX2ZpcmVFdmVudCAoaUV2ZW50KSB7XG4gICAgdGhpcy50YXJnZXQuZmlyZShpRXZlbnQpXG5cbiAgICBpZiAoIXRoaXMucHJldkV2ZW50IHx8IGlFdmVudC50aW1lU3RhbXAgPj0gdGhpcy5wcmV2RXZlbnQudGltZVN0YW1wKSB7XG4gICAgICB0aGlzLnByZXZFdmVudCA9IGlFdmVudFxuICAgIH1cbiAgfVxuXG4gIF9kb1BoYXNlIChzaWduYWxBcmcpIHtcbiAgICBjb25zdCB7IGV2ZW50LCBwaGFzZSwgcHJlRW5kLCB0eXBlIH0gPSBzaWduYWxBcmdcblxuICAgIGlmICghc2lnbmFsQXJnLm5vQmVmb3JlKSB7XG4gICAgICBjb25zdCBiZWZvcmVSZXN1bHQgPSB0aGlzLl9zaWduYWxzLmZpcmUoYGJlZm9yZS1hY3Rpb24tJHtwaGFzZX1gLCBzaWduYWxBcmcpXG5cbiAgICAgIGlmIChiZWZvcmVSZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlFdmVudCA9IHNpZ25hbEFyZy5pRXZlbnQgPSB0aGlzLl9jcmVhdGVQcmVwYXJlZEV2ZW50KGV2ZW50LCBwaGFzZSwgcHJlRW5kLCB0eXBlKVxuXG4gICAgdGhpcy5fc2lnbmFscy5maXJlKGBhY3Rpb24tJHtwaGFzZX1gLCBzaWduYWxBcmcpXG5cbiAgICB0aGlzLl9maXJlRXZlbnQoaUV2ZW50KVxuXG4gICAgdGhpcy5fc2lnbmFscy5maXJlKGBhZnRlci1hY3Rpb24tJHtwaGFzZX1gLCBzaWduYWxBcmcpXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVyYWN0aW9uXG5leHBvcnQgeyBQb2ludGVySW5mbyB9XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJJbnRlcmFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFBO0FBRTFDLE9BQU8sYUFBYSxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDM0QsT0FBTyxXQUFXLE1BQU0sZUFBZSxDQUFBO0FBV3ZDLE1BQU0sT0FBTyxXQUFXO0lBd0V0QixNQUFNO0lBQ04sWUFBYSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQW9EO1FBeEV2Riw2Q0FBNkM7UUFDN0MsV0FBTSxHQUFpQixJQUFJLENBQUE7UUFFM0IseUNBQXlDO1FBQ3pDLFlBQU8sR0FBWSxJQUFJLENBQUE7UUFJdkIscURBQXFEO1FBQ3JELGFBQVEsR0FBbUI7WUFDekIsSUFBSSxFQUFHLElBQUk7WUFDWCxJQUFJLEVBQUcsSUFBSTtZQUNYLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQTtRQUlELCtCQUErQjtRQUMvQixhQUFRLEdBQWtCLEVBQUUsQ0FBQTtRQUU1Qix5Q0FBeUM7UUFDekMsY0FBUyxHQUE4QixJQUFJLENBQUE7UUFFM0MsZ0JBQVcsR0FBeUIsRUFBMEIsQ0FBQTtRQUU5RCxtQkFBYyxHQUlWO1lBQ0YsT0FBTyxFQUFFLElBQUk7WUFDYixLQUFLLEVBQUUsSUFBSTtZQUNYLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQUE7UUFFRCx3QkFBd0I7UUFDeEIsY0FBUyxHQUFxQixJQUFJLENBQUE7UUFFbEMsa0JBQWEsR0FBRyxLQUFLLENBQUE7UUFDckIsb0JBQWUsR0FBRyxLQUFLLENBQUE7UUFDdkIsaUJBQVksR0FBRyxLQUFLLENBQUE7UUFDcEIsWUFBTyxHQUFHLEtBQUssQ0FBQTtRQUVmLGVBQVUsR0FBRyxJQUFJLENBQUE7UUFNakI7O1dBRUc7UUFDSCxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FDckIsVUFBNkIsU0FBYztZQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3RCLENBQUMsRUFDRCx3RUFBd0UsQ0FBQyxDQUFBO1FBRTNFLFdBQU0sR0FBRztZQUNQLDZDQUE2QztZQUM3QyxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDaEMsaURBQWlEO1lBQ2pELElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUMvQixnREFBZ0Q7WUFDaEQsR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQzlCLGdEQUFnRDtZQUNoRCxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDaEMsbUJBQW1CO1lBQ25CLFFBQVEsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtTQUNwQyxDQUFBO1FBSUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUE7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7UUFFOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQWhDRCxJQUFJLG9CQUFvQjtRQUN0QixPQUFPLENBQUMsQ0FBQTtJQUNWLENBQUM7SUFnQ0QsV0FBVyxDQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVztRQUN0QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBRTFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUN6QixPQUFPO1lBQ1AsS0FBSztZQUNMLFdBQVc7WUFDWCxZQUFZO1lBQ1osV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0E4Qkc7SUFDSCxLQUFLLENBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPO1FBQzVCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixDQUFDLElBQUksQ0FBQyxhQUFhO1lBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDOUQsT0FBTTtTQUNQO1FBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBRXZDLElBQUksQ0FBQyxNQUFNLEdBQVMsTUFBTSxDQUFBO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQVEsT0FBTyxDQUFBO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNoQyxXQUFXLEVBQUUsSUFBSTtZQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDckIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO1NBQ3hCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxXQUFXLENBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDdEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO1NBQzlFO1FBRUQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUU5RSxJQUFJLEVBQUUsQ0FBQTtRQUNOLElBQUksRUFBRSxDQUFBO1FBRU4sc0RBQXNEO1FBQ3RELElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDL0MsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtZQUMxRCxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1lBRTFELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFBO1NBQ3ZFO1FBRUQsTUFBTSxTQUFTLEdBQUc7WUFDaEIsT0FBTztZQUNQLFlBQVksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQztZQUMzQyxLQUFLO1lBQ0wsV0FBVztZQUNYLEVBQUU7WUFDRixFQUFFO1lBQ0YsU0FBUyxFQUFFLGFBQWE7WUFDeEIsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQTtRQUVELElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDbEIsb0RBQW9EO1lBQ3BELEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDbEYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1NBQ3hFO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBRXJDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDbEIsbURBQW1EO1lBQ25ELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO2FBQ3JCO1lBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUN4QixLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2FBQzVEO1NBQ0Y7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O09BaUJHO0lBQ0gsSUFBSSxDQUFFLFNBQVU7UUFDZCxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPO1lBQ3BDLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUs7WUFDaEMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVztZQUM1QyxXQUFXLEVBQUUsSUFBSTtZQUNqQixRQUFRLEVBQUUsS0FBSztTQUNoQixFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUVuQixTQUFTLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUE7UUFFakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUMxQixDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLFNBQVMsQ0FBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxjQUFjO1FBQ3BELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFaEQsSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDdkIsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUE7U0FDdEU7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDaEUsT0FBTztZQUNQLFlBQVk7WUFDWixLQUFLO1lBQ0wsV0FBVztZQUNYLGNBQWM7WUFDZCxXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO1NBQ2hCO1FBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUE7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDcEMsQ0FBQztJQUVELFlBQVksQ0FBRSxLQUFLO1FBQ2pCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFDMUQsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7T0FlRztJQUNILEdBQUcsQ0FBRSxLQUFpQztRQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtRQUNuQixLQUFLLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFBO1FBQzFDLElBQUksY0FBYyxDQUFBO1FBRWxCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3RCLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUM3QixLQUFLO2dCQUNMLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixLQUFLLEVBQUUsVUFBVSxDQUFDLEdBQUc7YUFDdEIsQ0FBQyxDQUFBO1NBQ0g7UUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtRQUVwQixJQUFJLGNBQWMsS0FBSyxJQUFJLEVBQUU7WUFDM0IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBO1NBQ1o7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUN0RCxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQTtJQUMxQixDQUFDO0lBRUQsTUFBTTtJQUNOLElBQUk7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUVqRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO1FBRWpDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFBO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO0lBQzVDLENBQUM7SUFFRCxlQUFlLENBQUUsT0FBTztRQUN0QixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUVyRCx1REFBdUQ7UUFDdkQsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDO1lBQ2pFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQzFCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFBO0lBQ3JGLENBQUM7SUFFRCxjQUFjLENBQUUsT0FBTztRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQ3JELENBQUM7SUFFRCxhQUFhLENBQUUsT0FBNkIsRUFBRSxLQUFnQyxFQUFFLFdBQXdDLEVBQUUsSUFBYztRQUN0SSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUM5QyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ2hELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUE7UUFFN0MsSUFBSSxHQUFHLElBQUksS0FBSyxLQUFLO1lBQ25CLENBQUMsQ0FBQyxLQUFLO1lBQ1AsQ0FBQyxDQUFDLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRTdDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsV0FBVyxHQUFHLElBQUksV0FBVyxDQUMzQixFQUFFLEVBQ0YsT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLEVBQ0osSUFBSSxDQUNMLENBQUE7WUFFRCxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUE7WUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7U0FDaEM7YUFDSTtZQUNILFdBQVcsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO1NBQzlCO1FBRUQsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQTtZQUV6QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUN2QixLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7Z0JBRS9FLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBQzVELEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBQzdELEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUE7Z0JBRXRELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFBO2dCQUN0QixXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQTtnQkFDaEQsV0FBVyxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUE7Z0JBRXBDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFBO2FBQzdCO1NBQ0Y7UUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQTtRQUV0RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNuQyxPQUFPO1lBQ1AsS0FBSztZQUNMLFdBQVc7WUFDWCxJQUFJO1lBQ0osV0FBVztZQUNYLFlBQVk7WUFDWixXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFDLENBQUE7UUFFRixPQUFPLFlBQVksQ0FBQTtJQUNyQixDQUFDO0lBRUQsYUFBYSxDQUFFLE9BQU8sRUFBRSxLQUFLO1FBQzNCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFbEQsSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFBRSxPQUFNO1NBQUU7UUFFbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUUvQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNuQyxPQUFPO1lBQ1AsS0FBSztZQUNMLFlBQVk7WUFDWixXQUFXO1lBQ1gsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7SUFFRCxvQkFBb0IsQ0FBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVc7UUFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO1FBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7SUFDL0MsQ0FBQztJQUVELG9CQUFvQixDQUFFLEtBQWdDLEVBQUUsS0FBaUIsRUFBRSxNQUFlLEVBQUUsSUFBWTtRQUN0RyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQTtRQUVyQyxPQUFPLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDNUYsQ0FBQztJQUVELFVBQVUsQ0FBRSxNQUFNO1FBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRXhCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7WUFDbkUsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUE7U0FDeEI7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFFLFNBQXNDO1FBQzlDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUE7UUFFaEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUU7WUFDdkIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEtBQUssRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFBO1lBRTVFLElBQUksWUFBWSxLQUFLLEtBQUssRUFBRTtnQkFDMUIsT0FBTyxLQUFLLENBQUE7YUFDYjtTQUNGO1FBRUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFFdkYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUVoRCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRXZCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixLQUFLLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUV0RCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7Q0FDRjtBQUVELGVBQWUsV0FBVyxDQUFBO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0aWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzJ1xuaW1wb3J0IEludGVyYWN0YWJsZSBmcm9tICcuL0ludGVyYWN0YWJsZSdcbmltcG9ydCBJbnRlcmFjdEV2ZW50LCB7IEV2ZW50UGhhc2UgfSBmcm9tICcuL0ludGVyYWN0RXZlbnQnXG5pbXBvcnQgUG9pbnRlckluZm8gZnJvbSAnLi9Qb2ludGVySW5mbydcbmltcG9ydCB7IEFjdGlvbk5hbWUgfSBmcm9tICcuL3Njb3BlJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvblByb3BzPFQgZXh0ZW5kcyBBY3Rpb25OYW1lID0gYW55PiB7XG4gIG5hbWU6IFRcbiAgYXhpcz86ICd4JyB8ICd5JyB8ICd4eSdcbiAgZWRnZXM/OiB7XG4gICAgW2VkZ2UgaW4ga2V5b2YgSW50ZXJhY3QuUmVjdF0/OiBib29sZWFuXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludGVyYWN0aW9uPFQgZXh0ZW5kcyBBY3Rpb25OYW1lID0gYW55PiB7XG4gIC8vIGN1cnJlbnQgaW50ZXJhY3RhYmxlIGJlaW5nIGludGVyYWN0ZWQgd2l0aFxuICB0YXJnZXQ6IEludGVyYWN0YWJsZSA9IG51bGxcblxuICAvLyB0aGUgdGFyZ2V0IGVsZW1lbnQgb2YgdGhlIGludGVyYWN0YWJsZVxuICBlbGVtZW50OiBFbGVtZW50ID0gbnVsbFxuXG4gIF9zaWduYWxzOiB1dGlscy5TaWduYWxzXG5cbiAgLy8gYWN0aW9uIHRoYXQncyByZWFkeSB0byBiZSBmaXJlZCBvbiBuZXh0IG1vdmUgZXZlbnRcbiAgcHJlcGFyZWQ6IEFjdGlvblByb3BzPFQ+ID0ge1xuICAgIG5hbWUgOiBudWxsLFxuICAgIGF4aXMgOiBudWxsLFxuICAgIGVkZ2VzOiBudWxsLFxuICB9XG5cbiAgcG9pbnRlclR5cGU6IHN0cmluZ1xuXG4gIC8vIGtlZXAgdHJhY2sgb2YgYWRkZWQgcG9pbnRlcnNcbiAgcG9pbnRlcnM6IFBvaW50ZXJJbmZvW10gPSBbXVxuXG4gIC8vIHBvaW50ZXJkb3duL21vdXNlZG93bi90b3VjaHN0YXJ0IGV2ZW50XG4gIGRvd25FdmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZSA9IG51bGxcblxuICBkb3duUG9pbnRlcjogSW50ZXJhY3QuUG9pbnRlclR5cGUgPSB7fSBhcyBJbnRlcmFjdC5Qb2ludGVyVHlwZVxuXG4gIF9sYXRlc3RQb2ludGVyOiB7XG4gICAgcG9pbnRlcjogRXZlbnRUYXJnZXRcbiAgICBldmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZVxuICAgIGV2ZW50VGFyZ2V0OiBOb2RlLFxuICB9ID0ge1xuICAgIHBvaW50ZXI6IG51bGwsXG4gICAgZXZlbnQ6IG51bGwsXG4gICAgZXZlbnRUYXJnZXQ6IG51bGwsXG4gIH1cblxuICAvLyBwcmV2aW91cyBhY3Rpb24gZXZlbnRcbiAgcHJldkV2ZW50OiBJbnRlcmFjdEV2ZW50PFQ+ID0gbnVsbFxuXG4gIHBvaW50ZXJJc0Rvd24gPSBmYWxzZVxuICBwb2ludGVyV2FzTW92ZWQgPSBmYWxzZVxuICBfaW50ZXJhY3RpbmcgPSBmYWxzZVxuICBfZW5kaW5nID0gZmFsc2VcblxuICBzaW11bGF0aW9uID0gbnVsbFxuXG4gIGdldCBwb2ludGVyTW92ZVRvbGVyYW5jZSAoKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIC8qKlxuICAgKiBAYWxpYXMgSW50ZXJhY3Rpb24ucHJvdG90eXBlLm1vdmVcbiAgICovXG4gIGRvTW92ZSA9IHV0aWxzLndhcm5PbmNlKFxuICAgIGZ1bmN0aW9uICh0aGlzOiBJbnRlcmFjdGlvbiwgc2lnbmFsQXJnOiBhbnkpIHtcbiAgICAgIHRoaXMubW92ZShzaWduYWxBcmcpXG4gICAgfSxcbiAgICAnVGhlIGludGVyYWN0aW9uLmRvTW92ZSgpIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGludGVyYWN0aW9uLm1vdmUoKScpXG5cbiAgY29vcmRzID0ge1xuICAgIC8vIFN0YXJ0aW5nIEludGVyYWN0RXZlbnQgcG9pbnRlciBjb29yZGluYXRlc1xuICAgIHN0YXJ0OiB1dGlscy5wb2ludGVyLm5ld0Nvb3JkcygpLFxuICAgIC8vIFByZXZpb3VzIG5hdGl2ZSBwb2ludGVyIG1vdmUgZXZlbnQgY29vcmRpbmF0ZXNcbiAgICBwcmV2OiB1dGlscy5wb2ludGVyLm5ld0Nvb3JkcygpLFxuICAgIC8vIGN1cnJlbnQgbmF0aXZlIHBvaW50ZXIgbW92ZSBldmVudCBjb29yZGluYXRlc1xuICAgIGN1cjogdXRpbHMucG9pbnRlci5uZXdDb29yZHMoKSxcbiAgICAvLyBDaGFuZ2UgaW4gY29vcmRpbmF0ZXMgYW5kIHRpbWUgb2YgdGhlIHBvaW50ZXJcbiAgICBkZWx0YTogdXRpbHMucG9pbnRlci5uZXdDb29yZHMoKSxcbiAgICAvLyBwb2ludGVyIHZlbG9jaXR5XG4gICAgdmVsb2NpdHk6IHV0aWxzLnBvaW50ZXIubmV3Q29vcmRzKCksXG4gIH1cblxuICAvKiogKi9cbiAgY29uc3RydWN0b3IgKHsgcG9pbnRlclR5cGUsIHNpZ25hbHMgfTogeyBwb2ludGVyVHlwZT86IHN0cmluZywgc2lnbmFsczogdXRpbHMuU2lnbmFscyB9KSB7XG4gICAgdGhpcy5fc2lnbmFscyA9IHNpZ25hbHNcbiAgICB0aGlzLnBvaW50ZXJUeXBlID0gcG9pbnRlclR5cGVcblxuICAgIHRoaXMuX3NpZ25hbHMuZmlyZSgnbmV3JywgeyBpbnRlcmFjdGlvbjogdGhpcyB9KVxuICB9XG5cbiAgcG9pbnRlckRvd24gKHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCkge1xuICAgIGNvbnN0IHBvaW50ZXJJbmRleCA9IHRoaXMudXBkYXRlUG9pbnRlcihwb2ludGVyLCBldmVudCwgZXZlbnRUYXJnZXQsIHRydWUpXG5cbiAgICB0aGlzLl9zaWduYWxzLmZpcmUoJ2Rvd24nLCB7XG4gICAgICBwb2ludGVyLFxuICAgICAgZXZlbnQsXG4gICAgICBldmVudFRhcmdldCxcbiAgICAgIHBvaW50ZXJJbmRleCxcbiAgICAgIGludGVyYWN0aW9uOiB0aGlzLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogYGBganNcbiAgICogaW50ZXJhY3QodGFyZ2V0KVxuICAgKiAgIC5kcmFnZ2FibGUoe1xuICAgKiAgICAgLy8gZGlzYWJsZSB0aGUgZGVmYXVsdCBkcmFnIHN0YXJ0IGJ5IGRvd24tPm1vdmVcbiAgICogICAgIG1hbnVhbFN0YXJ0OiB0cnVlXG4gICAqICAgfSlcbiAgICogICAvLyBzdGFydCBkcmFnZ2luZyBhZnRlciB0aGUgdXNlciBob2xkcyB0aGUgcG9pbnRlciBkb3duXG4gICAqICAgLm9uKCdob2xkJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAqICAgICB2YXIgaW50ZXJhY3Rpb24gPSBldmVudC5pbnRlcmFjdGlvbjtcbiAgICpcbiAgICogICAgIGlmICghaW50ZXJhY3Rpb24uaW50ZXJhY3RpbmcoKSkge1xuICAgKiAgICAgICBpbnRlcmFjdGlvbi5zdGFydCh7IG5hbWU6ICdkcmFnJyB9LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5pbnRlcmFjdGFibGUsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgKiAgICAgfVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIFN0YXJ0IGFuIGFjdGlvbiB3aXRoIHRoZSBnaXZlbiBJbnRlcmFjdGFibGUgYW5kIEVsZW1lbnQgYXMgdGFydGdldHMuIFRoZVxuICAgKiBhY3Rpb24gbXVzdCBiZSBlbmFibGVkIGZvciB0aGUgdGFyZ2V0IEludGVyYWN0YWJsZSBhbmQgYW4gYXBwcm9wcmlhdGVcbiAgICogbnVtYmVyIG9mIHBvaW50ZXJzIG11c3QgYmUgaGVsZCBkb3duIC0gMSBmb3IgZHJhZy9yZXNpemUsIDIgZm9yIGdlc3R1cmUuXG4gICAqXG4gICAqIFVzZSBpdCB3aXRoIGBpbnRlcmFjdGFibGUuPGFjdGlvbj5hYmxlKHsgbWFudWFsU3RhcnQ6IGZhbHNlIH0pYCB0byBhbHdheXNcbiAgICogW3N0YXJ0IGFjdGlvbnMgbWFudWFsbHldKGh0dHBzOi8vZ2l0aHViLmNvbS90YXllL2ludGVyYWN0LmpzL2lzc3Vlcy8xMTQpXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhY3Rpb24gICBUaGUgYWN0aW9uIHRvIGJlIHBlcmZvcm1lZCAtIGRyYWcsIHJlc2l6ZSwgZXRjLlxuICAgKiBAcGFyYW0ge0ludGVyYWN0YWJsZX0gdGFyZ2V0ICBUaGUgSW50ZXJhY3RhYmxlIHRvIHRhcmdldFxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGhlIERPTSBFbGVtZW50IHRvIHRhcmdldFxuICAgKiBAcmV0dXJuIHtvYmplY3R9IGludGVyYWN0XG4gICAqL1xuICBzdGFydCAoYWN0aW9uLCB0YXJnZXQsIGVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5pbnRlcmFjdGluZygpIHx8XG4gICAgICAgICF0aGlzLnBvaW50ZXJJc0Rvd24gfHxcbiAgICAgICAgdGhpcy5wb2ludGVycy5sZW5ndGggPCAoYWN0aW9uLm5hbWUgPT09ICdnZXN0dXJlJyA/IDIgOiAxKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdXRpbHMuY29weUFjdGlvbih0aGlzLnByZXBhcmVkLCBhY3Rpb24pXG5cbiAgICB0aGlzLnRhcmdldCAgICAgICA9IHRhcmdldFxuICAgIHRoaXMuZWxlbWVudCAgICAgID0gZWxlbWVudFxuICAgIHRoaXMuX2ludGVyYWN0aW5nID0gdGhpcy5fZG9QaGFzZSh7XG4gICAgICBpbnRlcmFjdGlvbjogdGhpcyxcbiAgICAgIGV2ZW50OiB0aGlzLmRvd25FdmVudCxcbiAgICAgIHBoYXNlOiBFdmVudFBoYXNlLlN0YXJ0LFxuICAgIH0pXG4gIH1cblxuICBwb2ludGVyTW92ZSAocG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0KSB7XG4gICAgaWYgKCF0aGlzLnNpbXVsYXRpb24pIHtcbiAgICAgIHRoaXMudXBkYXRlUG9pbnRlcihwb2ludGVyLCBldmVudCwgZXZlbnRUYXJnZXQsIGZhbHNlKVxuICAgICAgdXRpbHMucG9pbnRlci5zZXRDb29yZHModGhpcy5jb29yZHMuY3VyLCB0aGlzLnBvaW50ZXJzLm1hcCgocCkgPT4gcC5wb2ludGVyKSlcbiAgICB9XG5cbiAgICBjb25zdCBkdXBsaWNhdGVNb3ZlID0gKHRoaXMuY29vcmRzLmN1ci5wYWdlLnggPT09IHRoaXMuY29vcmRzLnByZXYucGFnZS54ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvb3Jkcy5jdXIucGFnZS55ID09PSB0aGlzLmNvb3Jkcy5wcmV2LnBhZ2UueSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb29yZHMuY3VyLmNsaWVudC54ID09PSB0aGlzLmNvb3Jkcy5wcmV2LmNsaWVudC54ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvb3Jkcy5jdXIuY2xpZW50LnkgPT09IHRoaXMuY29vcmRzLnByZXYuY2xpZW50LnkpXG5cbiAgICBsZXQgZHhcbiAgICBsZXQgZHlcblxuICAgIC8vIHJlZ2lzdGVyIG1vdmVtZW50IGdyZWF0ZXIgdGhhbiBwb2ludGVyTW92ZVRvbGVyYW5jZVxuICAgIGlmICh0aGlzLnBvaW50ZXJJc0Rvd24gJiYgIXRoaXMucG9pbnRlcldhc01vdmVkKSB7XG4gICAgICBkeCA9IHRoaXMuY29vcmRzLmN1ci5jbGllbnQueCAtIHRoaXMuY29vcmRzLnN0YXJ0LmNsaWVudC54XG4gICAgICBkeSA9IHRoaXMuY29vcmRzLmN1ci5jbGllbnQueSAtIHRoaXMuY29vcmRzLnN0YXJ0LmNsaWVudC55XG5cbiAgICAgIHRoaXMucG9pbnRlcldhc01vdmVkID0gdXRpbHMuaHlwb3QoZHgsIGR5KSA+IHRoaXMucG9pbnRlck1vdmVUb2xlcmFuY2VcbiAgICB9XG5cbiAgICBjb25zdCBzaWduYWxBcmcgPSB7XG4gICAgICBwb2ludGVyLFxuICAgICAgcG9pbnRlckluZGV4OiB0aGlzLmdldFBvaW50ZXJJbmRleChwb2ludGVyKSxcbiAgICAgIGV2ZW50LFxuICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICBkeCxcbiAgICAgIGR5LFxuICAgICAgZHVwbGljYXRlOiBkdXBsaWNhdGVNb3ZlLFxuICAgICAgaW50ZXJhY3Rpb246IHRoaXMsXG4gICAgfVxuXG4gICAgaWYgKCFkdXBsaWNhdGVNb3ZlKSB7XG4gICAgICAvLyBzZXQgcG9pbnRlciBjb29yZGluYXRlLCB0aW1lIGNoYW5nZXMgYW5kIHZlbG9jaXR5XG4gICAgICB1dGlscy5wb2ludGVyLnNldENvb3JkRGVsdGFzKHRoaXMuY29vcmRzLmRlbHRhLCB0aGlzLmNvb3Jkcy5wcmV2LCB0aGlzLmNvb3Jkcy5jdXIpXG4gICAgICB1dGlscy5wb2ludGVyLnNldENvb3JkVmVsb2NpdHkodGhpcy5jb29yZHMudmVsb2NpdHksIHRoaXMuY29vcmRzLmRlbHRhKVxuICAgIH1cblxuICAgIHRoaXMuX3NpZ25hbHMuZmlyZSgnbW92ZScsIHNpZ25hbEFyZylcblxuICAgIGlmICghZHVwbGljYXRlTW92ZSkge1xuICAgICAgLy8gaWYgaW50ZXJhY3RpbmcsIGZpcmUgYW4gJ2FjdGlvbi1tb3ZlJyBzaWduYWwgZXRjXG4gICAgICBpZiAodGhpcy5pbnRlcmFjdGluZygpKSB7XG4gICAgICAgIHRoaXMubW92ZShzaWduYWxBcmcpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnBvaW50ZXJXYXNNb3ZlZCkge1xuICAgICAgICB1dGlscy5wb2ludGVyLmNvcHlDb29yZHModGhpcy5jb29yZHMucHJldiwgdGhpcy5jb29yZHMuY3VyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBgYGBqc1xuICAgKiBpbnRlcmFjdCh0YXJnZXQpXG4gICAqICAgLmRyYWdnYWJsZSh0cnVlKVxuICAgKiAgIC5vbignZHJhZ21vdmUnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICogICAgIGlmIChzb21lQ29uZGl0aW9uKSB7XG4gICAqICAgICAgIC8vIGNoYW5nZSB0aGUgc25hcCBzZXR0aW5nc1xuICAgKiAgICAgICBldmVudC5pbnRlcmFjdGFibGUuZHJhZ2dhYmxlKHsgc25hcDogeyB0YXJnZXRzOiBbXSB9fSk7XG4gICAqICAgICAgIC8vIGZpcmUgYW5vdGhlciBtb3ZlIGV2ZW50IHdpdGggcmUtY2FsY3VsYXRlZCBzbmFwXG4gICAqICAgICAgIGV2ZW50LmludGVyYWN0aW9uLm1vdmUoKTtcbiAgICogICAgIH1cbiAgICogICB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEZvcmNlIGEgbW92ZSBvZiB0aGUgY3VycmVudCBhY3Rpb24gYXQgdGhlIHNhbWUgY29vcmRpbmF0ZXMuIFVzZWZ1bCBpZlxuICAgKiBzbmFwL3Jlc3RyaWN0IGhhcyBiZWVuIGNoYW5nZWQgYW5kIHlvdSB3YW50IGEgbW92ZW1lbnQgd2l0aCB0aGUgbmV3XG4gICAqIHNldHRpbmdzLlxuICAgKi9cbiAgbW92ZSAoc2lnbmFsQXJnPykge1xuICAgIHNpZ25hbEFyZyA9IHV0aWxzLmV4dGVuZCh7XG4gICAgICBwb2ludGVyOiB0aGlzLl9sYXRlc3RQb2ludGVyLnBvaW50ZXIsXG4gICAgICBldmVudDogdGhpcy5fbGF0ZXN0UG9pbnRlci5ldmVudCxcbiAgICAgIGV2ZW50VGFyZ2V0OiB0aGlzLl9sYXRlc3RQb2ludGVyLmV2ZW50VGFyZ2V0LFxuICAgICAgaW50ZXJhY3Rpb246IHRoaXMsXG4gICAgICBub0JlZm9yZTogZmFsc2UsXG4gICAgfSwgc2lnbmFsQXJnIHx8IHt9KVxuXG4gICAgc2lnbmFsQXJnLnBoYXNlID0gRXZlbnRQaGFzZS5Nb3ZlXG5cbiAgICB0aGlzLl9kb1BoYXNlKHNpZ25hbEFyZylcbiAgfVxuXG4gIC8vIEVuZCBpbnRlcmFjdCBtb3ZlIGV2ZW50cyBhbmQgc3RvcCBhdXRvLXNjcm9sbCB1bmxlc3Mgc2ltdWxhdGlvbiBpcyBydW5uaW5nXG4gIHBvaW50ZXJVcCAocG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0LCBjdXJFdmVudFRhcmdldCkge1xuICAgIGxldCBwb2ludGVySW5kZXggPSB0aGlzLmdldFBvaW50ZXJJbmRleChwb2ludGVyKVxuXG4gICAgaWYgKHBvaW50ZXJJbmRleCA9PT0gLTEpIHtcbiAgICAgIHBvaW50ZXJJbmRleCA9IHRoaXMudXBkYXRlUG9pbnRlcihwb2ludGVyLCBldmVudCwgZXZlbnRUYXJnZXQsIGZhbHNlKVxuICAgIH1cblxuICAgIHRoaXMuX3NpZ25hbHMuZmlyZSgvY2FuY2VsJC9pLnRlc3QoZXZlbnQudHlwZSkgPyAnY2FuY2VsJyA6ICd1cCcsIHtcbiAgICAgIHBvaW50ZXIsXG4gICAgICBwb2ludGVySW5kZXgsXG4gICAgICBldmVudCxcbiAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgY3VyRXZlbnRUYXJnZXQsXG4gICAgICBpbnRlcmFjdGlvbjogdGhpcyxcbiAgICB9KVxuXG4gICAgaWYgKCF0aGlzLnNpbXVsYXRpb24pIHtcbiAgICAgIHRoaXMuZW5kKGV2ZW50KVxuICAgIH1cblxuICAgIHRoaXMucG9pbnRlcklzRG93biA9IGZhbHNlXG4gICAgdGhpcy5yZW1vdmVQb2ludGVyKHBvaW50ZXIsIGV2ZW50KVxuICB9XG5cbiAgZG9jdW1lbnRCbHVyIChldmVudCkge1xuICAgIHRoaXMuZW5kKGV2ZW50KVxuICAgIHRoaXMuX3NpZ25hbHMuZmlyZSgnYmx1cicsIHsgZXZlbnQsIGludGVyYWN0aW9uOiB0aGlzIH0pXG4gIH1cblxuICAvKipcbiAgICogYGBganNcbiAgICogaW50ZXJhY3QodGFyZ2V0KVxuICAgKiAgIC5kcmFnZ2FibGUodHJ1ZSlcbiAgICogICAub24oJ21vdmUnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICogICAgIGlmIChldmVudC5wYWdlWCA+IDEwMDApIHtcbiAgICogICAgICAgLy8gZW5kIHRoZSBjdXJyZW50IGFjdGlvblxuICAgKiAgICAgICBldmVudC5pbnRlcmFjdGlvbi5lbmQoKTtcbiAgICogICAgICAgLy8gc3RvcCBhbGwgZnVydGhlciBsaXN0ZW5lcnMgZnJvbSBiZWluZyBjYWxsZWRcbiAgICogICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAqICAgICB9XG4gICAqICAgfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0ge1BvaW50ZXJFdmVudH0gW2V2ZW50XVxuICAgKi9cbiAgZW5kIChldmVudD86IEludGVyYWN0LlBvaW50ZXJFdmVudFR5cGUpIHtcbiAgICB0aGlzLl9lbmRpbmcgPSB0cnVlXG4gICAgZXZlbnQgPSBldmVudCB8fCB0aGlzLl9sYXRlc3RQb2ludGVyLmV2ZW50XG4gICAgbGV0IGVuZFBoYXNlUmVzdWx0XG5cbiAgICBpZiAodGhpcy5pbnRlcmFjdGluZygpKSB7XG4gICAgICBlbmRQaGFzZVJlc3VsdCA9IHRoaXMuX2RvUGhhc2Uoe1xuICAgICAgICBldmVudCxcbiAgICAgICAgaW50ZXJhY3Rpb246IHRoaXMsXG4gICAgICAgIHBoYXNlOiBFdmVudFBoYXNlLkVuZCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy5fZW5kaW5nID0gZmFsc2VcblxuICAgIGlmIChlbmRQaGFzZVJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zdG9wKClcbiAgICB9XG4gIH1cblxuICBjdXJyZW50QWN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5faW50ZXJhY3RpbmcgPyB0aGlzLnByZXBhcmVkLm5hbWUgOiBudWxsXG4gIH1cblxuICBpbnRlcmFjdGluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludGVyYWN0aW5nXG4gIH1cblxuICAvKiogKi9cbiAgc3RvcCAoKSB7XG4gICAgdGhpcy5fc2lnbmFscy5maXJlKCdzdG9wJywgeyBpbnRlcmFjdGlvbjogdGhpcyB9KVxuXG4gICAgdGhpcy50YXJnZXQgPSB0aGlzLmVsZW1lbnQgPSBudWxsXG5cbiAgICB0aGlzLl9pbnRlcmFjdGluZyA9IGZhbHNlXG4gICAgdGhpcy5wcmVwYXJlZC5uYW1lID0gdGhpcy5wcmV2RXZlbnQgPSBudWxsXG4gIH1cblxuICBnZXRQb2ludGVySW5kZXggKHBvaW50ZXIpIHtcbiAgICBjb25zdCBwb2ludGVySWQgPSB1dGlscy5wb2ludGVyLmdldFBvaW50ZXJJZChwb2ludGVyKVxuXG4gICAgLy8gbW91c2UgYW5kIHBlbiBpbnRlcmFjdGlvbnMgbWF5IGhhdmUgb25seSBvbmUgcG9pbnRlclxuICAgIHJldHVybiAodGhpcy5wb2ludGVyVHlwZSA9PT0gJ21vdXNlJyB8fCB0aGlzLnBvaW50ZXJUeXBlID09PSAncGVuJylcbiAgICAgID8gdGhpcy5wb2ludGVycy5sZW5ndGggLSAxXG4gICAgICA6IHV0aWxzLmFyci5maW5kSW5kZXgodGhpcy5wb2ludGVycywgKGN1clBvaW50ZXIpID0+IGN1clBvaW50ZXIuaWQgPT09IHBvaW50ZXJJZClcbiAgfVxuXG4gIGdldFBvaW50ZXJJbmZvIChwb2ludGVyKSB7XG4gICAgcmV0dXJuIHRoaXMucG9pbnRlcnNbdGhpcy5nZXRQb2ludGVySW5kZXgocG9pbnRlcildXG4gIH1cblxuICB1cGRhdGVQb2ludGVyIChwb2ludGVyOiBJbnRlcmFjdC5Qb2ludGVyVHlwZSwgZXZlbnQ6IEludGVyYWN0LlBvaW50ZXJFdmVudFR5cGUsIGV2ZW50VGFyZ2V0OiBXaW5kb3cgfCBEb2N1bWVudCB8IEVsZW1lbnQsIGRvd24/OiBib29sZWFuKSB7XG4gICAgY29uc3QgaWQgPSB1dGlscy5wb2ludGVyLmdldFBvaW50ZXJJZChwb2ludGVyKVxuICAgIGxldCBwb2ludGVySW5kZXggPSB0aGlzLmdldFBvaW50ZXJJbmRleChwb2ludGVyKVxuICAgIGxldCBwb2ludGVySW5mbyA9IHRoaXMucG9pbnRlcnNbcG9pbnRlckluZGV4XVxuXG4gICAgZG93biA9IGRvd24gPT09IGZhbHNlXG4gICAgICA/IGZhbHNlXG4gICAgICA6IGRvd24gfHwgLyhkb3dufHN0YXJ0KSQvaS50ZXN0KGV2ZW50LnR5cGUpXG5cbiAgICBpZiAoIXBvaW50ZXJJbmZvKSB7XG4gICAgICBwb2ludGVySW5mbyA9IG5ldyBQb2ludGVySW5mbyhcbiAgICAgICAgaWQsXG4gICAgICAgIHBvaW50ZXIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBudWxsLFxuICAgICAgICBudWxsLFxuICAgICAgKVxuXG4gICAgICBwb2ludGVySW5kZXggPSB0aGlzLnBvaW50ZXJzLmxlbmd0aFxuICAgICAgdGhpcy5wb2ludGVycy5wdXNoKHBvaW50ZXJJbmZvKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHBvaW50ZXJJbmZvLnBvaW50ZXIgPSBwb2ludGVyXG4gICAgfVxuXG4gICAgaWYgKGRvd24pIHtcbiAgICAgIHRoaXMucG9pbnRlcklzRG93biA9IHRydWVcblxuICAgICAgaWYgKCF0aGlzLmludGVyYWN0aW5nKCkpIHtcbiAgICAgICAgdXRpbHMucG9pbnRlci5zZXRDb29yZHModGhpcy5jb29yZHMuc3RhcnQsIHRoaXMucG9pbnRlcnMubWFwKChwKSA9PiBwLnBvaW50ZXIpKVxuXG4gICAgICAgIHV0aWxzLnBvaW50ZXIuY29weUNvb3Jkcyh0aGlzLmNvb3Jkcy5jdXIsIHRoaXMuY29vcmRzLnN0YXJ0KVxuICAgICAgICB1dGlscy5wb2ludGVyLmNvcHlDb29yZHModGhpcy5jb29yZHMucHJldiwgdGhpcy5jb29yZHMuc3RhcnQpXG4gICAgICAgIHV0aWxzLnBvaW50ZXIucG9pbnRlckV4dGVuZCh0aGlzLmRvd25Qb2ludGVyLCBwb2ludGVyKVxuXG4gICAgICAgIHRoaXMuZG93bkV2ZW50ID0gZXZlbnRcbiAgICAgICAgcG9pbnRlckluZm8uZG93blRpbWUgPSB0aGlzLmNvb3Jkcy5jdXIudGltZVN0YW1wXG4gICAgICAgIHBvaW50ZXJJbmZvLmRvd25UYXJnZXQgPSBldmVudFRhcmdldFxuXG4gICAgICAgIHRoaXMucG9pbnRlcldhc01vdmVkID0gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVMYXRlc3RQb2ludGVyKHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldClcblxuICAgIHRoaXMuX3NpZ25hbHMuZmlyZSgndXBkYXRlLXBvaW50ZXInLCB7XG4gICAgICBwb2ludGVyLFxuICAgICAgZXZlbnQsXG4gICAgICBldmVudFRhcmdldCxcbiAgICAgIGRvd24sXG4gICAgICBwb2ludGVySW5mbyxcbiAgICAgIHBvaW50ZXJJbmRleCxcbiAgICAgIGludGVyYWN0aW9uOiB0aGlzLFxuICAgIH0pXG5cbiAgICByZXR1cm4gcG9pbnRlckluZGV4XG4gIH1cblxuICByZW1vdmVQb2ludGVyIChwb2ludGVyLCBldmVudCkge1xuICAgIGNvbnN0IHBvaW50ZXJJbmRleCA9IHRoaXMuZ2V0UG9pbnRlckluZGV4KHBvaW50ZXIpXG5cbiAgICBpZiAocG9pbnRlckluZGV4ID09PSAtMSkgeyByZXR1cm4gfVxuXG4gICAgY29uc3QgcG9pbnRlckluZm8gPSB0aGlzLnBvaW50ZXJzW3BvaW50ZXJJbmRleF1cblxuICAgIHRoaXMuX3NpZ25hbHMuZmlyZSgncmVtb3ZlLXBvaW50ZXInLCB7XG4gICAgICBwb2ludGVyLFxuICAgICAgZXZlbnQsXG4gICAgICBwb2ludGVySW5kZXgsXG4gICAgICBwb2ludGVySW5mbyxcbiAgICAgIGludGVyYWN0aW9uOiB0aGlzLFxuICAgIH0pXG5cbiAgICB0aGlzLnBvaW50ZXJzLnNwbGljZShwb2ludGVySW5kZXgsIDEpXG4gIH1cblxuICBfdXBkYXRlTGF0ZXN0UG9pbnRlciAocG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0KSB7XG4gICAgdGhpcy5fbGF0ZXN0UG9pbnRlci5wb2ludGVyID0gcG9pbnRlclxuICAgIHRoaXMuX2xhdGVzdFBvaW50ZXIuZXZlbnQgPSBldmVudFxuICAgIHRoaXMuX2xhdGVzdFBvaW50ZXIuZXZlbnRUYXJnZXQgPSBldmVudFRhcmdldFxuICB9XG5cbiAgX2NyZWF0ZVByZXBhcmVkRXZlbnQgKGV2ZW50OiBJbnRlcmFjdC5Qb2ludGVyRXZlbnRUeXBlLCBwaGFzZTogRXZlbnRQaGFzZSwgcHJlRW5kOiBib29sZWFuLCB0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhY3Rpb25OYW1lID0gdGhpcy5wcmVwYXJlZC5uYW1lXG5cbiAgICByZXR1cm4gbmV3IEludGVyYWN0RXZlbnQodGhpcywgZXZlbnQsIGFjdGlvbk5hbWUsIHBoYXNlLCB0aGlzLmVsZW1lbnQsIG51bGwsIHByZUVuZCwgdHlwZSlcbiAgfVxuXG4gIF9maXJlRXZlbnQgKGlFdmVudCkge1xuICAgIHRoaXMudGFyZ2V0LmZpcmUoaUV2ZW50KVxuXG4gICAgaWYgKCF0aGlzLnByZXZFdmVudCB8fCBpRXZlbnQudGltZVN0YW1wID49IHRoaXMucHJldkV2ZW50LnRpbWVTdGFtcCkge1xuICAgICAgdGhpcy5wcmV2RXZlbnQgPSBpRXZlbnRcbiAgICB9XG4gIH1cblxuICBfZG9QaGFzZSAoc2lnbmFsQXJnOiBQYXJ0aWFsPEludGVyYWN0LlNpZ25hbEFyZz4pIHtcbiAgICBjb25zdCB7IGV2ZW50LCBwaGFzZSwgcHJlRW5kLCB0eXBlIH0gPSBzaWduYWxBcmdcblxuICAgIGlmICghc2lnbmFsQXJnLm5vQmVmb3JlKSB7XG4gICAgICBjb25zdCBiZWZvcmVSZXN1bHQgPSB0aGlzLl9zaWduYWxzLmZpcmUoYGJlZm9yZS1hY3Rpb24tJHtwaGFzZX1gLCBzaWduYWxBcmcpXG5cbiAgICAgIGlmIChiZWZvcmVSZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlFdmVudCA9IHNpZ25hbEFyZy5pRXZlbnQgPSB0aGlzLl9jcmVhdGVQcmVwYXJlZEV2ZW50KGV2ZW50LCBwaGFzZSwgcHJlRW5kLCB0eXBlKVxuXG4gICAgdGhpcy5fc2lnbmFscy5maXJlKGBhY3Rpb24tJHtwaGFzZX1gLCBzaWduYWxBcmcpXG5cbiAgICB0aGlzLl9maXJlRXZlbnQoaUV2ZW50KVxuXG4gICAgdGhpcy5fc2lnbmFscy5maXJlKGBhZnRlci1hY3Rpb24tJHtwaGFzZX1gLCBzaWduYWxBcmcpXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVyYWN0aW9uXG5leHBvcnQgeyBQb2ludGVySW5mbyB9XG4iXX0= \ No newline at end of file diff --git a/packages/core/defaultOptions.d.ts b/packages/core/defaultOptions.d.ts index abc766ca4..3ac9084fe 100644 --- a/packages/core/defaultOptions.d.ts +++ b/packages/core/defaultOptions.d.ts @@ -4,11 +4,11 @@ export interface Defaults { actions: ActionDefaults; } export interface ActionDefaults { - [key: string]: Options; } export interface BaseDefaults { preventDefault?: 'auto' | 'never' | string; deltaSource?: 'page' | 'client'; + context?: Window | Document | Element; [key: string]: any; } export interface PerActionDefaults { @@ -16,8 +16,9 @@ export interface PerActionDefaults { origin?: Interact.Point | string | Element; listeners?: Interact.Listeners; } -export interface Options extends BaseDefaults, PerActionDefaults { -} +export declare type Options = Partial & Partial & { + [P in keyof ActionDefaults]?: Partial; +}; export interface OptionsArg extends BaseDefaults, Interact.OrBoolean { } export declare const defaults: Defaults; diff --git a/packages/core/defaultOptions.js b/packages/core/defaultOptions.js index c0bb86f62..c97c1da5a 100644 --- a/packages/core/defaultOptions.js +++ b/packages/core/defaultOptions.js @@ -1,3 +1,4 @@ +// tslint:disable no-empty-interface export const defaults = { base: { preventDefault: 'auto', @@ -10,4 +11,4 @@ export const defaults = { actions: {}, }; export default defaults; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdE9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkZWZhdWx0T3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF5QkEsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFhO0lBQ2hDLElBQUksRUFBRTtRQUNKLGNBQWMsRUFBRSxNQUFNO1FBQ3RCLFdBQVcsRUFBRSxNQUFNO0tBQ3BCO0lBRUQsU0FBUyxFQUFFO1FBQ1QsT0FBTyxFQUFFLEtBQUs7UUFDZCxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7S0FDdkI7SUFFRCxPQUFPLEVBQUUsRUFBb0I7Q0FDOUIsQ0FBQTtBQUVELGVBQWUsUUFBUSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0cyB7XG4gIGJhc2U6IEJhc2VEZWZhdWx0c1xuICBwZXJBY3Rpb246IFBlckFjdGlvbkRlZmF1bHRzXG4gIGFjdGlvbnM6IEFjdGlvbkRlZmF1bHRzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uRGVmYXVsdHMge1xuICBba2V5OiBzdHJpbmddOiBPcHRpb25zXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZURlZmF1bHRzIHtcbiAgcHJldmVudERlZmF1bHQ/OiAnYXV0bycgfCAnbmV2ZXInIHwgc3RyaW5nXG4gIGRlbHRhU291cmNlPzogJ3BhZ2UnIHwgJ2NsaWVudCdcbiAgW2tleTogc3RyaW5nXTogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVyQWN0aW9uRGVmYXVsdHMge1xuICBlbmFibGVkPzogYm9vbGVhblxuICBvcmlnaW4/OiBJbnRlcmFjdC5Qb2ludCB8IHN0cmluZyB8IEVsZW1lbnRcbiAgbGlzdGVuZXJzPzogSW50ZXJhY3QuTGlzdGVuZXJzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyBleHRlbmRzIEJhc2VEZWZhdWx0cywgUGVyQWN0aW9uRGVmYXVsdHMge31cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uc0FyZyBleHRlbmRzIEJhc2VEZWZhdWx0cywgSW50ZXJhY3QuT3JCb29sZWFuPFBlckFjdGlvbkRlZmF1bHRzPiB7fVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdHM6IERlZmF1bHRzID0ge1xuICBiYXNlOiB7XG4gICAgcHJldmVudERlZmF1bHQ6ICdhdXRvJyxcbiAgICBkZWx0YVNvdXJjZTogJ3BhZ2UnLFxuICB9LFxuXG4gIHBlckFjdGlvbjoge1xuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIG9yaWdpbjogeyB4OiAwLCB5OiAwIH0sXG4gIH0sXG5cbiAgYWN0aW9uczoge30gYXMgQWN0aW9uRGVmYXVsdHMsXG59XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRzXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdE9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkZWZhdWx0T3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0M7QUFpQ3BDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBYTtJQUNoQyxJQUFJLEVBQUU7UUFDSixjQUFjLEVBQUUsTUFBTTtRQUN0QixXQUFXLEVBQUUsTUFBTTtLQUNwQjtJQUVELFNBQVMsRUFBRTtRQUNULE9BQU8sRUFBRSxLQUFLO1FBQ2QsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0tBQ3ZCO0lBRUQsT0FBTyxFQUFFLEVBQW9CO0NBQzlCLENBQUE7QUFFRCxlQUFlLFFBQVEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlIG5vLWVtcHR5LWludGVyZmFjZVxuXG5leHBvcnQgaW50ZXJmYWNlIERlZmF1bHRzIHtcbiAgYmFzZTogQmFzZURlZmF1bHRzXG4gIHBlckFjdGlvbjogUGVyQWN0aW9uRGVmYXVsdHNcbiAgYWN0aW9uczogQWN0aW9uRGVmYXVsdHNcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uRGVmYXVsdHMge1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VEZWZhdWx0cyB7XG4gIHByZXZlbnREZWZhdWx0PzogJ2F1dG8nIHwgJ25ldmVyJyB8IHN0cmluZ1xuICBkZWx0YVNvdXJjZT86ICdwYWdlJyB8ICdjbGllbnQnXG4gIGNvbnRleHQ/OiBXaW5kb3cgfCBEb2N1bWVudCB8IEVsZW1lbnRcbiAgIFtrZXk6IHN0cmluZ106IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBlckFjdGlvbkRlZmF1bHRzIHtcbiAgZW5hYmxlZD86IGJvb2xlYW5cbiAgb3JpZ2luPzogSW50ZXJhY3QuUG9pbnQgfCBzdHJpbmcgfCBFbGVtZW50XG4gIGxpc3RlbmVycz86IEludGVyYWN0Lkxpc3RlbmVyc1xufVxuXG5leHBvcnQgdHlwZSBPcHRpb25zID0gUGFydGlhbDxCYXNlRGVmYXVsdHM+ICYgUGFydGlhbDxQZXJBY3Rpb25EZWZhdWx0cz4gJiB7XG4gIFtQIGluIGtleW9mIEFjdGlvbkRlZmF1bHRzXT86IFBhcnRpYWw8QWN0aW9uRGVmYXVsdHNbUF0+XG59XG5cbi8vIGV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyBleHRlbmRzIEJhc2VEZWZhdWx0cywgUGVyQWN0aW9uRGVmYXVsdHMge31cblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zQXJnIGV4dGVuZHMgQmFzZURlZmF1bHRzLCBJbnRlcmFjdC5PckJvb2xlYW48UGVyQWN0aW9uRGVmYXVsdHM+IHt9XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0czogRGVmYXVsdHMgPSB7XG4gIGJhc2U6IHtcbiAgICBwcmV2ZW50RGVmYXVsdDogJ2F1dG8nLFxuICAgIGRlbHRhU291cmNlOiAncGFnZScsXG4gIH0sXG5cbiAgcGVyQWN0aW9uOiB7XG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgb3JpZ2luOiB7IHg6IDAsIHk6IDAgfSxcbiAgfSxcblxuICBhY3Rpb25zOiB7fSBhcyBBY3Rpb25EZWZhdWx0cyxcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdHNcbiJdfQ== \ No newline at end of file diff --git a/packages/core/interactions.js b/packages/core/interactions.js index 473299b64..eaddaeff3 100644 --- a/packages/core/interactions.js +++ b/packages/core/interactions.js @@ -166,4 +166,4 @@ export default { newInteraction, methodNames, }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZXJhY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sT0FBTyxNQUFNLDJCQUEyQixDQUFBO0FBQy9DLE9BQU8sVUFBVSxNQUFNLDhCQUE4QixDQUFBO0FBQ3JELE9BQU8sTUFBTSxNQUFNLDBCQUEwQixDQUFBO0FBQzdDLE9BQU8sTUFBTSxNQUFNLHFDQUFxQyxDQUFBO0FBQ3hELE9BQU8sWUFBWSxNQUFNLGdDQUFnQyxDQUFBO0FBQ3pELE9BQU8sT0FBTyxNQUFNLDJCQUEyQixDQUFBO0FBQy9DLE9BQU8sZUFBZSxNQUFNLGVBQWUsQ0FBQTtBQWtCM0MsTUFBTSxXQUFXLEdBQUc7SUFDbEIsYUFBYSxFQUFFLGFBQWEsRUFBRSxXQUFXO0lBQ3pDLGVBQWUsRUFBRSxlQUFlLEVBQUUsWUFBWTtDQUMvQyxDQUFBO0FBRUQsU0FBUyxPQUFPLENBQUUsS0FBWTtJQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO0lBRTdCLE1BQU0sU0FBUyxHQUFHLEVBQVMsQ0FBQTtJQUUzQixLQUFLLE1BQU0sTUFBTSxJQUFJLFdBQVcsRUFBRTtRQUNoQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO0tBQ3BEO0lBRUQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQTtJQUN2QyxNQUFNLFFBQVEsR0FBRyxFQUEwQyxDQUFBO0lBRTNELElBQUksVUFBVSxDQUFDLFlBQVksRUFBRTtRQUMzQixRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBRyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUE7UUFDcEQsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUcsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFBO1FBQ3BELFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFLLEdB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UCxXQUFXO0lBQ1gsZ0JBQWdCO0lBQ2hCLGNBQWM7SUFDZCxXQUFXO0NBQ1osQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBicm93c2VyIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2Jyb3dzZXInXG5pbXBvcnQgZG9tT2JqZWN0cyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9kb21PYmplY3RzJ1xuaW1wb3J0IGV2ZW50cyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9ldmVudHMnXG5pbXBvcnQgZmluZGVyIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2ludGVyYWN0aW9uRmluZGVyJ1xuaW1wb3J0IHBvaW50ZXJVdGlscyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9wb2ludGVyVXRpbHMnXG5pbXBvcnQgU2lnbmFscyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9TaWduYWxzJ1xuaW1wb3J0IEludGVyYWN0aW9uQmFzZSBmcm9tICcuL0ludGVyYWN0aW9uJ1xuaW1wb3J0IHsgU2NvcGUgfSBmcm9tICcuL3Njb3BlJ1xuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9zY29wZScge1xuICBpbnRlcmZhY2UgU2NvcGUge1xuICAgIEludGVyYWN0aW9uOiB0eXBlb2YgSW50ZXJhY3Rpb25CYXNlXG4gICAgaW50ZXJhY3Rpb25zOiB7XG4gICAgICBzaWduYWxzOiBTaWduYWxzXG4gICAgICBuZXc6IChvcHRpb25zOiBhbnkpID0+IEludGVyYWN0aW9uQmFzZVxuICAgICAgbGlzdDogSW50ZXJhY3Rpb25CYXNlW11cbiAgICAgIGxpc3RlbmVyczogeyBbdHlwZTogc3RyaW5nXTogSW50ZXJhY3QuTGlzdGVuZXIgfVxuICAgICAgZXZlbnRNYXA6IGFueVxuICAgICAgcG9pbnRlck1vdmVUb2xlcmFuY2U6IG51bWJlclxuICAgIH1cbiAgICBwcmV2VG91Y2hUaW1lOiBudW1iZXJcbiAgfVxufVxuXG5jb25zdCBtZXRob2ROYW1lcyA9IFtcbiAgJ3BvaW50ZXJEb3duJywgJ3BvaW50ZXJNb3ZlJywgJ3BvaW50ZXJVcCcsXG4gICd1cGRhdGVQb2ludGVyJywgJ3JlbW92ZVBvaW50ZXInLCAnd2luZG93Qmx1cicsXG5dXG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlOiBTY29wZSkge1xuICBjb25zdCBzaWduYWxzID0gbmV3IFNpZ25hbHMoKVxuXG4gIGNvbnN0IGxpc3RlbmVycyA9IHt9IGFzIGFueVxuXG4gIGZvciAoY29uc3QgbWV0aG9kIG9mIG1ldGhvZE5hbWVzKSB7XG4gICAgbGlzdGVuZXJzW21ldGhvZF0gPSBkb09uSW50ZXJhY3Rpb25zKG1ldGhvZCwgc2NvcGUpXG4gIH1cblxuICBjb25zdCBwRXZlbnRUeXBlcyA9IGJyb3dzZXIucEV2ZW50VHlwZXNcbiAgY29uc3QgZXZlbnRNYXAgPSB7fSBhcyB7IFtrZXk6IHN0cmluZ106IEludGVyYWN0Lkxpc3RlbmVyIH1cblxuICBpZiAoZG9tT2JqZWN0cy5Qb2ludGVyRXZlbnQpIHtcbiAgICBldmVudE1hcFtwRXZlbnRUeXBlcy5kb3duICBdID0gbGlzdGVuZXJzLnBvaW50ZXJEb3duXG4gICAgZXZlbnRNYXBbcEV2ZW50VHlwZXMubW92ZSAgXSA9IGxpc3RlbmVycy5wb2ludGVyTW92ZVxuICAgIGV2ZW50TWFwW3BFdmVudFR5cGVzLnVwICAgIF0gPSBsaXN0ZW5lcnMucG9pbnRlclVwXG4gICAgZXZlbnRNYXBbcEV2ZW50VHlwZXMuY2FuY2VsXSA9IGxpc3RlbmVycy5wb2ludGVyVXBcbiAgfVxuICBlbHNlIHtcbiAgICBldmVudE1hcC5tb3VzZWRvd24gICA9IGxpc3RlbmVycy5wb2ludGVyRG93blxuICAgIGV2ZW50TWFwLm1vdXNlbW92ZSAgID0gbGlzdGVuZXJzLnBvaW50ZXJNb3ZlXG4gICAgZXZlbnRNYXAubW91c2V1cCAgICAgPSBsaXN0ZW5lcnMucG9pbnRlclVwXG5cbiAgICBldmVudE1hcC50b3VjaHN0YXJ0ICA9IGxpc3RlbmVycy5wb2ludGVyRG93blxuICAgIGV2ZW50TWFwLnRvdWNobW92ZSAgID0gbGlzdGVuZXJzLnBvaW50ZXJNb3ZlXG4gICAgZXZlbnRNYXAudG91Y2hlbmQgICAgPSBsaXN0ZW5lcnMucG9pbnRlclVwXG4gICAgZXZlbnRNYXAudG91Y2hjYW5jZWwgPSBsaXN0ZW5lcnMucG9pbnRlclVwXG4gIH1cblxuICBldmVudE1hcC5ibHVyID0gKGV2ZW50KSA9PiB7XG4gICAgZm9yIChjb25zdCBpbnRlcmFjdGlvbiBvZiBzY29wZS5pbnRlcmFjdGlvbnMubGlzdCkge1xuICAgICAgaW50ZXJhY3Rpb24uZG9jdW1lbnRCbHVyKGV2ZW50KVxuICAgIH1cbiAgfVxuXG4gIHNjb3BlLnNpZ25hbHMub24oJ2FkZC1kb2N1bWVudCcsIG9uRG9jU2lnbmFsKVxuICBzY29wZS5zaWduYWxzLm9uKCdyZW1vdmUtZG9jdW1lbnQnLCBvbkRvY1NpZ25hbClcblxuICAvLyBmb3IgaWdub3JpbmcgYnJvd3NlcidzIHNpbXVsYXRlZCBtb3VzZSBldmVudHNcbiAgc2NvcGUucHJldlRvdWNoVGltZSA9IDBcblxuICBzY29wZS5JbnRlcmFjdGlvbiA9IGNsYXNzIEludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb25CYXNlIHtcbiAgICBnZXQgcG9pbnRlck1vdmVUb2xlcmFuY2UgKCkge1xuICAgICAgcmV0dXJuIHNjb3BlLmludGVyYWN0aW9ucy5wb2ludGVyTW92ZVRvbGVyYW5jZVxuICAgIH1cblxuICAgIHNldCBwb2ludGVyTW92ZVRvbGVyYW5jZSAodmFsdWUpIHtcbiAgICAgIHNjb3BlLmludGVyYWN0aW9ucy5wb2ludGVyTW92ZVRvbGVyYW5jZSA9IHZhbHVlXG4gICAgfVxuICB9XG4gIHNjb3BlLmludGVyYWN0aW9ucyA9IHtcbiAgICBzaWduYWxzLFxuICAgIC8vIGFsbCBhY3RpdmUgYW5kIGlkbGUgaW50ZXJhY3Rpb25zXG4gICAgbGlzdDogW10sXG4gICAgbmV3IChvcHRpb25zKSB7XG4gICAgICBvcHRpb25zLnNpZ25hbHMgPSBzaWduYWxzXG5cbiAgICAgIHJldHVybiBuZXcgc2NvcGUuSW50ZXJhY3Rpb24ob3B0aW9ucylcbiAgICB9LFxuICAgIGxpc3RlbmVycyxcbiAgICBldmVudE1hcCxcbiAgICBwb2ludGVyTW92ZVRvbGVyYW5jZTogMSxcbiAgfVxufVxuXG5mdW5jdGlvbiBkb09uSW50ZXJhY3Rpb25zIChtZXRob2QsIHNjb3BlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBjb25zdCBpbnRlcmFjdGlvbnMgPSBzY29wZS5pbnRlcmFjdGlvbnMubGlzdFxuXG4gICAgY29uc3QgcG9pbnRlclR5cGUgPSBwb2ludGVyVXRpbHMuZ2V0UG9pbnRlclR5cGUoZXZlbnQpXG4gICAgY29uc3QgW2V2ZW50VGFyZ2V0LCBjdXJFdmVudFRhcmdldF0gPSBwb2ludGVyVXRpbHMuZ2V0RXZlbnRUYXJnZXRzKGV2ZW50KVxuICAgIGNvbnN0IG1hdGNoZXMgPSBbXSAvLyBbIFtwb2ludGVyLCBpbnRlcmFjdGlvbl0sIC4uLl1cblxuICAgIGlmIChicm93c2VyLnN1cHBvcnRzVG91Y2ggJiYgL3RvdWNoLy50ZXN0KGV2ZW50LnR5cGUpKSB7XG4gICAgICBzY29wZS5wcmV2VG91Y2hUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKClcblxuICAgICAgZm9yIChjb25zdCBjaGFuZ2VkVG91Y2ggb2YgZXZlbnQuY2hhbmdlZFRvdWNoZXMpIHtcbiAgICAgICAgY29uc3QgcG9pbnRlciA9IGNoYW5nZWRUb3VjaFxuICAgICAgICBjb25zdCBwb2ludGVySWQgPSBwb2ludGVyVXRpbHMuZ2V0UG9pbnRlcklkKHBvaW50ZXIpXG4gICAgICAgIGNvbnN0IHNlYXJjaERldGFpbHMgPSB7XG4gICAgICAgICAgcG9pbnRlcixcbiAgICAgICAgICBwb2ludGVySWQsXG4gICAgICAgICAgcG9pbnRlclR5cGUsXG4gICAgICAgICAgZXZlbnRUeXBlOiBldmVudC50eXBlLFxuICAgICAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgICAgIGN1ckV2ZW50VGFyZ2V0LFxuICAgICAgICAgIHNjb3BlLFxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGludGVyYWN0aW9uID0gZ2V0SW50ZXJhY3Rpb24oc2VhcmNoRGV0YWlscylcblxuICAgICAgICBtYXRjaGVzLnB1c2goW1xuICAgICAgICAgIHNlYXJjaERldGFpbHMucG9pbnRlcixcbiAgICAgICAgICBzZWFyY2hEZXRhaWxzLmV2ZW50VGFyZ2V0LFxuICAgICAgICAgIHNlYXJjaERldGFpbHMuY3VyRXZlbnRUYXJnZXQsXG4gICAgICAgICAgaW50ZXJhY3Rpb24sXG4gICAgICAgIF0pXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgbGV0IGludmFsaWRQb2ludGVyID0gZmFsc2VcblxuICAgICAgaWYgKCFicm93c2VyLnN1cHBvcnRzUG9pbnRlckV2ZW50ICYmIC9tb3VzZS8udGVzdChldmVudC50eXBlKSkge1xuICAgICAgICAvLyBpZ25vcmUgbW91c2UgZXZlbnRzIHdoaWxlIHRvdWNoIGludGVyYWN0aW9ucyBhcmUgYWN0aXZlXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW50ZXJhY3Rpb25zLmxlbmd0aCAmJiAhaW52YWxpZFBvaW50ZXI7IGkrKykge1xuICAgICAgICAgIGludmFsaWRQb2ludGVyID0gaW50ZXJhY3Rpb25zW2ldLnBvaW50ZXJUeXBlICE9PSAnbW91c2UnICYmIGludGVyYWN0aW9uc1tpXS5wb2ludGVySXNEb3duXG4gICAgICAgIH1cblxuICAgICAgICAvLyB0cnkgdG8gaWdub3JlIG1vdXNlIGV2ZW50cyB0aGF0IGFyZSBzaW11bGF0ZWQgYnkgdGhlIGJyb3dzZXJcbiAgICAgICAgLy8gYWZ0ZXIgYSB0b3VjaCBldmVudFxuICAgICAgICBpbnZhbGlkUG9pbnRlciA9IGludmFsaWRQb2ludGVyIHx8XG4gICAgICAgICAgKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc2NvcGUucHJldlRvdWNoVGltZSA8IDUwMCkgfHxcbiAgICAgICAgICAvLyBvbiBpT1MgYW5kIEZpcmVmb3ggTW9iaWxlLCBNb3VzZUV2ZW50LnRpbWVTdGFtcCBpcyB6ZXJvIGlmIHNpbXVsYXRlZFxuICAgICAgICAgIGV2ZW50LnRpbWVTdGFtcCA9PT0gMFxuICAgICAgfVxuXG4gICAgICBpZiAoIWludmFsaWRQb2ludGVyKSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaERldGFpbHMgPSB7XG4gICAgICAgICAgcG9pbnRlcjogZXZlbnQsXG4gICAgICAgICAgcG9pbnRlcklkOiBwb2ludGVyVXRpbHMuZ2V0UG9pbnRlcklkKGV2ZW50KSxcbiAgICAgICAgICBwb2ludGVyVHlwZSxcbiAgICAgICAgICBldmVudFR5cGU6IGV2ZW50LnR5cGUsXG4gICAgICAgICAgY3VyRXZlbnRUYXJnZXQsXG4gICAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgICAgc2NvcGUsXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbnRlcmFjdGlvbiA9IGdldEludGVyYWN0aW9uKHNlYXJjaERldGFpbHMpXG5cbiAgICAgICAgbWF0Y2hlcy5wdXNoKFtcbiAgICAgICAgICBzZWFyY2hEZXRhaWxzLnBvaW50ZXIsXG4gICAgICAgICAgc2VhcmNoRGV0YWlscy5ldmVudFRhcmdldCxcbiAgICAgICAgICBzZWFyY2hEZXRhaWxzLmN1ckV2ZW50VGFyZ2V0LFxuICAgICAgICAgIGludGVyYWN0aW9uLFxuICAgICAgICBdKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3dcbiAgICBmb3IgKGNvbnN0IFtwb2ludGVyLCBldmVudFRhcmdldCwgY3VyRXZlbnRUYXJnZXQsIGludGVyYWN0aW9uXSBvZiBtYXRjaGVzKSB7XG4gICAgICBpbnRlcmFjdGlvblttZXRob2RdKHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCwgY3VyRXZlbnRUYXJnZXQpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldEludGVyYWN0aW9uIChzZWFyY2hEZXRhaWxzKSB7XG4gIGNvbnN0IHsgcG9pbnRlclR5cGUsIHNjb3BlIH0gPSBzZWFyY2hEZXRhaWxzXG5cbiAgY29uc3QgZm91bmRJbnRlcmFjdGlvbiA9IGZpbmRlci5zZWFyY2goc2VhcmNoRGV0YWlscylcbiAgY29uc3Qgc2lnbmFsQXJnID0geyBpbnRlcmFjdGlvbjogZm91bmRJbnRlcmFjdGlvbiwgc2VhcmNoRGV0YWlscyB9XG5cbiAgc2NvcGUuaW50ZXJhY3Rpb25zLnNpZ25hbHMuZmlyZSgnZmluZCcsIHNpZ25hbEFyZylcblxuICByZXR1cm4gc2lnbmFsQXJnLmludGVyYWN0aW9uIHx8IG5ld0ludGVyYWN0aW9uKHsgcG9pbnRlclR5cGUgfSwgc2NvcGUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXdJbnRlcmFjdGlvbiAob3B0aW9ucywgc2NvcGUpIHtcbiAgY29uc3QgaW50ZXJhY3Rpb24gPSBzY29wZS5pbnRlcmFjdGlvbnMubmV3KG9wdGlvbnMpXG5cbiAgc2NvcGUuaW50ZXJhY3Rpb25zLmxpc3QucHVzaChpbnRlcmFjdGlvbilcbiAgcmV0dXJuIGludGVyYWN0aW9uXG59XG5cbmZ1bmN0aW9uIG9uRG9jU2lnbmFsICh7IGRvYywgc2NvcGUsIG9wdGlvbnMgfSwgc2lnbmFsTmFtZSkge1xuICBjb25zdCB7IGV2ZW50TWFwIH0gPSBzY29wZS5pbnRlcmFjdGlvbnNcbiAgY29uc3QgZXZlbnRNZXRob2QgPSBzaWduYWxOYW1lLmluZGV4T2YoJ2FkZCcpID09PSAwXG4gICAgPyBldmVudHMuYWRkIDogZXZlbnRzLnJlbW92ZVxuXG4gIGlmIChzY29wZS5icm93c2VyLmlzSU9TICYmICFvcHRpb25zLmV2ZW50cykge1xuICAgIG9wdGlvbnMuZXZlbnRzID0geyBwYXNzaXZlOiBmYWxzZSB9XG4gIH1cblxuICAvLyBkZWxlZ2F0ZSBldmVudCBsaXN0ZW5lclxuICBmb3IgKGNvbnN0IGV2ZW50VHlwZSBpbiBldmVudHMuZGVsZWdhdGVkRXZlbnRzKSB7XG4gICAgZXZlbnRNZXRob2QoZG9jLCBldmVudFR5cGUsIGV2ZW50cy5kZWxlZ2F0ZUxpc3RlbmVyKVxuICAgIGV2ZW50TWV0aG9kKGRvYywgZXZlbnRUeXBlLCBldmVudHMuZGVsZWdhdGVVc2VDYXB0dXJlLCB0cnVlKVxuICB9XG5cbiAgY29uc3QgZXZlbnRPcHRpb25zID0gb3B0aW9ucyAmJiBvcHRpb25zLmV2ZW50c1xuXG4gIGZvciAoY29uc3QgZXZlbnRUeXBlIGluIGV2ZW50TWFwKSB7XG4gICAgZXZlbnRNZXRob2QoZG9jLCBldmVudFR5cGUsIGV2ZW50TWFwW2V2ZW50VHlwZV0sIGV2ZW50T3B0aW9ucylcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluc3RhbGwsXG4gIG9uRG9jU2lnbmFsLFxuICBkb09uSW50ZXJhY3Rpb25zLFxuICBuZXdJbnRlcmFjdGlvbixcbiAgbWV0aG9kTmFtZXMsXG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZXJhY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sT0FBTyxNQUFNLDJCQUEyQixDQUFBO0FBQy9DLE9BQU8sVUFBVSxNQUFNLDhCQUE4QixDQUFBO0FBQ3JELE9BQU8sTUFBTSxNQUFNLDBCQUEwQixDQUFBO0FBQzdDLE9BQU8sTUFBeUIsTUFBTSxxQ0FBcUMsQ0FBQTtBQUMzRSxPQUFPLFlBQVksTUFBTSxnQ0FBZ0MsQ0FBQTtBQUN6RCxPQUFPLE9BQU8sTUFBTSwyQkFBMkIsQ0FBQTtBQUMvQyxPQUFPLGVBQWUsTUFBTSxlQUFlLENBQUE7QUFrQjNDLE1BQU0sV0FBVyxHQUFHO0lBQ2xCLGFBQWEsRUFBRSxhQUFhLEVBQUUsV0FBVztJQUN6QyxlQUFlLEVBQUUsZUFBZSxFQUFFLFlBQVk7Q0FDL0MsQ0FBQTtBQUVELFNBQVMsT0FBTyxDQUFFLEtBQVk7SUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtJQUU3QixNQUFNLFNBQVMsR0FBRyxFQUFTLENBQUE7SUFFM0IsS0FBSyxNQUFNLE1BQU0sSUFBSSxXQUFXLEVBQUU7UUFDaEMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQTtLQUNwRDtJQUVELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUE7SUFDdkMsTUFBTSxRQUFRLEdBQUcsRUFBMEMsQ0FBQTtJQUUzRCxJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUU7UUFDM0IsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUcsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFBO1FBQ3BELFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFHLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQTtRQUNwRCxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBSyxH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SUFDUCxXQUFXO0lBQ1gsZ0JBQWdCO0lBQ2hCLGNBQWM7SUFDZCxXQUFXO0NBQ1osQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBicm93c2VyIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2Jyb3dzZXInXG5pbXBvcnQgZG9tT2JqZWN0cyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9kb21PYmplY3RzJ1xuaW1wb3J0IGV2ZW50cyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9ldmVudHMnXG5pbXBvcnQgZmluZGVyLCB7IFNlYXJjaERldGFpbHMgfSBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9pbnRlcmFjdGlvbkZpbmRlcidcbmltcG9ydCBwb2ludGVyVXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvcG9pbnRlclV0aWxzJ1xuaW1wb3J0IFNpZ25hbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvU2lnbmFscydcbmltcG9ydCBJbnRlcmFjdGlvbkJhc2UgZnJvbSAnLi9JbnRlcmFjdGlvbidcbmltcG9ydCB7IFNjb3BlIH0gZnJvbSAnLi9zY29wZSdcblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvc2NvcGUnIHtcbiAgaW50ZXJmYWNlIFNjb3BlIHtcbiAgICBJbnRlcmFjdGlvbjogdHlwZW9mIEludGVyYWN0aW9uQmFzZVxuICAgIGludGVyYWN0aW9uczoge1xuICAgICAgc2lnbmFsczogU2lnbmFsc1xuICAgICAgbmV3OiAob3B0aW9uczogYW55KSA9PiBJbnRlcmFjdGlvbkJhc2VcbiAgICAgIGxpc3Q6IEludGVyYWN0aW9uQmFzZVtdXG4gICAgICBsaXN0ZW5lcnM6IHsgW3R5cGU6IHN0cmluZ106IEludGVyYWN0Lkxpc3RlbmVyIH1cbiAgICAgIGV2ZW50TWFwOiBhbnlcbiAgICAgIHBvaW50ZXJNb3ZlVG9sZXJhbmNlOiBudW1iZXJcbiAgICB9XG4gICAgcHJldlRvdWNoVGltZTogbnVtYmVyXG4gIH1cbn1cblxuY29uc3QgbWV0aG9kTmFtZXMgPSBbXG4gICdwb2ludGVyRG93bicsICdwb2ludGVyTW92ZScsICdwb2ludGVyVXAnLFxuICAndXBkYXRlUG9pbnRlcicsICdyZW1vdmVQb2ludGVyJywgJ3dpbmRvd0JsdXInLFxuXVxuXG5mdW5jdGlvbiBpbnN0YWxsIChzY29wZTogU2NvcGUpIHtcbiAgY29uc3Qgc2lnbmFscyA9IG5ldyBTaWduYWxzKClcblxuICBjb25zdCBsaXN0ZW5lcnMgPSB7fSBhcyBhbnlcblxuICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBtZXRob2ROYW1lcykge1xuICAgIGxpc3RlbmVyc1ttZXRob2RdID0gZG9PbkludGVyYWN0aW9ucyhtZXRob2QsIHNjb3BlKVxuICB9XG5cbiAgY29uc3QgcEV2ZW50VHlwZXMgPSBicm93c2VyLnBFdmVudFR5cGVzXG4gIGNvbnN0IGV2ZW50TWFwID0ge30gYXMgeyBba2V5OiBzdHJpbmddOiBJbnRlcmFjdC5MaXN0ZW5lciB9XG5cbiAgaWYgKGRvbU9iamVjdHMuUG9pbnRlckV2ZW50KSB7XG4gICAgZXZlbnRNYXBbcEV2ZW50VHlwZXMuZG93biAgXSA9IGxpc3RlbmVycy5wb2ludGVyRG93blxuICAgIGV2ZW50TWFwW3BFdmVudFR5cGVzLm1vdmUgIF0gPSBsaXN0ZW5lcnMucG9pbnRlck1vdmVcbiAgICBldmVudE1hcFtwRXZlbnRUeXBlcy51cCAgICBdID0gbGlzdGVuZXJzLnBvaW50ZXJVcFxuICAgIGV2ZW50TWFwW3BFdmVudFR5cGVzLmNhbmNlbF0gPSBsaXN0ZW5lcnMucG9pbnRlclVwXG4gIH1cbiAgZWxzZSB7XG4gICAgZXZlbnRNYXAubW91c2Vkb3duICAgPSBsaXN0ZW5lcnMucG9pbnRlckRvd25cbiAgICBldmVudE1hcC5tb3VzZW1vdmUgICA9IGxpc3RlbmVycy5wb2ludGVyTW92ZVxuICAgIGV2ZW50TWFwLm1vdXNldXAgICAgID0gbGlzdGVuZXJzLnBvaW50ZXJVcFxuXG4gICAgZXZlbnRNYXAudG91Y2hzdGFydCAgPSBsaXN0ZW5lcnMucG9pbnRlckRvd25cbiAgICBldmVudE1hcC50b3VjaG1vdmUgICA9IGxpc3RlbmVycy5wb2ludGVyTW92ZVxuICAgIGV2ZW50TWFwLnRvdWNoZW5kICAgID0gbGlzdGVuZXJzLnBvaW50ZXJVcFxuICAgIGV2ZW50TWFwLnRvdWNoY2FuY2VsID0gbGlzdGVuZXJzLnBvaW50ZXJVcFxuICB9XG5cbiAgZXZlbnRNYXAuYmx1ciA9IChldmVudCkgPT4ge1xuICAgIGZvciAoY29uc3QgaW50ZXJhY3Rpb24gb2Ygc2NvcGUuaW50ZXJhY3Rpb25zLmxpc3QpIHtcbiAgICAgIGludGVyYWN0aW9uLmRvY3VtZW50Qmx1cihldmVudClcbiAgICB9XG4gIH1cblxuICBzY29wZS5zaWduYWxzLm9uKCdhZGQtZG9jdW1lbnQnLCBvbkRvY1NpZ25hbClcbiAgc2NvcGUuc2lnbmFscy5vbigncmVtb3ZlLWRvY3VtZW50Jywgb25Eb2NTaWduYWwpXG5cbiAgLy8gZm9yIGlnbm9yaW5nIGJyb3dzZXIncyBzaW11bGF0ZWQgbW91c2UgZXZlbnRzXG4gIHNjb3BlLnByZXZUb3VjaFRpbWUgPSAwXG5cbiAgc2NvcGUuSW50ZXJhY3Rpb24gPSBjbGFzcyBJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uQmFzZSB7XG4gICAgZ2V0IHBvaW50ZXJNb3ZlVG9sZXJhbmNlICgpIHtcbiAgICAgIHJldHVybiBzY29wZS5pbnRlcmFjdGlvbnMucG9pbnRlck1vdmVUb2xlcmFuY2VcbiAgICB9XG5cbiAgICBzZXQgcG9pbnRlck1vdmVUb2xlcmFuY2UgKHZhbHVlKSB7XG4gICAgICBzY29wZS5pbnRlcmFjdGlvbnMucG9pbnRlck1vdmVUb2xlcmFuY2UgPSB2YWx1ZVxuICAgIH1cbiAgfVxuICBzY29wZS5pbnRlcmFjdGlvbnMgPSB7XG4gICAgc2lnbmFscyxcbiAgICAvLyBhbGwgYWN0aXZlIGFuZCBpZGxlIGludGVyYWN0aW9uc1xuICAgIGxpc3Q6IFtdLFxuICAgIG5ldyAob3B0aW9ucykge1xuICAgICAgb3B0aW9ucy5zaWduYWxzID0gc2lnbmFsc1xuXG4gICAgICByZXR1cm4gbmV3IHNjb3BlLkludGVyYWN0aW9uKG9wdGlvbnMpXG4gICAgfSxcbiAgICBsaXN0ZW5lcnMsXG4gICAgZXZlbnRNYXAsXG4gICAgcG9pbnRlck1vdmVUb2xlcmFuY2U6IDEsXG4gIH1cbn1cblxuZnVuY3Rpb24gZG9PbkludGVyYWN0aW9ucyAobWV0aG9kLCBzY29wZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgY29uc3QgaW50ZXJhY3Rpb25zID0gc2NvcGUuaW50ZXJhY3Rpb25zLmxpc3RcblxuICAgIGNvbnN0IHBvaW50ZXJUeXBlID0gcG9pbnRlclV0aWxzLmdldFBvaW50ZXJUeXBlKGV2ZW50KVxuICAgIGNvbnN0IFtldmVudFRhcmdldCwgY3VyRXZlbnRUYXJnZXRdID0gcG9pbnRlclV0aWxzLmdldEV2ZW50VGFyZ2V0cyhldmVudClcbiAgICBjb25zdCBtYXRjaGVzID0gW10gLy8gWyBbcG9pbnRlciwgaW50ZXJhY3Rpb25dLCAuLi5dXG5cbiAgICBpZiAoYnJvd3Nlci5zdXBwb3J0c1RvdWNoICYmIC90b3VjaC8udGVzdChldmVudC50eXBlKSkge1xuICAgICAgc2NvcGUucHJldlRvdWNoVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG5cbiAgICAgIGZvciAoY29uc3QgY2hhbmdlZFRvdWNoIG9mIGV2ZW50LmNoYW5nZWRUb3VjaGVzKSB7XG4gICAgICAgIGNvbnN0IHBvaW50ZXIgPSBjaGFuZ2VkVG91Y2hcbiAgICAgICAgY29uc3QgcG9pbnRlcklkID0gcG9pbnRlclV0aWxzLmdldFBvaW50ZXJJZChwb2ludGVyKVxuICAgICAgICBjb25zdCBzZWFyY2hEZXRhaWxzOiBTZWFyY2hEZXRhaWxzID0ge1xuICAgICAgICAgIHBvaW50ZXIsXG4gICAgICAgICAgcG9pbnRlcklkLFxuICAgICAgICAgIHBvaW50ZXJUeXBlLFxuICAgICAgICAgIGV2ZW50VHlwZTogZXZlbnQudHlwZSxcbiAgICAgICAgICBldmVudFRhcmdldCxcbiAgICAgICAgICBjdXJFdmVudFRhcmdldCxcbiAgICAgICAgICBzY29wZSxcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnRlcmFjdGlvbiA9IGdldEludGVyYWN0aW9uKHNlYXJjaERldGFpbHMpXG5cbiAgICAgICAgbWF0Y2hlcy5wdXNoKFtcbiAgICAgICAgICBzZWFyY2hEZXRhaWxzLnBvaW50ZXIsXG4gICAgICAgICAgc2VhcmNoRGV0YWlscy5ldmVudFRhcmdldCxcbiAgICAgICAgICBzZWFyY2hEZXRhaWxzLmN1ckV2ZW50VGFyZ2V0LFxuICAgICAgICAgIGludGVyYWN0aW9uLFxuICAgICAgICBdKVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGxldCBpbnZhbGlkUG9pbnRlciA9IGZhbHNlXG5cbiAgICAgIGlmICghYnJvd3Nlci5zdXBwb3J0c1BvaW50ZXJFdmVudCAmJiAvbW91c2UvLnRlc3QoZXZlbnQudHlwZSkpIHtcbiAgICAgICAgLy8gaWdub3JlIG1vdXNlIGV2ZW50cyB3aGlsZSB0b3VjaCBpbnRlcmFjdGlvbnMgYXJlIGFjdGl2ZVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGludGVyYWN0aW9ucy5sZW5ndGggJiYgIWludmFsaWRQb2ludGVyOyBpKyspIHtcbiAgICAgICAgICBpbnZhbGlkUG9pbnRlciA9IGludGVyYWN0aW9uc1tpXS5wb2ludGVyVHlwZSAhPT0gJ21vdXNlJyAmJiBpbnRlcmFjdGlvbnNbaV0ucG9pbnRlcklzRG93blxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdHJ5IHRvIGlnbm9yZSBtb3VzZSBldmVudHMgdGhhdCBhcmUgc2ltdWxhdGVkIGJ5IHRoZSBicm93c2VyXG4gICAgICAgIC8vIGFmdGVyIGEgdG91Y2ggZXZlbnRcbiAgICAgICAgaW52YWxpZFBvaW50ZXIgPSBpbnZhbGlkUG9pbnRlciB8fFxuICAgICAgICAgIChuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHNjb3BlLnByZXZUb3VjaFRpbWUgPCA1MDApIHx8XG4gICAgICAgICAgLy8gb24gaU9TIGFuZCBGaXJlZm94IE1vYmlsZSwgTW91c2VFdmVudC50aW1lU3RhbXAgaXMgemVybyBpZiBzaW11bGF0ZWRcbiAgICAgICAgICBldmVudC50aW1lU3RhbXAgPT09IDBcbiAgICAgIH1cblxuICAgICAgaWYgKCFpbnZhbGlkUG9pbnRlcikge1xuICAgICAgICBjb25zdCBzZWFyY2hEZXRhaWxzID0ge1xuICAgICAgICAgIHBvaW50ZXI6IGV2ZW50LFxuICAgICAgICAgIHBvaW50ZXJJZDogcG9pbnRlclV0aWxzLmdldFBvaW50ZXJJZChldmVudCksXG4gICAgICAgICAgcG9pbnRlclR5cGUsXG4gICAgICAgICAgZXZlbnRUeXBlOiBldmVudC50eXBlLFxuICAgICAgICAgIGN1ckV2ZW50VGFyZ2V0LFxuICAgICAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgICAgIHNjb3BlLFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW50ZXJhY3Rpb24gPSBnZXRJbnRlcmFjdGlvbihzZWFyY2hEZXRhaWxzKVxuXG4gICAgICAgIG1hdGNoZXMucHVzaChbXG4gICAgICAgICAgc2VhcmNoRGV0YWlscy5wb2ludGVyLFxuICAgICAgICAgIHNlYXJjaERldGFpbHMuZXZlbnRUYXJnZXQsXG4gICAgICAgICAgc2VhcmNoRGV0YWlscy5jdXJFdmVudFRhcmdldCxcbiAgICAgICAgICBpbnRlcmFjdGlvbixcbiAgICAgICAgXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG4gICAgZm9yIChjb25zdCBbcG9pbnRlciwgZXZlbnRUYXJnZXQsIGN1ckV2ZW50VGFyZ2V0LCBpbnRlcmFjdGlvbl0gb2YgbWF0Y2hlcykge1xuICAgICAgaW50ZXJhY3Rpb25bbWV0aG9kXShwb2ludGVyLCBldmVudCwgZXZlbnRUYXJnZXQsIGN1ckV2ZW50VGFyZ2V0KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRJbnRlcmFjdGlvbiAoc2VhcmNoRGV0YWlsczogU2VhcmNoRGV0YWlscykge1xuICBjb25zdCB7IHBvaW50ZXJUeXBlLCBzY29wZSB9ID0gc2VhcmNoRGV0YWlsc1xuXG4gIGNvbnN0IGZvdW5kSW50ZXJhY3Rpb24gPSBmaW5kZXIuc2VhcmNoKHNlYXJjaERldGFpbHMpXG4gIGNvbnN0IHNpZ25hbEFyZyA9IHsgaW50ZXJhY3Rpb246IGZvdW5kSW50ZXJhY3Rpb24sIHNlYXJjaERldGFpbHMgfVxuXG4gIHNjb3BlLmludGVyYWN0aW9ucy5zaWduYWxzLmZpcmUoJ2ZpbmQnLCBzaWduYWxBcmcpXG5cbiAgcmV0dXJuIHNpZ25hbEFyZy5pbnRlcmFjdGlvbiB8fCBuZXdJbnRlcmFjdGlvbih7IHBvaW50ZXJUeXBlIH0sIHNjb3BlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV3SW50ZXJhY3Rpb24gKG9wdGlvbnMsIHNjb3BlKSB7XG4gIGNvbnN0IGludGVyYWN0aW9uID0gc2NvcGUuaW50ZXJhY3Rpb25zLm5ldyhvcHRpb25zKVxuXG4gIHNjb3BlLmludGVyYWN0aW9ucy5saXN0LnB1c2goaW50ZXJhY3Rpb24pXG4gIHJldHVybiBpbnRlcmFjdGlvblxufVxuXG5mdW5jdGlvbiBvbkRvY1NpZ25hbCAoeyBkb2MsIHNjb3BlLCBvcHRpb25zIH0sIHNpZ25hbE5hbWUpIHtcbiAgY29uc3QgeyBldmVudE1hcCB9ID0gc2NvcGUuaW50ZXJhY3Rpb25zXG4gIGNvbnN0IGV2ZW50TWV0aG9kID0gc2lnbmFsTmFtZS5pbmRleE9mKCdhZGQnKSA9PT0gMFxuICAgID8gZXZlbnRzLmFkZCA6IGV2ZW50cy5yZW1vdmVcblxuICBpZiAoc2NvcGUuYnJvd3Nlci5pc0lPUyAmJiAhb3B0aW9ucy5ldmVudHMpIHtcbiAgICBvcHRpb25zLmV2ZW50cyA9IHsgcGFzc2l2ZTogZmFsc2UgfVxuICB9XG5cbiAgLy8gZGVsZWdhdGUgZXZlbnQgbGlzdGVuZXJcbiAgZm9yIChjb25zdCBldmVudFR5cGUgaW4gZXZlbnRzLmRlbGVnYXRlZEV2ZW50cykge1xuICAgIGV2ZW50TWV0aG9kKGRvYywgZXZlbnRUeXBlLCBldmVudHMuZGVsZWdhdGVMaXN0ZW5lcilcbiAgICBldmVudE1ldGhvZChkb2MsIGV2ZW50VHlwZSwgZXZlbnRzLmRlbGVnYXRlVXNlQ2FwdHVyZSwgdHJ1ZSlcbiAgfVxuXG4gIGNvbnN0IGV2ZW50T3B0aW9ucyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5ldmVudHNcblxuICBmb3IgKGNvbnN0IGV2ZW50VHlwZSBpbiBldmVudE1hcCkge1xuICAgIGV2ZW50TWV0aG9kKGRvYywgZXZlbnRUeXBlLCBldmVudE1hcFtldmVudFR5cGVdLCBldmVudE9wdGlvbnMpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpbnN0YWxsLFxuICBvbkRvY1NpZ25hbCxcbiAgZG9PbkludGVyYWN0aW9ucyxcbiAgbmV3SW50ZXJhY3Rpb24sXG4gIG1ldGhvZE5hbWVzLFxufVxuIl19 \ No newline at end of file diff --git a/packages/core/package.json b/packages/core/package.json index cb0e24485..734912056 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,12 +1,12 @@ { "name": "@interactjs/core", - "version": "1.4.0-alpha.27+sha.12b8f8f", + "version": "1.4.0-alpha.28+sha.e624c4d", "peerDependencies": { - "@interactjs/utils": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/utils": "1.4.0-alpha.28+sha.e624c4d" }, "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/utils": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/_dev": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/utils": "1.4.0-alpha.28+sha.e624c4d" }, "publishConfig": { "access": "public" diff --git a/packages/core/scope.d.ts b/packages/core/scope.d.ts index 3dac254c1..24b208a3d 100644 --- a/packages/core/scope.d.ts +++ b/packages/core/scope.d.ts @@ -82,15 +82,14 @@ export declare class Scope { getDocIndex(doc: Document): number; getDocOptions(doc: Document): any; } -declare class InteractableSet { +export declare class InteractableSet { protected scope: Scope; signals: utils.Signals; list: InteractableBase[]; constructor(scope: Scope); - new(target: Interact.Target, options: any): InteractableBase; + new(target: Interact.Target, options?: any): InteractableBase; indexOfElement(target: Interact.Target, context: Document | Element): number; get(element: Interact.Target, options: any, dontCheckInContext?: boolean): InteractableBase; forEachMatch(element: Document | Element, callback: (interactable: any) => any): any; } export declare function initScope(scope: Scope, window: Window): Scope; -export {}; diff --git a/packages/core/scope.js b/packages/core/scope.js index f33a3b20a..78c169b63 100644 --- a/packages/core/scope.js +++ b/packages/core/scope.js @@ -91,7 +91,7 @@ export class Scope { return docIndex === -1 ? null : this.documents[docIndex].options; } } -class InteractableSet { +export class InteractableSet { constructor(scope) { this.scope = scope; this.signals = new utils.Signals(); @@ -156,4 +156,4 @@ export function initScope(scope, window) { scope.document = window.document; return scope; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzY29wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFBO0FBQzFDLE9BQU8sVUFBVSxNQUFNLDhCQUE4QixDQUFBO0FBQ3JELE9BQU8sUUFBUSxNQUFNLGtCQUFrQixDQUFBO0FBQ3ZDLE9BQU8sU0FBUyxNQUFNLGFBQWEsQ0FBQTtBQUNuQyxPQUFPLGdCQUFnQixNQUFNLGdCQUFnQixDQUFBO0FBQzdDLE9BQU8sYUFBYSxNQUFNLGlCQUFpQixDQUFBO0FBQzNDLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFBO0FBRXpDLE1BQU0sRUFDSixHQUFHLEVBQ0gsT0FBTyxFQUNQLEdBQUcsRUFDSCxPQUFPLEVBQ1AsTUFBTSxHQUNQLEdBQUcsS0FBSyxDQUFBO0FBRVQsTUFBTSxDQUFOLElBQVksVUFDWDtBQURELFdBQVksVUFBVTtBQUN0QixDQUFDLEVBRFcsVUFBVSxLQUFWLFVBQVUsUUFDckI7QUFRRCxNQUFNLFVBQVUsV0FBVztJQUN6QixPQUFPLElBQUksS0FBSyxFQUFFLENBQUE7QUFDcEIsQ0FBQztBQUlELE1BQU0sT0FBTyxLQUFLO0lBMkJoQjtRQTFCQSxnQkFBZ0I7UUFDaEIsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7UUFDdkIsWUFBTyxHQUFHLE9BQU8sQ0FBQTtRQUNqQixXQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ2YsVUFBSyxHQUFHLEtBQUssQ0FBQTtRQUNiLGFBQVEsR0FBYSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBYSxDQUFBO1FBQ3RELGNBQVMsR0FBRyxTQUFTLENBQUE7UUFDckIsWUFBTyxHQUFZO1lBQ2pCLEtBQUssRUFBRSxFQUFFO1lBQ1QsVUFBVSxFQUFFLEVBQUU7WUFDZCxVQUFVLEVBQUUsRUFBRTtTQUNmLENBQUE7UUFFRCxrQkFBYSxHQUFHLGFBQWEsQ0FBQTtRQUU3QixrQkFB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QTtJQUNwQixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFbkIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMzQixLQUFLLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUE7SUFFaEMsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMnXG5pbXBvcnQgZG9tT2JqZWN0cyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9kb21PYmplY3RzJ1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4vZGVmYXVsdE9wdGlvbnMnXG5pbXBvcnQgRXZlbnRhYmxlIGZyb20gJy4vRXZlbnRhYmxlJ1xuaW1wb3J0IEludGVyYWN0YWJsZUJhc2UgZnJvbSAnLi9JbnRlcmFjdGFibGUnXG5pbXBvcnQgSW50ZXJhY3RFdmVudCBmcm9tICcuL0ludGVyYWN0RXZlbnQnXG5pbXBvcnQgaW50ZXJhY3Rpb25zIGZyb20gJy4vaW50ZXJhY3Rpb25zJ1xuXG5jb25zdCB7XG4gIHdpbixcbiAgYnJvd3NlcixcbiAgcmFmLFxuICBTaWduYWxzLFxuICBldmVudHMsXG59ID0gdXRpbHNcblxuZXhwb3J0IGVudW0gQWN0aW9uTmFtZSB7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9ucyB7XG4gIG5hbWVzOiBBY3Rpb25OYW1lW11cbiAgbWV0aG9kRGljdDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVxuICBldmVudFR5cGVzOiBzdHJpbmdbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2NvcGUgKCkge1xuICByZXR1cm4gbmV3IFNjb3BlKClcbn1cblxuZXhwb3J0IHR5cGUgRGVmYXVsdHMgPSB0eXBlb2YgZGVmYXVsdHNcblxuZXhwb3J0IGNsYXNzIFNjb3BlIHtcbiAgLy8gRklYTUUgU2lnbmFsc1xuICBzaWduYWxzID0gbmV3IFNpZ25hbHMoKVxuICBicm93c2VyID0gYnJvd3NlclxuICBldmVudHMgPSBldmVudHNcbiAgdXRpbHMgPSB1dGlsc1xuICBkZWZhdWx0czogRGVmYXVsdHMgPSB1dGlscy5jbG9uZShkZWZhdWx0cykgYXMgRGVmYXVsdHNcbiAgRXZlbnRhYmxlID0gRXZlbnRhYmxlXG4gIGFjdGlvbnM6IEFjdGlvbnMgPSB7XG4gICAgbmFtZXM6IFtdLFxuICAgIG1ldGhvZERpY3Q6IHt9LFxuICAgIGV2ZW50VHlwZXM6IFtdLFxuICB9XG5cbiAgSW50ZXJhY3RFdmVudCA9IEludGVyYWN0RXZlbnRcbiAgSW50ZXJhY3RhYmxlITogdHlwZW9mIEludGVyYWN0YWJsZUJhc2VcbiAgaW50ZXJhY3RhYmxlcyA9IG5ldyBJbnRlcmFjdGFibGVTZXQodGhpcylcblxuICAvLyBtYWluIHdpbmRvd1xuICBfd2luITogV2luZG93XG5cbiAgLy8gbWFpbiBkb2N1bWVudFxuICBkb2N1bWVudCE6IERvY3VtZW50XG5cbiAgLy8gYWxsIGRvY3VtZW50cyBiZWluZyBsaXN0ZW5lZCB0b1xuICBkb2N1bWVudHM6IEFycmF5PHsgZG9jOiBEb2N1bWVudCwgb3B0aW9uczogYW55IH0+ID0gW11cblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzIGFzIFNjb3BlO1xuXG4gICAgKHRoaXMgYXMgeyBJbnRlcmFjdGFibGU6IHR5cGVvZiBJbnRlcmFjdGFibGVCYXNlIH0pLkludGVyYWN0YWJsZSA9IGNsYXNzIEludGVyYWN0YWJsZSBleHRlbmRzIEludGVyYWN0YWJsZUJhc2UgaW1wbGVtZW50cyBJbnRlcmFjdGFibGVCYXNlIHtcbiAgICAgIGdldCBfZGVmYXVsdHMgKCkgeyByZXR1cm4gc2NvcGUuZGVmYXVsdHMgfVxuXG4gICAgICBzZXQgKG9wdGlvbnM6IGFueSkge1xuICAgICAgICBzdXBlci5zZXQob3B0aW9ucylcblxuICAgICAgICBzY29wZS5pbnRlcmFjdGFibGVzLnNpZ25hbHMuZmlyZSgnc2V0Jywge1xuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgaW50ZXJhY3RhYmxlOiB0aGlzLFxuICAgICAgICB9KVxuXG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgICB9XG5cbiAgICAgIHVuc2V0ICgpIHtcbiAgICAgICAgc3VwZXIudW5zZXQoKVxuICAgICAgICBzY29wZS5pbnRlcmFjdGFibGVzLnNpZ25hbHMuZmlyZSgndW5zZXQnLCB7IGludGVyYWN0YWJsZTogdGhpcyB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGluaXQgKHdpbmRvdzogV2luZG93KSB7XG4gICAgcmV0dXJuIGluaXRTY29wZSh0aGlzLCB3aW5kb3cpXG4gIH1cblxuICBhZGREb2N1bWVudCAoZG9jOiBEb2N1bWVudCwgb3B0aW9ucz86IGFueSk6IHZvaWQgfCBmYWxzZSB7XG4gICAgLy8gZG8gbm90aGluZyBpZiBkb2N1bWVudCBpcyBhbHJlYWR5IGtub3duXG4gICAgaWYgKHRoaXMuZ2V0RG9jSW5kZXgoZG9jKSAhPT0gLTEpIHsgcmV0dXJuIGZhbHNlIH1cblxuICAgIGNvbnN0IHdpbmRvdyA9IHdpbi5nZXRXaW5kb3coZG9jKVxuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgPyB1dGlscy5leHRlbmQoe30sIG9wdGlvbnMpIDoge31cblxuICAgIHRoaXMuZG9jdW1lbnRzLnB1c2goeyBkb2MsIG9wdGlvbnMgfSlcbiAgICBldmVudHMuZG9jdW1lbnRzLnB1c2goZG9jKVxuXG4gICAgLy8gZG9uJ3QgYWRkIGFuIHVubG9hZCBldmVudCBmb3IgdGhlIG1haW4gZG9jdW1lbnRcbiAgICAvLyBzbyB0aGF0IHRoZSBwYWdlIG1heSBiZSBjYWNoZWQgaW4gYnJvd3NlciBoaXN0b3J5XG4gICAgaWYgKGRvYyAhPT0gdGhpcy5kb2N1bWVudCkge1xuICAgICAgZXZlbnRzLmFkZCh3aW5kb3csICd1bmxvYWQnLCB0aGlzLm9uV2luZG93VW5sb2FkKVxuICAgIH1cblxuICAgIHRoaXMuc2lnbmFscy5maXJlKCdhZGQtZG9jdW1lbnQnLCB7IGRvYywgd2luZG93LCBzY29wZTogdGhpcywgb3B0aW9ucyB9KVxuICB9XG5cbiAgcmVtb3ZlRG9jdW1lbnQgKGRvYzogRG9jdW1lbnQpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0RG9jSW5kZXgoZG9jKVxuXG4gICAgY29uc3Qgd2luZG93ID0gd2luLmdldFdpbmRvdyhkb2MpXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZG9jdW1lbnRzW2luZGV4XS5vcHRpb25zXG5cbiAgICBldmVudHMucmVtb3ZlKHdpbmRvdywgJ3VubG9hZCcsIHRoaXMub25XaW5kb3dVbmxvYWQpXG5cbiAgICB0aGlzLmRvY3VtZW50cy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgZXZlbnRzLmRvY3VtZW50cy5zcGxpY2UoaW5kZXgsIDEpXG5cbiAgICB0aGlzLnNpZ25hbHMuZmlyZSgncmVtb3ZlLWRvY3VtZW50JywgeyBkb2MsIHdpbmRvdywgc2NvcGU6IHRoaXMsIG9wdGlvbnMgfSlcbiAgfVxuXG4gIG9uV2luZG93VW5sb2FkIChldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLnJlbW92ZURvY3VtZW50KGV2ZW50LnRhcmdldCBhcyBEb2N1bWVudClcbiAgfVxuXG4gIGdldERvY0luZGV4IChkb2M6IERvY3VtZW50KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRvY3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZG9jdW1lbnRzW2ldLmRvYyA9PT0gZG9jKSB7XG4gICAgICAgIHJldHVybiBpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xXG4gIH1cblxuICBnZXREb2NPcHRpb25zIChkb2M6IERvY3VtZW50KSB7XG4gICAgY29uc3QgZG9jSW5kZXggPSB0aGlzLmdldERvY0luZGV4KGRvYylcblxuICAgIHJldHVybiBkb2NJbmRleCA9PT0gLTEgPyBudWxsIDogdGhpcy5kb2N1bWVudHNbZG9jSW5kZXhdLm9wdGlvbnNcbiAgfVxufVxuXG5jbGFzcyBJbnRlcmFjdGFibGVTZXQge1xuICBzaWduYWxzID0gbmV3IHV0aWxzLlNpZ25hbHMoKVxuXG4gIC8vIGFsbCBzZXQgaW50ZXJhY3RhYmxlc1xuICBsaXN0OiBJbnRlcmFjdGFibGVCYXNlW10gPSBbXVxuXG4gIGNvbnN0cnVjdG9yIChwcm90ZWN0ZWQgc2NvcGU6IFNjb3BlKSB7fVxuXG4gIG5ldyAodGFyZ2V0OiBJbnRlcmFjdC5UYXJnZXQsIG9wdGlvbnM6IGFueSk6IEludGVyYWN0YWJsZUJhc2Uge1xuICAgIG9wdGlvbnMgPSB1dGlscy5leHRlbmQob3B0aW9ucyB8fCB7fSwge1xuICAgICAgYWN0aW9uczogdGhpcy5zY29wZS5hY3Rpb25zLFxuICAgIH0pXG4gICAgY29uc3QgaW50ZXJhY3RhYmxlID0gbmV3IHRoaXMuc2NvcGUuSW50ZXJhY3RhYmxlKHRhcmdldCwgb3B0aW9ucywgdGhpcy5zY29wZS5kb2N1bWVudClcblxuICAgIHRoaXMuc2NvcGUuYWRkRG9jdW1lbnQoaW50ZXJhY3RhYmxlLl9kb2MpXG4gICAgdGhpcy5saXN0LnB1c2goaW50ZXJhY3RhYmxlKVxuXG4gICAgdGhpcy5zaWduYWxzLmZpcmUoJ25ldycsIHtcbiAgICAgIHRhcmdldCxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBpbnRlcmFjdGFibGUsXG4gICAgICB3aW46IHRoaXMuc2NvcGUuX3dpbixcbiAgICB9KVxuXG4gICAgcmV0dXJuIGludGVyYWN0YWJsZVxuICB9XG5cbiAgaW5kZXhPZkVsZW1lbnQgKHRhcmdldDogSW50ZXJhY3QuVGFyZ2V0LCBjb250ZXh0OiBEb2N1bWVudCB8IEVsZW1lbnQpIHtcbiAgICBjb250ZXh0ID0gY29udGV4dCB8fCB0aGlzLnNjb3BlLmRvY3VtZW50XG5cbiAgICBjb25zdCBsaXN0ID0gdGhpcy5saXN0XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGludGVyYWN0YWJsZSA9IGxpc3RbaV1cblxuICAgICAgaWYgKGludGVyYWN0YWJsZS50YXJnZXQgPT09IHRhcmdldCAmJiBpbnRlcmFjdGFibGUuX2NvbnRleHQgPT09IGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gLTFcbiAgfVxuXG4gIGdldCAoZWxlbWVudDogSW50ZXJhY3QuVGFyZ2V0LCBvcHRpb25zLCBkb250Q2hlY2tJbkNvbnRleHQ/OiBib29sZWFuKSB7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5saXN0W3RoaXMuaW5kZXhPZkVsZW1lbnQoZWxlbWVudCwgb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQpXVxuXG4gICAgcmV0dXJuIHJldCAmJiAodXRpbHMuaXMuc3RyaW5nKGVsZW1lbnQpIHx8IGRvbnRDaGVja0luQ29udGV4dCB8fCByZXQuaW5Db250ZXh0KGVsZW1lbnQpKSA/IHJldCA6IG51bGxcbiAgfVxuXG4gIGZvckVhY2hNYXRjaCAoZWxlbWVudDogRG9jdW1lbnQgfCBFbGVtZW50LCBjYWxsYmFjazogKGludGVyYWN0YWJsZTogYW55KSA9PiBhbnkpIHtcbiAgICBmb3IgKGNvbnN0IGludGVyYWN0YWJsZSBvZiB0aGlzLmxpc3QpIHtcbiAgICAgIGxldCByZXRcblxuICAgICAgaWYgKCh1dGlscy5pcy5zdHJpbmcoaW50ZXJhY3RhYmxlLnRhcmdldClcbiAgICAgIC8vIHRhcmdldCBpcyBhIHNlbGVjdG9yIGFuZCB0aGUgZWxlbWVudCBtYXRjaGVzXG4gICAgICAgID8gKHV0aWxzLmlzLmVsZW1lbnQoZWxlbWVudCkgJiYgdXRpbHMuZG9tLm1hdGNoZXNTZWxlY3RvcihlbGVtZW50LCBpbnRlcmFjdGFibGUudGFyZ2V0KSlcbiAgICAgICAgLy8gdGFyZ2V0IGlzIHRoZSBlbGVtZW50XG4gICAgICAgIDogZWxlbWVudCA9PT0gaW50ZXJhY3RhYmxlLnRhcmdldCkgJiZcbiAgICAgICAgLy8gdGhlIGVsZW1lbnQgaXMgaW4gY29udGV4dFxuICAgICAgICAoaW50ZXJhY3RhYmxlLmluQ29udGV4dChlbGVtZW50KSkpIHtcbiAgICAgICAgcmV0ID0gY2FsbGJhY2soaW50ZXJhY3RhYmxlKVxuICAgICAgfVxuXG4gICAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHJldFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdFNjb3BlIChzY29wZTogU2NvcGUsIHdpbmRvdzogV2luZG93KSB7XG4gIHdpbi5pbml0KHdpbmRvdylcbiAgZG9tT2JqZWN0cy5pbml0KHdpbmRvdylcbiAgYnJvd3Nlci5pbml0KHdpbmRvdylcbiAgcmFmLmluaXQod2luZG93KVxuICBldmVudHMuaW5pdCh3aW5kb3cpXG5cbiAgaW50ZXJhY3Rpb25zLmluc3RhbGwoc2NvcGUpXG4gIHNjb3BlLmRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50XG5cbiAgcmV0dXJuIHNjb3BlXG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzY29wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFBO0FBQzFDLE9BQU8sVUFBVSxNQUFNLDhCQUE4QixDQUFBO0FBQ3JELE9BQU8sUUFBUSxNQUFNLGtCQUFrQixDQUFBO0FBQ3ZDLE9BQU8sU0FBUyxNQUFNLGFBQWEsQ0FBQTtBQUNuQyxPQUFPLGdCQUFnQixNQUFNLGdCQUFnQixDQUFBO0FBQzdDLE9BQU8sYUFBYSxNQUFNLGlCQUFpQixDQUFBO0FBQzNDLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFBO0FBRXpDLE1BQU0sRUFDSixHQUFHLEVBQ0gsT0FBTyxFQUNQLEdBQUcsRUFDSCxPQUFPLEVBQ1AsTUFBTSxHQUNQLEdBQUcsS0FBSyxDQUFBO0FBRVQsTUFBTSxDQUFOLElBQVksVUFDWDtBQURELFdBQVksVUFBVTtBQUN0QixDQUFDLEVBRFcsVUFBVSxLQUFWLFVBQVUsUUFDckI7QUFRRCxNQUFNLFVBQVUsV0FBVztJQUN6QixPQUFPLElBQUksS0FBSyxFQUFFLENBQUE7QUFDcEIsQ0FBQztBQUlELE1BQU0sT0FBTyxLQUFLO0lBMkJoQjtRQTFCQSxnQkFBZ0I7UUFDaEIsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7UUFDdkIsWUFBTyxHQUFHLE9BQU8sQ0FBQTtRQUNqQixXQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ2YsVUFBSyxHQUFHLEtBQUssQ0FBQTtRQUNiLGFBQVEsR0FBYSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBYSxDQUFBO1FBQ3RELGNBQVMsR0FBRyxTQUFTLENBQUE7UUFDckIsWUFBTyxHQUFZO1lBQ2pCLEtBQUssRUFBRSxFQUFFO1lBQ1QsVUFBVSxFQUFFLEVBQUU7WUFDZCxVQUFVLEVBQUUsRUFBRTtTQUNmLENBQUE7UUFFRCxrQkFBYSxHQUFHLGFBQWEsQ0FBQTtRQUU3QixrQkFB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QyxDQUFBO0lBQ3BCLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUVuQixZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzNCLEtBQUssQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQTtJQUVoQyxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dGlscyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscydcbmltcG9ydCBkb21PYmplY3RzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2RvbU9iamVjdHMnXG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0T3B0aW9ucydcbmltcG9ydCBFdmVudGFibGUgZnJvbSAnLi9FdmVudGFibGUnXG5pbXBvcnQgSW50ZXJhY3RhYmxlQmFzZSBmcm9tICcuL0ludGVyYWN0YWJsZSdcbmltcG9ydCBJbnRlcmFjdEV2ZW50IGZyb20gJy4vSW50ZXJhY3RFdmVudCdcbmltcG9ydCBpbnRlcmFjdGlvbnMgZnJvbSAnLi9pbnRlcmFjdGlvbnMnXG5cbmNvbnN0IHtcbiAgd2luLFxuICBicm93c2VyLFxuICByYWYsXG4gIFNpZ25hbHMsXG4gIGV2ZW50cyxcbn0gPSB1dGlsc1xuXG5leHBvcnQgZW51bSBBY3Rpb25OYW1lIHtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25zIHtcbiAgbmFtZXM6IEFjdGlvbk5hbWVbXVxuICBtZXRob2REaWN0OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG4gIGV2ZW50VHlwZXM6IHN0cmluZ1tdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTY29wZSAoKSB7XG4gIHJldHVybiBuZXcgU2NvcGUoKVxufVxuXG5leHBvcnQgdHlwZSBEZWZhdWx0cyA9IHR5cGVvZiBkZWZhdWx0c1xuXG5leHBvcnQgY2xhc3MgU2NvcGUge1xuICAvLyBGSVhNRSBTaWduYWxzXG4gIHNpZ25hbHMgPSBuZXcgU2lnbmFscygpXG4gIGJyb3dzZXIgPSBicm93c2VyXG4gIGV2ZW50cyA9IGV2ZW50c1xuICB1dGlscyA9IHV0aWxzXG4gIGRlZmF1bHRzOiBEZWZhdWx0cyA9IHV0aWxzLmNsb25lKGRlZmF1bHRzKSBhcyBEZWZhdWx0c1xuICBFdmVudGFibGUgPSBFdmVudGFibGVcbiAgYWN0aW9uczogQWN0aW9ucyA9IHtcbiAgICBuYW1lczogW10sXG4gICAgbWV0aG9kRGljdDoge30sXG4gICAgZXZlbnRUeXBlczogW10sXG4gIH1cblxuICBJbnRlcmFjdEV2ZW50ID0gSW50ZXJhY3RFdmVudFxuICBJbnRlcmFjdGFibGUhOiB0eXBlb2YgSW50ZXJhY3RhYmxlQmFzZVxuICBpbnRlcmFjdGFibGVzID0gbmV3IEludGVyYWN0YWJsZVNldCh0aGlzKVxuXG4gIC8vIG1haW4gd2luZG93XG4gIF93aW4hOiBXaW5kb3dcblxuICAvLyBtYWluIGRvY3VtZW50XG4gIGRvY3VtZW50ITogRG9jdW1lbnRcblxuICAvLyBhbGwgZG9jdW1lbnRzIGJlaW5nIGxpc3RlbmVkIHRvXG4gIGRvY3VtZW50czogQXJyYXk8eyBkb2M6IERvY3VtZW50LCBvcHRpb25zOiBhbnkgfT4gPSBbXVxuXG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBjb25zdCBzY29wZSA9IHRoaXMgYXMgU2NvcGU7XG5cbiAgICAodGhpcyBhcyB7IEludGVyYWN0YWJsZTogdHlwZW9mIEludGVyYWN0YWJsZUJhc2UgfSkuSW50ZXJhY3RhYmxlID0gY2xhc3MgSW50ZXJhY3RhYmxlIGV4dGVuZHMgSW50ZXJhY3RhYmxlQmFzZSBpbXBsZW1lbnRzIEludGVyYWN0YWJsZUJhc2Uge1xuICAgICAgZ2V0IF9kZWZhdWx0cyAoKSB7IHJldHVybiBzY29wZS5kZWZhdWx0cyB9XG5cbiAgICAgIHNldCAob3B0aW9uczogYW55KSB7XG4gICAgICAgIHN1cGVyLnNldChvcHRpb25zKVxuXG4gICAgICAgIHNjb3BlLmludGVyYWN0YWJsZXMuc2lnbmFscy5maXJlKCdzZXQnLCB7XG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICBpbnRlcmFjdGFibGU6IHRoaXMsXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICAgIH1cblxuICAgICAgdW5zZXQgKCkge1xuICAgICAgICBzdXBlci51bnNldCgpXG4gICAgICAgIHNjb3BlLmludGVyYWN0YWJsZXMuc2lnbmFscy5maXJlKCd1bnNldCcsIHsgaW50ZXJhY3RhYmxlOiB0aGlzIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaW5pdCAod2luZG93OiBXaW5kb3cpIHtcbiAgICByZXR1cm4gaW5pdFNjb3BlKHRoaXMsIHdpbmRvdylcbiAgfVxuXG4gIGFkZERvY3VtZW50IChkb2M6IERvY3VtZW50LCBvcHRpb25zPzogYW55KTogdm9pZCB8IGZhbHNlIHtcbiAgICAvLyBkbyBub3RoaW5nIGlmIGRvY3VtZW50IGlzIGFscmVhZHkga25vd25cbiAgICBpZiAodGhpcy5nZXREb2NJbmRleChkb2MpICE9PSAtMSkgeyByZXR1cm4gZmFsc2UgfVxuXG4gICAgY29uc3Qgd2luZG93ID0gd2luLmdldFdpbmRvdyhkb2MpXG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyA/IHV0aWxzLmV4dGVuZCh7fSwgb3B0aW9ucykgOiB7fVxuXG4gICAgdGhpcy5kb2N1bWVudHMucHVzaCh7IGRvYywgb3B0aW9ucyB9KVxuICAgIGV2ZW50cy5kb2N1bWVudHMucHVzaChkb2MpXG5cbiAgICAvLyBkb24ndCBhZGQgYW4gdW5sb2FkIGV2ZW50IGZvciB0aGUgbWFpbiBkb2N1bWVudFxuICAgIC8vIHNvIHRoYXQgdGhlIHBhZ2UgbWF5IGJlIGNhY2hlZCBpbiBicm93c2VyIGhpc3RvcnlcbiAgICBpZiAoZG9jICE9PSB0aGlzLmRvY3VtZW50KSB7XG4gICAgICBldmVudHMuYWRkKHdpbmRvdywgJ3VubG9hZCcsIHRoaXMub25XaW5kb3dVbmxvYWQpXG4gICAgfVxuXG4gICAgdGhpcy5zaWduYWxzLmZpcmUoJ2FkZC1kb2N1bWVudCcsIHsgZG9jLCB3aW5kb3csIHNjb3BlOiB0aGlzLCBvcHRpb25zIH0pXG4gIH1cblxuICByZW1vdmVEb2N1bWVudCAoZG9jOiBEb2N1bWVudCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXREb2NJbmRleChkb2MpXG5cbiAgICBjb25zdCB3aW5kb3cgPSB3aW4uZ2V0V2luZG93KGRvYylcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5kb2N1bWVudHNbaW5kZXhdLm9wdGlvbnNcblxuICAgIGV2ZW50cy5yZW1vdmUod2luZG93LCAndW5sb2FkJywgdGhpcy5vbldpbmRvd1VubG9hZClcblxuICAgIHRoaXMuZG9jdW1lbnRzLnNwbGljZShpbmRleCwgMSlcbiAgICBldmVudHMuZG9jdW1lbnRzLnNwbGljZShpbmRleCwgMSlcblxuICAgIHRoaXMuc2lnbmFscy5maXJlKCdyZW1vdmUtZG9jdW1lbnQnLCB7IGRvYywgd2luZG93LCBzY29wZTogdGhpcywgb3B0aW9ucyB9KVxuICB9XG5cbiAgb25XaW5kb3dVbmxvYWQgKGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMucmVtb3ZlRG9jdW1lbnQoZXZlbnQudGFyZ2V0IGFzIERvY3VtZW50KVxuICB9XG5cbiAgZ2V0RG9jSW5kZXggKGRvYzogRG9jdW1lbnQpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5kb2N1bWVudHNbaV0uZG9jID09PSBkb2MpIHtcbiAgICAgICAgcmV0dXJuIGlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gLTFcbiAgfVxuXG4gIGdldERvY09wdGlvbnMgKGRvYzogRG9jdW1lbnQpIHtcbiAgICBjb25zdCBkb2NJbmRleCA9IHRoaXMuZ2V0RG9jSW5kZXgoZG9jKVxuXG4gICAgcmV0dXJuIGRvY0luZGV4ID09PSAtMSA/IG51bGwgOiB0aGlzLmRvY3VtZW50c1tkb2NJbmRleF0ub3B0aW9uc1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnRlcmFjdGFibGVTZXQge1xuICBzaWduYWxzID0gbmV3IHV0aWxzLlNpZ25hbHMoKVxuXG4gIC8vIGFsbCBzZXQgaW50ZXJhY3RhYmxlc1xuICBsaXN0OiBJbnRlcmFjdGFibGVCYXNlW10gPSBbXVxuXG4gIGNvbnN0cnVjdG9yIChwcm90ZWN0ZWQgc2NvcGU6IFNjb3BlKSB7fVxuXG4gIG5ldyAodGFyZ2V0OiBJbnRlcmFjdC5UYXJnZXQsIG9wdGlvbnM/OiBhbnkpOiBJbnRlcmFjdGFibGVCYXNlIHtcbiAgICBvcHRpb25zID0gdXRpbHMuZXh0ZW5kKG9wdGlvbnMgfHwge30sIHtcbiAgICAgIGFjdGlvbnM6IHRoaXMuc2NvcGUuYWN0aW9ucyxcbiAgICB9KVxuICAgIGNvbnN0IGludGVyYWN0YWJsZSA9IG5ldyB0aGlzLnNjb3BlLkludGVyYWN0YWJsZSh0YXJnZXQsIG9wdGlvbnMsIHRoaXMuc2NvcGUuZG9jdW1lbnQpXG5cbiAgICB0aGlzLnNjb3BlLmFkZERvY3VtZW50KGludGVyYWN0YWJsZS5fZG9jKVxuICAgIHRoaXMubGlzdC5wdXNoKGludGVyYWN0YWJsZSlcblxuICAgIHRoaXMuc2lnbmFscy5maXJlKCduZXcnLCB7XG4gICAgICB0YXJnZXQsXG4gICAgICBvcHRpb25zLFxuICAgICAgaW50ZXJhY3RhYmxlLFxuICAgICAgd2luOiB0aGlzLnNjb3BlLl93aW4sXG4gICAgfSlcblxuICAgIHJldHVybiBpbnRlcmFjdGFibGVcbiAgfVxuXG4gIGluZGV4T2ZFbGVtZW50ICh0YXJnZXQ6IEludGVyYWN0LlRhcmdldCwgY29udGV4dDogRG9jdW1lbnQgfCBFbGVtZW50KSB7XG4gICAgY29udGV4dCA9IGNvbnRleHQgfHwgdGhpcy5zY29wZS5kb2N1bWVudFxuXG4gICAgY29uc3QgbGlzdCA9IHRoaXMubGlzdFxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpbnRlcmFjdGFibGUgPSBsaXN0W2ldXG5cbiAgICAgIGlmIChpbnRlcmFjdGFibGUudGFyZ2V0ID09PSB0YXJnZXQgJiYgaW50ZXJhY3RhYmxlLl9jb250ZXh0ID09PSBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xXG4gIH1cblxuICBnZXQgKGVsZW1lbnQ6IEludGVyYWN0LlRhcmdldCwgb3B0aW9ucywgZG9udENoZWNrSW5Db250ZXh0PzogYm9vbGVhbikge1xuICAgIGNvbnN0IHJldCA9IHRoaXMubGlzdFt0aGlzLmluZGV4T2ZFbGVtZW50KGVsZW1lbnQsIG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0KV1cblxuICAgIHJldHVybiByZXQgJiYgKHV0aWxzLmlzLnN0cmluZyhlbGVtZW50KSB8fCBkb250Q2hlY2tJbkNvbnRleHQgfHwgcmV0LmluQ29udGV4dChlbGVtZW50KSkgPyByZXQgOiBudWxsXG4gIH1cblxuICBmb3JFYWNoTWF0Y2ggKGVsZW1lbnQ6IERvY3VtZW50IHwgRWxlbWVudCwgY2FsbGJhY2s6IChpbnRlcmFjdGFibGU6IGFueSkgPT4gYW55KSB7XG4gICAgZm9yIChjb25zdCBpbnRlcmFjdGFibGUgb2YgdGhpcy5saXN0KSB7XG4gICAgICBsZXQgcmV0XG5cbiAgICAgIGlmICgodXRpbHMuaXMuc3RyaW5nKGludGVyYWN0YWJsZS50YXJnZXQpXG4gICAgICAvLyB0YXJnZXQgaXMgYSBzZWxlY3RvciBhbmQgdGhlIGVsZW1lbnQgbWF0Y2hlc1xuICAgICAgICA/ICh1dGlscy5pcy5lbGVtZW50KGVsZW1lbnQpICYmIHV0aWxzLmRvbS5tYXRjaGVzU2VsZWN0b3IoZWxlbWVudCwgaW50ZXJhY3RhYmxlLnRhcmdldCkpXG4gICAgICAgIC8vIHRhcmdldCBpcyB0aGUgZWxlbWVudFxuICAgICAgICA6IGVsZW1lbnQgPT09IGludGVyYWN0YWJsZS50YXJnZXQpICYmXG4gICAgICAgIC8vIHRoZSBlbGVtZW50IGlzIGluIGNvbnRleHRcbiAgICAgICAgKGludGVyYWN0YWJsZS5pbkNvbnRleHQoZWxlbWVudCkpKSB7XG4gICAgICAgIHJldCA9IGNhbGxiYWNrKGludGVyYWN0YWJsZSlcbiAgICAgIH1cblxuICAgICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXRcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRTY29wZSAoc2NvcGU6IFNjb3BlLCB3aW5kb3c6IFdpbmRvdykge1xuICB3aW4uaW5pdCh3aW5kb3cpXG4gIGRvbU9iamVjdHMuaW5pdCh3aW5kb3cpXG4gIGJyb3dzZXIuaW5pdCh3aW5kb3cpXG4gIHJhZi5pbml0KHdpbmRvdylcbiAgZXZlbnRzLmluaXQod2luZG93KVxuXG4gIGludGVyYWN0aW9ucy5pbnN0YWxsKHNjb3BlKVxuICBzY29wZS5kb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudFxuXG4gIHJldHVybiBzY29wZVxufVxuIl19 \ No newline at end of file diff --git a/packages/core/tests/Eventable.d.ts b/packages/core/tests/Eventable.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/core/tests/Eventable.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/core/tests/Eventable.js b/packages/core/tests/Eventable.js new file mode 100644 index 000000000..0ab3d4b37 --- /dev/null +++ b/packages/core/tests/Eventable.js @@ -0,0 +1,25 @@ +import test from '@interactjs/_dev/test/test'; +import Eventable from '../Eventable'; +test('Eventable', t => { + const eventable = new Eventable(); + const type = 'TEST'; + const testEvent = { + type, + immediatePropagationStopped: false, + }; + let firedEvent; + const listener = event => { firedEvent = event; }; + eventable.on(type, listener); + eventable.fire(testEvent); + t.equal(firedEvent, testEvent, 'on\'d listener is called'); + firedEvent = undefined; + eventable.off(type, listener); + eventable.fire(testEvent); + t.equal(firedEvent, undefined, 'off\'d listener is not called'); + testEvent.immediatePropagationStopped = true; + eventable.on(type, listener); + eventable.fire(testEvent); + t.equal(firedEvent, undefined, 'listener is not called with immediatePropagationStopped'); + t.end(); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiRXZlbnRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sU0FBUyxNQUFNLGNBQWMsQ0FBQTtBQUVwQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ3BCLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUE7SUFDakMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFBO0lBRW5CLE1BQU0sU0FBUyxHQUFHO1FBQ2hCLElBQUk7UUFDSiwyQkFBMkIsRUFBRSxLQUFLO0tBQ25DLENBQUE7SUFDRCxJQUFJLFVBQVUsQ0FBQTtJQUNkLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxFQUFFLEdBQUcsVUFBVSxHQUFHLEtBQUssQ0FBQSxDQUFDLENBQUMsQ0FBQTtJQUVoRCxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUM1QixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBRXpCLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSwwQkFBMEIsQ0FBQyxDQUFBO0lBRTFELFVBQVUsR0FBRyxTQUFTLENBQUE7SUFDdEIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDN0IsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUV6QixDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsK0JBQStCLENBQUMsQ0FBQTtJQUUvRCxTQUFTLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFBO0lBQzVDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQzVCLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7SUFFekIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLHlEQUF5RCxDQUFDLENBQUE7SUFFekYsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdGVzdCBmcm9tICdAaW50ZXJhY3Rqcy9fZGV2L3Rlc3QvdGVzdCdcbmltcG9ydCBFdmVudGFibGUgZnJvbSAnLi4vRXZlbnRhYmxlJ1xuXG50ZXN0KCdFdmVudGFibGUnLCB0ID0+IHtcbiAgY29uc3QgZXZlbnRhYmxlID0gbmV3IEV2ZW50YWJsZSgpXG4gIGNvbnN0IHR5cGUgPSAnVEVTVCdcblxuICBjb25zdCB0ZXN0RXZlbnQgPSB7XG4gICAgdHlwZSxcbiAgICBpbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IGZhbHNlLFxuICB9XG4gIGxldCBmaXJlZEV2ZW50XG4gIGNvbnN0IGxpc3RlbmVyID0gZXZlbnQgPT4geyBmaXJlZEV2ZW50ID0gZXZlbnQgfVxuXG4gIGV2ZW50YWJsZS5vbih0eXBlLCBsaXN0ZW5lcilcbiAgZXZlbnRhYmxlLmZpcmUodGVzdEV2ZW50KVxuXG4gIHQuZXF1YWwoZmlyZWRFdmVudCwgdGVzdEV2ZW50LCAnb25cXCdkIGxpc3RlbmVyIGlzIGNhbGxlZCcpXG5cbiAgZmlyZWRFdmVudCA9IHVuZGVmaW5lZFxuICBldmVudGFibGUub2ZmKHR5cGUsIGxpc3RlbmVyKVxuICBldmVudGFibGUuZmlyZSh0ZXN0RXZlbnQpXG5cbiAgdC5lcXVhbChmaXJlZEV2ZW50LCB1bmRlZmluZWQsICdvZmZcXCdkIGxpc3RlbmVyIGlzIG5vdCBjYWxsZWQnKVxuXG4gIHRlc3RFdmVudC5pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSB0cnVlXG4gIGV2ZW50YWJsZS5vbih0eXBlLCBsaXN0ZW5lcilcbiAgZXZlbnRhYmxlLmZpcmUodGVzdEV2ZW50KVxuXG4gIHQuZXF1YWwoZmlyZWRFdmVudCwgdW5kZWZpbmVkLCAnbGlzdGVuZXIgaXMgbm90IGNhbGxlZCB3aXRoIGltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCcpXG5cbiAgdC5lbmQoKVxufSlcbiJdfQ== \ No newline at end of file diff --git a/packages/core/tests/Interactable.d.ts b/packages/core/tests/Interactable.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/core/tests/Interactable.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/core/tests/Interactable.js b/packages/core/tests/Interactable.js new file mode 100644 index 000000000..2e70b6f29 --- /dev/null +++ b/packages/core/tests/Interactable.js @@ -0,0 +1,98 @@ +import d from '@interactjs/_dev/test/domator'; +import test from '@interactjs/_dev/test/test'; +import * as helpers from './helpers'; +test('Interactable copies and extends defaults', (t) => { + const scope = helpers.mockScope(); + const { defaults } = scope; + scope.actions.methodDict = { test: 'testize' }; + scope.Interactable.prototype.testize = function (options) { + this.setPerAction('test', options); + }; + defaults.actions.test = { + fromDefault: { a: 1, b: 2 }, + specified: { c: 1, d: 2 }, + }; + const specified = { specified: 'parent' }; + const div = d('div'); + const interactable = scope.interactables.new(div, { test: specified }); + t.deepEqual(interactable.options.test.specified, specified.specified, 'specified options are properly set'); + t.deepEqual(interactable.options.test.fromDefault, defaults.actions.test.fromDefault, 'default options are properly set'); + t.notEqual(interactable.options.test.fromDefault, defaults.actions.test.fromDefault, 'defaults are not aliased'); + defaults.actions.test.fromDefault.c = 3; + t.notOk('c' in interactable.options.test.fromDefault, 'modifying defaults does not affect constructed interactables'); + t.end(); +}); +test('Interactable copies and extends per action defaults', (t) => { + const scope = helpers.mockScope(); + const { defaults } = scope; + scope.actions.methodDict = { test: 'testize' }; + scope.Interactable.prototype.testize = function (options) { + this.setPerAction('test', options); + }; + defaults.perAction.testModifier = { + fromDefault: { a: 1, b: 2 }, + specified: null, + }; + defaults.actions.test = { testModifier: defaults.perAction.testModifier }; + const div = d('div'); + const interactable = scope.interactables.new(div, {}); + interactable.testize({ testModifier: { specified: 'parent' } }); + t.deepEqual(interactable.options.test, { + enabled: false, + origin: { x: 0, y: 0 }, + testModifier: { + fromDefault: { a: 1, b: 2 }, + specified: 'parent', + }, + }, 'specified options are properly set'); + t.deepEqual(interactable.options.test.testModifier.fromDefault, defaults.perAction.testModifier.fromDefault, 'default options are properly set'); + t.notEqual(interactable.options.test.testModifier.fromDefault, defaults.perAction.testModifier.fromDefault, 'defaults are not aliased'); + defaults.perAction.testModifier.fromDefault.c = 3; + t.notOk('c' in interactable.options.test.testModifier.fromDefault, 'modifying defaults does not affect constructed interactables'); + t.end(); +}); +test('Interactable.updatePerActionListeners', (t) => { + const scope = helpers.mockScope(); + let fired = []; + function addToFired(event) { fired.push(event); } + scope.actions.eventTypes.push('teststart', 'testmove', 'testend'); + scope.actions.methodDict = { test: 'testize' }; + scope.Interactable.prototype.testize = function (options) { + this.setPerAction('test', options); + }; + scope.defaults.actions.test = {}; + const interactable = scope.interactables.new('target'); + interactable.setPerAction('test', { + listeners: [{ + start: addToFired, + move: addToFired, + end: addToFired, + }], + }); + interactable.fire({ type: 'teststart' }); + t.deepEqual(fired.map((e) => e.type), ['teststart']); + interactable.fire({ type: 'testmove' }); + t.deepEqual(fired.map((e) => e.type), ['teststart', 'testmove']); + interactable.fire({ type: 'testnotadded' }); + t.deepEqual(fired.map((e) => e.type), ['teststart', 'testmove']); + interactable.fire({ type: 'testend' }); + t.deepEqual(fired.map((e) => e.type), ['teststart', 'testmove', 'testend']); + fired = []; + interactable.setPerAction('test', { + listeners: [{ start: addToFired }], + }); + interactable.fire({ type: 'teststart' }); + interactable.fire({ type: 'testmove' }); + interactable.fire({ type: 'testend' }); + t.deepEqual(fired.map((e) => e.type), ['teststart']); + fired = []; + interactable.setPerAction('test', { + listeners: null, + }); + interactable.fire({ type: 'teststart' }); + interactable.fire({ type: 'testmove' }); + interactable.fire({ type: 'testend' }); + t.deepEqual(fired, []); + t.end(); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJhY3RhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiSW50ZXJhY3RhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sQ0FBQyxNQUFNLCtCQUErQixDQUFBO0FBQzdDLE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sS0FBSyxPQUFPLE1BQU0sV0FBVyxDQUFBO0FBRXBDLElBQUksQ0FBQywwQ0FBMEMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO0lBQ3JELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQVMsQ0FBQTtJQUN4QyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBRTFCLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFBO0lBRTlDLEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxVQUFVLE9BQU87UUFDdEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDcEMsQ0FBQyxDQUFBO0lBRUQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUc7UUFDdEIsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQzNCLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtLQUMxQixDQUFBO0lBRUQsTUFBTSxTQUFTLEdBQUcsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUE7SUFFekMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3BCLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFBO0lBRXRFLENB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QVksQ0FBQyxNQUFNLEVBQUU7UUFDaEMsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUM7S0FDbkMsQ0FBQyxDQUFBO0lBRUYsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFBO0lBQ3hDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQTtJQUN2QyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUE7SUFDdEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFBO0lBRXBELEtBQUssR0FBRyxFQUFFLENBQUE7SUFDVixZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtRQUNoQyxTQUFTLEVBQUUsSUFBSTtLQUNoQixDQUFDLENBQUE7SUFFRixZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUE7SUFDeEMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFBO0lBQ3ZDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQTtJQUN0QyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUV0QixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7QUFDVCxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkIGZyb20gJ0BpbnRlcmFjdGpzL19kZXYvdGVzdC9kb21hdG9yJ1xuaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgKiBhcyBoZWxwZXJzIGZyb20gJy4vaGVscGVycydcblxudGVzdCgnSW50ZXJhY3RhYmxlIGNvcGllcyBhbmQgZXh0ZW5kcyBkZWZhdWx0cycsICh0KSA9PiB7XG4gIGNvbnN0IHNjb3BlID0gaGVscGVycy5tb2NrU2NvcGUoKSBhcyBhbnlcbiAgY29uc3QgeyBkZWZhdWx0cyB9ID0gc2NvcGVcblxuICBzY29wZS5hY3Rpb25zLm1ldGhvZERpY3QgPSB7IHRlc3Q6ICd0ZXN0aXplJyB9XG5cbiAgc2NvcGUuSW50ZXJhY3RhYmxlLnByb3RvdHlwZS50ZXN0aXplID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB0aGlzLnNldFBlckFjdGlvbigndGVzdCcsIG9wdGlvbnMpXG4gIH1cblxuICBkZWZhdWx0cy5hY3Rpb25zLnRlc3QgPSB7XG4gICAgZnJvbURlZmF1bHQ6IHsgYTogMSwgYjogMiB9LFxuICAgIHNwZWNpZmllZDogeyBjOiAxLCBkOiAyIH0sXG4gIH1cblxuICBjb25zdCBzcGVjaWZpZWQgPSB7IHNwZWNpZmllZDogJ3BhcmVudCcgfVxuXG4gIGNvbnN0IGRpdiA9IGQoJ2RpdicpXG4gIGNvbnN0IGludGVyYWN0YWJsZSA9IHNjb3BlLmludGVyYWN0YWJsZXMubmV3KGRpdiwgeyB0ZXN0OiBzcGVjaWZpZWQgfSlcblxuICB0LmRlZXBFcXVhbChpbnRlcmFjdGFibGUub3B0aW9ucy50ZXN0LnNwZWNpZmllZCwgc3BlY2lmaWVkLnNwZWNpZmllZCxcbiAgICAnc3BlY2lmaWVkIG9wdGlvbnMgYXJlIHByb3Blcmx5IHNldCcpXG4gIHQuZGVlcEVxdWFsKGludGVyYWN0YWJsZS5vcHRpb25zLnRlc3QuZnJvbURlZmF1bHQsIGRlZmF1bHRzLmFjdGlvbnMudGVzdC5mcm9tRGVmYXVsdCxcbiAgICAnZGVmYXVsdCBvcHRpb25zIGFyZSBwcm9wZXJseSBzZXQnKVxuICB0Lm5vdEVxdWFsKGludGVyYWN0YWJsZS5vcHRpb25zLnRlc3QuZnJvbURlZmF1bHQsIGRlZmF1bHRzLmFjdGlvbnMudGVzdC5mcm9tRGVmYXVsdCxcbiAgICAnZGVmYXVsdHMgYXJlIG5vdCBhbGlhc2VkJylcblxuICBkZWZhdWx0cy5hY3Rpb25zLnRlc3QuZnJvbURlZmF1bHQuYyA9IDNcbiAgdC5ub3RPaygnYycgaW4gaW50ZXJhY3RhYmxlLm9wdGlvbnMudGVzdC5mcm9tRGVmYXVsdCxcbiAgICAnbW9kaWZ5aW5nIGRlZmF1bHRzIGRvZXMgbm90IGFmZmVjdCBjb25zdHJ1Y3RlZCBpbnRlcmFjdGFibGVzJylcblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdJbnRlcmFjdGFibGUgY29waWVzIGFuZCBleHRlbmRzIHBlciBhY3Rpb24gZGVmYXVsdHMnLCAodCkgPT4ge1xuICBjb25zdCBzY29wZSA9IGhlbHBlcnMubW9ja1Njb3BlKClcbiAgY29uc3QgeyBkZWZhdWx0cyB9ID0gc2NvcGVcblxuICBzY29wZS5hY3Rpb25zLm1ldGhvZERpY3QgPSB7IHRlc3Q6ICd0ZXN0aXplJyB9XG5cbiAgc2NvcGUuSW50ZXJhY3RhYmxlLnByb3RvdHlwZS50ZXN0aXplID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB0aGlzLnNldFBlckFjdGlvbigndGVzdCcsIG9wdGlvbnMpXG4gIH1cblxuICBkZWZhdWx0cy5wZXJBY3Rpb24udGVzdE1vZGlmaWVyID0ge1xuICAgIGZyb21EZWZhdWx0OiB7IGE6IDEsIGI6IDIgfSxcbiAgICBzcGVjaWZpZWQ6IG51bGwsXG4gIH1cbiAgZGVmYXVsdHMuYWN0aW9ucy50ZXN0ID0geyB0ZXN0TW9kaWZpZXI6IGRlZmF1bHRzLnBlckFjdGlvbi50ZXN0TW9kaWZpZXIgfVxuXG4gIGNvbnN0IGRpdiA9IGQoJ2RpdicpXG4gIGNvbnN0IGludGVyYWN0YWJsZSA9IHNjb3BlLmludGVyYWN0YWJsZXMubmV3KGRpdiwge30pXG4gIGludGVyYWN0YWJsZS50ZXN0aXplKHsgdGVzdE1vZGlmaWVyOiB7IHNwZWNpZmllZDogJ3BhcmVudCcgfSB9KVxuXG4gIHQuZGVlcEVxdWFsKGludGVyYWN0YWJsZS5vcHRpb25zLnRlc3QsIHtcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBvcmlnaW46IHsgeDogMCwgeTogMCB9LFxuXG4gICAgdGVzdE1vZGlmaWVyOiB7XG4gICAgICBmcm9tRGVmYXVsdDogeyBhOiAxLCBiOiAyIH0sXG4gICAgICBzcGVjaWZpZWQ6ICdwYXJlbnQnLFxuICAgIH0sXG4gIH0sICdzcGVjaWZpZWQgb3B0aW9ucyBhcmUgcHJvcGVybHkgc2V0JylcbiAgdC5kZWVwRXF1YWwoXG4gICAgaW50ZXJhY3RhYmxlLm9wdGlvbnMudGVzdC50ZXN0TW9kaWZpZXIuZnJvbURlZmF1bHQsXG4gICAgZGVmYXVsdHMucGVyQWN0aW9uLnRlc3RNb2RpZmllci5mcm9tRGVmYXVsdCxcbiAgICAnZGVmYXVsdCBvcHRpb25zIGFyZSBwcm9wZXJseSBzZXQnKVxuICB0Lm5vdEVxdWFsKFxuICAgIGludGVyYWN0YWJsZS5vcHRpb25zLnRlc3QudGVzdE1vZGlmaWVyLmZyb21EZWZhdWx0LFxuICAgIGRlZmF1bHRzLnBlckFjdGlvbi50ZXN0TW9kaWZpZXIuZnJvbURlZmF1bHQsXG4gICAgJ2RlZmF1bHRzIGFyZSBub3QgYWxpYXNlZCcpXG5cbiAgZGVmYXVsdHMucGVyQWN0aW9uLnRlc3RNb2RpZmllci5mcm9tRGVmYXVsdC5jID0gM1xuICB0Lm5vdE9rKCdjJyBpbiBpbnRlcmFjdGFibGUub3B0aW9ucy50ZXN0LnRlc3RNb2RpZmllci5mcm9tRGVmYXVsdCxcbiAgICAnbW9kaWZ5aW5nIGRlZmF1bHRzIGRvZXMgbm90IGFmZmVjdCBjb25zdHJ1Y3RlZCBpbnRlcmFjdGFibGVzJylcblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdJbnRlcmFjdGFibGUudXBkYXRlUGVyQWN0aW9uTGlzdGVuZXJzJywgKHQpID0+IHtcbiAgY29uc3Qgc2NvcGUgPSBoZWxwZXJzLm1vY2tTY29wZSgpXG5cbiAgbGV0IGZpcmVkID0gW11cbiAgZnVuY3Rpb24gYWRkVG9GaXJlZCAoZXZlbnQpIHsgZmlyZWQucHVzaChldmVudCkgfVxuXG4gIHNjb3BlLmFjdGlvbnMuZXZlbnRUeXBlcy5wdXNoKCd0ZXN0c3RhcnQnLCAndGVzdG1vdmUnLCAndGVzdGVuZCcpXG4gIHNjb3BlLmFjdGlvbnMubWV0aG9kRGljdCA9IHsgdGVzdDogJ3Rlc3RpemUnIH1cbiAgc2NvcGUuSW50ZXJhY3RhYmxlLnByb3RvdHlwZS50ZXN0aXplID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB0aGlzLnNldFBlckFjdGlvbigndGVzdCcsIG9wdGlvbnMpXG4gIH1cblxuICBzY29wZS5kZWZhdWx0cy5hY3Rpb25zLnRlc3QgPSB7fVxuXG4gIGNvbnN0IGludGVyYWN0YWJsZSA9IHNjb3BlLmludGVyYWN0YWJsZXMubmV3KCd0YXJnZXQnKVxuXG4gIGludGVyYWN0YWJsZS5zZXRQZXJBY3Rpb24oJ3Rlc3QnLCB7XG4gICAgbGlzdGVuZXJzOiBbe1xuICAgICAgc3RhcnQ6IGFkZFRvRmlyZWQsXG4gICAgICBtb3ZlOiBhZGRUb0ZpcmVkLFxuICAgICAgZW5kOiBhZGRUb0ZpcmVkLFxuICAgIH1dLFxuICB9KVxuXG4gIGludGVyYWN0YWJsZS5maXJlKHsgdHlwZTogJ3Rlc3RzdGFydCcgfSlcbiAgdC5kZWVwRXF1YWwoZmlyZWQubWFwKChlKSA9PiBlLnR5cGUpLCBbJ3Rlc3RzdGFydCddKVxuXG4gIGludGVyYWN0YWJsZS5maXJlKHsgdHlwZTogJ3Rlc3Rtb3ZlJyB9KVxuICB0LmRlZXBFcXVhbChmaXJlZC5tYXAoKGUpID0+IGUudHlwZSksIFsndGVzdHN0YXJ0JywgJ3Rlc3Rtb3ZlJ10pXG5cbiAgaW50ZXJhY3RhYmxlLmZpcmUoeyB0eXBlOiAndGVzdG5vdGFkZGVkJyB9KVxuICB0LmRlZXBFcXVhbChmaXJlZC5tYXAoKGUpID0+IGUudHlwZSksIFsndGVzdHN0YXJ0JywgJ3Rlc3Rtb3ZlJ10pXG5cbiAgaW50ZXJhY3RhYmxlLmZpcmUoeyB0eXBlOiAndGVzdGVuZCcgfSlcbiAgdC5kZWVwRXF1YWwoZmlyZWQubWFwKChlKSA9PiBlLnR5cGUpLCBbJ3Rlc3RzdGFydCcsICd0ZXN0bW92ZScsICd0ZXN0ZW5kJ10pXG5cbiAgZmlyZWQgPSBbXVxuICBpbnRlcmFjdGFibGUuc2V0UGVyQWN0aW9uKCd0ZXN0Jywge1xuICAgIGxpc3RlbmVyczogW3sgc3RhcnQ6IGFkZFRvRmlyZWQgfV0sXG4gIH0pXG5cbiAgaW50ZXJhY3RhYmxlLmZpcmUoeyB0eXBlOiAndGVzdHN0YXJ0JyB9KVxuICBpbnRlcmFjdGFibGUuZmlyZSh7IHR5cGU6ICd0ZXN0bW92ZScgfSlcbiAgaW50ZXJhY3RhYmxlLmZpcmUoeyB0eXBlOiAndGVzdGVuZCcgfSlcbiAgdC5kZWVwRXF1YWwoZmlyZWQubWFwKChlKSA9PiBlLnR5cGUpLCBbJ3Rlc3RzdGFydCddKVxuXG4gIGZpcmVkID0gW11cbiAgaW50ZXJhY3RhYmxlLnNldFBlckFjdGlvbigndGVzdCcsIHtcbiAgICBsaXN0ZW5lcnM6IG51bGwsXG4gIH0pXG5cbiAgaW50ZXJhY3RhYmxlLmZpcmUoeyB0eXBlOiAndGVzdHN0YXJ0JyB9KVxuICBpbnRlcmFjdGFibGUuZmlyZSh7IHR5cGU6ICd0ZXN0bW92ZScgfSlcbiAgaW50ZXJhY3RhYmxlLmZpcmUoeyB0eXBlOiAndGVzdGVuZCcgfSlcbiAgdC5kZWVwRXF1YWwoZmlyZWQsIFtdKVxuXG4gIHQuZW5kKClcbn0pXG4iXX0= \ No newline at end of file diff --git a/packages/core/tests/Interaction.d.ts b/packages/core/tests/Interaction.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/core/tests/Interaction.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/core/tests/Interaction.js b/packages/core/tests/Interaction.js new file mode 100644 index 000000000..444fea53a --- /dev/null +++ b/packages/core/tests/Interaction.js @@ -0,0 +1,312 @@ +import test from '@interactjs/_dev/test/test'; +import pointerUtils from '@interactjs/utils/pointerUtils'; +import Signals from '@interactjs/utils/Signals'; +import InteractEvent from '../InteractEvent'; +import Interaction from '../Interaction'; +import interactions from '../interactions'; +import * as helpers from './helpers'; +const makeInteractionAndSignals = () => new Interaction({ signals: new Signals() }); +test('Interaction constructor', (t) => { + const testType = 'test'; + const signals = new Signals(); + const interaction = new Interaction({ + pointerType: testType, + signals, + }); + const zeroCoords = { + page: { x: 0, y: 0 }, + client: { x: 0, y: 0 }, + timeStamp: 0, + }; + t.equal(interaction._signals, signals, 'signals option is set assigned to interaction._signals'); + t.ok(interaction.prepared instanceof Object, 'interaction.prepared is an object'); + t.ok(interaction.downPointer instanceof Object, 'interaction.downPointer is an object'); + for (const coordField in interaction.coords) { + t.deepEqual(interaction.coords[coordField], zeroCoords, `nteraction.coords.${coordField} set to zero`); + } + t.equal(interaction.pointerType, testType, 'interaction.pointerType is set'); + // pointerInfo properties + t.deepEqual(interaction.pointers, [], 'interaction.pointers is initially an empty array'); + // false properties + for (const prop of 'pointerIsDown pointerWasMoved _interacting mouse'.split(' ')) { + t.notOk(interaction[prop], `interaction.${prop} is false`); + } + t.end(); +}); +test('Interaction.getPointerIndex', (t) => { + const interaction = makeInteractionAndSignals(); + interaction.pointers = [2, 4, 5, 0, -1].map((id) => ({ id })); + interaction.pointers.forEach(({ id }, index) => { + t.equal(interaction.getPointerIndex({ pointerId: id }), index); + }); + t.end(); +}); +test('Interaction.updatePointer', (t) => { + t.test('no existing pointers', (st) => { + const interaction = makeInteractionAndSignals(); + const pointer = { pointerId: 10 }; + const event = {}; + const ret = interaction.updatePointer(pointer, event, null); + st.deepEqual(interaction.pointers, [{ + id: pointer.pointerId, + pointer, + event, + downTime: null, + downTarget: null, + }], 'interaction.pointers == [{ pointer, ... }]'); + st.equal(ret, 0, 'new pointer index is returned'); + st.end(); + }); + t.test('new pointer with exisiting pointer', (st) => { + const interaction = makeInteractionAndSignals(); + const existing = { pointerId: 0 }; + const event = {}; + interaction.updatePointer(existing, event, null); + const newPointer = { pointerId: 10 }; + const ret = interaction.updatePointer(newPointer, event, null); + st.deepEqual(interaction.pointers, [ + { + id: existing.pointerId, + pointer: existing, + event, + downTime: null, + downTarget: null, + }, + { + id: newPointer.pointerId, + pointer: newPointer, + event, + downTime: null, + downTarget: null, + }, + ], 'interaction.pointers == [{ pointer: existing, ... }, { pointer: newPointer, ... }]'); + st.equal(ret, 1, 'second pointer index is 1'); + st.end(); + }); + t.test('update existing pointers', (st) => { + const interaction = makeInteractionAndSignals(); + const oldPointers = [-3, 10, 2].map((pointerId) => ({ pointerId })); + const newPointers = oldPointers.map((pointer) => ({ ...pointer, new: true })); + oldPointers.forEach((pointer) => interaction.updatePointer(pointer, pointer, null)); + newPointers.forEach((pointer) => interaction.updatePointer(pointer, pointer, null)); + st.equal(interaction.pointers.length, oldPointers.length, 'number of pointers is unchanged'); + interaction.pointers.forEach((pointerInfo, i) => { + st.equal(pointerInfo.id, oldPointers[i].pointerId, `pointer[${i}].id is the same`); + st.notEqual(pointerInfo.pointer, oldPointers[i], `new pointer ${i} !== old pointer object`); + }); + st.end(); + }); +}); +test('Interaction.removePointer', (t) => { + const interaction = makeInteractionAndSignals(); + const ids = [0, 1, 2, 3]; + const removals = [ + { id: 0, remain: [1, 2, 3], message: 'first of 4' }, + { id: 2, remain: [1, 3], message: 'middle of 3' }, + { id: 3, remain: [1], message: 'last of 2' }, + { id: 1, remain: [], message: 'final' }, + ]; + ids.forEach((pointerId) => interaction.updatePointer({ pointerId }, {}, null)); + for (const removal of removals) { + interaction.removePointer({ pointerId: removal.id }, null); + t.deepEqual(interaction.pointers.map((p) => p.id), removal.remain, `${removal.message} - remaining interaction.pointers is correct`); + } + t.end(); +}); +test('Interaction.pointer{Down,Move,Up} updatePointer', (t) => { + const signals = new Signals(); + const interaction = new Interaction({ signals }); + const eventTarget = {}; + const pointer = { + target: eventTarget, + pointerId: 0, + }; + let info = {}; + signals.on('update-pointer', (arg) => { info.updated = arg.pointerInfo; }); + signals.on('remove-pointer', (arg) => { info.removed = arg.pointerInfo; }); + interaction.coords.cur.timeStamp = 0; + const commonPointerInfo = { + id: 0, + pointer, + event: pointer, + downTime: null, + downTarget: null, + }; + interaction.pointerDown(pointer, pointer, eventTarget); + t.deepEqual(info.updated, { + ...commonPointerInfo, + downTime: interaction.coords.cur.timeStamp, + downTarget: eventTarget, + }, 'interaction.pointerDown updates pointer'); + t.equal(info.removed, undefined, 'interaction.pointerDown doesn\'t remove pointer'); + interaction.removePointer(pointer, null); + info = {}; + interaction.pointerMove(pointer, pointer, eventTarget); + t.deepEqual(info.updated, commonPointerInfo, 'interaction.pointerMove updates pointer'); + t.equal(info.removed, undefined, 'interaction.pointerMove doesn\'t remove pointer'); + info = {}; + interaction.pointerUp(pointer, pointer, eventTarget, null); + t.equal(info.updated, undefined, 'interaction.pointerUp doesn\'t update existing pointer'); + info = {}; + interaction.pointerUp(pointer, pointer, eventTarget, null); + t.deepEqual(info.updated, commonPointerInfo, 'interaction.pointerUp updates non existing pointer'); + t.deepEqual(info.removed, commonPointerInfo, 'interaction.pointerUp also removes pointer'); + info = {}; + t.end(); +}); +test('Interaction.pointerDown', (t) => { + const interaction = makeInteractionAndSignals(); + const coords = helpers.newCoordsSet(); + const eventTarget = {}; + const event = { + type: 'down', + target: eventTarget, + }; + const pointer = helpers.newPointer(); + let signalArg; + const signalListener = (arg) => { + signalArg = arg; + }; + interaction._signals.on('down', signalListener); + const pointerCoords = { page: {}, client: {} }; + pointerUtils.setCoords(pointerCoords, [pointer]); + for (const prop in coords) { + pointerUtils.copyCoords(interaction.coords[prop], coords[prop]); + } + // test while interacting + interaction._interacting = true; + interaction.pointerDown(pointer, event, eventTarget); + t.equal(interaction.downEvent, null, 'downEvent is not updated'); + t.deepEqual(interaction.pointers, [{ + id: pointer.pointerId, + pointer, + event, + downTime: null, + downTarget: null, + }], 'pointer is added'); + t.deepEqual(interaction.downPointer, {}, 'downPointer is not updated'); + t.deepEqual(interaction.coords.start, coords.start, 'coords.start are not modified'); + t.deepEqual(interaction.coords.cur, coords.cur, 'coords.cur are not modified'); + t.deepEqual(interaction.coords.prev, coords.prev, 'coords.prev are not modified'); + t.ok(interaction.pointerIsDown, 'pointerIsDown'); + t.notOk(interaction.pointerWasMoved, '!pointerWasMoved'); + t.equal(signalArg.pointer, pointer, 'pointer in down signal arg'); + t.equal(signalArg.event, event, 'event in down signal arg'); + t.equal(signalArg.eventTarget, eventTarget, 'eventTarget in down signal arg'); + t.equal(signalArg.pointerIndex, 0, 'pointerIndex in down signal arg'); + // test while not interacting + interaction._interacting = false; + // reset pointerIsDown + interaction.pointerIsDown = false; + // pretend pointer was moved + interaction.pointerWasMoved = true; + // reset signalArg object + signalArg = undefined; + interaction.removePointer(pointer, null); + interaction.pointerDown(pointer, event, eventTarget); + // timeStamp is assigned with new Date.getTime() + // don't let it cause deepEaual to fail + pointerCoords.timeStamp = interaction.coords.start.timeStamp; + t.equal(interaction.downEvent, event, 'downEvent is updated'); + t.deepEqual(interaction.pointers, [{ + id: pointer.pointerId, + pointer, + event, + downTime: pointerCoords.timeStamp, + downTarget: eventTarget, + }], 'interaction.pointers is updated'); + t.deepEqual(interaction.coords.start, pointerCoords, 'coords.start are set to pointer'); + t.deepEqual(interaction.coords.cur, pointerCoords, 'coords.cur are set to pointer'); + t.deepEqual(interaction.coords.prev, pointerCoords, 'coords.prev are set to pointer'); + t.equal(typeof signalArg, 'object', 'down signal was fired again'); + t.ok(interaction.pointerIsDown, 'pointerIsDown'); + t.notOk(interaction.pointerWasMoved, 'pointerWasMoved should always change to false'); + t.end(); +}); +test('Interaction.start', (t) => { + const interaction = makeInteractionAndSignals(); + const action = { name: 'TEST' }; + const target = helpers.mockInteractable(); + const element = {}; + const pointer = helpers.newPointer(); + const event = {}; + interaction.start(action, target, element); + t.equal(interaction.prepared.name, null, 'do nothing if !pointerIsDown'); + // pointers is still empty + interaction.pointerIsDown = true; + interaction.start(action, target, element); + t.equal(interaction.prepared.name, null, 'do nothing if too few pointers are down'); + interaction.pointerDown(pointer, event, null); + interaction._interacting = true; + interaction.start(action, target, element); + t.equal(interaction.prepared.name, null, 'do nothing if already interacting'); + interaction._interacting = false; + let signalArg; + // let interactingInStartListener; + const signalListener = (arg) => { + signalArg = arg; + // interactingInStartListener = arg.interaction.interacting(); + }; + interaction._signals.on('action-start', signalListener); + interaction.start(action, target, element); + t.equal(interaction.prepared.name, action.name, 'action is prepared'); + t.equal(interaction.target, target, 'interaction.target is updated'); + t.equal(interaction.element, element, 'interaction.element is updated'); + // t.assert(interactingInStartListener, 'interaction is interacting during action-start signal'); + t.assert(interaction.interacting(), 'interaction is interacting after start method'); + t.equal(signalArg.interaction, interaction, 'interaction in signal arg'); + t.equal(signalArg.event, event, 'event (interaction.downEvent) in signal arg'); + interaction._interacting = false; + // interaction.start(action, target, element); + // t.deepEqual(scope.interactions.list, [interaction], 'interaction is added back to scope'); + t.end(); +}); +test('stop interaction from start event', (t) => { + const scope = helpers.mockScope(); + interactions.install(scope); + const interaction = scope.interactions.new({}); + const interactable = helpers.mockInteractable(); + interaction.target = interactable; + interaction.element = interactable.element; + interaction.prepared = { name: 'TEST' }; + interactable.events.on('TESTstart', (event) => { + event.interaction.stop(); + }); + interaction._signals.fire('action-start', { interaction, event: {} }); + t.notOk(interaction.interacting(), 'interaction can be stopped from start event listener'); + t.end(); +}); +test('Interaction createPreparedEvent', (t) => { + const scope = helpers.mockScope(); + interactions.install(scope); + const interaction = scope.interactions.new({}); + const interactable = helpers.mockInteractable(); + const action = { name: 'resize' }; + const phase = 'TEST_PHASE'; + interaction.prepared = action; + interaction.target = interactable; + interaction.element = interactable.element; + interaction.prevEvent = { page: {}, client: {}, velocity: {} }; + const iEvent = interaction._createPreparedEvent({}, phase); + t.ok(iEvent instanceof InteractEvent, 'InteractEvent is fired'); + t.equal(iEvent.type, action.name + phase, 'event type'); + t.equal(iEvent.interactable, interactable, 'event.interactable'); + t.equal(iEvent.target, interactable.element, 'event.target'); + t.end(); +}); +test('Interaction fireEvent', (t) => { + const interaction = new Interaction({ signals: helpers.mockSignals() }); + const interactable = helpers.mockInteractable(); + const iEvent = {}; + let firedEvent; + // this method should be called from actions.firePrepared + interactable.fire = (event) => { + firedEvent = event; + }; + interaction.target = interactable; + interaction._fireEvent(iEvent); + t.equal(firedEvent, iEvent, 'target interactable\'s fire method is called'); + t.equal(interaction.prevEvent, iEvent, 'interaction.prevEvent is updated'); + t.end(); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJJbnRlcmFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSw0QkFBNEIsQ0FBQTtBQUM3QyxPQUFPLFlBQVksTUFBTSxnQ0FBZ0MsQ0FBQTtBQUN6RCxPQUFPLE9BQU8sTUFBTSwyQkFBMkIsQ0FBQTtBQUMvQyxPQUFPLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQTtBQUM1QyxPQUFPLFdBQVcsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN4QyxPQUFPLFlBQVksTUFBTSxpQkFBaUIsQ0FBQTtBQUMxQyxPQUFPLEtBQUssT0FBTyxNQUFNLFdBQVcsQ0FBQTtBQUVwQyxNQUFNLHlCQUF5QixHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksT0FBTyxFQUFFLEVBQVMsQ0FBQyxDQUFBO0FBRTFGLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO0lBQ3BDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQTtJQUN2QixNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO0lBQzdCLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDO1FBQ2xDLFdBQVcsRUFBRSxRQUFRO1FBQ3JCLE9BQU87S0FDUixDQUFDLENBQUE7SUFDRixNQUFNLFVBQVUsR0FBRztRQUNqQixJQUFJLEVBQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDekIsTUFBTSxFQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3pCLFNBQVMsRUFBRSxDQUFDO0tBQ2IsQ0FBQTtJQUVELENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQ25DLHdEQUF3RCxDQUFDLENBQUE7SUFFM0QsQ0FBQyxDQUFD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QUMsQ0FBQTtJQUV2QixDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFDekMsY0FBYyxDQUFDLENBQUE7SUFFakIsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUE7QUFFRixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtJQUNsQyxNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3ZFLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO0lBQy9DLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtJQUNqQixJQUFJLFVBQVUsQ0FBQTtJQUVkLHlEQUF5RDtJQUN6RCxZQUFZLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDNUIsVUFBVSxHQUFHLEtBQUssQ0FBQTtJQUNwQixDQUFDLENBQUE7SUFFRCxXQUFXLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQTtJQUNqQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRTlCLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFDeEIsOENBQThDLENBQUMsQ0FBQTtJQUVqRCxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUNuQyxrQ0FBa0MsQ0FBQyxDQUFBO0lBRXJDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgcG9pbnRlclV0aWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL3BvaW50ZXJVdGlscydcbmltcG9ydCBTaWduYWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL1NpZ25hbHMnXG5pbXBvcnQgSW50ZXJhY3RFdmVudCBmcm9tICcuLi9JbnRlcmFjdEV2ZW50J1xuaW1wb3J0IEludGVyYWN0aW9uIGZyb20gJy4uL0ludGVyYWN0aW9uJ1xuaW1wb3J0IGludGVyYWN0aW9ucyBmcm9tICcuLi9pbnRlcmFjdGlvbnMnXG5pbXBvcnQgKiBhcyBoZWxwZXJzIGZyb20gJy4vaGVscGVycydcblxuY29uc3QgbWFrZUludGVyYWN0aW9uQW5kU2lnbmFscyA9ICgpID0+IG5ldyBJbnRlcmFjdGlvbih7IHNpZ25hbHM6IG5ldyBTaWduYWxzKCkgfSBhcyBhbnkpXG5cbnRlc3QoJ0ludGVyYWN0aW9uIGNvbnN0cnVjdG9yJywgKHQpID0+IHtcbiAgY29uc3QgdGVzdFR5cGUgPSAndGVzdCdcbiAgY29uc3Qgc2lnbmFscyA9IG5ldyBTaWduYWxzKClcbiAgY29uc3QgaW50ZXJhY3Rpb24gPSBuZXcgSW50ZXJhY3Rpb24oe1xuICAgIHBvaW50ZXJUeXBlOiB0ZXN0VHlwZSxcbiAgICBzaWduYWxzLFxuICB9KVxuICBjb25zdCB6ZXJvQ29vcmRzID0ge1xuICAgIHBhZ2UgICAgIDogeyB4OiAwLCB5OiAwIH0sXG4gICAgY2xpZW50ICAgOiB7IHg6IDAsIHk6IDAgfSxcbiAgICB0aW1lU3RhbXA6IDAsXG4gIH1cblxuICB0LmVxdWFsKGludGVyYWN0aW9uLl9zaWduYWxzLCBzaWduYWxzLFxuICAgICdzaWduYWxzIG9wdGlvbiBpcyBzZXQgYXNzaWduZWQgdG8gaW50ZXJhY3Rpb24uX3NpZ25hbHMnKVxuXG4gIHQub2soaW50ZXJhY3Rpb24ucHJlcGFyZWQgaW5zdGFuY2VvZiBPYmplY3QsXG4gICAgJ2ludGVyYWN0aW9uLnByZXBhcmVkIGlzIGFuIG9iamVjdCcpXG4gIHQub2soaW50ZXJhY3Rpb24uZG93blBvaW50ZXIgaW5zdGFuY2VvZiBPYmplY3QsXG4gICAgJ2ludGVyYWN0aW9uLmRvd25Qb2ludGVyIGlzIGFuIG9iamVjdCcpXG5cbiAgZm9yIChjb25zdCBjb29yZEZpZWxkIGluIGludGVyYWN0aW9uLmNvb3Jkcykge1xuICAgIHQuZGVlcEVxdWFsKGludGVyYWN0aW9uLmNvb3Jkc1tjb29yZEZpZWxkXSwgemVyb0Nvb3JkcyxcbiAgICAgIGBudGVyYWN0aW9uLmNvb3Jkcy4ke2Nvb3JkRmllbGR9IHNldCB0byB6ZXJvYClcbiAgfVxuXG4gIHQuZXF1YWwoaW50ZXJhY3Rpb24ucG9pbnRlclR5cGUsIHRlc3RUeXBlLFxuICAgICdpbnRlcmFjdGlvbi5wb2ludGVyVHlwZSBpcyBzZXQnKVxuXG4gIC8vIHBvaW50ZXJJbmZvIHByb3BlcnRpZXNcbiAgdC5kZWVwRXF1YWwoXG4gICAgaW50ZXJhY3Rpb24ucG9pbnRlcnMsXG4gICAgW10sXG4gICAgJ2ludGVyYWN0aW9uLnBvaW50ZXJzIGlzIGluaXRpYWxseSBhbiBlbXB0eSBhcnJheScpXG5cbiAgLy8gZmFsc2UgcHJvcGVydGllc1xuICBmb3IgKGNvbnN0IHByb3Agb2YgJ3BvaW50ZXJJc0Rvd24gcG9pbnRlcldhc01vdmVkIF9pbnRlcmFjdGluZyBtb3VzZScuc3BsaXQoJyAnKSkge1xuICAgIHQubm90T2soaW50ZXJhY3Rpb25bcHJvcF0sIGBpbnRlcmFjdGlvbi4ke3Byb3B9IGlzIGZhbHNlYClcbiAgfVxuXG4gIHQuZW5kKClcbn0pXG5cbnRlc3QoJ0ludGVyYWN0aW9uLmdldFBvaW50ZXJJbmRleCcsICh0KSA9PiB7XG4gIGNvbnN0IGludGVyYWN0aW9uID0gbWFrZUludGVyYWN0aW9uQW5kU2lnbmFscygpXG5cbiAgaW50ZXJhY3Rpb24ucG9pbnRlcnMgPSBbMiwgNCwgNSwgMCwgLTFdLm1hcCgoaWQpID0+ICh7IGlkIH0pKSBhcyBhbnlcblxuICBpbnRlcmFjdGlvbi5wb2ludGVycy5mb3JFYWNoKCh7IGlkIH0sIGluZGV4KSA9PiB7XG4gICAgdC5lcXVhbChpbnRlcmFjdGlvbi5nZXRQb2ludGVySW5kZXgoeyBwb2ludGVySWQ6IGlkIH0pLCBpbmRleClcbiAgfSlcblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdJbnRlcmFjdGlvbi51cGRhdGVQb2ludGVyJywgKHQpID0+IHtcbiAgdC50ZXN0KCdubyBleGlzdGluZyBwb2ludGVycycsIChzdCkgPT4ge1xuICAgIGNvbnN0IGludGVyYWN0aW9uID0gbWFrZUludGVyYWN0aW9uQW5kU2lnbmFscygpXG4gICAgY29uc3QgcG9pbnRlciA9IHsgcG9pbnRlcklkOiAxMCB9IGFzIGFueVxuICAgIGNvbnN0IGV2ZW50ID0ge30gYXMgYW55XG5cbiAgICBjb25zdCByZXQgPSBpbnRlcmFjdGlvbi51cGRhdGVQb2ludGVyKHBvaW50ZXIsIGV2ZW50LCBudWxsKVxuXG4gICAgc3QuZGVlcEVxdWFsKFxuICAgICAgaW50ZXJhY3Rpb24ucG9pbnRlcnMsXG4gICAgICBbe1xuICAgICAgICBpZDogcG9pbnRlci5wb2ludGVySWQsXG4gICAgICAgIHBvaW50ZXIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBkb3duVGltZTogbnVsbCxcbiAgICAgICAgZG93blRhcmdldDogbnVsbCxcbiAgICAgIH1dLFxuICAgICAgJ2ludGVyYWN0aW9uLnBvaW50ZXJzID09IFt7IHBvaW50ZXIsIC4uLiB9XScpXG4gICAgc3QuZXF1YWwocmV0LCAwLCAnbmV3IHBvaW50ZXIgaW5kZXggaXMgcmV0dXJuZWQnKVxuXG4gICAgc3QuZW5kKClcbiAgfSlcblxuICB0LnRlc3QoJ25ldyBwb2ludGVyIHdpdGggZXhpc2l0aW5nIHBvaW50ZXInLCAoc3QpID0+IHtcbiAgICBjb25zdCBpbnRlcmFjdGlvbiA9IG1ha2VJbnRlcmFjdGlvbkFuZFNpZ25hbHMoKVxuICAgIGNvbnN0IGV4aXN0aW5nOiBhbnkgPSB7IHBvaW50ZXJJZDogMCB9XG4gICAgY29uc3QgZXZlbnQ6IGFueSA9IHt9XG5cbiAgICBpbnRlcmFjdGlvbi51cGRhdGVQb2ludGVyKGV4aXN0aW5nLCBldmVudCwgbnVsbClcblxuICAgIGNvbnN0IG5ld1BvaW50ZXI6IGFueSA9IHsgcG9pbnRlcklkOiAxMCB9XG4gICAgY29uc3QgcmV0ID0gaW50ZXJhY3Rpb24udXBkYXRlUG9pbnRlcihuZXdQb2ludGVyLCBldmVudCwgbnVsbClcblxuICAgIHN0LmRlZXBFcXVhbChcbiAgICAgIGludGVyYWN0aW9uLnBvaW50ZXJzLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogZXhpc3RpbmcucG9pbnRlcklkLFxuICAgICAgICAgIHBvaW50ZXI6IGV4aXN0aW5nLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIGRvd25UaW1lOiBudWxsLFxuICAgICAgICAgIGRvd25UYXJnZXQ6IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogbmV3UG9pbnRlci5wb2ludGVySWQsXG4gICAgICAgICAgcG9pbnRlcjogbmV3UG9pbnRlcixcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICBkb3duVGltZTogbnVsbCxcbiAgICAgICAgICBkb3duVGFyZ2V0OiBudWxsLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgICdpbnRlcmFjdGlvbi5wb2ludGVycyA9PSBbeyBwb2ludGVyOiBleGlzdGluZywgLi4uIH0sIHsgcG9pbnRlcjogbmV3UG9pbnRlciwgLi4uIH1dJylcblxuICAgIHN0LmVxdWFsKHJldCwgMSwgJ3NlY29uZCBwb2ludGVyIGluZGV4IGlzIDEnKVxuXG4gICAgc3QuZW5kKClcbiAgfSlcblxuICB0LnRlc3QoJ3VwZGF0ZSBleGlzdGluZyBwb2ludGVycycsIChzdCkgPT4ge1xuICAgIGNvbnN0IGludGVyYWN0aW9uID0gbWFrZUludGVyYWN0aW9uQW5kU2lnbmFscygpXG5cbiAgICBjb25zdCBvbGRQb2ludGVycyA9IFstMywgMTAsIDJdLm1hcCgocG9pbnRlcklkKSA9PiAoeyBwb2ludGVySWQgfSkpXG4gICAgY29uc3QgbmV3UG9pbnRlcnMgPSBvbGRQb2ludGVycy5tYXAoKHBvaW50ZXIpID0+ICh7IC4uLnBvaW50ZXIsIG5ldzogdHJ1ZSB9KSlcblxuICAgIG9sZFBvaW50ZXJzLmZvckVhY2goKHBvaW50ZXI6IGFueSkgPT4gaW50ZXJhY3Rpb24udXBkYXRlUG9pbnRlcihwb2ludGVyLCBwb2ludGVyLCBudWxsKSlcbiAgICBuZXdQb2ludGVycy5mb3JFYWNoKChwb2ludGVyOiBhbnkpID0+IGludGVyYWN0aW9uLnVwZGF0ZVBvaW50ZXIocG9pbnRlciwgcG9pbnRlciwgbnVsbCkpXG5cbiAgICBzdC5lcXVhbChpbnRlcmFjdGlvbi5wb2ludGVycy5sZW5ndGgsIG9sZFBvaW50ZXJzLmxlbmd0aCxcbiAgICAgICdudW1iZXIgb2YgcG9pbnRlcnMgaXMgdW5jaGFuZ2VkJylcblxuICAgIGludGVyYWN0aW9uLnBvaW50ZXJzLmZvckVhY2goKHBvaW50ZXJJbmZvLCBpKSA9PiB7XG4gICAgICBzdC5lcXVhbChwb2ludGVySW5mby5pZCwgb2xkUG9pbnRlcnNbaV0ucG9pbnRlcklkLFxuICAgICAgICBgcG9pbnRlclske2l9XS5pZCBpcyB0aGUgc2FtZWApXG4gICAgICBzdC5ub3RFcXVhbChwb2ludGVySW5mby5wb2ludGVyLCBvbGRQb2ludGVyc1tpXSxcbiAgICAgICAgYG5ldyBwb2ludGVyICR7aX0gIT09IG9sZCBwb2ludGVyIG9iamVjdGApXG4gICAgfSlcblxuICAgIHN0LmVuZCgpXG4gIH0pXG59KVxuXG50ZXN0KCdJbnRlcmFjdGlvbi5yZW1vdmVQb2ludGVyJywgKHQpID0+IHtcbiAgY29uc3QgaW50ZXJhY3Rpb24gPSBtYWtlSW50ZXJhY3Rpb25BbmRTaWduYWxzKClcbiAgY29uc3QgaWRzID0gWzAsIDEsIDIsIDNdXG4gIGNvbnN0IHJlbW92YWxzID0gW1xuICAgIHsgaWQ6IDAsIHJlbWFpbjogWzEsIDIsIDNdLCBtZXNzYWdlOiAnZmlyc3Qgb2YgNCcgfSxcbiAgICB7IGlkOiAyLCByZW1haW46IFsxLCAgICAzXSwgbWVzc2FnZTogJ21pZGRsZSBvZiAzJyB9LFxuICAgIHsgaWQ6IDMsIHJlbWFpbjogWzEgICAgICBdLCBtZXNzYWdlOiAnbGFzdCBvZiAyJyB9LFxuICAgIHsgaWQ6IDEsIHJlbWFpbjogWyAgICAgICBdLCBtZXNzYWdlOiAnZmluYWwnIH0sXG4gIF1cblxuICBpZHMuZm9yRWFjaCgocG9pbnRlcklkKSA9PiBpbnRlcmFjdGlvbi51cGRhdGVQb2ludGVyKHsgcG9pbnRlcklkIH0gYXMgYW55LCB7fSBhcyBhbnksIG51bGwpKVxuXG4gIGZvciAoY29uc3QgcmVtb3ZhbCBvZiByZW1vdmFscykge1xuICAgIGludGVyYWN0aW9uLnJlbW92ZVBvaW50ZXIoeyBwb2ludGVySWQ6IHJlbW92YWwuaWQgfSwgbnVsbClcblxuICAgIHQuZGVlcEVxdWFsKFxuICAgICAgaW50ZXJhY3Rpb24ucG9pbnRlcnMubWFwKChwKSA9PiBwLmlkKSxcbiAgICAgIHJlbW92YWwucmVtYWluLFxuICAgICAgYCR7cmVtb3ZhbC5tZXNzYWdlfSAtIHJlbWFpbmluZyBpbnRlcmFjdGlvbi5wb2ludGVycyBpcyBjb3JyZWN0YClcbiAgfVxuXG4gIHQuZW5kKClcbn0pXG5cbnRlc3QoJ0ludGVyYWN0aW9uLnBvaW50ZXJ7RG93bixNb3ZlLFVwfSB1cGRhdGVQb2ludGVyJywgKHQpID0+IHtcbiAgY29uc3Qgc2lnbmFscyA9IG5ldyBTaWduYWxzKClcbiAgY29uc3QgaW50ZXJhY3Rpb24gPSBuZXcgSW50ZXJhY3Rpb24oeyBzaWduYWxzIH0gYXMgYW55KVxuICBjb25zdCBldmVudFRhcmdldCA9IHt9XG4gIGNvbnN0IHBvaW50ZXIgPSB7XG4gICAgdGFyZ2V0OiBldmVudFRhcmdldCxcbiAgICBwb2ludGVySWQ6IDAsXG4gIH1cbiAgbGV0IGluZm86IGFueSA9IHt9XG5cbiAgc2lnbmFscy5vbigndXBkYXRlLXBvaW50ZXInLCAoYXJnKSA9PiB7IGluZm8udXBkYXRlZCA9IGFyZy5wb2ludGVySW5mbyB9KVxuICBzaWduYWxzLm9uKCdyZW1vdmUtcG9pbnRlcicsIChhcmcpID0+IHsgaW5mby5yZW1vdmVkID0gYXJnLnBvaW50ZXJJbmZvIH0pXG5cbiAgaW50ZXJhY3Rpb24uY29vcmRzLmN1ci50aW1lU3RhbXAgPSAwXG4gIGNvbnN0IGNvbW1vblBvaW50ZXJJbmZvID0ge1xuICAgIGlkOiAwLFxuICAgIHBvaW50ZXIsXG4gICAgZXZlbnQ6IHBvaW50ZXIsXG4gICAgZG93blRpbWU6IG51bGwsXG4gICAgZG93blRhcmdldDogbnVsbCxcbiAgfVxuXG4gIGludGVyYWN0aW9uLnBvaW50ZXJEb3duKHBvaW50ZXIsIHBvaW50ZXIsIGV2ZW50VGFyZ2V0KVxuICB0LmRlZXBFcXVhbChcbiAgICBpbmZvLnVwZGF0ZWQsXG4gICAge1xuICAgICAgLi4uY29tbW9uUG9pbnRlckluZm8sXG4gICAgICBkb3duVGltZTogaW50ZXJhY3Rpb24uY29vcmRzLmN1ci50aW1lU3RhbXAsXG4gICAgICBkb3duVGFyZ2V0OiBldmVudFRhcmdldCxcbiAgICB9LFxuICAgICdpbnRlcmFjdGlvbi5wb2ludGVyRG93biB1cGRhdGVzIHBvaW50ZXInXG4gIClcbiAgdC5lcXVhbChpbmZvLnJlbW92ZWQsIHVuZGVmaW5lZCwgJ2ludGVyYWN0aW9uLnBvaW50ZXJEb3duIGRvZXNuXFwndCByZW1vdmUgcG9pbnRlcicpXG4gIGludGVyYWN0aW9uLnJlbW92ZVBvaW50ZXIocG9pbnRlciwgbnVsbClcbiAgaW5mbyA9IHt9XG5cbiAgaW50ZXJhY3Rpb24ucG9pbnRlck1vdmUocG9pbnRlciwgcG9pbnRlciwgZXZlbnRUYXJnZXQpXG4gIHQuZGVlcEVxdWFsKFxuICAgIGluZm8udXBkYXRlZCxcbiAgICBjb21tb25Qb2ludGVySW5mbyxcbiAgICAnaW50ZXJhY3Rpb24ucG9pbnRlck1vdmUgdXBkYXRlcyBwb2ludGVyJ1xuICApXG4gIHQuZXF1YWwoaW5mby5yZW1vdmVkLCB1bmRlZmluZWQsICdpbnRlcmFjdGlvbi5wb2ludGVyTW92ZSBkb2VzblxcJ3QgcmVtb3ZlIHBvaW50ZXInKVxuICBpbmZvID0ge31cblxuICBpbnRlcmFjdGlvbi5wb2ludGVyVXAocG9pbnRlciwgcG9pbnRlciwgZXZlbnRUYXJnZXQsIG51bGwpXG4gIHQuZXF1YWwoaW5mby51cGRhdGVkLCB1bmRlZmluZWQsICdpbnRlcmFjdGlvbi5wb2ludGVyVXAgZG9lc25cXCd0IHVwZGF0ZSBleGlzdGluZyBwb2ludGVyJylcbiAgaW5mbyA9IHt9XG5cbiAgaW50ZXJhY3Rpb24ucG9pbnRlclVwKHBvaW50ZXIsIHBvaW50ZXIsIGV2ZW50VGFyZ2V0LCBudWxsKVxuICB0LmRlZXBFcXVhbChcbiAgICBpbmZvLnVwZGF0ZWQsXG4gICAgY29tbW9uUG9pbnRlckluZm8sXG4gICAgJ2ludGVyYWN0aW9uLnBvaW50ZXJVcCB1cGRhdGVzIG5vbiBleGlzdGluZyBwb2ludGVyJ1xuICApXG4gIHQuZGVlcEVxdWFsKGluZm8ucmVtb3ZlZCwgY29tbW9uUG9pbnRlckluZm8sICdpbnRlcmFjdGlvbi5wb2ludGVyVXAgYWxzbyByZW1vdmVzIHBvaW50ZXInKVxuICBpbmZvID0ge31cblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdJbnRlcmFjdGlvbi5wb2ludGVyRG93bicsICh0KSA9PiB7XG4gIGNvbnN0IGludGVyYWN0aW9uID0gbWFrZUludGVyYWN0aW9uQW5kU2lnbmFscygpXG4gIGNvbnN0IGNvb3JkcyA9IGhlbHBlcnMubmV3Q29vcmRzU2V0KClcbiAgY29uc3QgZXZlbnRUYXJnZXQgPSB7fVxuICBjb25zdCBldmVudCA9IHtcbiAgICB0eXBlOiAnZG93bicsXG4gICAgdGFyZ2V0OiBldmVudFRhcmdldCxcbiAgfVxuICBjb25zdCBwb2ludGVyOiBhbnkgPSBoZWxwZXJzLm5ld1BvaW50ZXIoKVxuICBsZXQgc2lnbmFsQXJnXG5cbiAgY29uc3Qgc2lnbmFsTGlzdGVuZXIgPSAoYXJnKSA9PiB7XG4gICAgc2lnbmFsQXJnID0gYXJnXG4gIH1cblxuICBpbnRlcmFjdGlvbi5fc2lnbmFscy5vbignZG93bicsIHNpZ25hbExpc3RlbmVyKVxuXG4gIGNvbnN0IHBvaW50ZXJDb29yZHM6IGFueSA9IHsgcGFnZToge30sIGNsaWVudDoge30gfVxuICBwb2ludGVyVXRpbHMuc2V0Q29vcmRzKHBvaW50ZXJDb29yZHMsIFtwb2ludGVyXSlcblxuICBmb3IgKGNvbnN0IHByb3AgaW4gY29vcmRzKSB7XG4gICAgcG9pbnRlclV0aWxzLmNvcHlDb29yZHMoaW50ZXJhY3Rpb24uY29vcmRzW3Byb3BdLCBjb29yZHNbcHJvcF0pXG4gIH1cblxuICAvLyB0ZXN0IHdoaWxlIGludGVyYWN0aW5nXG4gIGludGVyYWN0aW9uLl9pbnRlcmFjdGluZyA9IHRydWVcbiAgaW50ZXJhY3Rpb24ucG9pbnRlckRvd24ocG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0KVxuXG4gIHQuZXF1YWwoaW50ZXJhY3Rpb24uZG93bkV2ZW50LCBudWxsLCAnZG93bkV2ZW50IGlzIG5vdCB1cGRhdGVkJylcbiAgdC5kZWVwRXF1YWwoXG4gICAgaW50ZXJhY3Rpb24ucG9pbnRlcnMsXG4gICAgW3tcbiAgICAgIGlkOiBwb2ludGVyLnBvaW50ZXJJZCxcbiAgICAgIHBvaW50ZXIsXG4gICAgICBldmVudCxcbiAgICAgIGRvd25UaW1lOiBudWxsLFxuICAgICAgZG93blRhcmdldDogbnVsbCxcbiAgICB9XSxcbiAgICAncG9pbnRlciBpcyBhZGRlZCdcbiAgKVxuXG4gIHQuZGVlcEVxdWFsKGludGVyYWN0aW9uLmRvd25Qb2ludGVyLCB7fSwgJ2Rvd25Qb2ludGVyIGlzIG5vdCB1cGRhdGVkJylcblxuICB0LmRlZXBFcXVhbChpbnRlcmFjdGlvbi5jb29yZHMuc3RhcnQsIGNvb3Jkcy5zdGFydCwgJ2Nvb3Jkcy5zdGFydCBhcmUgbm90IG1vZGlmaWVkJylcbiAgdC5kZWVwRXF1YWwoaW50ZXJhY3Rpb24uY29vcmRzLmN1ciwgICBjb29yZHMuY3VyLCAgICdjb29yZHMuY3VyICAgYXJlIG5vdCBtb2RpZmllZCcpXG4gIHQuZGVlcEVxdWFsKGludGVyYWN0aW9uLmNvb3Jkcy5wcmV2LCAgY29vcmRzLnByZXYsICAnY29vcmRzLnByZXYgIGFyZSBub3QgbW9kaWZpZWQnKVxuXG4gIHQub2soaW50ZXJhY3Rpb24ucG9pbnRlcklzRG93biwgJ3BvaW50ZXJJc0Rvd24nKVxuICB0Lm5vdE9rKGludGVyYWN0aW9uLnBvaW50ZXJXYXNNb3ZlZCwgJyFwb2ludGVyV2FzTW92ZWQnKVxuXG4gIHQuZXF1YWwoc2lnbmFsQXJnLnBvaW50ZXIsICAgICAgcG9pbnRlciwgICAgICdwb2ludGVyICAgICAgaW4gZG93biBzaWduYWwgYXJnJylcbiAgdC5lcXVhbChzaWduYWxBcmcuZXZlbnQsICAgICAgICBldmVudCwgICAgICAgJ2V2ZW50ICAgICAgICBpbiBkb3duIHNpZ25hbCBhcmcnKVxuICB0LmVxdWFsKHNpZ25hbEFyZy5ldmVudFRhcmdldCwgIGV2ZW50VGFyZ2V0LCAnZXZlbnRUYXJnZXQgIGluIGRvd24gc2lnbmFsIGFyZycpXG4gIHQuZXF1YWwoc2lnbmFsQXJnLnBvaW50ZXJJbmRleCwgMCwgICAgICAgICAgICdwb2ludGVySW5kZXggaW4gZG93biBzaWduYWwgYXJnJylcblxuICAvLyB0ZXN0IHdoaWxlIG5vdCBpbnRlcmFjdGluZ1xuICBpbnRlcmFjdGlvbi5faW50ZXJhY3RpbmcgPSBmYWxzZVxuICAvLyByZXNldCBwb2ludGVySXNEb3duXG4gIGludGVyYWN0aW9uLnBvaW50ZXJJc0Rvd24gPSBmYWxzZVxuICAvLyBwcmV0ZW5kIHBvaW50ZXIgd2FzIG1vdmVkXG4gIGludGVyYWN0aW9uLnBvaW50ZXJXYXNNb3ZlZCA9IHRydWVcbiAgLy8gcmVzZXQgc2lnbmFsQXJnIG9iamVjdFxuICBzaWduYWxBcmcgPSB1bmRlZmluZWRcblxuICBpbnRlcmFjdGlvbi5yZW1vdmVQb2ludGVyKHBvaW50ZXIsIG51bGwpXG4gIGludGVyYWN0aW9uLnBvaW50ZXJEb3duKHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldClcblxuICAvLyB0aW1lU3RhbXAgaXMgYXNzaWduZWQgd2l0aCBuZXcgRGF0ZS5nZXRUaW1lKClcbiAgLy8gZG9uJ3QgbGV0IGl0IGNhdXNlIGRlZXBFYXVhbCB0byBmYWlsXG4gIHBvaW50ZXJDb29yZHMudGltZVN0YW1wID0gaW50ZXJhY3Rpb24uY29vcmRzLnN0YXJ0LnRpbWVTdGFtcFxuXG4gIHQuZXF1YWwoaW50ZXJhY3Rpb24uZG93bkV2ZW50LCBldmVudCwgJ2Rvd25FdmVudCBpcyB1cGRhdGVkJylcblxuICB0LmRlZXBFcXVhbChcbiAgICBpbnRlcmFjdGlvbi5wb2ludGVycyxcbiAgICBbe1xuICAgICAgaWQ6IHBvaW50ZXIucG9pbnRlcklkLFxuICAgICAgcG9pbnRlcixcbiAgICAgIGV2ZW50LFxuICAgICAgZG93blRpbWU6IHBvaW50ZXJDb29yZHMudGltZVN0YW1wLFxuICAgICAgZG93blRhcmdldDogZXZlbnRUYXJnZXQsXG4gICAgfV0sXG4gICAgJ2ludGVyYWN0aW9uLnBvaW50ZXJzIGlzIHVwZGF0ZWQnKVxuXG4gIHQuZGVlcEVxdWFsKGludGVyYWN0aW9uLmNvb3Jkcy5zdGFydCwgcG9pbnRlckNvb3JkcywgJ2Nvb3Jkcy5zdGFydCBhcmUgc2V0IHRvIHBvaW50ZXInKVxuICB0LmRlZXBFcXVhbChpbnRlcmFjdGlvbi5jb29yZHMuY3VyLCAgIHBvaW50ZXJDb29yZHMsICdjb29yZHMuY3VyICAgYXJlIHNldCB0byBwb2ludGVyJylcbiAgdC5kZWVwRXF1YWwoaW50ZXJhY3Rpb24uY29vcmRzLnByZXYsICBwb2ludGVyQ29vcmRzLCAnY29vcmRzLnByZXYgIGFyZSBzZXQgdG8gcG9pbnRlcicpXG5cbiAgdC5lcXVhbCh0eXBlb2Ygc2lnbmFsQXJnLCAnb2JqZWN0JywgJ2Rvd24gc2lnbmFsIHdhcyBmaXJlZCBhZ2FpbicpXG4gIHQub2soaW50ZXJhY3Rpb24ucG9pbnRlcklzRG93biwgJ3BvaW50ZXJJc0Rvd24nKVxuICB0Lm5vdE9rKGludGVyYWN0aW9uLnBvaW50ZXJXYXNNb3ZlZCwgJ3BvaW50ZXJXYXNNb3ZlZCBzaG91bGQgYWx3YXlzIGNoYW5nZSB0byBmYWxzZScpXG5cbiAgdC5lbmQoKVxufSlcblxudGVzdCgnSW50ZXJhY3Rpb24uc3RhcnQnLCAodCkgPT4ge1xuICBjb25zdCBpbnRlcmFjdGlvbiA9IG1ha2VJbnRlcmFjdGlvbkFuZFNpZ25hbHMoKVxuICBjb25zdCBhY3Rpb24gPSB7IG5hbWU6ICdURVNUJyB9XG4gIGNvbnN0IHRhcmdldCA9IGhlbHBlcnMubW9ja0ludGVyYWN0YWJsZSgpXG4gIGNvbnN0IGVsZW1lbnQgPSB7fVxuICBjb25zdCBwb2ludGVyID0gaGVscGVycy5uZXdQb2ludGVyKClcbiAgY29uc3QgZXZlbnQgPSB7fVxuXG4gIGludGVyYWN0aW9uLnN0YXJ0KGFjdGlvbiwgdGFyZ2V0LCBlbGVtZW50KVxuICB0LmVxdWFsKGludGVyYWN0aW9uLnByZXBhcmVkLm5hbWUsIG51bGwsICdkbyBub3RoaW5nIGlmICFwb2ludGVySXNEb3duJylcblxuICAvLyBwb2ludGVycyBpcyBzdGlsbCBlbXB0eVxuICBpbnRlcmFjdGlvbi5wb2ludGVySXNEb3duID0gdHJ1ZVxuICBpbnRlcmFjdGlvbi5zdGFydChhY3Rpb24sIHRhcmdldCwgZWxlbWVudClcbiAgdC5lcXVhbChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lLCBudWxsLCAnZG8gbm90aGluZyBpZiB0b28gZmV3IHBvaW50ZXJzIGFyZSBkb3duJylcblxuICBpbnRlcmFjdGlvbi5wb2ludGVyRG93bihwb2ludGVyLCBldmVudCwgbnVsbClcblxuICBpbnRlcmFjdGlvbi5faW50ZXJhY3RpbmcgPSB0cnVlXG4gIGludGVyYWN0aW9uLnN0YXJ0KGFjdGlvbiwgdGFyZ2V0LCBlbGVtZW50KVxuICB0LmVxdWFsKGludGVyYWN0aW9uLnByZXBhcmVkLm5hbWUsIG51bGwsICdkbyBub3RoaW5nIGlmIGFscmVhZHkgaW50ZXJhY3RpbmcnKVxuXG4gIGludGVyYWN0aW9uLl9pbnRlcmFjdGluZyA9IGZhbHNlXG5cbiAgbGV0IHNpZ25hbEFyZ1xuICAvLyBsZXQgaW50ZXJhY3RpbmdJblN0YXJ0TGlzdGVuZXI7XG4gIGNvbnN0IHNpZ25hbExpc3RlbmVyID0gKGFyZykgPT4ge1xuICAgIHNpZ25hbEFyZyA9IGFyZ1xuICAgIC8vIGludGVyYWN0aW5nSW5TdGFydExpc3RlbmVyID0gYXJnLmludGVyYWN0aW9uLmludGVyYWN0aW5nKCk7XG4gIH1cblxuICBpbnRlcmFjdGlvbi5fc2lnbmFscy5vbignYWN0aW9uLXN0YXJ0Jywgc2lnbmFsTGlzdGVuZXIpXG4gIGludGVyYWN0aW9uLnN0YXJ0KGFjdGlvbiwgdGFyZ2V0LCBlbGVtZW50KVxuXG4gIHQuZXF1YWwoaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSwgYWN0aW9uLm5hbWUsICdhY3Rpb24gaXMgcHJlcGFyZWQnKVxuICB0LmVxdWFsKGludGVyYWN0aW9uLnRhcmdldCwgdGFyZ2V0LCAnaW50ZXJhY3Rpb24udGFyZ2V0IGlzIHVwZGF0ZWQnKVxuICB0LmVxdWFsKGludGVyYWN0aW9uLmVsZW1lbnQsIGVsZW1lbnQsICdpbnRlcmFjdGlvbi5lbGVtZW50IGlzIHVwZGF0ZWQnKVxuXG4gIC8vIHQuYXNzZXJ0KGludGVyYWN0aW5nSW5TdGFydExpc3RlbmVyLCAnaW50ZXJhY3Rpb24gaXMgaW50ZXJhY3RpbmcgZHVyaW5nIGFjdGlvbi1zdGFydCBzaWduYWwnKTtcbiAgdC5hc3NlcnQoaW50ZXJhY3Rpb24uaW50ZXJhY3RpbmcoKSwgJ2ludGVyYWN0aW9uIGlzIGludGVyYWN0aW5nIGFmdGVyIHN0YXJ0IG1ldGhvZCcpXG4gIHQuZXF1YWwoc2lnbmFsQXJnLmludGVyYWN0aW9uLCBpbnRlcmFjdGlvbiwgJ2ludGVyYWN0aW9uIGluIHNpZ25hbCBhcmcnKVxuICB0LmVxdWFsKHNpZ25hbEFyZy5ldmVudCwgZXZlbnQsICdldmVudCAoaW50ZXJhY3Rpb24uZG93bkV2ZW50KSBpbiBzaWduYWwgYXJnJylcblxuICBpbnRlcmFjdGlvbi5faW50ZXJhY3RpbmcgPSBmYWxzZVxuXG4gIC8vIGludGVyYWN0aW9uLnN0YXJ0KGFjdGlvbiwgdGFyZ2V0LCBlbGVtZW50KTtcbiAgLy8gdC5kZWVwRXF1YWwoc2NvcGUuaW50ZXJhY3Rpb25zLmxpc3QsIFtpbnRlcmFjdGlvbl0sICdpbnRlcmFjdGlvbiBpcyBhZGRlZCBiYWNrIHRvIHNjb3BlJyk7XG5cbiAgdC5lbmQoKVxufSlcblxudGVzdCgnc3RvcCBpbnRlcmFjdGlvbiBmcm9tIHN0YXJ0IGV2ZW50JywgKHQpID0+IHtcbiAgY29uc3Qgc2NvcGUgPSBoZWxwZXJzLm1vY2tTY29wZSgpXG5cbiAgaW50ZXJhY3Rpb25zLmluc3RhbGwoc2NvcGUpXG4gIGNvbnN0IGludGVyYWN0aW9uID0gc2NvcGUuaW50ZXJhY3Rpb25zLm5ldyh7fSlcbiAgY29uc3QgaW50ZXJhY3RhYmxlID0gaGVscGVycy5tb2NrSW50ZXJhY3RhYmxlKClcblxuICBpbnRlcmFjdGlvbi50YXJnZXQgPSBpbnRlcmFjdGFibGVcbiAgaW50ZXJhY3Rpb24uZWxlbWVudCA9IGludGVyYWN0YWJsZS5lbGVtZW50XG4gIGludGVyYWN0aW9uLnByZXBhcmVkID0geyBuYW1lOiAnVEVTVCcgfVxuXG4gIGludGVyYWN0YWJsZS5ldmVudHMub24oJ1RFU1RzdGFydCcsIChldmVudCkgPT4ge1xuICAgIGV2ZW50LmludGVyYWN0aW9uLnN0b3AoKVxuICB9KVxuXG4gIGludGVyYWN0aW9uLl9zaWduYWxzLmZpcmUoJ2FjdGlvbi1zdGFydCcsIHsgaW50ZXJhY3Rpb24sIGV2ZW50OiB7fSB9KVxuXG4gIHQubm90T2soaW50ZXJhY3Rpb24uaW50ZXJhY3RpbmcoKSwgJ2ludGVyYWN0aW9uIGNhbiBiZSBzdG9wcGVkIGZyb20gc3RhcnQgZXZlbnQgbGlzdGVuZXInKVxuXG4gIHQuZW5kKClcbn0pXG5cbnRlc3QoJ0ludGVyYWN0aW9uIGNyZWF0ZVByZXBhcmVkRXZlbnQnLCAodCkgPT4ge1xuICBjb25zdCBzY29wZSA9IGhlbHBlcnMubW9ja1Njb3BlKClcblxuICBpbnRlcmFjdGlvbnMuaW5zdGFsbChzY29wZSlcblxuICBjb25zdCBpbnRlcmFjdGlvbiA9IHNjb3BlLmludGVyYWN0aW9ucy5uZXcoe30pXG4gIGNvbnN0IGludGVyYWN0YWJsZSA9IGhlbHBlcnMubW9ja0ludGVyYWN0YWJsZSgpXG4gIGNvbnN0IGFjdGlvbiA9IHsgbmFtZTogJ3Jlc2l6ZScgfVxuICBjb25zdCBwaGFzZSA9ICdURVNUX1BIQVNFJ1xuXG4gIGludGVyYWN0aW9uLnByZXBhcmVkID0gYWN0aW9uXG4gIGludGVyYWN0aW9uLnRhcmdldCA9IGludGVyYWN0YWJsZVxuICBpbnRlcmFjdGlvbi5lbGVtZW50ID0gaW50ZXJhY3RhYmxlLmVsZW1lbnRcbiAgaW50ZXJhY3Rpb24ucHJldkV2ZW50ID0geyBwYWdlOiB7fSwgY2xpZW50OiB7fSwgdmVsb2NpdHk6IHt9IH1cblxuICBjb25zdCBpRXZlbnQgPSBpbnRlcmFjdGlvbi5fY3JlYXRlUHJlcGFyZWRFdmVudCh7fSwgcGhhc2UpXG5cbiAgdC5vayhpRXZlbnQgaW5zdGFuY2VvZiBJbnRlcmFjdEV2ZW50LFxuICAgICdJbnRlcmFjdEV2ZW50IGlzIGZpcmVkJylcblxuICB0LmVxdWFsKGlFdmVudC50eXBlLCBhY3Rpb24ubmFtZSArIHBoYXNlLFxuICAgICdldmVudCB0eXBlJylcblxuICB0LmVxdWFsKGlFdmVudC5pbnRlcmFjdGFibGUsIGludGVyYWN0YWJsZSxcbiAgICAnZXZlbnQuaW50ZXJhY3RhYmxlJylcblxuICB0LmVxdWFsKGlFdmVudC50YXJnZXQsIGludGVyYWN0YWJsZS5lbGVtZW50LFxuICAgICdldmVudC50YXJnZXQnKVxuXG4gIHQuZW5kKClcbn0pXG5cbnRlc3QoJ0ludGVyYWN0aW9uIGZpcmVFdmVudCcsICh0KSA9PiB7XG4gIGNvbnN0IGludGVyYWN0aW9uID0gbmV3IEludGVyYWN0aW9uKHsgc2lnbmFsczogaGVscGVycy5tb2NrU2lnbmFscygpIH0pXG4gIGNvbnN0IGludGVyYWN0YWJsZSA9IGhlbHBlcnMubW9ja0ludGVyYWN0YWJsZSgpXG4gIGNvbnN0IGlFdmVudCA9IHt9XG4gIGxldCBmaXJlZEV2ZW50XG5cbiAgLy8gdGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIGFjdGlvbnMuZmlyZVByZXBhcmVkXG4gIGludGVyYWN0YWJsZS5maXJlID0gKGV2ZW50KSA9PiB7XG4gICAgZmlyZWRFdmVudCA9IGV2ZW50XG4gIH1cblxuICBpbnRlcmFjdGlvbi50YXJnZXQgPSBpbnRlcmFjdGFibGVcbiAgaW50ZXJhY3Rpb24uX2ZpcmVFdmVudChpRXZlbnQpXG5cbiAgdC5lcXVhbChmaXJlZEV2ZW50LCBpRXZlbnQsXG4gICAgJ3RhcmdldCBpbnRlcmFjdGFibGVcXCdzIGZpcmUgbWV0aG9kIGlzIGNhbGxlZCcpXG5cbiAgdC5lcXVhbChpbnRlcmFjdGlvbi5wcmV2RXZlbnQsIGlFdmVudCxcbiAgICAnaW50ZXJhY3Rpb24ucHJldkV2ZW50IGlzIHVwZGF0ZWQnKVxuXG4gIHQuZW5kKClcbn0pXG4iXX0= \ No newline at end of file diff --git a/packages/core/tests/helpers.d.ts b/packages/core/tests/helpers.d.ts new file mode 100644 index 000000000..1a1f22b68 --- /dev/null +++ b/packages/core/tests/helpers.d.ts @@ -0,0 +1,64 @@ +export declare function unique(): number; +export declare function uniqueProps(obj: any): void; +export declare function newCoordsSet(n?: number): { + start: { + page: { + x: number; + y: number; + }; + client: { + x: number; + y: number; + }; + timeStamp: number; + }; + cur: { + page: { + x: number; + y: number; + }; + client: { + x: number; + y: number; + }; + timeStamp: number; + }; + prev: { + page: { + x: number; + y: number; + }; + client: { + x: number; + y: number; + }; + timeStamp: number; + }; + delta: { + page: { + x: number; + y: number; + }; + client: { + x: number; + y: number; + }; + timeStamp: number; + }; + velocity: { + page: { + x: number; + y: number; + }; + client: { + x: number; + y: number; + }; + timeStamp: number; + }; +}; +export declare function newPointer(n?: number): import("../../types/types").PointerType; +export declare function mockScope(options?: any): any; +export declare function mockSignals(): any; +export declare function mockInteractable(props?: {}): any; +export declare function getProps(src: any, props: any): any; diff --git a/packages/core/tests/helpers.js b/packages/core/tests/helpers.js new file mode 100644 index 000000000..752922492 --- /dev/null +++ b/packages/core/tests/helpers.js @@ -0,0 +1,103 @@ +import { doc } from '@interactjs/_dev/test/domator'; +import * as utils from '@interactjs/utils'; +import Signals from '@interactjs/utils/Signals'; +import Eventable from '../Eventable'; +import { createScope } from '../scope'; +let counter = 0; +export function unique() { + return (counter++); +} +export function uniqueProps(obj) { + for (const prop in obj) { + if (!obj.hasOwnProperty(prop)) { + continue; + } + if (utils.is.object(obj)) { + uniqueProps(obj[prop]); + } + else { + obj[prop] = (counter++); + } + } +} +export function newCoordsSet(n = 0) { + return { + start: { + page: { x: n++, y: n++ }, + client: { x: n++, y: n++ }, + timeStamp: n++, + }, + cur: { + page: { x: n++, y: n++ }, + client: { x: n++, y: n++ }, + timeStamp: n++, + }, + prev: { + page: { x: n++, y: n++ }, + client: { x: n++, y: n++ }, + timeStamp: n++, + }, + delta: { + page: { x: n++, y: n++ }, + client: { x: n++, y: n++ }, + timeStamp: n++, + }, + velocity: { + page: { x: n++, y: n++ }, + client: { x: n++, y: n++ }, + timeStamp: n++, + }, + }; +} +export function newPointer(n = 50) { + return { + pointerId: n++, + pageX: n++, + pageY: n++, + clientX: n++, + clientY: n++, + }; +} +export function mockScope(options = {}) { + const document = options.document || doc; + const window = document.defaultView; + const scope = createScope().init(window); + scope.interact = Object.assign(() => { }, { use() { } }); + return scope; +} +export function mockSignals() { + return { + on() { }, + off() { }, + fire() { }, + }; +} +export function mockInteractable(props = {}) { + return Object.assign({ + _signals: new Signals(), + _actions: { + names: [], + methodDict: {}, + }, + options: { + deltaSource: 'page', + }, + target: {}, + events: new Eventable(), + getRect() { + return this.element + ? utils.dom.getElementClientRect(this.element) + : { left: 0, top: 0, right: 0, bottom: 0 }; + }, + fire(event) { + this.events.fire(event); + }, + }, props); +} +export function getProps(src, props) { + return props.reduce((acc, prop) => { + acc[prop] = src[prop]; + return acc; + }, {}); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLCtCQUErQixDQUFBO0FBQ25ELE9BQU8sS0FBSyxLQUFLLE1BQU0sbUJBQW1CLENBQUE7QUFDMUMsT0FBTyxPQUFPLE1BQU0sMkJBQTJCLENBQUE7QUFDL0MsT0FBTyxTQUFTLE1BQU0sY0FBYyxDQUFBO0FBQ3BDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFdEMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFBO0FBRWYsTUFBTSxVQUFVLE1BQU07SUFDcEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7QUFDcEIsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUUsR0FBRztJQUM5QixLQUFLLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRTtRQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUFFLFNBQVE7U0FBRTtRQUUzQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtTQUN2QjthQUNJO1lBQ0gsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtTQUN4QjtLQUNGO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUUsQ0FBQyxHQUFHLENBQUM7SUFDakMsT0FBTztRQUNMLEtBQUssRUFBRTtZQUNMLElBQUksRUFBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0IsTUFBTSxFQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVB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QU8sQ0FBQztnQkFDOUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFBO1FBQzlDLENBQUM7UUFDRCxJQUFJLENBQUUsS0FBSztZQUNULElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3pCLENBQUM7S0FDRixFQUNELEtBQUssQ0FBUSxDQUFBO0FBQ2pCLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFFLEdBQUcsRUFBRSxLQUFLO0lBQ2xDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUNoQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3JCLE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBQ1IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRvYyB9IGZyb20gJ0BpbnRlcmFjdGpzL19kZXYvdGVzdC9kb21hdG9yJ1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMnXG5pbXBvcnQgU2lnbmFscyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9TaWduYWxzJ1xuaW1wb3J0IEV2ZW50YWJsZSBmcm9tICcuLi9FdmVudGFibGUnXG5pbXBvcnQgeyBjcmVhdGVTY29wZSB9IGZyb20gJy4uL3Njb3BlJ1xuXG5sZXQgY291bnRlciA9IDBcblxuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZSAoKSB7XG4gIHJldHVybiAoY291bnRlcisrKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlUHJvcHMgKG9iaikge1xuICBmb3IgKGNvbnN0IHByb3AgaW4gb2JqKSB7XG4gICAgaWYgKCFvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHsgY29udGludWUgfVxuXG4gICAgaWYgKHV0aWxzLmlzLm9iamVjdChvYmopKSB7XG4gICAgICB1bmlxdWVQcm9wcyhvYmpbcHJvcF0pXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgb2JqW3Byb3BdID0gKGNvdW50ZXIrKylcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5ld0Nvb3Jkc1NldCAobiA9IDApIHtcbiAgcmV0dXJuIHtcbiAgICBzdGFydDoge1xuICAgICAgcGFnZSAgICAgOiB7IHg6IG4rKywgeTogbisrIH0sXG4gICAgICBjbGllbnQgICA6IHsgeDogbisrLCB5OiBuKysgfSxcbiAgICAgIHRpbWVTdGFtcDogbisrLFxuICAgIH0sXG4gICAgY3VyOiB7XG4gICAgICBwYWdlICAgICA6IHsgeDogbisrLCB5OiBuKysgfSxcbiAgICAgIGNsaWVudCAgIDogeyB4OiBuKyssIHk6IG4rKyB9LFxuICAgICAgdGltZVN0YW1wOiBuKyssXG4gICAgfSxcbiAgICBwcmV2OiB7XG4gICAgICBwYWdlICAgICA6IHsgeDogbisrLCB5OiBuKysgfSxcbiAgICAgIGNsaWVudCAgIDogeyB4OiBuKyssIHk6IG4rKyB9LFxuICAgICAgdGltZVN0YW1wOiBuKyssXG4gICAgfSxcbiAgICBkZWx0YToge1xuICAgICAgcGFnZSAgICAgOiB7IHg6IG4rKywgeTogbisrIH0sXG4gICAgICBjbGllbnQgICA6IHsgeDogbisrLCB5OiBuKysgfSxcbiAgICAgIHRpbWVTdGFtcDogbisrLFxuICAgIH0sXG4gICAgdmVsb2NpdHk6IHtcbiAgICAgIHBhZ2UgICAgIDogeyB4OiBuKyssIHk6IG4rKyB9LFxuICAgICAgY2xpZW50ICAgOiB7IHg6IG4rKywgeTogbisrIH0sXG4gICAgICB0aW1lU3RhbXA6IG4rKyxcbiAgICB9LFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXdQb2ludGVyIChuID0gNTApIHtcbiAgcmV0dXJuIHtcbiAgICBwb2ludGVySWQ6IG4rKyxcbiAgICBwYWdlWDogbisrLFxuICAgIHBhZ2VZOiBuKyssXG4gICAgY2xpZW50WDogbisrLFxuICAgIGNsaWVudFk6IG4rKyxcbiAgfSBhcyBJbnRlcmFjdC5Qb2ludGVyVHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja1Njb3BlIChvcHRpb25zID0ge30gYXMgYW55KSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gb3B0aW9ucy5kb2N1bWVudCB8fCBkb2NcbiAgY29uc3Qgd2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXdcblxuICBjb25zdCBzY29wZSA9IGNyZWF0ZVNjb3BlKCkuaW5pdCh3aW5kb3cpXG5cbiAgc2NvcGUuaW50ZXJhY3QgPSBPYmplY3QuYXNzaWduKCgpID0+IHt9LCB7IHVzZSAoKSB7fSB9KSBhcyBhbnlcblxuICByZXR1cm4gc2NvcGUgYXMgYW55XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrU2lnbmFscyAoKSB7XG4gIHJldHVybiB7XG4gICAgb24gKCkge30sXG4gICAgb2ZmICgpIHt9LFxuICAgIGZpcmUgKCkge30sXG4gIH0gYXMgdW5rbm93biBhcyBhbnlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tJbnRlcmFjdGFibGUgKHByb3BzID0ge30pIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAge1xuICAgICAgX3NpZ25hbHM6IG5ldyBTaWduYWxzKCksXG4gICAgICBfYWN0aW9uczoge1xuICAgICAgICBuYW1lczogW10sXG4gICAgICAgIG1ldGhvZERpY3Q6IHt9LFxuICAgICAgfSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgZGVsdGFTb3VyY2U6ICdwYWdlJyxcbiAgICAgIH0sXG4gICAgICB0YXJnZXQ6IHt9LFxuICAgICAgZXZlbnRzOiBuZXcgRXZlbnRhYmxlKCksXG4gICAgICBnZXRSZWN0ICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFxuICAgICAgICAgID8gdXRpbHMuZG9tLmdldEVsZW1lbnRDbGllbnRSZWN0KHRoaXMuZWxlbWVudClcbiAgICAgICAgICA6IHsgbGVmdDogMCwgdG9wOiAwLCByaWdodDogMCwgYm90dG9tOiAwIH1cbiAgICAgIH0sXG4gICAgICBmaXJlIChldmVudCkge1xuICAgICAgICB0aGlzLmV2ZW50cy5maXJlKGV2ZW50KVxuICAgICAgfSxcbiAgICB9LFxuICAgIHByb3BzKSBhcyBhbnlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3BzIChzcmMsIHByb3BzKSB7XG4gIHJldHVybiBwcm9wcy5yZWR1Y2UoKGFjYywgcHJvcCkgPT4ge1xuICAgIGFjY1twcm9wXSA9IHNyY1twcm9wXVxuICAgIHJldHVybiBhY2NcbiAgfSwge30pXG59XG4iXX0= \ No newline at end of file diff --git a/packages/core/tests/interactions.d.ts b/packages/core/tests/interactions.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/core/tests/interactions.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/core/tests/interactions.js b/packages/core/tests/interactions.js new file mode 100644 index 000000000..4a580619f --- /dev/null +++ b/packages/core/tests/interactions.js @@ -0,0 +1,41 @@ +import Signals from '@interactjs/utils/Signals'; +import test from '@interactjs/_dev/test/test'; +import Interaction from '../Interaction'; +import interactions from '../interactions'; +import * as helpers from './helpers'; +test('interactions', t => { + let scope = helpers.mockScope(); + interactions.install(scope); + const interaction = interactions.newInteraction({ pointerType: 'TEST' }, scope); + t.equal(scope.interactions.list[0], interaction, 'new Interaction is pushed to scope.interactions'); + interactions.install(scope); + t.ok(scope.interactions instanceof Object, 'interactions object added to scope'); + const listeners = scope.interactions.listeners; + t.ok(interactions.methodNames.reduce((acc, m) => acc && typeof listeners[m] === 'function', true), 'interactions object added to scope'); + scope = helpers.mockScope(); + interactions.install(scope); + const newInteraction = scope.interactions.new({}); + t.assert(typeof scope.interactions === 'object'); + t.assert(scope.interactions.signals instanceof Signals); + t.assert(typeof scope.interactions.new === 'function'); + t.assert(newInteraction instanceof Interaction); + t.equal(newInteraction._signals, scope.interactions.signals); + t.assert(typeof scope.actions === 'object'); + t.deepEqual(scope.actions.names, []); + t.deepEqual(scope.actions.methodDict, {}); + t.end(); +}); +test('interactions document event options', t => { + const scope = helpers.mockScope(); + const doc = scope.document; + let options = {}; + scope.browser = { isIOS: false }; + scope.signals.fire('add-document', { doc, scope, options }); + t.deepEqual(options, {}, 'no doc options.event.passive is added when not iOS'); + options = {}; + scope.browser.isIOS = true; + scope.signals.fire('add-document', { doc, scope, options }); + t.deepEqual(options, { events: { passive: false } }, 'doc options.event.passive is set to false for iOS'); + t.end(); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZXJhY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sT0FBTyxNQUFNLDJCQUEyQixDQUFBO0FBQy9DLE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sV0FBVyxNQUFNLGdCQUFnQixDQUFBO0FBQ3hDLE9BQU8sWUFBWSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sS0FBSyxPQUFPLE1BQU0sV0FBVyxDQUFBO0FBRXBDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDdkIsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBRS9CLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFM0IsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FDN0MsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEVBQ3ZCLEtBQUssQ0FDTixDQUFBO0lBRUQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQzdDLGlEQUFpRCxDQUFDLENBQUE7SUFFcEQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUUzQixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLFlBQVksTUFBTSxFQUFFLG9DQUFvQyxDQUFDLENBQUE7SUFFaEYsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUE7SUFFOUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQy9GLG9DQUFvQyxDQUFDLENBQUE7SUFFdkMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUUzQixZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzNCLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBRWpELENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLENBQUMsWUFBWSxLQUFLLFFBQVEsQ0FBQyxDQUFBO0lBQ2hELENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLFlBQVksT0FBTyxDQUFDLENBQUE7SUFDdkQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxLQUFLLFVBQVUsQ0FBQyxDQUFBO0lBQ3RELENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxZQUFZLFdBQVcsQ0FBQyxDQUFBO0lBQy9DLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRTVELENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFBO0lBQzNDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDcEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUV6QyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7QUFDVCxDQUFDLENBQUMsQ0FBQTtBQUVGLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUM5QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQTtJQUUxQixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUE7SUFDaEIsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQTtJQUNoQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFFM0QsQ0FBQyxDQUFDLFNBQVMsQ0FDVCxPQUFPLEVBQ1AsRUFBRSxFQUNGLG9EQUFvRCxDQUFDLENBQUE7SUFFdkQsT0FBTyxHQUFHLEVBQUUsQ0FBQTtJQUVaLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQTtJQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFFM0QsQ0FBQyxDQUFDLFNBQVMsQ0FDVCxPQUFPLEVBQ1AsRUFBRSxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFDOUIsbURBQW1ELENBQUMsQ0FBQTtJQUV0RCxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7QUFDVCxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTaWduYWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL1NpZ25hbHMnXG5pbXBvcnQgdGVzdCBmcm9tICdAaW50ZXJhY3Rqcy9fZGV2L3Rlc3QvdGVzdCdcbmltcG9ydCBJbnRlcmFjdGlvbiBmcm9tICcuLi9JbnRlcmFjdGlvbidcbmltcG9ydCBpbnRlcmFjdGlvbnMgZnJvbSAnLi4vaW50ZXJhY3Rpb25zJ1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tICcuL2hlbHBlcnMnXG5cbnRlc3QoJ2ludGVyYWN0aW9ucycsIHQgPT4ge1xuICBsZXQgc2NvcGUgPSBoZWxwZXJzLm1vY2tTY29wZSgpXG5cbiAgaW50ZXJhY3Rpb25zLmluc3RhbGwoc2NvcGUpXG5cbiAgY29uc3QgaW50ZXJhY3Rpb24gPSBpbnRlcmFjdGlvbnMubmV3SW50ZXJhY3Rpb24oXG4gICAgeyBwb2ludGVyVHlwZTogJ1RFU1QnIH0sXG4gICAgc2NvcGVcbiAgKVxuXG4gIHQuZXF1YWwoc2NvcGUuaW50ZXJhY3Rpb25zLmxpc3RbMF0sIGludGVyYWN0aW9uLFxuICAgICduZXcgSW50ZXJhY3Rpb24gaXMgcHVzaGVkIHRvIHNjb3BlLmludGVyYWN0aW9ucycpXG5cbiAgaW50ZXJhY3Rpb25zLmluc3RhbGwoc2NvcGUpXG5cbiAgdC5vayhzY29wZS5pbnRlcmFjdGlvbnMgaW5zdGFuY2VvZiBPYmplY3QsICdpbnRlcmFjdGlvbnMgb2JqZWN0IGFkZGVkIHRvIHNjb3BlJylcblxuICBjb25zdCBsaXN0ZW5lcnMgPSBzY29wZS5pbnRlcmFjdGlvbnMubGlzdGVuZXJzXG5cbiAgdC5vayhpbnRlcmFjdGlvbnMubWV0aG9kTmFtZXMucmVkdWNlKChhY2MsIG0pID0+IGFjYyAmJiB0eXBlb2YgbGlzdGVuZXJzW21dID09PSAnZnVuY3Rpb24nLCB0cnVlKSxcbiAgICAnaW50ZXJhY3Rpb25zIG9iamVjdCBhZGRlZCB0byBzY29wZScpXG5cbiAgc2NvcGUgPSBoZWxwZXJzLm1vY2tTY29wZSgpXG5cbiAgaW50ZXJhY3Rpb25zLmluc3RhbGwoc2NvcGUpXG4gIGNvbnN0IG5ld0ludGVyYWN0aW9uID0gc2NvcGUuaW50ZXJhY3Rpb25zLm5ldyh7fSlcblxuICB0LmFzc2VydCh0eXBlb2Ygc2NvcGUuaW50ZXJhY3Rpb25zID09PSAnb2JqZWN0JylcbiAgdC5hc3NlcnQoc2NvcGUuaW50ZXJhY3Rpb25zLnNpZ25hbHMgaW5zdGFuY2VvZiBTaWduYWxzKVxuICB0LmFzc2VydCh0eXBlb2Ygc2NvcGUuaW50ZXJhY3Rpb25zLm5ldyA9PT0gJ2Z1bmN0aW9uJylcbiAgdC5hc3NlcnQobmV3SW50ZXJhY3Rpb24gaW5zdGFuY2VvZiBJbnRlcmFjdGlvbilcbiAgdC5lcXVhbChuZXdJbnRlcmFjdGlvbi5fc2lnbmFscywgc2NvcGUuaW50ZXJhY3Rpb25zLnNpZ25hbHMpXG5cbiAgdC5hc3NlcnQodHlwZW9mIHNjb3BlLmFjdGlvbnMgPT09ICdvYmplY3QnKVxuICB0LmRlZXBFcXVhbChzY29wZS5hY3Rpb25zLm5hbWVzLCBbXSlcbiAgdC5kZWVwRXF1YWwoc2NvcGUuYWN0aW9ucy5tZXRob2REaWN0LCB7fSlcblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdpbnRlcmFjdGlvbnMgZG9jdW1lbnQgZXZlbnQgb3B0aW9ucycsIHQgPT4ge1xuICBjb25zdCBzY29wZSA9IGhlbHBlcnMubW9ja1Njb3BlKClcbiAgY29uc3QgZG9jID0gc2NvcGUuZG9jdW1lbnRcblxuICBsZXQgb3B0aW9ucyA9IHt9XG4gIHNjb3BlLmJyb3dzZXIgPSB7IGlzSU9TOiBmYWxzZSB9XG4gIHNjb3BlLnNpZ25hbHMuZmlyZSgnYWRkLWRvY3VtZW50JywgeyBkb2MsIHNjb3BlLCBvcHRpb25zIH0pXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgb3B0aW9ucyxcbiAgICB7fSxcbiAgICAnbm8gZG9jIG9wdGlvbnMuZXZlbnQucGFzc2l2ZSBpcyBhZGRlZCB3aGVuIG5vdCBpT1MnKVxuXG4gIG9wdGlvbnMgPSB7fVxuXG4gIHNjb3BlLmJyb3dzZXIuaXNJT1MgPSB0cnVlXG4gIHNjb3BlLnNpZ25hbHMuZmlyZSgnYWRkLWRvY3VtZW50JywgeyBkb2MsIHNjb3BlLCBvcHRpb25zIH0pXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgb3B0aW9ucyxcbiAgICB7IGV2ZW50czogeyBwYXNzaXZlOiBmYWxzZSB9IH0sXG4gICAgJ2RvYyBvcHRpb25zLmV2ZW50LnBhc3NpdmUgaXMgc2V0IHRvIGZhbHNlIGZvciBpT1MnKVxuXG4gIHQuZW5kKClcbn0pXG4iXX0= \ No newline at end of file diff --git a/packages/inertia/index.d.ts b/packages/inertia/index.d.ts index f105fa452..078b1babd 100644 --- a/packages/inertia/index.d.ts +++ b/packages/inertia/index.d.ts @@ -19,7 +19,7 @@ declare module '@interactjs/core/defaultOptions' { endSpeed?: number; allowResume?: true; smoothEndDuration?: number; - }; + } | boolean; } } declare function install(scope: Scope): void; diff --git a/packages/inertia/index.js b/packages/inertia/index.js index b1eaecdc2..ba68ba175 100644 --- a/packages/inertia/index.js +++ b/packages/inertia/index.js @@ -6,7 +6,7 @@ EventPhase.Resume = 'resume'; EventPhase.InertiaStart = 'inertiastart'; function install(scope) { const { interactions, defaults, } = scope; - interactions.signals.on('new', (interaction) => { + interactions.signals.on('new', ({ interaction }) => { interaction.inertia = { active: false, smoothEnd: false, @@ -239,4 +239,4 @@ export default { smothEndTick, updateInertiaCoords, }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFDM0QsT0FBTyxTQUFTLE1BQU0sNEJBQTRCLENBQUE7QUFDbEQsT0FBTyxLQUFLLEtBQUssTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQyxPQUFPLEdBQUcsTUFBTSx1QkFBdUIsQ0FBQTtBQStCdEMsVUFBa0IsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQ3JDLFVBQWtCLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQTtBQUVqRCxTQUFTLE9BQU8sQ0FBRSxLQUFZO0lBQzVCLE1BQU0sRUFDSixZQUFZLEVBQ1osUUFBUSxHQUNULEdBQUcsS0FBSyxDQUFBO0lBRVQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7UUFDN0MsV0FBVyxDQUFDLE9BQU8sR0FBRztZQUNwQixNQUFNLEVBQU8sS0FBSztZQUNsQixTQUFTLEVBQUksS0FBSztZQUNsQixXQUFXLEVBQUUsS0FBSztZQUVsQixVQUFVLEVBQUUsSUFBSTtZQUNoQixRQUFRLEVBQUksRUFBRTtZQUVkLEVBQUUsRUFBRSxDQUFDO1lBQ0wsRUFBRSxFQUFFLENBQUM7WUFDTCxFQUFFLEVBQUUsQ0FBQztZQUNMLEVBQUUsRUFBRSxDQUFDO1lBRUwsRUFBRSxFQUFFLENBQUM7WUFDTCxHQUFHLEVBQUUsQ0FBQztZQUNOLEdBQUcsRUFBRSxDQUFDO1lBQ04sUUFBUSxFQUFFLENBQUM7WUFFWCxTQUFTLEVBQUUsQ0FBQztZQUNaLFNBQVMsRUFBRSxDQUFDO1lBQ1osQ0FBQyxFQUFJLElBQUk7U0FDVixDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRiw2QkFBNkI7SUFDN0IsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FB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QUFFRCxlQUFlO0lBQ2IsT0FBTztJQUNQLFdBQVc7SUFDWCxXQUFXO0lBQ1gsWUFBWTtJQUNaLG1CQUFtQjtDQUNwQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRQaGFzZSB9IGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3RFdmVudCdcbmltcG9ydCBtb2RpZmllcnMgZnJvbSAnQGludGVyYWN0anMvbW9kaWZpZXJzL2Jhc2UnXG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscydcbmltcG9ydCByYWYgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvcmFmJ1xuXG50eXBlIFNjb3BlID0gaW1wb3J0ICgnQGludGVyYWN0anMvY29yZS9zY29wZScpLlNjb3BlXG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0RXZlbnQnIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvd1xuICBlbnVtIEV2ZW50UGhhc2Uge1xuICAgIFJlc3VtZSA9ICdyZXN1bWUnLFxuICAgIEluZXJ0aWFTdGFydCA9ICdpbmVydGlhc3RhcnQnLFxuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0aW9uJyB7XG4gIGludGVyZmFjZSBJbnRlcmFjdGlvbiB7XG4gICAgaW5lcnRpYT86IGFueVxuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL2RlZmF1bHRPcHRpb25zJyB7XG4gIGludGVyZmFjZSBQZXJBY3Rpb25EZWZhdWx0cyB7XG4gICAgaW5lcnRpYT86IHtcbiAgICAgIGVuYWJsZWQ/OiBib29sZWFuLFxuICAgICAgcmVzaXN0YW5jZT86IG51bWJlciwgICAgICAgIC8vIHRoZSBsYW1iZGEgaW4gZXhwb25lbnRpYWwgZGVjYXlcbiAgICAgIG1pblNwZWVkPzogbnVtYmVyLCAgICAgICAgICAvLyB0YXJnZXQgc3BlZWQgbXVzdCBiZSBhYm92ZSB0aGlzIGZvciBpbmVydGlhIHRvIHN0YXJ0XG4gICAgICBlbmRTcGVlZD86IG51bWJlciwgICAgICAgICAgLy8gdGhlIHNwZWVkIGF0IHdoaWNoIGluZXJ0aWEgaXMgc2xvdyBlbm91Z2ggdG8gc3RvcFxuICAgICAgYWxsb3dSZXN1bWU/OiB0cnVlLCAgICAgICAgIC8vIGFsbG93IHJlc3VtaW5nIGFuIGFjdGlvbiBpbiBpbmVydGlhIHBoYXNlXG4gICAgICBzbW9vdGhFbmREdXJhdGlvbj86IG51bWJlciwgLy8gYW5pbWF0ZSB0byBzbmFwL3Jlc3RyaWN0IGVuZE9ubHkgaWYgdGhlcmUncyBubyBpbmVydGlhXG4gICAgfVxuICB9XG59XG5cbihFdmVudFBoYXNlIGFzIGFueSkuUmVzdW1lID0gJ3Jlc3VtZSc7XG4oRXZlbnRQaGFzZSBhcyBhbnkpLkluZXJ0aWFTdGFydCA9ICdpbmVydGlhc3RhcnQnXG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlOiBTY29wZSkge1xuICBjb25zdCB7XG4gICAgaW50ZXJhY3Rpb25zLFxuICAgIGRlZmF1bHRzLFxuICB9ID0gc2NvcGVcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignbmV3JywgKGludGVyYWN0aW9uKSA9PiB7XG4gICAgaW50ZXJhY3Rpb24uaW5lcnRpYSA9IHtcbiAgICAgIGFjdGl2ZSAgICAgOiBmYWxzZSxcbiAgICAgIHNtb290aEVuZCAgOiBmYWxzZSxcbiAgICAgIGFsbG93UmVzdW1lOiBmYWxzZSxcblxuICAgICAgc3RhcnRFdmVudDogbnVsbCxcbiAgICAgIHVwQ29vcmRzICA6IHt9LFxuXG4gICAgICB4ZTogMCxcbiAgICAgIHllOiAwLFxuICAgICAgc3g6IDAsXG4gICAgICBzeTogMCxcblxuICAgICAgdDA6IDAsXG4gICAgICB2eDA6IDAsXG4gICAgICB2eXM6IDAsXG4gICAgICBkdXJhdGlvbjogMCxcblxuICAgICAgbGFtYmRhX3YwOiAwLFxuICAgICAgb25lX3ZlX3YwOiAwLFxuICAgICAgaSAgOiBudWxsLFxuICAgIH1cbiAgfSlcblxuICAvLyBGSVhNRSBwcm9wZXIgc2lnbmFsIHR5cGluZ1xuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYmVmb3JlLWFjdGlvbi1lbmQnLCAoYXJnKSA9PiByZWxlYXNlKGFyZyBhcyBhbnksIHNjb3BlKSlcbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2Rvd24nLCAoYXJnKSA9PiByZXN1bWUoYXJnIGFzIGFueSwgc2NvcGUpKVxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignc3RvcCcsIChhcmcpID0+IHN0b3AoYXJnIGFzIGFueSkpXG5cbiAgZGVmYXVsdHMucGVyQWN0aW9uLmluZXJ0aWEgPSB7XG4gICAgZW5hYmxlZCAgICAgICAgICA6IGZhbHNlLFxuICAgIHJlc2lzdGFuY2UgICAgICAgOiAxMCwgICAgLy8gdGhlIGxhbWJkYSBpbiBleHBvbmVudGlhbCBkZWNheVxuICAgIG1pblNwZWVkICAgICAgICAgOiAxMDAsICAgLy8gdGFyZ2V0IHNwZWVkIG11c3QgYmUgYWJvdmUgdGhpcyBmb3IgaW5lcnRpYSB0byBzdGFydFxuICAgIGVuZFNwZWVkICAgICAgICAgOiAxMCwgICAgLy8gdGhlIHNwZWVkIGF0IHdoaWNoIGluZXJ0aWEgaXMgc2xvdyBlbm91Z2ggdG8gc3RvcFxuICAgIGFsbG93UmVzdW1lICAgICAgOiB0cnVlLCAgLy8gYWxsb3cgcmVzdW1pbmcgYW4gYWN0aW9uIGluIGluZXJ0aWEgcGhhc2VcbiAgICBzbW9vdGhFbmREdXJhdGlvbjogMzAwLCAgIC8vIGFuaW1hdGUgdG8gc25hcC9yZXN0cmljdCBlbmRPbmx5IGlmIHRoZXJlJ3Mgbm8gaW5lcnRpYVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3VtZSAoeyBpbnRlcmFjdGlvbiwgZXZlbnQsIHBvaW50ZXIsIGV2ZW50VGFyZ2V0IH06IEludGVyYWN0LlNpZ25hbEFyZywgc2NvcGU6IFNjb3BlKSB7XG4gIGNvbnN0IHN0YXRlID0gaW50ZXJhY3Rpb24uaW5lcnRpYVxuXG4gIC8vIENoZWNrIGlmIHRoZSBkb3duIGV2ZW50IGhpdHMgdGhlIGN1cnJlbnQgaW5lcnRpYSB0YXJnZXRcbiAgaWYgKHN0YXRlLmFjdGl2ZSkge1xuICAgIGxldCBlbGVtZW50ID0gZXZlbnRUYXJnZXRcblxuICAgIC8vIGNsaW1iIHVwIHRoZSBET00gdHJlZSBmcm9tIHRoZSBldmVudCB0YXJnZXRcbiAgICB3aGlsZSAodXRpbHMuaXMuZWxlbWVudChlbGVtZW50KSkge1xuICAgICAgLy8gaWYgaW50ZXJhY3Rpb24gZWxlbWVudCBpcyB0aGUgY3VycmVudCBpbmVydGlhIHRhcmdldCBlbGVtZW50XG4gICAgICBpZiAoZWxlbWVudCA9PT0gaW50ZXJhY3Rpb24uZWxlbWVudCkge1xuICAgICAgICAvLyBzdG9wIGluZXJ0aWFcbiAgICAgICAgcmFmLmNhbmNlbChzdGF0ZS5pKVxuICAgICAgICBzdGF0ZS5hY3RpdmUgPSBmYWxzZVxuICAgICAgICBpbnRlcmFjdGlvbi5zaW11bGF0aW9uID0gbnVsbFxuXG4gICAgICAgIC8vIHVwZGF0ZSBwb2ludGVycyB0byB0aGUgZG93biBldmVudCdzIGNvb3JkaW5hdGVzXG4gICAgICAgIGludGVyYWN0aW9uLnVwZGF0ZVBvaW50ZXIocG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0LCB0cnVlKVxuICAgICAgICB1dGlscy5wb2ludGVyLnNldENvb3JkcyhcbiAgICAgICAgICBpbnRlcmFjdGlvbi5jb29yZHMuY3VyLFxuICAgICAgICAgIGludGVyYWN0aW9uLnBvaW50ZXJzLm1hcCgocCkgPT4gcC5wb2ludGVyKVxuICAgICAgICApXG5cbiAgICAgICAgLy8gZmlyZSBhcHByb3ByaWF0ZSBzaWduYWxzXG4gICAgICAgIGNvbnN0IHNpZ25hbEFyZyA9IHtcbiAgICAgICAgICBpbnRlcmFjdGlvbixcbiAgICAgICAgfVxuXG4gICAgICAgIHNjb3BlLmludGVyYWN0aW9ucy5zaWduYWxzLmZpcmUoJ2FjdGlvbi1yZXN1bWUnLCBzaWduYWxBcmcpXG5cbiAgICAgICAgLy8gZmlyZSBhIHJldW1lIGV2ZW50XG4gICAgICAgIGNvbnN0IHJlc3VtZUV2ZW50ID0gbmV3IHNjb3BlLkludGVyYWN0RXZlbnQoXG4gICAgICAgICAgaW50ZXJhY3Rpb24sIGV2ZW50LCBpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lLCBFdmVudFBoYXNlLlJlc3VtZSwgaW50ZXJhY3Rpb24uZWxlbWVudClcblxuICAgICAgICBpbnRlcmFjdGlvbi5fZmlyZUV2ZW50KHJlc3VtZUV2ZW50KVxuXG4gICAgICAgIHV0aWxzLnBvaW50ZXIuY29weUNvb3JkcyhpbnRlcmFjdGlvbi5jb29yZHMucHJldiwgaW50ZXJhY3Rpb24uY29vcmRzLmN1cilcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgZWxlbWVudCA9IHV0aWxzLmRvbS5wYXJlbnROb2RlKGVsZW1lbnQpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlbGVhc2U8VCBleHRlbmRzIEludGVyYWN0LkFjdGlvbk5hbWU+ICh7IGludGVyYWN0aW9uLCBldmVudCwgbm9QcmVFbmQgfTogSW50ZXJhY3QuU2lnbmFsQXJnLCBzY29wZTogU2NvcGUpIHtcbiAgY29uc3Qgc3RhdGUgPSBpbnRlcmFjdGlvbi5pbmVydGlhXG5cbiAgaWYgKCFpbnRlcmFjdGlvbi5pbnRlcmFjdGluZygpIHx8XG4gICAgKGludGVyYWN0aW9uLnNpbXVsYXRpb24gJiYgaW50ZXJhY3Rpb24uc2ltdWxhdGlvbi5hY3RpdmUpIHx8XG4gIG5vUHJlRW5kKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zKGludGVyYWN0aW9uKVxuXG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gIGNvbnN0IHsgY2xpZW50OiB2ZWxvY2l0eUNsaWVudCB9ID0gaW50ZXJhY3Rpb24uY29vcmRzLnZlbG9jaXR5XG4gIGNvbnN0IHBvaW50ZXJTcGVlZCA9IHV0aWxzLmh5cG90KHZlbG9jaXR5Q2xpZW50LngsIHZlbG9jaXR5Q2xpZW50LnkpXG5cbiAgbGV0IHNtb290aEVuZCA9IGZhbHNlXG4gIGxldCBtb2RpZmllclJlc3VsdDogUmV0dXJuVHlwZTx0eXBlb2YgbW9kaWZpZXJzLnNldEFsbD5cblxuICAvLyBjaGVjayBpZiBpbmVydGlhIHNob3VsZCBiZSBzdGFydGVkXG4gIGNvbnN0IGluZXJ0aWFQb3NzaWJsZSA9IChvcHRpb25zICYmIG9wdGlvbnMuZW5hYmxlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSAhPT0gJ2dlc3R1cmUnICYmXG4gICAgICAgICAgICAgICAgICAgICBldmVudCAhPT0gc3RhdGUuc3RhcnRFdmVudClcblxuICBjb25zdCBpbmVydGlhID0gKGluZXJ0aWFQb3NzaWJsZSAmJlxuICAgIChub3cgLSBpbnRlcmFjdGlvbi5jb29yZHMuY3VyLnRpbWVTdGFtcCkgPCA1MCAmJlxuICAgIHBvaW50ZXJTcGVlZCA+IG9wdGlvbnMubWluU3BlZWQgJiZcbiAgICBwb2ludGVyU3BlZWQgPiBvcHRpb25zLmVuZFNwZWVkKVxuXG4gIGNvbnN0IG1vZGlmaWVyQXJnID0ge1xuICAgIGludGVyYWN0aW9uLFxuICAgIHBhZ2VDb29yZHM6IHV0aWxzLmV4dGVuZCh7fSwgaW50ZXJhY3Rpb24uY29vcmRzLmN1ci5wYWdlKSxcbiAgICBzdGF0ZXM6IGluZXJ0aWFQb3NzaWJsZSAmJiBpbnRlcmFjdGlvbi5tb2RpZmllcnMuc3RhdGVzLm1hcChcbiAgICAgIChtb2RpZmllclN0YXR1cykgPT4gdXRpbHMuZXh0ZW5kKHt9LCBtb2RpZmllclN0YXR1cylcbiAgICApLFxuICAgIHByZUVuZDogdHJ1ZSxcbiAgICByZXF1aXJlRW5kT25seTogdHJ1ZSxcbiAgfVxuXG4gIC8vIHNtb290aEVuZFxuICBpZiAoaW5lcnRpYVBvc3NpYmxlICYmICFpbmVydGlhKSB7XG4gICAgbW9kaWZpZXJSZXN1bHQgPSBtb2RpZmllcnMuc2V0QWxsKG1vZGlmaWVyQXJnKVxuXG4gICAgaWYgKG1vZGlmaWVyUmVzdWx0LmNoYW5nZWQpIHtcbiAgICAgIHNtb290aEVuZCA9IHRydWVcbiAgICB9XG4gIH1cblxuICBpZiAoIShpbmVydGlhIHx8IHNtb290aEVuZCkpIHsgcmV0dXJuIG51bGwgfVxuXG4gIHV0aWxzLnBvaW50ZXIuY29weUNvb3JkcyhzdGF0ZS51cENvb3JkcywgaW50ZXJhY3Rpb24uY29vcmRzLmN1cilcblxuICBpbnRlcmFjdGlvbi5wb2ludGVyc1swXS5wb2ludGVyID0gc3RhdGUuc3RhcnRFdmVudCA9IG5ldyBzY29wZS5JbnRlcmFjdEV2ZW50KFxuICAgIGludGVyYWN0aW9uLFxuICAgIGV2ZW50LFxuICAgIC8vIEZJWE1FIGFkZCBwcm9wZXIgdHlwaW5nIEFjdGlvbi5uYW1lXG4gICAgaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSBhcyBULFxuICAgIEV2ZW50UGhhc2UuSW5lcnRpYVN0YXJ0LFxuICAgIGludGVyYWN0aW9uLmVsZW1lbnQsXG4gIClcblxuICBzdGF0ZS50MCA9IG5vd1xuXG4gIHN0YXRlLmFjdGl2ZSA9IHRydWVcbiAgc3RhdGUuYWxsb3dSZXN1bWUgPSBvcHRpb25zLmFsbG93UmVzdW1lXG4gIGludGVyYWN0aW9uLnNpbXVsYXRpb24gPSBzdGF0ZVxuXG4gIGludGVyYWN0aW9uLnRhcmdldC5maXJlKHN0YXRlLnN0YXJ0RXZlbnQpXG5cbiAgaWYgKGluZXJ0aWEpIHtcbiAgICBzdGF0ZS52eDAgPSBpbnRlcmFjdGlvbi5jb29yZHMudmVsb2NpdHkuY2xpZW50LnhcbiAgICBzdGF0ZS52eTAgPSBpbnRlcmFjdGlvbi5jb29yZHMudmVsb2NpdHkuY2xpZW50LnlcbiAgICBzdGF0ZS52MCA9IHBvaW50ZXJTcGVlZFxuXG4gICAgY2FsY0luZXJ0aWEoaW50ZXJhY3Rpb24sIHN0YXRlKVxuXG4gICAgdXRpbHMuZXh0ZW5kKG1vZGlmaWVyQXJnLnBhZ2VDb29yZHMsIGludGVyYWN0aW9uLmNvb3Jkcy5jdXIucGFnZSlcblxuICAgIG1vZGlmaWVyQXJnLnBhZ2VDb29yZHMueCArPSBzdGF0ZS54ZVxuICAgIG1vZGlmaWVyQXJnLnBhZ2VDb29yZHMueSArPSBzdGF0ZS55ZVxuXG4gICAgbW9kaWZpZXJSZXN1bHQgPSBtb2RpZmllcnMuc2V0QWxsKG1vZGlmaWVyQXJnKVxuXG4gICAgc3RhdGUubW9kaWZpZWRYZSArPSBtb2RpZmllclJlc3VsdC5kZWx0YS54XG4gICAgc3RhdGUubW9kaWZpZWRZZSArPSBtb2RpZmllclJlc3VsdC5kZWx0YS55XG5cbiAgICBzdGF0ZS5pID0gcmFmLnJlcXVlc3QoKCkgPT4gaW5lcnRpYVRpY2soaW50ZXJhY3Rpb24pKVxuICB9XG4gIGVsc2Uge1xuICAgIHN0YXRlLnNtb290aEVuZCA9IHRydWVcbiAgICBzdGF0ZS54ZSA9IG1vZGlmaWVyUmVzdWx0LmRlbHRhLnhcbiAgICBzdGF0ZS55ZSA9IG1vZGlmaWVyUmVzdWx0LmRlbHRhLnlcblxuICAgIHN0YXRlLnN4ID0gc3RhdGUuc3kgPSAwXG5cbiAgICBzdGF0ZS5pID0gcmFmLnJlcXVlc3QoKCkgPT4gc21vdGhFbmRUaWNrKGludGVyYWN0aW9uKSlcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBzdG9wICh7IGludGVyYWN0aW9uIH06IEludGVyYWN0LlNpZ25hbEFyZykge1xuICBjb25zdCBzdGF0ZSA9IGludGVyYWN0aW9uLmluZXJ0aWFcbiAgaWYgKHN0YXRlLmFjdGl2ZSkge1xuICAgIHJhZi5jYW5jZWwoc3RhdGUuaSlcbiAgICBzdGF0ZS5hY3RpdmUgPSBmYWxzZVxuICAgIGludGVyYWN0aW9uLnNpbXVsYXRpb24gPSBudWxsXG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsY0luZXJ0aWEgKGludGVyYWN0aW9uOiBJbnRlcmFjdC5JbnRlcmFjdGlvbiwgc3RhdGUpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbnMoaW50ZXJhY3Rpb24pXG4gIGNvbnN0IGxhbWJkYSA9IG9wdGlvbnMucmVzaXN0YW5jZVxuICBjb25zdCBpbmVydGlhRHVyID0gLU1hdGgubG9nKG9wdGlvbnMuZW5kU3BlZWQgLyBzdGF0ZS52MCkgLyBsYW1iZGFcblxuICBzdGF0ZS54MCA9IGludGVyYWN0aW9uLnByZXZFdmVudC5wYWdlLnhcbiAgc3RhdGUueTAgPSBpbnRlcmFjdGlvbi5wcmV2RXZlbnQucGFnZS55XG4gIHN0YXRlLnQwID0gc3RhdGUuc3RhcnRFdmVudC50aW1lU3RhbXAgLyAxMDAwXG4gIHN0YXRlLnN4ID0gc3RhdGUuc3kgPSAwXG5cbiAgc3RhdGUubW9kaWZpZWRYZSA9IHN0YXRlLnhlID0gKHN0YXRlLnZ4MCAtIGluZXJ0aWFEdXIpIC8gbGFtYmRhXG4gIHN0YXRlLm1vZGlmaWVkWWUgPSBzdGF0ZS55ZSA9IChzdGF0ZS52eTAgLSBpbmVydGlhRHVyKSAvIGxhbWJkYVxuICBzdGF0ZS50ZSA9IGluZXJ0aWFEdXJcblxuICBzdGF0ZS5sYW1iZGFfdjAgPSBsYW1iZGEgLyBzdGF0ZS52MFxuICBzdGF0ZS5vbmVfdmVfdjAgPSAxIC0gb3B0aW9ucy5lbmRTcGVlZCAvIHN0YXRlLnYwXG59XG5cbmZ1bmN0aW9uIGluZXJ0aWFUaWNrIChpbnRlcmFjdGlvbjogSW50ZXJhY3QuSW50ZXJhY3Rpb24pIHtcbiAgdXBkYXRlSW5lcnRpYUNvb3JkcyhpbnRlcmFjdGlvbilcbiAgdXRpbHMucG9pbnRlci5zZXRDb29yZERlbHRhcyhpbnRlcmFjdGlvbi5jb29yZHMuZGVsdGEsIGludGVyYWN0aW9uLmNvb3Jkcy5wcmV2LCBpbnRlcmFjdGlvbi5jb29yZHMuY3VyKVxuICB1dGlscy5wb2ludGVyLnNldENvb3JkVmVsb2NpdHkoaW50ZXJhY3Rpb24uY29vcmRzLnZlbG9jaXR5LCBpbnRlcmFjdGlvbi5jb29yZHMuZGVsdGEpXG5cbiAgY29uc3Qgc3RhdGUgPSBpbnRlcmFjdGlvbi5pbmVydGlhXG4gIGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zKGludGVyYWN0aW9uKVxuICBjb25zdCBsYW1iZGEgPSBvcHRpb25zLnJlc2lzdGFuY2VcbiAgY29uc3QgdCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCAtIHN0YXRlLnQwXG5cbiAgaWYgKHQgPCBzdGF0ZS50ZSkge1xuICAgIGNvbnN0IHByb2dyZXNzID0gIDEgLSAoTWF0aC5leHAoLWxhbWJkYSAqIHQpIC0gc3RhdGUubGFtYmRhX3YwKSAvIHN0YXRlLm9uZV92ZV92MFxuXG4gICAgaWYgKHN0YXRlLm1vZGlmaWVkWGUgPT09IHN0YXRlLnhlICYmIHN0YXRlLm1vZGlmaWVkWWUgPT09IHN0YXRlLnllKSB7XG4gICAgICBzdGF0ZS5zeCA9IHN0YXRlLnhlICogcHJvZ3Jlc3NcbiAgICAgIHN0YXRlLnN5ID0gc3RhdGUueWUgKiBwcm9ncmVzc1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IHF1YWRQb2ludCA9IHV0aWxzLmdldFF1YWRyYXRpY0N1cnZlUG9pbnQoXG4gICAgICAgIDAsIDAsXG4gICAgICAgIHN0YXRlLnhlLCBzdGF0ZS55ZSxcbiAgICAgICAgc3RhdGUubW9kaWZpZWRYZSwgc3RhdGUubW9kaWZpZWRZZSxcbiAgICAgICAgcHJvZ3Jlc3MpXG5cbiAgICAgIHN0YXRlLnN4ID0gcXVhZFBvaW50LnhcbiAgICAgIHN0YXRlLnN5ID0gcXVhZFBvaW50LnlcbiAgICB9XG5cbiAgICBpbnRlcmFjdGlvbi5tb3ZlKClcblxuICAgIHN0YXRlLmkgPSByYWYucmVxdWVzdCgoKSA9PiBpbmVydGlhVGljayhpbnRlcmFjdGlvbikpXG4gIH1cbiAgZWxzZSB7XG4gICAgc3RhdGUuc3ggPSBzdGF0ZS5tb2RpZmllZFhlXG4gICAgc3RhdGUuc3kgPSBzdGF0ZS5tb2RpZmllZFllXG5cbiAgICBpbnRlcmFjdGlvbi5tb3ZlKClcbiAgICBpbnRlcmFjdGlvbi5lbmQoc3RhdGUuc3RhcnRFdmVudClcbiAgICBzdGF0ZS5hY3RpdmUgPSBmYWxzZVxuICAgIGludGVyYWN0aW9uLnNpbXVsYXRpb24gPSBudWxsXG4gIH1cblxuICB1dGlscy5wb2ludGVyLmNvcHlDb29yZHMoaW50ZXJhY3Rpb24uY29vcmRzLnByZXYsIGludGVyYWN0aW9uLmNvb3Jkcy5jdXIpXG59XG5cbmZ1bmN0aW9uIHNtb3RoRW5kVGljayAoaW50ZXJhY3Rpb246IEludGVyYWN0LkludGVyYWN0aW9uKSB7XG4gIHVwZGF0ZUluZXJ0aWFDb29yZHMoaW50ZXJhY3Rpb24pXG5cbiAgY29uc3Qgc3RhdGUgPSBpbnRlcmFjdGlvbi5pbmVydGlhXG4gIGNvbnN0IHQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHN0YXRlLnQwXG4gIGNvbnN0IHsgc21vb3RoRW5kRHVyYXRpb246IGR1cmF0aW9uIH0gPSBnZXRPcHRpb25zKGludGVyYWN0aW9uKVxuXG4gIGlmICh0IDwgZHVyYXRpb24pIHtcbiAgICBzdGF0ZS5zeCA9IHV0aWxzLmVhc2VPdXRRdWFkKHQsIDAsIHN0YXRlLnhlLCBkdXJhdGlvbilcbiAgICBzdGF0ZS5zeSA9IHV0aWxzLmVhc2VPdXRRdWFkKHQsIDAsIHN0YXRlLnllLCBkdXJhdGlvbilcblxuICAgIGludGVyYWN0aW9uLm1vdmUoKVxuXG4gICAgc3RhdGUuaSA9IHJhZi5yZXF1ZXN0KCgpID0+IHNtb3RoRW5kVGljayhpbnRlcmFjdGlvbikpXG4gIH1cbiAgZWxzZSB7XG4gICAgc3RhdGUuc3ggPSBzdGF0ZS54ZVxuICAgIHN0YXRlLnN5ID0gc3RhdGUueWVcblxuICAgIGludGVyYWN0aW9uLm1vdmUoKVxuICAgIGludGVyYWN0aW9uLmVuZChzdGF0ZS5zdGFydEV2ZW50KVxuXG4gICAgc3RhdGUuc21vb3RoRW5kID1cbiAgICAgIHN0YXRlLmFjdGl2ZSA9IGZhbHNlXG4gICAgaW50ZXJhY3Rpb24uc2ltdWxhdGlvbiA9IG51bGxcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVJbmVydGlhQ29vcmRzIChpbnRlcmFjdGlvbjogSW50ZXJhY3QuSW50ZXJhY3Rpb24pIHtcbiAgY29uc3Qgc3RhdGUgPSBpbnRlcmFjdGlvbi5pbmVydGlhXG5cbiAgLy8gcmV0dXJuIGlmIGluZXJ0aWEgaXNuJ3QgcnVubmluZ1xuICBpZiAoIXN0YXRlLmFjdGl2ZSkgeyByZXR1cm4gfVxuXG4gIGNvbnN0IHBhZ2VVcCAgID0gc3RhdGUudXBDb29yZHMucGFnZVxuICBjb25zdCBjbGllbnRVcCA9IHN0YXRlLnVwQ29vcmRzLmNsaWVudFxuXG4gIHV0aWxzLnBvaW50ZXIuc2V0Q29vcmRzKGludGVyYWN0aW9uLmNvb3Jkcy5jdXIsIFsge1xuICAgIHBhZ2VYICA6IHBhZ2VVcC54ICAgKyBzdGF0ZS5zeCxcbiAgICBwYWdlWSAgOiBwYWdlVXAueSAgICsgc3RhdGUuc3ksXG4gICAgY2xpZW50WDogY2xpZW50VXAueCArIHN0YXRlLnN4LFxuICAgIGNsaWVudFk6IGNsaWVudFVwLnkgKyBzdGF0ZS5zeSxcbiAgfSBdKVxufVxuXG5mdW5jdGlvbiBnZXRPcHRpb25zICh7IHRhcmdldCwgcHJlcGFyZWQgfSkge1xuICByZXR1cm4gdGFyZ2V0ICYmIHRhcmdldC5vcHRpb25zICYmIHByZXBhcmVkLm5hbWUgJiYgdGFyZ2V0Lm9wdGlvbnNbcHJlcGFyZWQubmFtZV0uaW5lcnRpYVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluc3RhbGwsXG4gIGNhbGNJbmVydGlhLFxuICBpbmVydGlhVGljayxcbiAgc21vdGhFbmRUaWNrLFxuICB1cGRhdGVJbmVydGlhQ29vcmRzLFxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFDM0QsT0FBTyxTQUFTLE1BQU0sNEJBQTRCLENBQUE7QUFDbEQsT0FBTyxLQUFLLEtBQUssTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQyxPQUFPLEdBQUcsTUFBTSx1QkFBdUIsQ0FBQTtBQStCdEMsVUFBa0IsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQ3JDLFVBQWtCLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQTtBQUVqRCxTQUFTLE9BQU8sQ0FBRSxLQUFZO0lBQzVCLE1BQU0sRUFDSixZQUFZLEVBQ1osUUFBUSxHQUNULEdBQUcsS0FBSyxDQUFBO0lBRVQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFO1FBQ2pELFdBQVcsQ0FBQyxPQUFPLEdBQUc7WUFDcEIsTUFBTSxFQUFPLEtBQUs7WUFDbEIsU0FBUyxFQUFJLEtBQUs7WUFDbEIsV0FBVyxFQUFFLEtBQUs7WUFFbEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsUUFBUSxFQUFJLEVBQUU7WUFFZCxFQUFFLEVBQUUsQ0FBQztZQUNMLEVBQUUsRUFBRSxDQUFDO1lBQ0wsRUFBRSxFQUFFLENBQUM7WUFDTCxFQUFFLEVBQUUsQ0FBQztZQUVMLEVBQUUsRUFBRSxDQUFDO1lBQ0wsR0FBRyxFQUFFLENBQUM7WUFDTixHQUFHLEVBQUUsQ0FBQztZQUNOLFFBQVEsRUFBRSxDQUFDO1lBRVgsU0FBUyxFQUFFLENBQUM7WUFDWixTQUFTLEVBQUUsQ0FBQztZQUNaLENBQUMsRUFBSSxJQUFJO1NBQ1YsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUYsNkJBQTZCO0lBQzdCLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLG1CQUFt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QUMzRixDQUFDO0FBRUQsZUFBZTtJQUNiLE9BQU87SUFDUCxXQUFXO0lBQ1gsV0FBVztJQUNYLFlBQVk7SUFDWixtQkFBbUI7Q0FDcEIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50UGhhc2UgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0RXZlbnQnXG5pbXBvcnQgbW9kaWZpZXJzIGZyb20gJ0BpbnRlcmFjdGpzL21vZGlmaWVycy9iYXNlJ1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMnXG5pbXBvcnQgcmFmIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL3JhZidcblxudHlwZSBTY29wZSA9IGltcG9ydCAoJ0BpbnRlcmFjdGpzL2NvcmUvc2NvcGUnKS5TY29wZVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdEV2ZW50JyB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3dcbiAgZW51bSBFdmVudFBoYXNlIHtcbiAgICBSZXN1bWUgPSAncmVzdW1lJyxcbiAgICBJbmVydGlhU3RhcnQgPSAnaW5lcnRpYXN0YXJ0JyxcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbicge1xuICBpbnRlcmZhY2UgSW50ZXJhY3Rpb24ge1xuICAgIGluZXJ0aWE/OiBhbnlcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9kZWZhdWx0T3B0aW9ucycge1xuICBpbnRlcmZhY2UgUGVyQWN0aW9uRGVmYXVsdHMge1xuICAgIGluZXJ0aWE/OiB7XG4gICAgICBlbmFibGVkPzogYm9vbGVhbixcbiAgICAgIHJlc2lzdGFuY2U/OiBudW1iZXIsICAgICAgICAvLyB0aGUgbGFtYmRhIGluIGV4cG9uZW50aWFsIGRlY2F5XG4gICAgICBtaW5TcGVlZD86IG51bWJlciwgICAgICAgICAgLy8gdGFyZ2V0IHNwZWVkIG11c3QgYmUgYWJvdmUgdGhpcyBmb3IgaW5lcnRpYSB0byBzdGFydFxuICAgICAgZW5kU3BlZWQ/OiBudW1iZXIsICAgICAgICAgIC8vIHRoZSBzcGVlZCBhdCB3aGljaCBpbmVydGlhIGlzIHNsb3cgZW5vdWdoIHRvIHN0b3BcbiAgICAgIGFsbG93UmVzdW1lPzogdHJ1ZSwgICAgICAgICAvLyBhbGxvdyByZXN1bWluZyBhbiBhY3Rpb24gaW4gaW5lcnRpYSBwaGFzZVxuICAgICAgc21vb3RoRW5kRHVyYXRpb24/OiBudW1iZXIsIC8vIGFuaW1hdGUgdG8gc25hcC9yZXN0cmljdCBlbmRPbmx5IGlmIHRoZXJlJ3Mgbm8gaW5lcnRpYVxuICAgIH0gfCBib29sZWFuIC8vIEZJWE1FXG4gIH1cbn1cblxuKEV2ZW50UGhhc2UgYXMgYW55KS5SZXN1bWUgPSAncmVzdW1lJztcbihFdmVudFBoYXNlIGFzIGFueSkuSW5lcnRpYVN0YXJ0ID0gJ2luZXJ0aWFzdGFydCdcblxuZnVuY3Rpb24gaW5zdGFsbCAoc2NvcGU6IFNjb3BlKSB7XG4gIGNvbnN0IHtcbiAgICBpbnRlcmFjdGlvbnMsXG4gICAgZGVmYXVsdHMsXG4gIH0gPSBzY29wZVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCduZXcnLCAoeyBpbnRlcmFjdGlvbiB9KSA9PiB7XG4gICAgaW50ZXJhY3Rpb24uaW5lcnRpYSA9IHtcbiAgICAgIGFjdGl2ZSAgICAgOiBmYWxzZSxcbiAgICAgIHNtb290aEVuZCAgOiBmYWxzZSxcbiAgICAgIGFsbG93UmVzdW1lOiBmYWxzZSxcblxuICAgICAgc3RhcnRFdmVudDogbnVsbCxcbiAgICAgIHVwQ29vcmRzICA6IHt9LFxuXG4gICAgICB4ZTogMCxcbiAgICAgIHllOiAwLFxuICAgICAgc3g6IDAsXG4gICAgICBzeTogMCxcblxuICAgICAgdDA6IDAsXG4gICAgICB2eDA6IDAsXG4gICAgICB2eXM6IDAsXG4gICAgICBkdXJhdGlvbjogMCxcblxuICAgICAgbGFtYmRhX3YwOiAwLFxuICAgICAgb25lX3ZlX3YwOiAwLFxuICAgICAgaSAgOiBudWxsLFxuICAgIH1cbiAgfSlcblxuICAvLyBGSVhNRSBwcm9wZXIgc2lnbmFsIHR5cGluZ1xuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYmVmb3JlLWFjdGlvbi1lbmQnLCAoYXJnKSA9PiByZWxlYXNlKGFyZyBhcyBhbnksIHNjb3BlKSlcbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2Rvd24nLCAoYXJnKSA9PiByZXN1bWUoYXJnIGFzIGFueSwgc2NvcGUpKVxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignc3RvcCcsIChhcmcpID0+IHN0b3AoYXJnIGFzIGFueSkpXG5cbiAgZGVmYXVsdHMucGVyQWN0aW9uLmluZXJ0aWEgPSB7XG4gICAgZW5hYmxlZCAgICAgICAgICA6IGZhbHNlLFxuICAgIHJlc2lzdGFuY2UgICAgICAgOiAxMCwgICAgLy8gdGhlIGxhbWJkYSBpbiBleHBvbmVudGlhbCBkZWNheVxuICAgIG1pblNwZWVkICAgICAgICAgOiAxMDAsICAgLy8gdGFyZ2V0IHNwZWVkIG11c3QgYmUgYWJvdmUgdGhpcyBmb3IgaW5lcnRpYSB0byBzdGFydFxuICAgIGVuZFNwZWVkICAgICAgICAgOiAxMCwgICAgLy8gdGhlIHNwZWVkIGF0IHdoaWNoIGluZXJ0aWEgaXMgc2xvdyBlbm91Z2ggdG8gc3RvcFxuICAgIGFsbG93UmVzdW1lICAgICAgOiB0cnVlLCAgLy8gYWxsb3cgcmVzdW1pbmcgYW4gYWN0aW9uIGluIGluZXJ0aWEgcGhhc2VcbiAgICBzbW9vdGhFbmREdXJhdGlvbjogMzAwLCAgIC8vIGFuaW1hdGUgdG8gc25hcC9yZXN0cmljdCBlbmRPbmx5IGlmIHRoZXJlJ3Mgbm8gaW5lcnRpYVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3VtZSAoeyBpbnRlcmFjdGlvbiwgZXZlbnQsIHBvaW50ZXIsIGV2ZW50VGFyZ2V0IH06IEludGVyYWN0LlNpZ25hbEFyZywgc2NvcGU6IFNjb3BlKSB7XG4gIGNvbnN0IHN0YXRlID0gaW50ZXJhY3Rpb24uaW5lcnRpYVxuXG4gIC8vIENoZWNrIGlmIHRoZSBkb3duIGV2ZW50IGhpdHMgdGhlIGN1cnJlbnQgaW5lcnRpYSB0YXJnZXRcbiAgaWYgKHN0YXRlLmFjdGl2ZSkge1xuICAgIGxldCBlbGVtZW50ID0gZXZlbnRUYXJnZXRcblxuICAgIC8vIGNsaW1iIHVwIHRoZSBET00gdHJlZSBmcm9tIHRoZSBldmVudCB0YXJnZXRcbiAgICB3aGlsZSAodXRpbHMuaXMuZWxlbWVudChlbGVtZW50KSkge1xuICAgICAgLy8gaWYgaW50ZXJhY3Rpb24gZWxlbWVudCBpcyB0aGUgY3VycmVudCBpbmVydGlhIHRhcmdldCBlbGVtZW50XG4gICAgICBpZiAoZWxlbWVudCA9PT0gaW50ZXJhY3Rpb24uZWxlbWVudCkge1xuICAgICAgICAvLyBzdG9wIGluZXJ0aWFcbiAgICAgICAgcmFmLmNhbmNlbChzdGF0ZS5pKVxuICAgICAgICBzdGF0ZS5hY3RpdmUgPSBmYWxzZVxuICAgICAgICBpbnRlcmFjdGlvbi5zaW11bGF0aW9uID0gbnVsbFxuXG4gICAgICAgIC8vIHVwZGF0ZSBwb2ludGVycyB0byB0aGUgZG93biBldmVudCdzIGNvb3JkaW5hdGVzXG4gICAgICAgIGludGVyYWN0aW9uLnVwZGF0ZVBvaW50ZXIocG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0LCB0cnVlKVxuICAgICAgICB1dGlscy5wb2ludGVyLnNldENvb3JkcyhcbiAgICAgICAgICBpbnRlcmFjdGlvbi5jb29yZHMuY3VyLFxuICAgICAgICAgIGludGVyYWN0aW9uLnBvaW50ZXJzLm1hcCgocCkgPT4gcC5wb2ludGVyKVxuICAgICAgICApXG5cbiAgICAgICAgLy8gZmlyZSBhcHByb3ByaWF0ZSBzaWduYWxzXG4gICAgICAgIGNvbnN0IHNpZ25hbEFyZyA9IHtcbiAgICAgICAgICBpbnRlcmFjdGlvbixcbiAgICAgICAgfVxuXG4gICAgICAgIHNjb3BlLmludGVyYWN0aW9ucy5zaWduYWxzLmZpcmUoJ2FjdGlvbi1yZXN1bWUnLCBzaWduYWxBcmcpXG5cbiAgICAgICAgLy8gZmlyZSBhIHJldW1lIGV2ZW50XG4gICAgICAgIGNvbnN0IHJlc3VtZUV2ZW50ID0gbmV3IHNjb3BlLkludGVyYWN0RXZlbnQoXG4gICAgICAgICAgaW50ZXJhY3Rpb24sIGV2ZW50LCBpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lLCBFdmVudFBoYXNlLlJlc3VtZSwgaW50ZXJhY3Rpb24uZWxlbWVudClcblxuICAgICAgICBpbnRlcmFjdGlvbi5fZmlyZUV2ZW50KHJlc3VtZUV2ZW50KVxuXG4gICAgICAgIHV0aWxzLnBvaW50ZXIuY29weUNvb3JkcyhpbnRlcmFjdGlvbi5jb29yZHMucHJldiwgaW50ZXJhY3Rpb24uY29vcmRzLmN1cilcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgZWxlbWVudCA9IHV0aWxzLmRvbS5wYXJlbnROb2RlKGVsZW1lbnQpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlbGVhc2U8VCBleHRlbmRzIEludGVyYWN0LkFjdGlvbk5hbWU+ICh7IGludGVyYWN0aW9uLCBldmVudCwgbm9QcmVFbmQgfTogSW50ZXJhY3QuU2lnbmFsQXJnLCBzY29wZTogU2NvcGUpIHtcbiAgY29uc3Qgc3RhdGUgPSBpbnRlcmFjdGlvbi5pbmVydGlhXG5cbiAgaWYgKCFpbnRlcmFjdGlvbi5pbnRlcmFjdGluZygpIHx8XG4gICAgKGludGVyYWN0aW9uLnNpbXVsYXRpb24gJiYgaW50ZXJhY3Rpb24uc2ltdWxhdGlvbi5hY3RpdmUpIHx8XG4gIG5vUHJlRW5kKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zKGludGVyYWN0aW9uKVxuXG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gIGNvbnN0IHsgY2xpZW50OiB2ZWxvY2l0eUNsaWVudCB9ID0gaW50ZXJhY3Rpb24uY29vcmRzLnZlbG9jaXR5XG4gIGNvbnN0IHBvaW50ZXJTcGVlZCA9IHV0aWxzLmh5cG90KHZlbG9jaXR5Q2xpZW50LngsIHZlbG9jaXR5Q2xpZW50LnkpXG5cbiAgbGV0IHNtb290aEVuZCA9IGZhbHNlXG4gIGxldCBtb2RpZmllclJlc3VsdDogUmV0dXJuVHlwZTx0eXBlb2YgbW9kaWZpZXJzLnNldEFsbD5cblxuICAvLyBjaGVjayBpZiBpbmVydGlhIHNob3VsZCBiZSBzdGFydGVkXG4gIGNvbnN0IGluZXJ0aWFQb3NzaWJsZSA9IChvcHRpb25zICYmIG9wdGlvbnMuZW5hYmxlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSAhPT0gJ2dlc3R1cmUnICYmXG4gICAgICAgICAgICAgICAgICAgICBldmVudCAhPT0gc3RhdGUuc3RhcnRFdmVudClcblxuICBjb25zdCBpbmVydGlhID0gKGluZXJ0aWFQb3NzaWJsZSAmJlxuICAgIChub3cgLSBpbnRlcmFjdGlvbi5jb29yZHMuY3VyLnRpbWVTdGFtcCkgPCA1MCAmJlxuICAgIHBvaW50ZXJTcGVlZCA+IG9wdGlvbnMubWluU3BlZWQgJiZcbiAgICBwb2ludGVyU3BlZWQgPiBvcHRpb25zLmVuZFNwZWVkKVxuXG4gIGNvbnN0IG1vZGlmaWVyQXJnID0ge1xuICAgIGludGVyYWN0aW9uLFxuICAgIHBhZ2VDb29yZHM6IHV0aWxzLmV4dGVuZCh7fSwgaW50ZXJhY3Rpb24uY29vcmRzLmN1ci5wYWdlKSxcbiAgICBzdGF0ZXM6IGluZXJ0aWFQb3NzaWJsZSAmJiBpbnRlcmFjdGlvbi5tb2RpZmllcnMuc3RhdGVzLm1hcChcbiAgICAgIChtb2RpZmllclN0YXR1cykgPT4gdXRpbHMuZXh0ZW5kKHt9LCBtb2RpZmllclN0YXR1cylcbiAgICApLFxuICAgIHByZUVuZDogdHJ1ZSxcbiAgICByZXF1aXJlRW5kT25seTogdHJ1ZSxcbiAgfVxuXG4gIC8vIHNtb290aEVuZFxuICBpZiAoaW5lcnRpYVBvc3NpYmxlICYmICFpbmVydGlhKSB7XG4gICAgbW9kaWZpZXJSZXN1bHQgPSBtb2RpZmllcnMuc2V0QWxsKG1vZGlmaWVyQXJnKVxuXG4gICAgaWYgKG1vZGlmaWVyUmVzdWx0LmNoYW5nZWQpIHtcbiAgICAgIHNtb290aEVuZCA9IHRydWVcbiAgICB9XG4gIH1cblxuICBpZiAoIShpbmVydGlhIHx8IHNtb290aEVuZCkpIHsgcmV0dXJuIG51bGwgfVxuXG4gIHV0aWxzLnBvaW50ZXIuY29weUNvb3JkcyhzdGF0ZS51cENvb3JkcywgaW50ZXJhY3Rpb24uY29vcmRzLmN1cilcblxuICBpbnRlcmFjdGlvbi5wb2ludGVyc1swXS5wb2ludGVyID0gc3RhdGUuc3RhcnRFdmVudCA9IG5ldyBzY29wZS5JbnRlcmFjdEV2ZW50KFxuICAgIGludGVyYWN0aW9uLFxuICAgIGV2ZW50LFxuICAgIC8vIEZJWE1FIGFkZCBwcm9wZXIgdHlwaW5nIEFjdGlvbi5uYW1lXG4gICAgaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSBhcyBULFxuICAgIEV2ZW50UGhhc2UuSW5lcnRpYVN0YXJ0LFxuICAgIGludGVyYWN0aW9uLmVsZW1lbnQsXG4gIClcblxuICBzdGF0ZS50MCA9IG5vd1xuXG4gIHN0YXRlLmFjdGl2ZSA9IHRydWVcbiAgc3RhdGUuYWxsb3dSZXN1bWUgPSBvcHRpb25zLmFsbG93UmVzdW1lXG4gIGludGVyYWN0aW9uLnNpbXVsYXRpb24gPSBzdGF0ZVxuXG4gIGludGVyYWN0aW9uLnRhcmdldC5maXJlKHN0YXRlLnN0YXJ0RXZlbnQpXG5cbiAgaWYgKGluZXJ0aWEpIHtcbiAgICBzdGF0ZS52eDAgPSBpbnRlcmFjdGlvbi5jb29yZHMudmVsb2NpdHkuY2xpZW50LnhcbiAgICBzdGF0ZS52eTAgPSBpbnRlcmFjdGlvbi5jb29yZHMudmVsb2NpdHkuY2xpZW50LnlcbiAgICBzdGF0ZS52MCA9IHBvaW50ZXJTcGVlZFxuXG4gICAgY2FsY0luZXJ0aWEoaW50ZXJhY3Rpb24sIHN0YXRlKVxuXG4gICAgdXRpbHMuZXh0ZW5kKG1vZGlmaWVyQXJnLnBhZ2VDb29yZHMsIGludGVyYWN0aW9uLmNvb3Jkcy5jdXIucGFnZSlcblxuICAgIG1vZGlmaWVyQXJnLnBhZ2VDb29yZHMueCArPSBzdGF0ZS54ZVxuICAgIG1vZGlmaWVyQXJnLnBhZ2VDb29yZHMueSArPSBzdGF0ZS55ZVxuXG4gICAgbW9kaWZpZXJSZXN1bHQgPSBtb2RpZmllcnMuc2V0QWxsKG1vZGlmaWVyQXJnKVxuXG4gICAgc3RhdGUubW9kaWZpZWRYZSArPSBtb2RpZmllclJlc3VsdC5kZWx0YS54XG4gICAgc3RhdGUubW9kaWZpZWRZZSArPSBtb2RpZmllclJlc3VsdC5kZWx0YS55XG5cbiAgICBzdGF0ZS5pID0gcmFmLnJlcXVlc3QoKCkgPT4gaW5lcnRpYVRpY2soaW50ZXJhY3Rpb24pKVxuICB9XG4gIGVsc2Uge1xuICAgIHN0YXRlLnNtb290aEVuZCA9IHRydWVcbiAgICBzdGF0ZS54ZSA9IG1vZGlmaWVyUmVzdWx0LmRlbHRhLnhcbiAgICBzdGF0ZS55ZSA9IG1vZGlmaWVyUmVzdWx0LmRlbHRhLnlcblxuICAgIHN0YXRlLnN4ID0gc3RhdGUuc3kgPSAwXG5cbiAgICBzdGF0ZS5pID0gcmFmLnJlcXVlc3QoKCkgPT4gc21vdGhFbmRUaWNrKGludGVyYWN0aW9uKSlcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBzdG9wICh7IGludGVyYWN0aW9uIH06IEludGVyYWN0LlNpZ25hbEFyZykge1xuICBjb25zdCBzdGF0ZSA9IGludGVyYWN0aW9uLmluZXJ0aWFcbiAgaWYgKHN0YXRlLmFjdGl2ZSkge1xuICAgIHJhZi5jYW5jZWwoc3RhdGUuaSlcbiAgICBzdGF0ZS5hY3RpdmUgPSBmYWxzZVxuICAgIGludGVyYWN0aW9uLnNpbXVsYXRpb24gPSBudWxsXG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsY0luZXJ0aWEgKGludGVyYWN0aW9uOiBJbnRlcmFjdC5JbnRlcmFjdGlvbiwgc3RhdGUpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbnMoaW50ZXJhY3Rpb24pXG4gIGNvbnN0IGxhbWJkYSA9IG9wdGlvbnMucmVzaXN0YW5jZVxuICBjb25zdCBpbmVydGlhRHVyID0gLU1hdGgubG9nKG9wdGlvbnMuZW5kU3BlZWQgLyBzdGF0ZS52MCkgLyBsYW1iZGFcblxuICBzdGF0ZS54MCA9IGludGVyYWN0aW9uLnByZXZFdmVudC5wYWdlLnhcbiAgc3RhdGUueTAgPSBpbnRlcmFjdGlvbi5wcmV2RXZlbnQucGFnZS55XG4gIHN0YXRlLnQwID0gc3RhdGUuc3RhcnRFdmVudC50aW1lU3RhbXAgLyAxMDAwXG4gIHN0YXRlLnN4ID0gc3RhdGUuc3kgPSAwXG5cbiAgc3RhdGUubW9kaWZpZWRYZSA9IHN0YXRlLnhlID0gKHN0YXRlLnZ4MCAtIGluZXJ0aWFEdXIpIC8gbGFtYmRhXG4gIHN0YXRlLm1vZGlmaWVkWWUgPSBzdGF0ZS55ZSA9IChzdGF0ZS52eTAgLSBpbmVydGlhRHVyKSAvIGxhbWJkYVxuICBzdGF0ZS50ZSA9IGluZXJ0aWFEdXJcblxuICBzdGF0ZS5sYW1iZGFfdjAgPSBsYW1iZGEgLyBzdGF0ZS52MFxuICBzdGF0ZS5vbmVfdmVfdjAgPSAxIC0gb3B0aW9ucy5lbmRTcGVlZCAvIHN0YXRlLnYwXG59XG5cbmZ1bmN0aW9uIGluZXJ0aWFUaWNrIChpbnRlcmFjdGlvbjogSW50ZXJhY3QuSW50ZXJhY3Rpb24pIHtcbiAgdXBkYXRlSW5lcnRpYUNvb3JkcyhpbnRlcmFjdGlvbilcbiAgdXRpbHMucG9pbnRlci5zZXRDb29yZERlbHRhcyhpbnRlcmFjdGlvbi5jb29yZHMuZGVsdGEsIGludGVyYWN0aW9uLmNvb3Jkcy5wcmV2LCBpbnRlcmFjdGlvbi5jb29yZHMuY3VyKVxuICB1dGlscy5wb2ludGVyLnNldENvb3JkVmVsb2NpdHkoaW50ZXJhY3Rpb24uY29vcmRzLnZlbG9jaXR5LCBpbnRlcmFjdGlvbi5jb29yZHMuZGVsdGEpXG5cbiAgY29uc3Qgc3RhdGUgPSBpbnRlcmFjdGlvbi5pbmVydGlhXG4gIGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zKGludGVyYWN0aW9uKVxuICBjb25zdCBsYW1iZGEgPSBvcHRpb25zLnJlc2lzdGFuY2VcbiAgY29uc3QgdCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCAtIHN0YXRlLnQwXG5cbiAgaWYgKHQgPCBzdGF0ZS50ZSkge1xuICAgIGNvbnN0IHByb2dyZXNzID0gIDEgLSAoTWF0aC5leHAoLWxhbWJkYSAqIHQpIC0gc3RhdGUubGFtYmRhX3YwKSAvIHN0YXRlLm9uZV92ZV92MFxuXG4gICAgaWYgKHN0YXRlLm1vZGlmaWVkWGUgPT09IHN0YXRlLnhlICYmIHN0YXRlLm1vZGlmaWVkWWUgPT09IHN0YXRlLnllKSB7XG4gICAgICBzdGF0ZS5zeCA9IHN0YXRlLnhlICogcHJvZ3Jlc3NcbiAgICAgIHN0YXRlLnN5ID0gc3RhdGUueWUgKiBwcm9ncmVzc1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IHF1YWRQb2ludCA9IHV0aWxzLmdldFF1YWRyYXRpY0N1cnZlUG9pbnQoXG4gICAgICAgIDAsIDAsXG4gICAgICAgIHN0YXRlLnhlLCBzdGF0ZS55ZSxcbiAgICAgICAgc3RhdGUubW9kaWZpZWRYZSwgc3RhdGUubW9kaWZpZWRZZSxcbiAgICAgICAgcHJvZ3Jlc3MpXG5cbiAgICAgIHN0YXRlLnN4ID0gcXVhZFBvaW50LnhcbiAgICAgIHN0YXRlLnN5ID0gcXVhZFBvaW50LnlcbiAgICB9XG5cbiAgICBpbnRlcmFjdGlvbi5tb3ZlKClcblxuICAgIHN0YXRlLmkgPSByYWYucmVxdWVzdCgoKSA9PiBpbmVydGlhVGljayhpbnRlcmFjdGlvbikpXG4gIH1cbiAgZWxzZSB7XG4gICAgc3RhdGUuc3ggPSBzdGF0ZS5tb2RpZmllZFhlXG4gICAgc3RhdGUuc3kgPSBzdGF0ZS5tb2RpZmllZFllXG5cbiAgICBpbnRlcmFjdGlvbi5tb3ZlKClcbiAgICBpbnRlcmFjdGlvbi5lbmQoc3RhdGUuc3RhcnRFdmVudClcbiAgICBzdGF0ZS5hY3RpdmUgPSBmYWxzZVxuICAgIGludGVyYWN0aW9uLnNpbXVsYXRpb24gPSBudWxsXG4gIH1cblxuICB1dGlscy5wb2ludGVyLmNvcHlDb29yZHMoaW50ZXJhY3Rpb24uY29vcmRzLnByZXYsIGludGVyYWN0aW9uLmNvb3Jkcy5jdXIpXG59XG5cbmZ1bmN0aW9uIHNtb3RoRW5kVGljayAoaW50ZXJhY3Rpb246IEludGVyYWN0LkludGVyYWN0aW9uKSB7XG4gIHVwZGF0ZUluZXJ0aWFDb29yZHMoaW50ZXJhY3Rpb24pXG5cbiAgY29uc3Qgc3RhdGUgPSBpbnRlcmFjdGlvbi5pbmVydGlhXG4gIGNvbnN0IHQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHN0YXRlLnQwXG4gIGNvbnN0IHsgc21vb3RoRW5kRHVyYXRpb246IGR1cmF0aW9uIH0gPSBnZXRPcHRpb25zKGludGVyYWN0aW9uKVxuXG4gIGlmICh0IDwgZHVyYXRpb24pIHtcbiAgICBzdGF0ZS5zeCA9IHV0aWxzLmVhc2VPdXRRdWFkKHQsIDAsIHN0YXRlLnhlLCBkdXJhdGlvbilcbiAgICBzdGF0ZS5zeSA9IHV0aWxzLmVhc2VPdXRRdWFkKHQsIDAsIHN0YXRlLnllLCBkdXJhdGlvbilcblxuICAgIGludGVyYWN0aW9uLm1vdmUoKVxuXG4gICAgc3RhdGUuaSA9IHJhZi5yZXF1ZXN0KCgpID0+IHNtb3RoRW5kVGljayhpbnRlcmFjdGlvbikpXG4gIH1cbiAgZWxzZSB7XG4gICAgc3RhdGUuc3ggPSBzdGF0ZS54ZVxuICAgIHN0YXRlLnN5ID0gc3RhdGUueWVcblxuICAgIGludGVyYWN0aW9uLm1vdmUoKVxuICAgIGludGVyYWN0aW9uLmVuZChzdGF0ZS5zdGFydEV2ZW50KVxuXG4gICAgc3RhdGUuc21vb3RoRW5kID1cbiAgICAgIHN0YXRlLmFjdGl2ZSA9IGZhbHNlXG4gICAgaW50ZXJhY3Rpb24uc2ltdWxhdGlvbiA9IG51bGxcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVJbmVydGlhQ29vcmRzIChpbnRlcmFjdGlvbjogSW50ZXJhY3QuSW50ZXJhY3Rpb24pIHtcbiAgY29uc3Qgc3RhdGUgPSBpbnRlcmFjdGlvbi5pbmVydGlhXG5cbiAgLy8gcmV0dXJuIGlmIGluZXJ0aWEgaXNuJ3QgcnVubmluZ1xuICBpZiAoIXN0YXRlLmFjdGl2ZSkgeyByZXR1cm4gfVxuXG4gIGNvbnN0IHBhZ2VVcCAgID0gc3RhdGUudXBDb29yZHMucGFnZVxuICBjb25zdCBjbGllbnRVcCA9IHN0YXRlLnVwQ29vcmRzLmNsaWVudFxuXG4gIHV0aWxzLnBvaW50ZXIuc2V0Q29vcmRzKGludGVyYWN0aW9uLmNvb3Jkcy5jdXIsIFsge1xuICAgIHBhZ2VYICA6IHBhZ2VVcC54ICAgKyBzdGF0ZS5zeCxcbiAgICBwYWdlWSAgOiBwYWdlVXAueSAgICsgc3RhdGUuc3ksXG4gICAgY2xpZW50WDogY2xpZW50VXAueCArIHN0YXRlLnN4LFxuICAgIGNsaWVudFk6IGNsaWVudFVwLnkgKyBzdGF0ZS5zeSxcbiAgfSBdKVxufVxuXG5mdW5jdGlvbiBnZXRPcHRpb25zICh7IHRhcmdldCwgcHJlcGFyZWQgfSkge1xuICByZXR1cm4gdGFyZ2V0ICYmIHRhcmdldC5vcHRpb25zICYmIHByZXBhcmVkLm5hbWUgJiYgdGFyZ2V0Lm9wdGlvbnNbcHJlcGFyZWQubmFtZV0uaW5lcnRpYVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluc3RhbGwsXG4gIGNhbGNJbmVydGlhLFxuICBpbmVydGlhVGljayxcbiAgc21vdGhFbmRUaWNrLFxuICB1cGRhdGVJbmVydGlhQ29vcmRzLFxufVxuIl19 \ No newline at end of file diff --git a/packages/inertia/package.json b/packages/inertia/package.json index 45480dfd3..83e071e54 100644 --- a/packages/inertia/package.json +++ b/packages/inertia/package.json @@ -1,16 +1,16 @@ { "name": "@interactjs/inertia", - "version": "1.4.0-alpha.27+sha.12b8f8f", + "version": "1.4.0-alpha.28+sha.e624c4d", "peerDependencies": { - "@interactjs/core": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/modifiers": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/utils": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/core": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/modifiers": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/utils": "1.4.0-alpha.28+sha.e624c4d" }, "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/core": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/modifiers": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/utils": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/_dev": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/core": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/modifiers": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/utils": "1.4.0-alpha.28+sha.e624c4d" }, "publishConfig": { "access": "public" diff --git a/packages/interact/package.json b/packages/interact/package.json index 2ecd3e1d2..2b487fab2 100644 --- a/packages/interact/package.json +++ b/packages/interact/package.json @@ -1,28 +1,28 @@ { "name": "@interactjs/interact", - "version": "1.4.0-alpha.27+sha.12b8f8f", + "version": "1.4.0-alpha.28+sha.e624c4d", "peerDependencies": { - "@interactjs/actions": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/auto-scroll": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/auto-start": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/core": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/inertia": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/modifiers": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/pointer-events": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/reflow": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/utils": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/actions": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/auto-scroll": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/auto-start": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/core": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/inertia": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/modifiers": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/pointer-events": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/reflow": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/utils": "1.4.0-alpha.28+sha.e624c4d" }, "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/actions": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/auto-scroll": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/auto-start": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/core": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/inertia": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/modifiers": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/pointer-events": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/reflow": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/utils": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/_dev": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/actions": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/auto-scroll": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/auto-start": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/core": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/inertia": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/modifiers": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/pointer-events": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/reflow": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/utils": "1.4.0-alpha.28+sha.e624c4d" }, "publishConfig": { "access": "public" diff --git a/packages/interact/tests/interact.d.ts b/packages/interact/tests/interact.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/interact/tests/interact.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/interact/tests/interact.js b/packages/interact/tests/interact.js new file mode 100644 index 000000000..493fa3226 --- /dev/null +++ b/packages/interact/tests/interact.js @@ -0,0 +1,42 @@ +import interactions from '@interactjs/core/interactions'; +import { jsdom } from '@interactjs/_dev/test/domator'; +import test from '@interactjs/_dev/test/test'; +import interact, { scope } from '../interact'; +test('interact export', t => { + scope.init(jsdom('').defaultView); + interactions.install(scope); + const interactable1 = interact('selector'); + t.assert(interactable1 instanceof scope.Interactable, 'interact function returns Interactable instance'); + t.equal(interact('selector'), interactable1, 'same interactable is returned with same target and context'); + t.equal(scope.interactables.list.length, 1, 'new interactables are added to list'); + interactable1.unset(); + t.equal(scope.interactables.list.length, 0, 'unset interactables are removed'); + const constructsUniqueMessage = 'unique contexts make unique interactables with identical targets'; + const doc1 = jsdom(''); + const doc2 = jsdom(''); + const results = [ + ['repeat', doc1], + ['repeat', doc2], + [doc1, doc1], + [doc2.body, doc2], + ].reduce((acc, [target, context]) => { + const interactable = interact(target, { context }); + if (acc.includes(interactable)) { + t.fail(constructsUniqueMessage); + } + acc.push({ interactable, target, context }); + return acc; + }, []); + t.pass(constructsUniqueMessage); + const getsUniqueMessage = 'interactions.get returns correct result with identical targets and different contexts'; + for (const { interactable, target, context } of results) { + if (scope.interactables.get(target, { context }) !== interactable) { + t.fail(getsUniqueMessage); + } + } + t.pass(getsUniqueMessage); + scope.interactables.list.forEach(i => i.unset()); + delete scope.Interactable; + t.end(); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnRlcmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFlBQVksTUFBTSwrQkFBK0IsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFDckQsT0FBTyxJQUFJLE1BQU0sNEJBQTRCLENBQUE7QUFDN0MsT0FBTyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFN0MsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQzFCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ2pDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFM0IsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzFDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxZQUFZLEtBQUssQ0FBQyxZQUFZLEVBQ2xELGlEQUFpRCxDQUFDLENBQUE7SUFDcEQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsYUFBYSxFQUN6Qyw0REFBNEQsQ0FBQyxDQUFBO0lBQy9ELENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFDeEMscUNBQXFDLENBQUMsQ0FBQTtJQUV4QyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDckIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUN4QyxpQ0FBaUMsQ0FBQyxDQUFBO0lBRXBDLE1BQU0sdUJBQXVCLEdBQzNCLGtFQUFrRSxDQUFBO0lBRXBFLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUN0QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDdEIsTUFBTSxPQUFPLEdBQUc7UUFDZCxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7UUFDaEIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO1FBQ2hCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztRQUNaLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7S0FDbEIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtRQUNsQyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUVsRCxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDOUIsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFBO1NBQ2hDO1FBRUQsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUMzQyxPQUFPLEdBQUcsQ0FBQTtJQUNaLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUVOLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtJQUUvQixNQUFNLGlCQUFpQixHQUNyQix1RkFBdUYsQ0FBQTtJQUV6RixLQUFLLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLE9BQU8sRUFBRTtRQUN2RCxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEtBQUssWUFBWSxFQUFFO1lBQ2pFLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtTQUMxQjtLQUNGO0lBRUQsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0lBRXpCLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBRWhELE9BQU8sS0FBSyxDQUFDLFlBQVksQ0FBQTtJQUV6QixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7QUFDVCxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbnRlcmFjdGlvbnMgZnJvbSAnQGludGVyYWN0anMvY29yZS9pbnRlcmFjdGlvbnMnXG5pbXBvcnQgeyBqc2RvbSB9IGZyb20gJ0BpbnRlcmFjdGpzL19kZXYvdGVzdC9kb21hdG9yJ1xuaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgaW50ZXJhY3QsIHsgc2NvcGUgfSBmcm9tICcuLi9pbnRlcmFjdCdcblxudGVzdCgnaW50ZXJhY3QgZXhwb3J0JywgdCA9PiB7XG4gIHNjb3BlLmluaXQoanNkb20oJycpLmRlZmF1bHRWaWV3KVxuICBpbnRlcmFjdGlvbnMuaW5zdGFsbChzY29wZSlcblxuICBjb25zdCBpbnRlcmFjdGFibGUxID0gaW50ZXJhY3QoJ3NlbGVjdG9yJylcbiAgdC5hc3NlcnQoaW50ZXJhY3RhYmxlMSBpbnN0YW5jZW9mIHNjb3BlLkludGVyYWN0YWJsZSxcbiAgICAnaW50ZXJhY3QgZnVuY3Rpb24gcmV0dXJucyBJbnRlcmFjdGFibGUgaW5zdGFuY2UnKVxuICB0LmVxdWFsKGludGVyYWN0KCdzZWxlY3RvcicpLCBpbnRlcmFjdGFibGUxLFxuICAgICdzYW1lIGludGVyYWN0YWJsZSBpcyByZXR1cm5lZCB3aXRoIHNhbWUgdGFyZ2V0IGFuZCBjb250ZXh0JylcbiAgdC5lcXVhbChzY29wZS5pbnRlcmFjdGFibGVzLmxpc3QubGVuZ3RoLCAxLFxuICAgICduZXcgaW50ZXJhY3RhYmxlcyBhcmUgYWRkZWQgdG8gbGlzdCcpXG5cbiAgaW50ZXJhY3RhYmxlMS51bnNldCgpXG4gIHQuZXF1YWwoc2NvcGUuaW50ZXJhY3RhYmxlcy5saXN0Lmxlbmd0aCwgMCxcbiAgICAndW5zZXQgaW50ZXJhY3RhYmxlcyBhcmUgcmVtb3ZlZCcpXG5cbiAgY29uc3QgY29uc3RydWN0c1VuaXF1ZU1lc3NhZ2UgPVxuICAgICd1bmlxdWUgY29udGV4dHMgbWFrZSB1bmlxdWUgaW50ZXJhY3RhYmxlcyB3aXRoIGlkZW50aWNhbCB0YXJnZXRzJ1xuXG4gIGNvbnN0IGRvYzEgPSBqc2RvbSgnJylcbiAgY29uc3QgZG9jMiA9IGpzZG9tKCcnKVxuICBjb25zdCByZXN1bHRzID0gW1xuICAgIFsncmVwZWF0JywgZG9jMV0sXG4gICAgWydyZXBlYXQnLCBkb2MyXSxcbiAgICBbZG9jMSwgZG9jMV0sXG4gICAgW2RvYzIuYm9keSwgZG9jMl0sXG4gIF0ucmVkdWNlKChhY2MsIFt0YXJnZXQsIGNvbnRleHRdKSA9PiB7XG4gICAgY29uc3QgaW50ZXJhY3RhYmxlID0gaW50ZXJhY3QodGFyZ2V0LCB7IGNvbnRleHQgfSlcblxuICAgIGlmIChhY2MuaW5jbHVkZXMoaW50ZXJhY3RhYmxlKSkge1xuICAgICAgdC5mYWlsKGNvbnN0cnVjdHNVbmlxdWVNZXNzYWdlKVxuICAgIH1cblxuICAgIGFjYy5wdXNoKHsgaW50ZXJhY3RhYmxlLCB0YXJnZXQsIGNvbnRleHQgfSlcbiAgICByZXR1cm4gYWNjXG4gIH0sIFtdKVxuXG4gIHQucGFzcyhjb25zdHJ1Y3RzVW5pcXVlTWVzc2FnZSlcblxuICBjb25zdCBnZXRzVW5pcXVlTWVzc2FnZSA9XG4gICAgJ2ludGVyYWN0aW9ucy5nZXQgcmV0dXJucyBjb3JyZWN0IHJlc3VsdCB3aXRoIGlkZW50aWNhbCB0YXJnZXRzIGFuZCBkaWZmZXJlbnQgY29udGV4dHMnXG5cbiAgZm9yIChjb25zdCB7IGludGVyYWN0YWJsZSwgdGFyZ2V0LCBjb250ZXh0IH0gb2YgcmVzdWx0cykge1xuICAgIGlmIChzY29wZS5pbnRlcmFjdGFibGVzLmdldCh0YXJnZXQsIHsgY29udGV4dCB9KSAhPT0gaW50ZXJhY3RhYmxlKSB7XG4gICAgICB0LmZhaWwoZ2V0c1VuaXF1ZU1lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgdC5wYXNzKGdldHNVbmlxdWVNZXNzYWdlKVxuXG4gIHNjb3BlLmludGVyYWN0YWJsZXMubGlzdC5mb3JFYWNoKGkgPT4gaS51bnNldCgpKVxuXG4gIGRlbGV0ZSBzY29wZS5JbnRlcmFjdGFibGVcblxuICB0LmVuZCgpXG59KVxuIl19 \ No newline at end of file diff --git a/packages/interactjs/dist/docs/InteractEvent_InteractEvent.html b/packages/interactjs/dist/docs/InteractEvent_InteractEvent.html index 959f1e60a..0bfb22d7c 100644 --- a/packages/interactjs/dist/docs/InteractEvent_InteractEvent.html +++ b/packages/interactjs/dist/docs/InteractEvent_InteractEvent.html @@ -97,7 +97,7 @@

new Inte
Source:
diff --git a/packages/interactjs/dist/docs/Interactable.html b/packages/interactjs/dist/docs/Interactable.html index f990dd2ff..8ed1b87dd 100644 --- a/packages/interactjs/dist/docs/Interactable.html +++ b/packages/interactjs/dist/docs/Interactable.html @@ -832,7 +832,7 @@

draggableSource:
@@ -1025,7 +1025,7 @@

dropCheckSource:
@@ -1140,7 +1140,7 @@

dropzoneSource:
@@ -1498,7 +1498,7 @@

gesturable<
Source:
@@ -2982,7 +2982,7 @@

resizableSource:
diff --git a/packages/interactjs/dist/docs/doclets.json b/packages/interactjs/dist/docs/doclets.json index 80143c13b..464584245 100644 --- a/packages/interactjs/dist/docs/doclets.json +++ b/packages/interactjs/dist/docs/doclets.json @@ -1 +1 @@ -[{"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":"T000002R003026","___s":true,"attribs":"","id":"index","ancestors":[]},{"comment":"/**\n * Class of events fired on dropzones during drags with acceptable targets.\n */","meta":{"range":[227,701],"filename":"DropEvent.ts","lineno":20,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions/drop","code":{"id":"astnode100000549","name":"DropEvent","type":"MethodDefinition","paramnames":["dropStatus","dragEvent","type"]},"vars":{"":null},"shortpath":"packages/actions/drop/DropEvent.ts"},"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":[922,2022],"filename":"DropEvent.ts","lineno":39,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions/drop","code":{"id":"astnode100000635","name":"DropEvent#reject","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/actions/drop/DropEvent.ts"},"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":"T000002R000065","___s":true,"attribs":"","id":"reject","signature":"()","ancestors":["DropEvent#"]},{"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":[2401,2509],"filename":"interactablePreventDefault.ts","lineno":68,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009801","name":"Interactable.prototype.preventDefault","type":"FunctionExpression","funcscope":"install","paramnames":["newValue"]},"shortpath":"packages/core/interactablePreventDefault.ts"},"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":"T000002R000898","___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":[905,1191],"filename":"interact.ts","lineno":49,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100015472","name":"exports.interact","type":"VariableDeclaration"},"shortpath":"packages/interact/interact.ts"},"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":"member","___id":"T000002R001522","___s":true,"attribs":"(constant) ","id":"interact","ancestors":[],"signature":""},{"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":[5804,6098],"filename":"index.ts","lineno":185,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions/drop","code":{"id":"astnode100001230","name":"interact.dynamicDrop","type":"FunctionExpression","paramnames":["newValue"]},"vars":{"scope.dynamicDrop":"scope.dynamicDrop"},"shortpath":"packages/actions/drop/index.ts"},"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":"T000002R000125","___s":true,"attribs":"(static) ","id":".dynamicDrop","signature":"(newValueopt) → {boolean|interact}","ancestors":["interact."]},{"comment":"/** */","meta":{"range":[704,1004],"filename":"Interactable.ts","lineno":25,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100008605","name":"exports.Interactable","type":"MethodDefinition","paramnames":["target","options","defaultContext"]},"shortpath":"packages/core/Interactable.ts"},"name":"Interactable","longname":"Interactable","kind":"class","memberof":"Interactable","scope":"instance","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":[3792,3844],"filename":"InteractableMethods.ts","lineno":108,"columnno":2,"path":"/home/taye/proj/interact.js/packages/auto-start","code":{"id":"astnode100007910","name":"Interactable.prototype.actionChecker","type":"Identifier","value":"actionChecker","paramnames":[]},"shortpath":"packages/auto-start/InteractableMethods.ts"},"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":"member","memberof":"Interactable","scope":"instance","___id":"T000002R000762","___s":true,"attribs":"","id":"actionChecker","ancestors":["#Interactable#"],"signature":""},{"comment":"/**\n * @deprecated\n *\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to allow from any element\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */","meta":{"range":[2342,2569],"filename":"InteractableMethods.ts","lineno":75,"columnno":2,"path":"/home/taye/proj/interact.js/packages/auto-start","code":{"id":"astnode100007866","name":"Interactable.prototype.allowFrom","type":"CallExpression","value":"","paramnames":[]},"shortpath":"packages/auto-start/InteractableMethods.ts"},"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":"T000002R000758","___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":[5682,5723],"filename":"Interactable.ts","lineno":192,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009132","name":"Interactable#context","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/Interactable.ts"},"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":"T000002R000859","___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":[5317,5506],"filename":"Interactable.ts","lineno":174,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009102","name":"Interactable#deltaSource","type":"MethodDefinition","paramnames":["newValue"]},"vars":{"":null},"shortpath":"packages/core/Interactable.ts"},"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":"T000002R000857","___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":[3201,3761],"filename":"drag.ts","lineno":100,"columnno":0,"path":"/home/taye/proj/interact.js/packages/actions","code":{"id":"astnode100000367","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.ts"},"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":"T000002R000031","___s":true,"attribs":"","id":"draggable","signature":"(optionsopt) → {boolean|Interactable}","ancestors":["#Interactable#"]},{"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 */","meta":{"range":[5248,5464],"filename":"index.ts","lineno":166,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions/drop","code":{"id":"astnode100001205","name":"Interactable.prototype.dropCheck","type":"FunctionExpression","paramnames":["dragEvent","event","draggable","draggableElement","dropElement","rect"]},"shortpath":"packages/actions/drop/index.ts"},"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
","name":"dropCheck","longname":"Interactable#dropCheck","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R000124","___s":true,"attribs":"","id":"dropCheck","signature":"()","ancestors":["#Interactable#"]},{"comment":"/**\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":[4484,4584],"filename":"index.ts","lineno":122,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions/drop","code":{"id":"astnode100001190","name":"Interactable.prototype.dropzone","type":"FunctionExpression","paramnames":["options"]},"shortpath":"packages/actions/drop/index.ts"},"description":"
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":"dropzone","longname":"Interactable#dropzone","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R000123","___s":true,"attribs":"","id":"dropzone","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":[6117,6182],"filename":"Interactable.ts","lineno":207,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009160","name":"Interactable#fire","type":"MethodDefinition","paramnames":["iEvent"]},"vars":{"":null},"shortpath":"packages/core/Interactable.ts"},"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":"T000002R000861","___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":[1101,1515],"filename":"gesture.ts","lineno":42,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions","code":{"id":"astnode100002859","name":"Interactable.prototype.gesturable","type":"FunctionExpression","paramnames":["options"]},"vars":{"this.options.gesture.enabled":"Interactable#gesturable#options.gesture.enabled"},"shortpath":"packages/actions/gesture.ts"},"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":"T000002R000257","___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":[3373,3615],"filename":"Interactable.ts","lineno":103,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100008950","name":"Interactable#getRect","type":"MethodDefinition","paramnames":["element"]},"vars":{"":null},"shortpath":"packages/core/Interactable.ts"},"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":"T000002R000847","___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":[1382,1613],"filename":"InteractableMethods.ts","lineno":43,"columnno":2,"path":"/home/taye/proj/interact.js/packages/auto-start","code":{"id":"astnode100007846","name":"Interactable.prototype.ignoreFrom","type":"CallExpression","value":"","paramnames":[]},"shortpath":"packages/auto-start/InteractableMethods.ts"},"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":"T000002R000757","___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":[8052,8144],"filename":"Interactable.ts","lineno":266,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009323","name":"Interactable#off","type":"MethodDefinition","paramnames":["types","listener","options"]},"vars":{"":null},"shortpath":"packages/core/Interactable.ts"},"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":"T000002R000871","___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":[7549,7639],"filename":"Interactable.ts","lineno":252,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009307","name":"Interactable#on","type":"MethodDefinition","paramnames":["types","listener","options"]},"vars":{"":null},"shortpath":"packages/core/Interactable.ts"},"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":"T000002R000870","___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":[4906,4983],"filename":"Interactable.ts","lineno":160,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009090","name":"Interactable#origin","type":"MethodDefinition","paramnames":["newValue"]},"vars":{"":null},"shortpath":"packages/core/Interactable.ts"},"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":"T000002R000856","___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":[3944,4168],"filename":"Interactable.ts","lineno":122,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100008999","name":"Interactable#rectChecker","type":"MethodDefinition","paramnames":["checker"]},"vars":{"":null},"shortpath":"packages/core/Interactable.ts"},"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":"T000002R000850","___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":[1351,1446],"filename":"index.ts","lineno":41,"columnno":2,"path":"/home/taye/proj/interact.js/packages/reflow","code":{"id":"astnode100021866","name":"Interactable.prototype.reflow","type":"FunctionExpression","paramnames":["action"]},"shortpath":"packages/reflow/index.ts"},"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":"T000002R002313","___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":[2687,2790],"filename":"resize.ts","lineno":69,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions","code":{"id":"astnode100003739","name":"Interactable.prototype.resizable","type":"FunctionExpression","paramnames":["options"]},"shortpath":"packages/actions/resize.ts"},"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":"T000002R000343","___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":[8305,8923],"filename":"Interactable.ts","lineno":280,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009339","name":"Interactable#set","type":"MethodDefinition","paramnames":["options"]},"vars":{"":null},"shortpath":"packages/core/Interactable.ts"},"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":"T000002R000872","___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":[4132,4180],"filename":"InteractableMethods.ts","lineno":141,"columnno":2,"path":"/home/taye/proj/interact.js/packages/auto-start","code":{"id":"astnode100007918","name":"Interactable.prototype.styleCursor","type":"Identifier","value":"styleCursor","paramnames":[]},"shortpath":"packages/auto-start/InteractableMethods.ts"},"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":"member","memberof":"Interactable","scope":"instance","___id":"T000002R000763","___s":true,"attribs":"","id":"styleCursor","ancestors":["#Interactable#"],"signature":""},{"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":[9091,9905],"filename":"Interactable.ts","lineno":313,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009452","name":"Interactable#unset","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/Interactable.ts"},"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":"T000002R000880","___s":true,"attribs":"","id":"unset","signature":"() → {interact}","ancestors":["#Interactable#"]},{"comment":"/** */","meta":{"range":[687,3073],"filename":"InteractEvent.ts","lineno":27,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009974","name":"exports.InteractEvent","type":"MethodDefinition","paramnames":["interaction","event","actionName","phase","element","related","preEnd","type"]},"vars":{"":null},"shortpath":"packages/core/InteractEvent.ts"},"name":"InteractEvent","longname":"InteractEvent#InteractEvent","kind":"class","memberof":"InteractEvent","scope":"instance","params":[],"___id":"T000003R000004","___s":true,"attribs":"","id":"InteractEvent","signature":"()","ancestors":[]},{"comment":"/**\n * Don't call listeners on the remaining targets\n */","meta":{"range":[4863,4966],"filename":"InteractEvent.ts","lineno":202,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010811","name":"InteractEvent#stopImmediatePropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/InteractEvent.ts"},"description":"

Don't call listeners on the remaining targets

","name":"stopImmediatePropagation","longname":"InteractEvent#stopImmediatePropagation","kind":"function","memberof":"InteractEvent","scope":"instance","params":[],"___id":"T000002R001007","___s":true,"attribs":"","id":"stopImmediatePropagation","signature":"()","ancestors":[]},{"comment":"/**\n * Don't call any other listeners (even on the current target)\n */","meta":{"range":[5048,5107],"filename":"InteractEvent.ts","lineno":209,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010825","name":"InteractEvent#stopPropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/InteractEvent.ts"},"description":"

Don't call any other listeners (even on the current target)

","name":"stopPropagation","longname":"InteractEvent#stopPropagation","kind":"function","memberof":"InteractEvent","scope":"instance","params":[],"___id":"T000002R001010","___s":true,"attribs":"","id":"stopPropagation","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":[7124,7474],"filename":"Interaction.ts","lineno":269,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100011569","name":"Interaction#end","type":"MethodDefinition","paramnames":["event"]},"vars":{"":null},"shortpath":"packages/core/Interaction.ts"},"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":"T000002R001098","___s":true,"attribs":"","id":"end","signature":"(eventopt)","ancestors":[]},{"comment":"/**\n * @alias Interaction.prototype.move\n */","meta":{"range":[892,1044],"filename":"Interaction.ts","lineno":63,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010899","name":"doMove","type":"ClassProperty"},"shortpath":"packages/core/Interaction.ts"},"alias":"Interaction.prototype.move","name":"move","longname":"Interaction#move","kind":"member","memberof":"Interaction","scope":"instance","___id":"T000002R001035","___s":true,"attribs":"","id":"move","ancestors":[],"signature":""},{"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":[5642,5963],"filename":"Interaction.ts","lineno":207,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100011407","name":"Interaction#move","type":"MethodDefinition","paramnames":["signalArg"]},"vars":{"":null},"shortpath":"packages/core/Interaction.ts"},"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":"T000002R001077","___s":true,"attribs":"","id":"move","signature":"()","ancestors":[]},{"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":[3085,3479],"filename":"Interaction.ts","lineno":105,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100011018","name":"Interaction#start","type":"MethodDefinition","paramnames":["action","target","element"]},"vars":{"":null},"shortpath":"packages/core/Interaction.ts"},"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":"T000002R001054","___s":true,"attribs":"","id":"start","signature":"(action, target, element) → {object}","ancestors":[]},{"comment":"/** */","meta":{"range":[7624,7820],"filename":"Interaction.ts","lineno":288,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100011652","name":"Interaction#stop","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/Interaction.ts"},"name":"stop","longname":"Interaction#stop","kind":"function","memberof":"Interaction","scope":"instance","params":[],"___id":"T000002R001109","___s":true,"attribs":"","id":"stop","signature":"()","ancestors":[]},{"comment":"/** */","meta":{"range":[184,1179],"filename":"PointerEvent.ts","lineno":9,"columnno":2,"path":"/home/taye/proj/interact.js/packages/pointer-events","code":{"id":"astnode100021486","name":"module.exports","type":"MethodDefinition","paramnames":["type","pointer","event","eventTarget","interaction"]},"shortpath":"packages/pointer-events/PointerEvent.ts"},"name":"exports","longname":"module.exports","kind":"class","memberof":"module","scope":"static","params":[],"___id":"T000003R000005","___s":true,"attribs":"","id":"exports","signature":"()","ancestors":[]},{"comment":"/** @module interact */","meta":{"filename":"interact.ts","lineno":1,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{},"shortpath":"packages/interact/interact.ts"},"kind":"module","name":"interact","longname":"module:interact","___id":"T000004R000002","___s":true,"attribs":"","id":"interact","ancestors":[],"modules":[]},{"comment":"/**\n * Returns an object which exposes internal data\n * @alias module:interact.debug\n *\n * @return {object} An object with properties that outline the current state\n * and expose internal functions and variables\n */","meta":{"range":[4674,4696],"filename":"interact.ts","lineno":222,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100015888","name":"interact.debug","type":"Identifier","value":"debug","paramnames":[]},"shortpath":"packages/interact/interact.ts"},"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":"member","memberof":"module:interact","scope":"static","___id":"T000002R001546","___s":true,"attribs":"(static) ","id":".debug","ancestors":["interact."],"signature":""},{"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":[1846,1868],"filename":"interact.ts","lineno":107,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100015564","name":"interact.isSet","type":"Identifier","value":"isSet","paramnames":[]},"shortpath":"packages/interact/interact.ts"},"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":"member","memberof":"module:interact","scope":"static","___id":"T000002R001530","___s":true,"attribs":"(static) ","id":".isSet","ancestors":["interact."],"signature":""},{"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":[2784,2872],"filename":"base.ts","lineno":116,"columnno":2,"path":"/home/taye/proj/interact.js/packages/auto-start","code":{"id":"astnode100006625","name":"interact.maxInteractions","type":"ArrowFunctionExpression","paramnames":["newValue"]},"shortpath":"packages/auto-start/base.ts"},"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":"T000002R000638","___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":[3692,3710],"filename":"interact.ts","lineno":173,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100015736","name":"interact.off","type":"Identifier","value":"off","paramnames":[]},"shortpath":"packages/interact/interact.ts"},"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":"member","memberof":"module:interact","scope":"static","___id":"T000002R001539","___s":true,"attribs":"(static) ","id":".off","ancestors":["interact."],"signature":""},{"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":[2368,2384],"filename":"interact.ts","lineno":122,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100015591","name":"interact.on","type":"Identifier","value":"on","paramnames":[]},"shortpath":"packages/interact/interact.ts"},"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":"member","memberof":"module:interact","scope":"static","___id":"T000002R001532","___s":true,"attribs":"(static) ","id":".on","ancestors":["interact."],"signature":""},{"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":[6320,6372],"filename":"interact.ts","lineno":281,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100016031","name":"interact.pointerMoveTolerance","type":"Identifier","value":"pointerMoveTolerance","paramnames":[]},"shortpath":"packages/interact/interact.ts"},"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":"member","memberof":"module:interact","scope":"static","___id":"T000002R001563","___s":true,"attribs":"(static) ","id":".pointerMoveTolerance","ancestors":["interact."],"signature":""},{"comment":"/**\n * Cancels all interactions (end events are not fired)\n *\n * @alias module:interact.stop\n *\n * @return {object} interact\n */","meta":{"range":[5842,5862],"filename":"interact.ts","lineno":265,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100016005","name":"interact.stop","type":"Identifier","value":"stop","paramnames":[]},"shortpath":"packages/interact/interact.ts"},"description":"

Cancels all interactions (end events are not fired)

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

interact

"}],"name":"stop","longname":"module:interact.stop","kind":"member","memberof":"module:interact","scope":"static","___id":"T000002R001560","___s":true,"attribs":"(static) ","id":".stop","ancestors":["interact."],"signature":""},{"comment":"/**\n * @alias module:interact.supportsPointerEvent\n *\n * @return {boolean} Whether or not the browser supports PointerEvents\n */","meta":{"range":[5581,5633],"filename":"interact.ts","lineno":255,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100015992","name":"interact.supportsPointerEvent","type":"Identifier","value":"supportsPointerEvent","paramnames":[]},"shortpath":"packages/interact/interact.ts"},"alias":"module:interact.supportsPointerEvent","returns":[{"type":{"names":["boolean"]},"description":"

Whether or not the browser supports PointerEvents

"}],"name":"supportsPointerEvent","longname":"module:interact.supportsPointerEvent","kind":"member","memberof":"module:interact","scope":"static","___id":"T000002R001558","___s":true,"attribs":"(static) ","id":".supportsPointerEvent","ancestors":["interact."],"signature":""},{"comment":"/**\n * @alias module:interact.supportsTouch\n *\n * @return {boolean} Whether or not the browser supports touch input\n */","meta":{"range":[5348,5386],"filename":"interact.ts","lineno":245,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100015979","name":"interact.supportsTouch","type":"Identifier","value":"supportsTouch","paramnames":[]},"shortpath":"packages/interact/interact.ts"},"alias":"module:interact.supportsTouch","returns":[{"type":{"names":["boolean"]},"description":"

Whether or not the browser supports touch input

"}],"name":"supportsTouch","longname":"module:interact.supportsTouch","kind":"member","memberof":"module:interact","scope":"static","___id":"T000002R001556","___s":true,"attribs":"(static) ","id":".supportsTouch","ancestors":["interact."],"signature":""},{"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":[1358,1376],"filename":"interact.ts","lineno":87,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100015524","name":"interact.use","type":"Identifier","value":"use","paramnames":[]},"shortpath":"packages/interact/interact.ts"},"description":"

Use a plugin

","alias":"module:interact.use","params":[{"type":{"names":["Object"]},"name":"plugin"},{"type":{"names":["function"]},"name":"plugin.install"}],"returns":[{"type":{"names":["interact"]}}],"name":"use","longname":"module:interact.use","kind":"member","memberof":"module:interact","scope":"static","___id":"T000002R001528","___s":true,"attribs":"(static) ","id":".use","ancestors":["interact."],"signature":""},{"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.ts","lineno":1,"columnno":0,"path":"/home/taye/proj/interact.js/packages/modifiers/snap","code":{},"shortpath":"packages/modifiers/snap/edges.ts"},"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":"T000004R000003","___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":"edges.ts","lineno":1,"columnno":0,"path":"/home/taye/proj/interact.js/packages/modifiers/snap","code":{},"shortpath":"packages/modifiers/snap/edges.ts"},"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":"T000002R001916","___s":true,"attribs":"","id":"modifiers/snapEdges","ancestors":[]}]},{"kind":"package","longname":"package:undefined","files":["/home/taye/proj/interact.js/packages/actions/drag.ts","/home/taye/proj/interact.js/packages/actions/drop/DropEvent.ts","/home/taye/proj/interact.js/packages/actions/drop/index.ts","/home/taye/proj/interact.js/packages/actions/gesture.ts","/home/taye/proj/interact.js/packages/actions/index.ts","/home/taye/proj/interact.js/packages/actions/resize.ts","/home/taye/proj/interact.js/packages/auto-scroll/index.ts","/home/taye/proj/interact.js/packages/auto-start/base.ts","/home/taye/proj/interact.js/packages/auto-start/dragAxis.ts","/home/taye/proj/interact.js/packages/auto-start/hold.ts","/home/taye/proj/interact.js/packages/auto-start/index.ts","/home/taye/proj/interact.js/packages/auto-start/InteractableMethods.ts","/home/taye/proj/interact.js/packages/core/defaultOptions.ts","/home/taye/proj/interact.js/packages/core/Eventable.ts","/home/taye/proj/interact.js/packages/core/Interactable.ts","/home/taye/proj/interact.js/packages/core/interactablePreventDefault.ts","/home/taye/proj/interact.js/packages/core/InteractEvent.ts","/home/taye/proj/interact.js/packages/core/Interaction.ts","/home/taye/proj/interact.js/packages/core/interactions.ts","/home/taye/proj/interact.js/packages/core/PointerInfo.ts","/home/taye/proj/interact.js/packages/core/scope.ts","/home/taye/proj/interact.js/packages/inertia/index.ts","/home/taye/proj/interact.js/packages/interact/index.ts","/home/taye/proj/interact.js/packages/interact/interact.ts","/home/taye/proj/interact.js/packages/interactjs/index.ts","/home/taye/proj/interact.js/packages/modifiers/base.ts","/home/taye/proj/interact.js/packages/modifiers/index.ts","/home/taye/proj/interact.js/packages/modifiers/restrict/edges.ts","/home/taye/proj/interact.js/packages/modifiers/restrict/pointer.ts","/home/taye/proj/interact.js/packages/modifiers/restrict/size.ts","/home/taye/proj/interact.js/packages/modifiers/snap/edges.ts","/home/taye/proj/interact.js/packages/modifiers/snap/pointer.ts","/home/taye/proj/interact.js/packages/modifiers/snap/size.ts","/home/taye/proj/interact.js/packages/pointer-events/base.ts","/home/taye/proj/interact.js/packages/pointer-events/holdRepeat.ts","/home/taye/proj/interact.js/packages/pointer-events/index.ts","/home/taye/proj/interact.js/packages/pointer-events/interactableTargets.ts","/home/taye/proj/interact.js/packages/pointer-events/PointerEvent.ts","/home/taye/proj/interact.js/packages/reflow/index.ts","/home/taye/proj/interact.js/packages/types/interactjs-test.ts","/home/taye/proj/interact.js/packages/utils/arr.ts","/home/taye/proj/interact.js/packages/utils/browser.ts","/home/taye/proj/interact.js/packages/utils/clone.ts","/home/taye/proj/interact.js/packages/utils/domObjects.ts","/home/taye/proj/interact.js/packages/utils/domUtils.ts","/home/taye/proj/interact.js/packages/utils/events.ts","/home/taye/proj/interact.js/packages/utils/extend.ts","/home/taye/proj/interact.js/packages/utils/getOriginXY.ts","/home/taye/proj/interact.js/packages/utils/hypot.ts","/home/taye/proj/interact.js/packages/utils/index.ts","/home/taye/proj/interact.js/packages/utils/interactionFinder.ts","/home/taye/proj/interact.js/packages/utils/is.ts","/home/taye/proj/interact.js/packages/utils/isWindow.ts","/home/taye/proj/interact.js/packages/utils/normalizeListeners.ts","/home/taye/proj/interact.js/packages/utils/pointerExtend.ts","/home/taye/proj/interact.js/packages/utils/pointerUtils.ts","/home/taye/proj/interact.js/packages/utils/raf.ts","/home/taye/proj/interact.js/packages/utils/rect.ts","/home/taye/proj/interact.js/packages/utils/Signals.ts","/home/taye/proj/interact.js/packages/utils/snappers/grid.ts","/home/taye/proj/interact.js/packages/utils/snappers/index.ts","/home/taye/proj/interact.js/packages/utils/window.ts","/home/taye/proj/interact.js/docs/index.md"],"___id":"T000002R003027","___s":true,"attribs":"","id":"package:","ancestors":[]},{"comment":"/**\n * Prevent the default behaviour of the original Event\n */","meta":{"range":[1630,1693],"filename":"PointerEvent.ts","lineno":76,"columnno":2,"path":"/home/taye/proj/interact.js/packages/pointer-events","code":{"id":"astnode100021732","name":"preventDefault","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/pointer-events/PointerEvent.ts"},"description":"

Prevent the default behaviour of the original Event

","name":"preventDefault","longname":"preventDefault","kind":"function","scope":"global","params":[],"___id":"T000002R002300","___s":true,"attribs":"","id":"preventDefault","signature":"()","ancestors":[]},{"comment":"/**\n * Don't call any other listeners (even on the current target)\n */","meta":{"range":[1902,2005],"filename":"PointerEvent.ts","lineno":90,"columnno":2,"path":"/home/taye/proj/interact.js/packages/pointer-events","code":{"id":"astnode100021753","name":"stopImmediatePropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/pointer-events/PointerEvent.ts"},"description":"

Don't call any other listeners (even on the current target)

","name":"stopImmediatePropagation","longname":"stopImmediatePropagation","kind":"function","scope":"global","params":[],"___id":"T000002R002303","___s":true,"attribs":"","id":"stopImmediatePropagation","signature":"()","ancestors":[]},{"comment":"/**\n * Don't call listeners on the remaining targets\n */","meta":{"range":[1761,1820],"filename":"PointerEvent.ts","lineno":83,"columnno":2,"path":"/home/taye/proj/interact.js/packages/pointer-events","code":{"id":"astnode100021743","name":"stopPropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/pointer-events/PointerEvent.ts"},"description":"

Don't call listeners on the remaining targets

","name":"stopPropagation","longname":"stopPropagation","kind":"function","scope":"global","params":[],"___id":"T000002R002301","___s":true,"attribs":"","id":"stopPropagation","signature":"()","ancestors":[]}] \ No newline at end of file +[{"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":"T000002R003040","___s":true,"attribs":"","id":"index","ancestors":[]},{"comment":"/**\n * Class of events fired on dropzones during drags with acceptable targets.\n */","meta":{"range":[227,701],"filename":"DropEvent.ts","lineno":20,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions/drop","code":{"id":"astnode100000554","name":"DropEvent","type":"MethodDefinition","paramnames":["dropStatus","dragEvent","type"]},"vars":{"":null},"shortpath":"packages/actions/drop/DropEvent.ts"},"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":[922,2022],"filename":"DropEvent.ts","lineno":39,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions/drop","code":{"id":"astnode100000640","name":"DropEvent#reject","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/actions/drop/DropEvent.ts"},"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":"T000002R000065","___s":true,"attribs":"","id":"reject","signature":"()","ancestors":["DropEvent#"]},{"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":[2401,2509],"filename":"interactablePreventDefault.ts","lineno":68,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009805","name":"Interactable.prototype.preventDefault","type":"FunctionExpression","funcscope":"install","paramnames":["newValue"]},"shortpath":"packages/core/interactablePreventDefault.ts"},"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":"T000002R000900","___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":[905,1191],"filename":"interact.ts","lineno":49,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100015489","name":"exports.interact","type":"VariableDeclaration"},"shortpath":"packages/interact/interact.ts"},"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":"member","___id":"T000002R001527","___s":true,"attribs":"(constant) ","id":"interact","ancestors":[],"signature":""},{"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":[5468,5762],"filename":"index.ts","lineno":198,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions/drop","code":{"id":"astnode100001228","name":"interact.dynamicDrop","type":"FunctionExpression","paramnames":["newValue"]},"vars":{"scope.dynamicDrop":"scope.dynamicDrop"},"shortpath":"packages/actions/drop/index.ts"},"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":"T000002R000125","___s":true,"attribs":"(static) ","id":".dynamicDrop","signature":"(newValueopt) → {boolean|interact}","ancestors":["interact."]},{"comment":"/** */","meta":{"range":[704,1004],"filename":"Interactable.ts","lineno":25,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100008611","name":"exports.Interactable","type":"MethodDefinition","paramnames":["target","options","defaultContext"]},"shortpath":"packages/core/Interactable.ts"},"name":"Interactable","longname":"Interactable","kind":"class","memberof":"Interactable","scope":"instance","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":[3792,3844],"filename":"InteractableMethods.ts","lineno":108,"columnno":2,"path":"/home/taye/proj/interact.js/packages/auto-start","code":{"id":"astnode100007916","name":"Interactable.prototype.actionChecker","type":"Identifier","value":"actionChecker","paramnames":[]},"shortpath":"packages/auto-start/InteractableMethods.ts"},"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":"member","memberof":"Interactable","scope":"instance","___id":"T000002R000764","___s":true,"attribs":"","id":"actionChecker","ancestors":["#Interactable#"],"signature":""},{"comment":"/**\n * @deprecated\n *\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to allow from any element\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */","meta":{"range":[2342,2569],"filename":"InteractableMethods.ts","lineno":75,"columnno":2,"path":"/home/taye/proj/interact.js/packages/auto-start","code":{"id":"astnode100007872","name":"Interactable.prototype.allowFrom","type":"CallExpression","value":"","paramnames":[]},"shortpath":"packages/auto-start/InteractableMethods.ts"},"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":"T000002R000760","___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":[5674,5715],"filename":"Interactable.ts","lineno":192,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009136","name":"Interactable#context","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/Interactable.ts"},"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":"T000002R000861","___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":[5309,5498],"filename":"Interactable.ts","lineno":174,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009106","name":"Interactable#deltaSource","type":"MethodDefinition","paramnames":["newValue"]},"vars":{"":null},"shortpath":"packages/core/Interactable.ts"},"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":"T000002R000859","___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":[3219,3791],"filename":"drag.ts","lineno":99,"columnno":6,"path":"/home/taye/proj/interact.js/packages/actions","code":{"id":"astnode100000370","name":"draggable","type":"FunctionExpression","value":"draggable"},"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.ts"},"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":"T000002R000031","___s":true,"attribs":"","id":"draggable","signature":"(optionsopt) → {boolean|Interactable}","ancestors":["#Interactable#"]},{"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 */","meta":{"range":[4912,5128],"filename":"index.ts","lineno":179,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions/drop","code":{"id":"astnode100001203","name":"Interactable.prototype.dropCheck","type":"FunctionExpression","paramnames":["dragEvent","event","draggable","draggableElement","dropElement","rect"]},"shortpath":"packages/actions/drop/index.ts"},"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
","name":"dropCheck","longname":"Interactable#dropCheck","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R000124","___s":true,"attribs":"","id":"dropCheck","signature":"()","ancestors":["#Interactable#"]},{"comment":"/**\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":[4148,4248],"filename":"index.ts","lineno":135,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions/drop","code":{"id":"astnode100001188","name":"Interactable.prototype.dropzone","type":"FunctionExpression","paramnames":["options"]},"shortpath":"packages/actions/drop/index.ts"},"description":"
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":"dropzone","longname":"Interactable#dropzone","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R000123","___s":true,"attribs":"","id":"dropzone","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":[6109,6174],"filename":"Interactable.ts","lineno":207,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009164","name":"Interactable#fire","type":"MethodDefinition","paramnames":["iEvent"]},"vars":{"":null},"shortpath":"packages/core/Interactable.ts"},"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":"T000002R000863","___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":[1101,1515],"filename":"gesture.ts","lineno":68,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions","code":{"id":"astnode100002857","name":"Interactable.prototype.gesturable","type":"FunctionExpression","paramnames":["options"]},"vars":{"this.options.gesture.enabled":"Interactable#gesturable#options.gesture.enabled"},"shortpath":"packages/actions/gesture.ts"},"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":"T000002R000257","___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":[3373,3615],"filename":"Interactable.ts","lineno":103,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100008956","name":"Interactable#getRect","type":"MethodDefinition","paramnames":["element"]},"vars":{"":null},"shortpath":"packages/core/Interactable.ts"},"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":"T000002R000849","___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":[1382,1613],"filename":"InteractableMethods.ts","lineno":43,"columnno":2,"path":"/home/taye/proj/interact.js/packages/auto-start","code":{"id":"astnode100007852","name":"Interactable.prototype.ignoreFrom","type":"CallExpression","value":"","paramnames":[]},"shortpath":"packages/auto-start/InteractableMethods.ts"},"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":"T000002R000759","___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":[8044,8136],"filename":"Interactable.ts","lineno":266,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009327","name":"Interactable#off","type":"MethodDefinition","paramnames":["types","listener","options"]},"vars":{"":null},"shortpath":"packages/core/Interactable.ts"},"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":"T000002R000873","___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":[7541,7631],"filename":"Interactable.ts","lineno":252,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009311","name":"Interactable#on","type":"MethodDefinition","paramnames":["types","listener","options"]},"vars":{"":null},"shortpath":"packages/core/Interactable.ts"},"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":"T000002R000872","___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":[4898,4975],"filename":"Interactable.ts","lineno":160,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009094","name":"Interactable#origin","type":"MethodDefinition","paramnames":["newValue"]},"vars":{"":null},"shortpath":"packages/core/Interactable.ts"},"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":"T000002R000858","___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":[3944,4160],"filename":"Interactable.ts","lineno":122,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009005","name":"Interactable#rectChecker","type":"MethodDefinition","paramnames":["checker"]},"vars":{"":null},"shortpath":"packages/core/Interactable.ts"},"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":"T000002R000852","___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":[1351,1446],"filename":"index.ts","lineno":41,"columnno":2,"path":"/home/taye/proj/interact.js/packages/reflow","code":{"id":"astnode100021907","name":"Interactable.prototype.reflow","type":"FunctionExpression","paramnames":["action"]},"shortpath":"packages/reflow/index.ts"},"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":"T000002R002325","___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":[2700,2803],"filename":"resize.ts","lineno":82,"columnno":2,"path":"/home/taye/proj/interact.js/packages/actions","code":{"id":"astnode100003733","name":"Interactable.prototype.resizable","type":"FunctionExpression","paramnames":["options"]},"shortpath":"packages/actions/resize.ts"},"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":"T000002R000344","___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":[8297,8915],"filename":"Interactable.ts","lineno":280,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009343","name":"Interactable#set","type":"MethodDefinition","paramnames":["options"]},"vars":{"":null},"shortpath":"packages/core/Interactable.ts"},"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":"T000002R000874","___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":[4132,4180],"filename":"InteractableMethods.ts","lineno":141,"columnno":2,"path":"/home/taye/proj/interact.js/packages/auto-start","code":{"id":"astnode100007924","name":"Interactable.prototype.styleCursor","type":"Identifier","value":"styleCursor","paramnames":[]},"shortpath":"packages/auto-start/InteractableMethods.ts"},"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":"member","memberof":"Interactable","scope":"instance","___id":"T000002R000765","___s":true,"attribs":"","id":"styleCursor","ancestors":["#Interactable#"],"signature":""},{"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":[9083,9897],"filename":"Interactable.ts","lineno":313,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009456","name":"Interactable#unset","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/Interactable.ts"},"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":"T000002R000882","___s":true,"attribs":"","id":"unset","signature":"() → {interact}","ancestors":["#Interactable#"]},{"comment":"/** */","meta":{"range":[556,2942],"filename":"InteractEvent.ts","lineno":22,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100009978","name":"exports.InteractEvent","type":"MethodDefinition","paramnames":["interaction","event","actionName","phase","element","related","preEnd","type"]},"vars":{"":null},"shortpath":"packages/core/InteractEvent.ts"},"name":"InteractEvent","longname":"InteractEvent#InteractEvent","kind":"class","memberof":"InteractEvent","scope":"instance","params":[],"___id":"T000003R000004","___s":true,"attribs":"","id":"InteractEvent","signature":"()","ancestors":[]},{"comment":"/**\n * Don't call listeners on the remaining targets\n */","meta":{"range":[4732,4835],"filename":"InteractEvent.ts","lineno":196,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010815","name":"InteractEvent#stopImmediatePropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/InteractEvent.ts"},"description":"

Don't call listeners on the remaining targets

","name":"stopImmediatePropagation","longname":"InteractEvent#stopImmediatePropagation","kind":"function","memberof":"InteractEvent","scope":"instance","params":[],"___id":"T000002R001009","___s":true,"attribs":"","id":"stopImmediatePropagation","signature":"()","ancestors":[]},{"comment":"/**\n * Don't call any other listeners (even on the current target)\n */","meta":{"range":[4917,4976],"filename":"InteractEvent.ts","lineno":203,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010829","name":"InteractEvent#stopPropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/InteractEvent.ts"},"description":"

Don't call any other listeners (even on the current target)

","name":"stopPropagation","longname":"InteractEvent#stopPropagation","kind":"function","memberof":"InteractEvent","scope":"instance","params":[],"___id":"T000002R001012","___s":true,"attribs":"","id":"stopPropagation","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":[7185,7544],"filename":"Interaction.ts","lineno":271,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100011581","name":"Interaction#end","type":"MethodDefinition","paramnames":["event"]},"vars":{"":null},"shortpath":"packages/core/Interaction.ts"},"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":"T000002R001101","___s":true,"attribs":"","id":"end","signature":"(eventopt)","ancestors":[]},{"comment":"/**\n * @alias Interaction.prototype.move\n */","meta":{"range":[908,1060],"filename":"Interaction.ts","lineno":65,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100010905","name":"doMove","type":"ClassProperty"},"shortpath":"packages/core/Interaction.ts"},"alias":"Interaction.prototype.move","name":"move","longname":"Interaction#move","kind":"member","memberof":"Interaction","scope":"instance","___id":"T000002R001037","___s":true,"attribs":"","id":"move","ancestors":[],"signature":""},{"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":[5694,6024],"filename":"Interaction.ts","lineno":209,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100011417","name":"Interaction#move","type":"MethodDefinition","paramnames":["signalArg"]},"vars":{"":null},"shortpath":"packages/core/Interaction.ts"},"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":"T000002R001080","___s":true,"attribs":"","id":"move","signature":"()","ancestors":[]},{"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":[3128,3531],"filename":"Interaction.ts","lineno":107,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100011026","name":"Interaction#start","type":"MethodDefinition","paramnames":["action","target","element"]},"vars":{"":null},"shortpath":"packages/core/Interaction.ts"},"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":"T000002R001057","___s":true,"attribs":"","id":"start","signature":"(action, target, element) → {object}","ancestors":[]},{"comment":"/** */","meta":{"range":[7694,7890],"filename":"Interaction.ts","lineno":290,"columnno":2,"path":"/home/taye/proj/interact.js/packages/core","code":{"id":"astnode100011666","name":"Interaction#stop","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/Interaction.ts"},"name":"stop","longname":"Interaction#stop","kind":"function","memberof":"Interaction","scope":"instance","params":[],"___id":"T000002R001112","___s":true,"attribs":"","id":"stop","signature":"()","ancestors":[]},{"comment":"/** */","meta":{"range":[184,1179],"filename":"PointerEvent.ts","lineno":9,"columnno":2,"path":"/home/taye/proj/interact.js/packages/pointer-events","code":{"id":"astnode100021527","name":"module.exports","type":"MethodDefinition","paramnames":["type","pointer","event","eventTarget","interaction"]},"shortpath":"packages/pointer-events/PointerEvent.ts"},"name":"exports","longname":"module.exports","kind":"class","memberof":"module","scope":"static","params":[],"___id":"T000003R000005","___s":true,"attribs":"","id":"exports","signature":"()","ancestors":[]},{"comment":"/** @module interact */","meta":{"filename":"interact.ts","lineno":1,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{},"shortpath":"packages/interact/interact.ts"},"kind":"module","name":"interact","longname":"module:interact","___id":"T000004R000002","___s":true,"attribs":"","id":"interact","ancestors":[],"modules":[]},{"comment":"/**\n * Returns an object which exposes internal data\n * @alias module:interact.debug\n *\n * @return {object} An object with properties that outline the current state\n * and expose internal functions and variables\n */","meta":{"range":[4674,4696],"filename":"interact.ts","lineno":222,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100015905","name":"interact.debug","type":"Identifier","value":"debug","paramnames":[]},"shortpath":"packages/interact/interact.ts"},"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":"member","memberof":"module:interact","scope":"static","___id":"T000002R001551","___s":true,"attribs":"(static) ","id":".debug","ancestors":["interact."],"signature":""},{"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":[1846,1868],"filename":"interact.ts","lineno":107,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100015581","name":"interact.isSet","type":"Identifier","value":"isSet","paramnames":[]},"shortpath":"packages/interact/interact.ts"},"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":"member","memberof":"module:interact","scope":"static","___id":"T000002R001535","___s":true,"attribs":"(static) ","id":".isSet","ancestors":["interact."],"signature":""},{"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":[2784,2872],"filename":"base.ts","lineno":121,"columnno":2,"path":"/home/taye/proj/interact.js/packages/auto-start","code":{"id":"astnode100006631","name":"interact.maxInteractions","type":"ArrowFunctionExpression","paramnames":["newValue"]},"shortpath":"packages/auto-start/base.ts"},"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":"T000002R000640","___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":[3692,3710],"filename":"interact.ts","lineno":173,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100015753","name":"interact.off","type":"Identifier","value":"off","paramnames":[]},"shortpath":"packages/interact/interact.ts"},"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":"member","memberof":"module:interact","scope":"static","___id":"T000002R001544","___s":true,"attribs":"(static) ","id":".off","ancestors":["interact."],"signature":""},{"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":[2368,2384],"filename":"interact.ts","lineno":122,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100015608","name":"interact.on","type":"Identifier","value":"on","paramnames":[]},"shortpath":"packages/interact/interact.ts"},"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":"member","memberof":"module:interact","scope":"static","___id":"T000002R001537","___s":true,"attribs":"(static) ","id":".on","ancestors":["interact."],"signature":""},{"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":[6320,6372],"filename":"interact.ts","lineno":281,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100016048","name":"interact.pointerMoveTolerance","type":"Identifier","value":"pointerMoveTolerance","paramnames":[]},"shortpath":"packages/interact/interact.ts"},"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":"member","memberof":"module:interact","scope":"static","___id":"T000002R001568","___s":true,"attribs":"(static) ","id":".pointerMoveTolerance","ancestors":["interact."],"signature":""},{"comment":"/**\n * Cancels all interactions (end events are not fired)\n *\n * @alias module:interact.stop\n *\n * @return {object} interact\n */","meta":{"range":[5842,5862],"filename":"interact.ts","lineno":265,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100016022","name":"interact.stop","type":"Identifier","value":"stop","paramnames":[]},"shortpath":"packages/interact/interact.ts"},"description":"

Cancels all interactions (end events are not fired)

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

interact

"}],"name":"stop","longname":"module:interact.stop","kind":"member","memberof":"module:interact","scope":"static","___id":"T000002R001565","___s":true,"attribs":"(static) ","id":".stop","ancestors":["interact."],"signature":""},{"comment":"/**\n * @alias module:interact.supportsPointerEvent\n *\n * @return {boolean} Whether or not the browser supports PointerEvents\n */","meta":{"range":[5581,5633],"filename":"interact.ts","lineno":255,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100016009","name":"interact.supportsPointerEvent","type":"Identifier","value":"supportsPointerEvent","paramnames":[]},"shortpath":"packages/interact/interact.ts"},"alias":"module:interact.supportsPointerEvent","returns":[{"type":{"names":["boolean"]},"description":"

Whether or not the browser supports PointerEvents

"}],"name":"supportsPointerEvent","longname":"module:interact.supportsPointerEvent","kind":"member","memberof":"module:interact","scope":"static","___id":"T000002R001563","___s":true,"attribs":"(static) ","id":".supportsPointerEvent","ancestors":["interact."],"signature":""},{"comment":"/**\n * @alias module:interact.supportsTouch\n *\n * @return {boolean} Whether or not the browser supports touch input\n */","meta":{"range":[5348,5386],"filename":"interact.ts","lineno":245,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100015996","name":"interact.supportsTouch","type":"Identifier","value":"supportsTouch","paramnames":[]},"shortpath":"packages/interact/interact.ts"},"alias":"module:interact.supportsTouch","returns":[{"type":{"names":["boolean"]},"description":"

Whether or not the browser supports touch input

"}],"name":"supportsTouch","longname":"module:interact.supportsTouch","kind":"member","memberof":"module:interact","scope":"static","___id":"T000002R001561","___s":true,"attribs":"(static) ","id":".supportsTouch","ancestors":["interact."],"signature":""},{"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":[1358,1376],"filename":"interact.ts","lineno":87,"columnno":0,"path":"/home/taye/proj/interact.js/packages/interact","code":{"id":"astnode100015541","name":"interact.use","type":"Identifier","value":"use","paramnames":[]},"shortpath":"packages/interact/interact.ts"},"description":"

Use a plugin

","alias":"module:interact.use","params":[{"type":{"names":["Object"]},"name":"plugin"},{"type":{"names":["function"]},"name":"plugin.install"}],"returns":[{"type":{"names":["interact"]}}],"name":"use","longname":"module:interact.use","kind":"member","memberof":"module:interact","scope":"static","___id":"T000002R001533","___s":true,"attribs":"(static) ","id":".use","ancestors":["interact."],"signature":""},{"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.ts","lineno":1,"columnno":0,"path":"/home/taye/proj/interact.js/packages/modifiers/snap","code":{},"shortpath":"packages/modifiers/snap/edges.ts"},"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":"T000004R000003","___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":"edges.ts","lineno":1,"columnno":0,"path":"/home/taye/proj/interact.js/packages/modifiers/snap","code":{},"shortpath":"packages/modifiers/snap/edges.ts"},"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":"T000002R001927","___s":true,"attribs":"","id":"modifiers/snapEdges","ancestors":[]}]},{"kind":"package","longname":"package:undefined","files":["/home/taye/proj/interact.js/packages/actions/drag.ts","/home/taye/proj/interact.js/packages/actions/drop/DropEvent.ts","/home/taye/proj/interact.js/packages/actions/drop/index.ts","/home/taye/proj/interact.js/packages/actions/gesture.ts","/home/taye/proj/interact.js/packages/actions/index.ts","/home/taye/proj/interact.js/packages/actions/resize.ts","/home/taye/proj/interact.js/packages/auto-scroll/index.ts","/home/taye/proj/interact.js/packages/auto-start/base.ts","/home/taye/proj/interact.js/packages/auto-start/dragAxis.ts","/home/taye/proj/interact.js/packages/auto-start/hold.ts","/home/taye/proj/interact.js/packages/auto-start/index.ts","/home/taye/proj/interact.js/packages/auto-start/InteractableMethods.ts","/home/taye/proj/interact.js/packages/core/defaultOptions.ts","/home/taye/proj/interact.js/packages/core/Eventable.ts","/home/taye/proj/interact.js/packages/core/Interactable.ts","/home/taye/proj/interact.js/packages/core/interactablePreventDefault.ts","/home/taye/proj/interact.js/packages/core/InteractEvent.ts","/home/taye/proj/interact.js/packages/core/Interaction.ts","/home/taye/proj/interact.js/packages/core/interactions.ts","/home/taye/proj/interact.js/packages/core/PointerInfo.ts","/home/taye/proj/interact.js/packages/core/scope.ts","/home/taye/proj/interact.js/packages/inertia/index.ts","/home/taye/proj/interact.js/packages/interact/index.ts","/home/taye/proj/interact.js/packages/interact/interact.ts","/home/taye/proj/interact.js/packages/interactjs/index.ts","/home/taye/proj/interact.js/packages/modifiers/base.ts","/home/taye/proj/interact.js/packages/modifiers/index.ts","/home/taye/proj/interact.js/packages/modifiers/restrict/edges.ts","/home/taye/proj/interact.js/packages/modifiers/restrict/pointer.ts","/home/taye/proj/interact.js/packages/modifiers/restrict/size.ts","/home/taye/proj/interact.js/packages/modifiers/snap/edges.ts","/home/taye/proj/interact.js/packages/modifiers/snap/pointer.ts","/home/taye/proj/interact.js/packages/modifiers/snap/size.ts","/home/taye/proj/interact.js/packages/pointer-events/base.ts","/home/taye/proj/interact.js/packages/pointer-events/holdRepeat.ts","/home/taye/proj/interact.js/packages/pointer-events/index.ts","/home/taye/proj/interact.js/packages/pointer-events/interactableTargets.ts","/home/taye/proj/interact.js/packages/pointer-events/PointerEvent.ts","/home/taye/proj/interact.js/packages/reflow/index.ts","/home/taye/proj/interact.js/packages/types/index.ts","/home/taye/proj/interact.js/packages/types/interactjs-test.ts","/home/taye/proj/interact.js/packages/utils/arr.ts","/home/taye/proj/interact.js/packages/utils/browser.ts","/home/taye/proj/interact.js/packages/utils/clone.ts","/home/taye/proj/interact.js/packages/utils/domObjects.ts","/home/taye/proj/interact.js/packages/utils/domUtils.ts","/home/taye/proj/interact.js/packages/utils/events.ts","/home/taye/proj/interact.js/packages/utils/extend.ts","/home/taye/proj/interact.js/packages/utils/getOriginXY.ts","/home/taye/proj/interact.js/packages/utils/hypot.ts","/home/taye/proj/interact.js/packages/utils/index.ts","/home/taye/proj/interact.js/packages/utils/interactionFinder.ts","/home/taye/proj/interact.js/packages/utils/is.ts","/home/taye/proj/interact.js/packages/utils/isWindow.ts","/home/taye/proj/interact.js/packages/utils/normalizeListeners.ts","/home/taye/proj/interact.js/packages/utils/pointerExtend.ts","/home/taye/proj/interact.js/packages/utils/pointerUtils.ts","/home/taye/proj/interact.js/packages/utils/raf.ts","/home/taye/proj/interact.js/packages/utils/rect.ts","/home/taye/proj/interact.js/packages/utils/Signals.ts","/home/taye/proj/interact.js/packages/utils/snappers/grid.ts","/home/taye/proj/interact.js/packages/utils/snappers/index.ts","/home/taye/proj/interact.js/packages/utils/window.ts","/home/taye/proj/interact.js/docs/index.md"],"___id":"T000002R003041","___s":true,"attribs":"","id":"package:","ancestors":[]},{"comment":"/**\n * Prevent the default behaviour of the original Event\n */","meta":{"range":[1630,1693],"filename":"PointerEvent.ts","lineno":76,"columnno":2,"path":"/home/taye/proj/interact.js/packages/pointer-events","code":{"id":"astnode100021773","name":"preventDefault","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/pointer-events/PointerEvent.ts"},"description":"

Prevent the default behaviour of the original Event

","name":"preventDefault","longname":"preventDefault","kind":"function","scope":"global","params":[],"___id":"T000002R002312","___s":true,"attribs":"","id":"preventDefault","signature":"()","ancestors":[]},{"comment":"/**\n * Don't call any other listeners (even on the current target)\n */","meta":{"range":[1902,2005],"filename":"PointerEvent.ts","lineno":90,"columnno":2,"path":"/home/taye/proj/interact.js/packages/pointer-events","code":{"id":"astnode100021794","name":"stopImmediatePropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/pointer-events/PointerEvent.ts"},"description":"

Don't call any other listeners (even on the current target)

","name":"stopImmediatePropagation","longname":"stopImmediatePropagation","kind":"function","scope":"global","params":[],"___id":"T000002R002315","___s":true,"attribs":"","id":"stopImmediatePropagation","signature":"()","ancestors":[]},{"comment":"/**\n * Don't call listeners on the remaining targets\n */","meta":{"range":[1761,1820],"filename":"PointerEvent.ts","lineno":83,"columnno":2,"path":"/home/taye/proj/interact.js/packages/pointer-events","code":{"id":"astnode100021784","name":"stopPropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/pointer-events/PointerEvent.ts"},"description":"

Don't call listeners on the remaining targets

","name":"stopPropagation","longname":"stopPropagation","kind":"function","scope":"global","params":[],"___id":"T000002R002313","___s":true,"attribs":"","id":"stopPropagation","signature":"()","ancestors":[]}] \ No newline at end of file diff --git a/packages/interactjs/dist/docs/module-interact.html b/packages/interactjs/dist/docs/module-interact.html index 9f0788e4b..b7c54ca1f 100644 --- a/packages/interactjs/dist/docs/module-interact.html +++ b/packages/interactjs/dist/docs/module-interact.html @@ -698,7 +698,7 @@

(static) Source:
diff --git a/packages/interactjs/dist/docs/packages_actions_drag.ts.html b/packages/interactjs/dist/docs/packages_actions_drag.ts.html index e8938b4f3..1bea5c338 100644 --- a/packages/interactjs/dist/docs/packages_actions_drag.ts.html +++ b/packages/interactjs/dist/docs/packages_actions_drag.ts.html @@ -72,8 +72,7 @@

packages/actions/drag.ts

export type DragEvent = Interact.InteractEvent<ActionName.Drag> -export type DraggableMethod = (options?: Interact.OrBoolean<Interact.DraggableOptions> | boolean) - => Interact.Interactable | Interact.DropzoneOptions +export type DraggableMethod = Interact.ActionMethod<Interact.DraggableOptions> function install (scope: Scope) { const { @@ -91,7 +90,7 @@

packages/actions/drag.ts

Interactable.prototype.draggable = drag.draggable - actions.drag = drag + actions[ActionName.Drag] = drag actions.names.push(ActionName.Drag) arr.merge(actions.eventTypes, [ 'dragstart', @@ -179,7 +178,7 @@

packages/actions/drag.ts

* @return {boolean | Interactable} boolean indicating if this can be the * target of drag events, or this Interctable */ -function draggable (this: Interact.Interactable, options?: Interact.DraggableOptions | boolean) { +const draggable: DraggableMethod = function draggable (this: Interact.Interactable, options?: Interact.DraggableOptions | boolean): any { if (is.object(options)) { this.options.drag.enabled = options.enabled !== false this.setPerAction('drag', options) diff --git a/packages/interactjs/dist/docs/packages_actions_drop_index.ts.html b/packages/interactjs/dist/docs/packages_actions_drop_index.ts.html index 37cdea7d7..aec05274f 100644 --- a/packages/interactjs/dist/docs/packages_actions_drop_index.ts.html +++ b/packages/interactjs/dist/docs/packages_actions_drop_index.ts.html @@ -41,7 +41,8 @@

packages/actions/drop/index.ts

-
import InteractEvent from '@interactjs/core/InteractEvent'
+            
import Interactable from '@interactjs/core/Interactable'
+import InteractEvent from '@interactjs/core/InteractEvent'
 import { Scope } from '@interactjs/core/scope'
 import * as utils from '@interactjs/utils'
 import DropEvent from './DropEvent'
@@ -64,7 +65,23 @@ 

packages/actions/drop/index.ts

declare module '@interactjs/core/Interaction' { interface Interaction { - dropStatus?: { [key: string]: any } + dropStatus?: { + cur: { + dropzone: Interactable, // the dropzone a drag target might be dropped into + element: Element, // the element at the time of checking + }, + prev: { + dropzone: Interactable, // the dropzone that was recently dragged away from + element: Element, // the element at the time of checking + }, + rejected: boolean, // wheather the potential drop was rejected from a listener + events: any, // the drop events related to the current drag event + activeDrops: Array<{ + dropzone: Interactable + Element: Element + rect: Interact.Rect + }>, + } } } @@ -92,7 +109,7 @@

packages/actions/drop/index.ts

/** @lends module:interact */ interact, /** @lends Interactable */ - Interactable, + Interactable, // eslint-disable-line no-shadow interactions, defaults, } = scope @@ -100,7 +117,19 @@

packages/actions/drop/index.ts

interactions.signals.on('after-action-start', ({ interaction, event, iEvent: dragEvent }) => { if (interaction.prepared.name !== 'drag') { return } - const { dropStatus } = interaction + const dropStatus = interaction.dropStatus = interaction.dropStatus || { + cur: { + dropzone: null, + element: null, + }, + prev: { + dropzone: null, + element: null, + }, + rejected: null, + events: null, + activeDrops: null, + } // reset active dropzones dropStatus.activeDrops = null @@ -140,22 +169,6 @@

packages/actions/drop/index.ts

interaction.dropStatus.events = null }) - interactions.signals.on('new', (interaction) => { - interaction.dropStatus = { - cur: { - dropzone : null, // the dropzone a drag target might be dropped into - element : null, // the element at the time of checking - }, - prev: { - dropzone : null, // the dropzone that was recently dragged away from - element : null, // the element at the time of checking - }, - rejected : false, // wheather the potential drop was rejected from a listener - events : null, // the drop events related to the current drag event - activeDrops: null, // an array of { dropzone, element, rect } - } - }) - interactions.signals.on('stop', ({ interaction: { dropStatus } }) => { dropStatus.cur.dropzone = dropStatus.cur.element = dropStatus.prev.dropzone = dropStatus.prev.element = null diff --git a/packages/interactjs/dist/docs/packages_actions_gesture.ts.html b/packages/interactjs/dist/docs/packages_actions_gesture.ts.html index bb4d84cc6..041f10099 100644 --- a/packages/interactjs/dist/docs/packages_actions_gesture.ts.html +++ b/packages/interactjs/dist/docs/packages_actions_gesture.ts.html @@ -45,7 +45,19 @@

packages/actions/gesture.ts

import { ActionName, Scope } from '@interactjs/core/scope' import * as utils from '@interactjs/utils' -export type GesturableMethod = (options?: Interact.GesturableOptions | boolean) => Interact.Interactable | Interact.GesturableOptions +export type GesturableMethod = Interact.ActionMethod<Interact.GesturableOptions> + +declare module '@interactjs/core/Interaction' { + interface Interaction { + gesture?: { + startAngle: number + startDistance: number + prevScale: number + prevAngle: number + prevDistance: number + } + } +} declare module '@interactjs/core/Interactable' { interface Interactable { @@ -72,7 +84,21 @@

packages/actions/gesture.ts

(ActionName as any).Gesture = 'gesture' -export type GestureEvent = Interact.InteractEvent<ActionName.Gesture> +export interface GestureEvent extends Interact.InteractEvent<ActionName.Gesture> { + distance: number + angle: number + da: number // angle change + scale: number // ratio of distance start to current event + ds: number // scale change + box: Interact.Rect // enclosing box of all points + touches: Interact.PointerType[] +} + +export interface GestureSignalArg extends Interact.SignalArg { + iEvent: GestureEvent + interaction: Interact.Interaction<ActionName.Gesture> + event: Interact.PointerEventType | GestureEvent +} function install (scope: Scope) { const { @@ -121,7 +147,7 @@

packages/actions/gesture.ts

} return this.options.gesture as Interact.Options - } + } as GesturableMethod interactions.signals.on('action-start', updateGestureProps) interactions.signals.on('action-move', updateGestureProps) @@ -203,7 +229,7 @@

packages/actions/gesture.ts

} } -function updateGestureProps ({ interaction, iEvent, event, phase }) { +function updateGestureProps ({ interaction, iEvent, event, phase }: GestureSignalArg) { if (interaction.prepared.name !== 'gesture') { return } const pointers = interaction.pointers.map((p) => p.pointer) @@ -211,7 +237,7 @@

packages/actions/gesture.ts

const ending = phase === 'end' const deltaSource = interaction.target.options.deltaSource - iEvent.touches = [pointers[0].pointer, pointers[1].pointer] + iEvent.touches = [pointers[0], pointers[1]] if (starting) { iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource) @@ -222,11 +248,13 @@

packages/actions/gesture.ts

iEvent.da = 0 } else if (ending || event instanceof InteractEvent) { - iEvent.distance = interaction.prevEvent.distance - iEvent.box = interaction.prevEvent.box - iEvent.scale = interaction.prevEvent.scale + const prevEvent = interaction.prevEvent as GestureEvent + + iEvent.distance = prevEvent.distance + iEvent.box = prevEvent.box + iEvent.scale = prevEvent.scale iEvent.ds = iEvent.scale - 1 - iEvent.angle = interaction.prevEvent.angle + iEvent.angle = prevEvent.angle iEvent.da = iEvent.angle - interaction.gesture.startAngle } else { diff --git a/packages/interactjs/dist/docs/packages_actions_resize.ts.html b/packages/interactjs/dist/docs/packages_actions_resize.ts.html index 74ee91932..db82f7b52 100644 --- a/packages/interactjs/dist/docs/packages_actions_resize.ts.html +++ b/packages/interactjs/dist/docs/packages_actions_resize.ts.html @@ -41,12 +41,13 @@

packages/actions/resize.ts

-
import { Action, Interaction } from '@interactjs/core/Interaction'
+            
import { ActionProps, Interaction } from '@interactjs/core/Interaction'
 import { ActionName, Scope } from '@interactjs/core/scope'
 import * as utils from '@interactjs/utils'
 
 export type EdgeName = 'top' | 'left' | 'bottom' | 'right'
-export type ResizableMethod = (options?: Interact.OrBoolean<Interact.ResizableOptions> | boolean) => Interact.Interactable | Interact.ResizableOptions
+
+export type ResizableMethod = Interact.ActionMethod<Interact.ResizableOptions>
 
 declare module '@interactjs/core/Interactable' {
   interface Interactable {
@@ -57,6 +58,18 @@ 

packages/actions/resize.ts

declare module '@interactjs/core/Interaction' { interface Interaction { resizeAxes: 'x' | 'y' | 'xy' + resizeRects: { + start: Interact.Rect + current: Interact.Rect + inverted: Interact.Rect + previous: Interact.Rect + delta: Interact.Rect + } + resizeStartAspectRatio: number + } + + interface ActionProps { + _linkedEdges?: { [key: string]: boolean } } } @@ -154,9 +167,9 @@

packages/actions/resize.ts

* @return {boolean | Interactable} A boolean indicating if this can be the * target of resize elements, or this Interactable */ - Interactable.prototype.resizable = function (this: Interact.Interactable, options: Interact.RestrictOption | boolean) { + Interactable.prototype.resizable = function (this: Interact.Interactable, options: Interact.ResizableOptions | boolean) { return resizable(this, options, scope) - } + } as ResizableMethod actions[ActionName.Resize] = resize actions.names.push(ActionName.Resize) @@ -252,7 +265,7 @@

packages/actions/resize.ts

cursors: null as unknown as ReturnType<typeof initCursors>, - getCursor (action: Action) { + getCursor (action: ActionProps) { const cursors = resize.cursors as { [key: string]: string } if (action.axis) { return cursors[action.name + action.axis] @@ -282,7 +295,7 @@

packages/actions/resize.ts

interactable.setPerAction('resize', options) interactable.setOnEvents('resize', options) - if (/^x$|^y$|^xy$/.test(options.axis as string)) { + if (utils.is.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) { interactable.options.resize.axis = options.axis } else if (options.axis === null) { @@ -375,7 +388,7 @@

packages/actions/resize.ts

}) } -function start ({ iEvent, interaction }) { +function start ({ iEvent, interaction }: Interact.SignalArg) { if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return } @@ -421,10 +434,10 @@

packages/actions/resize.ts

bottom: 0, height: 0, }, - } + }; - iEvent.rect = interaction.resizeRects.inverted - iEvent.deltaRect = interaction.resizeRects.delta + (iEvent as ResizeEvent).rect = interaction.resizeRects.inverted; + (iEvent as ResizeEvent).deltaRect = interaction.resizeRects.delta } function move ({ iEvent, interaction }) { diff --git a/packages/interactjs/dist/docs/packages_auto-start_base.ts.html b/packages/interactjs/dist/docs/packages_auto-start_base.ts.html index 98ac73dbd..0dab36ae6 100644 --- a/packages/interactjs/dist/docs/packages_auto-start_base.ts.html +++ b/packages/interactjs/dist/docs/packages_auto-start_base.ts.html @@ -59,6 +59,11 @@

packages/auto-start/base.ts

} declare module '@interactjs/core/defaultOptions' { + interface BaseDefaults { + actionChecker? + styleCursor? + } + interface PerActionDefaults { manualStart?: boolean max?: number diff --git a/packages/interactjs/dist/docs/packages_core_InteractEvent.ts.html b/packages/interactjs/dist/docs/packages_core_InteractEvent.ts.html index 91a219b29..978c535f1 100644 --- a/packages/interactjs/dist/docs/packages_core_InteractEvent.ts.html +++ b/packages/interactjs/dist/docs/packages_core_InteractEvent.ts.html @@ -47,6 +47,7 @@

packages/core/InteractEvent.ts

import defaults from './defaultOptions' import Interactable from './Interactable' import Interaction from './Interaction' +import { ActionName } from './scope' export enum EventPhase { Start = 'start', @@ -56,7 +57,7 @@

packages/core/InteractEvent.ts

} export class InteractEvent< - T extends Interact.ActionName = Interact.ActionName, + T extends ActionName = any, P extends EventPhase = EventPhase._NONE, > { type: string @@ -73,7 +74,7 @@

packages/core/InteractEvent.ts

metaKey: boolean // added by interact.js interactable: Interactable - interaction: any + interaction: Interaction<T> page: Interact.Point client: Interact.Point delta: Interact.Point @@ -93,13 +94,6 @@

packages/core/InteractEvent.ts

dragLeave?: Element // resize axes?: Interact.Point - // gestureend - distance?: number - angle?: number - da?: number // angle change - scale?: number // ratio of distance start to current event - ds?: number // scale change - box?: Interact.Rect // enclosing box of all points preEnd?: boolean immediatePropagationStopped = false propagationStopped = false diff --git a/packages/interactjs/dist/docs/packages_core_Interactable.ts.html b/packages/interactjs/dist/docs/packages_core_Interactable.ts.html index 8bbc8d931..0db5801d2 100644 --- a/packages/interactjs/dist/docs/packages_core_Interactable.ts.html +++ b/packages/interactjs/dist/docs/packages_core_Interactable.ts.html @@ -64,16 +64,16 @@

packages/core/Interactable.ts

} } - options!: Required<Options> + readonly options!: Required<Options> readonly _actions: Actions readonly target: Interact.Target readonly events = new Eventable() - readonly _context: Element + readonly _context: Document | Element readonly _win: Window readonly _doc: Document /** */ - constructor (target: Interact.Target, options: any, defaultContext: Element | Node) { + constructor (target: Interact.Target, options: any, defaultContext: Document | Element) { this._actions = options.actions this.target = target this._context = options.context || defaultContext @@ -83,7 +83,7 @@

packages/core/Interactable.ts

this.set(options) } - setOnEvents (actionName: string, phases: { [phase: string]: Interact.ListenersArg }) { + setOnEvents (actionName: string, phases: NonNullable<any>) { if (is.func(phases.onstart)) { this.on(`${actionName}start`, phases.onstart) } if (is.func(phases.onmove)) { this.on(`${actionName}move`, phases.onmove) } if (is.func(phases.onend)) { this.on(`${actionName}end`, phases.onend) } @@ -178,7 +178,7 @@

packages/core/Interactable.ts

} if (checker === null) { - delete this.options.getRect + delete this.getRect return this } @@ -333,7 +333,7 @@

packages/core/Interactable.ts

options = {} } - this.options = clone(defaults.base) as Required<Options> + (this.options as Required<Options>) = clone(defaults.base) as Required<Options> for (const actionName in this._actions.methodDict) { const methodName = this._actions.methodDict[actionName] diff --git a/packages/interactjs/dist/docs/packages_core_Interaction.ts.html b/packages/interactjs/dist/docs/packages_core_Interaction.ts.html index ab89fc0b2..6b4f067fb 100644 --- a/packages/interactjs/dist/docs/packages_core_Interaction.ts.html +++ b/packages/interactjs/dist/docs/packages_core_Interaction.ts.html @@ -47,13 +47,15 @@

packages/core/Interaction.ts

import PointerInfo from './PointerInfo' import { ActionName } from './scope' -export interface Action { - name: ActionName +export interface ActionProps<T extends ActionName = any> { + name: T axis?: 'x' | 'y' | 'xy' - edges?: Partial<Interact.Rect> + edges?: { + [edge in keyof Interact.Rect]?: boolean + } } -export class Interaction { +export class Interaction<T extends ActionName = any> { // current interactable being interacted with target: Interactable = null @@ -63,7 +65,7 @@

packages/core/Interaction.ts

_signals: utils.Signals // action that's ready to be fired on next move event - prepared: Action = { + prepared: ActionProps<T> = { name : null, axis : null, edges: null, @@ -90,7 +92,7 @@

packages/core/Interaction.ts

} // previous action event - prevEvent: InteractEvent = null + prevEvent: InteractEvent<T> = null pointerIsDown = false pointerWasMoved = false @@ -126,11 +128,11 @@

packages/core/Interaction.ts

} /** */ - constructor ({ pointerType, signals }: { pointerType: string, signals: utils.Signals }) { + constructor ({ pointerType, signals }: { pointerType?: string, signals: utils.Signals }) { this._signals = signals this.pointerType = pointerType - this._signals.fire('new', this) + this._signals.fire('new', { interaction: this }) } pointerDown (pointer, event, eventTarget) { @@ -190,7 +192,7 @@

packages/core/Interaction.ts

this._interacting = this._doPhase({ interaction: this, event: this.downEvent, - phase: 'start', + phase: EventPhase.Start, }) } @@ -274,7 +276,7 @@

packages/core/Interaction.ts

noBefore: false, }, signalArg || {}) - signalArg.phase = 'move' + signalArg.phase = EventPhase.Move this._doPhase(signalArg) } @@ -325,7 +327,7 @@

packages/core/Interaction.ts

* * @param {PointerEvent} [event] */ - end (event) { + end (event?: Interact.PointerEventType) { this._ending = true event = event || this._latestPointer.event let endPhaseResult @@ -334,7 +336,7 @@

packages/core/Interaction.ts

endPhaseResult = this._doPhase({ event, interaction: this, - phase: 'end', + phase: EventPhase.End, }) } @@ -376,7 +378,7 @@

packages/core/Interaction.ts

return this.pointers[this.getPointerIndex(pointer)] } - updatePointer (pointer, event, eventTarget, down) { + updatePointer (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Window | Document | Element, down?: boolean) { const id = utils.pointer.getPointerId(pointer) let pointerIndex = this.getPointerIndex(pointer) let pointerInfo = this.pointers[pointerIndex] @@ -472,7 +474,7 @@

packages/core/Interaction.ts

} } - _doPhase (signalArg) { + _doPhase (signalArg: Partial<Interact.SignalArg>) { const { event, phase, preEnd, type } = signalArg if (!signalArg.noBefore) { diff --git a/packages/interactjs/dist/docs/packages_reflow_index.ts.html b/packages/interactjs/dist/docs/packages_reflow_index.ts.html index 012fa1051..f60cd8249 100644 --- a/packages/interactjs/dist/docs/packages_reflow_index.ts.html +++ b/packages/interactjs/dist/docs/packages_reflow_index.ts.html @@ -42,14 +42,14 @@

packages/reflow/index.ts

import Interactable from '@interactjs/core/Interactable'
-import { Action, Interaction } from '@interactjs/core/Interaction'
+import { ActionProps, Interaction } from '@interactjs/core/Interaction'
 import { newInteraction } from '@interactjs/core/interactions'
 import { Scope } from '@interactjs/core/scope'
 import { arr, extend, is, pointer as pointerUtils, rect as rectUtils, win } from '@interactjs/utils'
 
 declare module '@interactjs/core/Interactable' {
   interface Interactable {
-    reflow: (action: Action) => ReturnType<typeof reflow>
+    reflow: (action: ActionProps) => ReturnType<typeof reflow>
   }
 }
 
@@ -102,7 +102,7 @@ 

packages/reflow/index.ts

} } -function reflow (interactable: Interactable, action: Action, scope: Scope) { +function reflow (interactable: Interactable, action: ActionProps, scope: Scope) { const elements = is.string(interactable.target) ? arr.from(interactable._context.querySelectorAll(interactable.target)) : [interactable.target] @@ -153,7 +153,7 @@

packages/reflow/index.ts

return promises && Promise.all(promises).then(() => interactable) } -function startReflow (scope: Scope, interactable: Interactable, element: Element, action: Action, event: any) { +function startReflow (scope: Scope, interactable: Interactable, element: Element, action: ActionProps, event: any) { const interaction = newInteraction({ pointerType: 'reflow' }, scope) const signalArg = { interaction, diff --git a/packages/interactjs/dist/interact.js b/packages/interactjs/dist/interact.js index b1ba89d05..951989196 100644 --- a/packages/interactjs/dist/interact.js +++ b/packages/interactjs/dist/interact.js @@ -1,24 +1,24 @@ /** - * interact.js v1.4.0-alpha.27+sha.12b8f8f-dirty + * interact.js v1.4.0-alpha.28+sha.e624c4d-dirty * * Copyright (c) 2012-2019 Taye Adeyemi * Released under the MIT License. * https://raw.github.com/taye/interact.js/master/LICENSE */ (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; -var _$arr_41 = {}; +var _$arr_42 = {}; "use strict"; -Object.defineProperty(_$arr_41, "__esModule", { +Object.defineProperty(_$arr_42, "__esModule", { value: true }); -_$arr_41.contains = contains; -_$arr_41.remove = remove; -_$arr_41.merge = merge; -_$arr_41.from = from; -_$arr_41.findIndex = findIndex; -_$arr_41.find = find; -_$arr_41.some = some; +_$arr_42.contains = contains; +_$arr_42.remove = remove; +_$arr_42.merge = merge; +_$arr_42.from = from; +_$arr_42.findIndex = findIndex; +_$arr_42.find = find; +_$arr_42.some = some; function contains(array, target) { return array.indexOf(target) !== -1; @@ -62,13 +62,13 @@ function some(array, func) { return findIndex(array, func) !== -1; } -var _$extend_47 = {}; +var _$extend_48 = {}; "use strict"; -Object.defineProperty(_$extend_47, "__esModule", { +Object.defineProperty(_$extend_48, "__esModule", { value: true }); -_$extend_47.default = extend; +_$extend_48.default = extend; function extend(dest, source) { for (var prop in source) { @@ -78,31 +78,31 @@ function extend(dest, source) { return dest; } -var _$isWindow_53 = {}; +var _$isWindow_54 = {}; "use strict"; -Object.defineProperty(_$isWindow_53, "__esModule", { +Object.defineProperty(_$isWindow_54, "__esModule", { value: true }); -_$isWindow_53.default = void 0; +_$isWindow_54.default = void 0; var _default = function _default(thing) { return !!(thing && thing.Window) && thing instanceof thing.Window; }; -_$isWindow_53.default = _default; +_$isWindow_54.default = _default; -var _$window_61 = {}; +var _$window_62 = {}; "use strict"; -Object.defineProperty(_$window_61, "__esModule", { +Object.defineProperty(_$window_62, "__esModule", { value: true }); -_$window_61.init = init; -_$window_61.getWindow = getWindow; -_$window_61.default = void 0; +_$window_62.init = init; +_$window_62.getWindow = getWindow; +_$window_62.default = void 0; -var _isWindow = _interopRequireDefault(_$isWindow_53); +var _isWindow = _interopRequireDefault(_$isWindow_54); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -144,66 +144,66 @@ function getWindow(node) { } win.init = init; -var ___default_61 = win; -_$window_61.default = ___default_61; +var ___default_62 = win; +_$window_62.default = ___default_62; -var _$is_52 = {}; +var _$is_53 = {}; "use strict"; -Object.defineProperty(_$is_52, "__esModule", { +Object.defineProperty(_$is_53, "__esModule", { value: true }); -_$is_52.array = _$is_52.plainObject = _$is_52.element = _$is_52.string = _$is_52.bool = _$is_52.number = _$is_52.func = _$is_52.object = _$is_52.docFrag = _$is_52.window = void 0; +_$is_53.array = _$is_53.plainObject = _$is_53.element = _$is_53.string = _$is_53.bool = _$is_53.number = _$is_53.func = _$is_53.object = _$is_53.docFrag = _$is_53.window = void 0; -var ___isWindow_52 = ___interopRequireDefault_52(_$isWindow_53); +var ___isWindow_53 = ___interopRequireDefault_53(_$isWindow_54); -var _window2 = ___interopRequireDefault_52(_$window_61); +var _window2 = ___interopRequireDefault_53(_$window_62); -function ___interopRequireDefault_52(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function ___interopRequireDefault_53(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } -var __window_52 = function window(thing) { - return thing === _window2.default.window || (0, ___isWindow_52.default)(thing); +var __window_53 = function window(thing) { + return thing === _window2.default.window || (0, ___isWindow_53.default)(thing); }; -_$is_52.window = __window_52; +_$is_53.window = __window_53; var docFrag = function docFrag(thing) { return object(thing) && thing.nodeType === 11; }; -_$is_52.docFrag = docFrag; +_$is_53.docFrag = docFrag; var object = function object(thing) { return !!thing && _typeof(thing) === 'object'; }; -_$is_52.object = object; +_$is_53.object = object; var func = function func(thing) { return typeof thing === 'function'; }; -_$is_52.func = func; +_$is_53.func = func; var number = function number(thing) { return typeof thing === 'number'; }; -_$is_52.number = number; +_$is_53.number = number; var bool = function bool(thing) { return typeof thing === 'boolean'; }; -_$is_52.bool = bool; +_$is_53.bool = bool; var string = function string(thing) { return typeof thing === 'string'; }; -_$is_52.string = string; +_$is_53.string = string; var element = function element(thing) { if (!thing || _typeof(thing) !== 'object') { @@ -216,35 +216,35 @@ var element = function element(thing) { : thing.nodeType === 1 && typeof thing.nodeName === 'string'; }; -_$is_52.element = element; +_$is_53.element = element; var plainObject = function plainObject(thing) { return object(thing) && !!thing.constructor && /function Object\b/.test(thing.constructor.toString()); }; -_$is_52.plainObject = plainObject; +_$is_53.plainObject = plainObject; var array = function array(thing) { return object(thing) && typeof thing.length !== 'undefined' && func(thing.splice); }; -_$is_52.array = array; +_$is_53.array = array; -var _$normalizeListeners_54 = {}; +var _$normalizeListeners_55 = {}; "use strict"; -Object.defineProperty(_$normalizeListeners_54, "__esModule", { +Object.defineProperty(_$normalizeListeners_55, "__esModule", { value: true }); -_$normalizeListeners_54.default = normalize; +_$normalizeListeners_55.default = normalize; -var _extend = ___interopRequireDefault_54(_$extend_47); +var _extend = ___interopRequireDefault_55(_$extend_48); -var is = _interopRequireWildcard(_$is_52); +var is = _interopRequireWildcard(_$is_53); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } -function ___interopRequireDefault_54(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function ___interopRequireDefault_55(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function normalize(type, listeners, result) { result = result || {}; @@ -300,11 +300,11 @@ Object.defineProperty(_$Eventable_13, "__esModule", { }); _$Eventable_13.default = void 0; -var arr = ___interopRequireWildcard_13(_$arr_41); +var arr = ___interopRequireWildcard_13(_$arr_42); -var ___extend_13 = ___interopRequireDefault_13(_$extend_47); +var ___extend_13 = ___interopRequireDefault_13(_$extend_48); -var _normalizeListeners = ___interopRequireDefault_13(_$normalizeListeners_54); +var _normalizeListeners = ___interopRequireDefault_13(_$normalizeListeners_55); function ___interopRequireDefault_13(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -408,6 +408,7 @@ Object.defineProperty(_$defaultOptions_18, "__esModule", { value: true }); _$defaultOptions_18.default = _$defaultOptions_18.defaults = void 0; +// tslint:disable no-empty-interface var defaults = { base: { preventDefault: 'auto', @@ -426,15 +427,15 @@ _$defaultOptions_18.defaults = defaults; var ___default_18 = defaults; _$defaultOptions_18.default = ___default_18; -var _$domObjects_44 = {}; +var _$domObjects_45 = {}; "use strict"; -Object.defineProperty(_$domObjects_44, "__esModule", { +Object.defineProperty(_$domObjects_45, "__esModule", { value: true }); -_$domObjects_44.default = void 0; +_$domObjects_45.default = void 0; var domObjects = { - init: __init_44, + init: __init_45, document: null, DocumentFragment: null, SVGElement: null, @@ -450,10 +451,10 @@ var domObjects = { function blank() {} -var ___default_44 = domObjects; -_$domObjects_44.default = ___default_44; +var ___default_45 = domObjects; +_$domObjects_45.default = ___default_45; -function __init_44(window) { +function __init_45(window) { var win = window; domObjects.document = win.document; domObjects.DocumentFragment = win.DocumentFragment || blank; @@ -467,26 +468,26 @@ function __init_44(window) { domObjects.PointerEvent = win.PointerEvent || win.MSPointerEvent; } -var _$browser_42 = {}; +var _$browser_43 = {}; "use strict"; -Object.defineProperty(_$browser_42, "__esModule", { +Object.defineProperty(_$browser_43, "__esModule", { value: true }); -_$browser_42.default = void 0; +_$browser_43.default = void 0; -var _domObjects = ___interopRequireDefault_42(_$domObjects_44); +var _domObjects = ___interopRequireDefault_43(_$domObjects_45); -var __is_42 = ___interopRequireWildcard_42(_$is_52); +var __is_43 = ___interopRequireWildcard_43(_$is_53); -var _window = ___interopRequireDefault_42(_$window_61); +var _window = ___interopRequireDefault_43(_$window_62); -function ___interopRequireWildcard_42(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } +function ___interopRequireWildcard_43(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } -function ___interopRequireDefault_42(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function ___interopRequireDefault_43(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var browser = { - init: __init_42, + init: __init_43, supportsTouch: null, supportsPointerEvent: null, isIOS7: null, @@ -498,11 +499,11 @@ var browser = { wheelEvent: null }; -function __init_42(window) { +function __init_43(window) { var Element = _domObjects.default.Element; var navigator = _window.default.window.navigator; // Does the browser support touch input? - browser.supportsTouch = 'ontouchstart' in window || __is_42.func(window.DocumentTouch) && _domObjects.default.document instanceof window.DocumentTouch; // Does the browser support PointerEvents + browser.supportsTouch = 'ontouchstart' in window || __is_43.func(window.DocumentTouch) && _domObjects.default.document instanceof window.DocumentTouch; // Does the browser support PointerEvents browser.supportsPointerEvent = !!_domObjects.default.PointerEvent; browser.isIOS = /iP(hone|od|ad)/.test(navigator.platform); // scrolling doesn't change the result of getClientRects on iOS 7 @@ -532,39 +533,39 @@ function __init_42(window) { browser.wheelEvent = 'onmousewheel' in _domObjects.default.document ? 'mousewheel' : 'wheel'; } -var ___default_42 = browser; -_$browser_42.default = ___default_42; +var ___default_43 = browser; +_$browser_43.default = ___default_43; -var _$domUtils_45 = {}; +var _$domUtils_46 = {}; "use strict"; -Object.defineProperty(_$domUtils_45, "__esModule", { +Object.defineProperty(_$domUtils_46, "__esModule", { value: true }); -_$domUtils_45.nodeContains = nodeContains; -_$domUtils_45.closest = closest; -_$domUtils_45.parentNode = parentNode; -_$domUtils_45.matchesSelector = matchesSelector; -_$domUtils_45.indexOfDeepestElement = indexOfDeepestElement; -_$domUtils_45.matchesUpTo = matchesUpTo; -_$domUtils_45.getActualElement = getActualElement; -_$domUtils_45.getScrollXY = getScrollXY; -_$domUtils_45.getElementClientRect = getElementClientRect; -_$domUtils_45.getElementRect = getElementRect; -_$domUtils_45.getPath = getPath; -_$domUtils_45.trySelector = trySelector; +_$domUtils_46.nodeContains = nodeContains; +_$domUtils_46.closest = closest; +_$domUtils_46.parentNode = parentNode; +_$domUtils_46.matchesSelector = matchesSelector; +_$domUtils_46.indexOfDeepestElement = indexOfDeepestElement; +_$domUtils_46.matchesUpTo = matchesUpTo; +_$domUtils_46.getActualElement = getActualElement; +_$domUtils_46.getScrollXY = getScrollXY; +_$domUtils_46.getElementClientRect = getElementClientRect; +_$domUtils_46.getElementRect = getElementRect; +_$domUtils_46.getPath = getPath; +_$domUtils_46.trySelector = trySelector; -var _browser = ___interopRequireDefault_45(_$browser_42); +var _browser = ___interopRequireDefault_46(_$browser_43); -var ___domObjects_45 = ___interopRequireDefault_45(_$domObjects_44); +var ___domObjects_46 = ___interopRequireDefault_46(_$domObjects_45); -var __is_45 = ___interopRequireWildcard_45(_$is_52); +var __is_46 = ___interopRequireWildcard_46(_$is_53); -var ___window_45 = ___interopRequireDefault_45(_$window_61); +var ___window_46 = ___interopRequireDefault_46(_$window_62); -function ___interopRequireWildcard_45(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } +function ___interopRequireWildcard_46(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } -function ___interopRequireDefault_45(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function ___interopRequireDefault_46(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function nodeContains(parent, child) { while (child) { @@ -579,7 +580,7 @@ function nodeContains(parent, child) { } function closest(element, selector) { - while (__is_45.element(element)) { + while (__is_46.element(element)) { if (matchesSelector(element, selector)) { return element; } @@ -593,10 +594,10 @@ function closest(element, selector) { function parentNode(node) { var parent = node.parentNode; - if (__is_45.docFrag(parent)) { + if (__is_46.docFrag(parent)) { // skip past #shado-root fragments // tslint:disable-next-line - while ((parent = parent.host) && __is_45.docFrag(parent)) { + while ((parent = parent.host) && __is_46.docFrag(parent)) { continue; } @@ -608,7 +609,7 @@ function parentNode(node) { function matchesSelector(element, selector) { // remove /deep/ from selectors if shadowDOM polyfill is used - if (___window_45.default.window !== ___window_45.default.realWindow) { + if (___window_46.default.window !== ___window_46.default.realWindow) { selector = selector.replace(/\/deep\//g, ' '); } @@ -662,7 +663,7 @@ function indexOfDeepestElement(elements) { // an HTMLElement - if (deepestZone instanceof ___domObjects_45.default.HTMLElement && dropzone instanceof ___domObjects_45.default.SVGElement && !(dropzone instanceof ___domObjects_45.default.SVGSVGElement)) { + if (deepestZone instanceof ___domObjects_46.default.HTMLElement && dropzone instanceof ___domObjects_46.default.SVGElement && !(dropzone instanceof ___domObjects_46.default.SVGSVGElement)) { if (dropzone === deepestZone.parentNode) { continue; } @@ -706,7 +707,7 @@ function indexOfDeepestElement(elements) { } function matchesUpTo(element, selector, limit) { - while (__is_45.element(element)) { + while (__is_46.element(element)) { if (matchesSelector(element, selector)) { return true; } @@ -722,11 +723,11 @@ function matchesUpTo(element, selector, limit) { } function getActualElement(element) { - return element instanceof ___domObjects_45.default.SVGElementInstance ? element.correspondingUseElement : element; + return element instanceof ___domObjects_46.default.SVGElementInstance ? element.correspondingUseElement : element; } function getScrollXY(relevantWindow) { - relevantWindow = relevantWindow || ___window_45.default.window; + relevantWindow = relevantWindow || ___window_46.default.window; return { x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft, y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop @@ -734,7 +735,7 @@ function getScrollXY(relevantWindow) { } function getElementClientRect(element) { - var clientRect = element instanceof ___domObjects_45.default.SVGElement ? element.getBoundingClientRect() : element.getClientRects()[0]; + var clientRect = element instanceof ___domObjects_46.default.SVGElement ? element.getBoundingClientRect() : element.getClientRects()[0]; return clientRect && { left: clientRect.left, right: clientRect.right, @@ -749,7 +750,7 @@ function getElementRect(element) { var clientRect = getElementClientRect(element); if (!_browser.default.isIOS7 && clientRect) { - var scroll = getScrollXY(___window_45.default.getWindow(element)); + var scroll = getScrollXY(___window_46.default.getWindow(element)); clientRect.left += scroll.x; clientRect.right += scroll.x; clientRect.top += scroll.y; @@ -771,50 +772,50 @@ function getPath(element) { } function trySelector(value) { - if (!__is_45.string(value)) { + if (!__is_46.string(value)) { return false; } // an exception will be raised if it is invalid - ___domObjects_45.default.document.querySelector(value); + ___domObjects_46.default.document.querySelector(value); return true; } -var _$rect_58 = {}; +var _$rect_59 = {}; "use strict"; -Object.defineProperty(_$rect_58, "__esModule", { +Object.defineProperty(_$rect_59, "__esModule", { value: true }); -_$rect_58.getStringOptionResult = getStringOptionResult; -_$rect_58.resolveRectLike = resolveRectLike; -_$rect_58.rectToXY = rectToXY; -_$rect_58.xywhToTlbr = xywhToTlbr; -_$rect_58.tlbrToXywh = tlbrToXywh; -_$rect_58.default = void 0; +_$rect_59.getStringOptionResult = getStringOptionResult; +_$rect_59.resolveRectLike = resolveRectLike; +_$rect_59.rectToXY = rectToXY; +_$rect_59.xywhToTlbr = xywhToTlbr; +_$rect_59.tlbrToXywh = tlbrToXywh; +_$rect_59.default = void 0; -/* removed: var _$domUtils_45 = require("./domUtils"); */; +/* removed: var _$domUtils_46 = require("./domUtils"); */; -var ___extend_58 = ___interopRequireDefault_58(_$extend_47); +var ___extend_59 = ___interopRequireDefault_59(_$extend_48); -var __is_58 = ___interopRequireWildcard_58(_$is_52); +var __is_59 = ___interopRequireWildcard_59(_$is_53); -function ___interopRequireWildcard_58(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } +function ___interopRequireWildcard_59(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } -function ___interopRequireDefault_58(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function ___interopRequireDefault_59(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function getStringOptionResult(value, interactable, element) { - if (!__is_58.string(value)) { + if (!__is_59.string(value)) { return null; } if (value === 'parent') { - value = (0, _$domUtils_45.parentNode)(element); + value = (0, _$domUtils_46.parentNode)(element); } else if (value === 'self') { value = interactable.getRect(element); } else { - value = (0, _$domUtils_45.closest)(element, value); + value = (0, _$domUtils_46.closest)(element, value); } return value; @@ -823,12 +824,12 @@ function getStringOptionResult(value, interactable, element) { function resolveRectLike(value, interactable, element, functionArgs) { value = getStringOptionResult(value, interactable, element) || value; - if (__is_58.func(value)) { + if (__is_59.func(value)) { value = value.apply(null, functionArgs); } - if (__is_58.element(value)) { - value = (0, _$domUtils_45.getElementRect)(value); + if (__is_59.element(value)) { + value = (0, _$domUtils_46.getElementRect)(value); } return value; @@ -843,7 +844,7 @@ function rectToXY(rect) { function xywhToTlbr(rect) { if (rect && !('left' in rect && 'top' in rect)) { - rect = (0, ___extend_58.default)({}, rect); + rect = (0, ___extend_59.default)({}, rect); rect.left = rect.x || 0; rect.top = rect.y || 0; rect.right = rect.right || rect.left + rect.width; @@ -855,7 +856,7 @@ function xywhToTlbr(rect) { function tlbrToXywh(rect) { if (rect && !('x' in rect && 'y' in rect)) { - rect = (0, ___extend_58.default)({}, rect); + rect = (0, ___extend_59.default)({}, rect); rect.x = rect.left || 0; rect.y = rect.top || 0; rect.width = rect.width || rect.right - rect.x; @@ -865,49 +866,49 @@ function tlbrToXywh(rect) { return rect; } -var ___default_58 = { +var ___default_59 = { getStringOptionResult: getStringOptionResult, resolveRectLike: resolveRectLike, rectToXY: rectToXY, xywhToTlbr: xywhToTlbr, tlbrToXywh: tlbrToXywh }; -_$rect_58.default = ___default_58; +_$rect_59.default = ___default_59; -var _$getOriginXY_48 = {}; +var _$getOriginXY_49 = {}; "use strict"; -Object.defineProperty(_$getOriginXY_48, "__esModule", { +Object.defineProperty(_$getOriginXY_49, "__esModule", { value: true }); -_$getOriginXY_48.default = ___default_48; +_$getOriginXY_49.default = ___default_49; -/* removed: var _$rect_58 = require("./rect"); */; +/* removed: var _$rect_59 = require("./rect"); */; -function ___default_48(target, element, action) { +function ___default_49(target, element, action) { var actionOptions = target.options[action]; var actionOrigin = actionOptions && actionOptions.origin; var origin = actionOrigin || target.options.origin; - var originRect = (0, _$rect_58.resolveRectLike)(origin, target, element, [target && element]); - return (0, _$rect_58.rectToXY)(originRect) || { + var originRect = (0, _$rect_59.resolveRectLike)(origin, target, element, [target && element]); + return (0, _$rect_59.rectToXY)(originRect) || { x: 0, y: 0 }; } -var _$hypot_49 = {}; +var _$hypot_50 = {}; "use strict"; -Object.defineProperty(_$hypot_49, "__esModule", { +Object.defineProperty(_$hypot_50, "__esModule", { value: true }); -_$hypot_49.default = void 0; +_$hypot_50.default = void 0; -var ___default_49 = function _default(x, y) { +var ___default_50 = function _default(x, y) { return Math.sqrt(x * x + y * y); }; -_$hypot_49.default = ___default_49; +_$hypot_50.default = ___default_50; var _$InteractEvent_14 = {}; "use strict"; @@ -917,11 +918,11 @@ Object.defineProperty(_$InteractEvent_14, "__esModule", { }); _$InteractEvent_14.default = _$InteractEvent_14.InteractEvent = _$InteractEvent_14.EventPhase = void 0; -var ___extend_14 = ___interopRequireDefault_14(_$extend_47); +var ___extend_14 = ___interopRequireDefault_14(_$extend_48); -var _getOriginXY = ___interopRequireDefault_14(_$getOriginXY_48); +var _getOriginXY = ___interopRequireDefault_14(_$getOriginXY_49); -var _hypot = ___interopRequireDefault_14(_$hypot_49); +var _hypot = ___interopRequireDefault_14(_$hypot_50); var _defaultOptions = ___interopRequireDefault_14(_$defaultOptions_18); @@ -1142,19 +1143,19 @@ _$InteractEvent_14.InteractEvent = InteractEvent; var ___default_14 = InteractEvent; _$InteractEvent_14.default = ___default_14; -var _$clone_43 = {}; +var _$clone_44 = {}; "use strict"; -Object.defineProperty(_$clone_43, "__esModule", { +Object.defineProperty(_$clone_44, "__esModule", { value: true }); -_$clone_43.default = clone; +_$clone_44.default = clone; -var __arr_43 = ___interopRequireWildcard_43(_$arr_41); +var __arr_44 = ___interopRequireWildcard_44(_$arr_42); -var __is_43 = ___interopRequireWildcard_43(_$is_52); +var __is_44 = ___interopRequireWildcard_44(_$is_53); -function ___interopRequireWildcard_43(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } +function ___interopRequireWildcard_44(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } function clone(source) { var dest = {}; @@ -1162,10 +1163,10 @@ function clone(source) { for (var prop in source) { var value = source[prop]; - if (__is_43.plainObject(value)) { + if (__is_44.plainObject(value)) { dest[prop] = clone(value); - } else if (__is_43.array(value)) { - dest[prop] = __arr_43.from(value); + } else if (__is_44.array(value)) { + dest[prop] = __arr_44.from(value); } else { dest[prop] = value; } @@ -1174,14 +1175,14 @@ function clone(source) { return dest; } -var _$pointerExtend_55 = {}; +var _$pointerExtend_56 = {}; "use strict"; -Object.defineProperty(_$pointerExtend_55, "__esModule", { +Object.defineProperty(_$pointerExtend_56, "__esModule", { value: true }); -_$pointerExtend_55.pointerExtend = pointerExtend; -_$pointerExtend_55.default = void 0; +_$pointerExtend_56.pointerExtend = pointerExtend; +_$pointerExtend_56.default = void 0; function pointerExtend(dest, source) { for (var prop in source) { @@ -1206,32 +1207,32 @@ function pointerExtend(dest, source) { pointerExtend.prefixedPropREs = { webkit: /(Movement[XY]|Radius[XY]|RotationAngle|Force)$/ }; -var ___default_55 = pointerExtend; -_$pointerExtend_55.default = ___default_55; +var ___default_56 = pointerExtend; +_$pointerExtend_56.default = ___default_56; -var _$pointerUtils_56 = {}; +var _$pointerUtils_57 = {}; "use strict"; -Object.defineProperty(_$pointerUtils_56, "__esModule", { +Object.defineProperty(_$pointerUtils_57, "__esModule", { value: true }); -_$pointerUtils_56.default = void 0; +_$pointerUtils_57.default = void 0; -var ___browser_56 = ___interopRequireDefault_56(_$browser_42); +var ___browser_57 = ___interopRequireDefault_57(_$browser_43); -var ___domObjects_56 = ___interopRequireDefault_56(_$domObjects_44); +var ___domObjects_57 = ___interopRequireDefault_57(_$domObjects_45); -var domUtils = ___interopRequireWildcard_56(_$domUtils_45); +var domUtils = ___interopRequireWildcard_57(_$domUtils_46); -var ___hypot_56 = ___interopRequireDefault_56(_$hypot_49); +var ___hypot_57 = ___interopRequireDefault_57(_$hypot_50); -var __is_56 = ___interopRequireWildcard_56(_$is_52); +var __is_57 = ___interopRequireWildcard_57(_$is_53); -var _pointerExtend = ___interopRequireDefault_56(_$pointerExtend_55); +var _pointerExtend = ___interopRequireDefault_57(_$pointerExtend_56); -function ___interopRequireWildcard_56(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } +function ___interopRequireWildcard_57(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } -function ___interopRequireDefault_56(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function ___interopRequireDefault_57(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var pointerUtils = { copyCoords: function copyCoords(dest, src) { @@ -1259,7 +1260,7 @@ var pointerUtils = { targetObj.timeStamp = dt; }, isNativePointer: function isNativePointer(pointer) { - return pointer instanceof ___domObjects_56.default.Event || pointer instanceof ___domObjects_56.default.Touch; + return pointer instanceof ___domObjects_57.default.Event || pointer instanceof ___domObjects_57.default.Touch; }, // Get specified X/Y coords for mouse or event.touches[0] getXY: function getXY(type, pointer, xy) { @@ -1275,7 +1276,7 @@ var pointerUtils = { y: 0 }; // Opera Mobile handles the viewport and scrolling oddly - if (___browser_56.default.isOperaMobile && pointerUtils.isNativePointer(pointer)) { + if (___browser_57.default.isOperaMobile && pointerUtils.isNativePointer(pointer)) { pointerUtils.getXY('screen', pointer, page); page.x += window.scrollX; page.y += window.scrollY; @@ -1288,7 +1289,7 @@ var pointerUtils = { getClientXY: function getClientXY(pointer, client) { client = client || {}; - if (___browser_56.default.isOperaMobile && pointerUtils.isNativePointer(pointer)) { + if (___browser_57.default.isOperaMobile && pointerUtils.isNativePointer(pointer)) { // Opera Mobile handles the viewport and scrolling oddly pointerUtils.getXY('screen', pointer, client); } else { @@ -1298,7 +1299,7 @@ var pointerUtils = { return client; }, getPointerId: function getPointerId(pointer) { - return __is_56.number(pointer.pointerId) ? pointer.pointerId : pointer.identifier; + return __is_57.number(pointer.pointerId) ? pointer.pointerId : pointer.identifier; }, setCoords: function setCoords(targetObj, pointers, timeStamp) { var pointer = pointers.length > 1 ? pointerUtils.pointerAverage(pointers) : pointers[0]; @@ -1309,13 +1310,13 @@ var pointerUtils = { pointerUtils.getClientXY(pointer, tmpXY); targetObj.client.x = tmpXY.x; targetObj.client.y = tmpXY.y; - targetObj.timeStamp = __is_56.number(timeStamp) ? timeStamp : new Date().getTime(); + targetObj.timeStamp = __is_57.number(timeStamp) ? timeStamp : new Date().getTime(); }, pointerExtend: _pointerExtend.default, getTouchPair: function getTouchPair(event) { var touches = []; // array of touches is supplied - if (__is_56.array(event)) { + if (__is_57.array(event)) { touches[0] = event[0]; touches[1] = event[1]; } // an event @@ -1378,6 +1379,8 @@ var pointerUtils = { y: minY, left: minX, top: minY, + right: maxX, + bottom: maxY, width: maxX - minX, height: maxY - minY }; @@ -1388,7 +1391,7 @@ var pointerUtils = { var touches = pointerUtils.getTouchPair(event); var dx = touches[0][sourceX] - touches[1][sourceX]; var dy = touches[0][sourceY] - touches[1][sourceY]; - return (0, ___hypot_56.default)(dx, dy); + return (0, ___hypot_57.default)(dx, dy); }, touchAngle: function touchAngle(event, deltaSource) { var sourceX = deltaSource + 'X'; @@ -1400,13 +1403,13 @@ var pointerUtils = { return angle; }, getPointerType: function getPointerType(pointer) { - return __is_56.string(pointer.pointerType) ? pointer.pointerType : __is_56.number(pointer.pointerType) ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType] // if the PointerEvent API isn't available, then the "pointer" must + return __is_57.string(pointer.pointerType) ? pointer.pointerType : __is_57.number(pointer.pointerType) ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType] // if the PointerEvent API isn't available, then the "pointer" must // be either a MouseEvent, TouchEvent, or Touch object - : /touch/.test(pointer.type) || pointer instanceof ___domObjects_56.default.Touch ? 'touch' : 'mouse'; + : /touch/.test(pointer.type) || pointer instanceof ___domObjects_57.default.Touch ? 'touch' : 'mouse'; }, // [ event.target, event.currentTarget ] getEventTargets: function getEventTargets(event) { - var path = __is_56.func(event.composedPath) ? event.composedPath() : event.path; + var path = __is_57.func(event.composedPath) ? event.composedPath() : event.path; return [domUtils.getActualElement(path ? path[0] : event.target), domUtils.getActualElement(event.currentTarget)]; }, newCoords: function newCoords() { @@ -1450,36 +1453,36 @@ var pointerUtils = { }; } }; -var ___default_56 = pointerUtils; -_$pointerUtils_56.default = ___default_56; +var ___default_57 = pointerUtils; +_$pointerUtils_57.default = ___default_57; -var _$events_46 = {}; +var _$events_47 = {}; "use strict"; -Object.defineProperty(_$events_46, "__esModule", { +Object.defineProperty(_$events_47, "__esModule", { value: true }); -_$events_46.default = _$events_46.FakeEvent = void 0; +_$events_47.default = _$events_47.FakeEvent = void 0; -/* removed: var _$arr_41 = require("./arr"); */; +/* removed: var _$arr_42 = require("./arr"); */; -var __domUtils_46 = ___interopRequireWildcard_46(_$domUtils_45); +var __domUtils_47 = ___interopRequireWildcard_47(_$domUtils_46); -var __is_46 = ___interopRequireWildcard_46(_$is_52); +var __is_47 = ___interopRequireWildcard_47(_$is_53); -var ___pointerExtend_46 = ___interopRequireDefault_46(_$pointerExtend_55); +var ___pointerExtend_47 = ___interopRequireDefault_47(_$pointerExtend_56); -var _pointerUtils = ___interopRequireDefault_46(_$pointerUtils_56); +var _pointerUtils = ___interopRequireDefault_47(_$pointerUtils_57); -function ___interopRequireDefault_46(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function ___interopRequireDefault_47(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -function ___interopRequireWildcard_46(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } +function ___interopRequireWildcard_47(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } -function ___classCallCheck_46(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +function ___classCallCheck_47(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function ___defineProperties_46(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } +function ___defineProperties_47(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } -function ___createClass_46(Constructor, protoProps, staticProps) { if (protoProps) ___defineProperties_46(Constructor.prototype, protoProps); if (staticProps) ___defineProperties_46(Constructor, staticProps); return Constructor; } +function ___createClass_47(Constructor, protoProps, staticProps) { if (protoProps) ___defineProperties_47(Constructor.prototype, protoProps); if (staticProps) ___defineProperties_47(Constructor, staticProps); return Constructor; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } @@ -1513,13 +1516,13 @@ function add(element, type, listener, optionalArg) { target.typeCount++; } - if (!(0, _$arr_41.contains)(target.events[type], listener)) { + if (!(0, _$arr_42.contains)(target.events[type], listener)) { element.addEventListener(type, listener, events.supportsOptions ? options : !!options.capture); target.events[type].push(listener); } } -function __remove_46(element, type, listener, optionalArg) { +function __remove_47(element, type, listener, optionalArg) { var options = getOptions(optionalArg); var elementIndex = elements.indexOf(element); var target = targets[elementIndex]; @@ -1531,7 +1534,7 @@ function __remove_46(element, type, listener, optionalArg) { if (type === 'all') { for (type in target.events) { if (target.events.hasOwnProperty(type)) { - __remove_46(element, type, 'all'); + __remove_47(element, type, 'all'); } } @@ -1543,7 +1546,7 @@ function __remove_46(element, type, listener, optionalArg) { if (listener === 'all') { for (var i = 0; i < len; i++) { - __remove_46(element, type, target.events[type][i], options); + __remove_47(element, type, target.events[type][i], options); } return; @@ -1639,8 +1642,8 @@ function removeDelegate(selector, context, type, listener, optionalArg) { delegated.contexts.splice(index, 1); delegated.listeners.splice(index, 1); // remove delegate function from context - __remove_46(context, type, delegateListener); - __remove_46(context, type, delegateUseCapture, true); // remove the arrays if they are empty + __remove_47(context, type, delegateListener); + __remove_47(context, type, delegateUseCapture, true); // remove the arrays if they are empty if (!delegated.selectors.length) { delegatedEvents[type] = null; @@ -1673,12 +1676,12 @@ function delegateListener(event, optionalArg) { var element = eventTarget; // climb up document tree looking for selector matches - while (__is_46.element(element)) { + while (__is_47.element(element)) { for (var i = 0; i < delegated.selectors.length; i++) { var selector = delegated.selectors[i]; var context = delegated.contexts[i]; - if (__domUtils_46.matchesSelector(element, selector) && __domUtils_46.nodeContains(context, eventTarget) && __domUtils_46.nodeContains(context, element)) { + if (__domUtils_47.matchesSelector(element, selector) && __domUtils_47.nodeContains(context, eventTarget) && __domUtils_47.nodeContains(context, element)) { var listeners = delegated.listeners[i]; fakeEvent.currentTarget = element; @@ -1700,7 +1703,7 @@ function delegateListener(event, optionalArg) { } } - element = __domUtils_46.parentNode(element); + element = __domUtils_47.parentNode(element); } } @@ -1709,7 +1712,7 @@ function delegateUseCapture(event) { } function getOptions(param) { - return __is_46.object(param) ? param : { + return __is_47.object(param) ? param : { capture: param }; } @@ -1718,14 +1721,14 @@ var FakeEvent = /*#__PURE__*/ function () { function FakeEvent(originalEvent) { - ___classCallCheck_46(this, FakeEvent); + ___classCallCheck_47(this, FakeEvent); this.originalEvent = originalEvent; // duplicate the event so that currentTarget can be changed - (0, ___pointerExtend_46.default)(this, originalEvent); + (0, ___pointerExtend_47.default)(this, originalEvent); } - ___createClass_46(FakeEvent, [{ + ___createClass_47(FakeEvent, [{ key: "preventOriginalDefault", value: function preventOriginalDefault() { this.originalEvent.preventDefault(); @@ -1745,10 +1748,10 @@ function () { return FakeEvent; }(); -_$events_46.FakeEvent = FakeEvent; +_$events_47.FakeEvent = FakeEvent; var events = { add: add, - remove: __remove_46, + remove: __remove_47, addDelegate: addDelegate, removeDelegate: removeDelegate, delegateListener: delegateListener, @@ -1772,8 +1775,8 @@ var events = { }); } }; -var ___default_46 = events; -_$events_46.default = ___default_46; +var ___default_47 = events; +_$events_47.default = ___default_47; var _$Interactable_15 = {}; "use strict"; @@ -1783,23 +1786,23 @@ Object.defineProperty(_$Interactable_15, "__esModule", { }); _$Interactable_15.default = _$Interactable_15.Interactable = void 0; -var __arr_15 = ___interopRequireWildcard_15(_$arr_41); +var __arr_15 = ___interopRequireWildcard_15(_$arr_42); -var ___browser_15 = ___interopRequireDefault_15(_$browser_42); +var ___browser_15 = ___interopRequireDefault_15(_$browser_43); -var _clone = ___interopRequireDefault_15(_$clone_43); +var _clone = ___interopRequireDefault_15(_$clone_44); -/* removed: var _$domUtils_45 = require("@interactjs/utils/domUtils"); */; +/* removed: var _$domUtils_46 = require("@interactjs/utils/domUtils"); */; -var _events = ___interopRequireDefault_15(_$events_46); +var _events = ___interopRequireDefault_15(_$events_47); -var ___extend_15 = ___interopRequireDefault_15(_$extend_47); +var ___extend_15 = ___interopRequireDefault_15(_$extend_48); -var __is_15 = ___interopRequireWildcard_15(_$is_52); +var __is_15 = ___interopRequireWildcard_15(_$is_53); -var ___normalizeListeners_15 = ___interopRequireDefault_15(_$normalizeListeners_54); +var ___normalizeListeners_15 = ___interopRequireDefault_15(_$normalizeListeners_55); -/* removed: var _$window_61 = require("@interactjs/utils/window"); */; +/* removed: var _$window_62 = require("@interactjs/utils/window"); */; var _Eventable = ___interopRequireDefault_15(_$Eventable_13); @@ -1825,7 +1828,7 @@ function () { this._actions = options.actions; this.target = target; this._context = options.context || defaultContext; - this._win = (0, _$window_61.getWindow)((0, _$domUtils_45.trySelector)(target) ? this._context : target); + this._win = (0, _$window_62.getWindow)((0, _$domUtils_46.trySelector)(target) ? this._context : target); this._doc = this._win.document; this.set(options); } @@ -1913,7 +1916,7 @@ function () { element = element || this._context.querySelector(this.target); } - return (0, _$domUtils_45.getElementRect)(element); + return (0, _$domUtils_46.getElementRect)(element); } /** * Returns or sets the function used to calculate the interactable's @@ -1933,7 +1936,7 @@ function () { } if (checker === null) { - delete this.options.getRect; + delete this.getRect; return this; } @@ -1942,7 +1945,7 @@ function () { }, { key: "_backCompatOption", value: function _backCompatOption(optionName, newValue) { - if ((0, _$domUtils_45.trySelector)(newValue) || __is_15.object(newValue)) { + if ((0, _$domUtils_46.trySelector)(newValue) || __is_15.object(newValue)) { this.options[optionName] = newValue; for (var _i = 0; _i < this._actions.names.length; _i++) { @@ -2008,7 +2011,7 @@ function () { }, { key: "inContext", value: function inContext(element) { - return this._context === element.ownerDocument || (0, _$domUtils_45.nodeContains)(this._context, element); + return this._context === element.ownerDocument || (0, _$domUtils_46.nodeContains)(this._context, element); } /** * Calls listeners for the given InteractEvent type bound globally @@ -2204,30 +2207,30 @@ _$PointerInfo_17.PointerInfo = PointerInfo; var ___default_17 = PointerInfo; _$PointerInfo_17.default = ___default_17; -var _$Signals_40 = {}; +var _$Signals_41 = {}; "use strict"; -Object.defineProperty(_$Signals_40, "__esModule", { +Object.defineProperty(_$Signals_41, "__esModule", { value: true }); -_$Signals_40.default = void 0; +_$Signals_41.default = void 0; -function ___classCallCheck_40(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +function ___classCallCheck_41(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function ___defineProperties_40(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } +function ___defineProperties_41(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } -function ___createClass_40(Constructor, protoProps, staticProps) { if (protoProps) ___defineProperties_40(Constructor.prototype, protoProps); if (staticProps) ___defineProperties_40(Constructor, staticProps); return Constructor; } +function ___createClass_41(Constructor, protoProps, staticProps) { if (protoProps) ___defineProperties_41(Constructor.prototype, protoProps); if (staticProps) ___defineProperties_41(Constructor, staticProps); return Constructor; } var Signals = /*#__PURE__*/ function () { function Signals() { - ___classCallCheck_40(this, Signals); + ___classCallCheck_41(this, Signals); this.listeners = {}; } - ___createClass_40(Signals, [{ + ___createClass_41(Signals, [{ key: "on", value: function on(name, listener) { if (!this.listeners[name]) { @@ -2275,23 +2278,23 @@ function () { return Signals; }(); -var ___default_40 = Signals; -_$Signals_40.default = ___default_40; +var ___default_41 = Signals; +_$Signals_41.default = ___default_41; -var _$raf_57 = {}; +var _$raf_58 = {}; "use strict"; -Object.defineProperty(_$raf_57, "__esModule", { +Object.defineProperty(_$raf_58, "__esModule", { value: true }); -_$raf_57.default = void 0; +_$raf_58.default = void 0; var lastTime = 0; var _request; var _cancel; -function __init_57(window) { +function __init_58(window) { _request = window.requestAnimationFrame; _cancel = window.cancelAnimationFrame; @@ -2323,148 +2326,148 @@ function __init_57(window) { } } -var ___default_57 = { +var ___default_58 = { request: function request(callback) { return _request(callback); }, cancel: function cancel(token) { return _cancel(token); }, - init: __init_57 + init: __init_58 }; -_$raf_57.default = ___default_57; +_$raf_58.default = ___default_58; -var _$utils_50 = {}; +var _$utils_51 = {}; "use strict"; -Object.defineProperty(_$utils_50, "__esModule", { +Object.defineProperty(_$utils_51, "__esModule", { value: true }); -_$utils_50.warnOnce = warnOnce; -_$utils_50._getQBezierValue = _getQBezierValue; -_$utils_50.getQuadraticCurvePoint = getQuadraticCurvePoint; -_$utils_50.easeOutQuad = easeOutQuad; -_$utils_50.copyAction = copyAction; -Object.defineProperty(_$utils_50, "win", { +_$utils_51.warnOnce = warnOnce; +_$utils_51._getQBezierValue = _getQBezierValue; +_$utils_51.getQuadraticCurvePoint = getQuadraticCurvePoint; +_$utils_51.easeOutQuad = easeOutQuad; +_$utils_51.copyAction = copyAction; +Object.defineProperty(_$utils_51, "win", { enumerable: true, get: function get() { - return ___window_50.default; + return ___window_51.default; } }); -Object.defineProperty(_$utils_50, "browser", { +Object.defineProperty(_$utils_51, "browser", { enumerable: true, get: function get() { - return ___browser_50.default; + return ___browser_51.default; } }); -Object.defineProperty(_$utils_50, "clone", { +Object.defineProperty(_$utils_51, "clone", { enumerable: true, get: function get() { - return ___clone_50.default; + return ___clone_51.default; } }); -Object.defineProperty(_$utils_50, "events", { +Object.defineProperty(_$utils_51, "events", { enumerable: true, get: function get() { - return ___events_50.default; + return ___events_51.default; } }); -Object.defineProperty(_$utils_50, "extend", { +Object.defineProperty(_$utils_51, "extend", { enumerable: true, get: function get() { - return ___extend_50.default; + return ___extend_51.default; } }); -Object.defineProperty(_$utils_50, "getOriginXY", { +Object.defineProperty(_$utils_51, "getOriginXY", { enumerable: true, get: function get() { - return ___getOriginXY_50.default; + return ___getOriginXY_51.default; } }); -Object.defineProperty(_$utils_50, "hypot", { +Object.defineProperty(_$utils_51, "hypot", { enumerable: true, get: function get() { - return ___hypot_50.default; + return ___hypot_51.default; } }); -Object.defineProperty(_$utils_50, "normalizeListeners", { +Object.defineProperty(_$utils_51, "normalizeListeners", { enumerable: true, get: function get() { - return ___normalizeListeners_50.default; + return ___normalizeListeners_51.default; } }); -Object.defineProperty(_$utils_50, "pointer", { +Object.defineProperty(_$utils_51, "pointer", { enumerable: true, get: function get() { - return ___pointerUtils_50.default; + return ___pointerUtils_51.default; } }); -Object.defineProperty(_$utils_50, "raf", { +Object.defineProperty(_$utils_51, "raf", { enumerable: true, get: function get() { return _raf.default; } }); -Object.defineProperty(_$utils_50, "rect", { +Object.defineProperty(_$utils_51, "rect", { enumerable: true, get: function get() { - return ___rect_50.default; + return ___rect_51.default; } }); -Object.defineProperty(_$utils_50, "Signals", { +Object.defineProperty(_$utils_51, "Signals", { enumerable: true, get: function get() { return _Signals.default; } }); -_$utils_50.is = _$utils_50.dom = _$utils_50.arr = void 0; +_$utils_51.is = _$utils_51.dom = _$utils_51.arr = void 0; -var __arr_50 = ___interopRequireWildcard_50(_$arr_41); +var __arr_51 = ___interopRequireWildcard_51(_$arr_42); -_$utils_50.arr = __arr_50; +_$utils_51.arr = __arr_51; -var dom = ___interopRequireWildcard_50(_$domUtils_45); +var dom = ___interopRequireWildcard_51(_$domUtils_46); -_$utils_50.dom = dom; +_$utils_51.dom = dom; -var __is_50 = ___interopRequireWildcard_50(_$is_52); +var __is_51 = ___interopRequireWildcard_51(_$is_53); -_$utils_50.is = __is_50; +_$utils_51.is = __is_51; -var ___window_50 = ___interopRequireDefault_50(_$window_61); +var ___window_51 = ___interopRequireDefault_51(_$window_62); -var ___browser_50 = ___interopRequireDefault_50(_$browser_42); +var ___browser_51 = ___interopRequireDefault_51(_$browser_43); -var ___clone_50 = ___interopRequireDefault_50(_$clone_43); +var ___clone_51 = ___interopRequireDefault_51(_$clone_44); -var ___events_50 = ___interopRequireDefault_50(_$events_46); +var ___events_51 = ___interopRequireDefault_51(_$events_47); -var ___extend_50 = ___interopRequireDefault_50(_$extend_47); +var ___extend_51 = ___interopRequireDefault_51(_$extend_48); -var ___getOriginXY_50 = ___interopRequireDefault_50(_$getOriginXY_48); +var ___getOriginXY_51 = ___interopRequireDefault_51(_$getOriginXY_49); -var ___hypot_50 = ___interopRequireDefault_50(_$hypot_49); +var ___hypot_51 = ___interopRequireDefault_51(_$hypot_50); -var ___normalizeListeners_50 = ___interopRequireDefault_50(_$normalizeListeners_54); +var ___normalizeListeners_51 = ___interopRequireDefault_51(_$normalizeListeners_55); -var ___pointerUtils_50 = ___interopRequireDefault_50(_$pointerUtils_56); +var ___pointerUtils_51 = ___interopRequireDefault_51(_$pointerUtils_57); -var _raf = ___interopRequireDefault_50(_$raf_57); +var _raf = ___interopRequireDefault_51(_$raf_58); -var ___rect_50 = ___interopRequireDefault_50(_$rect_58); +var ___rect_51 = ___interopRequireDefault_51(_$rect_59); -var _Signals = ___interopRequireDefault_50(_$Signals_40); +var _Signals = ___interopRequireDefault_51(_$Signals_41); -function ___interopRequireDefault_50(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function ___interopRequireDefault_51(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -function ___interopRequireWildcard_50(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } +function ___interopRequireWildcard_51(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } function warnOnce(method, message) { var warned = false; // eslint-disable-next-line no-shadow return function () { if (!warned) { - ___window_50.default.window.console.warn(message); + ___window_51.default.window.console.warn(message); warned = true; } @@ -2513,9 +2516,9 @@ Object.defineProperty(_$Interaction_16, "PointerInfo", { }); _$Interaction_16.default = _$Interaction_16.Interaction = void 0; -var utils = ___interopRequireWildcard_16(_$utils_50); +var utils = ___interopRequireWildcard_16(_$utils_51); -var _InteractEvent = ___interopRequireDefault_16(_$InteractEvent_14); +var _InteractEvent = ___interopRequireWildcard_16(_$InteractEvent_14); var _PointerInfo = ___interopRequireDefault_16(_$PointerInfo_17); @@ -2588,7 +2591,9 @@ function () { this._signals = signals; this.pointerType = pointerType; - this._signals.fire('new', this); + this._signals.fire('new', { + interaction: this + }); } ___createClass_16(Interaction, [{ @@ -2649,7 +2654,7 @@ function () { this._interacting = this._doPhase({ interaction: this, event: this.downEvent, - phase: 'start' + phase: _InteractEvent.EventPhase.Start }); } }, { @@ -2731,7 +2736,7 @@ function () { interaction: this, noBefore: false }, signalArg || {}); - signalArg.phase = 'move'; + signalArg.phase = _InteractEvent.EventPhase.Move; this._doPhase(signalArg); } // End interact move events and stop auto-scroll unless simulation is running @@ -2799,7 +2804,7 @@ function () { endPhaseResult = this._doPhase({ event: event, interaction: this, - phase: 'end' + phase: _InteractEvent.EventPhase.End }); } @@ -2976,17 +2981,17 @@ _$Interaction_16.Interaction = Interaction; var ___default_16 = Interaction; _$Interaction_16.default = ___default_16; -var _$interactionFinder_51 = {}; +var _$interactionFinder_52 = {}; "use strict"; -Object.defineProperty(_$interactionFinder_51, "__esModule", { +Object.defineProperty(_$interactionFinder_52, "__esModule", { value: true }); -_$interactionFinder_51.default = void 0; +_$interactionFinder_52.default = void 0; -var __utils_51 = ___interopRequireWildcard_51(_$utils_50); +var __utils_52 = ___interopRequireWildcard_52(_$utils_51); -function ___interopRequireWildcard_51(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } +function ___interopRequireWildcard_52(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } var finder = { methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'], @@ -3028,7 +3033,7 @@ var finder = { return interaction; } - element = __utils_51.dom.parentNode(element); + element = __utils_52.dom.parentNode(element); } } } @@ -3107,6 +3112,8 @@ var finder = { return interaction; } } + + return null; }, // get first idle interaction with a matching pointerType idle: function idle(_ref9) { @@ -3142,14 +3149,14 @@ var finder = { }; function hasPointerId(interaction, pointerId) { - return __utils_51.arr.some(interaction.pointers, function (_ref11) { + return __utils_52.arr.some(interaction.pointers, function (_ref11) { var id = _ref11.id; return id === pointerId; }); } -var ___default_51 = finder; -_$interactionFinder_51.default = ___default_51; +var ___default_52 = finder; +_$interactionFinder_52.default = ___default_52; var _$interactions_20 = {}; "use strict"; @@ -3160,17 +3167,17 @@ Object.defineProperty(_$interactions_20, "__esModule", { _$interactions_20.newInteraction = newInteraction; _$interactions_20.default = void 0; -var ___browser_20 = ___interopRequireDefault_20(_$browser_42); +var ___browser_20 = ___interopRequireDefault_20(_$browser_43); -var ___domObjects_20 = ___interopRequireDefault_20(_$domObjects_44); +var ___domObjects_20 = ___interopRequireDefault_20(_$domObjects_45); -var ___events_20 = ___interopRequireDefault_20(_$events_46); +var ___events_20 = ___interopRequireDefault_20(_$events_47); -var _interactionFinder = ___interopRequireDefault_20(_$interactionFinder_51); +var _interactionFinder = ___interopRequireDefault_20(_$interactionFinder_52); -var ___pointerUtils_20 = ___interopRequireDefault_20(_$pointerUtils_56); +var ___pointerUtils_20 = ___interopRequireDefault_20(_$pointerUtils_57); -var ___Signals_20 = ___interopRequireDefault_20(_$Signals_40); +var ___Signals_20 = ___interopRequireDefault_20(_$Signals_41); var _Interaction = ___interopRequireDefault_20(_$Interaction_16); @@ -3431,11 +3438,11 @@ Object.defineProperty(_$scope_21, "__esModule", { }); /* common-shake removed: exports.createScope = */ void createScope; /* common-shake removed: exports.initScope = */ void initScope; -_$scope_21.Scope = _$scope_21.ActionName = void 0; +/* common-shake removed: exports.InteractableSet = */ _$scope_21.Scope = _$scope_21.ActionName = void 0; -var __utils_21 = ___interopRequireWildcard_21(_$utils_50); +var __utils_21 = ___interopRequireWildcard_21(_$utils_51); -var ___domObjects_21 = ___interopRequireDefault_21(_$domObjects_44); +var ___domObjects_21 = ___interopRequireDefault_21(_$domObjects_45); var ___defaultOptions_21 = ___interopRequireDefault_21(_$defaultOptions_18); @@ -3709,6 +3716,8 @@ function () { return InteractableSet; }(); +/* common-shake removed: exports.InteractableSet = */ void InteractableSet; + function initScope(scope, window) { __win_21.init(window); @@ -3734,9 +3743,9 @@ _$drag_1.default = void 0; /* removed: var _$scope_21 = require("@interactjs/core/scope"); */; -var __arr_1 = ___interopRequireWildcard_1(_$arr_41); +var __arr_1 = ___interopRequireWildcard_1(_$arr_42); -var __is_1 = ___interopRequireWildcard_1(_$is_52); +var __is_1 = ___interopRequireWildcard_1(_$is_53); function ___interopRequireWildcard_1(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } @@ -3752,7 +3761,7 @@ function __install_1(scope) { interactions.signals.on('action-move', move); Interactable.prototype.draggable = drag.draggable; - actions.drag = drag; + actions[_$scope_21.ActionName.Drag] = drag; actions.names.push(_$scope_21.ActionName.Drag); __arr_1.merge(actions.eventTypes, ['dragstart', 'dragmove', 'draginertiastart', 'dragresume', 'dragend']); actions.methodDict.drag = 'draggable'; @@ -3839,7 +3848,7 @@ function move(_ref2) { */ -function draggable(options) { +var draggable = function draggable(options) { if (__is_1.object(options)) { this.options.drag.enabled = options.enabled !== false; this.setPerAction('drag', options); @@ -3862,7 +3871,7 @@ function draggable(options) { } return this.options.drag; -} +}; var drag = { install: __install_1, @@ -3895,7 +3904,7 @@ Object.defineProperty(_$DropEvent_2, "__esModule", { }); _$DropEvent_2.default = void 0; -var __arr_2 = ___interopRequireWildcard_2(_$arr_41); +var __arr_2 = ___interopRequireWildcard_2(_$arr_42); function ___interopRequireWildcard_2(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } @@ -4010,7 +4019,7 @@ Object.defineProperty(_$drop_3, "__esModule", { }); _$drop_3.default = void 0; -var __utils_3 = ___interopRequireWildcard_3(_$utils_50); +var __utils_3 = ___interopRequireWildcard_3(_$utils_51); var _DropEvent = ___interopRequireDefault_3(_$DropEvent_2); @@ -4033,7 +4042,19 @@ function __install_3(scope) { return; } - var dropStatus = interaction.dropStatus; // reset active dropzones + var dropStatus = interaction.dropStatus = interaction.dropStatus || { + cur: { + dropzone: null, + element: null + }, + prev: { + dropzone: null, + element: null + }, + rejected: null, + events: null, + activeDrops: null + }; // reset active dropzones dropStatus.activeDrops = null; dropStatus.events = null; // TODO: maybe Interaction { element: T } @@ -4077,21 +4098,6 @@ function __install_3(scope) { interaction.dropStatus.activeDrops = null; interaction.dropStatus.events = null; }); - interactions.signals.on('new', function (interaction) { - interaction.dropStatus = { - cur: { - dropzone: null, - element: null - }, - prev: { - dropzone: null, - element: null - }, - rejected: false, - events: null, - activeDrops: null - }; - }); interactions.signals.on('stop', function (_ref5) { var dropStatus = _ref5.interaction.dropStatus; dropStatus.cur.dropzone = dropStatus.cur.element = dropStatus.prev.dropzone = dropStatus.prev.element = null; @@ -4536,7 +4542,7 @@ var ___InteractEvent_4 = ___interopRequireDefault_4(_$InteractEvent_14); /* removed: var _$scope_21 = require("@interactjs/core/scope"); */; -var __utils_4 = ___interopRequireWildcard_4(_$utils_50); +var __utils_4 = ___interopRequireWildcard_4(_$utils_51); function ___interopRequireWildcard_4(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } @@ -4680,7 +4686,7 @@ function updateGestureProps(_ref3) { var starting = phase === 'start'; var ending = phase === 'end'; var deltaSource = interaction.target.options.deltaSource; - iEvent.touches = [pointers[0].pointer, pointers[1].pointer]; + iEvent.touches = [pointers[0], pointers[1]]; if (starting) { iEvent.distance = __utils_4.pointer.touchDistance(pointers, deltaSource); @@ -4690,11 +4696,12 @@ function updateGestureProps(_ref3) { iEvent.angle = __utils_4.pointer.touchAngle(pointers, deltaSource); iEvent.da = 0; } else if (ending || event instanceof ___InteractEvent_4.default) { - iEvent.distance = interaction.prevEvent.distance; - iEvent.box = interaction.prevEvent.box; - iEvent.scale = interaction.prevEvent.scale; + var prevEvent = interaction.prevEvent; + iEvent.distance = prevEvent.distance; + iEvent.box = prevEvent.box; + iEvent.scale = prevEvent.scale; iEvent.ds = iEvent.scale - 1; - iEvent.angle = interaction.prevEvent.angle; + iEvent.angle = prevEvent.angle; iEvent.da = iEvent.angle - interaction.gesture.startAngle; } else { iEvent.distance = __utils_4.pointer.touchDistance(pointers, deltaSource); @@ -4719,7 +4726,7 @@ _$resize_6.default = void 0; /* removed: var _$scope_21 = require("@interactjs/core/scope"); */; -var __utils_6 = ___interopRequireWildcard_6(_$utils_50); +var __utils_6 = ___interopRequireWildcard_6(_$utils_51); function ___interopRequireWildcard_6(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } @@ -4893,7 +4900,7 @@ function resizable(interactable, options, scope) { interactable.setPerAction('resize', options); interactable.setOnEvents('resize', options); - if (/^x$|^y$|^xy$/.test(options.axis)) { + if (__utils_6.is.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) { interactable.options.resize.axis = options.axis; } else if (options.axis === null) { interactable.options.resize.axis = scope.defaults.actions.resize.axis; @@ -5241,15 +5248,15 @@ _$autoScroll_7.getScrollSize = getScrollSize; _$autoScroll_7.getScrollSizeDelta = getScrollSizeDelta; _$autoScroll_7.default = void 0; -var __domUtils_7 = ___interopRequireWildcard_7(_$domUtils_45); +var __domUtils_7 = ___interopRequireWildcard_7(_$domUtils_46); -var __is_7 = ___interopRequireWildcard_7(_$is_52); +var __is_7 = ___interopRequireWildcard_7(_$is_53); -var ___raf_7 = ___interopRequireDefault_7(_$raf_57); +var ___raf_7 = ___interopRequireDefault_7(_$raf_58); -/* removed: var _$rect_58 = require("@interactjs/utils/rect"); */; +/* removed: var _$rect_59 = require("@interactjs/utils/rect"); */; -/* removed: var _$window_61 = require("@interactjs/utils/window"); */; +/* removed: var _$window_62 = require("@interactjs/utils/window"); */; function ___interopRequireDefault_7(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -5260,7 +5267,8 @@ function __install_7(scope) { defaults = scope.defaults, actions = scope.actions; scope.autoScroll = autoScroll; - interactions.signals.on('new', function (interaction) { + interactions.signals.on('new', function (_ref) { + var interaction = _ref.interaction; interaction.autoScroll = null; }); interactions.signals.on('stop', autoScroll.stop); @@ -5365,9 +5373,9 @@ var autoScroll = { var options = interactable.options; return options[actionName].autoScroll && options[actionName].autoScroll.enabled; }, - onInteractionMove: function onInteractionMove(_ref) { - var interaction = _ref.interaction, - pointer = _ref.pointer; + onInteractionMove: function onInteractionMove(_ref2) { + var interaction = _ref2.interaction, + pointer = _ref2.pointer; if (!(interaction.interacting() && autoScroll.check(interaction.target, interaction.prepared.name))) { return; @@ -5413,7 +5421,7 @@ var autoScroll = { }; function getContainer(value, interactable, element) { - return (__is_7.string(value) ? (0, _$rect_58.getStringOptionResult)(value, interactable, element) : value) || (0, _$window_61.getWindow)(element); + return (__is_7.string(value) ? (0, _$rect_59.getStringOptionResult)(value, interactable, element) : value) || (0, _$window_62.getWindow)(element); } function getScroll(container) { @@ -5438,9 +5446,9 @@ function getScrollSize(container) { }; } -function getScrollSizeDelta(_ref2, func) { - var interaction = _ref2.interaction, - element = _ref2.element; +function getScrollSizeDelta(_ref3, func) { + var interaction = _ref3.interaction, + element = _ref3.element; var scrollOptions = interaction && interaction.target.options[interaction.prepared.name].autoScroll; if (!scrollOptions || !scrollOptions.enabled) { @@ -5474,11 +5482,11 @@ Object.defineProperty(_$InteractableMethods_8, "__esModule", { }); _$InteractableMethods_8.default = void 0; -/* removed: var _$utils_50 = require("@interactjs/utils"); */; +/* removed: var _$utils_51 = require("@interactjs/utils"); */; -var __domUtils_8 = ___interopRequireWildcard_8(_$domUtils_45); +var __domUtils_8 = ___interopRequireWildcard_8(_$domUtils_46); -var __is_8 = ___interopRequireWildcard_8(_$is_52); +var __is_8 = ___interopRequireWildcard_8(_$is_53); function ___interopRequireWildcard_8(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } @@ -5515,7 +5523,7 @@ function __install_8(scope) { * Interactable */ - Interactable.prototype.ignoreFrom = (0, _$utils_50.warnOnce)(function (newValue) { + Interactable.prototype.ignoreFrom = (0, _$utils_51.warnOnce)(function (newValue) { return this._backCompatOption('ignoreFrom', newValue); }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).'); /** @@ -5542,7 +5550,7 @@ function __install_8(scope) { * Interactable */ - Interactable.prototype.allowFrom = (0, _$utils_50.warnOnce)(function (newValue) { + Interactable.prototype.allowFrom = (0, _$utils_51.warnOnce)(function (newValue) { return this._backCompatOption('allowFrom', newValue); }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).'); Interactable.prototype.testIgnore = testIgnore; @@ -5712,7 +5720,7 @@ Object.defineProperty(_$base_9, "__esModule", { }); _$base_9.default = void 0; -var __utils_9 = ___interopRequireWildcard_9(_$utils_50); +var __utils_9 = ___interopRequireWildcard_9(_$utils_51); var _InteractableMethods = ___interopRequireDefault_9(_$InteractableMethods_8); @@ -5994,9 +6002,9 @@ _$dragAxis_10.default = void 0; /* removed: var _$scope_21 = require("@interactjs/core/scope"); */; -/* removed: var _$domUtils_45 = require("@interactjs/utils/domUtils"); */; +/* removed: var _$domUtils_46 = require("@interactjs/utils/domUtils"); */; -var __is_10 = ___interopRequireWildcard_10(_$is_52); +var __is_10 = ___interopRequireWildcard_10(_$is_53); var _base = ___interopRequireDefault_10(_$base_9); @@ -6057,7 +6065,7 @@ function __install_10(scope) { break; } - element = (0, _$domUtils_45.parentNode)(element); + element = (0, _$domUtils_46.parentNode)(element); } } }); @@ -6191,13 +6199,13 @@ Object.defineProperty(_$interactablePreventDefault_19, "__esModule", { _$interactablePreventDefault_19.install = __install_19; _$interactablePreventDefault_19.default = void 0; -/* removed: var _$domUtils_45 = require("@interactjs/utils/domUtils"); */; +/* removed: var _$domUtils_46 = require("@interactjs/utils/domUtils"); */; -var ___events_19 = ___interopRequireDefault_19(_$events_46); +var ___events_19 = ___interopRequireDefault_19(_$events_47); -var __is_19 = ___interopRequireWildcard_19(_$is_52); +var __is_19 = ___interopRequireWildcard_19(_$is_53); -/* removed: var _$window_61 = require("@interactjs/utils/window"); */; +/* removed: var _$window_62 = require("@interactjs/utils/window"); */; function ___interopRequireWildcard_19(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } @@ -6234,7 +6242,7 @@ function checkAndPreventDefault(interactable, scope, event) { if (___events_19.default.supportsPassive && /^touch(start|move)$/.test(event.type)) { - var doc = (0, _$window_61.getWindow)(event.target).document; + var doc = (0, _$window_62.getWindow)(event.target).document; var docOptions = scope.getDocOptions(doc); if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) { @@ -6248,7 +6256,7 @@ function checkAndPreventDefault(interactable, scope, event) { } // don't preventDefault on editable elements - if (__is_19.element(event.target) && (0, _$domUtils_45.matchesSelector)(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')) { + if (__is_19.element(event.target) && (0, _$domUtils_46.matchesSelector)(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')) { return; } @@ -6301,7 +6309,7 @@ function __install_19(scope) { _ref2 = scope.interactions.list[_i2]; var interaction = _ref2; - if (interaction.element && (interaction.element === event.target || (0, _$domUtils_45.nodeContains)(interaction.element, event.target))) { + if (interaction.element && (interaction.element === event.target || (0, _$domUtils_46.nodeContains)(interaction.element, event.target))) { interaction.target.checkAndPreventDefault(event); return; } @@ -6322,7 +6330,7 @@ Object.defineProperty(_$base_26, "__esModule", { }); _$base_26.default = void 0; -var ___extend_26 = ___interopRequireDefault_26(_$extend_47); +var ___extend_26 = ___interopRequireDefault_26(_$extend_48); function ___interopRequireDefault_26(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -6338,7 +6346,8 @@ function __install_26(scope) { var interactions = scope.interactions; scope.defaults.perAction.modifiers = []; scope.modifiers = {}; - interactions.signals.on('new', function (interaction) { + interactions.signals.on('new', function (_ref) { + var interaction = _ref.interaction; interaction.modifiers = { startOffset: { left: 0, @@ -6369,10 +6378,10 @@ function __install_26(scope) { function startAll(arg) { for (var _i = 0; _i < arg.states.length; _i++) { - var _ref; + var _ref2; - _ref = arg.states[_i]; - var state = _ref; + _ref2 = arg.states[_i]; + var state = _ref2; if (state.methods.start) { arg.state = state; @@ -6395,9 +6404,9 @@ function getRectOffset(rect, coords) { }; } -function __start_26(_ref2, pageCoords, registeredModifiers) { - var interaction = _ref2.interaction, - phase = _ref2.phase; +function __start_26(_ref3, pageCoords, registeredModifiers) { + var interaction = _ref3.interaction, + phase = _ref3.phase; var interactable = interaction.target, element = interaction.element; var modifierList = getModifierList(interaction, registeredModifiers); @@ -6458,10 +6467,10 @@ function setAll(arg) { }; for (var _i2 = 0; _i2 < states.length; _i2++) { - var _ref3; + var _ref4; - _ref3 = states[_i2]; - var state = _ref3; + _ref4 = states[_i2]; + var state = _ref4; var options = state.options; if (!state.methods.set || !shouldDo(options, preEnd, requireEndOnly, phase)) { @@ -6485,7 +6494,8 @@ function prepareStates(modifierList) { for (var index = 0; index < modifierList.length; index++) { var _modifierList$index = modifierList[index], options = _modifierList$index.options, - methods = _modifierList$index.methods; + methods = _modifierList$index.methods, + name = _modifierList$index.name; if (options && options.enabled === false) { continue; @@ -6494,7 +6504,8 @@ function prepareStates(modifierList) { var state = { options: options, methods: methods, - index: index + index: index, + name: name }; states.push(state); } @@ -6502,11 +6513,11 @@ function prepareStates(modifierList) { return states; } -function __beforeMove_26(_ref4) { - var interaction = _ref4.interaction, - phase = _ref4.phase, - preEnd = _ref4.preEnd, - skipModifiers = _ref4.skipModifiers; +function __beforeMove_26(_ref5) { + var interaction = _ref5.interaction, + phase = _ref5.phase, + preEnd = _ref5.preEnd, + skipModifiers = _ref5.skipModifiers; var interactable = interaction.target, element = interaction.element; var modifierResult = setAll({ @@ -6542,10 +6553,10 @@ function beforeEnd(arg) { var didPreEnd = false; for (var _i3 = 0; _i3 < states.length; _i3++) { - var _ref5; + var _ref6; - _ref5 = states[_i3]; - var state = _ref5; + _ref6 = states[_i3]; + var state = _ref6; arg.state = state; var options = state.options, methods = state.methods; @@ -6583,10 +6594,10 @@ function stop(arg) { restoreCoords(arg); for (var _i4 = 0; _i4 < states.length; _i4++) { - var _ref6; + var _ref7; - _ref6 = states[_i4]; - var state = _ref6; + _ref7 = states[_i4]; + var state = _ref7; modifierArg.state = state; if (state.methods.stop) { @@ -6625,10 +6636,10 @@ function setCoords(arg) { } } -function restoreCoords(_ref7) { - var _ref7$interaction = _ref7.interaction, - coords = _ref7$interaction.coords, - modifiers = _ref7$interaction.modifiers; +function restoreCoords(_ref8) { + var _ref8$interaction = _ref8.interaction, + coords = _ref8$interaction.coords, + modifiers = _ref8$interaction.modifiers; var startDelta = modifiers.startDelta, curDelta = modifiers.result.delta; var _arr2 = [[coords.start, startDelta], [coords.cur, curDelta]]; @@ -6696,7 +6707,8 @@ function makeModifier(module, name) { return { options: options, - methods: methods + methods: methods, + name: name }; }; @@ -6740,9 +6752,9 @@ _$inertia_22.default = void 0; var ___base_22 = ___interopRequireDefault_22(_$base_26); -var __utils_22 = ___interopRequireWildcard_22(_$utils_50); +var __utils_22 = ___interopRequireWildcard_22(_$utils_51); -var ___raf_22 = ___interopRequireDefault_22(_$raf_57); +var ___raf_22 = ___interopRequireDefault_22(_$raf_58); function ___interopRequireWildcard_22(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } @@ -6754,7 +6766,8 @@ _$InteractEvent_14.EventPhase.InertiaStart = 'inertiastart'; function __install_22(scope) { var interactions = scope.interactions, defaults = scope.defaults; - interactions.signals.on('new', function (interaction) { + interactions.signals.on('new', function (_ref) { + var interaction = _ref.interaction; interaction.inertia = { active: false, smoothEnd: false, @@ -6794,11 +6807,11 @@ function __install_22(scope) { }; } -function resume(_ref, scope) { - var interaction = _ref.interaction, - event = _ref.event, - pointer = _ref.pointer, - eventTarget = _ref.eventTarget; +function resume(_ref2, scope) { + var interaction = _ref2.interaction, + event = _ref2.event, + pointer = _ref2.pointer, + eventTarget = _ref2.eventTarget; var state = interaction.inertia; // Check if the down event hits the current inertia target if (state.active) { @@ -6836,10 +6849,10 @@ function resume(_ref, scope) { } } -function release(_ref2, scope) { - var interaction = _ref2.interaction, - event = _ref2.event, - noPreEnd = _ref2.noPreEnd; +function release(_ref3, scope) { + var interaction = _ref3.interaction, + event = _ref3.event, + noPreEnd = _ref3.noPreEnd; var state = interaction.inertia; if (!interaction.interacting() || interaction.simulation && interaction.simulation.active || noPreEnd) { @@ -6913,8 +6926,8 @@ function release(_ref2, scope) { return false; } -function __stop_22(_ref3) { - var interaction = _ref3.interaction; +function __stop_22(_ref4) { + var interaction = _ref4.interaction; var state = interaction.inertia; if (state.active) { @@ -7019,9 +7032,9 @@ function updateInertiaCoords(interaction) { }]); } -function __getOptions_22(_ref4) { - var target = _ref4.target, - prepared = _ref4.prepared; +function __getOptions_22(_ref5) { + var target = _ref5.target, + prepared = _ref5.prepared; return target && target.options && prepared.name && target.options[prepared.name].inertia; } @@ -7044,11 +7057,11 @@ _$interact_24.default = _$interact_24.scope = _$interact_24.interact = void 0; /* removed: var _$scope_21 = require("@interactjs/core/scope"); */; -var __utils_24 = ___interopRequireWildcard_24(_$utils_50); +var __utils_24 = ___interopRequireWildcard_24(_$utils_51); -var ___browser_24 = ___interopRequireDefault_24(_$browser_42); +var ___browser_24 = ___interopRequireDefault_24(_$browser_43); -var ___events_24 = ___interopRequireDefault_24(_$events_46); +var ___events_24 = ___interopRequireDefault_24(_$events_47); function ___interopRequireDefault_24(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -7368,9 +7381,9 @@ Object.defineProperty(_$pointer_29, "__esModule", { }); _$pointer_29.default = void 0; -var __is_29 = ___interopRequireWildcard_29(_$is_52); +var __is_29 = ___interopRequireWildcard_29(_$is_53); -var ___rect_29 = ___interopRequireDefault_29(_$rect_58); +var ___rect_29 = ___interopRequireDefault_29(_$rect_59); function ___interopRequireDefault_29(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -7450,9 +7463,9 @@ Object.defineProperty(_$edges_28, "__esModule", { }); _$edges_28.default = void 0; -var ___extend_28 = ___interopRequireDefault_28(_$extend_47); +var ___extend_28 = ___interopRequireDefault_28(_$extend_48); -var ___rect_28 = ___interopRequireDefault_28(_$rect_58); +var ___rect_28 = ___interopRequireDefault_28(_$rect_59); var _pointer = ___interopRequireDefault_28(_$pointer_29); @@ -7512,7 +7525,7 @@ function __set_28(_ref2) { state = _ref2.state; var offset = state.offset, options = state.options; - var edges = interaction.prepared.linkedEdges || interaction.prepared.edges; + var edges = interaction.prepared._linkedEdges || interaction.prepared.edges; if (!edges) { return; @@ -7575,9 +7588,9 @@ Object.defineProperty(_$size_30, "__esModule", { }); _$size_30.default = void 0; -var ___extend_30 = ___interopRequireDefault_30(_$extend_47); +var ___extend_30 = ___interopRequireDefault_30(_$extend_48); -var ___rect_30 = ___interopRequireDefault_30(_$rect_58); +var ___rect_30 = ___interopRequireDefault_30(_$rect_59); var _edges = ___interopRequireDefault_30(_$edges_28); @@ -7668,7 +7681,7 @@ Object.defineProperty(_$pointer_32, "__esModule", { }); _$pointer_32.default = void 0; -var __utils_32 = ___interopRequireWildcard_32(_$utils_50); +var __utils_32 = ___interopRequireWildcard_32(_$utils_51); function ___interopRequireWildcard_32(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } @@ -7834,9 +7847,9 @@ Object.defineProperty(_$size_33, "__esModule", { }); _$size_33.default = void 0; -var ___extend_33 = ___interopRequireDefault_33(_$extend_47); +var ___extend_33 = ___interopRequireDefault_33(_$extend_48); -var __is_33 = ___interopRequireWildcard_33(_$is_52); +var __is_33 = ___interopRequireWildcard_33(_$is_53); var ___pointer_33 = ___interopRequireDefault_33(_$pointer_32); @@ -7960,9 +7973,9 @@ Object.defineProperty(_$edges_31, "__esModule", { }); _$edges_31.default = void 0; -var ___clone_31 = ___interopRequireDefault_31(_$clone_43); +var ___clone_31 = ___interopRequireDefault_31(_$clone_44); -var ___extend_31 = ___interopRequireDefault_31(_$extend_47); +var ___extend_31 = ___interopRequireDefault_31(_$extend_48); var _size = ___interopRequireDefault_31(_$size_33); @@ -8069,7 +8082,7 @@ Object.defineProperty(_$PointerEvent_34, "__esModule", { }); _$PointerEvent_34.default = void 0; -var ___pointerUtils_34 = ___interopRequireDefault_34(_$pointerUtils_56); +var ___pointerUtils_34 = ___interopRequireDefault_34(_$pointerUtils_57); function ___interopRequireDefault_34(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -8179,7 +8192,7 @@ Object.defineProperty(_$base_35, "__esModule", { }); _$base_35.default = void 0; -var __utils_35 = ___interopRequireWildcard_35(_$utils_50); +var __utils_35 = ___interopRequireWildcard_35(_$utils_51); var _PointerEvent = ___interopRequireDefault_35(_$PointerEvent_34); @@ -8316,14 +8329,15 @@ function __install_35(scope) { var interactions = scope.interactions; scope.pointerEvents = pointerEvents; scope.defaults.actions.pointerEvents = pointerEvents.defaults; - interactions.signals.on('new', function (interaction) { + interactions.signals.on('new', function (_ref3) { + var interaction = _ref3.interaction; interaction.prevTap = null; // the most recent tap event on this interaction interaction.tapTime = 0; // time of the most recent tap event }); - interactions.signals.on('update-pointer', function (_ref3) { - var down = _ref3.down, - pointerInfo = _ref3.pointerInfo; + interactions.signals.on('update-pointer', function (_ref4) { + var down = _ref4.down, + pointerInfo = _ref4.pointerInfo; if (!down && pointerInfo.hold) { return; @@ -8334,12 +8348,12 @@ function __install_35(scope) { timeout: null }; }); - interactions.signals.on('move', function (_ref4) { - var interaction = _ref4.interaction, - pointer = _ref4.pointer, - event = _ref4.event, - eventTarget = _ref4.eventTarget, - duplicateMove = _ref4.duplicateMove; + interactions.signals.on('move', function (_ref5) { + var interaction = _ref5.interaction, + pointer = _ref5.pointer, + event = _ref5.event, + eventTarget = _ref5.eventTarget, + duplicateMove = _ref5.duplicateMove; var pointerIndex = interaction.getPointerIndex(pointer); if (!duplicateMove && (!interaction.pointerIsDown || interaction.pointerWasMoved)) { @@ -8356,12 +8370,12 @@ function __install_35(scope) { }); } }); - interactions.signals.on('down', function (_ref5) { - var interaction = _ref5.interaction, - pointer = _ref5.pointer, - event = _ref5.event, - eventTarget = _ref5.eventTarget, - pointerIndex = _ref5.pointerIndex; + interactions.signals.on('down', function (_ref6) { + var interaction = _ref6.interaction, + pointer = _ref6.pointer, + event = _ref6.event, + eventTarget = _ref6.eventTarget, + pointerIndex = _ref6.pointerIndex; var timer = interaction.pointers[pointerIndex].hold; var path = __utils_35.dom.getPath(eventTarget); var signalArg = { @@ -8376,10 +8390,10 @@ function __install_35(scope) { }; for (var _i2 = 0; _i2 < path.length; _i2++) { - var _ref6; + var _ref7; - _ref6 = path[_i2]; - var element = _ref6; + _ref7 = path[_i2]; + var element = _ref7; signalArg.element = element; signals.fire('collect-targets', signalArg); } @@ -8391,10 +8405,10 @@ function __install_35(scope) { var minDuration = Infinity; for (var _i3 = 0; _i3 < signalArg.targets.length; _i3++) { - var _ref7; + var _ref8; - _ref7 = signalArg.targets[_i3]; - var target = _ref7; + _ref8 = signalArg.targets[_i3]; + var target = _ref8; var holdDuration = target.eventable.options.holdDuration; if (holdDuration < minDuration) { @@ -8413,11 +8427,11 @@ function __install_35(scope) { }); }, minDuration); }); - interactions.signals.on('up', function (_ref8) { - var interaction = _ref8.interaction, - pointer = _ref8.pointer, - event = _ref8.event, - eventTarget = _ref8.eventTarget; + interactions.signals.on('up', function (_ref9) { + var interaction = _ref9.interaction, + pointer = _ref9.pointer, + event = _ref9.event, + eventTarget = _ref9.eventTarget; if (!interaction.pointerWasMoved) { fire({ @@ -8433,9 +8447,9 @@ function __install_35(scope) { for (var _i4 = 0; _i4 < _arr.length; _i4++) { var signalName = _arr[_i4]; - interactions.signals.on(signalName, function (_ref9) { - var interaction = _ref9.interaction, - pointerIndex = _ref9.pointerIndex; + interactions.signals.on(signalName, function (_ref10) { + var interaction = _ref10.interaction, + pointerIndex = _ref10.pointerIndex; if (interaction.pointers[pointerIndex].hold) { clearTimeout(interaction.pointers[pointerIndex].hold.timeout); @@ -8449,11 +8463,11 @@ function __install_35(scope) { } function createSignalListener(type) { - return function (_ref10) { - var interaction = _ref10.interaction, - pointer = _ref10.pointer, - event = _ref10.event, - eventTarget = _ref10.eventTarget; + return function (_ref11) { + var interaction = _ref11.interaction, + pointer = _ref11.pointer, + event = _ref11.event, + eventTarget = _ref11.eventTarget; fire({ interaction: interaction, eventTarget: eventTarget, @@ -8557,11 +8571,11 @@ Object.defineProperty(_$interactableTargets_38, "__esModule", { }); _$interactableTargets_38.default = void 0; -/* removed: var _$arr_41 = require("@interactjs/utils/arr"); */; +/* removed: var _$arr_42 = require("@interactjs/utils/arr"); */; -var ___extend_38 = ___interopRequireDefault_38(_$extend_47); +var ___extend_38 = ___interopRequireDefault_38(_$extend_48); -var __is_38 = ___interopRequireWildcard_38(_$is_52); +var __is_38 = ___interopRequireWildcard_38(_$is_53); function ___interopRequireWildcard_38(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } @@ -8605,7 +8619,7 @@ function __install_38(scope) { (0, ___extend_38.default)(interactable.events.options, pointerEvents.defaults); (0, ___extend_38.default)(interactable.events.options, options.pointerEvents || {}); }); - (0, _$arr_41.merge)(actions.eventTypes, pointerEvents.types); + (0, _$arr_42.merge)(actions.eventTypes, pointerEvents.types); Interactable.prototype.pointerEvents = pointerEventsMethod; var __backCompatOption = Interactable.prototype._backCompatOption; @@ -8683,7 +8697,7 @@ _$reflow_39.default = void 0; /* removed: var _$interactions_20 = require("@interactjs/core/interactions"); */; -/* removed: var _$utils_50 = require("@interactjs/utils"); */; +/* removed: var _$utils_51 = require("@interactjs/utils"); */; function __install_39(scope) { var actions = scope.actions, @@ -8705,7 +8719,7 @@ function __install_39(scope) { if (interaction.pointerType === 'reflow') { interaction._reflowResolve(); - _$utils_50.arr.remove(scope.interactions.list, interaction); + _$utils_51.arr.remove(scope.interactions.list, interaction); } }); /** @@ -8731,9 +8745,9 @@ function __install_39(scope) { } function reflow(interactable, action, scope) { - var elements = _$utils_50.is.string(interactable.target) ? _$utils_50.arr.from(interactable._context.querySelectorAll(interactable.target)) : [interactable.target]; // tslint:disable-next-line variable-name + var elements = _$utils_51.is.string(interactable.target) ? _$utils_51.arr.from(interactable._context.querySelectorAll(interactable.target)) : [interactable.target]; // tslint:disable-next-line variable-name - var Promise = _$utils_50.win.window.Promise; + var Promise = _$utils_51.win.window.Promise; var promises = Promise ? [] : null; var _loop = function _loop() { @@ -8745,7 +8759,7 @@ function reflow(interactable, action, scope) { return "break"; } - var runningInteraction = _$utils_50.arr.find(scope.interactions.list, function (interaction) { + var runningInteraction = _$utils_51.arr.find(scope.interactions.list, function (interaction) { return interaction.interacting() && interaction.target === interactable && interaction.element === element && interaction.prepared.name === action.name; }); @@ -8757,7 +8771,7 @@ function reflow(interactable, action, scope) { runningInteraction._reflowResolve = resolve; }); } else { - var xywh = _$utils_50.rect.tlbrToXywh(rect); + var xywh = _$utils_51.rect.tlbrToXywh(rect); var coords = { page: { @@ -8771,7 +8785,7 @@ function reflow(interactable, action, scope) { timeStamp: Date.now() }; - var event = _$utils_50.pointer.coordsToEvent(coords); + var event = _$utils_51.pointer.coordsToEvent(coords); reflowPromise = startReflow(scope, interactable, element, action, event); } @@ -8807,13 +8821,13 @@ function startReflow(scope, interactable, element, action, event) { }; interaction.target = interactable; interaction.element = element; - interaction.prepared = (0, _$utils_50.extend)({}, action); + interaction.prepared = (0, _$utils_51.extend)({}, action); interaction.prevEvent = event; interaction.updatePointer(event, event, element, true); interaction._doPhase(signalArg); - var reflowPromise = _$utils_50.win.window.Promise ? new _$utils_50.win.window.Promise(function (resolve) { + var reflowPromise = _$utils_51.win.window.Promise ? new _$utils_51.win.window.Promise(function (resolve) { interaction._reflowResolve = resolve; }) : null; interaction._reflowPromise = reflowPromise; @@ -8948,29 +8962,33 @@ function __init_23(window) { } // eslint-disable-next-line no-undef -_interact.default.version = __init_23.version = "1.4.0-alpha.27"; +_interact.default.version = __init_23.version = "1.4.0-alpha.28"; var ___default_23 = _interact.default; _$interact_23.default = ___default_23; -var _$grid_59 = {}; +var _$types_40 = {}; +/// +"use strict"; + +var _$grid_60 = {}; "use strict"; -Object.defineProperty(_$grid_59, "__esModule", { +Object.defineProperty(_$grid_60, "__esModule", { value: true }); -_$grid_59.default = void 0; +_$grid_60.default = void 0; -function ___slicedToArray_59(arr, i) { return ___arrayWithHoles_59(arr) || ___iterableToArrayLimit_59(arr, i) || ___nonIterableRest_59(); } +function ___slicedToArray_60(arr, i) { return ___arrayWithHoles_60(arr) || ___iterableToArrayLimit_60(arr, i) || ___nonIterableRest_60(); } -function ___nonIterableRest_59() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } +function ___nonIterableRest_60() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } -function ___iterableToArrayLimit_59(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } +function ___iterableToArrayLimit_60(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } -function ___arrayWithHoles_59(arr) { if (Array.isArray(arr)) return arr; } +function ___arrayWithHoles_60(arr) { if (Array.isArray(arr)) return arr; } function createGrid(grid) { var coordFields = [['x', 'y'], ['left', 'top'], ['right', 'bottom'], ['width', 'height']].filter(function (_ref) { - var _ref2 = ___slicedToArray_59(_ref, 2), + var _ref2 = ___slicedToArray_60(_ref, 2), xField = _ref2[0], yField = _ref2[1]; @@ -9000,7 +9018,7 @@ function createGrid(grid) { _ref3 = coordFields[_i2]; var _ref4 = _ref3, - _ref5 = ___slicedToArray_59(_ref4, 2), + _ref5 = ___slicedToArray_60(_ref4, 2), xField = _ref5[0], yField = _ref5[1]; @@ -9014,25 +9032,25 @@ function createGrid(grid) { }; } -var ___default_59 = createGrid; -_$grid_59.default = ___default_59; +var ___default_60 = createGrid; +_$grid_60.default = ___default_60; -var _$snappers_60 = {}; +var _$snappers_61 = {}; "use strict"; -Object.defineProperty(_$snappers_60, "__esModule", { +Object.defineProperty(_$snappers_61, "__esModule", { value: true }); -Object.defineProperty(_$snappers_60, "grid", { +Object.defineProperty(_$snappers_61, "grid", { enumerable: true, get: function get() { return _grid.default; } }); -var _grid = ___interopRequireDefault_60(_$grid_59); +var _grid = ___interopRequireDefault_61(_$grid_60); -function ___interopRequireDefault_60(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function ___interopRequireDefault_61(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var _$index_25 = { exports: {} }; "use strict"; @@ -9047,9 +9065,11 @@ var ___interact_25 = ___interopRequireWildcard_25(_$interact_23); var __modifiers_25 = ___interopRequireWildcard_25(_$modifiers_27); -var ___extend_25 = ___interopRequireDefault_25(_$extend_47); +_$types_40; -var snappers = ___interopRequireWildcard_25(_$snappers_60); +var ___extend_25 = ___interopRequireDefault_25(_$extend_48); + +var snappers = ___interopRequireWildcard_25(_$snappers_61); function ___interopRequireDefault_25(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -9074,6 +9094,9 @@ function __init_25(win) { var ___default_25 = ___interact_25.default; _$index_25.exports.default = ___default_25; +___interact_25.default['default'] = ___interact_25.default; // tslint:disable-line no-string-literal + +___interact_25.default['init'] = __init_25; // tslint:disable-line no-string-literal if (("object" === "undefined" ? "undefined" : ___typeof_25(_$index_25)) === 'object' && !!_$index_25) { _$index_25.exports = ___interact_25.default; diff --git a/packages/interactjs/dist/interact.js.map b/packages/interactjs/dist/interact.js.map index 52aba25de..9de87844a 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.ts","../utils/extend.ts","../utils/isWindow.ts","../utils/window.ts","../utils/is.ts","../utils/normalizeListeners.ts","../core/Eventable.ts","../core/defaultOptions.ts","../utils/domObjects.ts","../utils/browser.ts","../utils/domUtils.ts","../utils/rect.ts","../utils/getOriginXY.ts","../utils/hypot.ts","../core/InteractEvent.ts","../utils/clone.ts","../utils/pointerExtend.ts","../utils/pointerUtils.ts","../utils/events.ts","../core/Interactable.ts","../core/PointerInfo.ts","../utils/Signals.ts","../utils/raf.ts","../utils/index.ts","../core/Interaction.ts","../utils/interactionFinder.ts","../core/interactions.ts","../core/scope.ts","../actions/drag.ts","../actions/drop/DropEvent.ts","../actions/drop/index.ts","../actions/gesture.ts","../actions/resize.ts","../actions/index.ts","../auto-scroll/index.ts","../auto-start/InteractableMethods.ts","../auto-start/base.ts","../auto-start/dragAxis.ts","../auto-start/hold.ts","../auto-start/index.ts","../core/interactablePreventDefault.ts","../modifiers/base.ts","../inertia/index.ts","../interact/interact.ts","../modifiers/restrict/pointer.ts","../modifiers/restrict/edges.ts","../modifiers/restrict/size.ts","../modifiers/snap/pointer.ts","../modifiers/snap/size.ts","../modifiers/snap/edges.ts","../modifiers/index.ts","../pointer-events/PointerEvent.ts","../pointer-events/base.ts","../pointer-events/holdRepeat.ts","../pointer-events/interactableTargets.ts","../pointer-events/index.ts","../reflow/index.ts","../interact/index.ts","../utils/snappers/grid.ts","../utils/snappers/index.ts","index.ts","../../node_modules/browser-pack-flat/_postlude"],"names":[],"mappings":"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","file":"interact.js","sourceRoot":"","sourcesContent":["/**\n * interact.js v1.4.0-alpha.27+sha.12b8f8f-dirty\n *\n * Copyright (c) 2012-2019 Taye Adeyemi \n * Released under the MIT License.\n * https://raw.github.com/taye/interact.js/master/LICENSE\n */\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.interact = f()}})(function(){var define,module,exports;\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 function extend> (dest: U, source: T) {\n for (const prop in source) {\n dest[prop] = source[prop]\n }\n return dest as T & U\n}\n","export default (thing) => !!(thing && thing.Window) && (thing instanceof thing.Window)\n","import isWindow from './isWindow'\n\nconst win = {\n realWindow: undefined,\n window: undefined,\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","// tslint:disable variable-name\n\nimport isWindow from './isWindow'\nimport win from './window'\n\nexport const window = (thing: any): thing is Window =>\n thing === win.window || isWindow(thing)\n\nexport const docFrag = (thing: any): thing is DocumentFragment =>\n object(thing) && thing.nodeType === 11\n\nexport const object = (thing: any): thing is { [index: string]: any } =>\n !!thing && (typeof thing === 'object')\n\nexport const func = (thing: any): thing is (...args: any) => any =>\n typeof thing === 'function'\n\nexport const number = (thing: any): thing is number =>\n typeof thing === 'number'\n\nexport const bool = (thing: any): thing is boolean =>\n typeof thing === 'boolean'\n\nexport const string = (thing: any): thing is string =>\n typeof thing === 'string'\n\nexport const element = (thing: any): thing is Element => {\n if (!thing || (typeof thing !== 'object')) { return false }\n\n const _window = win.getWindow(thing) || win.window\n\n return (/object|function/.test(typeof _window.Element)\n ? thing instanceof _window.Element // DOM2\n : thing.nodeType === 1 && typeof thing.nodeName === 'string')\n}\n\nexport const plainObject: typeof object = (thing: any): thing is { [index: string]: any } =>\n object(thing) &&\n !!thing.constructor &&\n /function Object\\b/.test(thing.constructor.toString())\n\nexport const array = (thing: any): thing is any[] =>\n (object(thing) &&\n (typeof thing.length !== 'undefined') &&\n func(thing.splice))\n","import extend from './extend'\nimport * as is from './is'\n\nexport interface NormalizedListeners {\n [type: string]: Interact.Listener[]\n}\n\nexport default function normalize (\n type: Interact.EventTypes,\n listeners?: Interact.ListenersArg | Interact.ListenersArg[],\n result?: NormalizedListeners,\n): NormalizedListeners {\n result = result || {}\n\n if (is.string(type) && type.search(' ') !== -1) {\n type = split(type)\n }\n\n if (is.array(type)) {\n return type.reduce(\n (acc, t) => extend(acc, normalize(t, listeners, result)),\n result\n )\n }\n\n // ({ type: fn }) -> ('', { type: fn })\n if (is.object(type)) {\n listeners = type\n type = ''\n }\n\n if (is.func(listeners)) {\n result[type] = result[type] || []\n result[type].push(listeners)\n }\n else if (is.array(listeners)) {\n for (const l of listeners) {\n normalize(type, l, result)\n }\n }\n else if (is.object(listeners)) {\n for (const prefix in listeners) {\n const combinedTypes = split(prefix).map((p) => `${type}${p}`)\n\n normalize(combinedTypes, listeners[prefix], result)\n }\n }\n\n return result as NormalizedListeners\n}\n\nfunction split (type: string) {\n return type.trim().split(/ +/)\n}\n","import * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport normalize, { NormalizedListeners } from '@interactjs/utils/normalizeListeners'\nimport { EventPhase, InteractEvent } from './InteractEvent'\nimport { ActionName } from './scope'\n\nfunction fireUntilImmediateStopped<\nT extends ActionName,\nP extends EventPhase,\n> (event: InteractEvent, listeners: Interact.Listener[]) {\n for (const listener of listeners) {\n if (event.immediatePropagationStopped) { break }\n\n listener(event)\n }\n}\n\nclass Eventable {\n options: any\n types: NormalizedListeners = {}\n propagationStopped = false\n immediatePropagationStopped = false\n global: any\n\n constructor (options?: { [index: string]: any }) {\n this.options = extend({}, options || {})\n }\n\n fire (event: any) {\n let listeners\n const global = this.global\n\n // Interactable#on() listeners\n // tslint:disable no-conditional-assignment\n if ((listeners = this.types[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n\n // interact.on() listeners\n if (!event.propagationStopped && global && (listeners = global[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n }\n\n on (type: string, listener: Interact.ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n this.types[type] = arr.merge(this.types[type] || [], listeners[type])\n }\n }\n\n off (type: string, listener: Interact.ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n const eventList = this.types[type]\n\n if (!eventList || !eventList.length) { continue }\n\n for (const subListener of listeners[type]) {\n const index = eventList.indexOf(subListener)\n\n if (index !== -1) {\n eventList.splice(index, 1)\n }\n }\n }\n }\n}\n\nexport default Eventable\n","export interface Defaults {\n base: BaseDefaults\n perAction: PerActionDefaults\n actions: ActionDefaults\n}\n\nexport interface ActionDefaults {\n [key: string]: Options\n}\n\nexport interface BaseDefaults {\n preventDefault?: 'auto' | 'never' | string\n deltaSource?: 'page' | 'client'\n [key: string]: any\n}\n\nexport interface PerActionDefaults {\n enabled?: boolean\n origin?: Interact.Point | string | Element\n listeners?: Interact.Listeners\n}\n\nexport interface Options extends BaseDefaults, PerActionDefaults {}\nexport interface OptionsArg extends BaseDefaults, Interact.OrBoolean {}\n\nexport const defaults: Defaults = {\n base: {\n preventDefault: 'auto',\n deltaSource: 'page',\n },\n\n perAction: {\n enabled: false,\n origin: { x: 0, y: 0 },\n },\n\n actions: {} as ActionDefaults,\n}\n\nexport default defaults\n","const domObjects: {\n init: any,\n document: Document,\n DocumentFragment: typeof DocumentFragment,\n SVGElement: typeof SVGElement,\n SVGSVGElement: typeof SVGSVGElement,\n SVGElementInstance: any,\n Element: typeof Element,\n HTMLElement: typeof HTMLElement,\n Event: typeof Event,\n Touch: typeof Touch,\n PointerEvent: typeof PointerEvent,\n} =\n{\n init,\n document: null as any,\n DocumentFragment: null as any,\n SVGElement: null as any,\n SVGSVGElement: null as any,\n // eslint-disable-next-line no-undef\n SVGElementInstance: null as any,\n Element: null as any,\n HTMLElement: null as any,\n Event: null as any,\n Touch: null as any,\n PointerEvent: null as any,\n}\n\nfunction blank () {}\n\nexport default domObjects\n\nfunction init (window: Window) {\n const win = window as any\n\n domObjects.document = win.document\n domObjects.DocumentFragment = win.DocumentFragment || blank\n domObjects.SVGElement = win.SVGElement || blank\n domObjects.SVGSVGElement = win.SVGSVGElement || blank\n domObjects.SVGElementInstance = win.SVGElementInstance || blank\n domObjects.Element = win.Element || blank\n domObjects.HTMLElement = win.HTMLElement || domObjects.Element\n\n domObjects.Event = win.Event\n domObjects.Touch = win.Touch || blank\n domObjects.PointerEvent = (win.PointerEvent || win.MSPointerEvent)\n}\n","import domObjects from './domObjects'\nimport * as is from './is'\nimport win from './window'\n\nconst browser = {\n init,\n supportsTouch: null as boolean,\n supportsPointerEvent: null as boolean,\n isIOS7: null as boolean,\n isIOS: null as boolean,\n isIe9: null as boolean,\n isOperaMobile: null as boolean,\n prefixedMatchesSelector: null as string,\n pEventTypes: null as {\n up: string,\n down: string,\n over: string,\n out: string,\n move: string,\n cancel: string,\n },\n wheelEvent: null as string,\n}\n\nfunction init (window) {\n const Element = domObjects.Element as any\n const navigator = win.window.navigator\n\n // Does the browser support touch input?\n browser.supportsTouch = ('ontouchstart' in window) ||\n (is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch)\n\n // Does the browser support PointerEvents\n browser.supportsPointerEvent = !!domObjects.PointerEvent\n\n browser.isIOS = (/iP(hone|od|ad)/.test(navigator.platform))\n\n // scrolling doesn't change the result of getClientRects on iOS 7\n browser.isIOS7 = (/iP(hone|od|ad)/.test(navigator.platform) &&\n /OS 7[^\\d]/.test(navigator.appVersion))\n\n browser.isIe9 = /MSIE 9/.test(navigator.userAgent)\n\n // Opera Mobile must be handled differently\n browser.isOperaMobile = (navigator.appName === 'Opera' &&\n browser.supportsTouch &&\n navigator.userAgent.match('Presto'))\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\nexport default browser\n","import browser from './browser'\nimport domObjects from './domObjects'\nimport * as is from './is'\nimport win from './window'\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 // tslint:disable-next-line\n while ((parent = (parent as any).host) && is.docFrag(parent)) {\n continue\n }\n\n return parent\n }\n\n return parent\n}\n\nexport function matchesSelector (element, selector) {\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (win.window !== win.realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ')\n }\n\n return element[browser.prefixedMatchesSelector](selector)\n}\n\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 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","import { closest, getElementRect, parentNode } from './domUtils'\nimport extend from './extend'\nimport * as is from './is'\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 { rectToXY, resolveRectLike } from './rect'\n\nexport default function (target, element, action?) {\n const actionOptions = target.options[action]\n const actionOrigin = actionOptions && actionOptions.origin\n const origin = actionOrigin || target.options.origin\n\n const originRect = resolveRectLike(origin, target, element, [target && element])\n\n return rectToXY(originRect) || { x: 0, y: 0 }\n}\n","export default (x, y) => Math.sqrt(x * x + y * y)\n","import extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport hypot from '@interactjs/utils/hypot'\nimport defaults from './defaultOptions'\nimport Interactable from './Interactable'\nimport Interaction from './Interaction'\n\nexport enum EventPhase {\n Start = 'start',\n Move = 'move',\n End = 'end',\n _NONE = '',\n}\n\nexport class InteractEvent<\n T extends Interact.ActionName = Interact.ActionName,\n P extends EventPhase = EventPhase._NONE,\n> {\n type: string\n target: Element\n relatedTarget: Element | null\n currentTarget: Element\n screenX?: number\n screenY?: number\n button: number\n buttons: number\n ctrlKey: boolean\n shiftKey: boolean\n altKey: boolean\n metaKey: boolean\n // added by interact.js\n interactable: Interactable\n interaction: any\n page: Interact.Point\n client: Interact.Point\n delta: Interact.Point\n x0: number\n y0: number\n t0: number\n dt: number\n duration: number\n clientX0: number\n clientY0: number\n velocity: Interact.Point\n speed: number\n swipe: ReturnType['getSwipe']>\n timeStamp: any\n // drag\n dragEnter?: Element\n dragLeave?: Element\n // resize\n axes?: Interact.Point\n // gestureend\n distance?: number\n angle?: number\n da?: number // angle change\n scale?: number // ratio of distance start to current event\n ds?: number // scale change\n box?: Interact.Rect // enclosing box of all points\n preEnd?: boolean\n immediatePropagationStopped = false\n propagationStopped = false\n\n /** */\n constructor (\n interaction: Interaction,\n event: Interact.PointerEventType,\n actionName: T,\n phase: P,\n element: Element,\n related?: Element,\n preEnd?: boolean,\n type?: string,\n ) {\n element = element || interaction.element\n\n const target = interaction.target\n // FIXME: add deltaSource to defaults\n const deltaSource = (((target && target.options) || defaults) as any).deltaSource as 'page' | 'client'\n const origin = getOriginXY(target, element, actionName)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const prevEvent = starting ? this : interaction.prevEvent\n const coords = starting\n ? interaction.coords.start\n : ending\n ? { page: prevEvent.page, client: prevEvent.client, timeStamp: interaction.coords.cur.timeStamp }\n : interaction.coords.cur\n\n this.page = extend({}, coords.page)\n this.client = extend({}, coords.client)\n this.timeStamp = coords.timeStamp\n\n if (!ending) {\n this.page.x -= origin.x\n this.page.y -= origin.y\n\n this.client.x -= origin.x\n this.client.y -= origin.y\n }\n\n this.ctrlKey = event.ctrlKey\n this.altKey = event.altKey\n this.shiftKey = event.shiftKey\n this.metaKey = event.metaKey\n this.button = (event as MouseEvent).button\n this.buttons = (event as MouseEvent).buttons\n this.target = element\n this.currentTarget = element\n this.relatedTarget = related || null\n this.preEnd = preEnd\n this.type = type || (actionName + (phase || ''))\n this.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 set pageX (value) { this.page.x = value }\n get pageY () { return this.page.y }\n set pageY (value) { this.page.y = value }\n\n get clientX () { return this.client.x }\n set clientX (value) { this.client.x = value }\n get clientY () { return this.client.y }\n set clientY (value) { this.client.y = value }\n\n get dx () { return this.delta.x }\n set dx (value) { this.delta.x = value }\n get dy () { return this.delta.y }\n set dy (value) { this.delta.y = value }\n\n get velocityX () { return this.velocity.x }\n set velocityX (value) { this.velocity.x = value }\n get velocityY () { return this.velocity.y }\n set velocityY (value) { this.velocity.y = value }\n\n getSwipe () {\n const interaction = this.interaction\n\n if (interaction.prevEvent.speed < 600 ||\n this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n return null\n }\n\n let angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI\n const overlap = 22.5\n\n if (angle < 0) {\n angle += 360\n }\n\n const left = 135 - overlap <= angle && angle < 225 + overlap\n const up = 225 - overlap <= angle && angle < 315 + overlap\n\n const right = !left && (315 - overlap <= angle || angle < 45 + overlap)\n const down = !up && 45 - overlap <= angle && angle < 135 + overlap\n\n return {\n up,\n down,\n left,\n right,\n angle,\n speed: interaction.prevEvent.speed,\n velocity: {\n x: interaction.prevEvent.velocityX,\n y: interaction.prevEvent.velocityY,\n },\n }\n }\n\n preventDefault () {}\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n}\n\nexport default InteractEvent\n","import * as arr from './arr'\nimport * as is from './is'\n\nexport default function clone (source: T): Partial {\n const dest = {} as Partial\n\n for (const prop in source) {\n const value = source[prop]\n\n if (is.plainObject(value)) {\n dest[prop] = clone(value) as any\n }\n else if (is.array(value)) {\n dest[prop] = arr.from(value)\n }\n else {\n dest[prop] = value\n }\n }\n\n return dest\n}\n","export interface PointerExtend {\n webkit: RegExp\n [prefix: string]: RegExp\n}\n\nexport 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\nexport default pointerExtend\n","import browser from './browser'\nimport dom from './domObjects'\nimport * as domUtils from './domUtils'\nimport hypot from './hypot'\nimport * as is from './is'\nimport pointerExtend from './pointerExtend'\n\nconst pointerUtils = {\n copyCoords (dest, src) {\n dest.page = dest.page || {}\n dest.page.x = src.page.x\n dest.page.y = src.page.y\n\n dest.client = dest.client || {}\n dest.client.x = src.client.x\n dest.client.y = src.client.y\n\n dest.timeStamp = src.timeStamp\n },\n\n setCoordDeltas (targetObj, prev, cur) {\n targetObj.page.x = cur.page.x - prev.page.x\n targetObj.page.y = cur.page.y - prev.page.y\n targetObj.client.x = cur.client.x - prev.client.x\n targetObj.client.y = cur.client.y - prev.client.y\n targetObj.timeStamp = cur.timeStamp - prev.timeStamp\n },\n\n setCoordVelocity (targetObj, delta) {\n const dt = Math.max(delta.timeStamp / 1000, 0.001)\n\n targetObj.page.x = delta.page.x / dt\n targetObj.page.y = delta.page.y / dt\n targetObj.client.x = delta.client.x / dt\n targetObj.client.y = delta.client.y / dt\n targetObj.timeStamp = dt\n },\n\n isNativePointer (pointer) {\n return (pointer instanceof dom.Event || pointer instanceof dom.Touch)\n },\n\n // Get specified X/Y coords for mouse or event.touches[0]\n getXY (type, pointer, xy) {\n xy = xy || {}\n type = type || 'page'\n\n xy.x = pointer[type + 'X']\n xy.y = pointer[type + 'Y']\n\n return xy\n },\n\n getPageXY (pointer: Interact.PointerType | Interact.InteractEvent, page?: Interact.Point) {\n page = page || { x: 0, y: 0 }\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n pointerUtils.getXY('screen', pointer, page)\n\n page.x += window.scrollX\n page.y += window.scrollY\n }\n else {\n pointerUtils.getXY('page', pointer, page)\n }\n\n return page\n },\n\n getClientXY (pointer, client) {\n client = client || {}\n\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n pointerUtils.getXY('screen', pointer, client)\n }\n else {\n pointerUtils.getXY('client', pointer, client)\n }\n\n return client\n },\n\n getPointerId (pointer) {\n return is.number(pointer.pointerId) ? pointer.pointerId : pointer.identifier\n },\n\n setCoords (targetObj, pointers: any[], timeStamp?: number) {\n const pointer = (pointers.length > 1\n ? pointerUtils.pointerAverage(pointers)\n : pointers[0])\n\n const tmpXY = {} as { x: number, y: number }\n\n pointerUtils.getPageXY(pointer, tmpXY)\n targetObj.page.x = tmpXY.x\n targetObj.page.y = tmpXY.y\n\n pointerUtils.getClientXY(pointer, tmpXY)\n targetObj.client.x = tmpXY.x\n targetObj.client.y = tmpXY.y\n\n targetObj.timeStamp = is.number(timeStamp) ? timeStamp : new Date().getTime()\n },\n\n pointerExtend,\n\n getTouchPair (event) {\n const touches = []\n\n // array of touches is supplied\n if (is.array(event)) {\n touches[0] = event[0]\n touches[1] = event[1]\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0]\n touches[1] = event.changedTouches[0]\n }\n else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0]\n touches[1] = event.changedTouches[1]\n }\n }\n else {\n touches[0] = event.touches[0]\n touches[1] = event.touches[1]\n }\n }\n\n return touches\n },\n\n pointerAverage (pointers: PointerEvent[] | Event[]) {\n const average = {\n pageX : 0,\n pageY : 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n }\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop] += pointer[prop]\n }\n }\n for (const prop in average) {\n average[prop] /= pointers.length\n }\n\n return average\n },\n\n touchBBox (event: Event | PointerEvent[]) {\n if (!(event as any).length &&\n !((event as TouchEvent).touches &&\n (event as TouchEvent).touches.length > 1)) {\n return null\n }\n\n const touches = pointerUtils.getTouchPair(event)\n const minX = Math.min(touches[0].pageX, touches[1].pageX)\n const minY = Math.min(touches[0].pageY, touches[1].pageY)\n const maxX = Math.max(touches[0].pageX, touches[1].pageX)\n const maxY = Math.max(touches[0].pageY, touches[1].pageY)\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n width: maxX - minX,\n height: maxY - minY,\n }\n },\n\n touchDistance (event, deltaSource) {\n const sourceX = deltaSource + 'X'\n const sourceY = deltaSource + 'Y'\n const touches = pointerUtils.getTouchPair(event)\n\n const dx = touches[0][sourceX] - touches[1][sourceX]\n const dy = touches[0][sourceY] - touches[1][sourceY]\n\n return hypot(dx, dy)\n },\n\n touchAngle (event, deltaSource) {\n const sourceX = deltaSource + 'X'\n const sourceY = deltaSource + 'Y'\n const touches = pointerUtils.getTouchPair(event)\n const dx = touches[1][sourceX] - touches[0][sourceX]\n const dy = touches[1][sourceY] - touches[0][sourceY]\n const angle = 180 * Math.atan2(dy, dx) / Math.PI\n\n return angle\n },\n\n getPointerType (pointer) {\n return is.string(pointer.pointerType)\n ? pointer.pointerType\n : is.number(pointer.pointerType)\n ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType]\n // if the PointerEvent API isn't available, then the \"pointer\" must\n // be either a MouseEvent, TouchEvent, or Touch object\n : /touch/.test(pointer.type) || pointer instanceof dom.Touch\n ? 'touch'\n : 'mouse'\n },\n\n // [ event.target, event.currentTarget ]\n getEventTargets (event) {\n const path = is.func(event.composedPath) ? event.composedPath() : event.path\n\n return [\n domUtils.getActualElement(path ? path[0] : event.target),\n domUtils.getActualElement(event.currentTarget),\n ]\n },\n\n newCoords () {\n return {\n page : { x: 0, y: 0 },\n client : { x: 0, y: 0 },\n timeStamp: 0,\n }\n },\n\n coordsToEvent ({ 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 { contains } from './arr'\nimport * as domUtils from './domUtils'\nimport * as is from './is'\nimport pExtend from './pointerExtend'\nimport pointerUtils from './pointerUtils'\n\ntype Listener = (event: Event | FakeEvent) => any\n\nconst elements: EventTarget[] = []\nconst targets: Array<{\n events: { [type: string]: Listener[] },\n typeCount: number,\n}> = []\n\nconst delegatedEvents: {\n [type: string]: {\n selectors: string[],\n contexts: EventTarget[],\n listeners: Array>,\n },\n} = {}\nconst documents: Document[] = []\n\nfunction add (element: EventTarget, type: string, listener: Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n let elementIndex = elements.indexOf(element)\n let target = targets[elementIndex]\n\n if (!target) {\n target = {\n events: {},\n typeCount: 0,\n }\n\n elementIndex = elements.push(element) - 1\n targets.push(target)\n }\n\n if (!target.events[type]) {\n target.events[type] = []\n target.typeCount++\n }\n\n if (!contains(target.events[type], listener)) {\n element.addEventListener(type, listener as any, events.supportsOptions ? options : !!options.capture)\n target.events[type].push(listener)\n }\n}\n\nfunction remove (element: EventTarget, type: string, listener?: 'all' | Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n const elementIndex = elements.indexOf(element)\n const target = targets[elementIndex]\n\n if (!target || !target.events) {\n return\n }\n\n if (type === 'all') {\n for (type in target.events) {\n if (target.events.hasOwnProperty(type)) {\n remove(element, type, 'all')\n }\n }\n return\n }\n\n if (target.events[type]) {\n const len = target.events[type].length\n\n if (listener === 'all') {\n for (let i = 0; i < len; i++) {\n remove(element, type, target.events[type][i], options)\n }\n return\n }\n else {\n for (let i = 0; i < len; i++) {\n if (target.events[type][i] === listener) {\n element.removeEventListener(type, listener as any, events.supportsOptions ? options : !!options.capture)\n target.events[type].splice(i, 1)\n\n break\n }\n }\n }\n\n if (target.events[type] && target.events[type].length === 0) {\n (target.events[type] as any) = null\n target.typeCount--\n }\n }\n\n if (!target.typeCount) {\n targets.splice(elementIndex, 1)\n elements.splice(elementIndex, 1)\n }\n}\n\nfunction addDelegate (selector: string, context: EventTarget, type: string, listener: Listener, optionalArg?: any) {\n const options = getOptions(optionalArg)\n if (!delegatedEvents[type]) {\n delegatedEvents[type] = {\n contexts : [],\n listeners: [],\n selectors: [],\n }\n\n // add delegate listener functions\n for (const doc of documents) {\n add(doc, type, delegateListener)\n add(doc, type, delegateUseCapture, true)\n }\n }\n\n const delegated = delegatedEvents[type]\n let index\n\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n if (delegated.selectors[index] === selector &&\n delegated.contexts[index] === context) {\n break\n }\n }\n\n if (index === -1) {\n index = delegated.selectors.length\n\n delegated.selectors.push(selector)\n delegated.contexts.push(context)\n delegated.listeners.push([])\n }\n\n // keep listener and capture and passive flags\n delegated.listeners[index].push([listener, !!options.capture, options.passive])\n}\n\nfunction removeDelegate (selector, context, type, listener?, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const delegated = delegatedEvents[type]\n let matchFound = false\n let index\n\n if (!delegated) { return }\n\n // count from last index of delegated to 0\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n // look for matching selector and context Node\n if (delegated.selectors[index] === selector &&\n delegated.contexts[index] === context) {\n const listeners = delegated.listeners[index]\n\n // each item of the listeners array is an array: [function, capture, passive]\n for (let i = listeners.length - 1; i >= 0; i--) {\n const [fn, capture, passive] = listeners[i]\n\n // check if the listener functions and capture and passive flags match\n if (fn === listener && capture === !!options.capture && passive === options.passive) {\n // remove the listener from the array of listeners\n listeners.splice(i, 1)\n\n // if all listeners for this interactable have been removed\n // remove the interactable from the delegated arrays\n if (!listeners.length) {\n delegated.selectors.splice(index, 1)\n delegated.contexts.splice(index, 1)\n delegated.listeners.splice(index, 1)\n\n // remove delegate function from context\n remove(context, type, delegateListener)\n remove(context, type, delegateUseCapture, true)\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegatedEvents[type] = null\n }\n }\n\n // only remove one listener\n matchFound = true\n break\n }\n }\n\n if (matchFound) { break }\n }\n }\n}\n\n// bound to the interactable context when a DOM event\n// listener is added to a selector interactable\nfunction delegateListener (event: Event, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const fakeEvent = new FakeEvent(event)\n const delegated = delegatedEvents[event.type]\n const [eventTarget] = (pointerUtils.getEventTargets(event))\n let element = eventTarget\n\n // climb up document tree looking for selector matches\n while (is.element(element)) {\n for (let i = 0; i < delegated.selectors.length; i++) {\n const selector = delegated.selectors[i]\n const context = delegated.contexts[i]\n\n if (domUtils.matchesSelector(element, selector) &&\n domUtils.nodeContains(context, eventTarget) &&\n domUtils.nodeContains(context, element)) {\n const listeners = delegated.listeners[i]\n\n fakeEvent.currentTarget = element\n\n for (const [fn, capture, passive] of listeners) {\n if (capture === !!options.capture && passive === options.passive) {\n fn(fakeEvent)\n }\n }\n }\n }\n\n element = domUtils.parentNode(element)\n }\n}\n\nfunction delegateUseCapture (event: Event) {\n return delegateListener.call(this, event, true)\n}\n\nfunction getOptions (param) {\n return is.object(param) ? param : { capture: param }\n}\n\nexport class FakeEvent implements Partial {\n currentTarget: EventTarget\n\n constructor (public originalEvent) {\n // duplicate the event so that currentTarget can be changed\n pExtend(this, originalEvent)\n }\n\n preventOriginalDefault () {\n this.originalEvent.preventDefault()\n }\n\n stopPropagation () {\n this.originalEvent.stopPropagation()\n }\n\n stopImmediatePropagation () {\n this.originalEvent.stopImmediatePropagation()\n }\n}\n\nconst events = {\n add,\n remove,\n\n addDelegate,\n removeDelegate,\n\n delegateListener,\n delegateUseCapture,\n delegatedEvents,\n documents,\n\n supportsOptions: false,\n supportsPassive: false,\n\n _elements: elements,\n _targets: targets,\n\n init (window: Window) {\n window.document.createElement('div').addEventListener('test', null, {\n get capture () { return (events.supportsOptions = true) },\n get passive () { return (events.supportsPassive = true) },\n })\n },\n}\n\nexport default events\n","import * as arr from '@interactjs/utils/arr'\nimport browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport { getElementRect, nodeContains, trySelector } from '@interactjs/utils/domUtils'\nimport events from '@interactjs/utils/events'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport { getWindow } from '@interactjs/utils/window'\nimport { ActionDefaults, Defaults, Options } from './defaultOptions'\nimport Eventable from './Eventable'\nimport { Actions } from './scope'\n\n/** */\nexport class Interactable implements Partial {\n protected get _defaults (): Defaults {\n return {\n base: {},\n perAction: {},\n actions: {} as ActionDefaults,\n }\n }\n\n options!: Required\n readonly _actions: Actions\n readonly target: Interact.Target\n readonly events = new Eventable()\n readonly _context: Element\n readonly _win: Window\n readonly _doc: Document\n\n /** */\n constructor (target: Interact.Target, options: any, defaultContext: Element | Node) {\n this._actions = options.actions\n this.target = target\n this._context = options.context || defaultContext\n this._win = getWindow(trySelector(target) ? this._context : target)\n this._doc = this._win.document\n\n this.set(options)\n }\n\n setOnEvents (actionName: string, phases: { [phase: string]: Interact.ListenersArg }) {\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: Interact.OrBoolean) {\n const defaults = this._defaults\n\n // for all the default per-action options\n for (const optionName in options) {\n const actionOptions = this.options[actionName]\n const optionValue = options[optionName]\n const isArray = is.array(optionValue)\n\n // remove old event listeners and add new ones\n if (optionName === 'listeners') {\n this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue)\n }\n\n // if the option value is an array\n if (isArray) {\n actionOptions[optionName] = arr.from(optionValue)\n }\n // if the option value is an object\n else if (!isArray && is.plainObject(optionValue)) {\n // copy the object\n actionOptions[optionName] = extend(\n actionOptions[optionName] || {},\n clone(optionValue))\n\n // set anabled field to true if it exists in the defaults\n if (is.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) {\n actionOptions[optionName].enabled = optionValue.enabled !== false\n }\n }\n // if the option value is a boolean and the default is an object\n else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n actionOptions[optionName].enabled = optionValue\n }\n // if it's anything else, do a plain assignment\n else {\n actionOptions[optionName] = optionValue\n }\n }\n }\n\n /**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {object} The object's bounding rectangle.\n */\n getRect (element: Element) {\n element = element || (is.element(this.target)\n ? this.target\n : null)\n\n if (is.string(this.target)) {\n element = element || this._context.querySelector(this.target)\n }\n\n return getElementRect(element)\n }\n\n /**\n * Returns or sets the function used to calculate the interactable's\n * element's rectangle\n *\n * @param {function} [checker] A function which returns this Interactable's\n * bounding rectangle. See {@link Interactable.getRect}\n * @return {function | object} The checker function or this Interactable\n */\n rectChecker (checker: (element: Element) => any) {\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: 'on' | 'off', typeArg: Interact.EventTypes, listenerArg?: Interact.ListenersArg | null, options?: any) {\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg\n listenerArg = null\n }\n\n const addRemove = method === 'on' ? 'add' : 'remove'\n const listeners = normalizeListeners(typeArg, listenerArg)\n\n for (let type in listeners) {\n if (type === 'wheel') { type = browser.wheelEvent }\n\n for (const listener of listeners[type]) {\n // if it is an action event type\n if (arr.contains(this._actions.eventTypes, type)) {\n this.events[method](type, listener)\n }\n // delegated event\n else if (is.string(this.target)) {\n events[`${addRemove}Delegate`](this.target, this._context, type, listener, options)\n }\n // remove listener from this Interatable's element\n else {\n (events[addRemove] as typeof events.remove)(this.target, type, listener, options)\n }\n }\n }\n\n return this\n }\n\n /**\n * Binds a listener for an InteractEvent, pointerEvent or DOM event.\n *\n * @param {string | array | object} types The types of events to listen\n * for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * addEventListener\n * @return {Interactable} This Interactable\n */\n on (types: Interact.EventTypes, listener?: Interact.ListenersArg, options?: any) {\n return this._onOff('on', types, listener, options)\n }\n\n /**\n * Removes an InteractEvent, pointerEvent or DOM event listener.\n *\n * @param {string | array | object} types The types of events that were\n * listened for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * removeEventListener\n * @return {Interactable} This Interactable\n */\n off (types: string | string[] | Interact.EventTypes, listener?: Interact.ListenersArg, options?: any) {\n return this._onOff('off', types, listener, options)\n }\n\n /**\n * Reset the options of this Interactable\n *\n * @param {object} options The new settings to apply\n * @return {object} This Interactable\n */\n set (options: Interact.OptionsArg) {\n const defaults = this._defaults\n\n if (!is.object(options)) {\n options = {}\n }\n\n this.options = clone(defaults.base) as Required\n\n for (const actionName in this._actions.methodDict) {\n const methodName = this._actions.methodDict[actionName]\n\n this.options[actionName] = {}\n this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName]))\n\n this[methodName](options[actionName])\n }\n\n for (const setting in options) {\n if (is.func(this[setting])) {\n this[setting](options[setting])\n }\n }\n\n return this\n }\n\n /**\n * Remove this interactable from the list of interactables and remove it's\n * action capabilities and event listeners\n *\n * @return {interact}\n */\n unset () {\n events.remove(this.target as Node, 'all')\n\n if (is.string(this.target)) {\n // remove delegated events\n for (const type in events.delegatedEvents) {\n const delegated = events.delegatedEvents[type]\n\n if (delegated.selectors[0] === this.target &&\n delegated.contexts[0] === this._context) {\n delegated.selectors.splice(0, 1)\n delegated.contexts.splice(0, 1)\n delegated.listeners.splice(0, 1)\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegated[type] = null\n }\n }\n\n events.remove(this._context, type, events.delegateListener)\n events.remove(this._context, type, events.delegateUseCapture, true)\n }\n }\n else {\n events.remove(this.target as Node, 'all')\n }\n }\n}\n\nexport default Interactable\n","export class PointerInfo {\n constructor (\n public id: number,\n public pointer: Interact.PointerType,\n public event: Interact.PointerEventType,\n public downTime: number,\n public downTarget: EventTarget,\n ) {}\n}\n\nexport default PointerInfo\n","export type SignalListener = (signalArg: PartialSignalArg, sinalName: string) => (void | boolean)\n\nexport interface SignalArg {\n interaction: Interact.Interaction\n Interactable: Interact.Interactable\n iEvent: Interact.InteractEvent\n element: Window | Document | Element\n coords: Interact.Point\n event: Interact.PointerEventType\n phase: Interact.EventPhase\n [index: string]: any\n}\n\nexport type PartialSignalArg = Partial\n\nclass Signals {\n listeners: {\n [signalName: string]: SignalListener[],\n } = {}\n\n on (name: string, listener: SignalListener) {\n if (!this.listeners[name]) {\n this.listeners[name] = [listener]\n return\n }\n\n this.listeners[name].push(listener)\n }\n\n off (name: string, listener: SignalListener) {\n if (!this.listeners[name]) { return }\n\n const index = this.listeners[name].indexOf(listener)\n\n if (index !== -1) {\n this.listeners[name].splice(index, 1)\n }\n }\n\n fire (name: string, arg: any): void | false {\n const targetListeners = this.listeners[name]\n\n if (!targetListeners) { return }\n\n for (const listener of targetListeners) {\n if (listener(arg, name) === false) {\n return false\n }\n }\n }\n}\n\nexport default Signals\n","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 // eslint-disable-next-line standard/no-callback-literal\n const token = setTimeout(() => { callback(currTime + timeToCall) },\n timeToCall)\n\n lastTime = currTime + timeToCall\n return token\n }\n\n cancel = (token) => clearTimeout(token)\n }\n}\n\nexport default {\n request: (callback) => request(callback),\n cancel: (token) => cancel(token),\n init,\n}\n","import * as arr from './arr'\nimport * as dom from './domUtils'\nimport * as is from './is'\nimport win from './window'\n\nexport function warnOnce (this: T, method: (...args: any) => any, message: string) {\n let warned = false\n\n // eslint-disable-next-line no-shadow\n return function (this: T) {\n if (!warned) {\n (win as any).window.console.warn(message)\n warned = true\n }\n\n return method.apply(this, arguments)\n }\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nexport function _getQBezierValue (t: number, p1: number, p2: number, p3: number) {\n const iT = 1 - t\n return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3\n}\n\nexport function getQuadraticCurvePoint (\n startX: number, startY: number, cpX: number, cpY: number, endX: number, endY: number, position: number) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY),\n }\n}\n\n// http://gizma.com/easing/\nexport function easeOutQuad (t: number, b: number, c: number, d: number) {\n t /= d\n return -c * t * (t - 2) + b\n}\n\nexport function copyAction (dest: any, src: any) {\n dest.name = src.name\n dest.axis = src.axis\n dest.edges = src.edges\n\n return dest\n}\n\nexport { default as browser } from './browser'\nexport { default as clone } from './clone'\nexport { default as events } from './events'\nexport { default as extend } from './extend'\nexport { default as getOriginXY } from './getOriginXY'\nexport { default as hypot } from './hypot'\nexport { default as normalizeListeners } from './normalizeListeners'\nexport { default as pointer } from './pointerUtils'\nexport { default as raf } from './raf'\nexport { default as rect } from './rect'\nexport { default as Signals } from './Signals'\nexport { win, arr, dom, is }\n","import * as utils from '@interactjs/utils'\nimport Interactable from './Interactable'\nimport InteractEvent, { EventPhase } from './InteractEvent'\nimport PointerInfo from './PointerInfo'\nimport { ActionName } from './scope'\n\nexport interface Action {\n name: ActionName\n axis?: 'x' | 'y' | 'xy'\n edges?: Partial\n}\n\nexport class Interaction {\n // current interactable being interacted with\n target: Interactable = null\n\n // the target element of the interactable\n element: Element = null\n\n _signals: utils.Signals\n\n // action that's ready to be fired on next move event\n prepared: Action = {\n name : null,\n axis : null,\n edges: null,\n }\n\n pointerType: string\n\n // keep track of added pointers\n pointers: PointerInfo[] = []\n\n // pointerdown/mousedown/touchstart event\n downEvent: Interact.PointerEventType = null\n\n downPointer: Interact.PointerType = {} as Interact.PointerType\n\n _latestPointer: {\n pointer: EventTarget\n event: Interact.PointerEventType\n eventTarget: Node,\n } = {\n pointer: null,\n event: null,\n eventTarget: null,\n }\n\n // previous action event\n prevEvent: InteractEvent = null\n\n pointerIsDown = false\n pointerWasMoved = false\n _interacting = false\n _ending = false\n\n simulation = null\n\n get pointerMoveTolerance () {\n return 1\n }\n\n /**\n * @alias Interaction.prototype.move\n */\n doMove = utils.warnOnce(\n function (this: Interaction, signalArg: any) {\n this.move(signalArg)\n },\n 'The interaction.doMove() method has been renamed to interaction.move()')\n\n coords = {\n // Starting InteractEvent pointer coordinates\n start: utils.pointer.newCoords(),\n // Previous native pointer move event coordinates\n prev: utils.pointer.newCoords(),\n // current native pointer move event coordinates\n cur: utils.pointer.newCoords(),\n // Change in coordinates and time of the pointer\n delta: utils.pointer.newCoords(),\n // pointer velocity\n velocity: utils.pointer.newCoords(),\n }\n\n /** */\n constructor ({ pointerType, signals }: { pointerType: string, signals: utils.Signals }) {\n this._signals = signals\n this.pointerType = pointerType\n\n 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 let pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) {\n pointerIndex = this.updatePointer(pointer, event, eventTarget, false)\n }\n\n this._signals.fire(/cancel$/i.test(event.type) ? 'cancel' : 'up', {\n pointer,\n pointerIndex,\n event,\n eventTarget,\n curEventTarget,\n interaction: this,\n })\n\n if (!this.simulation) {\n this.end(event)\n }\n\n this.pointerIsDown = false\n this.removePointer(pointer, event)\n }\n\n documentBlur (event) {\n this.end(event)\n this._signals.fire('blur', { event, interaction: this })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('move', function (event) {\n * if (event.pageX > 1000) {\n * // end the current action\n * event.interaction.end();\n * // stop all further listeners from being called\n * event.stopImmediatePropagation();\n * }\n * });\n * ```\n *\n * @param {PointerEvent} [event]\n */\n end (event) {\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 ? this.pointers.length - 1\n : utils.arr.findIndex(this.pointers, (curPointer) => curPointer.id === pointerId)\n }\n\n getPointerInfo (pointer) {\n return this.pointers[this.getPointerIndex(pointer)]\n }\n\n updatePointer (pointer, event, eventTarget, down) {\n const id = utils.pointer.getPointerId(pointer)\n let pointerIndex = this.getPointerIndex(pointer)\n let pointerInfo = this.pointers[pointerIndex]\n\n down = down === false\n ? false\n : down || /(down|start)$/i.test(event.type)\n\n if (!pointerInfo) {\n pointerInfo = new PointerInfo(\n id,\n pointer,\n event,\n null,\n null,\n )\n\n pointerIndex = this.pointers.length\n this.pointers.push(pointerInfo)\n }\n else {\n pointerInfo.pointer = pointer\n }\n\n if (down) {\n this.pointerIsDown = true\n\n if (!this.interacting()) {\n utils.pointer.setCoords(this.coords.start, this.pointers.map((p) => p.pointer))\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: Interact.PointerEventType, phase: EventPhase, preEnd: boolean, type: string) {\n const actionName = this.prepared.name\n\n return new InteractEvent(this, event, actionName, phase, this.element, null, preEnd, type)\n }\n\n _fireEvent (iEvent) {\n this.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\nexport default Interaction\nexport { PointerInfo }\n","import * as utils from './index'\n\nconst finder = {\n methodOrder: [ 'simulationResume', 'mouseOrPen', 'hasPointer', 'idle' ],\n\n search (details) {\n for (const method of finder.methodOrder) {\n const interaction = finder[method](details)\n\n if (interaction) {\n return interaction\n }\n }\n },\n\n // try to resume simulation with a new pointer\n simulationResume ({ pointerType, eventType, eventTarget, scope }) {\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 ({ 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 ({ 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 ({ 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 browser from '@interactjs/utils/browser'\nimport domObjects from '@interactjs/utils/domObjects'\nimport events from '@interactjs/utils/events'\nimport finder from '@interactjs/utils/interactionFinder'\nimport pointerUtils from '@interactjs/utils/pointerUtils'\nimport Signals from '@interactjs/utils/Signals'\nimport InteractionBase from './Interaction'\nimport { Scope } from './scope'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n Interaction: typeof InteractionBase\n interactions: {\n signals: Signals\n new: (options: any) => InteractionBase\n list: InteractionBase[]\n listeners: { [type: string]: Interact.Listener }\n eventMap: any\n pointerMoveTolerance: number\n }\n prevTouchTime: number\n }\n}\n\nconst methodNames = [\n 'pointerDown', 'pointerMove', 'pointerUp',\n 'updatePointer', 'removePointer', 'windowBlur',\n]\n\nfunction install (scope: Scope) {\n const signals = new Signals()\n\n const listeners = {} as any\n\n for (const method of methodNames) {\n listeners[method] = doOnInteractions(method, scope)\n }\n\n const pEventTypes = browser.pEventTypes\n const eventMap = {} as { [key: string]: Interact.Listener }\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\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 * as utils from '@interactjs/utils'\nimport domObjects from '@interactjs/utils/domObjects'\nimport defaults from './defaultOptions'\nimport Eventable from './Eventable'\nimport InteractableBase from './Interactable'\nimport InteractEvent from './InteractEvent'\nimport interactions from './interactions'\n\nconst {\n win,\n browser,\n raf,\n Signals,\n events,\n} = utils\n\nexport enum ActionName {\n}\n\nexport interface Actions {\n names: ActionName[]\n methodDict: { [key: string]: string }\n eventTypes: string[]\n}\n\nexport function createScope () {\n return new Scope()\n}\n\nexport type Defaults = typeof defaults\n\nexport class Scope {\n // FIXME Signals\n signals = new Signals()\n browser = browser\n events = events\n utils = utils\n defaults: Defaults = utils.clone(defaults) as Defaults\n Eventable = Eventable\n actions: Actions = {\n names: [],\n methodDict: {},\n eventTypes: [],\n }\n\n InteractEvent = InteractEvent\n Interactable!: typeof InteractableBase\n interactables = new InteractableSet(this)\n\n // main window\n _win!: Window\n\n // main document\n document!: Document\n\n // all documents being listened to\n documents: Array<{ doc: Document, options: any }> = []\n\n constructor () {\n const scope = this as Scope;\n\n (this as { Interactable: typeof InteractableBase }).Interactable = class Interactable extends InteractableBase implements InteractableBase {\n get _defaults () { return scope.defaults }\n\n set (options: any) {\n super.set(options)\n\n scope.interactables.signals.fire('set', {\n options,\n interactable: this,\n })\n\n return this\n }\n\n unset () {\n super.unset()\n scope.interactables.signals.fire('unset', { interactable: this })\n }\n }\n }\n\n init (window: Window) {\n return initScope(this, window)\n }\n\n addDocument (doc: Document, options?: any): void | false {\n // do nothing if document is already known\n if (this.getDocIndex(doc) !== -1) { return false }\n\n const window = win.getWindow(doc)\n\n options = options ? utils.extend({}, options) : {}\n\n this.documents.push({ doc, options })\n events.documents.push(doc)\n\n // don't add an unload event for the main document\n // so that the page may be cached in browser history\n if (doc !== this.document) {\n events.add(window, 'unload', this.onWindowUnload)\n }\n\n this.signals.fire('add-document', { doc, window, scope: this, options })\n }\n\n removeDocument (doc: Document) {\n const index = this.getDocIndex(doc)\n\n const window = win.getWindow(doc)\n const options = this.documents[index].options\n\n events.remove(window, 'unload', this.onWindowUnload)\n\n this.documents.splice(index, 1)\n events.documents.splice(index, 1)\n\n this.signals.fire('remove-document', { doc, window, scope: this, options })\n }\n\n onWindowUnload (event: Event) {\n this.removeDocument(event.target as Document)\n }\n\n getDocIndex (doc: Document) {\n for (let i = 0; i < this.documents.length; i++) {\n if (this.documents[i].doc === doc) {\n return i\n }\n }\n\n return -1\n }\n\n getDocOptions (doc: Document) {\n const docIndex = this.getDocIndex(doc)\n\n return docIndex === -1 ? null : this.documents[docIndex].options\n }\n}\n\nclass InteractableSet {\n signals = new utils.Signals()\n\n // all set interactables\n list: InteractableBase[] = []\n\n constructor (protected scope: Scope) {}\n\n new (target: Interact.Target, options: any): InteractableBase {\n options = utils.extend(options || {}, {\n actions: this.scope.actions,\n })\n const interactable = new this.scope.Interactable(target, options, this.scope.document)\n\n this.scope.addDocument(interactable._doc)\n this.list.push(interactable)\n\n this.signals.fire('new', {\n target,\n options,\n interactable,\n win: this.scope._win,\n })\n\n return interactable\n }\n\n indexOfElement (target: Interact.Target, context: Document | Element) {\n context = context || this.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: Interact.Target, options, dontCheckInContext?: boolean) {\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: Document | Element, callback: (interactable: any) => any) {\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\nexport function initScope (scope: Scope, window: Window) {\n win.init(window)\n domObjects.init(window)\n browser.init(window)\n raf.init(window)\n events.init(window)\n\n interactions.install(scope)\n scope.document = window.document\n\n return scope\n}\n","import { ActionName, Scope } from '@interactjs/core/scope'\nimport * as arr from '@interactjs/utils/arr'\nimport * as is from '@interactjs/utils/is'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n draggable: DraggableMethod\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n drag: Interact.DraggableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Drag]?: typeof drag\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Drag = 'drag'\n }\n}\n\n(ActionName as any).Drag = 'drag'\n\nexport type DragEvent = Interact.InteractEvent\n\nexport type DraggableMethod = (options?: Interact.OrBoolean | boolean)\n => Interact.Interactable | Interact.DropzoneOptions\n\nfunction install (scope: Scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope\n\n interactions.signals.on('before-action-move', beforeMove)\n interactions.signals.on('action-resume', beforeMove)\n\n // dragmove\n interactions.signals.on('action-move', move)\n\n Interactable.prototype.draggable = drag.draggable\n\n actions.drag = drag\n actions.names.push(ActionName.Drag)\n arr.merge(actions.eventTypes, [\n 'dragstart',\n 'dragmove',\n 'draginertiastart',\n 'dragresume',\n 'dragend',\n ])\n actions.methodDict.drag = 'draggable'\n\n defaults.actions.drag = drag.defaults\n}\n\nfunction beforeMove ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x') {\n interaction.coords.cur.page.y = interaction.coords.start.page.y\n interaction.coords.cur.client.y = interaction.coords.start.client.y\n\n interaction.coords.velocity.client.y = 0\n interaction.coords.velocity.page.y = 0\n }\n else if (axis === 'y') {\n interaction.coords.cur.page.x = interaction.coords.start.page.x\n interaction.coords.cur.client.x = interaction.coords.start.client.x\n\n interaction.coords.velocity.client.x = 0\n interaction.coords.velocity.page.x = 0\n }\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x' || axis === 'y') {\n const opposite = axis === 'x' ? 'y' : 'x'\n\n iEvent.page[opposite] = interaction.coords.start.page[opposite]\n iEvent.client[opposite] = interaction.coords.start.client[opposite]\n iEvent.delta[opposite] = 0\n }\n}\n\n/**\n * ```js\n * interact(element).draggable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // the axis in which the first movement must be\n * // for the drag sequence to start\n * // 'xy' by default - any direction\n * startAxis: 'x' || 'y' || 'xy',\n *\n * // 'xy' by default - don't restrict to one axis (move in any direction)\n * // 'x' or 'y' to restrict movement to either axis\n * // 'start' to restrict movement to the axis the drag started in\n * lockAxis: 'x' || 'y' || 'xy' || 'start',\n *\n * // max number of drags that can happen concurrently\n * // with elements of this Interactable. Infinity by default\n * max: Infinity,\n *\n * // max number of drags that can target the same element+Interactable\n * // 1 by default\n * maxPerElement: 2\n * });\n *\n * var isDraggable = interact('element').draggable(); // true\n * ```\n *\n * Get or set whether drag actions can be performed on the target\n *\n * @alias Interactable.prototype.draggable\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on drag events (object makes the Interactable\n * draggable)\n * @return {boolean | Interactable} boolean indicating if this can be the\n * target of drag events, or this Interctable\n */\nfunction draggable (this: Interact.Interactable, options?: Interact.DraggableOptions | boolean) {\n if (is.object(options)) {\n this.options.drag.enabled = options.enabled !== false\n this.setPerAction('drag', options)\n this.setOnEvents('drag', options)\n\n if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n this.options.drag.lockAxis = options.lockAxis\n }\n if (/^(xy|x|y)$/.test(options.startAxis)) {\n this.options.drag.startAxis = options.startAxis\n }\n\n return this\n }\n\n if (is.bool(options)) {\n this.options.drag.enabled = options\n\n return this\n }\n\n return this.options.drag\n}\n\nconst drag = {\n install,\n draggable,\n beforeMove,\n move,\n defaults: {\n startAxis : 'xy',\n lockAxis : 'xy',\n } as Interact.DropzoneOptions,\n\n checker (_pointer, _event, interactable) {\n const dragOptions = interactable.options.drag\n\n return dragOptions.enabled\n ? {\n name: 'drag',\n axis: (dragOptions.lockAxis === 'start'\n ? dragOptions.startAxis\n : dragOptions.lockAxis),\n }\n : null\n },\n\n getCursor () {\n return 'move'\n },\n}\n\nexport default drag\n","import Interactable from '@interactjs/core/Interactable'\nimport InteractEvent from '@interactjs/core/InteractEvent'\nimport Interaction from '@interactjs/core/Interaction'\nimport { ActionName } from '@interactjs/core/scope'\nimport * as arr from '@interactjs/utils/arr'\n\nclass DropEvent {\n type: string\n target: Element\n currentTarget: Element\n dropzone: Interactable\n dragEvent: InteractEvent\n relatedTarget: Element\n interaction: Interaction\n draggable: Interactable\n timeStamp: number\n propagationStopped = false\n immediatePropagationStopped = false\n\n /**\n * Class of events fired on dropzones during drags with acceptable targets.\n */\n constructor (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\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","import InteractEvent from '@interactjs/core/InteractEvent'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport DropEvent from './DropEvent'\n\nexport type DropzoneMethod = (options?: Interact.DropzoneOptions | boolean) => Interact.Interactable | Interact.DropzoneOptions\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n dropzone: DropzoneMethod\n dropCheck: (\n dragEvent: InteractEvent,\n event: Interact.PointerEventType,\n draggable: Interactable,\n draggableElement: Element,\n dropElemen: Element,\n rect: any\n ) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n dropStatus?: { [key: string]: any }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n drop: Interact.DropzoneOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n dynamicDrop?: boolean\n }\n}\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n dynamicDrop: (newValue?: boolean) => boolean | Interact.interact\n }\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n /** @lends module:interact */\n interact,\n /** @lends Interactable */\n Interactable,\n interactions,\n defaults,\n } = scope\n\n interactions.signals.on('after-action-start', ({ 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 // TODO: maybe Interaction { element: T }\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 // FIXME proper signal types\n interactions.signals.on('action-move', (arg) => onEventCreated(arg as any, scope))\n interactions.signals.on('action-end', (arg) => onEventCreated(arg as any, scope))\n\n interactions.signals.on('after-action-move', ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n fireDropEvents(interaction, interaction.dropStatus.events)\n interaction.dropStatus.events = {}\n })\n\n interactions.signals.on('after-action-end', ({ interaction }) => {\n if (interaction.prepared.name === 'drag') {\n fireDropEvents(interaction, interaction.dropStatus.events)\n }\n })\n\n interactions.signals.on('stop', ({ interaction }) => {\n interaction.dropStatus.activeDrops = null\n interaction.dropStatus.events = null\n })\n\n interactions.signals.on('new', (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', ({ interaction: { dropStatus } }) => {\n dropStatus.cur.dropzone = dropStatus.cur.element =\n dropStatus.prev.dropzone = dropStatus.prev.element = null\n dropStatus.rejected = false\n })\n\n /**\n *\n * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param {boolean | object | null} [options] The new options to be set.\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.dropzone = function (this: Interact.Interactable, options) {\n return dropzoneMethod(this, options)\n }\n\n /**\n * ```js\n * interact(target)\n * .dropChecker(function(dragEvent, // related dragmove or dragend event\n * event, // TouchEvent/PointerEvent/MouseEvent\n * dropped, // bool result of the default checker\n * dropzone, // dropzone Interactable\n * dropElement, // dropzone elemnt\n * draggable, // draggable Interactable\n * draggableElement) {// draggable element\n *\n * return dropped && event.target.hasAttribute('allow-drop');\n * }\n * ```\n */\n Interactable.prototype.dropCheck = function (this: Interact.Interactable, dragEvent, event, draggable, draggableElement, dropElement, rect) {\n return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect)\n }\n\n /**\n * Returns or sets whether the dimensions of dropzone elements are calculated\n * on every dragmove or only on dragstart for the default dropChecker\n *\n * @param {boolean} [newValue] True to check on each move. False to check only\n * before start\n * @return {boolean | interact} The current setting or interact\n */\n interact.dynamicDrop = function (newValue?: boolean) {\n if (utils.is.bool(newValue)) {\n // if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n // calcRects(dropzones);\n // }\n\n scope.dynamicDrop = newValue\n\n return interact\n }\n return scope.dynamicDrop\n }\n\n utils.arr.merge(actions.eventTypes, [\n 'dragenter',\n 'dragleave',\n 'dropactivate',\n 'dropdeactivate',\n 'dropmove',\n 'drop',\n ])\n actions.methodDict.drop = 'dropzone'\n\n scope.dynamicDrop = false\n\n defaults.actions.drop = drop.defaults\n}\n\nfunction collectDrops ({ interactables }, draggableElement) {\n const drops = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const dropzone of interactables.list) {\n if (!dropzone.options.drop.enabled) { continue }\n\n const accept = dropzone.options.drop.accept\n\n // test the draggable draggableElement against the dropzone's accept setting\n if ((utils.is.element(accept) && accept !== draggableElement) ||\n (utils.is.string(accept) &&\n !utils.dom.matchesSelector(draggableElement, accept)) ||\n (utils.is.func(accept) && !accept({ dropzone, draggableElement }))) {\n continue\n }\n\n // query for new elements if necessary\n const dropElements = utils.is.string(dropzone.target)\n ? dropzone._context.querySelectorAll(dropzone.target)\n : utils.is.array(dropzone.target) ? dropzone.target : [dropzone.target]\n\n for (const dropzoneElement of dropElements) {\n if (dropzoneElement !== draggableElement) {\n drops.push({\n dropzone,\n element: dropzoneElement,\n })\n }\n }\n }\n\n return drops\n}\n\nfunction fireActivationEvents (activeDrops, event) {\n // loop through all active dropzones and trigger event\n for (const { dropzone, element } of activeDrops) {\n event.dropzone = dropzone\n\n // set current element as event target\n event.target = element\n dropzone.fire(event)\n event.propagationStopped = event.immediatePropagationStopped = false\n }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops (scope: Scope, dragElement: Element) {\n // get dropzones and their elements that could receive the draggable\n const activeDrops = collectDrops(scope, dragElement)\n\n for (const activeDrop of activeDrops) {\n activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element)\n }\n\n return activeDrops\n}\n\nfunction getDrop ({ 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.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\nfunction dropzoneMethod (interactable: Interact.Interactable, options: Interact.DropzoneOptions | boolean) {\n if (utils.is.object(options)) {\n interactable.options.drop.enabled = options.enabled !== false\n\n if (options.listeners) {\n const normalized = utils.normalizeListeners(options.listeners)\n // rename 'drop' to '' as it will be prefixed with 'drop'\n const corrected = Object.keys(normalized).reduce((acc, type) => {\n const correctedType = /^(enter|leave)/.test(type)\n ? `drag${type}`\n : /^(activate|deactivate|move)/.test(type)\n ? `drop${type}`\n : type\n\n acc[correctedType] = normalized[type]\n\n return acc\n }, {})\n\n interactable.off(interactable.options.drop.listeners)\n interactable.on(corrected)\n interactable.options.drop.listeners = corrected\n }\n\n if (utils.is.func(options.ondrop)) { interactable.on('drop', options.ondrop) }\n if (utils.is.func(options.ondropactivate)) { interactable.on('dropactivate', options.ondropactivate) }\n if (utils.is.func(options.ondropdeactivate)) { interactable.on('dropdeactivate', options.ondropdeactivate) }\n if (utils.is.func(options.ondragenter)) { interactable.on('dragenter', options.ondragenter) }\n if (utils.is.func(options.ondragleave)) { interactable.on('dragleave', options.ondragleave) }\n if (utils.is.func(options.ondropmove)) { interactable.on('dropmove', options.ondropmove) }\n\n if (/^(pointer|center)$/.test(options.overlap as string)) {\n interactable.options.drop.overlap = options.overlap\n }\n else if (utils.is.number(options.overlap)) {\n interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0)\n }\n if ('accept' in options) {\n interactable.options.drop.accept = options.accept\n }\n if ('checker' in options) {\n interactable.options.drop.checker = options.checker\n }\n\n return interactable\n }\n\n if (utils.is.bool(options)) {\n interactable.options.drop.enabled = options\n\n return interactable\n }\n\n return interactable.options.drop\n}\n\nfunction dropCheckMethod (\n interactable: Interact.Interactable,\n dragEvent: InteractEvent,\n event: Interact.PointerEventType,\n draggable: Interact.Interactable,\n draggableElement: Element,\n dropElement: Element,\n rect: any\n) {\n let dropped = false\n\n // if the dropzone has no rect (eg. display: none)\n // call the custom dropChecker or just return false\n if (!(rect = rect || interactable.getRect(dropElement))) {\n return (interactable.options.drop.checker\n ? interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n : false)\n }\n\n const dropOverlap = interactable.options.drop.overlap\n\n if (dropOverlap === 'pointer') {\n const origin = utils.getOriginXY(draggable, draggableElement, 'drag')\n const page = utils.pointer.getPageXY(dragEvent)\n\n page.x += origin.x\n page.y += origin.y\n\n const horizontal = (page.x > rect.left) && (page.x < rect.right)\n const vertical = (page.y > rect.top) && (page.y < rect.bottom)\n\n dropped = horizontal && vertical\n }\n\n const dragRect = draggable.getRect(draggableElement)\n\n if (dragRect && dropOverlap === 'center') {\n const cx = dragRect.left + dragRect.width / 2\n const cy = dragRect.top + dragRect.height / 2\n\n dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom\n }\n\n if (dragRect && utils.is.number(dropOverlap)) {\n const overlapArea = (Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) *\n Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top)))\n\n const overlapRatio = overlapArea / (dragRect.width * dragRect.height)\n\n dropped = overlapRatio >= dropOverlap\n }\n\n if (interactable.options.drop.checker) {\n dropped = interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n }\n\n return dropped\n}\n\nconst drop = {\n install,\n getActiveDrops,\n getDrop,\n getDropEvents,\n fireDropEvents,\n defaults: {\n enabled: false,\n accept : null,\n overlap: 'pointer',\n } as Interact.DropzoneOptions,\n}\n\nexport default drop\n","import InteractEvent from '@interactjs/core/InteractEvent'\nimport { ActionName, Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\n\nexport type GesturableMethod = (options?: Interact.GesturableOptions | boolean) => Interact.Interactable | Interact.GesturableOptions\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n gesturable: GesturableMethod\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n gesture: Interact.GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Gesture]?: typeof gesture\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Gesture = 'gesture'\n }\n}\n\n(ActionName as any).Gesture = 'gesture'\n\nexport type GestureEvent = Interact.InteractEvent\n\nfunction install (scope: Scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope\n\n /**\n * ```js\n * interact(element).gesturable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // limit multiple gestures.\n * // See the explanation in {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * });\n *\n * var isGestureable = interact(element).gesturable();\n * ```\n *\n * Gets or sets whether multitouch gestures can be performed on the target\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on gesture events (makes the Interactable gesturable)\n * @return {boolean | Interactable} A boolean indicating if this can be the\n * target of gesture events, or this Interactable\n */\n Interactable.prototype.gesturable = function (this: Interact.Interactable, options: Interact.GesturableOptions | boolean) {\n if (utils.is.object(options)) {\n this.options.gesture.enabled = options.enabled !== false\n this.setPerAction('gesture', options)\n this.setOnEvents('gesture', options)\n\n return this\n }\n\n if (utils.is.bool(options)) {\n this.options.gesture.enabled = options\n\n return this\n }\n\n return this.options.gesture as Interact.Options\n }\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', (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[ActionName.Gesture] = gesture\n actions.names.push(ActionName.Gesture)\n utils.arr.merge(actions.eventTypes, [\n 'gesturestart',\n 'gesturemove',\n 'gestureend',\n ])\n actions.methodDict.gesture = 'gesturable'\n\n defaults.actions.gesture = gesture.defaults\n}\n\nconst gesture = {\n install,\n defaults: {\n },\n\n checker (_pointer, _event, _interactable, _element, interaction: { pointers: { length: number; }; }) {\n if (interaction.pointers.length >= 2) {\n return { name: 'gesture' }\n }\n\n return null\n },\n\n getCursor () {\n return ''\n },\n}\n\nfunction 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 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, 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, deltaSource)\n\n iEvent.ds = iEvent.scale - interaction.gesture.prevScale\n iEvent.da = iEvent.angle - interaction.gesture.prevAngle\n }\n}\n\nexport default gesture\n","import { Action, Interaction } from '@interactjs/core/Interaction'\nimport { ActionName, Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\n\nexport type EdgeName = 'top' | 'left' | 'bottom' | 'right'\nexport type ResizableMethod = (options?: Interact.OrBoolean | boolean) => Interact.Interactable | Interact.ResizableOptions\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n resizable: ResizableMethod\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n resizeAxes: 'x' | 'y' | 'xy'\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n resize: Interact.ResizableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Resize]?: typeof resize\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Resize = 'resize'\n }\n}\n\n(ActionName as any).Resize = 'resize'\n\nexport interface ResizeEvent extends Interact.InteractEvent {\n deltaRect?: Interact.Rect\n rect?: Interact.Rect\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n browser,\n /** @lends Interactable */\n Interactable, // tslint:disable-line no-shadowed-variable\n interactions,\n defaults,\n } = scope\n\n // Less Precision with touch input\n\n interactions.signals.on('new', (interaction) => {\n interaction.resizeAxes = 'xy'\n })\n\n interactions.signals.on('action-start', start)\n interactions.signals.on('action-move', move)\n\n interactions.signals.on('action-start', updateEventAxes)\n interactions.signals.on('action-move', updateEventAxes)\n\n resize.cursors = initCursors(browser)\n resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10\n\n /**\n * ```js\n * interact(element).resizable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * edges: {\n * top : true, // Use pointer coords to check for resize.\n * left : false, // Disable resizing from left edge.\n * bottom: '.resize-s',// Resize if pointer target matches selector\n * right : handleEl // Resize if pointer target is the given Element\n * },\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height are adjusted at a 1:1 ratio.\n * square: false,\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height maintain the aspect ratio they had when resizing started.\n * preserveAspectRatio: false,\n *\n * // a value of 'none' will limit the resize rect to a minimum of 0x0\n * // 'negate' will allow the rect to have negative width/height\n * // 'reposition' will keep the width/height positive by swapping\n * // the top and bottom edges and/or swapping the left and right edges\n * invert: 'none' || 'negate' || 'reposition'\n *\n * // limit multiple resizes.\n * // See the explanation in the {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * });\n *\n * var isResizeable = interact(element).resizable();\n * ```\n *\n * Gets or sets whether resize actions can be performed on the target\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on resize events (object makes the Interactable\n * resizable)\n * @return {boolean | Interactable} A boolean indicating if this can be the\n * target of resize elements, or this Interactable\n */\n Interactable.prototype.resizable = function (this: Interact.Interactable, options: Interact.RestrictOption | boolean) {\n return resizable(this, options, scope)\n }\n\n actions[ActionName.Resize] = resize\n actions.names.push(ActionName.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.actions.resize = resize.defaults\n}\n\nconst resize = {\n install,\n defaults: {\n square: false,\n preserveAspectRatio: false,\n axis: 'xy',\n\n // use default margin\n margin: NaN,\n\n // object with props left, right, top, bottom which are\n // true/false values to resize when the pointer is over that edge,\n // CSS selectors to match the handles for each direction\n // or the Elements for each handle\n edges: null,\n\n // a value of 'none' will limit the resize rect to a minimum of 0x0\n // 'negate' will alow the rect to have negative width/height\n // 'reposition' will keep the width/height positive by swapping\n // the top and bottom edges and/or swapping the left and right edges\n invert: 'none',\n } as Interact.ResizableOptions,\n\n checker (\n _pointer: Interact.PointerType,\n _event: Interact.PointerEventType,\n interactable: Interact.Interactable,\n element: Element,\n interaction: Interaction,\n rect: Interact.Rect\n ) {\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: { [edge: string]: boolean } = { 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._latestPointer.eventTarget,\n element,\n rect,\n resizeOptions.margin || this.defaultMargin)\n }\n\n resizeEdges.left = resizeEdges.left && !resizeEdges.right\n resizeEdges.top = resizeEdges.top && !resizeEdges.bottom\n\n if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n return {\n name: 'resize',\n edges: resizeEdges,\n }\n }\n }\n else {\n const right = options.resize.axis !== 'y' && page.x > (rect.right - this.defaultMargin)\n const bottom = options.resize.axis !== 'x' && page.y > (rect.bottom - this.defaultMargin)\n\n if (right || bottom) {\n return {\n name: 'resize',\n axes: (right ? 'x' : '') + (bottom ? 'y' : ''),\n }\n }\n }\n }\n\n return null\n },\n\n cursors: null as unknown as ReturnType,\n\n getCursor (action: Action) {\n const cursors = resize.cursors as { [key: string]: string }\n if (action.axis) {\n return 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 cursors[cursorKey]\n }\n\n return null\n },\n\n defaultMargin: null as unknown as number,\n}\n\nfunction resizable (interactable: Interact.Interactable, options: Interact.OrBoolean | boolean, scope: Scope) {\n if (utils.is.object(options)) {\n interactable.options.resize.enabled = options.enabled !== false\n interactable.setPerAction('resize', options)\n interactable.setOnEvents('resize', options)\n\n if (/^x$|^y$|^xy$/.test(options.axis as string)) {\n interactable.options.resize.axis = options.axis\n }\n else if (options.axis === null) {\n interactable.options.resize.axis = scope.defaults.actions.resize.axis\n }\n\n if (utils.is.bool(options.preserveAspectRatio)) {\n interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio\n }\n else if (utils.is.bool(options.square)) {\n interactable.options.resize.square = options.square\n }\n\n return interactable\n }\n if (utils.is.bool(options)) {\n interactable.options.resize.enabled = options\n\n return interactable\n }\n return interactable.options.resize\n}\n\nfunction checkResizeEdge (name: string, value: any, page: Interact.Point, element: Node, interactableElement: Element, rect: Interact.Rect, margin: number) {\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 initCursors (browser: typeof import ('@interactjs/utils/browser').default) {\n return (browser.isIe9 ? {\n x : 'e-resize',\n y : 's-resize',\n xy: 'se-resize',\n\n top : 'n-resize',\n left : 'w-resize',\n bottom : 's-resize',\n right : 'e-resize',\n topleft : 'se-resize',\n bottomright: 'se-resize',\n topright : 'ne-resize',\n bottomleft : 'ne-resize',\n } : {\n x : 'ew-resize',\n y : 'ns-resize',\n xy: 'nwse-resize',\n\n top : 'ns-resize',\n left : 'ew-resize',\n bottom : 'ns-resize',\n right : 'ew-resize',\n topleft : 'nwse-resize',\n bottomright: 'nwse-resize',\n topright : 'nesw-resize',\n bottomleft : 'nesw-resize',\n })\n}\n\nfunction start ({ iEvent, interaction }) {\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,\n right : 0,\n width : 0,\n top : 0,\n bottom: 0,\n 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 resize\n","import { Scope } from '@interactjs/core/scope'\nimport drag, { DragEvent } from './drag'\nimport drop from './drop'\nimport gesture, { GestureEvent } from './gesture'\nimport resize, { ResizeEvent } from './resize'\n\nfunction install (scope: Scope) {\n gesture.install(scope)\n resize.install(scope)\n drag.install(scope)\n drop.install(scope)\n}\n\nexport {\n gesture,\n GestureEvent,\n resize,\n ResizeEvent,\n drag,\n DragEvent,\n drop,\n install,\n}\n","import * as domUtils from '@interactjs/utils/domUtils'\nimport * as is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport { getStringOptionResult } from '@interactjs/utils/rect'\nimport { getWindow } from '@interactjs/utils/window'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoScroll: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n autoScroll?: Interact.AutoScrollOption\n }\n}\n\nfunction install (scope: Scope) {\n const {\n interactions,\n defaults,\n actions,\n } = scope\n\n scope.autoScroll = autoScroll\n\n interactions.signals.on('new', (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\nconst autoScroll = {\n defaults: {\n enabled : false,\n margin : 60,\n\n // the item that is scrolled (Window or HTMLElement)\n container: null as Window | Element,\n\n // the scroll speed in pixels per second\n speed : 300,\n } as Interact.AutoScrollOption,\n\n interaction: null,\n i: null, // the handle returned by window.setInterval\n x: 0,\n y: 0, // Direction each pulse is to scroll in\n\n isScrolling: false,\n prevTime: 0,\n margin: 0,\n speed: 0,\n\n start (interaction) {\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 () {\n autoScroll.isScrolling = false\n if (autoScroll.interaction) {\n autoScroll.interaction.autoScroll = null\n }\n raf.cancel(autoScroll.i)\n },\n\n // scroll the window by the values in scroll.x/y\n scroll () {\n const { interaction } = autoScroll\n const { 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 (interactable, actionName) {\n const options = interactable.options\n\n return options[actionName].autoScroll && options[actionName].autoScroll.enabled\n },\n onInteractionMove ({ interaction, pointer }) {\n if (!(interaction.interacting() &&\n autoScroll.check(interaction.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\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 { warnOnce } from '@interactjs/utils'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport * as is from '@interactjs/utils/is'\n\n// TODO: there seems to be a @babel/preset-typescript bug causing regular import\n// syntax to remain in js output\ntype Scope = import ('@interactjs/core/scope').Scope\ntype Actions = import ('@interactjs/core/scope').Actions\ntype Interaction = import ('@interactjs/core/Interaction').default\ntype Interactable = import ('@interactjs/core/Interactable').default\n\ntype IgnoreValue = string | Element | boolean\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n getAction: typeof getAction\n defaultActionChecker: (pointer: any, event: any, interaction: any, element: any) => any\n styleCursor: typeof styleCursor\n actionChecker: typeof actionChecker\n testIgnoreAllow: typeof testIgnoreAllow\n testAllow: typeof testAllow\n testIgnore: typeof testIgnore\n ignoreFrom: (...args: any) => boolean\n allowFrom: (...args: any) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n pointerIsDown: boolean\n }\n}\n\nfunction install (scope: Scope) {\n const {\n /** @lends Interactable */\n Interactable, // tslint:disable-line no-shadowed-variable\n actions,\n } = scope\n\n Interactable.prototype.getAction = getAction\n\n /**\n * ```js\n * interact(element, { ignoreFrom: document.getElementById('no-action') });\n * // or\n * interact(element).ignoreFrom('input, textarea, a');\n * ```\n * @deprecated\n * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n * of it's parents match the given CSS selector or Element, no\n * drag/resize/gesture is started.\n *\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to not ignore any elements\n * @return {string | Element | object} The current ignoreFrom value or this\n * Interactable\n */\n Interactable.prototype.ignoreFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('ignoreFrom', newValue)\n }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).')\n\n /**\n * @deprecated\n *\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to allow from any element\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */\n Interactable.prototype.allowFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('allowFrom', newValue)\n }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).')\n\n Interactable.prototype.testIgnore = testIgnore\n\n Interactable.prototype.testAllow = testAllow\n\n Interactable.prototype.testIgnoreAllow = testIgnoreAllow\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 = actionChecker\n\n /**\n * Returns or sets whether the the cursor should be changed depending on the\n * action that would be performed if the mouse were pressed and dragged.\n *\n * @param {boolean} [newValue]\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.styleCursor = styleCursor\n\n Interactable.prototype.defaultActionChecker = function (this: Interactable, pointer, event, interaction, element) {\n return defaultActionChecker(this, pointer, event, interaction, element, actions)\n }\n}\n\nfunction getAction (this: Interactable, pointer: Interact.PointerType, event: Interact.PointerEventType, interaction: Interaction, element: 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\nfunction defaultActionChecker (interactable: Interactable, pointer: Interact.PointerType, event: Interact.PointerEventType, interaction: Interaction, element: Element, actions: Actions) {\n const rect = interactable.getRect(element)\n const buttons = (event as MouseEvent).buttons || ({\n 0: 1,\n 1: 4,\n 3: 8,\n 4: 16,\n })[(event as MouseEvent).button as 0 | 1 | 3 | 4]\n let action = null\n\n for (const actionName of actions.names) {\n // check mouseButton setting if the pointer is down\n if (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & interactable.options[actionName].mouseButtons) === 0) {\n continue\n }\n\n action = (actions[actionName as keyof Actions] as any).checker(pointer, event, interactable, element, interaction, rect)\n\n if (action) {\n return action\n }\n }\n}\n\nfunction styleCursor (this: Interactable, newValue?: boolean) {\n if (is.bool(newValue)) {\n this.options.styleCursor = newValue\n\n return this\n }\n\n if (newValue === null) {\n delete this.options.styleCursor\n\n return this\n }\n\n return this.options.styleCursor\n}\n\nfunction actionChecker (this: Interactable, checker: any) {\n if (is.func(checker)) {\n this.options.actionChecker = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.options.actionChecker\n\n return this\n }\n\n return this.options.actionChecker\n}\n\nfunction testIgnoreAllow (this: Interactable, options: { ignoreFrom: IgnoreValue, allowFrom: IgnoreValue }, interactableElement: Element, eventTarget: Element) {\n return (!this.testIgnore(options.ignoreFrom, interactableElement, eventTarget) &&\n this.testAllow(options.allowFrom, interactableElement, eventTarget))\n}\n\nfunction testAllow (this: Interactable, allowFrom: IgnoreValue, interactableElement: Element, element: 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\nfunction testIgnore (this: Interactable, ignoreFrom: IgnoreValue, interactableElement: Element, element: 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\nexport default { install }\n","import * as utils from '@interactjs/utils'\nimport InteractableMethods from './InteractableMethods'\ntype Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n maxInteractions: (newValue: any) => any\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoStart: AutoStart\n maxInteractions: (...args: any) => any\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n manualStart?: boolean\n max?: number\n maxPerElement?: number\n allowFrom?: string | Element\n ignoreFrom?: string | Element\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons?: 0 | 1 | 2 | 4 | 16\n }\n}\n\nexport interface AutoStart {\n // Allow this many interactions to happen simultaneously\n maxInteractions: number\n withinInteractionLimit: typeof withinInteractionLimit\n cursorElement: Element\n signals: utils.Signals\n}\n\nfunction install (scope: Scope) {\n const {\n interact,\n interactions,\n defaults,\n } = scope\n\n interact.use(InteractableMethods)\n\n // set cursor style on mousedown\n interactions.signals.on('down', ({ interaction, pointer, event, eventTarget }) => {\n if (interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n })\n\n // set cursor style on mousemove\n interactions.signals.on('move', ({ interaction, pointer, event, eventTarget }) => {\n if (interaction.pointerType !== 'mouse' ||\n interaction.pointerIsDown ||\n interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n })\n\n interactions.signals.on('move', (arg) => {\n const { interaction } = arg\n\n if (!interaction.pointerIsDown ||\n interaction.interacting() ||\n !interaction.pointerWasMoved ||\n !interaction.prepared.name) {\n return\n }\n\n scope.autoStart.signals.fire('before-start', arg)\n\n const 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()\n }\n else {\n interaction.start(interaction.prepared, target, interaction.element)\n }\n }\n })\n\n interactions.signals.on('stop', ({ interaction }) => {\n const target = interaction.target\n\n if (target && target.options.styleCursor) {\n setCursor(interaction.element, '', scope)\n }\n })\n\n defaults.base.actionChecker = null\n defaults.base.styleCursor = true\n\n utils.extend(defaults.perAction, {\n manualStart: false,\n max: Infinity,\n maxPerElement: 1,\n allowFrom: null,\n ignoreFrom: null,\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons: 1,\n });\n\n /**\n * Returns or sets the maximum number of concurrent interactions allowed. By\n * default only 1 interaction is allowed at a time (for backwards\n * compatibility). To allow multiple interactions on the same Interactables and\n * elements, you need to enable it in the draggable, resizable and gesturable\n * `'max'` and `'maxPerElement'` options.\n *\n * @alias module:interact.maxInteractions\n *\n * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n */\n (interact as any /* FIXME */).maxInteractions = (newValue) => maxInteractions(newValue, scope)\n\n scope.autoStart = {\n // Allow this many interactions to happen simultaneously\n maxInteractions: Infinity,\n withinInteractionLimit,\n cursorElement: null,\n signals: new utils.Signals(),\n }\n}\n\n// Check if the current 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 { action: null, target: null, element: null }\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 { action: null, target: null, element: null }\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 })\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 false }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name\n\n if (!interaction.interacting()) { continue }\n\n activeInteractions++\n\n if (activeInteractions >= autoStartMax) {\n return false\n }\n\n if (interaction.target !== interactable) { continue }\n\n targetCount += otherAction === action.name ? 1 : 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 { ActionName } from '@interactjs/core/scope'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport * as is from '@interactjs/utils/is'\nimport autoStart from './base'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\nfunction install (scope: Scope) {\n scope.autoStart.signals.on('before-start', ({ interaction, eventTarget, dx, dy }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n // check if a drag is in the correct axis\n const absX = Math.abs(dx)\n const absY = Math.abs(dy)\n const targetOptions = interaction.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 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 return interactable\n }\n }\n }\n\n // check all interactables\n while (is.element(element)) {\n const interactable = scope.interactables.forEachMatch(element, getDraggable)\n\n if (interactable) {\n interaction.prepared.name = ActionName.Drag\n interaction.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","type Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n hold?: number\n delay?: number\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoStartHoldTimer?: any\n }\n}\n\nfunction install (scope: 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', (interaction) => {\n interaction.autoStartHoldTimer = null\n })\n\n autoStart.signals.on('prepared', ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.autoStartHoldTimer = setTimeout(() => {\n interaction.start(interaction.prepared, interaction.target, interaction.element)\n }, hold)\n }\n })\n\n interactions.signals.on('move', ({ interaction, duplicate }) => {\n if (interaction.pointerWasMoved && !duplicate) {\n clearTimeout(interaction.autoStartHoldTimer)\n }\n })\n\n // prevent regular down->move autoStart\n autoStart.signals.on('before-start', ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.prepared.name = null\n }\n })\n}\n\nfunction getHoldDuration (interaction) {\n const actionName = interaction.prepared && interaction.prepared.name\n\n if (!actionName) { return null }\n\n const options = interaction.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 dragAxis from './dragAxis'\nimport hold from './hold'\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 { matchesSelector, nodeContains } from '@interactjs/utils/domUtils'\nimport events from '@interactjs/utils/events'\nimport * as is from '@interactjs/utils/is'\nimport { getWindow } from '@interactjs/utils/window'\n\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 /**\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 if (interaction.element &&\n (interaction.element === event.target ||\n nodeContains(interaction.element, event.target))) {\n interaction.target.checkAndPreventDefault(event)\n return\n }\n }\n }\n}\n\nexport type Install = typeof install\n\nexport default { install }\n","import { Scope } from '@interactjs/core/scope'\nimport extend from '@interactjs/utils/extend'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n modifiers?: any\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n modifiers?: any\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n modifiers?: any[]\n }\n interface Options {\n drag?: Interact.DraggableOptions\n modifiers?: any[]\n }\n}\n\nfunction install (scope: Scope) {\n const {\n interactions,\n } = scope\n\n scope.defaults.perAction.modifiers = []\n scope.modifiers = {}\n\n interactions.signals.on('new', (interaction) => {\n interaction.modifiers = {\n startOffset: { left: 0, right: 0, top: 0, bottom: 0 },\n offsets : {},\n states : null,\n result : null,\n }\n })\n\n interactions.signals.on('before-action-start', (arg) => {\n start(arg as any, arg.interaction.coords.start.page, scope.modifiers)\n })\n\n interactions.signals.on('action-resume', (arg) => {\n beforeMove(arg as any)\n start(arg as any, 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 as any)\n interactions.signals.on('after-action-move', restoreCoords as any)\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 (\n { interaction, phase }: Interact.SignalArg,\n pageCoords: Interact.Point,\n registeredModifiers,\n) {\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)) as Interact.Rect & Interact.Rect2\n\n if (!('width' in rect)) { rect.width = rect.right - rect.left }\n if (!('height' in rect)) { rect.height = rect.bottom - rect.top }\n\n const startOffset = getRectOffset(rect, pageCoords)\n\n interaction.modifiers.startOffset = startOffset\n interaction.modifiers.startDelta = { x: 0, y: 0 }\n\n const arg: Partial = {\n interaction,\n interactable,\n element,\n pageCoords,\n phase,\n rect,\n startOffset,\n states,\n preEnd: false,\n requireEndOnly: false,\n }\n\n interaction.modifiers.states = states\n interaction.modifiers.result = null\n startAll(arg)\n\n arg.pageCoords = extend({}, interaction.coords.start.page)\n\n const result = interaction.modifiers.result = setAll(arg)\n\n return result\n}\n\nfunction setAll (arg: Partial) {\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 }): void | false {\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): void | false {\n const { interaction, event, noPreEnd } = arg\n const states = interaction.modifiers.states\n\n if (noPreEnd || !states || !states.length) {\n return\n }\n\n let didPreEnd = false\n\n for (const state of states) {\n arg.state = state\n const { options, methods } = state\n\n const endResult = methods.beforeEnd && methods.beforeEnd(arg)\n\n if (endResult === false) {\n 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 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\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?: boolean, requireEndOnly?: boolean, phase?: string) {\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 { EventPhase } from '@interactjs/core/InteractEvent'\nimport modifiers from '@interactjs/modifiers/base'\nimport * as utils from '@interactjs/utils'\nimport raf from '@interactjs/utils/raf'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/core/InteractEvent' {\n // eslint-disable-next-line no-shadow\n enum EventPhase {\n Resume = 'resume',\n InertiaStart = 'inertiastart',\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n inertia?: any\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n inertia?: {\n enabled?: boolean,\n resistance?: number, // the lambda in exponential decay\n minSpeed?: number, // target speed must be above this for inertia to start\n endSpeed?: number, // the speed at which inertia is slow enough to stop\n allowResume?: true, // allow resuming an action in inertia phase\n smoothEndDuration?: number, // animate to snap/restrict endOnly if there's no inertia\n }\n }\n}\n\n(EventPhase as any).Resume = 'resume';\n(EventPhase as any).InertiaStart = 'inertiastart'\n\nfunction install (scope: Scope) {\n const {\n interactions,\n defaults,\n } = scope\n\n interactions.signals.on('new', (interaction) => {\n interaction.inertia = {\n active : false,\n smoothEnd : false,\n allowResume: false,\n\n startEvent: null,\n upCoords : {},\n\n xe: 0,\n ye: 0,\n sx: 0,\n sy: 0,\n\n t0: 0,\n vx0: 0,\n vys: 0,\n duration: 0,\n\n lambda_v0: 0,\n one_ve_v0: 0,\n i : null,\n }\n })\n\n // FIXME proper signal typing\n interactions.signals.on('before-action-end', (arg) => release(arg as any, scope))\n interactions.signals.on('down', (arg) => resume(arg as any, scope))\n interactions.signals.on('stop', (arg) => stop(arg as any))\n\n defaults.perAction.inertia = {\n enabled : false,\n resistance : 10, // the lambda in exponential decay\n minSpeed : 100, // target speed must be above this for inertia to start\n endSpeed : 10, // the speed at which inertia is slow enough to stop\n allowResume : true, // allow resuming an action in inertia phase\n smoothEndDuration: 300, // animate to snap/restrict endOnly if there's no inertia\n }\n}\n\nfunction resume ({ interaction, event, pointer, eventTarget }: Interact.SignalArg, scope: 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 // 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, EventPhase.Resume, interaction.element)\n\n interaction._fireEvent(resumeEvent)\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur)\n break\n }\n\n element = utils.dom.parentNode(element)\n }\n }\n}\n\nfunction release ({ interaction, event, noPreEnd }: Interact.SignalArg, scope: Scope) {\n const state = interaction.inertia\n\n if (!interaction.interacting() ||\n (interaction.simulation && interaction.simulation.active) ||\n noPreEnd) {\n return null\n }\n\n const options = getOptions(interaction)\n\n const now = 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: ReturnType\n\n // check if inertia should be started\n const inertiaPossible = (options && options.enabled &&\n interaction.prepared.name !== 'gesture' &&\n event !== state.startEvent)\n\n const inertia = (inertiaPossible &&\n (now - interaction.coords.cur.timeStamp) < 50 &&\n pointerSpeed > options.minSpeed &&\n pointerSpeed > options.endSpeed)\n\n const modifierArg = {\n interaction,\n pageCoords: utils.extend({}, interaction.coords.cur.page),\n states: inertiaPossible && interaction.modifiers.states.map(\n (modifierStatus) => utils.extend({}, modifierStatus)\n ),\n preEnd: true,\n requireEndOnly: true,\n }\n\n // smoothEnd\n if (inertiaPossible && !inertia) {\n modifierResult = modifiers.setAll(modifierArg)\n\n if (modifierResult.changed) {\n smoothEnd = true\n }\n }\n\n if (!(inertia || smoothEnd)) { return null }\n\n utils.pointer.copyCoords(state.upCoords, interaction.coords.cur)\n\n interaction.pointers[0].pointer = state.startEvent = new scope.InteractEvent(\n interaction,\n event,\n // FIXME add proper typing Action.name\n interaction.prepared.name as T,\n EventPhase.InertiaStart,\n interaction.element,\n )\n\n state.t0 = now\n\n state.active = true\n state.allowResume = options.allowResume\n interaction.simulation = state\n\n interaction.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 }: Interact.SignalArg) {\n const state = interaction.inertia\n if (state.active) {\n raf.cancel(state.i)\n state.active = false\n interaction.simulation = null\n }\n}\n\nfunction calcInertia (interaction: Interact.Interaction, state) {\n const options = getOptions(interaction)\n const lambda = options.resistance\n const inertiaDur = -Math.log(options.endSpeed / state.v0) / lambda\n\n state.x0 = interaction.prevEvent.page.x\n state.y0 = interaction.prevEvent.page.y\n state.t0 = state.startEvent.timeStamp / 1000\n state.sx = state.sy = 0\n\n state.modifiedXe = state.xe = (state.vx0 - inertiaDur) / lambda\n state.modifiedYe = state.ye = (state.vy0 - inertiaDur) / lambda\n state.te = inertiaDur\n\n state.lambda_v0 = lambda / state.v0\n state.one_ve_v0 = 1 - options.endSpeed / state.v0\n}\n\nfunction inertiaTick (interaction: Interact.Interaction) {\n updateInertiaCoords(interaction)\n utils.pointer.setCoordDeltas(interaction.coords.delta, interaction.coords.prev, interaction.coords.cur)\n utils.pointer.setCoordVelocity(interaction.coords.velocity, interaction.coords.delta)\n\n const state = interaction.inertia\n const options = getOptions(interaction)\n const lambda = options.resistance\n const t = new Date().getTime() / 1000 - state.t0\n\n if (t < state.te) {\n const progress = 1 - (Math.exp(-lambda * t) - state.lambda_v0) / state.one_ve_v0\n\n if (state.modifiedXe === state.xe && state.modifiedYe === state.ye) {\n state.sx = state.xe * progress\n state.sy = state.ye * progress\n }\n else {\n const quadPoint = utils.getQuadraticCurvePoint(\n 0, 0,\n state.xe, state.ye,\n state.modifiedXe, state.modifiedYe,\n progress)\n\n state.sx = quadPoint.x\n state.sy = quadPoint.y\n }\n\n interaction.move()\n\n state.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: Interact.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: Interact.Interaction) {\n const state = interaction.inertia\n\n // return if inertia isn't running\n if (!state.active) { return }\n\n const pageUp = state.upCoords.page\n const clientUp = state.upCoords.client\n\n utils.pointer.setCoords(interaction.coords.cur, [ {\n pageX : pageUp.x + state.sx,\n pageY : pageUp.y + state.sy,\n clientX: clientUp.x + state.sx,\n clientY: clientUp.y + state.sy,\n } ])\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","/** @module interact */\n\nimport { Options } from '@interactjs/core/defaultOptions'\nimport Interactable from '@interactjs/core/Interactable'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport browser from '@interactjs/utils/browser'\nimport events from '@interactjs/utils/events'\n\nexport interface Plugin {\n install (scope: Scope): void\n [key: string]: any\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n interact: InteractStatic\n _plugins: Plugin[]\n }\n}\n\nexport interface InteractStatic {\n (target: Interact.Target, options?: Options): Interactable\n on: typeof on\n pointerMoveTolerance: typeof pointerMoveTolerance\n stop: typeof stop\n supportsPointerEvent: typeof supportsPointerEvent\n supportsTouch: typeof supportsTouch\n debug: typeof debug\n off: typeof off\n isSet: typeof isSet\n use: typeof use\n getPointerAverage: typeof utils.pointer.pointerAverage\n getTouchBBox: typeof utils.pointer.touchBBox\n getTouchDistance: typeof utils.pointer.touchDistance\n getTouchAngle: typeof utils.pointer.touchAngle\n getElementRect: typeof utils.dom.getElementRect\n getElementClientRect: typeof utils.dom.getElementClientRect\n matchesSelector: typeof utils.dom.matchesSelector\n closest: typeof utils.dom.closest\n addDocument: typeof scope.addDocument\n removeDocument: typeof scope.removeDocument\n version: string\n}\n\nconst globalEvents: any = {}\nconst scope = new Scope()\n\n/**\n * ```js\n * interact('#draggable').draggable(true)\n *\n * var rectables = interact('rect')\n * rectables\n * .gesturable(true)\n * .on('gesturemove', function (event) {\n * // ...\n * })\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @global\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\nexport const interact: InteractStatic = function interact (target: Interact.Target, options?: any) {\n let interactable = scope.interactables.get(target, options)\n\n if (!interactable) {\n interactable = scope.interactables.new(target, options)\n interactable.events.global = globalEvents\n }\n\n return interactable\n} as InteractStatic\n\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 = use\nfunction use (plugin: Plugin) {\n if (scope._plugins.indexOf(plugin) !== -1) {\n return interact\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 = isSet\nfunction isSet (element: Element, options?: any) {\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 = on\nfunction on (type: string | Interact.EventTypes, listener: Interact.ListenersArg, options?) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (utils.is.array(type)) {\n for (const eventType of (type as any[])) {\n interact.on(eventType, listener, options)\n }\n\n return interact\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.on(prop, (type as Interact.EventTypes)[prop], listener)\n }\n\n return interact\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (utils.arr.contains(scope.actions.eventTypes, type)) {\n // if this type of event was never bound\n if (!globalEvents[type]) {\n globalEvents[type] = [listener]\n }\n else {\n globalEvents[type].push(listener)\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n events.add(scope.document, type, listener as Interact.Listener, { options })\n }\n\n return interact\n}\n\n/**\n * Removes a global InteractEvent listener or DOM event from `document`\n *\n * @alias module:interact.off\n *\n * @param {string | array | object} type The types of events that were listened\n * for\n * @param {function} listener The listener function to be removed\n * @param {object | boolean} options [options] object or useCapture flag for\n * removeEventListener\n * @return {object} interact\n */\ninteract.off = off\nfunction off (type, listener, options) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (utils.is.array(type)) {\n for (const eventType of type) {\n interact.off(eventType, listener, options)\n }\n\n return interact\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.off(prop, type[prop], listener)\n }\n\n return interact\n }\n\n if (!utils.arr.contains(scope.actions.eventTypes, type)) {\n events.remove(scope.document, type, listener, options)\n }\n else {\n let index\n\n if (type in globalEvents &&\n (index = globalEvents[type].indexOf(listener)) !== -1) {\n globalEvents[type].splice(index, 1)\n }\n }\n\n return interact\n}\n\n/**\n * Returns an object which exposes internal data\n * @alias module:interact.debug\n *\n * @return {object} An object with properties that outline the current state\n * and expose internal functions and variables\n */\ninteract.debug = debug\nfunction debug () {\n return scope\n}\n\n// expose the functions used to calculate multi-touch properties\ninteract.getPointerAverage = utils.pointer.pointerAverage\ninteract.getTouchBBox = utils.pointer.touchBBox\ninteract.getTouchDistance = utils.pointer.touchDistance\ninteract.getTouchAngle = utils.pointer.touchAngle\n\ninteract.getElementRect = utils.dom.getElementRect\ninteract.getElementClientRect = utils.dom.getElementClientRect\ninteract.matchesSelector = utils.dom.matchesSelector\ninteract.closest = utils.dom.closest\n\n/**\n * @alias module:interact.supportsTouch\n *\n * @return {boolean} Whether or not the browser supports touch input\n */\ninteract.supportsTouch = supportsTouch\nfunction supportsTouch () {\n return browser.supportsTouch\n}\n\n/**\n * @alias module:interact.supportsPointerEvent\n *\n * @return {boolean} Whether or not the browser supports PointerEvents\n */\ninteract.supportsPointerEvent = supportsPointerEvent\nfunction supportsPointerEvent () {\n return browser.supportsPointerEvent\n}\n\n/**\n * Cancels all interactions (end events are not fired)\n *\n * @alias module:interact.stop\n *\n * @return {object} interact\n */\ninteract.stop = stop\nfunction stop () {\n for (const interaction of scope.interactions.list) {\n interaction.stop()\n }\n\n return interact\n}\n\n/**\n * Returns or sets the distance the pointer must be moved before an action\n * sequence occurs. This also affects tolerance for tap events.\n *\n * @alias module:interact.pointerMoveTolerance\n *\n * @param {number} [newValue] The movement from the start position must be greater than this value\n * @return {interact | number}\n */\ninteract.pointerMoveTolerance = pointerMoveTolerance\nfunction pointerMoveTolerance (newValue) {\n if (utils.is.number(newValue)) {\n scope.interactions.pointerMoveTolerance = newValue\n\n return interact\n }\n\n return scope.interactions.pointerMoveTolerance\n}\n\nscope.interactables.signals.on('unset', ({ interactable }) => {\n scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1)\n\n // Stop related interactions when an Interactable is unset\n for (const interaction of scope.interactions.list) {\n if (interaction.target === interactable && interaction.interacting() && interaction._ending) {\n interaction.stop()\n }\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 = {} as { [key: string]: number }\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?: Interact.Point) {\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 Interaction from '@interactjs/core/Interaction'\nimport extend from '@interactjs/utils/extend'\nimport rectUtils from '@interactjs/utils/rect'\nimport restrict from './pointer'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Action {\n linkedEdges?: { [key: string]: boolean }\n }\n}\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 }: { interaction: Interaction, state: any }) {\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 coords: Interact.Point,\n interaction: Interaction,\n state: any\n}) {\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 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 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 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\nconst snapEdges = {\n start,\n set,\n defaults: extend(clone(snapSize.defaults), {\n offset: { x: 0, y: 0 },\n }),\n}\n\nexport default snapEdges\n","import base from './base'\nimport restrictEdgesModule from './restrict/edges'\nimport restrictModule from './restrict/pointer'\nimport restrictSizeModule from './restrict/size'\nimport snapEdgesModule from './snap/edges'\nimport snapModule from './snap/pointer'\nimport snapSizeModule from './snap/size'\n\nconst { makeModifier } = base\n\nexport const snap = makeModifier(snapModule, 'snap')\nexport const snapSize = makeModifier(snapSizeModule, 'snapSize')\nexport const snapEdges = makeModifier(snapEdgesModule, 'snapEdges')\nexport const restrict = makeModifier(restrictModule, 'restrict')\nexport const restrictEdges = makeModifier(restrictEdgesModule, 'restrictEdges')\nexport const restrictSize = makeModifier(restrictSizeModule, 'restrictSize')\n","import Interaction from '@interactjs/core/Interaction'\nimport pointerUtils from '@interactjs/utils/pointerUtils'\n\n/** */\nexport default class PointerEvent {\n interaction: Interaction\n timeStamp: number\n originalEvent: Interact.PointerEventType\n type: T\n pointerId: number\n pointerType: string\n target: Node | Window\n currentTarget: Node | Window\n double: boolean\n pageX: number\n pageY: number\n clientX: number\n clientY: number\n dt: number\n eventable: any\n propagationStopped = false\n immediatePropagationStopped = false\n\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 * Prevent the default behaviour of the original Event\n */\n preventDefault () {\n this.originalEvent.preventDefault()\n }\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n","import Eventable from '@interactjs/core/Eventable'\nimport Interaction from '@interactjs/core/Interaction'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport PointerEvent from './PointerEvent'\n\ntype EventTargetList = Array<{\n eventable: Eventable,\n element: Window | Document | Element,\n props: { [key: string]: any },\n}>\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n pointerEvents: typeof pointerEvents\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n prevTap?: PointerEvent\n tapTime?: number\n }\n}\n\ndeclare module '@interactjs/core/PointerInfo' {\n interface PointerInfo {\n hold: {\n duration: number\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n pointerEvents?: any\n }\n}\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 interaction: Interaction,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n eventTarget: EventTarget,\n targets?: EventTargetList,\n pointerEvent?: PointerEvent,\n type: T\n}) {\n const {\n interaction, pointer, event, eventTarget,\n type = (arg as any).pointerEvent.type,\n targets = collectEventTargets(arg),\n } = arg\n\n const {\n pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction),\n } = arg\n\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n targets,\n type,\n pointerEvent,\n }\n\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n\n for (const prop in target.props || {}) {\n (pointerEvent as any)[prop] = target.props[prop]\n }\n\n const origin = utils.getOriginXY(target.eventable, target.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,\n pointer,\n event,\n 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 interaction: Interaction,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n eventTarget: EventTarget,\n type: T\n}) {\n const pointerIndex = interaction.getPointerIndex(pointer)\n const pointerInfo = interaction.pointers[pointerIndex]\n\n // do not fire a tap event if the pointer was moved before being lifted\n if (type === 'tap' && (interaction.pointerWasMoved ||\n // or if the pointerup target is different to the pointerdown target\n !(pointerInfo && pointerInfo.downTarget === eventTarget))) {\n return []\n }\n\n const path = utils.dom.getPath(eventTarget)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n path,\n targets: [] as EventTargetList,\n 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: Scope) {\n const {\n interactions,\n } = scope\n\n scope.pointerEvents = pointerEvents\n scope.defaults.actions.pointerEvents = pointerEvents.defaults\n\n interactions.signals.on('new', (interaction) => {\n interaction.prevTap = null // the most recent tap event on this interaction\n interaction.tapTime = 0 // time of the most recent tap event\n })\n\n interactions.signals.on('update-pointer', ({ down, pointerInfo }) => {\n if (!down && pointerInfo.hold) {\n return\n }\n\n pointerInfo.hold = { duration: Infinity, timeout: null }\n })\n\n interactions.signals.on('move', ({ interaction, pointer, event, eventTarget, duplicateMove }) => {\n const pointerIndex = interaction.getPointerIndex(pointer)\n\n if (!duplicateMove && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {\n if (interaction.pointerIsDown) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout)\n }\n\n fire({\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'move',\n })\n }\n })\n\n interactions.signals.on('down', ({ interaction, pointer, event, eventTarget, pointerIndex }) => {\n const timer = interaction.pointers[pointerIndex].hold\n const path = utils.dom.getPath(eventTarget)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'hold',\n targets: [] as EventTargetList,\n path,\n 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(() => {\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, ({ 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: string) {\n return function ({ interaction, pointer, event, eventTarget }: any) {\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(() => {\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 { Scope } from '@interactjs/core/scope'\nimport { merge } from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\ntype Interactable = import ('@interactjs/core/Interactable').default\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n pointerEvents: typeof pointerEventsMethod\n __backCompatOption: (optionName: string, newValue: any) => any\n }\n}\n\nfunction install (scope: Scope) {\n const {\n pointerEvents,\n actions,\n Interactable,\n interactables,\n } = scope\n\n pointerEvents.signals.on('collect-targets', ({ targets, element, type, eventTarget }: any) => {\n scope.interactables.forEachMatch(element, (interactable: Interactable) => {\n const eventable = interactable.events\n const options = eventable.options\n\n if (\n eventable.types[type] &&\n eventable.types[type].length &&\n is.element(element) &&\n interactable.testIgnoreAllow(options, element, eventTarget)) {\n targets.push({\n element,\n eventable,\n props: { interactable },\n })\n }\n })\n })\n\n interactables.signals.on('new', ({ interactable }) => {\n interactable.events.getRect = function (element: Element) {\n return interactable.getRect(element)\n }\n })\n\n interactables.signals.on('set', ({ interactable, options }) => {\n extend(interactable.events.options, pointerEvents.defaults)\n extend(interactable.events.options, options.pointerEvents || {})\n })\n\n merge(actions.eventTypes, pointerEvents.types)\n\n Interactable.prototype.pointerEvents = pointerEventsMethod\n\n const __backCompatOption = Interactable.prototype._backCompatOption\n\n Interactable.prototype._backCompatOption = function (optionName, newValue) {\n const ret = __backCompatOption.call(this, optionName, newValue)\n\n if (ret === this) {\n this.events.options[optionName] = newValue\n }\n\n return ret\n }\n}\n\nfunction pointerEventsMethod (this: Interactable, options: any) {\n extend(this.events.options, options)\n\n return this\n}\n\nexport default {\n 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 { pointerEvents, holdRepeat, interactableTargets, install }\n","import Interactable from '@interactjs/core/Interactable'\nimport { Action, Interaction } from '@interactjs/core/Interaction'\nimport { newInteraction } from '@interactjs/core/interactions'\nimport { Scope } from '@interactjs/core/scope'\nimport { arr, extend, is, pointer as pointerUtils, rect as rectUtils, win } from '@interactjs/utils'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n reflow: (action: Action) => ReturnType\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n _reflowResolve: () => void\n }\n}\n\nexport function install (scope: Scope) {\n const {\n actions,\n interactions,\n /** @lends Interactable */\n // eslint-disable-next-line no-shadow\n Interactable,\n } = scope\n\n // add action reflow event types\n for (const actionName of actions.names) {\n actions.eventTypes.push(`${actionName}reflow`)\n }\n\n // remove completed reflow interactions\n interactions.signals.on('stop', ({ interaction }) => {\n if (interaction.pointerType === '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: Interactable, action: Action, scope: Scope) {\n const elements = is.string(interactable.target)\n ? arr.from(interactable._context.querySelectorAll(interactable.target))\n : [interactable.target]\n\n // tslint:disable-next-line variable-name\n const Promise = (win.window as any).Promise\n const promises: Array> | null = Promise ? [] : null\n\n for (const element of elements) {\n const rect = interactable.getRect(element)\n\n if (!rect) { break }\n\n const runningInteraction = arr.find(\n scope.interactions.list,\n (interaction: Interaction) => {\n return interaction.interacting() &&\n interaction.target === interactable &&\n interaction.element === element &&\n interaction.prepared.name === action.name\n })\n let reflowPromise: Promise\n\n if (runningInteraction) {\n runningInteraction.move()\n\n reflowPromise = runningInteraction._reflowPromise || new Promise((resolve: any) => {\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: Scope, interactable: Interactable, element: Element, action: Action, event: any) {\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 as unknown as any).Promise\n ? new (win.window as unknown as any).Promise((resolve: any) => {\n interaction._reflowResolve = resolve\n })\n : null\n\n interaction._reflowPromise = reflowPromise\n interaction.start(action, interactable, element)\n\n if (interaction._interacting) {\n interaction.move(signalArg)\n interaction.end(event)\n }\n else {\n interaction.stop()\n }\n\n interaction.removePointer(event, event)\n interaction.pointerIsDown = false\n\n return reflowPromise\n}\n\nexport default { install }\n","import * as actions from '@interactjs/actions'\nimport autoScroll from '@interactjs/auto-scroll'\nimport * as autoStart from '@interactjs/auto-start'\nimport interactablePreventDefault from '@interactjs/core/interactablePreventDefault'\nimport inertia from '@interactjs/inertia'\nimport * as modifiers from '@interactjs/modifiers'\nimport modifiersBase from '@interactjs/modifiers/base'\nimport * as pointerEvents from '@interactjs/pointer-events'\nimport reflow from '@interactjs/reflow'\nimport interact, { scope } from './interact'\n\nexport function init (window: Window): typeof interact {\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\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 {\n interact,\n actions,\n autoScroll,\n interactablePreventDefault,\n inertia,\n modifiersBase as modifiers,\n pointerEvents,\n reflow,\n}\n","function createGrid (grid: (Interact.Rect | Interact.Point) & { range?: number, limits: Interact.Rect, offset: Interact.Point }) {\n const coordFields = [\n ['x', 'y'],\n ['left', 'top'],\n ['right', 'bottom'],\n ['width', 'height'],\n ].filter(([xField, yField]) => xField in grid || yField in grid)\n\n return function (x, y) {\n const {\n range,\n limits = {\n left : -Infinity,\n right : Infinity,\n top : -Infinity,\n bottom: Infinity,\n },\n offset = { x: 0, y: 0 },\n } = grid\n\n const result = { range }\n\n for (const [xField, yField] of coordFields) {\n const gridx = Math.round((x - offset.x) / grid[xField])\n const gridy = Math.round((y - offset.y) / grid[yField])\n\n result[xField] = Math.max(limits.left, Math.min(limits.right, gridx * grid[xField] + offset.x))\n result[yField] = Math.max(limits.top, Math.min(limits.bottom, gridy * grid[yField] + offset.y))\n }\n\n return result\n }\n}\n\nexport default createGrid\n","import grid from './grid'\n\nexport { grid }\n","import interact, { init as initInteract } from '@interactjs/interact'\nimport * as modifiers from '@interactjs/modifiers'\nimport extend from '@interactjs/utils/extend'\nimport * as snappers from '@interactjs/utils/snappers'\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n modifiers?: any\n snappers?: typeof snappers\n createSnapGrid?: typeof snappers.grid\n }\n}\n\nif (typeof window === 'object' && !!window) {\n init(window)\n}\n\nexport function init (win: Window) {\n initInteract(win)\n\n return interact.use({\n install (scope) {\n interact.modifiers = extend(scope.modifiers, modifiers)\n interact.snappers = snappers\n interact.createSnapGrid = interact.snappers.grid\n },\n })\n}\n\nexport default interact\n\nif (typeof module === 'object' && !!module) {\n module.exports = interact\n}\n","\nreturn _$index_25;\n\n});\n"]} \ No newline at end of file +{"version":3,"sources":["../../scripts/header.js","../../node_modules/browser-pack-flat/_prelude","../utils/arr.ts","../utils/extend.ts","../utils/isWindow.ts","../utils/window.ts","../utils/is.ts","../utils/normalizeListeners.ts","../core/Eventable.ts","../core/defaultOptions.ts","../utils/domObjects.ts","../utils/browser.ts","../utils/domUtils.ts","../utils/rect.ts","../utils/getOriginXY.ts","../utils/hypot.ts","../core/InteractEvent.ts","../utils/clone.ts","../utils/pointerExtend.ts","../utils/pointerUtils.ts","../utils/events.ts","../core/Interactable.ts","../core/PointerInfo.ts","../utils/Signals.ts","../utils/raf.ts","../utils/index.ts","../core/Interaction.ts","../utils/interactionFinder.ts","../core/interactions.ts","../core/scope.ts","../actions/drag.ts","../actions/drop/DropEvent.ts","../actions/drop/index.ts","../actions/gesture.ts","../actions/resize.ts","../actions/index.ts","../auto-scroll/index.ts","../auto-start/InteractableMethods.ts","../auto-start/base.ts","../auto-start/dragAxis.ts","../auto-start/hold.ts","../auto-start/index.ts","../core/interactablePreventDefault.ts","../modifiers/base.ts","../inertia/index.ts","../interact/interact.ts","../modifiers/restrict/pointer.ts","../modifiers/restrict/edges.ts","../modifiers/restrict/size.ts","../modifiers/snap/pointer.ts","../modifiers/snap/size.ts","../modifiers/snap/edges.ts","../modifiers/index.ts","../pointer-events/PointerEvent.ts","../pointer-events/base.ts","../pointer-events/holdRepeat.ts","../pointer-events/interactableTargets.ts","../pointer-events/index.ts","../reflow/index.ts","../interact/index.ts","../types/index.ts","../utils/snappers/grid.ts","../utils/snappers/index.ts","index.ts","../../node_modules/browser-pack-flat/_postlude"],"names":[],"mappings":"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","file":"interact.js","sourceRoot":"","sourcesContent":["/**\n * interact.js v1.4.0-alpha.28+sha.e624c4d-dirty\n *\n * Copyright (c) 2012-2019 Taye Adeyemi \n * Released under the MIT License.\n * https://raw.github.com/taye/interact.js/master/LICENSE\n */\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.interact = f()}})(function(){var define,module,exports;\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 function extend> (dest: U, source: T) {\n for (const prop in source) {\n (dest as unknown as T)[prop] = source[prop]\n }\n return dest as T & U\n}\n","export default (thing) => !!(thing && thing.Window) && (thing instanceof thing.Window)\n","import isWindow from './isWindow'\n\nconst win = {\n realWindow: undefined,\n window: undefined,\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","// tslint:disable variable-name\n\nimport isWindow from './isWindow'\nimport win from './window'\n\nexport const window = (thing: any): thing is Window =>\n thing === win.window || isWindow(thing)\n\nexport const docFrag = (thing: any): thing is DocumentFragment =>\n object(thing) && thing.nodeType === 11\n\nexport const object = (thing: any): thing is { [index: string]: any } =>\n !!thing && (typeof thing === 'object')\n\nexport const func = (thing: any): thing is (...args: any) => any =>\n typeof thing === 'function'\n\nexport const number = (thing: any): thing is number =>\n typeof thing === 'number'\n\nexport const bool = (thing: any): thing is boolean =>\n typeof thing === 'boolean'\n\nexport const string = (thing: any): thing is string =>\n typeof thing === 'string'\n\nexport const element = (thing: any): thing is Element => {\n if (!thing || (typeof thing !== 'object')) { return false }\n\n const _window = win.getWindow(thing) || win.window\n\n return (/object|function/.test(typeof _window.Element)\n ? thing instanceof _window.Element // DOM2\n : thing.nodeType === 1 && typeof thing.nodeName === 'string')\n}\n\nexport const plainObject: typeof object = (thing: any): thing is { [index: string]: any } =>\n object(thing) &&\n !!thing.constructor &&\n /function Object\\b/.test(thing.constructor.toString())\n\nexport const array = (thing: any): thing is any[] =>\n (object(thing) &&\n (typeof thing.length !== 'undefined') &&\n func(thing.splice))\n","import extend from './extend'\nimport * as is from './is'\n\nexport interface NormalizedListeners {\n [type: string]: Interact.Listener[]\n}\n\nexport default function normalize (\n type: Interact.EventTypes,\n listeners?: Interact.ListenersArg | Interact.ListenersArg[],\n result?: NormalizedListeners,\n): NormalizedListeners {\n result = result || {}\n\n if (is.string(type) && type.search(' ') !== -1) {\n type = split(type)\n }\n\n if (is.array(type)) {\n return type.reduce(\n (acc, t) => extend(acc, normalize(t, listeners, result)),\n result\n )\n }\n\n // ({ type: fn }) -> ('', { type: fn })\n if (is.object(type)) {\n listeners = type\n type = ''\n }\n\n if (is.func(listeners)) {\n result[type] = result[type] || []\n result[type].push(listeners)\n }\n else if (is.array(listeners)) {\n for (const l of listeners) {\n normalize(type, l, result)\n }\n }\n else if (is.object(listeners)) {\n for (const prefix in listeners) {\n const combinedTypes = split(prefix).map((p) => `${type}${p}`)\n\n normalize(combinedTypes, listeners[prefix], result)\n }\n }\n\n return result as NormalizedListeners\n}\n\nfunction split (type: string) {\n return type.trim().split(/ +/)\n}\n","import * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport normalize, { NormalizedListeners } from '@interactjs/utils/normalizeListeners'\nimport { EventPhase, InteractEvent } from './InteractEvent'\nimport { ActionName } from './scope'\n\nfunction fireUntilImmediateStopped<\nT extends ActionName,\nP extends EventPhase,\n> (event: InteractEvent, listeners: Interact.Listener[]) {\n for (const listener of listeners) {\n if (event.immediatePropagationStopped) { break }\n\n listener(event)\n }\n}\n\nclass Eventable {\n options: any\n types: NormalizedListeners = {}\n propagationStopped = false\n immediatePropagationStopped = false\n global: any\n\n constructor (options?: { [index: string]: any }) {\n this.options = extend({}, options || {})\n }\n\n fire (event: any) {\n let listeners\n const global = this.global\n\n // Interactable#on() listeners\n // tslint:disable no-conditional-assignment\n if ((listeners = this.types[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n\n // interact.on() listeners\n if (!event.propagationStopped && global && (listeners = global[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n }\n\n on (type: string, listener: Interact.ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n this.types[type] = arr.merge(this.types[type] || [], listeners[type])\n }\n }\n\n off (type: string, listener: Interact.ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n const eventList = this.types[type]\n\n if (!eventList || !eventList.length) { continue }\n\n for (const subListener of listeners[type]) {\n const index = eventList.indexOf(subListener)\n\n if (index !== -1) {\n eventList.splice(index, 1)\n }\n }\n }\n }\n}\n\nexport default Eventable\n","// tslint:disable no-empty-interface\n\nexport interface Defaults {\n base: BaseDefaults\n perAction: PerActionDefaults\n actions: ActionDefaults\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ActionDefaults {\n}\n\nexport interface BaseDefaults {\n preventDefault?: 'auto' | 'never' | string\n deltaSource?: 'page' | 'client'\n context?: Window | Document | Element\n [key: string]: any\n}\n\nexport interface PerActionDefaults {\n enabled?: boolean\n origin?: Interact.Point | string | Element\n listeners?: Interact.Listeners\n}\n\nexport type Options = Partial & Partial & {\n [P in keyof ActionDefaults]?: Partial\n}\n\n// export interface Options extends BaseDefaults, PerActionDefaults {}\n\nexport interface OptionsArg extends BaseDefaults, Interact.OrBoolean {}\n\nexport const defaults: Defaults = {\n base: {\n preventDefault: 'auto',\n deltaSource: 'page',\n },\n\n perAction: {\n enabled: false,\n origin: { x: 0, y: 0 },\n },\n\n actions: {} as ActionDefaults,\n}\n\nexport default defaults\n","const domObjects: {\n init: any,\n document: Document,\n DocumentFragment: typeof DocumentFragment,\n SVGElement: typeof SVGElement,\n SVGSVGElement: typeof SVGSVGElement,\n SVGElementInstance: any,\n Element: typeof Element,\n HTMLElement: typeof HTMLElement,\n Event: typeof Event,\n Touch: typeof Touch,\n PointerEvent: typeof PointerEvent,\n} =\n{\n init,\n document: null as any,\n DocumentFragment: null as any,\n SVGElement: null as any,\n SVGSVGElement: null as any,\n // eslint-disable-next-line no-undef\n SVGElementInstance: null as any,\n Element: null as any,\n HTMLElement: null as any,\n Event: null as any,\n Touch: null as any,\n PointerEvent: null as any,\n}\n\nfunction blank () {}\n\nexport default domObjects\n\nfunction init (window: Window) {\n const win = window as any\n\n domObjects.document = win.document\n domObjects.DocumentFragment = win.DocumentFragment || blank\n domObjects.SVGElement = win.SVGElement || blank\n domObjects.SVGSVGElement = win.SVGSVGElement || blank\n domObjects.SVGElementInstance = win.SVGElementInstance || blank\n domObjects.Element = win.Element || blank\n domObjects.HTMLElement = win.HTMLElement || domObjects.Element\n\n domObjects.Event = win.Event\n domObjects.Touch = win.Touch || blank\n domObjects.PointerEvent = (win.PointerEvent || win.MSPointerEvent)\n}\n","import domObjects from './domObjects'\nimport * as is from './is'\nimport win from './window'\n\nconst browser = {\n init,\n supportsTouch: null as boolean,\n supportsPointerEvent: null as boolean,\n isIOS7: null as boolean,\n isIOS: null as boolean,\n isIe9: null as boolean,\n isOperaMobile: null as boolean,\n prefixedMatchesSelector: null as string,\n pEventTypes: null as {\n up: string,\n down: string,\n over: string,\n out: string,\n move: string,\n cancel: string,\n },\n wheelEvent: null as string,\n}\n\nfunction init (window) {\n const Element = domObjects.Element as any\n const navigator = win.window.navigator\n\n // Does the browser support touch input?\n browser.supportsTouch = ('ontouchstart' in window) ||\n (is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch)\n\n // Does the browser support PointerEvents\n browser.supportsPointerEvent = !!domObjects.PointerEvent\n\n browser.isIOS = (/iP(hone|od|ad)/.test(navigator.platform))\n\n // scrolling doesn't change the result of getClientRects on iOS 7\n browser.isIOS7 = (/iP(hone|od|ad)/.test(navigator.platform) &&\n /OS 7[^\\d]/.test(navigator.appVersion))\n\n browser.isIe9 = /MSIE 9/.test(navigator.userAgent)\n\n // Opera Mobile must be handled differently\n browser.isOperaMobile = (navigator.appName === 'Opera' &&\n browser.supportsTouch &&\n navigator.userAgent.match('Presto'))\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\nexport default browser\n","import browser from './browser'\nimport domObjects from './domObjects'\nimport * as is from './is'\nimport win from './window'\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 // tslint:disable-next-line\n while ((parent = (parent as any).host) && is.docFrag(parent)) {\n continue\n }\n\n return parent\n }\n\n return parent\n}\n\nexport function matchesSelector (element, selector) {\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (win.window !== win.realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ')\n }\n\n return element[browser.prefixedMatchesSelector](selector)\n}\n\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 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","import { closest, getElementRect, parentNode } from './domUtils'\nimport extend from './extend'\nimport * as is from './is'\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 { rectToXY, resolveRectLike } from './rect'\n\nexport default function (target, element, action?) {\n const actionOptions = target.options[action]\n const actionOrigin = actionOptions && actionOptions.origin\n const origin = actionOrigin || target.options.origin\n\n const originRect = resolveRectLike(origin, target, element, [target && element])\n\n return rectToXY(originRect) || { x: 0, y: 0 }\n}\n","export default (x, y) => Math.sqrt(x * x + y * y)\n","import extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport hypot from '@interactjs/utils/hypot'\nimport defaults from './defaultOptions'\nimport Interactable from './Interactable'\nimport Interaction from './Interaction'\nimport { ActionName } from './scope'\n\nexport enum EventPhase {\n Start = 'start',\n Move = 'move',\n End = 'end',\n _NONE = '',\n}\n\nexport class InteractEvent<\n T extends ActionName = any,\n P extends EventPhase = EventPhase._NONE,\n> {\n type: string\n target: Element\n relatedTarget: Element | null\n currentTarget: Element\n screenX?: number\n screenY?: number\n button: number\n buttons: number\n ctrlKey: boolean\n shiftKey: boolean\n altKey: boolean\n metaKey: boolean\n // added by interact.js\n interactable: Interactable\n interaction: Interaction\n page: Interact.Point\n client: Interact.Point\n delta: Interact.Point\n x0: number\n y0: number\n t0: number\n dt: number\n duration: number\n clientX0: number\n clientY0: number\n velocity: Interact.Point\n speed: number\n swipe: ReturnType['getSwipe']>\n timeStamp: any\n // drag\n dragEnter?: Element\n dragLeave?: Element\n // resize\n axes?: Interact.Point\n preEnd?: boolean\n immediatePropagationStopped = false\n propagationStopped = false\n\n /** */\n constructor (\n interaction: Interaction,\n event: Interact.PointerEventType,\n actionName: T,\n phase: P,\n element: Element,\n related?: Element,\n preEnd?: boolean,\n type?: string,\n ) {\n element = element || interaction.element\n\n const target = interaction.target\n // FIXME: add deltaSource to defaults\n const deltaSource = (((target && target.options) || defaults) as any).deltaSource as 'page' | 'client'\n const origin = getOriginXY(target, element, actionName)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const prevEvent = starting ? this : interaction.prevEvent\n const coords = starting\n ? interaction.coords.start\n : ending\n ? { page: prevEvent.page, client: prevEvent.client, timeStamp: interaction.coords.cur.timeStamp }\n : interaction.coords.cur\n\n this.page = extend({}, coords.page)\n this.client = extend({}, coords.client)\n this.timeStamp = coords.timeStamp\n\n if (!ending) {\n this.page.x -= origin.x\n this.page.y -= origin.y\n\n this.client.x -= origin.x\n this.client.y -= origin.y\n }\n\n this.ctrlKey = event.ctrlKey\n this.altKey = event.altKey\n this.shiftKey = event.shiftKey\n this.metaKey = event.metaKey\n this.button = (event as MouseEvent).button\n this.buttons = (event as MouseEvent).buttons\n this.target = element\n this.currentTarget = element\n this.relatedTarget = related || null\n this.preEnd = preEnd\n this.type = type || (actionName + (phase || ''))\n this.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 set pageX (value) { this.page.x = value }\n get pageY () { return this.page.y }\n set pageY (value) { this.page.y = value }\n\n get clientX () { return this.client.x }\n set clientX (value) { this.client.x = value }\n get clientY () { return this.client.y }\n set clientY (value) { this.client.y = value }\n\n get dx () { return this.delta.x }\n set dx (value) { this.delta.x = value }\n get dy () { return this.delta.y }\n set dy (value) { this.delta.y = value }\n\n get velocityX () { return this.velocity.x }\n set velocityX (value) { this.velocity.x = value }\n get velocityY () { return this.velocity.y }\n set velocityY (value) { this.velocity.y = value }\n\n getSwipe () {\n const interaction = this.interaction\n\n if (interaction.prevEvent.speed < 600 ||\n this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n return null\n }\n\n let angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI\n const overlap = 22.5\n\n if (angle < 0) {\n angle += 360\n }\n\n const left = 135 - overlap <= angle && angle < 225 + overlap\n const up = 225 - overlap <= angle && angle < 315 + overlap\n\n const right = !left && (315 - overlap <= angle || angle < 45 + overlap)\n const down = !up && 45 - overlap <= angle && angle < 135 + overlap\n\n return {\n up,\n down,\n left,\n right,\n angle,\n speed: interaction.prevEvent.speed,\n velocity: {\n x: interaction.prevEvent.velocityX,\n y: interaction.prevEvent.velocityY,\n },\n }\n }\n\n preventDefault () {}\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n}\n\nexport default InteractEvent\n","import * as arr from './arr'\nimport * as is from './is'\n\nexport default function clone (source: T): Partial {\n const dest = {} as Partial\n\n for (const prop in source) {\n const value = source[prop]\n\n if (is.plainObject(value)) {\n dest[prop] = clone(value) as any\n }\n else if (is.array(value)) {\n dest[prop] = arr.from(value)\n }\n else {\n dest[prop] = value\n }\n }\n\n return dest\n}\n","export interface PointerExtend {\n webkit: RegExp\n [prefix: string]: RegExp\n}\n\nexport 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\nexport default pointerExtend\n","import browser from './browser'\nimport dom from './domObjects'\nimport * as domUtils from './domUtils'\nimport hypot from './hypot'\nimport * as is from './is'\nimport pointerExtend from './pointerExtend'\n\nconst pointerUtils = {\n copyCoords (dest, src) {\n dest.page = dest.page || {}\n dest.page.x = src.page.x\n dest.page.y = src.page.y\n\n dest.client = dest.client || {}\n dest.client.x = src.client.x\n dest.client.y = src.client.y\n\n dest.timeStamp = src.timeStamp\n },\n\n setCoordDeltas (targetObj, prev, cur) {\n targetObj.page.x = cur.page.x - prev.page.x\n targetObj.page.y = cur.page.y - prev.page.y\n targetObj.client.x = cur.client.x - prev.client.x\n targetObj.client.y = cur.client.y - prev.client.y\n targetObj.timeStamp = cur.timeStamp - prev.timeStamp\n },\n\n setCoordVelocity (targetObj, delta) {\n const dt = Math.max(delta.timeStamp / 1000, 0.001)\n\n targetObj.page.x = delta.page.x / dt\n targetObj.page.y = delta.page.y / dt\n targetObj.client.x = delta.client.x / dt\n targetObj.client.y = delta.client.y / dt\n targetObj.timeStamp = dt\n },\n\n isNativePointer (pointer) {\n return (pointer instanceof dom.Event || pointer instanceof dom.Touch)\n },\n\n // Get specified X/Y coords for mouse or event.touches[0]\n getXY (type, pointer, xy) {\n xy = xy || {}\n type = type || 'page'\n\n xy.x = pointer[type + 'X']\n xy.y = pointer[type + 'Y']\n\n return xy\n },\n\n getPageXY (pointer: Interact.PointerType | Interact.InteractEvent, page?: Interact.Point) {\n page = page || { x: 0, y: 0 }\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n pointerUtils.getXY('screen', pointer, page)\n\n page.x += window.scrollX\n page.y += window.scrollY\n }\n else {\n pointerUtils.getXY('page', pointer, page)\n }\n\n return page\n },\n\n getClientXY (pointer, client) {\n client = client || {}\n\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n pointerUtils.getXY('screen', pointer, client)\n }\n else {\n pointerUtils.getXY('client', pointer, client)\n }\n\n return client\n },\n\n getPointerId (pointer) {\n return is.number(pointer.pointerId) ? pointer.pointerId : pointer.identifier\n },\n\n setCoords (targetObj, pointers: any[], timeStamp?: number) {\n const pointer = (pointers.length > 1\n ? pointerUtils.pointerAverage(pointers)\n : pointers[0])\n\n const tmpXY = {} as { x: number, y: number }\n\n pointerUtils.getPageXY(pointer, tmpXY)\n targetObj.page.x = tmpXY.x\n targetObj.page.y = tmpXY.y\n\n pointerUtils.getClientXY(pointer, tmpXY)\n targetObj.client.x = tmpXY.x\n targetObj.client.y = tmpXY.y\n\n targetObj.timeStamp = is.number(timeStamp) ? timeStamp : new Date().getTime()\n },\n\n pointerExtend,\n\n getTouchPair (event) {\n const touches = []\n\n // array of touches is supplied\n if (is.array(event)) {\n touches[0] = event[0]\n touches[1] = event[1]\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0]\n touches[1] = event.changedTouches[0]\n }\n else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0]\n touches[1] = event.changedTouches[1]\n }\n }\n else {\n touches[0] = event.touches[0]\n touches[1] = event.touches[1]\n }\n }\n\n return touches\n },\n\n pointerAverage (pointers: PointerEvent[] | Event[]) {\n const average = {\n pageX : 0,\n pageY : 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n }\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop] += pointer[prop]\n }\n }\n for (const prop in average) {\n average[prop] /= pointers.length\n }\n\n return average\n },\n\n touchBBox (event: Event | Array<(Interact.PointerType) | TouchEvent>) {\n if (!(event as any).length &&\n !((event as TouchEvent).touches &&\n (event as TouchEvent).touches.length > 1)) {\n return null\n }\n\n const touches = pointerUtils.getTouchPair(event)\n const minX = Math.min(touches[0].pageX, touches[1].pageX)\n const minY = Math.min(touches[0].pageY, touches[1].pageY)\n const maxX = Math.max(touches[0].pageX, touches[1].pageX)\n const maxY = Math.max(touches[0].pageY, touches[1].pageY)\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n right: maxX,\n bottom: maxY,\n width: maxX - minX,\n height: maxY - minY,\n }\n },\n\n touchDistance (event, deltaSource) {\n const sourceX = deltaSource + 'X'\n const sourceY = deltaSource + 'Y'\n const touches = pointerUtils.getTouchPair(event)\n\n const dx = touches[0][sourceX] - touches[1][sourceX]\n const dy = touches[0][sourceY] - touches[1][sourceY]\n\n return hypot(dx, dy)\n },\n\n touchAngle (event, deltaSource) {\n const sourceX = deltaSource + 'X'\n const sourceY = deltaSource + 'Y'\n const touches = pointerUtils.getTouchPair(event)\n const dx = touches[1][sourceX] - touches[0][sourceX]\n const dy = touches[1][sourceY] - touches[0][sourceY]\n const angle = 180 * Math.atan2(dy, dx) / Math.PI\n\n return angle\n },\n\n getPointerType (pointer) {\n return is.string(pointer.pointerType)\n ? pointer.pointerType\n : is.number(pointer.pointerType)\n ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType]\n // if the PointerEvent API isn't available, then the \"pointer\" must\n // be either a MouseEvent, TouchEvent, or Touch object\n : /touch/.test(pointer.type) || pointer instanceof dom.Touch\n ? 'touch'\n : 'mouse'\n },\n\n // [ event.target, event.currentTarget ]\n getEventTargets (event) {\n const path = is.func(event.composedPath) ? event.composedPath() : event.path\n\n return [\n domUtils.getActualElement(path ? path[0] : event.target),\n domUtils.getActualElement(event.currentTarget),\n ]\n },\n\n newCoords () {\n return {\n page : { x: 0, y: 0 },\n client : { x: 0, y: 0 },\n timeStamp: 0,\n }\n },\n\n coordsToEvent ({ page, client, timeStamp }: any) {\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 { contains } from './arr'\nimport * as domUtils from './domUtils'\nimport * as is from './is'\nimport pExtend from './pointerExtend'\nimport pointerUtils from './pointerUtils'\n\ntype Listener = (event: Event | FakeEvent) => any\n\nconst elements: EventTarget[] = []\nconst targets: Array<{\n events: { [type: string]: Listener[] },\n typeCount: number,\n}> = []\n\nconst delegatedEvents: {\n [type: string]: {\n selectors: string[],\n contexts: EventTarget[],\n listeners: Array>,\n },\n} = {}\nconst documents: Document[] = []\n\nfunction add (element: EventTarget, type: string, listener: Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n let elementIndex = elements.indexOf(element)\n let target = targets[elementIndex]\n\n if (!target) {\n target = {\n events: {},\n typeCount: 0,\n }\n\n elementIndex = elements.push(element) - 1\n targets.push(target)\n }\n\n if (!target.events[type]) {\n target.events[type] = []\n target.typeCount++\n }\n\n if (!contains(target.events[type], listener)) {\n element.addEventListener(type, listener as any, events.supportsOptions ? options : !!options.capture)\n target.events[type].push(listener)\n }\n}\n\nfunction remove (element: EventTarget, type: string, listener?: 'all' | Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n const elementIndex = elements.indexOf(element)\n const target = targets[elementIndex]\n\n if (!target || !target.events) {\n return\n }\n\n if (type === 'all') {\n for (type in target.events) {\n if (target.events.hasOwnProperty(type)) {\n remove(element, type, 'all')\n }\n }\n return\n }\n\n if (target.events[type]) {\n const len = target.events[type].length\n\n if (listener === 'all') {\n for (let i = 0; i < len; i++) {\n remove(element, type, target.events[type][i], options)\n }\n return\n }\n else {\n for (let i = 0; i < len; i++) {\n if (target.events[type][i] === listener) {\n element.removeEventListener(type, listener as any, events.supportsOptions ? options : !!options.capture)\n target.events[type].splice(i, 1)\n\n break\n }\n }\n }\n\n if (target.events[type] && target.events[type].length === 0) {\n (target.events[type] as any) = null\n target.typeCount--\n }\n }\n\n if (!target.typeCount) {\n targets.splice(elementIndex, 1)\n elements.splice(elementIndex, 1)\n }\n}\n\nfunction addDelegate (selector: string, context: EventTarget, type: string, listener: Listener, optionalArg?: any) {\n const options = getOptions(optionalArg)\n if (!delegatedEvents[type]) {\n delegatedEvents[type] = {\n contexts : [],\n listeners: [],\n selectors: [],\n }\n\n // add delegate listener functions\n for (const doc of documents) {\n add(doc, type, delegateListener)\n add(doc, type, delegateUseCapture, true)\n }\n }\n\n const delegated = delegatedEvents[type]\n let index\n\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n if (delegated.selectors[index] === selector &&\n delegated.contexts[index] === context) {\n break\n }\n }\n\n if (index === -1) {\n index = delegated.selectors.length\n\n delegated.selectors.push(selector)\n delegated.contexts.push(context)\n delegated.listeners.push([])\n }\n\n // keep listener and capture and passive flags\n delegated.listeners[index].push([listener, !!options.capture, options.passive])\n}\n\nfunction removeDelegate (selector, context, type, listener?, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const delegated = delegatedEvents[type]\n let matchFound = false\n let index\n\n if (!delegated) { return }\n\n // count from last index of delegated to 0\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n // look for matching selector and context Node\n if (delegated.selectors[index] === selector &&\n delegated.contexts[index] === context) {\n const listeners = delegated.listeners[index]\n\n // each item of the listeners array is an array: [function, capture, passive]\n for (let i = listeners.length - 1; i >= 0; i--) {\n const [fn, capture, passive] = listeners[i]\n\n // check if the listener functions and capture and passive flags match\n if (fn === listener && capture === !!options.capture && passive === options.passive) {\n // remove the listener from the array of listeners\n listeners.splice(i, 1)\n\n // if all listeners for this interactable have been removed\n // remove the interactable from the delegated arrays\n if (!listeners.length) {\n delegated.selectors.splice(index, 1)\n delegated.contexts.splice(index, 1)\n delegated.listeners.splice(index, 1)\n\n // remove delegate function from context\n remove(context, type, delegateListener)\n remove(context, type, delegateUseCapture, true)\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegatedEvents[type] = null\n }\n }\n\n // only remove one listener\n matchFound = true\n break\n }\n }\n\n if (matchFound) { break }\n }\n }\n}\n\n// bound to the interactable context when a DOM event\n// listener is added to a selector interactable\nfunction delegateListener (event: Event, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const fakeEvent = new FakeEvent(event)\n const delegated = delegatedEvents[event.type]\n const [eventTarget] = (pointerUtils.getEventTargets(event))\n let element = eventTarget\n\n // climb up document tree looking for selector matches\n while (is.element(element)) {\n for (let i = 0; i < delegated.selectors.length; i++) {\n const selector = delegated.selectors[i]\n const context = delegated.contexts[i]\n\n if (domUtils.matchesSelector(element, selector) &&\n domUtils.nodeContains(context, eventTarget) &&\n domUtils.nodeContains(context, element)) {\n const listeners = delegated.listeners[i]\n\n fakeEvent.currentTarget = element\n\n for (const [fn, capture, passive] of listeners) {\n if (capture === !!options.capture && passive === options.passive) {\n fn(fakeEvent)\n }\n }\n }\n }\n\n element = domUtils.parentNode(element)\n }\n}\n\nfunction delegateUseCapture (event: Event) {\n return delegateListener.call(this, event, true)\n}\n\nfunction getOptions (param) {\n return is.object(param) ? param : { capture: param }\n}\n\nexport class FakeEvent implements Partial {\n currentTarget: EventTarget\n\n constructor (public originalEvent) {\n // duplicate the event so that currentTarget can be changed\n pExtend(this, originalEvent)\n }\n\n preventOriginalDefault () {\n this.originalEvent.preventDefault()\n }\n\n stopPropagation () {\n this.originalEvent.stopPropagation()\n }\n\n stopImmediatePropagation () {\n this.originalEvent.stopImmediatePropagation()\n }\n}\n\nconst events = {\n add,\n remove,\n\n addDelegate,\n removeDelegate,\n\n delegateListener,\n delegateUseCapture,\n delegatedEvents,\n documents,\n\n supportsOptions: false,\n supportsPassive: false,\n\n _elements: elements,\n _targets: targets,\n\n init (window: Window) {\n window.document.createElement('div').addEventListener('test', null, {\n get capture () { return (events.supportsOptions = true) },\n get passive () { return (events.supportsPassive = true) },\n })\n },\n}\n\nexport default events\n","import * as arr from '@interactjs/utils/arr'\nimport browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport { getElementRect, nodeContains, trySelector } from '@interactjs/utils/domUtils'\nimport events from '@interactjs/utils/events'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport { getWindow } from '@interactjs/utils/window'\nimport { ActionDefaults, Defaults, Options } from './defaultOptions'\nimport Eventable from './Eventable'\nimport { Actions } from './scope'\n\n/** */\nexport class Interactable implements Partial {\n protected get _defaults (): Defaults {\n return {\n base: {},\n perAction: {},\n actions: {} as ActionDefaults,\n }\n }\n\n readonly options!: Required\n readonly _actions: Actions\n readonly target: Interact.Target\n readonly events = new Eventable()\n readonly _context: Document | Element\n readonly _win: Window\n readonly _doc: Document\n\n /** */\n constructor (target: Interact.Target, options: any, defaultContext: Document | Element) {\n this._actions = options.actions\n this.target = target\n this._context = options.context || defaultContext\n this._win = getWindow(trySelector(target) ? this._context : target)\n this._doc = this._win.document\n\n this.set(options)\n }\n\n setOnEvents (actionName: string, phases: NonNullable) {\n if (is.func(phases.onstart)) { this.on(`${actionName}start`, phases.onstart) }\n if (is.func(phases.onmove)) { this.on(`${actionName}move`, phases.onmove) }\n if (is.func(phases.onend)) { this.on(`${actionName}end`, phases.onend) }\n if (is.func(phases.oninertiastart)) { this.on(`${actionName}inertiastart`, phases.oninertiastart) }\n\n return this\n }\n\n updatePerActionListeners (actionName, prev, cur) {\n if (is.array(prev)) {\n this.off(actionName, prev)\n }\n\n if (is.array(cur)) {\n this.on(actionName, cur)\n }\n }\n\n setPerAction (actionName, options: Interact.OrBoolean) {\n const defaults = this._defaults\n\n // for all the default per-action options\n for (const optionName in options) {\n const actionOptions = this.options[actionName]\n const optionValue = options[optionName]\n const isArray = is.array(optionValue)\n\n // remove old event listeners and add new ones\n if (optionName === 'listeners') {\n this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue)\n }\n\n // if the option value is an array\n if (isArray) {\n actionOptions[optionName] = arr.from(optionValue)\n }\n // if the option value is an object\n else if (!isArray && is.plainObject(optionValue)) {\n // copy the object\n actionOptions[optionName] = extend(\n actionOptions[optionName] || {},\n clone(optionValue))\n\n // set anabled field to true if it exists in the defaults\n if (is.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) {\n actionOptions[optionName].enabled = optionValue.enabled !== false\n }\n }\n // if the option value is a boolean and the default is an object\n else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n actionOptions[optionName].enabled = optionValue\n }\n // if it's anything else, do a plain assignment\n else {\n actionOptions[optionName] = optionValue\n }\n }\n }\n\n /**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {object} The object's bounding rectangle.\n */\n getRect (element: Element) {\n element = element || (is.element(this.target)\n ? this.target\n : null)\n\n if (is.string(this.target)) {\n element = element || this._context.querySelector(this.target)\n }\n\n return getElementRect(element)\n }\n\n /**\n * Returns or sets the function used to calculate the interactable's\n * element's rectangle\n *\n * @param {function} [checker] A function which returns this Interactable's\n * bounding rectangle. See {@link Interactable.getRect}\n * @return {function | object} The checker function or this Interactable\n */\n rectChecker (checker: (element: Element) => any) {\n if (is.func(checker)) {\n this.getRect = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.getRect\n\n return this\n }\n\n return this.getRect\n }\n\n _backCompatOption (optionName, newValue) {\n if (trySelector(newValue) || is.object(newValue)) {\n this.options[optionName] = newValue\n\n for (const action of this._actions.names) {\n this.options[action][optionName] = newValue\n }\n\n return this\n }\n\n return this.options[optionName]\n }\n\n /**\n * Gets or sets the origin of the Interactable's element. The x and y\n * of the origin will be subtracted from action event coordinates.\n *\n * @param {Element | object | string} [origin] An HTML or SVG Element whose\n * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\n * or any CSS selector\n *\n * @return {object} The current origin or this Interactable\n */\n origin (newValue) {\n return this._backCompatOption('origin', newValue)\n }\n\n /**\n * Returns or sets the mouse coordinate types used to calculate the\n * movement of the pointer.\n *\n * @param {string} [newValue] Use 'client' if you will be scrolling while\n * interacting; Use 'page' if you want autoScroll to work\n * @return {string | object} The current deltaSource or this Interactable\n */\n deltaSource (newValue) {\n if (newValue === 'page' || newValue === 'client') {\n this.options.deltaSource = newValue\n\n return this\n }\n\n return this.options.deltaSource\n }\n\n /**\n * Gets the selector context Node of the Interactable. The default is\n * `window.document`.\n *\n * @return {Node} The context Node of this Interactable\n */\n context () {\n return this._context\n }\n\n inContext (element) {\n return (this._context === element.ownerDocument ||\n nodeContains(this._context, element))\n }\n\n /**\n * Calls listeners for the given InteractEvent type bound globally\n * and directly to this Interactable\n *\n * @param {InteractEvent} iEvent The InteractEvent object to be fired on this\n * Interactable\n * @return {Interactable} this Interactable\n */\n fire (iEvent) {\n this.events.fire(iEvent)\n\n return this\n }\n\n _onOff (method: 'on' | 'off', typeArg: Interact.EventTypes, listenerArg?: Interact.ListenersArg | null, options?: any) {\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg\n listenerArg = null\n }\n\n const addRemove = method === 'on' ? 'add' : 'remove'\n const listeners = normalizeListeners(typeArg, listenerArg)\n\n for (let type in listeners) {\n if (type === 'wheel') { type = browser.wheelEvent }\n\n for (const listener of listeners[type]) {\n // if it is an action event type\n if (arr.contains(this._actions.eventTypes, type)) {\n this.events[method](type, listener)\n }\n // delegated event\n else if (is.string(this.target)) {\n events[`${addRemove}Delegate`](this.target, this._context, type, listener, options)\n }\n // remove listener from this Interatable's element\n else {\n (events[addRemove] as typeof events.remove)(this.target, type, listener, options)\n }\n }\n }\n\n return this\n }\n\n /**\n * Binds a listener for an InteractEvent, pointerEvent or DOM event.\n *\n * @param {string | array | object} types The types of events to listen\n * for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * addEventListener\n * @return {Interactable} This Interactable\n */\n on (types: Interact.EventTypes, listener?: Interact.ListenersArg, options?: any) {\n return this._onOff('on', types, listener, options)\n }\n\n /**\n * Removes an InteractEvent, pointerEvent or DOM event listener.\n *\n * @param {string | array | object} types The types of events that were\n * listened for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * removeEventListener\n * @return {Interactable} This Interactable\n */\n off (types: string | string[] | Interact.EventTypes, listener?: Interact.ListenersArg, options?: any) {\n return this._onOff('off', types, listener, options)\n }\n\n /**\n * Reset the options of this Interactable\n *\n * @param {object} options The new settings to apply\n * @return {object} This Interactable\n */\n set (options: Interact.OptionsArg) {\n const defaults = this._defaults\n\n if (!is.object(options)) {\n options = {}\n }\n\n (this.options as Required) = clone(defaults.base) as Required\n\n for (const actionName in this._actions.methodDict) {\n const methodName = this._actions.methodDict[actionName]\n\n this.options[actionName] = {}\n this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName]))\n\n this[methodName](options[actionName])\n }\n\n for (const setting in options) {\n if (is.func(this[setting])) {\n this[setting](options[setting])\n }\n }\n\n return this\n }\n\n /**\n * Remove this interactable from the list of interactables and remove it's\n * action capabilities and event listeners\n *\n * @return {interact}\n */\n unset () {\n events.remove(this.target as Node, 'all')\n\n if (is.string(this.target)) {\n // remove delegated events\n for (const type in events.delegatedEvents) {\n const delegated = events.delegatedEvents[type]\n\n if (delegated.selectors[0] === this.target &&\n delegated.contexts[0] === this._context) {\n delegated.selectors.splice(0, 1)\n delegated.contexts.splice(0, 1)\n delegated.listeners.splice(0, 1)\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegated[type] = null\n }\n }\n\n events.remove(this._context, type, events.delegateListener)\n events.remove(this._context, type, events.delegateUseCapture, true)\n }\n }\n else {\n events.remove(this.target as Node, 'all')\n }\n }\n}\n\nexport default Interactable\n","export class PointerInfo {\n constructor (\n public id: number,\n public pointer: Interact.PointerType,\n public event: Interact.PointerEventType,\n public downTime: number,\n public downTarget: EventTarget,\n ) {}\n}\n\nexport default PointerInfo\n","export type SignalListener = (signalArg: PartialSignalArg, sinalName: string) => (void | boolean)\n\nexport interface SignalArg {\n interaction: Interact.Interaction\n Interactable: Interact.Interactable\n iEvent: Interact.InteractEvent\n element: Window | Document | Element\n coords: Interact.Point\n event: Interact.PointerEventType\n phase: Interact.EventPhase\n [index: string]: any\n}\n\nexport type PartialSignalArg = Partial\n\nclass Signals {\n listeners: {\n [signalName: string]: SignalListener[],\n } = {}\n\n on (name: string, listener: SignalListener) {\n if (!this.listeners[name]) {\n this.listeners[name] = [listener]\n return\n }\n\n this.listeners[name].push(listener)\n }\n\n off (name: string, listener: SignalListener) {\n if (!this.listeners[name]) { return }\n\n const index = this.listeners[name].indexOf(listener)\n\n if (index !== -1) {\n this.listeners[name].splice(index, 1)\n }\n }\n\n fire (name: string, arg: Partial): void | false {\n const targetListeners = this.listeners[name]\n\n if (!targetListeners) { return }\n\n for (const listener of targetListeners) {\n if (listener(arg, name) === false) {\n return false\n }\n }\n }\n}\n\nexport default Signals\n","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 // eslint-disable-next-line standard/no-callback-literal\n const token = setTimeout(() => { callback(currTime + timeToCall) },\n timeToCall)\n\n lastTime = currTime + timeToCall\n return token\n }\n\n cancel = (token) => clearTimeout(token)\n }\n}\n\nexport default {\n request: (callback) => request(callback),\n cancel: (token) => cancel(token),\n init,\n}\n","import * as arr from './arr'\nimport * as dom from './domUtils'\nimport * as is from './is'\nimport win from './window'\n\nexport function warnOnce (this: T, method: (...args: any) => any, message: string) {\n let warned = false\n\n // eslint-disable-next-line no-shadow\n return function (this: T) {\n if (!warned) {\n (win as any).window.console.warn(message)\n warned = true\n }\n\n return method.apply(this, arguments)\n }\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nexport function _getQBezierValue (t: number, p1: number, p2: number, p3: number) {\n const iT = 1 - t\n return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3\n}\n\nexport function getQuadraticCurvePoint (\n startX: number, startY: number, cpX: number, cpY: number, endX: number, endY: number, position: number) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY),\n }\n}\n\n// http://gizma.com/easing/\nexport function easeOutQuad (t: number, b: number, c: number, d: number) {\n t /= d\n return -c * t * (t - 2) + b\n}\n\nexport function copyAction (dest: any, src: any) {\n dest.name = src.name\n dest.axis = src.axis\n dest.edges = src.edges\n\n return dest\n}\n\nexport { default as browser } from './browser'\nexport { default as clone } from './clone'\nexport { default as events } from './events'\nexport { default as extend } from './extend'\nexport { default as getOriginXY } from './getOriginXY'\nexport { default as hypot } from './hypot'\nexport { default as normalizeListeners } from './normalizeListeners'\nexport { default as pointer } from './pointerUtils'\nexport { default as raf } from './raf'\nexport { default as rect } from './rect'\nexport { default as Signals } from './Signals'\nexport { win, arr, dom, is }\n","import * as utils from '@interactjs/utils'\nimport Interactable from './Interactable'\nimport InteractEvent, { EventPhase } from './InteractEvent'\nimport PointerInfo from './PointerInfo'\nimport { ActionName } from './scope'\n\nexport interface ActionProps {\n name: T\n axis?: 'x' | 'y' | 'xy'\n edges?: {\n [edge in keyof Interact.Rect]?: boolean\n }\n}\n\nexport class Interaction {\n // current interactable being interacted with\n target: Interactable = null\n\n // the target element of the interactable\n element: Element = null\n\n _signals: utils.Signals\n\n // action that's ready to be fired on next move event\n prepared: ActionProps = {\n name : null,\n axis : null,\n edges: null,\n }\n\n pointerType: string\n\n // keep track of added pointers\n pointers: PointerInfo[] = []\n\n // pointerdown/mousedown/touchstart event\n downEvent: Interact.PointerEventType = null\n\n downPointer: Interact.PointerType = {} as Interact.PointerType\n\n _latestPointer: {\n pointer: EventTarget\n event: Interact.PointerEventType\n eventTarget: Node,\n } = {\n pointer: null,\n event: null,\n eventTarget: null,\n }\n\n // previous action event\n prevEvent: InteractEvent = null\n\n pointerIsDown = false\n pointerWasMoved = false\n _interacting = false\n _ending = false\n\n simulation = null\n\n get pointerMoveTolerance () {\n return 1\n }\n\n /**\n * @alias Interaction.prototype.move\n */\n doMove = utils.warnOnce(\n function (this: Interaction, signalArg: any) {\n this.move(signalArg)\n },\n 'The interaction.doMove() method has been renamed to interaction.move()')\n\n coords = {\n // Starting InteractEvent pointer coordinates\n start: utils.pointer.newCoords(),\n // Previous native pointer move event coordinates\n prev: utils.pointer.newCoords(),\n // current native pointer move event coordinates\n cur: utils.pointer.newCoords(),\n // Change in coordinates and time of the pointer\n delta: utils.pointer.newCoords(),\n // pointer velocity\n velocity: utils.pointer.newCoords(),\n }\n\n /** */\n constructor ({ pointerType, signals }: { pointerType?: string, signals: utils.Signals }) {\n this._signals = signals\n this.pointerType = pointerType\n\n this._signals.fire('new', { interaction: 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: EventPhase.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 = EventPhase.Move\n\n this._doPhase(signalArg)\n }\n\n // End interact move events and stop auto-scroll unless simulation is running\n pointerUp (pointer, event, eventTarget, curEventTarget) {\n let pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) {\n pointerIndex = this.updatePointer(pointer, event, eventTarget, false)\n }\n\n this._signals.fire(/cancel$/i.test(event.type) ? 'cancel' : 'up', {\n pointer,\n pointerIndex,\n event,\n eventTarget,\n curEventTarget,\n interaction: this,\n })\n\n if (!this.simulation) {\n this.end(event)\n }\n\n this.pointerIsDown = false\n this.removePointer(pointer, event)\n }\n\n documentBlur (event) {\n this.end(event)\n this._signals.fire('blur', { event, interaction: this })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('move', function (event) {\n * if (event.pageX > 1000) {\n * // end the current action\n * event.interaction.end();\n * // stop all further listeners from being called\n * event.stopImmediatePropagation();\n * }\n * });\n * ```\n *\n * @param {PointerEvent} [event]\n */\n end (event?: Interact.PointerEventType) {\n this._ending = true\n event = event || this._latestPointer.event\n let endPhaseResult\n\n if (this.interacting()) {\n endPhaseResult = this._doPhase({\n event,\n interaction: this,\n phase: EventPhase.End,\n })\n }\n\n this._ending = false\n\n if (endPhaseResult === true) {\n this.stop()\n }\n }\n\n currentAction () {\n return this._interacting ? this.prepared.name : null\n }\n\n interacting () {\n return this._interacting\n }\n\n /** */\n stop () {\n this._signals.fire('stop', { interaction: this })\n\n this.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 ? this.pointers.length - 1\n : utils.arr.findIndex(this.pointers, (curPointer) => curPointer.id === pointerId)\n }\n\n getPointerInfo (pointer) {\n return this.pointers[this.getPointerIndex(pointer)]\n }\n\n updatePointer (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Window | Document | Element, down?: boolean) {\n const id = utils.pointer.getPointerId(pointer)\n let pointerIndex = this.getPointerIndex(pointer)\n let pointerInfo = this.pointers[pointerIndex]\n\n down = down === false\n ? false\n : down || /(down|start)$/i.test(event.type)\n\n if (!pointerInfo) {\n pointerInfo = new PointerInfo(\n id,\n pointer,\n event,\n null,\n null,\n )\n\n pointerIndex = this.pointers.length\n this.pointers.push(pointerInfo)\n }\n else {\n pointerInfo.pointer = pointer\n }\n\n if (down) {\n this.pointerIsDown = true\n\n if (!this.interacting()) {\n utils.pointer.setCoords(this.coords.start, this.pointers.map((p) => p.pointer))\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: Interact.PointerEventType, phase: EventPhase, preEnd: boolean, type: string) {\n const actionName = this.prepared.name\n\n return new InteractEvent(this, event, actionName, phase, this.element, null, preEnd, type)\n }\n\n _fireEvent (iEvent) {\n this.target.fire(iEvent)\n\n if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n this.prevEvent = iEvent\n }\n }\n\n _doPhase (signalArg: Partial) {\n const { event, phase, preEnd, type } = signalArg\n\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\nexport default Interaction\nexport { PointerInfo }\n","import * as utils from './index'\n\nexport interface SearchDetails {\n pointer: Interact.PointerType\n pointerId: number\n pointerType: string\n eventType: string\n eventTarget: Window | Document | Element\n curEventTarget: Window | Document | Element\n scope: Interact.Scope\n}\n\nconst finder = {\n methodOrder: [ 'simulationResume', 'mouseOrPen', 'hasPointer', 'idle' ],\n\n search (details) {\n for (const method of finder.methodOrder) {\n const interaction = finder[method](details)\n\n if (interaction) {\n return interaction\n }\n }\n },\n\n // try to resume simulation with a new pointer\n simulationResume ({ pointerType, eventType, eventTarget, scope }: SearchDetails) {\n if (!/down|start/i.test(eventType)) {\n return null\n }\n\n for (const interaction of scope.interactions.list) {\n let element = eventTarget\n\n if (interaction.simulation && interaction.simulation.allowResume &&\n (interaction.pointerType === pointerType)) {\n while (element) {\n // if the element is the interaction element\n if (element === interaction.element) {\n return interaction\n }\n element = utils.dom.parentNode(element)\n }\n }\n }\n\n return null\n },\n\n // if it's a mouse or pen interaction\n mouseOrPen ({ pointerId, pointerType, eventType, scope }: SearchDetails) {\n if (pointerType !== 'mouse' && pointerType !== 'pen') {\n return null\n }\n\n let firstNonActive\n\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType) {\n // if it's a down event, skip interactions with running simulations\n if (interaction.simulation && !hasPointerId(interaction, pointerId)) { continue }\n\n // if the interaction is active, return it immediately\n if (interaction.interacting()) {\n return interaction\n }\n // otherwise save it and look for another active interaction\n else if (!firstNonActive) {\n firstNonActive = interaction\n }\n }\n }\n\n // if no active mouse interaction was found use the first inactive mouse\n // interaction\n if (firstNonActive) {\n return firstNonActive\n }\n\n // find any mouse or pen interaction.\n // ignore the interaction if the eventType is a *down, and a simulation\n // is active\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get interaction that has this pointer\n hasPointer ({ pointerId, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n if (hasPointerId(interaction, pointerId)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get first idle interaction with a matching pointerType\n idle ({ pointerType, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n // if there's already a pointer held down\n if (interaction.pointers.length === 1) {\n const target = interaction.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 browser from '@interactjs/utils/browser'\nimport domObjects from '@interactjs/utils/domObjects'\nimport events from '@interactjs/utils/events'\nimport finder, { SearchDetails } from '@interactjs/utils/interactionFinder'\nimport pointerUtils from '@interactjs/utils/pointerUtils'\nimport Signals from '@interactjs/utils/Signals'\nimport InteractionBase from './Interaction'\nimport { Scope } from './scope'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n Interaction: typeof InteractionBase\n interactions: {\n signals: Signals\n new: (options: any) => InteractionBase\n list: InteractionBase[]\n listeners: { [type: string]: Interact.Listener }\n eventMap: any\n pointerMoveTolerance: number\n }\n prevTouchTime: number\n }\n}\n\nconst methodNames = [\n 'pointerDown', 'pointerMove', 'pointerUp',\n 'updatePointer', 'removePointer', 'windowBlur',\n]\n\nfunction install (scope: Scope) {\n const signals = new Signals()\n\n const listeners = {} as any\n\n for (const method of methodNames) {\n listeners[method] = doOnInteractions(method, scope)\n }\n\n const pEventTypes = browser.pEventTypes\n const eventMap = {} as { [key: string]: Interact.Listener }\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\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: 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: 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 * as utils from '@interactjs/utils'\nimport domObjects from '@interactjs/utils/domObjects'\nimport defaults from './defaultOptions'\nimport Eventable from './Eventable'\nimport InteractableBase from './Interactable'\nimport InteractEvent from './InteractEvent'\nimport interactions from './interactions'\n\nconst {\n win,\n browser,\n raf,\n Signals,\n events,\n} = utils\n\nexport enum ActionName {\n}\n\nexport interface Actions {\n names: ActionName[]\n methodDict: { [key: string]: string }\n eventTypes: string[]\n}\n\nexport function createScope () {\n return new Scope()\n}\n\nexport type Defaults = typeof defaults\n\nexport class Scope {\n // FIXME Signals\n signals = new Signals()\n browser = browser\n events = events\n utils = utils\n defaults: Defaults = utils.clone(defaults) as Defaults\n Eventable = Eventable\n actions: Actions = {\n names: [],\n methodDict: {},\n eventTypes: [],\n }\n\n InteractEvent = InteractEvent\n Interactable!: typeof InteractableBase\n interactables = new InteractableSet(this)\n\n // main window\n _win!: Window\n\n // main document\n document!: Document\n\n // all documents being listened to\n documents: Array<{ doc: Document, options: any }> = []\n\n constructor () {\n const scope = this as Scope;\n\n (this as { Interactable: typeof InteractableBase }).Interactable = class Interactable extends InteractableBase implements InteractableBase {\n get _defaults () { return scope.defaults }\n\n set (options: any) {\n super.set(options)\n\n scope.interactables.signals.fire('set', {\n options,\n interactable: this,\n })\n\n return this\n }\n\n unset () {\n super.unset()\n scope.interactables.signals.fire('unset', { interactable: this })\n }\n }\n }\n\n init (window: Window) {\n return initScope(this, window)\n }\n\n addDocument (doc: Document, options?: any): void | false {\n // do nothing if document is already known\n if (this.getDocIndex(doc) !== -1) { return false }\n\n const window = win.getWindow(doc)\n\n options = options ? utils.extend({}, options) : {}\n\n this.documents.push({ doc, options })\n events.documents.push(doc)\n\n // don't add an unload event for the main document\n // so that the page may be cached in browser history\n if (doc !== this.document) {\n events.add(window, 'unload', this.onWindowUnload)\n }\n\n this.signals.fire('add-document', { doc, window, scope: this, options })\n }\n\n removeDocument (doc: Document) {\n const index = this.getDocIndex(doc)\n\n const window = win.getWindow(doc)\n const options = this.documents[index].options\n\n events.remove(window, 'unload', this.onWindowUnload)\n\n this.documents.splice(index, 1)\n events.documents.splice(index, 1)\n\n this.signals.fire('remove-document', { doc, window, scope: this, options })\n }\n\n onWindowUnload (event: Event) {\n this.removeDocument(event.target as Document)\n }\n\n getDocIndex (doc: Document) {\n for (let i = 0; i < this.documents.length; i++) {\n if (this.documents[i].doc === doc) {\n return i\n }\n }\n\n return -1\n }\n\n getDocOptions (doc: Document) {\n const docIndex = this.getDocIndex(doc)\n\n return docIndex === -1 ? null : this.documents[docIndex].options\n }\n}\n\nexport class InteractableSet {\n signals = new utils.Signals()\n\n // all set interactables\n list: InteractableBase[] = []\n\n constructor (protected scope: Scope) {}\n\n new (target: Interact.Target, options?: any): InteractableBase {\n options = utils.extend(options || {}, {\n actions: this.scope.actions,\n })\n const interactable = new this.scope.Interactable(target, options, this.scope.document)\n\n this.scope.addDocument(interactable._doc)\n this.list.push(interactable)\n\n this.signals.fire('new', {\n target,\n options,\n interactable,\n win: this.scope._win,\n })\n\n return interactable\n }\n\n indexOfElement (target: Interact.Target, context: Document | Element) {\n context = context || this.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: Interact.Target, options, dontCheckInContext?: boolean) {\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: Document | Element, callback: (interactable: any) => any) {\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\nexport function initScope (scope: Scope, window: Window) {\n win.init(window)\n domObjects.init(window)\n browser.init(window)\n raf.init(window)\n events.init(window)\n\n interactions.install(scope)\n scope.document = window.document\n\n return scope\n}\n","import { ActionName, Scope } from '@interactjs/core/scope'\nimport * as arr from '@interactjs/utils/arr'\nimport * as is from '@interactjs/utils/is'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n draggable: DraggableMethod\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n drag: Interact.DraggableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Drag]?: typeof drag\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Drag = 'drag'\n }\n}\n\n(ActionName as any).Drag = 'drag'\n\nexport type DragEvent = Interact.InteractEvent\n\nexport type DraggableMethod = Interact.ActionMethod\n\nfunction install (scope: Scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope\n\n interactions.signals.on('before-action-move', beforeMove)\n interactions.signals.on('action-resume', beforeMove)\n\n // dragmove\n interactions.signals.on('action-move', move)\n\n Interactable.prototype.draggable = drag.draggable\n\n actions[ActionName.Drag] = drag\n actions.names.push(ActionName.Drag)\n arr.merge(actions.eventTypes, [\n 'dragstart',\n 'dragmove',\n 'draginertiastart',\n 'dragresume',\n 'dragend',\n ])\n actions.methodDict.drag = 'draggable'\n\n defaults.actions.drag = drag.defaults\n}\n\nfunction beforeMove ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x') {\n interaction.coords.cur.page.y = interaction.coords.start.page.y\n interaction.coords.cur.client.y = interaction.coords.start.client.y\n\n interaction.coords.velocity.client.y = 0\n interaction.coords.velocity.page.y = 0\n }\n else if (axis === 'y') {\n interaction.coords.cur.page.x = interaction.coords.start.page.x\n interaction.coords.cur.client.x = interaction.coords.start.client.x\n\n interaction.coords.velocity.client.x = 0\n interaction.coords.velocity.page.x = 0\n }\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x' || axis === 'y') {\n const opposite = axis === 'x' ? 'y' : 'x'\n\n iEvent.page[opposite] = interaction.coords.start.page[opposite]\n iEvent.client[opposite] = interaction.coords.start.client[opposite]\n iEvent.delta[opposite] = 0\n }\n}\n\n/**\n * ```js\n * interact(element).draggable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // the axis in which the first movement must be\n * // for the drag sequence to start\n * // 'xy' by default - any direction\n * startAxis: 'x' || 'y' || 'xy',\n *\n * // 'xy' by default - don't restrict to one axis (move in any direction)\n * // 'x' or 'y' to restrict movement to either axis\n * // 'start' to restrict movement to the axis the drag started in\n * lockAxis: 'x' || 'y' || 'xy' || 'start',\n *\n * // max number of drags that can happen concurrently\n * // with elements of this Interactable. Infinity by default\n * max: Infinity,\n *\n * // max number of drags that can target the same element+Interactable\n * // 1 by default\n * maxPerElement: 2\n * });\n *\n * var isDraggable = interact('element').draggable(); // true\n * ```\n *\n * Get or set whether drag actions can be performed on the target\n *\n * @alias Interactable.prototype.draggable\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on drag events (object makes the Interactable\n * draggable)\n * @return {boolean | Interactable} boolean indicating if this can be the\n * target of drag events, or this Interctable\n */\nconst draggable: DraggableMethod = function draggable (this: Interact.Interactable, options?: Interact.DraggableOptions | boolean): any {\n if (is.object(options)) {\n this.options.drag.enabled = options.enabled !== false\n this.setPerAction('drag', options)\n this.setOnEvents('drag', options)\n\n if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n this.options.drag.lockAxis = options.lockAxis\n }\n if (/^(xy|x|y)$/.test(options.startAxis)) {\n this.options.drag.startAxis = options.startAxis\n }\n\n return this\n }\n\n if (is.bool(options)) {\n this.options.drag.enabled = options\n\n return this\n }\n\n return this.options.drag\n}\n\nconst drag = {\n install,\n draggable,\n beforeMove,\n move,\n defaults: {\n startAxis : 'xy',\n lockAxis : 'xy',\n } as Interact.DropzoneOptions,\n\n checker (_pointer, _event, interactable) {\n const dragOptions = interactable.options.drag\n\n return dragOptions.enabled\n ? {\n name: 'drag',\n axis: (dragOptions.lockAxis === 'start'\n ? dragOptions.startAxis\n : dragOptions.lockAxis),\n }\n : null\n },\n\n getCursor () {\n return 'move'\n },\n}\n\nexport default drag\n","import Interactable from '@interactjs/core/Interactable'\nimport InteractEvent from '@interactjs/core/InteractEvent'\nimport Interaction from '@interactjs/core/Interaction'\nimport { ActionName } from '@interactjs/core/scope'\nimport * as arr from '@interactjs/utils/arr'\n\nclass DropEvent {\n type: string\n target: Element\n currentTarget: Element\n dropzone: Interactable\n dragEvent: InteractEvent\n relatedTarget: Element\n interaction: Interaction\n draggable: Interactable\n timeStamp: number\n propagationStopped = false\n immediatePropagationStopped = false\n\n /**\n * Class of events fired on dropzones during drags with acceptable targets.\n */\n constructor (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\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","import Interactable from '@interactjs/core/Interactable'\nimport InteractEvent from '@interactjs/core/InteractEvent'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport DropEvent from './DropEvent'\n\nexport type DropzoneMethod = (options?: Interact.DropzoneOptions | boolean) => Interact.Interactable | Interact.DropzoneOptions\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n dropzone: DropzoneMethod\n dropCheck: (\n dragEvent: InteractEvent,\n event: Interact.PointerEventType,\n draggable: Interactable,\n draggableElement: Element,\n dropElemen: Element,\n rect: any\n ) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n dropStatus?: {\n cur: {\n dropzone: Interactable, // the dropzone a drag target might be dropped into\n element: Element, // the element at the time of checking\n },\n prev: {\n dropzone: Interactable, // the dropzone that was recently dragged away from\n element: Element, // the element at the time of checking\n },\n rejected: boolean, // wheather the potential drop was rejected from a listener\n events: any, // the drop events related to the current drag event\n activeDrops: Array<{\n dropzone: Interactable\n Element: Element\n rect: Interact.Rect\n }>,\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n drop: Interact.DropzoneOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n dynamicDrop?: boolean\n }\n}\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n dynamicDrop: (newValue?: boolean) => boolean | Interact.interact\n }\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n /** @lends module:interact */\n interact,\n /** @lends Interactable */\n Interactable, // eslint-disable-line no-shadow\n interactions,\n defaults,\n } = scope\n\n interactions.signals.on('after-action-start', ({ interaction, event, iEvent: dragEvent }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n const dropStatus = interaction.dropStatus = interaction.dropStatus || {\n cur: {\n dropzone: null,\n element: null,\n },\n prev: {\n dropzone: null,\n element: null,\n },\n rejected: null,\n events: null,\n activeDrops: null,\n }\n\n // reset active dropzones\n dropStatus.activeDrops = null\n dropStatus.events = null\n\n // TODO: maybe Interaction { element: T }\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 // FIXME proper signal types\n interactions.signals.on('action-move', (arg) => onEventCreated(arg as any, scope))\n interactions.signals.on('action-end', (arg) => onEventCreated(arg as any, scope))\n\n interactions.signals.on('after-action-move', ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n fireDropEvents(interaction, interaction.dropStatus.events)\n interaction.dropStatus.events = {}\n })\n\n interactions.signals.on('after-action-end', ({ interaction }) => {\n if (interaction.prepared.name === 'drag') {\n fireDropEvents(interaction, interaction.dropStatus.events)\n }\n })\n\n interactions.signals.on('stop', ({ interaction }) => {\n interaction.dropStatus.activeDrops = null\n interaction.dropStatus.events = null\n })\n\n interactions.signals.on('stop', ({ interaction: { dropStatus } }) => {\n dropStatus.cur.dropzone = dropStatus.cur.element =\n dropStatus.prev.dropzone = dropStatus.prev.element = null\n dropStatus.rejected = false\n })\n\n /**\n *\n * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param {boolean | object | null} [options] The new options to be set.\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.dropzone = function (this: Interact.Interactable, options) {\n return dropzoneMethod(this, options)\n }\n\n /**\n * ```js\n * interact(target)\n * .dropChecker(function(dragEvent, // related dragmove or dragend event\n * event, // TouchEvent/PointerEvent/MouseEvent\n * dropped, // bool result of the default checker\n * dropzone, // dropzone Interactable\n * dropElement, // dropzone elemnt\n * draggable, // draggable Interactable\n * draggableElement) {// draggable element\n *\n * return dropped && event.target.hasAttribute('allow-drop');\n * }\n * ```\n */\n Interactable.prototype.dropCheck = function (this: Interact.Interactable, dragEvent, event, draggable, draggableElement, dropElement, rect) {\n return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect)\n }\n\n /**\n * Returns or sets whether the dimensions of dropzone elements are calculated\n * on every dragmove or only on dragstart for the default dropChecker\n *\n * @param {boolean} [newValue] True to check on each move. False to check only\n * before start\n * @return {boolean | interact} The current setting or interact\n */\n interact.dynamicDrop = function (newValue?: boolean) {\n if (utils.is.bool(newValue)) {\n // if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n // calcRects(dropzones);\n // }\n\n scope.dynamicDrop = newValue\n\n return interact\n }\n return scope.dynamicDrop\n }\n\n utils.arr.merge(actions.eventTypes, [\n 'dragenter',\n 'dragleave',\n 'dropactivate',\n 'dropdeactivate',\n 'dropmove',\n 'drop',\n ])\n actions.methodDict.drop = 'dropzone'\n\n scope.dynamicDrop = false\n\n defaults.actions.drop = drop.defaults\n}\n\nfunction collectDrops ({ interactables }, draggableElement) {\n const drops = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const dropzone of interactables.list) {\n if (!dropzone.options.drop.enabled) { continue }\n\n const accept = dropzone.options.drop.accept\n\n // test the draggable draggableElement against the dropzone's accept setting\n if ((utils.is.element(accept) && accept !== draggableElement) ||\n (utils.is.string(accept) &&\n !utils.dom.matchesSelector(draggableElement, accept)) ||\n (utils.is.func(accept) && !accept({ dropzone, draggableElement }))) {\n continue\n }\n\n // query for new elements if necessary\n const dropElements = utils.is.string(dropzone.target)\n ? dropzone._context.querySelectorAll(dropzone.target)\n : utils.is.array(dropzone.target) ? dropzone.target : [dropzone.target]\n\n for (const dropzoneElement of dropElements) {\n if (dropzoneElement !== draggableElement) {\n drops.push({\n dropzone,\n element: dropzoneElement,\n })\n }\n }\n }\n\n return drops\n}\n\nfunction fireActivationEvents (activeDrops, event) {\n // loop through all active dropzones and trigger event\n for (const { dropzone, element } of activeDrops) {\n event.dropzone = dropzone\n\n // set current element as event target\n event.target = element\n dropzone.fire(event)\n event.propagationStopped = event.immediatePropagationStopped = false\n }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops (scope: Scope, dragElement: Element) {\n // get dropzones and their elements that could receive the draggable\n const activeDrops = collectDrops(scope, dragElement)\n\n for (const activeDrop of activeDrops) {\n activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element)\n }\n\n return activeDrops\n}\n\nfunction getDrop ({ 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.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\nfunction dropzoneMethod (interactable: Interact.Interactable, options: Interact.DropzoneOptions | boolean) {\n if (utils.is.object(options)) {\n interactable.options.drop.enabled = options.enabled !== false\n\n if (options.listeners) {\n const normalized = utils.normalizeListeners(options.listeners)\n // rename 'drop' to '' as it will be prefixed with 'drop'\n const corrected = Object.keys(normalized).reduce((acc, type) => {\n const correctedType = /^(enter|leave)/.test(type)\n ? `drag${type}`\n : /^(activate|deactivate|move)/.test(type)\n ? `drop${type}`\n : type\n\n acc[correctedType] = normalized[type]\n\n return acc\n }, {})\n\n interactable.off(interactable.options.drop.listeners)\n interactable.on(corrected)\n interactable.options.drop.listeners = corrected\n }\n\n if (utils.is.func(options.ondrop)) { interactable.on('drop', options.ondrop) }\n if (utils.is.func(options.ondropactivate)) { interactable.on('dropactivate', options.ondropactivate) }\n if (utils.is.func(options.ondropdeactivate)) { interactable.on('dropdeactivate', options.ondropdeactivate) }\n if (utils.is.func(options.ondragenter)) { interactable.on('dragenter', options.ondragenter) }\n if (utils.is.func(options.ondragleave)) { interactable.on('dragleave', options.ondragleave) }\n if (utils.is.func(options.ondropmove)) { interactable.on('dropmove', options.ondropmove) }\n\n if (/^(pointer|center)$/.test(options.overlap as string)) {\n interactable.options.drop.overlap = options.overlap\n }\n else if (utils.is.number(options.overlap)) {\n interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0)\n }\n if ('accept' in options) {\n interactable.options.drop.accept = options.accept\n }\n if ('checker' in options) {\n interactable.options.drop.checker = options.checker\n }\n\n return interactable\n }\n\n if (utils.is.bool(options)) {\n interactable.options.drop.enabled = options\n\n return interactable\n }\n\n return interactable.options.drop\n}\n\nfunction dropCheckMethod (\n interactable: Interact.Interactable,\n dragEvent: InteractEvent,\n event: Interact.PointerEventType,\n draggable: Interact.Interactable,\n draggableElement: Element,\n dropElement: Element,\n rect: any\n) {\n let dropped = false\n\n // if the dropzone has no rect (eg. display: none)\n // call the custom dropChecker or just return false\n if (!(rect = rect || interactable.getRect(dropElement))) {\n return (interactable.options.drop.checker\n ? interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n : false)\n }\n\n const dropOverlap = interactable.options.drop.overlap\n\n if (dropOverlap === 'pointer') {\n const origin = utils.getOriginXY(draggable, draggableElement, 'drag')\n const page = utils.pointer.getPageXY(dragEvent)\n\n page.x += origin.x\n page.y += origin.y\n\n const horizontal = (page.x > rect.left) && (page.x < rect.right)\n const vertical = (page.y > rect.top) && (page.y < rect.bottom)\n\n dropped = horizontal && vertical\n }\n\n const dragRect = draggable.getRect(draggableElement)\n\n if (dragRect && dropOverlap === 'center') {\n const cx = dragRect.left + dragRect.width / 2\n const cy = dragRect.top + dragRect.height / 2\n\n dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom\n }\n\n if (dragRect && utils.is.number(dropOverlap)) {\n const overlapArea = (Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) *\n Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top)))\n\n const overlapRatio = overlapArea / (dragRect.width * dragRect.height)\n\n dropped = overlapRatio >= dropOverlap\n }\n\n if (interactable.options.drop.checker) {\n dropped = interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n }\n\n return dropped\n}\n\nconst drop = {\n install,\n getActiveDrops,\n getDrop,\n getDropEvents,\n fireDropEvents,\n defaults: {\n enabled: false,\n accept : null,\n overlap: 'pointer',\n } as Interact.DropzoneOptions,\n}\n\nexport default drop\n","import InteractEvent from '@interactjs/core/InteractEvent'\nimport { ActionName, Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\n\nexport type GesturableMethod = Interact.ActionMethod\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n gesture?: {\n startAngle: number\n startDistance: number\n prevScale: number\n prevAngle: number\n prevDistance: number\n }\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n gesturable: GesturableMethod\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n gesture: Interact.GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Gesture]?: typeof gesture\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Gesture = 'gesture'\n }\n}\n\n(ActionName as any).Gesture = 'gesture'\n\nexport interface GestureEvent extends Interact.InteractEvent {\n distance: number\n angle: number\n da: number // angle change\n scale: number // ratio of distance start to current event\n ds: number // scale change\n box: Interact.Rect // enclosing box of all points\n touches: Interact.PointerType[]\n}\n\nexport interface GestureSignalArg extends Interact.SignalArg {\n iEvent: GestureEvent\n interaction: Interact.Interaction\n event: Interact.PointerEventType | GestureEvent\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope\n\n /**\n * ```js\n * interact(element).gesturable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // limit multiple gestures.\n * // See the explanation in {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * });\n *\n * var isGestureable = interact(element).gesturable();\n * ```\n *\n * Gets or sets whether multitouch gestures can be performed on the target\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on gesture events (makes the Interactable gesturable)\n * @return {boolean | Interactable} A boolean indicating if this can be the\n * target of gesture events, or this Interactable\n */\n Interactable.prototype.gesturable = function (this: Interact.Interactable, options: Interact.GesturableOptions | boolean) {\n if (utils.is.object(options)) {\n this.options.gesture.enabled = options.enabled !== false\n this.setPerAction('gesture', options)\n this.setOnEvents('gesture', options)\n\n return this\n }\n\n if (utils.is.bool(options)) {\n this.options.gesture.enabled = options\n\n return this\n }\n\n return this.options.gesture as Interact.Options\n } as GesturableMethod\n\n interactions.signals.on('action-start', updateGestureProps)\n interactions.signals.on('action-move', updateGestureProps)\n interactions.signals.on('action-end', updateGestureProps)\n\n interactions.signals.on('action-start', start)\n interactions.signals.on('action-move', move)\n\n interactions.signals.on('new', (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[ActionName.Gesture] = gesture\n actions.names.push(ActionName.Gesture)\n utils.arr.merge(actions.eventTypes, [\n 'gesturestart',\n 'gesturemove',\n 'gestureend',\n ])\n actions.methodDict.gesture = 'gesturable'\n\n defaults.actions.gesture = gesture.defaults\n}\n\nconst gesture = {\n install,\n defaults: {\n },\n\n checker (_pointer, _event, _interactable, _element, interaction: { pointers: { length: number; }; }) {\n if (interaction.pointers.length >= 2) {\n return { name: 'gesture' }\n }\n\n return null\n },\n\n getCursor () {\n return ''\n },\n}\n\nfunction 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 interaction.gesture.scale = iEvent.scale\n }\n}\n\nfunction updateGestureProps ({ interaction, iEvent, event, phase }: GestureSignalArg) {\n if (interaction.prepared.name !== 'gesture') { return }\n\n const pointers = interaction.pointers.map((p) => p.pointer)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const deltaSource = interaction.target.options.deltaSource\n\n iEvent.touches = [pointers[0], pointers[1]]\n\n if (starting) {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource)\n iEvent.box = utils.pointer.touchBBox(pointers)\n iEvent.scale = 1\n iEvent.ds = 0\n iEvent.angle = utils.pointer.touchAngle(pointers, deltaSource)\n iEvent.da = 0\n }\n else if (ending || event instanceof InteractEvent) {\n const prevEvent = interaction.prevEvent as GestureEvent\n\n iEvent.distance = prevEvent.distance\n iEvent.box = prevEvent.box\n iEvent.scale = prevEvent.scale\n iEvent.ds = iEvent.scale - 1\n iEvent.angle = 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, deltaSource)\n\n iEvent.ds = iEvent.scale - interaction.gesture.prevScale\n iEvent.da = iEvent.angle - interaction.gesture.prevAngle\n }\n}\n\nexport default gesture\n","import { ActionProps, Interaction } from '@interactjs/core/Interaction'\nimport { ActionName, Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\n\nexport type EdgeName = 'top' | 'left' | 'bottom' | 'right'\n\nexport type ResizableMethod = Interact.ActionMethod\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n resizable: ResizableMethod\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n resizeAxes: 'x' | 'y' | 'xy'\n resizeRects: {\n start: Interact.Rect\n current: Interact.Rect\n inverted: Interact.Rect\n previous: Interact.Rect\n delta: Interact.Rect\n }\n resizeStartAspectRatio: number\n }\n\n interface ActionProps {\n _linkedEdges?: { [key: string]: boolean }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n resize: Interact.ResizableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Resize]?: typeof resize\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Resize = 'resize'\n }\n}\n\n(ActionName as any).Resize = 'resize'\n\nexport interface ResizeEvent extends Interact.InteractEvent {\n deltaRect?: Interact.Rect\n rect?: Interact.Rect\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n browser,\n /** @lends Interactable */\n Interactable, // tslint:disable-line no-shadowed-variable\n interactions,\n defaults,\n } = scope\n\n // Less Precision with touch input\n\n interactions.signals.on('new', (interaction) => {\n interaction.resizeAxes = 'xy'\n })\n\n interactions.signals.on('action-start', start)\n interactions.signals.on('action-move', move)\n\n interactions.signals.on('action-start', updateEventAxes)\n interactions.signals.on('action-move', updateEventAxes)\n\n resize.cursors = initCursors(browser)\n resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10\n\n /**\n * ```js\n * interact(element).resizable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * edges: {\n * top : true, // Use pointer coords to check for resize.\n * left : false, // Disable resizing from left edge.\n * bottom: '.resize-s',// Resize if pointer target matches selector\n * right : handleEl // Resize if pointer target is the given Element\n * },\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height are adjusted at a 1:1 ratio.\n * square: false,\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height maintain the aspect ratio they had when resizing started.\n * preserveAspectRatio: false,\n *\n * // a value of 'none' will limit the resize rect to a minimum of 0x0\n * // 'negate' will allow the rect to have negative width/height\n * // 'reposition' will keep the width/height positive by swapping\n * // the top and bottom edges and/or swapping the left and right edges\n * invert: 'none' || 'negate' || 'reposition'\n *\n * // limit multiple resizes.\n * // See the explanation in the {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * });\n *\n * var isResizeable = interact(element).resizable();\n * ```\n *\n * Gets or sets whether resize actions can be performed on the target\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on resize events (object makes the Interactable\n * resizable)\n * @return {boolean | Interactable} A boolean indicating if this can be the\n * target of resize elements, or this Interactable\n */\n Interactable.prototype.resizable = function (this: Interact.Interactable, options: Interact.ResizableOptions | boolean) {\n return resizable(this, options, scope)\n } as ResizableMethod\n\n actions[ActionName.Resize] = resize\n actions.names.push(ActionName.Resize)\n utils.arr.merge(actions.eventTypes, [\n 'resizestart',\n 'resizemove',\n 'resizeinertiastart',\n 'resizeresume',\n 'resizeend',\n ])\n actions.methodDict.resize = 'resizable'\n\n defaults.actions.resize = resize.defaults\n}\n\nconst resize = {\n install,\n defaults: {\n square: false,\n preserveAspectRatio: false,\n axis: 'xy',\n\n // use default margin\n margin: NaN,\n\n // object with props left, right, top, bottom which are\n // true/false values to resize when the pointer is over that edge,\n // CSS selectors to match the handles for each direction\n // or the Elements for each handle\n edges: null,\n\n // a value of 'none' will limit the resize rect to a minimum of 0x0\n // 'negate' will alow the rect to have negative width/height\n // 'reposition' will keep the width/height positive by swapping\n // the top and bottom edges and/or swapping the left and right edges\n invert: 'none',\n } as Interact.ResizableOptions,\n\n checker (\n _pointer: Interact.PointerType,\n _event: Interact.PointerEventType,\n interactable: Interact.Interactable,\n element: Element,\n interaction: Interaction,\n rect: Interact.Rect\n ) {\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: { [edge: string]: boolean } = { 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._latestPointer.eventTarget,\n element,\n rect,\n resizeOptions.margin || this.defaultMargin)\n }\n\n resizeEdges.left = resizeEdges.left && !resizeEdges.right\n resizeEdges.top = resizeEdges.top && !resizeEdges.bottom\n\n if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n return {\n name: 'resize',\n edges: resizeEdges,\n }\n }\n }\n else {\n const right = options.resize.axis !== 'y' && page.x > (rect.right - this.defaultMargin)\n const bottom = options.resize.axis !== 'x' && page.y > (rect.bottom - this.defaultMargin)\n\n if (right || bottom) {\n return {\n name: 'resize',\n axes: (right ? 'x' : '') + (bottom ? 'y' : ''),\n }\n }\n }\n }\n\n return null\n },\n\n cursors: null as unknown as ReturnType,\n\n getCursor (action: ActionProps) {\n const cursors = resize.cursors as { [key: string]: string }\n if (action.axis) {\n return 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 cursors[cursorKey]\n }\n\n return null\n },\n\n defaultMargin: null as unknown as number,\n}\n\nfunction resizable (interactable: Interact.Interactable, options: Interact.OrBoolean | boolean, scope: Scope) {\n if (utils.is.object(options)) {\n interactable.options.resize.enabled = options.enabled !== false\n interactable.setPerAction('resize', options)\n interactable.setOnEvents('resize', options)\n\n if (utils.is.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) {\n interactable.options.resize.axis = options.axis\n }\n else if (options.axis === null) {\n interactable.options.resize.axis = scope.defaults.actions.resize.axis\n }\n\n if (utils.is.bool(options.preserveAspectRatio)) {\n interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio\n }\n else if (utils.is.bool(options.square)) {\n interactable.options.resize.square = options.square\n }\n\n return interactable\n }\n if (utils.is.bool(options)) {\n interactable.options.resize.enabled = options\n\n return interactable\n }\n return interactable.options.resize\n}\n\nfunction checkResizeEdge (name: string, value: any, page: Interact.Point, element: Node, interactableElement: Element, rect: Interact.Rect, margin: number) {\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 initCursors (browser: typeof import ('@interactjs/utils/browser').default) {\n return (browser.isIe9 ? {\n x : 'e-resize',\n y : 's-resize',\n xy: 'se-resize',\n\n top : 'n-resize',\n left : 'w-resize',\n bottom : 's-resize',\n right : 'e-resize',\n topleft : 'se-resize',\n bottomright: 'se-resize',\n topright : 'ne-resize',\n bottomleft : 'ne-resize',\n } : {\n x : 'ew-resize',\n y : 'ns-resize',\n xy: 'nwse-resize',\n\n top : 'ns-resize',\n left : 'ew-resize',\n bottom : 'ns-resize',\n right : 'ew-resize',\n topleft : 'nwse-resize',\n bottomright: 'nwse-resize',\n topright : 'nesw-resize',\n bottomleft : 'nesw-resize',\n })\n}\n\nfunction start ({ iEvent, interaction }: Interact.SignalArg) {\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,\n right : 0,\n width : 0,\n top : 0,\n bottom: 0,\n height: 0,\n },\n };\n\n (iEvent as ResizeEvent).rect = interaction.resizeRects.inverted;\n (iEvent as ResizeEvent).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 resize\n","import { Scope } from '@interactjs/core/scope'\nimport drag, { DragEvent } from './drag'\nimport drop from './drop'\nimport gesture, { GestureEvent } from './gesture'\nimport resize, { ResizeEvent } from './resize'\n\nfunction install (scope: Scope) {\n gesture.install(scope)\n resize.install(scope)\n drag.install(scope)\n drop.install(scope)\n}\n\nexport {\n gesture,\n GestureEvent,\n resize,\n ResizeEvent,\n drag,\n DragEvent,\n drop,\n install,\n}\n","import * as domUtils from '@interactjs/utils/domUtils'\nimport * as is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport { getStringOptionResult } from '@interactjs/utils/rect'\nimport { getWindow } from '@interactjs/utils/window'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoScroll: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoScroll?: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n autoScroll?: Interact.AutoScrollOption\n }\n}\n\nfunction install (scope: Scope) {\n const {\n interactions,\n defaults,\n actions,\n } = scope\n\n scope.autoScroll = autoScroll\n\n interactions.signals.on('new', ({ 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\nconst autoScroll = {\n defaults: {\n enabled : false,\n margin : 60,\n\n // the item that is scrolled (Window or HTMLElement)\n container: null as Window | Element,\n\n // the scroll speed in pixels per second\n speed : 300,\n } as Interact.AutoScrollOption,\n\n interaction: null,\n i: null, // the handle returned by window.setInterval\n x: 0,\n y: 0, // Direction each pulse is to scroll in\n\n isScrolling: false,\n prevTime: 0,\n margin: 0,\n speed: 0,\n\n start (interaction: Interact.Interaction) {\n autoScroll.isScrolling = true\n raf.cancel(autoScroll.i)\n\n interaction.autoScroll = autoScroll\n autoScroll.interaction = interaction\n autoScroll.prevTime = new Date().getTime()\n autoScroll.i = raf.request(autoScroll.scroll)\n },\n\n stop () {\n autoScroll.isScrolling = false\n if (autoScroll.interaction) {\n autoScroll.interaction.autoScroll = null\n }\n raf.cancel(autoScroll.i)\n },\n\n // scroll the window by the values in scroll.x/y\n scroll () {\n const { interaction } = autoScroll\n const { 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 (interactable, actionName) {\n const options = interactable.options\n\n return options[actionName].autoScroll && options[actionName].autoScroll.enabled\n },\n onInteractionMove ({ interaction, pointer }) {\n if (!(interaction.interacting() &&\n autoScroll.check(interaction.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\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 { warnOnce } from '@interactjs/utils'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport * as is from '@interactjs/utils/is'\n\n// TODO: there seems to be a @babel/preset-typescript bug causing regular import\n// syntax to remain in js output\ntype Scope = import ('@interactjs/core/scope').Scope\ntype Actions = import ('@interactjs/core/scope').Actions\ntype Interaction = import ('@interactjs/core/Interaction').default\ntype Interactable = import ('@interactjs/core/Interactable').default\n\ntype IgnoreValue = string | Element | boolean\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n getAction: typeof getAction\n defaultActionChecker: (pointer: any, event: any, interaction: any, element: any) => any\n styleCursor: typeof styleCursor\n actionChecker: typeof actionChecker\n testIgnoreAllow: typeof testIgnoreAllow\n testAllow: typeof testAllow\n testIgnore: typeof testIgnore\n ignoreFrom: (...args: any) => boolean\n allowFrom: (...args: any) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n pointerIsDown: boolean\n }\n}\n\nfunction install (scope: Scope) {\n const {\n /** @lends Interactable */\n Interactable, // tslint:disable-line no-shadowed-variable\n actions,\n } = scope\n\n Interactable.prototype.getAction = getAction\n\n /**\n * ```js\n * interact(element, { ignoreFrom: document.getElementById('no-action') });\n * // or\n * interact(element).ignoreFrom('input, textarea, a');\n * ```\n * @deprecated\n * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n * of it's parents match the given CSS selector or Element, no\n * drag/resize/gesture is started.\n *\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to not ignore any elements\n * @return {string | Element | object} The current ignoreFrom value or this\n * Interactable\n */\n Interactable.prototype.ignoreFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('ignoreFrom', newValue)\n }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).')\n\n /**\n * @deprecated\n *\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to allow from any element\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */\n Interactable.prototype.allowFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('allowFrom', newValue)\n }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).')\n\n Interactable.prototype.testIgnore = testIgnore\n\n Interactable.prototype.testAllow = testAllow\n\n Interactable.prototype.testIgnoreAllow = testIgnoreAllow\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 = actionChecker\n\n /**\n * Returns or sets whether the the cursor should be changed depending on the\n * action that would be performed if the mouse were pressed and dragged.\n *\n * @param {boolean} [newValue]\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.styleCursor = styleCursor\n\n Interactable.prototype.defaultActionChecker = function (this: Interactable, pointer, event, interaction, element) {\n return defaultActionChecker(this, pointer, event, interaction, element, actions)\n }\n}\n\nfunction getAction (this: Interactable, pointer: Interact.PointerType, event: Interact.PointerEventType, interaction: Interaction, element: 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\nfunction defaultActionChecker (interactable: Interactable, pointer: Interact.PointerType, event: Interact.PointerEventType, interaction: Interaction, element: Element, actions: Actions) {\n const rect = interactable.getRect(element)\n const buttons = (event as MouseEvent).buttons || ({\n 0: 1,\n 1: 4,\n 3: 8,\n 4: 16,\n })[(event as MouseEvent).button as 0 | 1 | 3 | 4]\n let action = null\n\n for (const actionName of actions.names) {\n // check mouseButton setting if the pointer is down\n if (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & interactable.options[actionName].mouseButtons) === 0) {\n continue\n }\n\n action = (actions[actionName as keyof Actions] as any).checker(pointer, event, interactable, element, interaction, rect)\n\n if (action) {\n return action\n }\n }\n}\n\nfunction styleCursor (this: Interactable, newValue?: boolean) {\n if (is.bool(newValue)) {\n this.options.styleCursor = newValue\n\n return this\n }\n\n if (newValue === null) {\n delete this.options.styleCursor\n\n return this\n }\n\n return this.options.styleCursor\n}\n\nfunction actionChecker (this: Interactable, checker: any) {\n if (is.func(checker)) {\n this.options.actionChecker = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.options.actionChecker\n\n return this\n }\n\n return this.options.actionChecker\n}\n\nfunction testIgnoreAllow (this: Interactable, options: { ignoreFrom: IgnoreValue, allowFrom: IgnoreValue }, interactableElement: Element, eventTarget: Element) {\n return (!this.testIgnore(options.ignoreFrom, interactableElement, eventTarget) &&\n this.testAllow(options.allowFrom, interactableElement, eventTarget))\n}\n\nfunction testAllow (this: Interactable, allowFrom: IgnoreValue, interactableElement: Element, element: 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\nfunction testIgnore (this: Interactable, ignoreFrom: IgnoreValue, interactableElement: Element, element: 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\nexport default { install }\n","import * as utils from '@interactjs/utils'\nimport InteractableMethods from './InteractableMethods'\ntype Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n maxInteractions: (newValue: any) => any\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoStart: AutoStart\n maxInteractions: (...args: any) => any\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface BaseDefaults {\n actionChecker?\n styleCursor?\n }\n\n interface PerActionDefaults {\n manualStart?: boolean\n max?: number\n maxPerElement?: number\n allowFrom?: string | Element\n ignoreFrom?: string | Element\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons?: 0 | 1 | 2 | 4 | 16\n }\n}\n\nexport interface AutoStart {\n // Allow this many interactions to happen simultaneously\n maxInteractions: number\n withinInteractionLimit: typeof withinInteractionLimit\n cursorElement: Element\n signals: utils.Signals\n}\n\nfunction install (scope: Scope) {\n const {\n interact,\n interactions,\n defaults,\n } = scope\n\n interact.use(InteractableMethods)\n\n // set cursor style on mousedown\n interactions.signals.on('down', ({ interaction, pointer, event, eventTarget }) => {\n if (interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n })\n\n // set cursor style on mousemove\n interactions.signals.on('move', ({ interaction, pointer, event, eventTarget }) => {\n if (interaction.pointerType !== 'mouse' ||\n interaction.pointerIsDown ||\n interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n })\n\n interactions.signals.on('move', (arg) => {\n const { interaction } = arg\n\n if (!interaction.pointerIsDown ||\n interaction.interacting() ||\n !interaction.pointerWasMoved ||\n !interaction.prepared.name) {\n return\n }\n\n scope.autoStart.signals.fire('before-start', arg)\n\n const 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()\n }\n else {\n interaction.start(interaction.prepared, target, interaction.element)\n }\n }\n })\n\n interactions.signals.on('stop', ({ interaction }) => {\n const target = interaction.target\n\n if (target && target.options.styleCursor) {\n setCursor(interaction.element, '', scope)\n }\n })\n\n defaults.base.actionChecker = null\n defaults.base.styleCursor = true\n\n utils.extend(defaults.perAction, {\n manualStart: false,\n max: Infinity,\n maxPerElement: 1,\n allowFrom: null,\n ignoreFrom: null,\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons: 1,\n });\n\n /**\n * Returns or sets the maximum number of concurrent interactions allowed. By\n * default only 1 interaction is allowed at a time (for backwards\n * compatibility). To allow multiple interactions on the same Interactables and\n * elements, you need to enable it in the draggable, resizable and gesturable\n * `'max'` and `'maxPerElement'` options.\n *\n * @alias module:interact.maxInteractions\n *\n * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n */\n (interact as any /* FIXME */).maxInteractions = (newValue) => maxInteractions(newValue, scope)\n\n scope.autoStart = {\n // Allow this many interactions to happen simultaneously\n maxInteractions: Infinity,\n withinInteractionLimit,\n cursorElement: null,\n signals: new utils.Signals(),\n }\n}\n\n// Check if the current 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 { action: null, target: null, element: null }\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 { action: null, target: null, element: null }\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 })\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 false }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name\n\n if (!interaction.interacting()) { continue }\n\n activeInteractions++\n\n if (activeInteractions >= autoStartMax) {\n return false\n }\n\n if (interaction.target !== interactable) { continue }\n\n targetCount += otherAction === action.name ? 1 : 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 { ActionName } from '@interactjs/core/scope'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport * as is from '@interactjs/utils/is'\nimport autoStart from './base'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\nfunction install (scope: Scope) {\n scope.autoStart.signals.on('before-start', ({ interaction, eventTarget, dx, dy }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n // check if a drag is in the correct axis\n const absX = Math.abs(dx)\n const absY = Math.abs(dy)\n const targetOptions = interaction.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] as 'x' | 'y' // always lock to one axis even if currentAxis === 'xy'\n : targetOptions.lockAxis\n\n // if the movement isn't in the startAxis of the interactable\n if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n // cancel the prepared action\n interaction.prepared.name = null\n\n // then try to get a drag from another ineractable\n let element = eventTarget\n\n const getDraggable = function (interactable) {\n if (interactable === interaction.target) { return }\n\n const options = interaction.target.options.drag\n\n if (!options.manualStart &&\n interactable.testIgnoreAllow(options, element, eventTarget)) {\n const action = interactable.getAction(\n interaction.downPointer, interaction.downEvent, interaction, element)\n\n if (action &&\n action.name === 'drag' &&\n checkStartAxis(currentAxis, interactable) &&\n autoStart.validateAction(action, interactable, element, eventTarget, scope)) {\n return interactable\n }\n }\n }\n\n // check all interactables\n while (is.element(element)) {\n const interactable = scope.interactables.forEachMatch(element, getDraggable)\n\n if (interactable) {\n interaction.prepared.name = ActionName.Drag\n interaction.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","type Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n hold?: number\n delay?: number\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoStartHoldTimer?: any\n }\n}\n\nfunction install (scope: 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', (interaction) => {\n interaction.autoStartHoldTimer = null\n })\n\n autoStart.signals.on('prepared', ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.autoStartHoldTimer = setTimeout(() => {\n interaction.start(interaction.prepared, interaction.target, interaction.element)\n }, hold)\n }\n })\n\n interactions.signals.on('move', ({ interaction, duplicate }) => {\n if (interaction.pointerWasMoved && !duplicate) {\n clearTimeout(interaction.autoStartHoldTimer)\n }\n })\n\n // prevent regular down->move autoStart\n autoStart.signals.on('before-start', ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.prepared.name = null\n }\n })\n}\n\nfunction getHoldDuration (interaction) {\n const actionName = interaction.prepared && interaction.prepared.name\n\n if (!actionName) { return null }\n\n const options = interaction.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 dragAxis from './dragAxis'\nimport hold from './hold'\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 { matchesSelector, nodeContains } from '@interactjs/utils/domUtils'\nimport events from '@interactjs/utils/events'\nimport * as is from '@interactjs/utils/is'\nimport { getWindow } from '@interactjs/utils/window'\n\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 /**\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 if (interaction.element &&\n (interaction.element === event.target ||\n nodeContains(interaction.element, event.target))) {\n interaction.target.checkAndPreventDefault(event)\n return\n }\n }\n }\n}\n\nexport type Install = typeof install\n\nexport default { install }\n","import { Scope } from '@interactjs/core/scope'\nimport extend from '@interactjs/utils/extend'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n modifiers?: any\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n modifiers?: any\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n modifiers?: any[]\n }\n}\n\nfunction install (scope: Scope) {\n const {\n interactions,\n } = scope\n\n scope.defaults.perAction.modifiers = []\n scope.modifiers = {}\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.modifiers = {\n startOffset: { left: 0, right: 0, top: 0, bottom: 0 },\n offsets : {},\n states : null,\n result : null,\n }\n })\n\n interactions.signals.on('before-action-start', (arg) => {\n start(arg as any, arg.interaction.coords.start.page, scope.modifiers)\n })\n\n interactions.signals.on('action-resume', (arg) => {\n beforeMove(arg as any)\n start(arg as any, 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 as any)\n interactions.signals.on('after-action-move', restoreCoords as any)\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 (\n { interaction, phase }: Interact.SignalArg,\n pageCoords: Interact.Point,\n registeredModifiers,\n) {\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)) as Interact.Rect & Interact.Rect2\n\n if (!('width' in rect)) { rect.width = rect.right - rect.left }\n if (!('height' in rect)) { rect.height = rect.bottom - rect.top }\n\n const startOffset = getRectOffset(rect, pageCoords)\n\n interaction.modifiers.startOffset = startOffset\n interaction.modifiers.startDelta = { x: 0, y: 0 }\n\n const arg: Partial = {\n interaction,\n interactable,\n element,\n pageCoords,\n phase,\n rect,\n startOffset,\n states,\n preEnd: false,\n requireEndOnly: false,\n }\n\n interaction.modifiers.states = states\n interaction.modifiers.result = null\n startAll(arg)\n\n arg.pageCoords = extend({}, interaction.coords.start.page)\n\n const result = interaction.modifiers.result = setAll(arg)\n\n return result\n}\n\nfunction setAll (arg: Partial) {\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, name } = modifierList[index]\n\n if (options && options.enabled === false) { continue }\n\n const state = {\n options,\n methods,\n index,\n name,\n }\n\n states.push(state)\n }\n\n return states\n}\n\nfunction beforeMove ({ interaction, phase, preEnd, skipModifiers }): void | false {\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): void | false {\n const { interaction, event, noPreEnd } = arg\n const states = interaction.modifiers.states\n\n if (noPreEnd || !states || !states.length) {\n return\n }\n\n let didPreEnd = false\n\n for (const state of states) {\n arg.state = state\n const { options, methods } = state\n\n const endResult = methods.beforeEnd && methods.beforeEnd(arg)\n\n if (endResult === false) {\n 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 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\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?: boolean, requireEndOnly?: boolean, phase?: string) {\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?: string) {\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, name }\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 { EventPhase } from '@interactjs/core/InteractEvent'\nimport modifiers from '@interactjs/modifiers/base'\nimport * as utils from '@interactjs/utils'\nimport raf from '@interactjs/utils/raf'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/core/InteractEvent' {\n // eslint-disable-next-line no-shadow\n enum EventPhase {\n Resume = 'resume',\n InertiaStart = 'inertiastart',\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n inertia?: any\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n inertia?: {\n enabled?: boolean,\n resistance?: number, // the lambda in exponential decay\n minSpeed?: number, // target speed must be above this for inertia to start\n endSpeed?: number, // the speed at which inertia is slow enough to stop\n allowResume?: true, // allow resuming an action in inertia phase\n smoothEndDuration?: number, // animate to snap/restrict endOnly if there's no inertia\n } | boolean // FIXME\n }\n}\n\n(EventPhase as any).Resume = 'resume';\n(EventPhase as any).InertiaStart = 'inertiastart'\n\nfunction install (scope: Scope) {\n const {\n interactions,\n defaults,\n } = scope\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.inertia = {\n active : false,\n smoothEnd : false,\n allowResume: false,\n\n startEvent: null,\n upCoords : {},\n\n xe: 0,\n ye: 0,\n sx: 0,\n sy: 0,\n\n t0: 0,\n vx0: 0,\n vys: 0,\n duration: 0,\n\n lambda_v0: 0,\n one_ve_v0: 0,\n i : null,\n }\n })\n\n // FIXME proper signal typing\n interactions.signals.on('before-action-end', (arg) => release(arg as any, scope))\n interactions.signals.on('down', (arg) => resume(arg as any, scope))\n interactions.signals.on('stop', (arg) => stop(arg as any))\n\n defaults.perAction.inertia = {\n enabled : false,\n resistance : 10, // the lambda in exponential decay\n minSpeed : 100, // target speed must be above this for inertia to start\n endSpeed : 10, // the speed at which inertia is slow enough to stop\n allowResume : true, // allow resuming an action in inertia phase\n smoothEndDuration: 300, // animate to snap/restrict endOnly if there's no inertia\n }\n}\n\nfunction resume ({ interaction, event, pointer, eventTarget }: Interact.SignalArg, scope: 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 // 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, EventPhase.Resume, interaction.element)\n\n interaction._fireEvent(resumeEvent)\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur)\n break\n }\n\n element = utils.dom.parentNode(element)\n }\n }\n}\n\nfunction release ({ interaction, event, noPreEnd }: Interact.SignalArg, scope: Scope) {\n const state = interaction.inertia\n\n if (!interaction.interacting() ||\n (interaction.simulation && interaction.simulation.active) ||\n noPreEnd) {\n return null\n }\n\n const options = getOptions(interaction)\n\n const now = 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: ReturnType\n\n // check if inertia should be started\n const inertiaPossible = (options && options.enabled &&\n interaction.prepared.name !== 'gesture' &&\n event !== state.startEvent)\n\n const inertia = (inertiaPossible &&\n (now - interaction.coords.cur.timeStamp) < 50 &&\n pointerSpeed > options.minSpeed &&\n pointerSpeed > options.endSpeed)\n\n const modifierArg = {\n interaction,\n pageCoords: utils.extend({}, interaction.coords.cur.page),\n states: inertiaPossible && interaction.modifiers.states.map(\n (modifierStatus) => utils.extend({}, modifierStatus)\n ),\n preEnd: true,\n requireEndOnly: true,\n }\n\n // smoothEnd\n if (inertiaPossible && !inertia) {\n modifierResult = modifiers.setAll(modifierArg)\n\n if (modifierResult.changed) {\n smoothEnd = true\n }\n }\n\n if (!(inertia || smoothEnd)) { return null }\n\n utils.pointer.copyCoords(state.upCoords, interaction.coords.cur)\n\n interaction.pointers[0].pointer = state.startEvent = new scope.InteractEvent(\n interaction,\n event,\n // FIXME add proper typing Action.name\n interaction.prepared.name as T,\n EventPhase.InertiaStart,\n interaction.element,\n )\n\n state.t0 = now\n\n state.active = true\n state.allowResume = options.allowResume\n interaction.simulation = state\n\n interaction.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 }: Interact.SignalArg) {\n const state = interaction.inertia\n if (state.active) {\n raf.cancel(state.i)\n state.active = false\n interaction.simulation = null\n }\n}\n\nfunction calcInertia (interaction: Interact.Interaction, state) {\n const options = getOptions(interaction)\n const lambda = options.resistance\n const inertiaDur = -Math.log(options.endSpeed / state.v0) / lambda\n\n state.x0 = interaction.prevEvent.page.x\n state.y0 = interaction.prevEvent.page.y\n state.t0 = state.startEvent.timeStamp / 1000\n state.sx = state.sy = 0\n\n state.modifiedXe = state.xe = (state.vx0 - inertiaDur) / lambda\n state.modifiedYe = state.ye = (state.vy0 - inertiaDur) / lambda\n state.te = inertiaDur\n\n state.lambda_v0 = lambda / state.v0\n state.one_ve_v0 = 1 - options.endSpeed / state.v0\n}\n\nfunction inertiaTick (interaction: Interact.Interaction) {\n updateInertiaCoords(interaction)\n utils.pointer.setCoordDeltas(interaction.coords.delta, interaction.coords.prev, interaction.coords.cur)\n utils.pointer.setCoordVelocity(interaction.coords.velocity, interaction.coords.delta)\n\n const state = interaction.inertia\n const options = getOptions(interaction)\n const lambda = options.resistance\n const t = new Date().getTime() / 1000 - state.t0\n\n if (t < state.te) {\n const progress = 1 - (Math.exp(-lambda * t) - state.lambda_v0) / state.one_ve_v0\n\n if (state.modifiedXe === state.xe && state.modifiedYe === state.ye) {\n state.sx = state.xe * progress\n state.sy = state.ye * progress\n }\n else {\n const quadPoint = utils.getQuadraticCurvePoint(\n 0, 0,\n state.xe, state.ye,\n state.modifiedXe, state.modifiedYe,\n progress)\n\n state.sx = quadPoint.x\n state.sy = quadPoint.y\n }\n\n interaction.move()\n\n state.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: Interact.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: Interact.Interaction) {\n const state = interaction.inertia\n\n // return if inertia isn't running\n if (!state.active) { return }\n\n const pageUp = state.upCoords.page\n const clientUp = state.upCoords.client\n\n utils.pointer.setCoords(interaction.coords.cur, [ {\n pageX : pageUp.x + state.sx,\n pageY : pageUp.y + state.sy,\n clientX: clientUp.x + state.sx,\n clientY: clientUp.y + state.sy,\n } ])\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","/** @module interact */\n\nimport { Options } from '@interactjs/core/defaultOptions'\nimport Interactable from '@interactjs/core/Interactable'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport browser from '@interactjs/utils/browser'\nimport events from '@interactjs/utils/events'\n\nexport interface Plugin {\n install (scope: Scope): void\n [key: string]: any\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n interact: InteractStatic\n _plugins: Plugin[]\n }\n}\n\nexport interface InteractStatic {\n (target: Interact.Target, options?: Options): Interactable\n on: typeof on\n pointerMoveTolerance: typeof pointerMoveTolerance\n stop: typeof stop\n supportsPointerEvent: typeof supportsPointerEvent\n supportsTouch: typeof supportsTouch\n debug: typeof debug\n off: typeof off\n isSet: typeof isSet\n use: typeof use\n getPointerAverage: typeof utils.pointer.pointerAverage\n getTouchBBox: typeof utils.pointer.touchBBox\n getTouchDistance: typeof utils.pointer.touchDistance\n getTouchAngle: typeof utils.pointer.touchAngle\n getElementRect: typeof utils.dom.getElementRect\n getElementClientRect: typeof utils.dom.getElementClientRect\n matchesSelector: typeof utils.dom.matchesSelector\n closest: typeof utils.dom.closest\n addDocument: typeof scope.addDocument\n removeDocument: typeof scope.removeDocument\n version: string\n}\n\nconst globalEvents: any = {}\nconst scope = new Scope()\n\n/**\n * ```js\n * interact('#draggable').draggable(true)\n *\n * var rectables = interact('rect')\n * rectables\n * .gesturable(true)\n * .on('gesturemove', function (event) {\n * // ...\n * })\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @global\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\nexport const interact: InteractStatic = function interact (target: Interact.Target, options?: any) {\n let interactable = scope.interactables.get(target, options)\n\n if (!interactable) {\n interactable = scope.interactables.new(target, options)\n interactable.events.global = globalEvents\n }\n\n return interactable\n} as InteractStatic\n\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 = use\nfunction use (plugin: Plugin) {\n if (scope._plugins.indexOf(plugin) !== -1) {\n return interact\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 = isSet\nfunction isSet (element: Element, options?: any) {\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 = on\nfunction on (type: string | Interact.EventTypes, listener: Interact.ListenersArg, options?) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (utils.is.array(type)) {\n for (const eventType of (type as any[])) {\n interact.on(eventType, listener, options)\n }\n\n return interact\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.on(prop, (type as Interact.EventTypes)[prop], listener)\n }\n\n return interact\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (utils.arr.contains(scope.actions.eventTypes, type)) {\n // if this type of event was never bound\n if (!globalEvents[type]) {\n globalEvents[type] = [listener]\n }\n else {\n globalEvents[type].push(listener)\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n events.add(scope.document, type, listener as Interact.Listener, { options })\n }\n\n return interact\n}\n\n/**\n * Removes a global InteractEvent listener or DOM event from `document`\n *\n * @alias module:interact.off\n *\n * @param {string | array | object} type The types of events that were listened\n * for\n * @param {function} listener The listener function to be removed\n * @param {object | boolean} options [options] object or useCapture flag for\n * removeEventListener\n * @return {object} interact\n */\ninteract.off = off\nfunction off (type, listener, options) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (utils.is.array(type)) {\n for (const eventType of type) {\n interact.off(eventType, listener, options)\n }\n\n return interact\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.off(prop, type[prop], listener)\n }\n\n return interact\n }\n\n if (!utils.arr.contains(scope.actions.eventTypes, type)) {\n events.remove(scope.document, type, listener, options)\n }\n else {\n let index\n\n if (type in globalEvents &&\n (index = globalEvents[type].indexOf(listener)) !== -1) {\n globalEvents[type].splice(index, 1)\n }\n }\n\n return interact\n}\n\n/**\n * Returns an object which exposes internal data\n * @alias module:interact.debug\n *\n * @return {object} An object with properties that outline the current state\n * and expose internal functions and variables\n */\ninteract.debug = debug\nfunction debug () {\n return scope\n}\n\n// expose the functions used to calculate multi-touch properties\ninteract.getPointerAverage = utils.pointer.pointerAverage\ninteract.getTouchBBox = utils.pointer.touchBBox\ninteract.getTouchDistance = utils.pointer.touchDistance\ninteract.getTouchAngle = utils.pointer.touchAngle\n\ninteract.getElementRect = utils.dom.getElementRect\ninteract.getElementClientRect = utils.dom.getElementClientRect\ninteract.matchesSelector = utils.dom.matchesSelector\ninteract.closest = utils.dom.closest\n\n/**\n * @alias module:interact.supportsTouch\n *\n * @return {boolean} Whether or not the browser supports touch input\n */\ninteract.supportsTouch = supportsTouch\nfunction supportsTouch () {\n return browser.supportsTouch\n}\n\n/**\n * @alias module:interact.supportsPointerEvent\n *\n * @return {boolean} Whether or not the browser supports PointerEvents\n */\ninteract.supportsPointerEvent = supportsPointerEvent\nfunction supportsPointerEvent () {\n return browser.supportsPointerEvent\n}\n\n/**\n * Cancels all interactions (end events are not fired)\n *\n * @alias module:interact.stop\n *\n * @return {object} interact\n */\ninteract.stop = stop\nfunction stop () {\n for (const interaction of scope.interactions.list) {\n interaction.stop()\n }\n\n return interact\n}\n\n/**\n * Returns or sets the distance the pointer must be moved before an action\n * sequence occurs. This also affects tolerance for tap events.\n *\n * @alias module:interact.pointerMoveTolerance\n *\n * @param {number} [newValue] The movement from the start position must be greater than this value\n * @return {interact | number}\n */\ninteract.pointerMoveTolerance = pointerMoveTolerance\nfunction pointerMoveTolerance (newValue) {\n if (utils.is.number(newValue)) {\n scope.interactions.pointerMoveTolerance = newValue\n\n return interact\n }\n\n return scope.interactions.pointerMoveTolerance\n}\n\nscope.interactables.signals.on('unset', ({ interactable }) => {\n scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1)\n\n // Stop related interactions when an Interactable is unset\n for (const interaction of scope.interactions.list) {\n if (interaction.target === interactable && interaction.interacting() && interaction._ending) {\n interaction.stop()\n }\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 = {} as { [key: string]: number }\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?: Interact.Point) {\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 Interaction from '@interactjs/core/Interaction'\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 }: { interaction: Interaction, state: any }) {\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 coords: Interact.Point,\n interaction: Interaction,\n state: any\n}) {\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 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 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 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\nconst snapEdges = {\n start,\n set,\n defaults: extend(clone(snapSize.defaults), {\n offset: { x: 0, y: 0 },\n }),\n}\n\nexport default snapEdges\n","import base from './base'\nimport restrictEdgesModule from './restrict/edges'\nimport restrictModule from './restrict/pointer'\nimport restrictSizeModule from './restrict/size'\nimport snapEdgesModule from './snap/edges'\nimport snapModule from './snap/pointer'\nimport snapSizeModule from './snap/size'\n\nconst { makeModifier } = base\n\nexport const snap = makeModifier(snapModule, 'snap')\nexport const snapSize = makeModifier(snapSizeModule, 'snapSize')\nexport const snapEdges = makeModifier(snapEdgesModule, 'snapEdges')\nexport const restrict = makeModifier(restrictModule, 'restrict')\nexport const restrictEdges = makeModifier(restrictEdgesModule, 'restrictEdges')\nexport const restrictSize = makeModifier(restrictSizeModule, 'restrictSize')\n","import Interaction from '@interactjs/core/Interaction'\nimport pointerUtils from '@interactjs/utils/pointerUtils'\n\n/** */\nexport default class PointerEvent {\n interaction: Interaction\n timeStamp: number\n originalEvent: Interact.PointerEventType\n type: T\n pointerId: number\n pointerType: string\n target: Node | Window\n currentTarget: Node | Window\n double: boolean\n pageX: number\n pageY: number\n clientX: number\n clientY: number\n dt: number\n eventable: any\n propagationStopped = false\n immediatePropagationStopped = false\n\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 * Prevent the default behaviour of the original Event\n */\n preventDefault () {\n this.originalEvent.preventDefault()\n }\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n","import Eventable from '@interactjs/core/Eventable'\nimport Interaction from '@interactjs/core/Interaction'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport PointerEvent from './PointerEvent'\n\ntype EventTargetList = Array<{\n eventable: Eventable,\n element: Window | Document | Element,\n props: { [key: string]: any },\n}>\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n pointerEvents: typeof pointerEvents\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n prevTap?: PointerEvent\n tapTime?: number\n }\n}\n\ndeclare module '@interactjs/core/PointerInfo' {\n interface PointerInfo {\n hold: {\n duration: number\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n pointerEvents: Interact.Options\n }\n}\n\nconst signals = new utils.Signals()\nconst simpleSignals = [ 'down', 'up', 'cancel' ]\nconst simpleEvents = [ 'down', 'up', 'cancel' ]\n\nconst 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 interaction: Interaction,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n eventTarget: EventTarget,\n targets?: EventTargetList,\n pointerEvent?: PointerEvent,\n type: T\n}) {\n const {\n interaction, pointer, event, eventTarget,\n type = (arg as any).pointerEvent.type,\n targets = collectEventTargets(arg),\n } = arg\n\n const {\n pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction),\n } = arg\n\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n targets,\n type,\n pointerEvent,\n }\n\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n\n for (const prop in target.props || {}) {\n (pointerEvent as any)[prop] = target.props[prop]\n }\n\n const origin = utils.getOriginXY(target.eventable, target.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,\n pointer,\n event,\n 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 interaction: Interaction,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n eventTarget: EventTarget,\n type: T\n}) {\n const pointerIndex = interaction.getPointerIndex(pointer)\n const pointerInfo = interaction.pointers[pointerIndex]\n\n // do not fire a tap event if the pointer was moved before being lifted\n if (type === 'tap' && (interaction.pointerWasMoved ||\n // or if the pointerup target is different to the pointerdown target\n !(pointerInfo && pointerInfo.downTarget === eventTarget))) {\n return []\n }\n\n const path = utils.dom.getPath(eventTarget)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n path,\n targets: [] as EventTargetList,\n 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: Scope) {\n const {\n interactions,\n } = scope\n\n scope.pointerEvents = pointerEvents\n scope.defaults.actions.pointerEvents = pointerEvents.defaults\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.prevTap = null // the most recent tap event on this interaction\n interaction.tapTime = 0 // time of the most recent tap event\n })\n\n interactions.signals.on('update-pointer', ({ down, pointerInfo }) => {\n if (!down && pointerInfo.hold) {\n return\n }\n\n pointerInfo.hold = { duration: Infinity, timeout: null }\n })\n\n interactions.signals.on('move', ({ interaction, pointer, event, eventTarget, duplicateMove }) => {\n const pointerIndex = interaction.getPointerIndex(pointer)\n\n if (!duplicateMove && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {\n if (interaction.pointerIsDown) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout)\n }\n\n fire({\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'move',\n })\n }\n })\n\n interactions.signals.on('down', ({ interaction, pointer, event, eventTarget, pointerIndex }) => {\n const timer = interaction.pointers[pointerIndex].hold\n const path = utils.dom.getPath(eventTarget)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'hold',\n targets: [] as EventTargetList,\n path,\n 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(() => {\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, ({ 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: string) {\n return function ({ interaction, pointer, event, eventTarget }: any) {\n fire({ interaction, eventTarget, pointer, event, type })\n }\n}\n\nexport default pointerEvents\n","declare module '@interactjs/core/Interaction' {\n interface Interaction {\n holdIntervalHandle?: any\n }\n}\n\nfunction 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(() => {\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 { Scope } from '@interactjs/core/scope'\nimport { merge } from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\ntype Interactable = import ('@interactjs/core/Interactable').default\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n pointerEvents: typeof pointerEventsMethod\n __backCompatOption: (optionName: string, newValue: any) => any\n }\n}\n\nfunction install (scope: Scope) {\n const {\n pointerEvents,\n actions,\n Interactable,\n interactables,\n } = scope\n\n pointerEvents.signals.on('collect-targets', ({ targets, element, type, eventTarget }: any) => {\n scope.interactables.forEachMatch(element, (interactable: Interactable) => {\n const eventable = interactable.events\n const options = eventable.options\n\n if (\n eventable.types[type] &&\n eventable.types[type].length &&\n is.element(element) &&\n interactable.testIgnoreAllow(options, element, eventTarget)) {\n targets.push({\n element,\n eventable,\n props: { interactable },\n })\n }\n })\n })\n\n interactables.signals.on('new', ({ interactable }) => {\n interactable.events.getRect = function (element: Element) {\n return interactable.getRect(element)\n }\n })\n\n interactables.signals.on('set', ({ interactable, options }) => {\n extend(interactable.events.options, pointerEvents.defaults)\n extend(interactable.events.options, options.pointerEvents || {})\n })\n\n merge(actions.eventTypes, pointerEvents.types)\n\n Interactable.prototype.pointerEvents = pointerEventsMethod\n\n const __backCompatOption = Interactable.prototype._backCompatOption\n\n Interactable.prototype._backCompatOption = function (optionName, newValue) {\n const ret = __backCompatOption.call(this, optionName, newValue)\n\n if (ret === this) {\n this.events.options[optionName] = newValue\n }\n\n return ret\n }\n}\n\nfunction pointerEventsMethod (this: Interactable, options: any) {\n extend(this.events.options, options)\n\n return this\n}\n\nexport default {\n 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 { pointerEvents, holdRepeat, interactableTargets, install }\n","import Interactable from '@interactjs/core/Interactable'\nimport { ActionProps, Interaction } from '@interactjs/core/Interaction'\nimport { newInteraction } from '@interactjs/core/interactions'\nimport { Scope } from '@interactjs/core/scope'\nimport { arr, extend, is, pointer as pointerUtils, rect as rectUtils, win } from '@interactjs/utils'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n reflow: (action: ActionProps) => ReturnType\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n _reflowResolve: () => void\n }\n}\n\nexport function install (scope: Scope) {\n const {\n actions,\n interactions,\n /** @lends Interactable */\n // eslint-disable-next-line no-shadow\n Interactable,\n } = scope\n\n // add action reflow event types\n for (const actionName of actions.names) {\n actions.eventTypes.push(`${actionName}reflow`)\n }\n\n // remove completed reflow interactions\n interactions.signals.on('stop', ({ interaction }) => {\n if (interaction.pointerType === '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: Interactable, action: ActionProps, scope: Scope) {\n const elements = is.string(interactable.target)\n ? arr.from(interactable._context.querySelectorAll(interactable.target))\n : [interactable.target]\n\n // tslint:disable-next-line variable-name\n const Promise = (win.window as any).Promise\n const promises: Array> | null = Promise ? [] : null\n\n for (const element of elements) {\n const rect = interactable.getRect(element)\n\n if (!rect) { break }\n\n const runningInteraction = arr.find(\n scope.interactions.list,\n (interaction: Interaction) => {\n return interaction.interacting() &&\n interaction.target === interactable &&\n interaction.element === element &&\n interaction.prepared.name === action.name\n })\n let reflowPromise: Promise\n\n if (runningInteraction) {\n runningInteraction.move()\n\n reflowPromise = runningInteraction._reflowPromise || new Promise((resolve: any) => {\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: Scope, interactable: Interactable, element: Element, action: ActionProps, event: any) {\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 as unknown as any).Promise\n ? new (win.window as unknown as any).Promise((resolve: any) => {\n interaction._reflowResolve = resolve\n })\n : null\n\n interaction._reflowPromise = reflowPromise\n interaction.start(action, interactable, element)\n\n if (interaction._interacting) {\n interaction.move(signalArg)\n interaction.end(event)\n }\n else {\n interaction.stop()\n }\n\n interaction.removePointer(event, event)\n interaction.pointerIsDown = false\n\n return reflowPromise\n}\n\nexport default { install }\n","import * as actions from '@interactjs/actions'\nimport autoScroll from '@interactjs/auto-scroll'\nimport * as autoStart from '@interactjs/auto-start'\nimport interactablePreventDefault from '@interactjs/core/interactablePreventDefault'\nimport inertia from '@interactjs/inertia'\nimport * as modifiers from '@interactjs/modifiers'\nimport modifiersBase from '@interactjs/modifiers/base'\nimport * as pointerEvents from '@interactjs/pointer-events'\nimport reflow from '@interactjs/reflow'\nimport interact, { scope } from './interact'\n\nexport function init (window: Window): typeof interact {\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\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 {\n interact,\n actions,\n autoScroll,\n interactablePreventDefault,\n inertia,\n modifiersBase as modifiers,\n pointerEvents,\n reflow,\n}\n","/// \n","function createGrid (grid: (Interact.Rect | Interact.Point) & { range?: number, limits: Interact.Rect, offset: Interact.Point }) {\n const coordFields = [\n ['x', 'y'],\n ['left', 'top'],\n ['right', 'bottom'],\n ['width', 'height'],\n ].filter(([xField, yField]) => xField in grid || yField in grid)\n\n return function (x, y) {\n const {\n range,\n limits = {\n left : -Infinity,\n right : Infinity,\n top : -Infinity,\n bottom: Infinity,\n },\n offset = { x: 0, y: 0 },\n } = grid\n\n const result = { range }\n\n for (const [xField, yField] of coordFields) {\n const gridx = Math.round((x - offset.x) / grid[xField])\n const gridy = Math.round((y - offset.y) / grid[yField])\n\n result[xField] = Math.max(limits.left, Math.min(limits.right, gridx * grid[xField] + offset.x))\n result[yField] = Math.max(limits.top, Math.min(limits.bottom, gridy * grid[yField] + offset.y))\n }\n\n return result\n }\n}\n\nexport default createGrid\n","import grid from './grid'\n\nexport { grid }\n","import interact, { init as initInteract } from '@interactjs/interact'\nimport * as modifiers from '@interactjs/modifiers'\nimport '@interactjs/types'\nimport extend from '@interactjs/utils/extend'\nimport * as snappers from '@interactjs/utils/snappers'\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n modifiers?: any\n snappers?: typeof snappers\n createSnapGrid?: typeof snappers.grid\n }\n}\n\nif (typeof window === 'object' && !!window) {\n init(window)\n}\n\nexport function init (win: Window) {\n initInteract(win)\n\n return interact.use({\n install (scope) {\n interact.modifiers = extend(scope.modifiers, modifiers)\n interact.snappers = snappers\n interact.createSnapGrid = interact.snappers.grid\n },\n })\n}\n\nexport default interact\ninteract['default'] = interact // tslint:disable-line no-string-literal\ninteract['init'] = init // tslint:disable-line no-string-literal\n\nif (typeof module === 'object' && !!module) {\n module.exports = interact\n}\n","\nreturn _$index_25;\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 aaaa4f1f7..221601797 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.27+sha.12b8f8f-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 ue(e,t,n,r,o){var i,a=pe(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=ne(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),se(t,n,ce),se(t,n,fe,!0),s.selectors.length||(Ni[n]=null)),l=!0;break}}if(l)break}}function ce(e,t){for(var n=pe(t),r=new Li(e),o=Ni[e.type],i=Ri.default.getEventTargets(e),a=ne(i,1),s=a[0],l=s;Ai.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&&Os.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 Ct(e){var t=e.actions,n=e.Interactable,r=e.interactions,o=e.defaults;n.prototype.gesturable=function(e){return Es.is.object(e)?(this.options.gesture.enabled=!1!==e.enabled,this.setPerAction("gesture",e),this.setOnEvents("gesture",e),this):Es.is.bool(e)?(this.options.gesture.enabled=e,this):this.options.gesture},r.signals.on("action-start",Yt),r.signals.on("action-move",Yt),r.signals.on("action-end",Yt),r.signals.on("action-start",Rt),r.signals.on("action-move",Xt),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[Ha.ActionName.Gesture]=Ms,t.names.push(Ha.ActionName.Gesture),Es.arr.merge(t.eventTypes,["gesturestart","gesturemove","gestureend"]),t.methodDict.gesture="gesturable",o.actions.gesture=Ms.defaults}function Rt(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 Xt(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 Yt(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=Es.pointer.touchDistance(i,l),n.box=Es.pointer.touchBBox(i),n.scale=1,n.ds=0,n.angle=Es.pointer.touchAngle(i,l),n.da=0):s||r instanceof js.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=Es.pointer.touchDistance(i,l),n.box=Es.pointer.touchBBox(i),n.scale=n.distance/t.gesture.startDistance,n.angle=Es.pointer.touchAngle(i,l),n.ds=n.scale-t.gesture.prevScale,n.da=n.angle-t.gesture.prevAngle)}}function Nt(e){var t=e.actions,n=e.browser,r=e.Interactable,o=e.interactions,i=e.defaults;o.signals.on("new",function(e){e.resizeAxes="xy"}),o.signals.on("action-start",qt),o.signals.on("action-move",Vt),o.signals.on("action-start",Gt),o.signals.on("action-move",Gt),ks.cursors=Wt(n),ks.defaultMargin=n.supportsTouch||n.supportsPointerEvent?20:10,r.prototype.resizable=function(t){return Ft(this,t,e)},t[Ha.ActionName.Resize]=ks,t.names.push(Ha.ActionName.Resize),Ds.arr.merge(t.eventTypes,["resizestart","resizemove","resizeinertiastart","resizeresume","resizeend"]),t.methodDict.resize="resizable",i.actions.resize=ks.defaults}function Ft(e,t,n){return Ds.is.object(t)?(e.options.resize.enabled=!1!==t.enabled,e.setPerAction("resize",t),e.setOnEvents("resize",t),/^x$|^y$|^xy$/.test(t.axis)?e.options.resize.axis=t.axis:null===t.axis&&(e.options.resize.axis=n.defaults.actions.resize.axis),Ds.is.bool(t.preserveAspectRatio)?e.options.resize.preserveAspectRatio=t.preserveAspectRatio:Ds.is.bool(t.square)&&(e.options.resize.square=t.square),e):Ds.is.bool(t)?(e.options.resize.enabled=t,e):e.options.resize}function Lt(e,t,n,r,o,i,a){if(!t)return!1;if(!0===t){var s=Ds.is.number(i.width)?i.width:i.right-i.left,l=Ds.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!!Ds.is.element(r)&&(Ds.is.element(t)?t===r:Ds.dom.matchesUpTo(r,t,o))}function Wt(e){return e.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"}}function qt(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=Ds.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:Ds.extend({},r),inverted:Ds.extend({},r),previous:Ds.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 Vt(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=Ds.extend(n.resizeRects.previous,u),p=a,d=Ds.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(Ds.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 Gt(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 Ut(e){return e&&e.__esModule?e:{default:e}}function Bt(e){Rs.default.install(e),Xs.default.install(e),As.default.install(e),Cs.default.install(e)}function Ht(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 $t(e){var t=e.interactions,n=e.defaults,r=e.actions;e.autoScroll=Ws,t.signals.on("new",function(e){e.autoScroll=null}),t.signals.on("stop",Ws.stop),t.signals.on("action-move",Ws.onInteractionMove),r.eventTypes.push("autoscroll"),n.perAction.autoScroll=Ws.defaults}function Kt(e,t,n){return(Fs.string(e)?(0,ri.getStringOptionResult)(e,t,n):e)||(0,vo.getWindow)(n)}function Qt(e){return Fs.window(e)&&(e=window.document.body),{x:e.scrollLeft,y:e.scrollTop}}function Jt(e){return Fs.window(e)&&(e=window.document.body),{x:e.scrollWidth,y:e.scrollHeight}}function Zt(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=Kt(o.container,n.target,r),a=Qt(i);t();var s=Qt(i);return{x:s.x-a.x,y:s.y-a.y}}function en(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 tn(e){var t=e.Interactable,n=e.actions;t.prototype.getAction=nn,t.prototype.ignoreFrom=(0,pa.warnOnce)(function(e){return this._backCompatOption("ignoreFrom",e)},"Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue})."),t.prototype.allowFrom=(0,pa.warnOnce)(function(e){return this._backCompatOption("allowFrom",e)},"Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue})."),t.prototype.testIgnore=un,t.prototype.testAllow=ln,t.prototype.testIgnoreAllow=sn,t.prototype.actionChecker=an,t.prototype.styleCursor=on,t.prototype.defaultActionChecker=function(e,t,r,o){return rn(this,e,t,r,o,n)}}function nn(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}function rn(e,t,n,r,o,i){for(var a=e.getRect(o),s=n.buttons||{0:1,1:4,3:8,4:16}[n.button],l=null,u=0;u=s)return!1;if(d.target===e){if((u+=v===n.name?1:0)>=i)return!1;if(d.element===t&&(c++,v===n.name&&c>=a))return!1}}}return s>0}function hn(e,t){return $s.is.number(e)?(t.autoStart.maxInteractions=e,this):t.autoStart.maxInteractions}function yn(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 mn(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;On(t)>0&&(t.prepared.name=null)})}function On(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 wn(e){return e&&e.__esModule?e:{default:e}}function xn(e){il.default.install(e),sl.default.install(e),al.default.install(e)}function Pn(e,t){return/^(always|never|auto)$/.test(t)?(e.options.preventDefault=t,e):cl.bool(t)?(e.options.preventDefault=t?"always":"never",e):e.options.preventDefault}function _n(e,t,n){var r=e.options.preventDefault;if("never"!==r){if("always"===r)return void n.preventDefault();if(ul.default.supportsPassive&&/^touch(start|move)$/.test(n.type)){var o=(0,vo.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)||cl.element(n.target)&&(0,Jo.matchesSelector)(n.target,"input,select,textarea,[contenteditable=true],[contenteditable=true] *")||n.preventDefault()}}function jn(e){var t=e.interaction,n=e.event;t.target&&t.target.checkAndPreventDefault(n)}function En(e){var t=e.Interactable;t.prototype.preventDefault=function(e){return Pn(this,e)},t.prototype.checkAndPreventDefault=function(t){return _n(this,e,t)};for(var n=["down","move","up","cancel"],r=0;rs.minSpeed&&c>s.endSpeed,v={interaction:n,pageCoords:yl.extend({},n.coords.cur.page),states:p&&n.modifiers.states.map(function(e){return yl.extend({},e)}),preEnd:!0,requireEndOnly:!0};return p&&!d&&(a=hl.default.setAll(v),a.changed&&(f=!0)),d||f?(yl.pointer.copyCoords(i.upCoords,n.coords.cur),n.pointers[0].pointer=i.startEvent=new t.InteractEvent(n,r,n.prepared.name,ci.EventPhase.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,Kn(n,i),yl.extend(v.pageCoords,n.coords.cur.page),v.pageCoords.x+=i.xe,v.pageCoords.y+=i.ye,a=hl.default.setAll(v),i.modifiedXe+=a.delta.x,i.modifiedYe+=a.delta.y,i.i=ml.default.request(function(){return Qn(n)})):(i.smoothEnd=!0,i.xe=a.delta.x,i.ye=a.delta.y,i.sx=i.sy=0,i.i=ml.default.request(function(){return Jn(n)})),!1):null}function $n(e){var t=e.interaction,n=t.inertia;n.active&&(ml.default.cancel(n.i),n.active=!1,t.simulation=null)}function Kn(e,t){var n=er(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 Qn(e){Zn(e),yl.pointer.setCoordDeltas(e.coords.delta,e.coords.prev,e.coords.cur),yl.pointer.setCoordVelocity(e.coords.velocity,e.coords.delta);var t=e.inertia,n=er(e),r=n.resistance,o=(new Date).getTime()/1e3-t.t0;if(o150)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}();ci.InteractEvent=hi;var yi=hi;ci.default=yi;var mi={};Object.defineProperty(mi,"__esModule",{value:!0}),mi.default=B;var bi=U(uo),Oi=U(mo),wi={};Object.defineProperty(wi,"__esModule",{value:!0}),wi.pointerExtend=H,wi.default=void 0,H.prefixedPropREs={webkit:/(Movement[XY]|Radius[XY]|RotationAngle|Force)$/};var xi=H;wi.default=xi;var Pi={};Object.defineProperty(Pi,"__esModule",{value:!0}),Pi.default=void 0;var _i=K(Uo),ji=K(qo),Ei=$(Jo),Mi=K(li),Si=$(mo),Ti=K(wi),Di={copyCoords:function(e,t){e.page=e.page||{},e.page.x=t.page.x,e.page.y=t.page.y,e.client=e.client||{},e.client.x=t.client.x,e.client.y=t.client.y,e.timeStamp=t.timeStamp},setCoordDeltas:function(e,t,n){e.page.x=n.page.x-t.page.x,e.page.y=n.page.y-t.page.y,e.client.x=n.client.x-t.client.x,e.client.y=n.client.y-t.client.y,e.timeStamp=n.timeStamp-t.timeStamp},setCoordVelocity:function(e,t){var n=Math.max(t.timeStamp/1e3,.001);e.page.x=t.page.x/n,e.page.y=t.page.y/n,e.client.x=t.client.x/n,e.client.y=t.client.y/n,e.timeStamp=n},isNativePointer:function(e){return e instanceof ji.default.Event||e instanceof ji.default.Touch},getXY:function(e,t,n){return n=n||{},e=e||"page",n.x=t[e+"X"],n.y=t[e+"Y"],n},getPageXY:function(e,t){return t=t||{x:0,y:0},_i.default.isOperaMobile&&Di.isNativePointer(e)?(Di.getXY("screen",e,t),t.x+=window.scrollX,t.y+=window.scrollY):Di.getXY("page",e,t),t},getClientXY:function(e,t){return t=t||{},_i.default.isOperaMobile&&Di.isNativePointer(e)?Di.getXY("screen",e,t):Di.getXY("client",e,t),t},getPointerId:function(e){return Si.number(e.pointerId)?e.pointerId:e.identifier},setCoords:function(e,t,n){var r=t.length>1?Di.pointerAverage(t):t[0],o={};Di.getPageXY(r,o),e.page.x=o.x,e.page.y=o.y,Di.getClientXY(r,o),e.client.x=o.x,e.client.y=o.y,e.timeStamp=Si.number(n)?n:(new Date).getTime()},pointerExtend:Ti.default,getTouchPair:function(e){var t=[];return Si.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))return null;var t=Di.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=Di.getTouchPair(e),i=o[0][n]-o[1][n],a=o[0][r]-o[1][r];return(0,Mi.default)(i,a)},touchAngle:function(e,t){var n=t+"X",r=t+"Y",o=Di.getTouchPair(e),i=o[1][n]-o[0][n],a=o[1][r]-o[0][r];return 180*Math.atan2(a,i)/Math.PI},getPointerType:function(e){return Si.string(e.pointerType)?e.pointerType:Si.number(e.pointerType)?[void 0,void 0,"touch","pen","mouse"][e.pointerType]:/touch/.test(e.type)||e instanceof ji.default.Touch?"touch":"mouse"},getEventTargets:function(e){var t=Si.func(e.composedPath)?e.composedPath():e.path;return[Ei.getActualElement(t?t[0]:e.target),Ei.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}}}},ki=Di;Pi.default=ki;var zi={};Object.defineProperty(zi,"__esModule",{value:!0}),zi.default=zi.FakeEvent=void 0;var Ii=J(Jo),Ai=J(mo),Ci=Q(wi),Ri=Q(Pi),Xi=[],Yi=[],Ni={},Fi=[],Li=function(){function e(t){Z(this,e),this.originalEvent=t,(0,Ci.default)(this,t)}return te(e,[{key:"preventOriginalDefault",value:function(){this.originalEvent.preventDefault()}},{key:"stopPropagation",value:function(){this.originalEvent.stopPropagation()}},{key:"stopImmediatePropagation",value:function(){this.originalEvent.stopImmediatePropagation()}}]),e}();zi.FakeEvent=Li;var Wi={add:ae,remove:se,addDelegate:le,removeDelegate:ue,delegateListener:ce,delegateUseCapture:fe,delegatedEvents:Ni,documents:Fi,supportsOptions:!1,supportsPassive:!1,_elements:Xi,_targets:Yi,init:function(e){e.document.createElement("div").addEventListener("test",null,{get capture(){return Wi.supportsOptions=!0},get passive(){return Wi.supportsPassive=!0}})}},qi=Wi;zi.default=qi;var Vi={};Object.defineProperty(Vi,"__esModule",{value:!0}),Vi.default=Vi.Interactable=void 0;var Gi=ve(uo),Ui=de(Uo),Bi=de(mi),Hi=de(zi),$i=de(co),Ki=ve(mo),Qi=de(ko),Ji=de(Ao),Zi=function(){function e(t,n,r){ge(this,e),this.events=new Ji.default,this._actions=n.actions,this.target=t,this._context=n.context||r,this._win=(0,vo.getWindow)((0,Jo.trySelector)(t)?this._context:t),this._doc=this._win.document,this.set(n)}return ye(e,[{key:"setOnEvents",value:function(e,t){return Ki.func(t.onstart)&&this.on("".concat(e,"start"),t.onstart),Ki.func(t.onmove)&&this.on("".concat(e,"move"),t.onmove),Ki.func(t.onend)&&this.on("".concat(e,"end"),t.onend),Ki.func(t.oninertiastart)&&this.on("".concat(e,"inertiastart"),t.oninertiastart),this}},{key:"updatePerActionListeners",value:function(e,t,n){Ki.array(t)&&this.off(e,t),Ki.array(n)&&this.on(e,n)}},{key:"setPerAction",value:function(e,t){var n=this._defaults;for(var r in t){var o=this.options[e],i=t[r],a=Ki.array(i);"listeners"===r&&this.updatePerActionListeners(e,o.listeners,i),a?o[r]=Gi.from(i):!a&&Ki.plainObject(i)?(o[r]=(0,$i.default)(o[r]||{},(0,Bi.default)(i)),Ki.object(n.perAction[r])&&"enabled"in n.perAction[r]&&(o[r].enabled=!1!==i.enabled)):Ki.bool(i)&&Ki.object(n.perAction[r])?o[r].enabled=i:o[r]=i}}},{key:"getRect",value:function(e){return e=e||(Ki.element(this.target)?this.target:null),Ki.string(this.target)&&(e=e||this._context.querySelector(this.target)),(0,Jo.getElementRect)(e)}},{key:"rectChecker",value:function(e){return Ki.func(e)?(this.getRect=e,this):null===e?(delete this.options.getRect,this):this.getRect}},{key:"_backCompatOption",value:function(e,t){if((0,Jo.trySelector)(t)||Ki.object(t)){this.options[e]=t;for(var n=0;nthis.pointerMoveTolerance);var a={pointer:e,pointerIndex:this.getPointerIndex(e),event:t,eventTarget:n,dx:r,dy:o,duplicate:i,interaction:this};i||(Ta.pointer.setCoordDeltas(this.coords.delta,this.coords.prev,this.coords.cur),Ta.pointer.setCoordVelocity(this.coords.velocity,this.coords.delta)),this._signals.fire("move",a),i||(this.interacting()&&this.move(a),this.pointerWasMoved&&Ta.pointer.copyCoords(this.coords.prev,this.coords.cur))}},{key:"move",value:function(e){e=Ta.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);-1===o&&(o=this.updatePointer(e,t,n,!1)),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=Ta.pointer.getPointerId(e);return"mouse"===this.pointerType||"pen"===this.pointerType?this.pointers.length-1:Ta.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=Ta.pointer.getPointerId(e),i=this.getPointerIndex(e),a=this.pointers[i];return r=!1!==r&&(r||/(down|start)$/i.test(t.type)),a?a.pointer=e:(a=new ka.default(o,e,t,null,null),i=this.pointers.length,this.pointers.push(a)),r&&(this.pointerIsDown=!0,this.interacting()||(Ta.pointer.setCoords(this.coords.start,this.pointers.map(function(e){return e.pointer})),Ta.pointer.copyCoords(this.coords.cur,this.coords.start),Ta.pointer.copyCoords(this.coords.prev,this.coords.start),Ta.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 Da.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}},{key:"pointerMoveTolerance",get:function(){return 1}}]),e}();Sa.Interaction=za;var Ia=za;Sa.default=Ia;var Aa={};Object.defineProperty(Aa,"__esModule",{value:!0}),Aa.default=void 0;var Ca=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}(pa),Ra={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}},Xa=Ra;Aa.default=Xa;var Ya={};Object.defineProperty(Ya,"__esModule",{value:!0}),Ya.newInteraction=Je,Ya.default=void 0;var Na=Ce(Uo),Fa=Ce(qo),La=Ce(zi),Wa=Ce(Aa),qa=Ce(Pi),Va=Ce(oa),Ga=Ce(Sa),Ua=["pointerDown","pointerMove","pointerUp","updatePointer","removePointer","windowBlur"],Ba={install:$e,onDocSignal:Ze,doOnInteractions:Ke,newInteraction:Je,methodNames:Ua};Ya.default=Ba;var Ha={} -;Object.defineProperty(Ha,"__esModule",{value:!0}),Ha.Scope=Ha.ActionName=void 0;var $a,Ka=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}(pa),Qa=et(qo),Ja=et(Fo),Za=et(Ao),es=et(Vi),ts=et(ci),ns=et(Ya),rs=Ka.win,os=Ka.browser,is=Ka.raf,as=Ka.Signals,ss=Ka.events;Ha.ActionName=$a,$a||(Ha.ActionName=$a={});var ls=function(){function e(){ut(this,e),this.signals=new as,this.browser=os,this.events=ss,this.utils=Ka,this.defaults=Ka.clone(Ja.default),this.Eventable=Za.default,this.actions={names:[],methodDict:{},eventTypes:[]},this.InteractEvent=ts.default,this.interactables=new us(this),this.documents=[];var t=this;this.Interactable=function(e){function n(){return ut(this,n),nt(this,at(n).apply(this,arguments))}return st(n,e),ft(n,[{key:"set",value:function(e){return ot(at(n.prototype),"set",this).call(this,e),t.interactables.signals.fire("set",{options:e,interactable:this}),this}},{key:"unset",value:function(){ot(at(n.prototype),"unset",this).call(this),t.interactables.signals.fire("unset",{interactable:this})}},{key:"_defaults",get:function(){return t.defaults}}]),n}(es.default)}return ft(e,[{key:"init",value:function(e){return pt(this,e)}},{key:"addDocument",value:function(e,t){if(-1!==this.getDocIndex(e))return!1;var n=rs.getWindow(e);t=t?Ka.extend({},t):{},this.documents.push({doc:e,options:t}),ss.documents.push(e),e!==this.document&&ss.add(n,"unload",this.onWindowUnload),this.signals.fire("add-document",{doc:e,window:n,scope:this,options:t})}},{key:"removeDocument",value:function(e){var t=this.getDocIndex(e),n=rs.getWindow(e),r=this.documents[t].options;ss.remove(n,"unload",this.onWindowUnload),this.documents.splice(t,1),ss.documents.splice(t,1),this.signals.fire("remove-document",{doc:e,window:n,scope:this,options:r})}},{key:"onWindowUnload",value:function(e){this.removeDocument(e.target)}},{key:"getDocIndex",value:function(e){for(var t=0;t=2?{name:"gesture"}:null},getCursor:function(){return""}},Ss=Ms;_s.default=Ss;var Ts={};Object.defineProperty(Ts,"__esModule",{value:!0}),Ts.default=void 0;var Ds=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}(pa);Ha.ActionName.Resize="resize";var ks={install:Nt,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 a=Ds.extend({},o.coords.cur.page),s=n.options;if(s.resize.enabled){var l=s.resize,u={left:!1,right:!1,top:!1,bottom:!1};if(Ds.is.object(l.edges)){for(var c in u)u[c]=Lt(c,l.edges[c],a,o._latestPointer.eventTarget,r,i,l.margin||this.defaultMargin);if(u.left=u.left&&!u.right,u.top=u.top&&!u.bottom,u.left||u.right||u.top||u.bottom)return{name:"resize",edges:u}}else{var f="y"!==s.resize.axis&&a.x>i.right-this.defaultMargin,p="x"!==s.resize.axis&&a.y>i.bottom-this.defaultMargin;if(f||p)return{name:"resize",axes:(f?"x":"")+(p?"y":"")}}}return null},cursors:null,getCursor:function(e){var t=ks.cursors;if(e.axis)return t[e.name+e.axis];if(e.edges){for(var n="",r=["top","bottom","left","right"],o=0;o<4;o++)e.edges[r[o]]&&(n+=r[o]);return t[n]}return null},defaultMargin:null},zs=ks;Ts.default=zs;var Is={};Object.defineProperty(Is,"__esModule",{value:!0}),Is.install=Bt,Object.defineProperty(Is,"drag",{enumerable:!0,get:function(){return As.default}}),Object.defineProperty(Is,"drop",{enumerable:!0,get:function(){return Cs.default}}),Object.defineProperty(Is,"gesture",{enumerable:!0,get:function(){return Rs.default}}),Object.defineProperty(Is,"resize",{enumerable:!0,get:function(){return Xs.default}});var As=Ut(cs),Cs=Ut(bs),Rs=Ut(_s),Xs=Ut(Ts),Ys={};Object.defineProperty(Ys,"__esModule",{value:!0}),Ys.getContainer=Kt,Ys.getScroll=Qt,Ys.getScrollSize=Jt,Ys.getScrollSizeDelta=Zt,Ys.default=void 0;var Ns=Ht(Jo),Fs=Ht(mo),Ls=function(e){return e&&e.__esModule?e:{default:e}}(sa),Ws={defaults:{enabled:!1,margin:60,container:null,speed:300},interaction:null,i:null,x:0,y:0,isScrolling:!1,prevTime:0,margin:0,speed:0,start:function(e){Ws.isScrolling=!0,Ls.default.cancel(Ws.i),e.autoScroll=Ws,Ws.interaction=e,Ws.prevTime=(new Date).getTime(),Ws.i=Ls.default.request(Ws.scroll)},stop:function(){Ws.isScrolling=!1,Ws.interaction&&(Ws.interaction.autoScroll=null),Ls.default.cancel(Ws.i)},scroll:function(){var e=Ws.interaction,t=e.target,n=e.element,r=t.options[Ws.interaction.prepared.name].autoScroll,o=Kt(r.container,t,n),i=(new Date).getTime(),a=(i-Ws.prevTime)/1e3,s=r.speed*a;if(s>=1){var l={x:Ws.x*s,y:Ws.y*s};if(l.x||l.y){var u=Qt(o);Fs.window(o)?o.scrollBy(l.x,l.y):o&&(o.scrollLeft+=l.x,o.scrollTop+=l.y);var c=Qt(o),f={x:c.x-u.x,y:c.y-u.y};(f.x||f.y)&&t.fire({type:"autoscroll",target:n,interactable:t,delta:f,interaction:e,container:o})}Ws.prevTime=i}Ws.isScrolling&&(Ls.default.cancel(Ws.i),Ws.i=Ls.default.request(Ws.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()&&Ws.check(t.target,t.prepared.name)){if(t.simulation)return void(Ws.x=Ws.y=0);var r,o,i,a,s=t.target,l=t.element,u=s.options[t.prepared.name].autoScroll,c=Kt(u.container,s,l);if(Fs.window(c))a=n.clientXc.innerWidth-Ws.margin,i=n.clientY>c.innerHeight-Ws.margin;else{var f=Ns.getElementClientRect(c);a=n.clientXf.right-Ws.margin,i=n.clientY>f.bottom-Ws.margin}Ws.x=o?1:a?-1:0,Ws.y=i?1:r?-1:0,Ws.isScrolling||(Ws.margin=u.margin,Ws.speed=u.speed,Ws.start(t))}}},qs={install:$t};Ys.default=qs;var Vs={};Object.defineProperty(Vs,"__esModule",{value:!0}),Vs.default=void 0;var Gs=en(Jo),Us=en(mo),Bs={install:tn};Vs.default=Bs;var Hs={};Object.defineProperty(Hs,"__esModule",{value:!0}),Hs.default=void 0;var $s=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}(pa),Ks=function(e){return e&&e.__esModule?e:{default:e}}(Vs),Qs={install:cn,maxInteractions:hn,withinInteractionLimit:gn,validateAction:fn};Hs.default=Qs;var Js={};Object.defineProperty(Js,"__esModule",{value:!0}),Js.default=void 0;var Zs=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}(mo),el=function(e){return e&&e.__esModule?e:{default:e}}(Hs),tl={install:mn};Js.default=tl;var nl={};Object.defineProperty(nl,"__esModule",{value:!0}),nl.default=void 0;var rl={install:bn,getHoldDuration:On};nl.default=rl;var ol={};Object.defineProperty(ol,"__esModule",{value:!0}),ol.install=xn,Object.defineProperty(ol,"autoStart",{enumerable:!0,get:function(){return il.default}}),Object.defineProperty(ol,"dragAxis",{enumerable:!0,get:function(){return al.default}}),Object.defineProperty(ol,"hold",{enumerable:!0,get:function(){return sl.default}});var il=wn(Hs),al=wn(Js),sl=wn(nl),ll={};Object.defineProperty(ll,"__esModule",{value:!0}),ll.install=En,ll.default=void 0;var ul=function(e){return e&&e.__esModule?e:{default:e}}(zi),cl=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}(mo),fl={install:En};ll.default=fl;var pl={};Object.defineProperty(pl,"__esModule",{value:!0}),pl.default=void 0;var dl=function(e){return e&&e.__esModule?e:{default:e}}(co),vl={install:kn,startAll:zn,setAll:Cn,prepareStates:Rn,start:An,beforeMove:Xn,beforeEnd:Yn,stop:Nn,shouldDo:qn,getModifierList:Wn,getRectOffset:In,makeModifier:Vn};pl.default=vl;var gl={};Object.defineProperty(gl,"__esModule",{value:!0}),gl.default=void 0;var hl=Gn(pl),yl=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}(pa),ml=Gn(sa);ci.EventPhase.Resume="resume",ci.EventPhase.InertiaStart="inertiastart";var bl={install:Un,calcInertia:Kn,inertiaTick:Qn,smothEndTick:Jn,updateInertiaCoords:Zn};gl.default=bl;var Ol={};Object.defineProperty(Ol,"__esModule",{value:!0}),Ol.default=Ol.scope=Ol.interact=void 0;var wl=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}(pa),xl=tr(Uo),Pl=tr(zi),_l={},jl=new Ha.Scope;Ol.scope=jl;var El=function(e,t){var n=jl.interactables.get(e,t);return n||(n=jl.interactables.new(e,t),n.events.global=_l),n};Ol.interact=El,jl._plugins=[],El.use=nr,El.isSet=rr,El.on=or,El.off=ir,El.debug=ar,El.getPointerAverage=wl.pointer.pointerAverage,El.getTouchBBox=wl.pointer.touchBBox,El.getTouchDistance=wl.pointer.touchDistance,El.getTouchAngle=wl.pointer.touchAngle,El.getElementRect=wl.dom.getElementRect,El.getElementClientRect=wl.dom.getElementClientRect,El.matchesSelector=wl.dom.matchesSelector,El.closest=wl.dom.closest,El.supportsTouch=sr,El.supportsPointerEvent=lr,El.stop=ur,El.pointerMoveTolerance=cr,jl.interactables.signals.on("unset",function(e){var t=e.interactable;jl.interactables.list.splice(jl.interactables.list.indexOf(t),1);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 ue(e,t,n,r,o){var i,a=pe(o),s=Yi[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=ne(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),se(t,n,ce),se(t,n,fe,!0),s.selectors.length||(Yi[n]=null)),l=!0;break}}if(l)break}}function ce(e,t){for(var n=pe(t),r=new Fi(e),o=Yi[e.type],i=Ci.default.getEventTargets(e),a=ne(i,1),s=a[0],l=s;Ii.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&&Os.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 At(e){var t=e.actions,n=e.Interactable,r=e.interactions,o=e.defaults;n.prototype.gesturable=function(e){return Es.is.object(e)?(this.options.gesture.enabled=!1!==e.enabled,this.setPerAction("gesture",e),this.setOnEvents("gesture",e),this):Es.is.bool(e)?(this.options.gesture.enabled=e,this):this.options.gesture},r.signals.on("action-start",Xt),r.signals.on("action-move",Xt),r.signals.on("action-end",Xt),r.signals.on("action-start",Ct),r.signals.on("action-move",Rt),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[Ba.ActionName.Gesture]=Ms,t.names.push(Ba.ActionName.Gesture),Es.arr.merge(t.eventTypes,["gesturestart","gesturemove","gestureend"]),t.methodDict.gesture="gesturable",o.actions.gesture=Ms.defaults}function Ct(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 Rt(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 Xt(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;if(n.touches=[i[0],i[1]],a)n.distance=Es.pointer.touchDistance(i,l),n.box=Es.pointer.touchBBox(i),n.scale=1,n.ds=0,n.angle=Es.pointer.touchAngle(i,l),n.da=0;else if(s||r instanceof js.default){var u=t.prevEvent;n.distance=u.distance,n.box=u.box,n.scale=u.scale,n.ds=n.scale-1,n.angle=u.angle,n.da=n.angle-t.gesture.startAngle}else n.distance=Es.pointer.touchDistance(i,l),n.box=Es.pointer.touchBBox(i),n.scale=n.distance/t.gesture.startDistance,n.angle=Es.pointer.touchAngle(i,l),n.ds=n.scale-t.gesture.prevScale,n.da=n.angle-t.gesture.prevAngle}}function Yt(e){var t=e.actions,n=e.browser,r=e.Interactable,o=e.interactions,i=e.defaults;o.signals.on("new",function(e){e.resizeAxes="xy"}),o.signals.on("action-start",Wt),o.signals.on("action-move",qt),o.signals.on("action-start",Vt),o.signals.on("action-move",Vt),ks.cursors=Lt(n),ks.defaultMargin=n.supportsTouch||n.supportsPointerEvent?20:10,r.prototype.resizable=function(t){return Nt(this,t,e)},t[Ba.ActionName.Resize]=ks,t.names.push(Ba.ActionName.Resize),Ds.arr.merge(t.eventTypes,["resizestart","resizemove","resizeinertiastart","resizeresume","resizeend"]),t.methodDict.resize="resizable",i.actions.resize=ks.defaults}function Nt(e,t,n){return Ds.is.object(t)?(e.options.resize.enabled=!1!==t.enabled,e.setPerAction("resize",t),e.setOnEvents("resize",t),Ds.is.string(t.axis)&&/^x$|^y$|^xy$/.test(t.axis)?e.options.resize.axis=t.axis:null===t.axis&&(e.options.resize.axis=n.defaults.actions.resize.axis),Ds.is.bool(t.preserveAspectRatio)?e.options.resize.preserveAspectRatio=t.preserveAspectRatio:Ds.is.bool(t.square)&&(e.options.resize.square=t.square),e):Ds.is.bool(t)?(e.options.resize.enabled=t,e):e.options.resize}function Ft(e,t,n,r,o,i,a){if(!t)return!1;if(!0===t){var s=Ds.is.number(i.width)?i.width:i.right-i.left,l=Ds.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!!Ds.is.element(r)&&(Ds.is.element(t)?t===r:Ds.dom.matchesUpTo(r,t,o))}function Lt(e){return e.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"}}function Wt(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=Ds.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:Ds.extend({},r),inverted:Ds.extend({},r),previous:Ds.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 qt(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=Ds.extend(n.resizeRects.previous,u),p=a,d=Ds.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(Ds.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 Vt(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 Gt(e){return e&&e.__esModule?e:{default:e}}function Ut(e){Rs.default.install(e),Xs.default.install(e),As.default.install(e),Cs.default.install(e)}function Bt(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 Ht(e){var t=e.interactions,n=e.defaults,r=e.actions;e.autoScroll=Ws,t.signals.on("new",function(e){e.interaction.autoScroll=null}),t.signals.on("stop",Ws.stop),t.signals.on("action-move",Ws.onInteractionMove),r.eventTypes.push("autoscroll"),n.perAction.autoScroll=Ws.defaults}function $t(e,t,n){return(Fs.string(e)?(0,ni.getStringOptionResult)(e,t,n):e)||(0,po.getWindow)(n)}function Kt(e){return Fs.window(e)&&(e=window.document.body),{x:e.scrollLeft,y:e.scrollTop}}function Qt(e){return Fs.window(e)&&(e=window.document.body),{x:e.scrollWidth,y:e.scrollHeight}}function Jt(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=$t(o.container,n.target,r),a=Kt(i);t();var s=Kt(i);return{x:s.x-a.x,y:s.y-a.y}}function Zt(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 en(e){var t=e.Interactable,n=e.actions;t.prototype.getAction=tn,t.prototype.ignoreFrom=(0,fa.warnOnce)(function(e){return this._backCompatOption("ignoreFrom",e)},"Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue})."),t.prototype.allowFrom=(0,fa.warnOnce)(function(e){return this._backCompatOption("allowFrom",e)},"Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue})."),t.prototype.testIgnore=ln,t.prototype.testAllow=sn,t.prototype.testIgnoreAllow=an,t.prototype.actionChecker=on,t.prototype.styleCursor=rn,t.prototype.defaultActionChecker=function(e,t,r,o){return nn(this,e,t,r,o,n)}}function tn(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}function nn(e,t,n,r,o,i){for(var a=e.getRect(o),s=n.buttons||{0:1,1:4,3:8,4:16}[n.button],l=null,u=0;u=s)return!1;if(d.target===e){if((u+=v===n.name?1:0)>=i)return!1;if(d.element===t&&(c++,v===n.name&&c>=a))return!1}}}return s>0}function gn(e,t){return $s.is.number(e)?(t.autoStart.maxInteractions=e,this):t.autoStart.maxInteractions}function hn(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 yn(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;bn(t)>0&&(t.prepared.name=null)})}function bn(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 On(e){return e&&e.__esModule?e:{default:e}}function wn(e){il.default.install(e),sl.default.install(e),al.default.install(e)}function xn(e,t){return/^(always|never|auto)$/.test(t)?(e.options.preventDefault=t,e):cl.bool(t)?(e.options.preventDefault=t?"always":"never",e):e.options.preventDefault}function Pn(e,t,n){var r=e.options.preventDefault;if("never"!==r){if("always"===r)return void n.preventDefault();if(ul.default.supportsPassive&&/^touch(start|move)$/.test(n.type)){var o=(0,po.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)||cl.element(n.target)&&(0,Qo.matchesSelector)(n.target,"input,select,textarea,[contenteditable=true],[contenteditable=true] *")||n.preventDefault()}}function _n(e){var t=e.interaction,n=e.event;t.target&&t.target.checkAndPreventDefault(n)}function jn(e){var t=e.Interactable;t.prototype.preventDefault=function(e){return xn(this,e)},t.prototype.checkAndPreventDefault=function(t){return Pn(this,e,t)};for(var n=["down","move","up","cancel"],r=0;rs.minSpeed&&c>s.endSpeed,v={interaction:n,pageCoords:yl.extend({},n.coords.cur.page),states:p&&n.modifiers.states.map(function(e){return yl.extend({},e)}),preEnd:!0,requireEndOnly:!0};return p&&!d&&(a=hl.default.setAll(v),a.changed&&(f=!0)),d||f?(yl.pointer.copyCoords(i.upCoords,n.coords.cur),n.pointers[0].pointer=i.startEvent=new t.InteractEvent(n,r,n.prepared.name,ui.EventPhase.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,$n(n,i),yl.extend(v.pageCoords,n.coords.cur.page),v.pageCoords.x+=i.xe,v.pageCoords.y+=i.ye,a=hl.default.setAll(v),i.modifiedXe+=a.delta.x,i.modifiedYe+=a.delta.y,i.i=ml.default.request(function(){return Kn(n)})):(i.smoothEnd=!0,i.xe=a.delta.x,i.ye=a.delta.y,i.sx=i.sy=0,i.i=ml.default.request(function(){return Qn(n)})),!1):null}function Hn(e){var t=e.interaction,n=t.inertia;n.active&&(ml.default.cancel(n.i),n.active=!1,t.simulation=null)}function $n(e,t){var n=Zn(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 Kn(e){Jn(e),yl.pointer.setCoordDeltas(e.coords.delta,e.coords.prev,e.coords.cur),yl.pointer.setCoordVelocity(e.coords.velocity,e.coords.delta);var t=e.inertia,n=Zn(e),r=n.resistance,o=(new Date).getTime()/1e3-t.t0;if(o150)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}();ui.InteractEvent=gi;var hi=gi;ui.default=hi;var yi={};Object.defineProperty(yi,"__esModule",{value:!0}),yi.default=B;var mi=U(lo),bi=U(yo),Oi={};Object.defineProperty(Oi,"__esModule",{value:!0}),Oi.pointerExtend=H,Oi.default=void 0,H.prefixedPropREs={webkit:/(Movement[XY]|Radius[XY]|RotationAngle|Force)$/};var wi=H;Oi.default=wi;var xi={};Object.defineProperty(xi,"__esModule",{value:!0}),xi.default=void 0;var Pi=K(Go),_i=K(Wo),ji=$(Qo),Ei=K(si),Mi=$(yo),Si=K(Oi),Ti={copyCoords:function(e,t){e.page=e.page||{},e.page.x=t.page.x,e.page.y=t.page.y,e.client=e.client||{},e.client.x=t.client.x,e.client.y=t.client.y,e.timeStamp=t.timeStamp},setCoordDeltas:function(e,t,n){e.page.x=n.page.x-t.page.x,e.page.y=n.page.y-t.page.y,e.client.x=n.client.x-t.client.x,e.client.y=n.client.y-t.client.y,e.timeStamp=n.timeStamp-t.timeStamp},setCoordVelocity:function(e,t){var n=Math.max(t.timeStamp/1e3,.001);e.page.x=t.page.x/n,e.page.y=t.page.y/n,e.client.x=t.client.x/n,e.client.y=t.client.y/n,e.timeStamp=n},isNativePointer:function(e){return e instanceof _i.default.Event||e instanceof _i.default.Touch},getXY:function(e,t,n){return n=n||{},e=e||"page",n.x=t[e+"X"],n.y=t[e+"Y"],n},getPageXY:function(e,t){return t=t||{x:0,y:0},Pi.default.isOperaMobile&&Ti.isNativePointer(e)?(Ti.getXY("screen",e,t),t.x+=window.scrollX,t.y+=window.scrollY):Ti.getXY("page",e,t),t},getClientXY:function(e,t){return t=t||{},Pi.default.isOperaMobile&&Ti.isNativePointer(e)?Ti.getXY("screen",e,t):Ti.getXY("client",e,t),t},getPointerId:function(e){return Mi.number(e.pointerId)?e.pointerId:e.identifier},setCoords:function(e,t,n){var r=t.length>1?Ti.pointerAverage(t):t[0],o={};Ti.getPageXY(r,o),e.page.x=o.x,e.page.y=o.y,Ti.getClientXY(r,o),e.client.x=o.x,e.client.y=o.y,e.timeStamp=Mi.number(n)?n:(new Date).getTime()},pointerExtend:Si.default,getTouchPair:function(e){var t=[];return Mi.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))return null;var t=Ti.getTouchPair(e),n=Math.min(t[0].pageX,t[1].pageX),r=Math.min(t[0].pageY,t[1].pageY),o=Math.max(t[0].pageX,t[1].pageX),i=Math.max(t[0].pageY,t[1].pageY);return{x:n,y:r,left:n,top:r,right:o,bottom:i,width:o-n,height:i-r}},touchDistance:function(e,t){var n=t+"X",r=t+"Y",o=Ti.getTouchPair(e),i=o[0][n]-o[1][n],a=o[0][r]-o[1][r];return(0,Ei.default)(i,a)},touchAngle:function(e,t){var n=t+"X",r=t+"Y",o=Ti.getTouchPair(e),i=o[1][n]-o[0][n],a=o[1][r]-o[0][r];return 180*Math.atan2(a,i)/Math.PI},getPointerType:function(e){return Mi.string(e.pointerType)?e.pointerType:Mi.number(e.pointerType)?[void 0,void 0,"touch","pen","mouse"][e.pointerType]:/touch/.test(e.type)||e instanceof _i.default.Touch?"touch":"mouse"},getEventTargets:function(e){var t=Mi.func(e.composedPath)?e.composedPath():e.path;return[ji.getActualElement(t?t[0]:e.target),ji.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}}}},Di=Ti;xi.default=Di;var ki={};Object.defineProperty(ki,"__esModule",{value:!0}),ki.default=ki.FakeEvent=void 0;var zi=J(Qo),Ii=J(yo),Ai=Q(Oi),Ci=Q(xi),Ri=[],Xi=[],Yi={},Ni=[],Fi=function(){function e(t){Z(this,e),this.originalEvent=t,(0,Ai.default)(this,t)}return te(e,[{key:"preventOriginalDefault",value:function(){this.originalEvent.preventDefault()}},{key:"stopPropagation",value:function(){this.originalEvent.stopPropagation()}},{key:"stopImmediatePropagation",value:function(){this.originalEvent.stopImmediatePropagation()}}]),e}();ki.FakeEvent=Fi;var Li={add:ae,remove:se,addDelegate:le,removeDelegate:ue,delegateListener:ce,delegateUseCapture:fe,delegatedEvents:Yi,documents:Ni,supportsOptions:!1,supportsPassive:!1,_elements:Ri,_targets:Xi,init:function(e){e.document.createElement("div").addEventListener("test",null,{get capture(){return Li.supportsOptions=!0},get passive(){return Li.supportsPassive=!0}})}},Wi=Li;ki.default=Wi;var qi={};Object.defineProperty(qi,"__esModule",{value:!0}),qi.default=qi.Interactable=void 0;var Vi=ve(lo),Gi=de(Go),Ui=de(yi),Bi=de(ki),Hi=de(uo),$i=ve(yo),Ki=de(Do),Qi=de(Io),Ji=function(){function e(t,n,r){ge(this,e),this.events=new Qi.default,this._actions=n.actions,this.target=t,this._context=n.context||r,this._win=(0,po.getWindow)((0,Qo.trySelector)(t)?this._context:t),this._doc=this._win.document,this.set(n)}return ye(e,[{key:"setOnEvents",value:function(e,t){return $i.func(t.onstart)&&this.on("".concat(e,"start"),t.onstart),$i.func(t.onmove)&&this.on("".concat(e,"move"),t.onmove),$i.func(t.onend)&&this.on("".concat(e,"end"),t.onend),$i.func(t.oninertiastart)&&this.on("".concat(e,"inertiastart"),t.oninertiastart),this}},{key:"updatePerActionListeners",value:function(e,t,n){$i.array(t)&&this.off(e,t),$i.array(n)&&this.on(e,n)}},{key:"setPerAction",value:function(e,t){var n=this._defaults;for(var r in t){var o=this.options[e],i=t[r],a=$i.array(i);"listeners"===r&&this.updatePerActionListeners(e,o.listeners,i),a?o[r]=Vi.from(i):!a&&$i.plainObject(i)?(o[r]=(0,Hi.default)(o[r]||{},(0,Ui.default)(i)),$i.object(n.perAction[r])&&"enabled"in n.perAction[r]&&(o[r].enabled=!1!==i.enabled)):$i.bool(i)&&$i.object(n.perAction[r])?o[r].enabled=i:o[r]=i}}},{key:"getRect",value:function(e){return e=e||($i.element(this.target)?this.target:null),$i.string(this.target)&&(e=e||this._context.querySelector(this.target)),(0,Qo.getElementRect)(e)}},{key:"rectChecker",value:function(e){return $i.func(e)?(this.getRect=e,this):null===e?(delete this.getRect,this):this.getRect}},{key:"_backCompatOption",value:function(e,t){if((0,Qo.trySelector)(t)||$i.object(t)){this.options[e]=t;for(var n=0;nthis.pointerMoveTolerance);var a={pointer:e,pointerIndex:this.getPointerIndex(e),event:t,eventTarget:n,dx:r,dy:o,duplicate:i,interaction:this};i||(Sa.pointer.setCoordDeltas(this.coords.delta,this.coords.prev,this.coords.cur),Sa.pointer.setCoordVelocity(this.coords.velocity,this.coords.delta)),this._signals.fire("move",a),i||(this.interacting()&&this.move(a),this.pointerWasMoved&&Sa.pointer.copyCoords(this.coords.prev,this.coords.cur))}},{key:"move",value:function(e){e=Sa.extend({pointer:this._latestPointer.pointer,event:this._latestPointer.event,eventTarget:this._latestPointer.eventTarget,interaction:this,noBefore:!1},e||{}),e.phase=Ta.EventPhase.Move,this._doPhase(e)}},{key:"pointerUp",value:function(e,t,n,r){var o=this.getPointerIndex(e);-1===o&&(o=this.updatePointer(e,t,n,!1)),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:Ta.EventPhase.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=Sa.pointer.getPointerId(e);return"mouse"===this.pointerType||"pen"===this.pointerType?this.pointers.length-1:Sa.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=Sa.pointer.getPointerId(e),i=this.getPointerIndex(e),a=this.pointers[i];return r=!1!==r&&(r||/(down|start)$/i.test(t.type)),a?a.pointer=e:(a=new Da.default(o,e,t,null,null),i=this.pointers.length,this.pointers.push(a)),r&&(this.pointerIsDown=!0,this.interacting()||(Sa.pointer.setCoords(this.coords.start,this.pointers.map(function(e){return e.pointer})),Sa.pointer.copyCoords(this.coords.cur,this.coords.start),Sa.pointer.copyCoords(this.coords.prev,this.coords.start),Sa.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 Ta.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}},{key:"pointerMoveTolerance",get:function(){return 1}}]),e}();Ma.Interaction=ka;var za=ka;Ma.default=za;var Ia={};Object.defineProperty(Ia,"__esModule",{value:!0}),Ia.default=void 0;var Aa=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}(fa),Ca={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}},Ra=Ca;Ia.default=Ra;var Xa={};Object.defineProperty(Xa,"__esModule",{value:!0}),Xa.newInteraction=Je,Xa.default=void 0;var Ya=Ce(Go),Na=Ce(Wo),Fa=Ce(ki),La=Ce(Ia),Wa=Ce(xi),qa=Ce(ra),Va=Ce(Ma),Ga=["pointerDown","pointerMove","pointerUp","updatePointer","removePointer","windowBlur"],Ua={install:$e,onDocSignal:Ze,doOnInteractions:Ke,newInteraction:Je,methodNames:Ga};Xa.default=Ua;var Ba={};Object.defineProperty(Ba,"__esModule",{value:!0}),Ba.Scope=Ba.ActionName=void 0;var Ha,$a=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}(fa),Ka=et(Wo),Qa=et(No),Ja=et(Io),Za=et(qi),es=et(ui),ts=et(Xa),ns=$a.win,rs=$a.browser,os=$a.raf,is=$a.Signals,as=$a.events;Ba.ActionName=Ha,Ha||(Ba.ActionName=Ha={});var ss=function(){function e(){ut(this,e),this.signals=new is,this.browser=rs,this.events=as,this.utils=$a,this.defaults=$a.clone(Qa.default),this.Eventable=Ja.default,this.actions={names:[],methodDict:{},eventTypes:[]},this.InteractEvent=es.default,this.interactables=new ls(this),this.documents=[];var t=this;this.Interactable=function(e){function n(){return ut(this,n),nt(this,at(n).apply(this,arguments))}return st(n,e),ft(n,[{key:"set",value:function(e){return ot(at(n.prototype),"set",this).call(this,e),t.interactables.signals.fire("set",{options:e,interactable:this}),this}},{key:"unset",value:function(){ot(at(n.prototype),"unset",this).call(this),t.interactables.signals.fire("unset",{interactable:this})}},{key:"_defaults",get:function(){return t.defaults}}]),n}(Za.default)}return ft(e,[{key:"init",value:function(e){return pt(this,e)}},{key:"addDocument",value:function(e,t){if(-1!==this.getDocIndex(e))return!1;var n=ns.getWindow(e);t=t?$a.extend({},t):{},this.documents.push({doc:e,options:t}),as.documents.push(e),e!==this.document&&as.add(n,"unload",this.onWindowUnload),this.signals.fire("add-document",{doc:e,window:n,scope:this,options:t})}},{key:"removeDocument",value:function(e){var t=this.getDocIndex(e),n=ns.getWindow(e),r=this.documents[t].options;as.remove(n,"unload",this.onWindowUnload),this.documents.splice(t,1),as.documents.splice(t,1),this.signals.fire("remove-document",{doc:e,window:n,scope:this,options:r})}},{key:"onWindowUnload",value:function(e){this.removeDocument(e.target)}},{key:"getDocIndex",value:function(e){for(var t=0;t=2?{name:"gesture"}:null},getCursor:function(){return""}},Ss=Ms;_s.default=Ss;var Ts={};Object.defineProperty(Ts,"__esModule",{value:!0}),Ts.default=void 0;var Ds=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}(fa);Ba.ActionName.Resize="resize";var ks={install:Yt,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 a=Ds.extend({},o.coords.cur.page),s=n.options;if(s.resize.enabled){var l=s.resize,u={left:!1,right:!1,top:!1,bottom:!1};if(Ds.is.object(l.edges)){for(var c in u)u[c]=Ft(c,l.edges[c],a,o._latestPointer.eventTarget,r,i,l.margin||this.defaultMargin);if(u.left=u.left&&!u.right,u.top=u.top&&!u.bottom,u.left||u.right||u.top||u.bottom)return{name:"resize",edges:u}}else{var f="y"!==s.resize.axis&&a.x>i.right-this.defaultMargin,p="x"!==s.resize.axis&&a.y>i.bottom-this.defaultMargin;if(f||p)return{name:"resize",axes:(f?"x":"")+(p?"y":"")}}}return null},cursors:null,getCursor:function(e){var t=ks.cursors;if(e.axis)return t[e.name+e.axis];if(e.edges){for(var n="",r=["top","bottom","left","right"],o=0;o<4;o++)e.edges[r[o]]&&(n+=r[o]);return t[n]}return null},defaultMargin:null},zs=ks;Ts.default=zs;var Is={};Object.defineProperty(Is,"__esModule",{value:!0}),Is.install=Ut,Object.defineProperty(Is,"drag",{enumerable:!0,get:function(){return As.default}}),Object.defineProperty(Is,"drop",{enumerable:!0,get:function(){return Cs.default}}),Object.defineProperty(Is,"gesture",{enumerable:!0,get:function(){return Rs.default}}),Object.defineProperty(Is,"resize",{enumerable:!0,get:function(){return Xs.default}});var As=Gt(us),Cs=Gt(bs),Rs=Gt(_s),Xs=Gt(Ts),Ys={};Object.defineProperty(Ys,"__esModule",{value:!0}),Ys.getContainer=$t,Ys.getScroll=Kt,Ys.getScrollSize=Qt,Ys.getScrollSizeDelta=Jt,Ys.default=void 0;var Ns=Bt(Qo),Fs=Bt(yo),Ls=function(e){return e&&e.__esModule?e:{default:e}}(aa),Ws={defaults:{enabled:!1,margin:60,container:null,speed:300},interaction:null,i:null,x:0,y:0,isScrolling:!1,prevTime:0,margin:0,speed:0,start:function(e){Ws.isScrolling=!0,Ls.default.cancel(Ws.i),e.autoScroll=Ws,Ws.interaction=e,Ws.prevTime=(new Date).getTime(),Ws.i=Ls.default.request(Ws.scroll)},stop:function(){Ws.isScrolling=!1,Ws.interaction&&(Ws.interaction.autoScroll=null),Ls.default.cancel(Ws.i)},scroll:function(){var e=Ws.interaction,t=e.target,n=e.element,r=t.options[Ws.interaction.prepared.name].autoScroll,o=$t(r.container,t,n),i=(new Date).getTime(),a=(i-Ws.prevTime)/1e3,s=r.speed*a;if(s>=1){var l={x:Ws.x*s,y:Ws.y*s};if(l.x||l.y){var u=Kt(o);Fs.window(o)?o.scrollBy(l.x,l.y):o&&(o.scrollLeft+=l.x,o.scrollTop+=l.y);var c=Kt(o),f={x:c.x-u.x,y:c.y-u.y};(f.x||f.y)&&t.fire({type:"autoscroll",target:n,interactable:t,delta:f,interaction:e,container:o})}Ws.prevTime=i}Ws.isScrolling&&(Ls.default.cancel(Ws.i),Ws.i=Ls.default.request(Ws.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()&&Ws.check(t.target,t.prepared.name)){if(t.simulation)return void(Ws.x=Ws.y=0);var r,o,i,a,s=t.target,l=t.element,u=s.options[t.prepared.name].autoScroll,c=$t(u.container,s,l);if(Fs.window(c))a=n.clientXc.innerWidth-Ws.margin,i=n.clientY>c.innerHeight-Ws.margin;else{var f=Ns.getElementClientRect(c);a=n.clientXf.right-Ws.margin,i=n.clientY>f.bottom-Ws.margin}Ws.x=o?1:a?-1:0,Ws.y=i?1:r?-1:0,Ws.isScrolling||(Ws.margin=u.margin,Ws.speed=u.speed,Ws.start(t))}}},qs={install:Ht};Ys.default=qs;var Vs={};Object.defineProperty(Vs,"__esModule",{value:!0}),Vs.default=void 0;var Gs=Zt(Qo),Us=Zt(yo),Bs={install:en};Vs.default=Bs;var Hs={};Object.defineProperty(Hs,"__esModule",{value:!0}),Hs.default=void 0;var $s=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}(fa),Ks=function(e){return e&&e.__esModule?e:{default:e}}(Vs),Qs={install:un,maxInteractions:gn,withinInteractionLimit:vn,validateAction:cn};Hs.default=Qs;var Js={};Object.defineProperty(Js,"__esModule",{value:!0}),Js.default=void 0;var Zs=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}(yo),el=function(e){return e&&e.__esModule?e:{default:e}}(Hs),tl={install:yn};Js.default=tl;var nl={};Object.defineProperty(nl,"__esModule",{value:!0}),nl.default=void 0;var rl={install:mn,getHoldDuration:bn};nl.default=rl;var ol={};Object.defineProperty(ol,"__esModule",{value:!0}),ol.install=wn,Object.defineProperty(ol,"autoStart",{enumerable:!0,get:function(){return il.default}}),Object.defineProperty(ol,"dragAxis",{enumerable:!0,get:function(){return al.default}}),Object.defineProperty(ol,"hold",{enumerable:!0,get:function(){return sl.default}});var il=On(Hs),al=On(Js),sl=On(nl),ll={};Object.defineProperty(ll,"__esModule",{value:!0}),ll.install=jn,ll.default=void 0;var ul=function(e){return e&&e.__esModule?e:{default:e}}(ki),cl=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}(yo),fl={install:jn};ll.default=fl;var pl={};Object.defineProperty(pl,"__esModule",{value:!0}),pl.default=void 0;var dl=function(e){return e&&e.__esModule?e:{default:e}}(uo),vl={install:Dn,startAll:kn,setAll:An,prepareStates:Cn,start:In,beforeMove:Rn,beforeEnd:Xn,stop:Yn,shouldDo:Wn,getModifierList:Ln,getRectOffset:zn,makeModifier:qn};pl.default=vl;var gl={};Object.defineProperty(gl,"__esModule",{value:!0}),gl.default=void 0;var hl=Vn(pl),yl=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}(fa),ml=Vn(aa);ui.EventPhase.Resume="resume",ui.EventPhase.InertiaStart="inertiastart";var bl={install:Gn,calcInertia:$n,inertiaTick:Kn,smothEndTick:Qn,updateInertiaCoords:Jn};gl.default=bl;var Ol={};Object.defineProperty(Ol,"__esModule",{value:!0}),Ol.default=Ol.scope=Ol.interact=void 0;var wl=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}(fa),xl=er(Go),Pl=er(ki),_l={},jl=new Ba.Scope;Ol.scope=jl;var El=function(e,t){var n=jl.interactables.get(e,t);return n||(n=jl.interactables.new(e,t),n.events.global=_l),n};Ol.interact=El,jl._plugins=[],El.use=tr,El.isSet=nr,El.on=rr,El.off=or,El.debug=ir,El.getPointerAverage=wl.pointer.pointerAverage,El.getTouchBBox=wl.pointer.touchBBox,El.getTouchDistance=wl.pointer.touchDistance,El.getTouchAngle=wl.pointer.touchAngle,El.getElementRect=wl.dom.getElementRect,El.getElementClientRect=wl.dom.getElementClientRect,El.matchesSelector=wl.dom.matchesSelector,El.closest=wl.dom.closest,El.supportsTouch=ar,El.supportsPointerEvent=sr,El.stop=lr,El.pointerMoveTolerance=ur,jl.interactables.signals.on("unset",function(e){var t=e.interactable;jl.interactables.list.splice(jl.interactables.list.indexOf(t),1);for(var n=0;n\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","export default function extend> (dest: U, source: T) {\n for (const prop in source) {\n dest[prop] = source[prop]\n }\n return dest as T & U\n}\n","import isWindow from './isWindow'\n\nconst win = {\n realWindow: undefined,\n window: undefined,\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 extend from './extend'\nimport * as is from './is'\n\nexport interface NormalizedListeners {\n [type: string]: Interact.Listener[]\n}\n\nexport default function normalize (\n type: Interact.EventTypes,\n listeners?: Interact.ListenersArg | Interact.ListenersArg[],\n result?: NormalizedListeners,\n): NormalizedListeners {\n result = result || {}\n\n if (is.string(type) && type.search(' ') !== -1) {\n type = split(type)\n }\n\n if (is.array(type)) {\n return type.reduce(\n (acc, t) => extend(acc, normalize(t, listeners, result)),\n result\n )\n }\n\n // ({ type: fn }) -> ('', { type: fn })\n if (is.object(type)) {\n listeners = type\n type = ''\n }\n\n if (is.func(listeners)) {\n result[type] = result[type] || []\n result[type].push(listeners)\n }\n else if (is.array(listeners)) {\n for (const l of listeners) {\n normalize(type, l, result)\n }\n }\n else if (is.object(listeners)) {\n for (const prefix in listeners) {\n const combinedTypes = split(prefix).map((p) => `${type}${p}`)\n\n normalize(combinedTypes, listeners[prefix], result)\n }\n }\n\n return result as NormalizedListeners\n}\n\nfunction split (type: string) {\n return type.trim().split(/ +/)\n}\n","import * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport normalize, { NormalizedListeners } from '@interactjs/utils/normalizeListeners'\nimport { EventPhase, InteractEvent } from './InteractEvent'\nimport { ActionName } from './scope'\n\nfunction fireUntilImmediateStopped<\nT extends ActionName,\nP extends EventPhase,\n> (event: InteractEvent, listeners: Interact.Listener[]) {\n for (const listener of listeners) {\n if (event.immediatePropagationStopped) { break }\n\n listener(event)\n }\n}\n\nclass Eventable {\n options: any\n types: NormalizedListeners = {}\n propagationStopped = false\n immediatePropagationStopped = false\n global: any\n\n constructor (options?: { [index: string]: any }) {\n this.options = extend({}, options || {})\n }\n\n fire (event: any) {\n let listeners\n const global = this.global\n\n // Interactable#on() listeners\n // tslint:disable no-conditional-assignment\n if ((listeners = this.types[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n\n // interact.on() listeners\n if (!event.propagationStopped && global && (listeners = global[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n }\n\n on (type: string, listener: Interact.ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n this.types[type] = arr.merge(this.types[type] || [], listeners[type])\n }\n }\n\n off (type: string, listener: Interact.ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n const eventList = this.types[type]\n\n if (!eventList || !eventList.length) { continue }\n\n for (const subListener of listeners[type]) {\n const index = eventList.indexOf(subListener)\n\n if (index !== -1) {\n eventList.splice(index, 1)\n }\n }\n }\n }\n}\n\nexport default Eventable\n","const domObjects: {\n init: any,\n document: Document,\n DocumentFragment: typeof DocumentFragment,\n SVGElement: typeof SVGElement,\n SVGSVGElement: typeof SVGSVGElement,\n SVGElementInstance: any,\n Element: typeof Element,\n HTMLElement: typeof HTMLElement,\n Event: typeof Event,\n Touch: typeof Touch,\n PointerEvent: typeof PointerEvent,\n} =\n{\n init,\n document: null as any,\n DocumentFragment: null as any,\n SVGElement: null as any,\n SVGSVGElement: null as any,\n // eslint-disable-next-line no-undef\n SVGElementInstance: null as any,\n Element: null as any,\n HTMLElement: null as any,\n Event: null as any,\n Touch: null as any,\n PointerEvent: null as any,\n}\n\nfunction blank () {}\n\nexport default domObjects\n\nfunction init (window: Window) {\n const win = window as any\n\n domObjects.document = win.document\n domObjects.DocumentFragment = win.DocumentFragment || blank\n domObjects.SVGElement = win.SVGElement || blank\n domObjects.SVGSVGElement = win.SVGSVGElement || blank\n domObjects.SVGElementInstance = win.SVGElementInstance || blank\n domObjects.Element = win.Element || blank\n domObjects.HTMLElement = win.HTMLElement || domObjects.Element\n\n domObjects.Event = win.Event\n domObjects.Touch = win.Touch || blank\n domObjects.PointerEvent = (win.PointerEvent || win.MSPointerEvent)\n}\n","import domObjects from './domObjects'\nimport * as is from './is'\nimport win from './window'\n\nconst browser = {\n init,\n supportsTouch: null as boolean,\n supportsPointerEvent: null as boolean,\n isIOS7: null as boolean,\n isIOS: null as boolean,\n isIe9: null as boolean,\n isOperaMobile: null as boolean,\n prefixedMatchesSelector: null as string,\n pEventTypes: null as {\n up: string,\n down: string,\n over: string,\n out: string,\n move: string,\n cancel: string,\n },\n wheelEvent: null as string,\n}\n\nfunction init (window) {\n const Element = domObjects.Element as any\n const navigator = win.window.navigator\n\n // Does the browser support touch input?\n browser.supportsTouch = ('ontouchstart' in window) ||\n (is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch)\n\n // Does the browser support PointerEvents\n browser.supportsPointerEvent = !!domObjects.PointerEvent\n\n browser.isIOS = (/iP(hone|od|ad)/.test(navigator.platform))\n\n // scrolling doesn't change the result of getClientRects on iOS 7\n browser.isIOS7 = (/iP(hone|od|ad)/.test(navigator.platform) &&\n /OS 7[^\\d]/.test(navigator.appVersion))\n\n browser.isIe9 = /MSIE 9/.test(navigator.userAgent)\n\n // Opera Mobile must be handled differently\n browser.isOperaMobile = (navigator.appName === 'Opera' &&\n browser.supportsTouch &&\n navigator.userAgent.match('Presto'))\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\nexport default browser\n","import browser from './browser'\nimport domObjects from './domObjects'\nimport * as is from './is'\nimport win from './window'\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 // tslint:disable-next-line\n while ((parent = (parent as any).host) && is.docFrag(parent)) {\n continue\n }\n\n return parent\n }\n\n return parent\n}\n\nexport function matchesSelector (element, selector) {\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (win.window !== win.realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ')\n }\n\n return element[browser.prefixedMatchesSelector](selector)\n}\n\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 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","import { closest, getElementRect, parentNode } from './domUtils'\nimport extend from './extend'\nimport * as is from './is'\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 { rectToXY, resolveRectLike } from './rect'\n\nexport default function (target, element, action?) {\n const actionOptions = target.options[action]\n const actionOrigin = actionOptions && actionOptions.origin\n const origin = actionOrigin || target.options.origin\n\n const originRect = resolveRectLike(origin, target, element, [target && element])\n\n return rectToXY(originRect) || { x: 0, y: 0 }\n}\n","import * as arr from './arr'\nimport * as is from './is'\n\nexport default function clone (source: T): Partial {\n const dest = {} as Partial\n\n for (const prop in source) {\n const value = source[prop]\n\n if (is.plainObject(value)) {\n dest[prop] = clone(value) as any\n }\n else if (is.array(value)) {\n dest[prop] = arr.from(value)\n }\n else {\n dest[prop] = value\n }\n }\n\n return dest\n}\n","export interface PointerExtend {\n webkit: RegExp\n [prefix: string]: RegExp\n}\n\nexport 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\nexport default pointerExtend\n","import { contains } from './arr'\nimport * as domUtils from './domUtils'\nimport * as is from './is'\nimport pExtend from './pointerExtend'\nimport pointerUtils from './pointerUtils'\n\ntype Listener = (event: Event | FakeEvent) => any\n\nconst elements: EventTarget[] = []\nconst targets: Array<{\n events: { [type: string]: Listener[] },\n typeCount: number,\n}> = []\n\nconst delegatedEvents: {\n [type: string]: {\n selectors: string[],\n contexts: EventTarget[],\n listeners: Array>,\n },\n} = {}\nconst documents: Document[] = []\n\nfunction add (element: EventTarget, type: string, listener: Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n let elementIndex = elements.indexOf(element)\n let target = targets[elementIndex]\n\n if (!target) {\n target = {\n events: {},\n typeCount: 0,\n }\n\n elementIndex = elements.push(element) - 1\n targets.push(target)\n }\n\n if (!target.events[type]) {\n target.events[type] = []\n target.typeCount++\n }\n\n if (!contains(target.events[type], listener)) {\n element.addEventListener(type, listener as any, events.supportsOptions ? options : !!options.capture)\n target.events[type].push(listener)\n }\n}\n\nfunction remove (element: EventTarget, type: string, listener?: 'all' | Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n const elementIndex = elements.indexOf(element)\n const target = targets[elementIndex]\n\n if (!target || !target.events) {\n return\n }\n\n if (type === 'all') {\n for (type in target.events) {\n if (target.events.hasOwnProperty(type)) {\n remove(element, type, 'all')\n }\n }\n return\n }\n\n if (target.events[type]) {\n const len = target.events[type].length\n\n if (listener === 'all') {\n for (let i = 0; i < len; i++) {\n remove(element, type, target.events[type][i], options)\n }\n return\n }\n else {\n for (let i = 0; i < len; i++) {\n if (target.events[type][i] === listener) {\n element.removeEventListener(type, listener as any, events.supportsOptions ? options : !!options.capture)\n target.events[type].splice(i, 1)\n\n break\n }\n }\n }\n\n if (target.events[type] && target.events[type].length === 0) {\n (target.events[type] as any) = null\n target.typeCount--\n }\n }\n\n if (!target.typeCount) {\n targets.splice(elementIndex, 1)\n elements.splice(elementIndex, 1)\n }\n}\n\nfunction addDelegate (selector: string, context: EventTarget, type: string, listener: Listener, optionalArg?: any) {\n const options = getOptions(optionalArg)\n if (!delegatedEvents[type]) {\n delegatedEvents[type] = {\n contexts : [],\n listeners: [],\n selectors: [],\n }\n\n // add delegate listener functions\n for (const doc of documents) {\n add(doc, type, delegateListener)\n add(doc, type, delegateUseCapture, true)\n }\n }\n\n const delegated = delegatedEvents[type]\n let index\n\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n if (delegated.selectors[index] === selector &&\n delegated.contexts[index] === context) {\n break\n }\n }\n\n if (index === -1) {\n index = delegated.selectors.length\n\n delegated.selectors.push(selector)\n delegated.contexts.push(context)\n delegated.listeners.push([])\n }\n\n // keep listener and capture and passive flags\n delegated.listeners[index].push([listener, !!options.capture, options.passive])\n}\n\nfunction removeDelegate (selector, context, type, listener?, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const delegated = delegatedEvents[type]\n let matchFound = false\n let index\n\n if (!delegated) { return }\n\n // count from last index of delegated to 0\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n // look for matching selector and context Node\n if (delegated.selectors[index] === selector &&\n delegated.contexts[index] === context) {\n const listeners = delegated.listeners[index]\n\n // each item of the listeners array is an array: [function, capture, passive]\n for (let i = listeners.length - 1; i >= 0; i--) {\n const [fn, capture, passive] = listeners[i]\n\n // check if the listener functions and capture and passive flags match\n if (fn === listener && capture === !!options.capture && passive === options.passive) {\n // remove the listener from the array of listeners\n listeners.splice(i, 1)\n\n // if all listeners for this interactable have been removed\n // remove the interactable from the delegated arrays\n if (!listeners.length) {\n delegated.selectors.splice(index, 1)\n delegated.contexts.splice(index, 1)\n delegated.listeners.splice(index, 1)\n\n // remove delegate function from context\n remove(context, type, delegateListener)\n remove(context, type, delegateUseCapture, true)\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegatedEvents[type] = null\n }\n }\n\n // only remove one listener\n matchFound = true\n break\n }\n }\n\n if (matchFound) { break }\n }\n }\n}\n\n// bound to the interactable context when a DOM event\n// listener is added to a selector interactable\nfunction delegateListener (event: Event, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const fakeEvent = new FakeEvent(event)\n const delegated = delegatedEvents[event.type]\n const [eventTarget] = (pointerUtils.getEventTargets(event))\n let element = eventTarget\n\n // climb up document tree looking for selector matches\n while (is.element(element)) {\n for (let i = 0; i < delegated.selectors.length; i++) {\n const selector = delegated.selectors[i]\n const context = delegated.contexts[i]\n\n if (domUtils.matchesSelector(element, selector) &&\n domUtils.nodeContains(context, eventTarget) &&\n domUtils.nodeContains(context, element)) {\n const listeners = delegated.listeners[i]\n\n fakeEvent.currentTarget = element\n\n for (const [fn, capture, passive] of listeners) {\n if (capture === !!options.capture && passive === options.passive) {\n fn(fakeEvent)\n }\n }\n }\n }\n\n element = domUtils.parentNode(element)\n }\n}\n\nfunction delegateUseCapture (event: Event) {\n return delegateListener.call(this, event, true)\n}\n\nfunction getOptions (param) {\n return is.object(param) ? param : { capture: param }\n}\n\nexport class FakeEvent implements Partial {\n currentTarget: EventTarget\n\n constructor (public originalEvent) {\n // duplicate the event so that currentTarget can be changed\n pExtend(this, originalEvent)\n }\n\n preventOriginalDefault () {\n this.originalEvent.preventDefault()\n }\n\n stopPropagation () {\n this.originalEvent.stopPropagation()\n }\n\n stopImmediatePropagation () {\n this.originalEvent.stopImmediatePropagation()\n }\n}\n\nconst events = {\n add,\n remove,\n\n addDelegate,\n removeDelegate,\n\n delegateListener,\n delegateUseCapture,\n delegatedEvents,\n documents,\n\n supportsOptions: false,\n supportsPassive: false,\n\n _elements: elements,\n _targets: targets,\n\n init (window: Window) {\n window.document.createElement('div').addEventListener('test', null, {\n get capture () { return (events.supportsOptions = true) },\n get passive () { return (events.supportsPassive = true) },\n })\n },\n}\n\nexport default events\n","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 // eslint-disable-next-line standard/no-callback-literal\n const token = setTimeout(() => { callback(currTime + timeToCall) },\n timeToCall)\n\n lastTime = currTime + timeToCall\n return token\n }\n\n cancel = (token) => clearTimeout(token)\n }\n}\n\nexport default {\n request: (callback) => request(callback),\n cancel: (token) => cancel(token),\n init,\n}\n","import * as arr from './arr'\nimport * as dom from './domUtils'\nimport * as is from './is'\nimport win from './window'\n\nexport function warnOnce (this: T, method: (...args: any) => any, message: string) {\n let warned = false\n\n // eslint-disable-next-line no-shadow\n return function (this: T) {\n if (!warned) {\n (win as any).window.console.warn(message)\n warned = true\n }\n\n return method.apply(this, arguments)\n }\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nexport function _getQBezierValue (t: number, p1: number, p2: number, p3: number) {\n const iT = 1 - t\n return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3\n}\n\nexport function getQuadraticCurvePoint (\n startX: number, startY: number, cpX: number, cpY: number, endX: number, endY: number, position: number) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY),\n }\n}\n\n// http://gizma.com/easing/\nexport function easeOutQuad (t: number, b: number, c: number, d: number) {\n t /= d\n return -c * t * (t - 2) + b\n}\n\nexport function copyAction (dest: any, src: any) {\n dest.name = src.name\n dest.axis = src.axis\n dest.edges = src.edges\n\n return dest\n}\n\nexport { default as browser } from './browser'\nexport { default as clone } from './clone'\nexport { default as events } from './events'\nexport { default as extend } from './extend'\nexport { default as getOriginXY } from './getOriginXY'\nexport { default as hypot } from './hypot'\nexport { default as normalizeListeners } from './normalizeListeners'\nexport { default as pointer } from './pointerUtils'\nexport { default as raf } from './raf'\nexport { default as rect } from './rect'\nexport { default as Signals } from './Signals'\nexport { win, arr, dom, is }\n","import * as utils from './index'\n\nconst finder = {\n methodOrder: [ 'simulationResume', 'mouseOrPen', 'hasPointer', 'idle' ],\n\n search (details) {\n for (const method of finder.methodOrder) {\n const interaction = finder[method](details)\n\n if (interaction) {\n return interaction\n }\n }\n },\n\n // try to resume simulation with a new pointer\n simulationResume ({ pointerType, eventType, eventTarget, scope }) {\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 ({ 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 ({ 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 ({ 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 browser from '@interactjs/utils/browser'\nimport domObjects from '@interactjs/utils/domObjects'\nimport events from '@interactjs/utils/events'\nimport finder from '@interactjs/utils/interactionFinder'\nimport pointerUtils from '@interactjs/utils/pointerUtils'\nimport Signals from '@interactjs/utils/Signals'\nimport InteractionBase from './Interaction'\nimport { Scope } from './scope'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n Interaction: typeof InteractionBase\n interactions: {\n signals: Signals\n new: (options: any) => InteractionBase\n list: InteractionBase[]\n listeners: { [type: string]: Interact.Listener }\n eventMap: any\n pointerMoveTolerance: number\n }\n prevTouchTime: number\n }\n}\n\nconst methodNames = [\n 'pointerDown', 'pointerMove', 'pointerUp',\n 'updatePointer', 'removePointer', 'windowBlur',\n]\n\nfunction install (scope: Scope) {\n const signals = new Signals()\n\n const listeners = {} as any\n\n for (const method of methodNames) {\n listeners[method] = doOnInteractions(method, scope)\n }\n\n const pEventTypes = browser.pEventTypes\n const eventMap = {} as { [key: string]: Interact.Listener }\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\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 * as utils from '@interactjs/utils'\nimport domObjects from '@interactjs/utils/domObjects'\nimport defaults from './defaultOptions'\nimport Eventable from './Eventable'\nimport InteractableBase from './Interactable'\nimport InteractEvent from './InteractEvent'\nimport interactions from './interactions'\n\nconst {\n win,\n browser,\n raf,\n Signals,\n events,\n} = utils\n\nexport enum ActionName {\n}\n\nexport interface Actions {\n names: ActionName[]\n methodDict: { [key: string]: string }\n eventTypes: string[]\n}\n\nexport function createScope () {\n return new Scope()\n}\n\nexport type Defaults = typeof defaults\n\nexport class Scope {\n // FIXME Signals\n signals = new Signals()\n browser = browser\n events = events\n utils = utils\n defaults: Defaults = utils.clone(defaults) as Defaults\n Eventable = Eventable\n actions: Actions = {\n names: [],\n methodDict: {},\n eventTypes: [],\n }\n\n InteractEvent = InteractEvent\n Interactable!: typeof InteractableBase\n interactables = new InteractableSet(this)\n\n // main window\n _win!: Window\n\n // main document\n document!: Document\n\n // all documents being listened to\n documents: Array<{ doc: Document, options: any }> = []\n\n constructor () {\n const scope = this as Scope;\n\n (this as { Interactable: typeof InteractableBase }).Interactable = class Interactable extends InteractableBase implements InteractableBase {\n get _defaults () { return scope.defaults }\n\n set (options: any) {\n super.set(options)\n\n scope.interactables.signals.fire('set', {\n options,\n interactable: this,\n })\n\n return this\n }\n\n unset () {\n super.unset()\n scope.interactables.signals.fire('unset', { interactable: this })\n }\n }\n }\n\n init (window: Window) {\n return initScope(this, window)\n }\n\n addDocument (doc: Document, options?: any): void | false {\n // do nothing if document is already known\n if (this.getDocIndex(doc) !== -1) { return false }\n\n const window = win.getWindow(doc)\n\n options = options ? utils.extend({}, options) : {}\n\n this.documents.push({ doc, options })\n events.documents.push(doc)\n\n // don't add an unload event for the main document\n // so that the page may be cached in browser history\n if (doc !== this.document) {\n events.add(window, 'unload', this.onWindowUnload)\n }\n\n this.signals.fire('add-document', { doc, window, scope: this, options })\n }\n\n removeDocument (doc: Document) {\n const index = this.getDocIndex(doc)\n\n const window = win.getWindow(doc)\n const options = this.documents[index].options\n\n events.remove(window, 'unload', this.onWindowUnload)\n\n this.documents.splice(index, 1)\n events.documents.splice(index, 1)\n\n this.signals.fire('remove-document', { doc, window, scope: this, options })\n }\n\n onWindowUnload (event: Event) {\n this.removeDocument(event.target as Document)\n }\n\n getDocIndex (doc: Document) {\n for (let i = 0; i < this.documents.length; i++) {\n if (this.documents[i].doc === doc) {\n return i\n }\n }\n\n return -1\n }\n\n getDocOptions (doc: Document) {\n const docIndex = this.getDocIndex(doc)\n\n return docIndex === -1 ? null : this.documents[docIndex].options\n }\n}\n\nclass InteractableSet {\n signals = new utils.Signals()\n\n // all set interactables\n list: InteractableBase[] = []\n\n constructor (protected scope: Scope) {}\n\n new (target: Interact.Target, options: any): InteractableBase {\n options = utils.extend(options || {}, {\n actions: this.scope.actions,\n })\n const interactable = new this.scope.Interactable(target, options, this.scope.document)\n\n this.scope.addDocument(interactable._doc)\n this.list.push(interactable)\n\n this.signals.fire('new', {\n target,\n options,\n interactable,\n win: this.scope._win,\n })\n\n return interactable\n }\n\n indexOfElement (target: Interact.Target, context: Document | Element) {\n context = context || this.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: Interact.Target, options, dontCheckInContext?: boolean) {\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: Document | Element, callback: (interactable: any) => any) {\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\nexport function initScope (scope: Scope, window: Window) {\n win.init(window)\n domObjects.init(window)\n browser.init(window)\n raf.init(window)\n events.init(window)\n\n interactions.install(scope)\n scope.document = window.document\n\n return scope\n}\n","import { ActionName, Scope } from '@interactjs/core/scope'\nimport * as arr from '@interactjs/utils/arr'\nimport * as is from '@interactjs/utils/is'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n draggable: DraggableMethod\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n drag: Interact.DraggableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Drag]?: typeof drag\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Drag = 'drag'\n }\n}\n\n(ActionName as any).Drag = 'drag'\n\nexport type DragEvent = Interact.InteractEvent\n\nexport type DraggableMethod = (options?: Interact.OrBoolean | boolean)\n => Interact.Interactable | Interact.DropzoneOptions\n\nfunction install (scope: Scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope\n\n interactions.signals.on('before-action-move', beforeMove)\n interactions.signals.on('action-resume', beforeMove)\n\n // dragmove\n interactions.signals.on('action-move', move)\n\n Interactable.prototype.draggable = drag.draggable\n\n actions.drag = drag\n actions.names.push(ActionName.Drag)\n arr.merge(actions.eventTypes, [\n 'dragstart',\n 'dragmove',\n 'draginertiastart',\n 'dragresume',\n 'dragend',\n ])\n actions.methodDict.drag = 'draggable'\n\n defaults.actions.drag = drag.defaults\n}\n\nfunction beforeMove ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x') {\n interaction.coords.cur.page.y = interaction.coords.start.page.y\n interaction.coords.cur.client.y = interaction.coords.start.client.y\n\n interaction.coords.velocity.client.y = 0\n interaction.coords.velocity.page.y = 0\n }\n else if (axis === 'y') {\n interaction.coords.cur.page.x = interaction.coords.start.page.x\n interaction.coords.cur.client.x = interaction.coords.start.client.x\n\n interaction.coords.velocity.client.x = 0\n interaction.coords.velocity.page.x = 0\n }\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x' || axis === 'y') {\n const opposite = axis === 'x' ? 'y' : 'x'\n\n iEvent.page[opposite] = interaction.coords.start.page[opposite]\n iEvent.client[opposite] = interaction.coords.start.client[opposite]\n iEvent.delta[opposite] = 0\n }\n}\n\n/**\n * ```js\n * interact(element).draggable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // the axis in which the first movement must be\n * // for the drag sequence to start\n * // 'xy' by default - any direction\n * startAxis: 'x' || 'y' || 'xy',\n *\n * // 'xy' by default - don't restrict to one axis (move in any direction)\n * // 'x' or 'y' to restrict movement to either axis\n * // 'start' to restrict movement to the axis the drag started in\n * lockAxis: 'x' || 'y' || 'xy' || 'start',\n *\n * // max number of drags that can happen concurrently\n * // with elements of this Interactable. Infinity by default\n * max: Infinity,\n *\n * // max number of drags that can target the same element+Interactable\n * // 1 by default\n * maxPerElement: 2\n * });\n *\n * var isDraggable = interact('element').draggable(); // true\n * ```\n *\n * Get or set whether drag actions can be performed on the target\n *\n * @alias Interactable.prototype.draggable\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on drag events (object makes the Interactable\n * draggable)\n * @return {boolean | Interactable} boolean indicating if this can be the\n * target of drag events, or this Interctable\n */\nfunction draggable (this: Interact.Interactable, options?: Interact.DraggableOptions | boolean) {\n if (is.object(options)) {\n this.options.drag.enabled = options.enabled !== false\n this.setPerAction('drag', options)\n this.setOnEvents('drag', options)\n\n if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n this.options.drag.lockAxis = options.lockAxis\n }\n if (/^(xy|x|y)$/.test(options.startAxis)) {\n this.options.drag.startAxis = options.startAxis\n }\n\n return this\n }\n\n if (is.bool(options)) {\n this.options.drag.enabled = options\n\n return this\n }\n\n return this.options.drag\n}\n\nconst drag = {\n install,\n draggable,\n beforeMove,\n move,\n defaults: {\n startAxis : 'xy',\n lockAxis : 'xy',\n } as Interact.DropzoneOptions,\n\n checker (_pointer, _event, interactable) {\n const dragOptions = interactable.options.drag\n\n return dragOptions.enabled\n ? {\n name: 'drag',\n axis: (dragOptions.lockAxis === 'start'\n ? dragOptions.startAxis\n : dragOptions.lockAxis),\n }\n : null\n },\n\n getCursor () {\n return 'move'\n },\n}\n\nexport default drag\n","import InteractEvent from '@interactjs/core/InteractEvent'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport DropEvent from './DropEvent'\n\nexport type DropzoneMethod = (options?: Interact.DropzoneOptions | boolean) => Interact.Interactable | Interact.DropzoneOptions\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n dropzone: DropzoneMethod\n dropCheck: (\n dragEvent: InteractEvent,\n event: Interact.PointerEventType,\n draggable: Interactable,\n draggableElement: Element,\n dropElemen: Element,\n rect: any\n ) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n dropStatus?: { [key: string]: any }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n drop: Interact.DropzoneOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n dynamicDrop?: boolean\n }\n}\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n dynamicDrop: (newValue?: boolean) => boolean | Interact.interact\n }\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n /** @lends module:interact */\n interact,\n /** @lends Interactable */\n Interactable,\n interactions,\n defaults,\n } = scope\n\n interactions.signals.on('after-action-start', ({ 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 // TODO: maybe Interaction { element: T }\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 // FIXME proper signal types\n interactions.signals.on('action-move', (arg) => onEventCreated(arg as any, scope))\n interactions.signals.on('action-end', (arg) => onEventCreated(arg as any, scope))\n\n interactions.signals.on('after-action-move', ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n fireDropEvents(interaction, interaction.dropStatus.events)\n interaction.dropStatus.events = {}\n })\n\n interactions.signals.on('after-action-end', ({ interaction }) => {\n if (interaction.prepared.name === 'drag') {\n fireDropEvents(interaction, interaction.dropStatus.events)\n }\n })\n\n interactions.signals.on('stop', ({ interaction }) => {\n interaction.dropStatus.activeDrops = null\n interaction.dropStatus.events = null\n })\n\n interactions.signals.on('new', (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', ({ interaction: { dropStatus } }) => {\n dropStatus.cur.dropzone = dropStatus.cur.element =\n dropStatus.prev.dropzone = dropStatus.prev.element = null\n dropStatus.rejected = false\n })\n\n /**\n *\n * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param {boolean | object | null} [options] The new options to be set.\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.dropzone = function (this: Interact.Interactable, options) {\n return dropzoneMethod(this, options)\n }\n\n /**\n * ```js\n * interact(target)\n * .dropChecker(function(dragEvent, // related dragmove or dragend event\n * event, // TouchEvent/PointerEvent/MouseEvent\n * dropped, // bool result of the default checker\n * dropzone, // dropzone Interactable\n * dropElement, // dropzone elemnt\n * draggable, // draggable Interactable\n * draggableElement) {// draggable element\n *\n * return dropped && event.target.hasAttribute('allow-drop');\n * }\n * ```\n */\n Interactable.prototype.dropCheck = function (this: Interact.Interactable, dragEvent, event, draggable, draggableElement, dropElement, rect) {\n return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect)\n }\n\n /**\n * Returns or sets whether the dimensions of dropzone elements are calculated\n * on every dragmove or only on dragstart for the default dropChecker\n *\n * @param {boolean} [newValue] True to check on each move. False to check only\n * before start\n * @return {boolean | interact} The current setting or interact\n */\n interact.dynamicDrop = function (newValue?: boolean) {\n if (utils.is.bool(newValue)) {\n // if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n // calcRects(dropzones);\n // }\n\n scope.dynamicDrop = newValue\n\n return interact\n }\n return scope.dynamicDrop\n }\n\n utils.arr.merge(actions.eventTypes, [\n 'dragenter',\n 'dragleave',\n 'dropactivate',\n 'dropdeactivate',\n 'dropmove',\n 'drop',\n ])\n actions.methodDict.drop = 'dropzone'\n\n scope.dynamicDrop = false\n\n defaults.actions.drop = drop.defaults\n}\n\nfunction collectDrops ({ interactables }, draggableElement) {\n const drops = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const dropzone of interactables.list) {\n if (!dropzone.options.drop.enabled) { continue }\n\n const accept = dropzone.options.drop.accept\n\n // test the draggable draggableElement against the dropzone's accept setting\n if ((utils.is.element(accept) && accept !== draggableElement) ||\n (utils.is.string(accept) &&\n !utils.dom.matchesSelector(draggableElement, accept)) ||\n (utils.is.func(accept) && !accept({ dropzone, draggableElement }))) {\n continue\n }\n\n // query for new elements if necessary\n const dropElements = utils.is.string(dropzone.target)\n ? dropzone._context.querySelectorAll(dropzone.target)\n : utils.is.array(dropzone.target) ? dropzone.target : [dropzone.target]\n\n for (const dropzoneElement of dropElements) {\n if (dropzoneElement !== draggableElement) {\n drops.push({\n dropzone,\n element: dropzoneElement,\n })\n }\n }\n }\n\n return drops\n}\n\nfunction fireActivationEvents (activeDrops, event) {\n // loop through all active dropzones and trigger event\n for (const { dropzone, element } of activeDrops) {\n event.dropzone = dropzone\n\n // set current element as event target\n event.target = element\n dropzone.fire(event)\n event.propagationStopped = event.immediatePropagationStopped = false\n }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops (scope: Scope, dragElement: Element) {\n // get dropzones and their elements that could receive the draggable\n const activeDrops = collectDrops(scope, dragElement)\n\n for (const activeDrop of activeDrops) {\n activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element)\n }\n\n return activeDrops\n}\n\nfunction getDrop ({ 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.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\nfunction dropzoneMethod (interactable: Interact.Interactable, options: Interact.DropzoneOptions | boolean) {\n if (utils.is.object(options)) {\n interactable.options.drop.enabled = options.enabled !== false\n\n if (options.listeners) {\n const normalized = utils.normalizeListeners(options.listeners)\n // rename 'drop' to '' as it will be prefixed with 'drop'\n const corrected = Object.keys(normalized).reduce((acc, type) => {\n const correctedType = /^(enter|leave)/.test(type)\n ? `drag${type}`\n : /^(activate|deactivate|move)/.test(type)\n ? `drop${type}`\n : type\n\n acc[correctedType] = normalized[type]\n\n return acc\n }, {})\n\n interactable.off(interactable.options.drop.listeners)\n interactable.on(corrected)\n interactable.options.drop.listeners = corrected\n }\n\n if (utils.is.func(options.ondrop)) { interactable.on('drop', options.ondrop) }\n if (utils.is.func(options.ondropactivate)) { interactable.on('dropactivate', options.ondropactivate) }\n if (utils.is.func(options.ondropdeactivate)) { interactable.on('dropdeactivate', options.ondropdeactivate) }\n if (utils.is.func(options.ondragenter)) { interactable.on('dragenter', options.ondragenter) }\n if (utils.is.func(options.ondragleave)) { interactable.on('dragleave', options.ondragleave) }\n if (utils.is.func(options.ondropmove)) { interactable.on('dropmove', options.ondropmove) }\n\n if (/^(pointer|center)$/.test(options.overlap as string)) {\n interactable.options.drop.overlap = options.overlap\n }\n else if (utils.is.number(options.overlap)) {\n interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0)\n }\n if ('accept' in options) {\n interactable.options.drop.accept = options.accept\n }\n if ('checker' in options) {\n interactable.options.drop.checker = options.checker\n }\n\n return interactable\n }\n\n if (utils.is.bool(options)) {\n interactable.options.drop.enabled = options\n\n return interactable\n }\n\n return interactable.options.drop\n}\n\nfunction dropCheckMethod (\n interactable: Interact.Interactable,\n dragEvent: InteractEvent,\n event: Interact.PointerEventType,\n draggable: Interact.Interactable,\n draggableElement: Element,\n dropElement: Element,\n rect: any\n) {\n let dropped = false\n\n // if the dropzone has no rect (eg. display: none)\n // call the custom dropChecker or just return false\n if (!(rect = rect || interactable.getRect(dropElement))) {\n return (interactable.options.drop.checker\n ? interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n : false)\n }\n\n const dropOverlap = interactable.options.drop.overlap\n\n if (dropOverlap === 'pointer') {\n const origin = utils.getOriginXY(draggable, draggableElement, 'drag')\n const page = utils.pointer.getPageXY(dragEvent)\n\n page.x += origin.x\n page.y += origin.y\n\n const horizontal = (page.x > rect.left) && (page.x < rect.right)\n const vertical = (page.y > rect.top) && (page.y < rect.bottom)\n\n dropped = horizontal && vertical\n }\n\n const dragRect = draggable.getRect(draggableElement)\n\n if (dragRect && dropOverlap === 'center') {\n const cx = dragRect.left + dragRect.width / 2\n const cy = dragRect.top + dragRect.height / 2\n\n dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom\n }\n\n if (dragRect && utils.is.number(dropOverlap)) {\n const overlapArea = (Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) *\n Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top)))\n\n const overlapRatio = overlapArea / (dragRect.width * dragRect.height)\n\n dropped = overlapRatio >= dropOverlap\n }\n\n if (interactable.options.drop.checker) {\n dropped = interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n }\n\n return dropped\n}\n\nconst drop = {\n install,\n getActiveDrops,\n getDrop,\n getDropEvents,\n fireDropEvents,\n defaults: {\n enabled: false,\n accept : null,\n overlap: 'pointer',\n } as Interact.DropzoneOptions,\n}\n\nexport default drop\n","import InteractEvent from '@interactjs/core/InteractEvent'\nimport { ActionName, Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\n\nexport type GesturableMethod = (options?: Interact.GesturableOptions | boolean) => Interact.Interactable | Interact.GesturableOptions\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n gesturable: GesturableMethod\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n gesture: Interact.GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Gesture]?: typeof gesture\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Gesture = 'gesture'\n }\n}\n\n(ActionName as any).Gesture = 'gesture'\n\nexport type GestureEvent = Interact.InteractEvent\n\nfunction install (scope: Scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope\n\n /**\n * ```js\n * interact(element).gesturable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // limit multiple gestures.\n * // See the explanation in {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * });\n *\n * var isGestureable = interact(element).gesturable();\n * ```\n *\n * Gets or sets whether multitouch gestures can be performed on the target\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on gesture events (makes the Interactable gesturable)\n * @return {boolean | Interactable} A boolean indicating if this can be the\n * target of gesture events, or this Interactable\n */\n Interactable.prototype.gesturable = function (this: Interact.Interactable, options: Interact.GesturableOptions | boolean) {\n if (utils.is.object(options)) {\n this.options.gesture.enabled = options.enabled !== false\n this.setPerAction('gesture', options)\n this.setOnEvents('gesture', options)\n\n return this\n }\n\n if (utils.is.bool(options)) {\n this.options.gesture.enabled = options\n\n return this\n }\n\n return this.options.gesture as Interact.Options\n }\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', (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[ActionName.Gesture] = gesture\n actions.names.push(ActionName.Gesture)\n utils.arr.merge(actions.eventTypes, [\n 'gesturestart',\n 'gesturemove',\n 'gestureend',\n ])\n actions.methodDict.gesture = 'gesturable'\n\n defaults.actions.gesture = gesture.defaults\n}\n\nconst gesture = {\n install,\n defaults: {\n },\n\n checker (_pointer, _event, _interactable, _element, interaction: { pointers: { length: number; }; }) {\n if (interaction.pointers.length >= 2) {\n return { name: 'gesture' }\n }\n\n return null\n },\n\n getCursor () {\n return ''\n },\n}\n\nfunction 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 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, 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, deltaSource)\n\n iEvent.ds = iEvent.scale - interaction.gesture.prevScale\n iEvent.da = iEvent.angle - interaction.gesture.prevAngle\n }\n}\n\nexport default gesture\n","import { Action, Interaction } from '@interactjs/core/Interaction'\nimport { ActionName, Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\n\nexport type EdgeName = 'top' | 'left' | 'bottom' | 'right'\nexport type ResizableMethod = (options?: Interact.OrBoolean | boolean) => Interact.Interactable | Interact.ResizableOptions\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n resizable: ResizableMethod\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n resizeAxes: 'x' | 'y' | 'xy'\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n resize: Interact.ResizableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Resize]?: typeof resize\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Resize = 'resize'\n }\n}\n\n(ActionName as any).Resize = 'resize'\n\nexport interface ResizeEvent extends Interact.InteractEvent {\n deltaRect?: Interact.Rect\n rect?: Interact.Rect\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n browser,\n /** @lends Interactable */\n Interactable, // tslint:disable-line no-shadowed-variable\n interactions,\n defaults,\n } = scope\n\n // Less Precision with touch input\n\n interactions.signals.on('new', (interaction) => {\n interaction.resizeAxes = 'xy'\n })\n\n interactions.signals.on('action-start', start)\n interactions.signals.on('action-move', move)\n\n interactions.signals.on('action-start', updateEventAxes)\n interactions.signals.on('action-move', updateEventAxes)\n\n resize.cursors = initCursors(browser)\n resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10\n\n /**\n * ```js\n * interact(element).resizable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * edges: {\n * top : true, // Use pointer coords to check for resize.\n * left : false, // Disable resizing from left edge.\n * bottom: '.resize-s',// Resize if pointer target matches selector\n * right : handleEl // Resize if pointer target is the given Element\n * },\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height are adjusted at a 1:1 ratio.\n * square: false,\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height maintain the aspect ratio they had when resizing started.\n * preserveAspectRatio: false,\n *\n * // a value of 'none' will limit the resize rect to a minimum of 0x0\n * // 'negate' will allow the rect to have negative width/height\n * // 'reposition' will keep the width/height positive by swapping\n * // the top and bottom edges and/or swapping the left and right edges\n * invert: 'none' || 'negate' || 'reposition'\n *\n * // limit multiple resizes.\n * // See the explanation in the {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * });\n *\n * var isResizeable = interact(element).resizable();\n * ```\n *\n * Gets or sets whether resize actions can be performed on the target\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on resize events (object makes the Interactable\n * resizable)\n * @return {boolean | Interactable} A boolean indicating if this can be the\n * target of resize elements, or this Interactable\n */\n Interactable.prototype.resizable = function (this: Interact.Interactable, options: Interact.RestrictOption | boolean) {\n return resizable(this, options, scope)\n }\n\n actions[ActionName.Resize] = resize\n actions.names.push(ActionName.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.actions.resize = resize.defaults\n}\n\nconst resize = {\n install,\n defaults: {\n square: false,\n preserveAspectRatio: false,\n axis: 'xy',\n\n // use default margin\n margin: NaN,\n\n // object with props left, right, top, bottom which are\n // true/false values to resize when the pointer is over that edge,\n // CSS selectors to match the handles for each direction\n // or the Elements for each handle\n edges: null,\n\n // a value of 'none' will limit the resize rect to a minimum of 0x0\n // 'negate' will alow the rect to have negative width/height\n // 'reposition' will keep the width/height positive by swapping\n // the top and bottom edges and/or swapping the left and right edges\n invert: 'none',\n } as Interact.ResizableOptions,\n\n checker (\n _pointer: Interact.PointerType,\n _event: Interact.PointerEventType,\n interactable: Interact.Interactable,\n element: Element,\n interaction: Interaction,\n rect: Interact.Rect\n ) {\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: { [edge: string]: boolean } = { 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._latestPointer.eventTarget,\n element,\n rect,\n resizeOptions.margin || this.defaultMargin)\n }\n\n resizeEdges.left = resizeEdges.left && !resizeEdges.right\n resizeEdges.top = resizeEdges.top && !resizeEdges.bottom\n\n if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n return {\n name: 'resize',\n edges: resizeEdges,\n }\n }\n }\n else {\n const right = options.resize.axis !== 'y' && page.x > (rect.right - this.defaultMargin)\n const bottom = options.resize.axis !== 'x' && page.y > (rect.bottom - this.defaultMargin)\n\n if (right || bottom) {\n return {\n name: 'resize',\n axes: (right ? 'x' : '') + (bottom ? 'y' : ''),\n }\n }\n }\n }\n\n return null\n },\n\n cursors: null as unknown as ReturnType,\n\n getCursor (action: Action) {\n const cursors = resize.cursors as { [key: string]: string }\n if (action.axis) {\n return 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 cursors[cursorKey]\n }\n\n return null\n },\n\n defaultMargin: null as unknown as number,\n}\n\nfunction resizable (interactable: Interact.Interactable, options: Interact.OrBoolean | boolean, scope: Scope) {\n if (utils.is.object(options)) {\n interactable.options.resize.enabled = options.enabled !== false\n interactable.setPerAction('resize', options)\n interactable.setOnEvents('resize', options)\n\n if (/^x$|^y$|^xy$/.test(options.axis as string)) {\n interactable.options.resize.axis = options.axis\n }\n else if (options.axis === null) {\n interactable.options.resize.axis = scope.defaults.actions.resize.axis\n }\n\n if (utils.is.bool(options.preserveAspectRatio)) {\n interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio\n }\n else if (utils.is.bool(options.square)) {\n interactable.options.resize.square = options.square\n }\n\n return interactable\n }\n if (utils.is.bool(options)) {\n interactable.options.resize.enabled = options\n\n return interactable\n }\n return interactable.options.resize\n}\n\nfunction checkResizeEdge (name: string, value: any, page: Interact.Point, element: Node, interactableElement: Element, rect: Interact.Rect, margin: number) {\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 initCursors (browser: typeof import ('@interactjs/utils/browser').default) {\n return (browser.isIe9 ? {\n x : 'e-resize',\n y : 's-resize',\n xy: 'se-resize',\n\n top : 'n-resize',\n left : 'w-resize',\n bottom : 's-resize',\n right : 'e-resize',\n topleft : 'se-resize',\n bottomright: 'se-resize',\n topright : 'ne-resize',\n bottomleft : 'ne-resize',\n } : {\n x : 'ew-resize',\n y : 'ns-resize',\n xy: 'nwse-resize',\n\n top : 'ns-resize',\n left : 'ew-resize',\n bottom : 'ns-resize',\n right : 'ew-resize',\n topleft : 'nwse-resize',\n bottomright: 'nwse-resize',\n topright : 'nesw-resize',\n bottomleft : 'nesw-resize',\n })\n}\n\nfunction start ({ iEvent, interaction }) {\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,\n right : 0,\n width : 0,\n top : 0,\n bottom: 0,\n 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 resize\n","import { Scope } from '@interactjs/core/scope'\nimport drag, { DragEvent } from './drag'\nimport drop from './drop'\nimport gesture, { GestureEvent } from './gesture'\nimport resize, { ResizeEvent } from './resize'\n\nfunction install (scope: Scope) {\n gesture.install(scope)\n resize.install(scope)\n drag.install(scope)\n drop.install(scope)\n}\n\nexport {\n gesture,\n GestureEvent,\n resize,\n ResizeEvent,\n drag,\n DragEvent,\n drop,\n install,\n}\n","import * as domUtils from '@interactjs/utils/domUtils'\nimport * as is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport { getStringOptionResult } from '@interactjs/utils/rect'\nimport { getWindow } from '@interactjs/utils/window'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoScroll: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n autoScroll?: Interact.AutoScrollOption\n }\n}\n\nfunction install (scope: Scope) {\n const {\n interactions,\n defaults,\n actions,\n } = scope\n\n scope.autoScroll = autoScroll\n\n interactions.signals.on('new', (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\nconst autoScroll = {\n defaults: {\n enabled : false,\n margin : 60,\n\n // the item that is scrolled (Window or HTMLElement)\n container: null as Window | Element,\n\n // the scroll speed in pixels per second\n speed : 300,\n } as Interact.AutoScrollOption,\n\n interaction: null,\n i: null, // the handle returned by window.setInterval\n x: 0,\n y: 0, // Direction each pulse is to scroll in\n\n isScrolling: false,\n prevTime: 0,\n margin: 0,\n speed: 0,\n\n start (interaction) {\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 () {\n autoScroll.isScrolling = false\n if (autoScroll.interaction) {\n autoScroll.interaction.autoScroll = null\n }\n raf.cancel(autoScroll.i)\n },\n\n // scroll the window by the values in scroll.x/y\n scroll () {\n const { interaction } = autoScroll\n const { 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 (interactable, actionName) {\n const options = interactable.options\n\n return options[actionName].autoScroll && options[actionName].autoScroll.enabled\n },\n onInteractionMove ({ interaction, pointer }) {\n if (!(interaction.interacting() &&\n autoScroll.check(interaction.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\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 { warnOnce } from '@interactjs/utils'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport * as is from '@interactjs/utils/is'\n\n// TODO: there seems to be a @babel/preset-typescript bug causing regular import\n// syntax to remain in js output\ntype Scope = import ('@interactjs/core/scope').Scope\ntype Actions = import ('@interactjs/core/scope').Actions\ntype Interaction = import ('@interactjs/core/Interaction').default\ntype Interactable = import ('@interactjs/core/Interactable').default\n\ntype IgnoreValue = string | Element | boolean\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n getAction: typeof getAction\n defaultActionChecker: (pointer: any, event: any, interaction: any, element: any) => any\n styleCursor: typeof styleCursor\n actionChecker: typeof actionChecker\n testIgnoreAllow: typeof testIgnoreAllow\n testAllow: typeof testAllow\n testIgnore: typeof testIgnore\n ignoreFrom: (...args: any) => boolean\n allowFrom: (...args: any) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n pointerIsDown: boolean\n }\n}\n\nfunction install (scope: Scope) {\n const {\n /** @lends Interactable */\n Interactable, // tslint:disable-line no-shadowed-variable\n actions,\n } = scope\n\n Interactable.prototype.getAction = getAction\n\n /**\n * ```js\n * interact(element, { ignoreFrom: document.getElementById('no-action') });\n * // or\n * interact(element).ignoreFrom('input, textarea, a');\n * ```\n * @deprecated\n * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n * of it's parents match the given CSS selector or Element, no\n * drag/resize/gesture is started.\n *\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to not ignore any elements\n * @return {string | Element | object} The current ignoreFrom value or this\n * Interactable\n */\n Interactable.prototype.ignoreFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('ignoreFrom', newValue)\n }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).')\n\n /**\n * @deprecated\n *\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to allow from any element\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */\n Interactable.prototype.allowFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('allowFrom', newValue)\n }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).')\n\n Interactable.prototype.testIgnore = testIgnore\n\n Interactable.prototype.testAllow = testAllow\n\n Interactable.prototype.testIgnoreAllow = testIgnoreAllow\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 = actionChecker\n\n /**\n * Returns or sets whether the the cursor should be changed depending on the\n * action that would be performed if the mouse were pressed and dragged.\n *\n * @param {boolean} [newValue]\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.styleCursor = styleCursor\n\n Interactable.prototype.defaultActionChecker = function (this: Interactable, pointer, event, interaction, element) {\n return defaultActionChecker(this, pointer, event, interaction, element, actions)\n }\n}\n\nfunction getAction (this: Interactable, pointer: Interact.PointerType, event: Interact.PointerEventType, interaction: Interaction, element: 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\nfunction defaultActionChecker (interactable: Interactable, pointer: Interact.PointerType, event: Interact.PointerEventType, interaction: Interaction, element: Element, actions: Actions) {\n const rect = interactable.getRect(element)\n const buttons = (event as MouseEvent).buttons || ({\n 0: 1,\n 1: 4,\n 3: 8,\n 4: 16,\n })[(event as MouseEvent).button as 0 | 1 | 3 | 4]\n let action = null\n\n for (const actionName of actions.names) {\n // check mouseButton setting if the pointer is down\n if (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & interactable.options[actionName].mouseButtons) === 0) {\n continue\n }\n\n action = (actions[actionName as keyof Actions] as any).checker(pointer, event, interactable, element, interaction, rect)\n\n if (action) {\n return action\n }\n }\n}\n\nfunction styleCursor (this: Interactable, newValue?: boolean) {\n if (is.bool(newValue)) {\n this.options.styleCursor = newValue\n\n return this\n }\n\n if (newValue === null) {\n delete this.options.styleCursor\n\n return this\n }\n\n return this.options.styleCursor\n}\n\nfunction actionChecker (this: Interactable, checker: any) {\n if (is.func(checker)) {\n this.options.actionChecker = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.options.actionChecker\n\n return this\n }\n\n return this.options.actionChecker\n}\n\nfunction testIgnoreAllow (this: Interactable, options: { ignoreFrom: IgnoreValue, allowFrom: IgnoreValue }, interactableElement: Element, eventTarget: Element) {\n return (!this.testIgnore(options.ignoreFrom, interactableElement, eventTarget) &&\n this.testAllow(options.allowFrom, interactableElement, eventTarget))\n}\n\nfunction testAllow (this: Interactable, allowFrom: IgnoreValue, interactableElement: Element, element: 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\nfunction testIgnore (this: Interactable, ignoreFrom: IgnoreValue, interactableElement: Element, element: 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\nexport default { install }\n","import * as utils from '@interactjs/utils'\nimport InteractableMethods from './InteractableMethods'\ntype Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n maxInteractions: (newValue: any) => any\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoStart: AutoStart\n maxInteractions: (...args: any) => any\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n manualStart?: boolean\n max?: number\n maxPerElement?: number\n allowFrom?: string | Element\n ignoreFrom?: string | Element\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons?: 0 | 1 | 2 | 4 | 16\n }\n}\n\nexport interface AutoStart {\n // Allow this many interactions to happen simultaneously\n maxInteractions: number\n withinInteractionLimit: typeof withinInteractionLimit\n cursorElement: Element\n signals: utils.Signals\n}\n\nfunction install (scope: Scope) {\n const {\n interact,\n interactions,\n defaults,\n } = scope\n\n interact.use(InteractableMethods)\n\n // set cursor style on mousedown\n interactions.signals.on('down', ({ interaction, pointer, event, eventTarget }) => {\n if (interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n })\n\n // set cursor style on mousemove\n interactions.signals.on('move', ({ interaction, pointer, event, eventTarget }) => {\n if (interaction.pointerType !== 'mouse' ||\n interaction.pointerIsDown ||\n interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n })\n\n interactions.signals.on('move', (arg) => {\n const { interaction } = arg\n\n if (!interaction.pointerIsDown ||\n interaction.interacting() ||\n !interaction.pointerWasMoved ||\n !interaction.prepared.name) {\n return\n }\n\n scope.autoStart.signals.fire('before-start', arg)\n\n const 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()\n }\n else {\n interaction.start(interaction.prepared, target, interaction.element)\n }\n }\n })\n\n interactions.signals.on('stop', ({ interaction }) => {\n const target = interaction.target\n\n if (target && target.options.styleCursor) {\n setCursor(interaction.element, '', scope)\n }\n })\n\n defaults.base.actionChecker = null\n defaults.base.styleCursor = true\n\n utils.extend(defaults.perAction, {\n manualStart: false,\n max: Infinity,\n maxPerElement: 1,\n allowFrom: null,\n ignoreFrom: null,\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons: 1,\n });\n\n /**\n * Returns or sets the maximum number of concurrent interactions allowed. By\n * default only 1 interaction is allowed at a time (for backwards\n * compatibility). To allow multiple interactions on the same Interactables and\n * elements, you need to enable it in the draggable, resizable and gesturable\n * `'max'` and `'maxPerElement'` options.\n *\n * @alias module:interact.maxInteractions\n *\n * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n */\n (interact as any /* FIXME */).maxInteractions = (newValue) => maxInteractions(newValue, scope)\n\n scope.autoStart = {\n // Allow this many interactions to happen simultaneously\n maxInteractions: Infinity,\n withinInteractionLimit,\n cursorElement: null,\n signals: new utils.Signals(),\n }\n}\n\n// Check if the current 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 { action: null, target: null, element: null }\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 { action: null, target: null, element: null }\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 })\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 false }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name\n\n if (!interaction.interacting()) { continue }\n\n activeInteractions++\n\n if (activeInteractions >= autoStartMax) {\n return false\n }\n\n if (interaction.target !== interactable) { continue }\n\n targetCount += otherAction === action.name ? 1 : 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 { ActionName } from '@interactjs/core/scope'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport * as is from '@interactjs/utils/is'\nimport autoStart from './base'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\nfunction install (scope: Scope) {\n scope.autoStart.signals.on('before-start', ({ interaction, eventTarget, dx, dy }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n // check if a drag is in the correct axis\n const absX = Math.abs(dx)\n const absY = Math.abs(dy)\n const targetOptions = interaction.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 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 return interactable\n }\n }\n }\n\n // check all interactables\n while (is.element(element)) {\n const interactable = scope.interactables.forEachMatch(element, getDraggable)\n\n if (interactable) {\n interaction.prepared.name = ActionName.Drag\n interaction.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","type Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n hold?: number\n delay?: number\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoStartHoldTimer?: any\n }\n}\n\nfunction install (scope: 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', (interaction) => {\n interaction.autoStartHoldTimer = null\n })\n\n autoStart.signals.on('prepared', ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.autoStartHoldTimer = setTimeout(() => {\n interaction.start(interaction.prepared, interaction.target, interaction.element)\n }, hold)\n }\n })\n\n interactions.signals.on('move', ({ interaction, duplicate }) => {\n if (interaction.pointerWasMoved && !duplicate) {\n clearTimeout(interaction.autoStartHoldTimer)\n }\n })\n\n // prevent regular down->move autoStart\n autoStart.signals.on('before-start', ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.prepared.name = null\n }\n })\n}\n\nfunction getHoldDuration (interaction) {\n const actionName = interaction.prepared && interaction.prepared.name\n\n if (!actionName) { return null }\n\n const options = interaction.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 dragAxis from './dragAxis'\nimport hold from './hold'\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 { matchesSelector, nodeContains } from '@interactjs/utils/domUtils'\nimport events from '@interactjs/utils/events'\nimport * as is from '@interactjs/utils/is'\nimport { getWindow } from '@interactjs/utils/window'\n\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 /**\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 if (interaction.element &&\n (interaction.element === event.target ||\n nodeContains(interaction.element, event.target))) {\n interaction.target.checkAndPreventDefault(event)\n return\n }\n }\n }\n}\n\nexport type Install = typeof install\n\nexport default { install }\n","import { Scope } from '@interactjs/core/scope'\nimport extend from '@interactjs/utils/extend'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n modifiers?: any\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n modifiers?: any\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n modifiers?: any[]\n }\n interface Options {\n drag?: Interact.DraggableOptions\n modifiers?: any[]\n }\n}\n\nfunction install (scope: Scope) {\n const {\n interactions,\n } = scope\n\n scope.defaults.perAction.modifiers = []\n scope.modifiers = {}\n\n interactions.signals.on('new', (interaction) => {\n interaction.modifiers = {\n startOffset: { left: 0, right: 0, top: 0, bottom: 0 },\n offsets : {},\n states : null,\n result : null,\n }\n })\n\n interactions.signals.on('before-action-start', (arg) => {\n start(arg as any, arg.interaction.coords.start.page, scope.modifiers)\n })\n\n interactions.signals.on('action-resume', (arg) => {\n beforeMove(arg as any)\n start(arg as any, 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 as any)\n interactions.signals.on('after-action-move', restoreCoords as any)\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 (\n { interaction, phase }: Interact.SignalArg,\n pageCoords: Interact.Point,\n registeredModifiers,\n) {\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)) as Interact.Rect & Interact.Rect2\n\n if (!('width' in rect)) { rect.width = rect.right - rect.left }\n if (!('height' in rect)) { rect.height = rect.bottom - rect.top }\n\n const startOffset = getRectOffset(rect, pageCoords)\n\n interaction.modifiers.startOffset = startOffset\n interaction.modifiers.startDelta = { x: 0, y: 0 }\n\n const arg: Partial = {\n interaction,\n interactable,\n element,\n pageCoords,\n phase,\n rect,\n startOffset,\n states,\n preEnd: false,\n requireEndOnly: false,\n }\n\n interaction.modifiers.states = states\n interaction.modifiers.result = null\n startAll(arg)\n\n arg.pageCoords = extend({}, interaction.coords.start.page)\n\n const result = interaction.modifiers.result = setAll(arg)\n\n return result\n}\n\nfunction setAll (arg: Partial) {\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 }): void | false {\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): void | false {\n const { interaction, event, noPreEnd } = arg\n const states = interaction.modifiers.states\n\n if (noPreEnd || !states || !states.length) {\n return\n }\n\n let didPreEnd = false\n\n for (const state of states) {\n arg.state = state\n const { options, methods } = state\n\n const endResult = methods.beforeEnd && methods.beforeEnd(arg)\n\n if (endResult === false) {\n 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 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\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?: boolean, requireEndOnly?: boolean, phase?: string) {\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 { EventPhase } from '@interactjs/core/InteractEvent'\nimport modifiers from '@interactjs/modifiers/base'\nimport * as utils from '@interactjs/utils'\nimport raf from '@interactjs/utils/raf'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/core/InteractEvent' {\n // eslint-disable-next-line no-shadow\n enum EventPhase {\n Resume = 'resume',\n InertiaStart = 'inertiastart',\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n inertia?: any\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n inertia?: {\n enabled?: boolean,\n resistance?: number, // the lambda in exponential decay\n minSpeed?: number, // target speed must be above this for inertia to start\n endSpeed?: number, // the speed at which inertia is slow enough to stop\n allowResume?: true, // allow resuming an action in inertia phase\n smoothEndDuration?: number, // animate to snap/restrict endOnly if there's no inertia\n }\n }\n}\n\n(EventPhase as any).Resume = 'resume';\n(EventPhase as any).InertiaStart = 'inertiastart'\n\nfunction install (scope: Scope) {\n const {\n interactions,\n defaults,\n } = scope\n\n interactions.signals.on('new', (interaction) => {\n interaction.inertia = {\n active : false,\n smoothEnd : false,\n allowResume: false,\n\n startEvent: null,\n upCoords : {},\n\n xe: 0,\n ye: 0,\n sx: 0,\n sy: 0,\n\n t0: 0,\n vx0: 0,\n vys: 0,\n duration: 0,\n\n lambda_v0: 0,\n one_ve_v0: 0,\n i : null,\n }\n })\n\n // FIXME proper signal typing\n interactions.signals.on('before-action-end', (arg) => release(arg as any, scope))\n interactions.signals.on('down', (arg) => resume(arg as any, scope))\n interactions.signals.on('stop', (arg) => stop(arg as any))\n\n defaults.perAction.inertia = {\n enabled : false,\n resistance : 10, // the lambda in exponential decay\n minSpeed : 100, // target speed must be above this for inertia to start\n endSpeed : 10, // the speed at which inertia is slow enough to stop\n allowResume : true, // allow resuming an action in inertia phase\n smoothEndDuration: 300, // animate to snap/restrict endOnly if there's no inertia\n }\n}\n\nfunction resume ({ interaction, event, pointer, eventTarget }: Interact.SignalArg, scope: 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 // 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, EventPhase.Resume, interaction.element)\n\n interaction._fireEvent(resumeEvent)\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur)\n break\n }\n\n element = utils.dom.parentNode(element)\n }\n }\n}\n\nfunction release ({ interaction, event, noPreEnd }: Interact.SignalArg, scope: Scope) {\n const state = interaction.inertia\n\n if (!interaction.interacting() ||\n (interaction.simulation && interaction.simulation.active) ||\n noPreEnd) {\n return null\n }\n\n const options = getOptions(interaction)\n\n const now = 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: ReturnType\n\n // check if inertia should be started\n const inertiaPossible = (options && options.enabled &&\n interaction.prepared.name !== 'gesture' &&\n event !== state.startEvent)\n\n const inertia = (inertiaPossible &&\n (now - interaction.coords.cur.timeStamp) < 50 &&\n pointerSpeed > options.minSpeed &&\n pointerSpeed > options.endSpeed)\n\n const modifierArg = {\n interaction,\n pageCoords: utils.extend({}, interaction.coords.cur.page),\n states: inertiaPossible && interaction.modifiers.states.map(\n (modifierStatus) => utils.extend({}, modifierStatus)\n ),\n preEnd: true,\n requireEndOnly: true,\n }\n\n // smoothEnd\n if (inertiaPossible && !inertia) {\n modifierResult = modifiers.setAll(modifierArg)\n\n if (modifierResult.changed) {\n smoothEnd = true\n }\n }\n\n if (!(inertia || smoothEnd)) { return null }\n\n utils.pointer.copyCoords(state.upCoords, interaction.coords.cur)\n\n interaction.pointers[0].pointer = state.startEvent = new scope.InteractEvent(\n interaction,\n event,\n // FIXME add proper typing Action.name\n interaction.prepared.name as T,\n EventPhase.InertiaStart,\n interaction.element,\n )\n\n state.t0 = now\n\n state.active = true\n state.allowResume = options.allowResume\n interaction.simulation = state\n\n interaction.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 }: Interact.SignalArg) {\n const state = interaction.inertia\n if (state.active) {\n raf.cancel(state.i)\n state.active = false\n interaction.simulation = null\n }\n}\n\nfunction calcInertia (interaction: Interact.Interaction, state) {\n const options = getOptions(interaction)\n const lambda = options.resistance\n const inertiaDur = -Math.log(options.endSpeed / state.v0) / lambda\n\n state.x0 = interaction.prevEvent.page.x\n state.y0 = interaction.prevEvent.page.y\n state.t0 = state.startEvent.timeStamp / 1000\n state.sx = state.sy = 0\n\n state.modifiedXe = state.xe = (state.vx0 - inertiaDur) / lambda\n state.modifiedYe = state.ye = (state.vy0 - inertiaDur) / lambda\n state.te = inertiaDur\n\n state.lambda_v0 = lambda / state.v0\n state.one_ve_v0 = 1 - options.endSpeed / state.v0\n}\n\nfunction inertiaTick (interaction: Interact.Interaction) {\n updateInertiaCoords(interaction)\n utils.pointer.setCoordDeltas(interaction.coords.delta, interaction.coords.prev, interaction.coords.cur)\n utils.pointer.setCoordVelocity(interaction.coords.velocity, interaction.coords.delta)\n\n const state = interaction.inertia\n const options = getOptions(interaction)\n const lambda = options.resistance\n const t = new Date().getTime() / 1000 - state.t0\n\n if (t < state.te) {\n const progress = 1 - (Math.exp(-lambda * t) - state.lambda_v0) / state.one_ve_v0\n\n if (state.modifiedXe === state.xe && state.modifiedYe === state.ye) {\n state.sx = state.xe * progress\n state.sy = state.ye * progress\n }\n else {\n const quadPoint = utils.getQuadraticCurvePoint(\n 0, 0,\n state.xe, state.ye,\n state.modifiedXe, state.modifiedYe,\n progress)\n\n state.sx = quadPoint.x\n state.sy = quadPoint.y\n }\n\n interaction.move()\n\n state.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: Interact.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: Interact.Interaction) {\n const state = interaction.inertia\n\n // return if inertia isn't running\n if (!state.active) { return }\n\n const pageUp = state.upCoords.page\n const clientUp = state.upCoords.client\n\n utils.pointer.setCoords(interaction.coords.cur, [ {\n pageX : pageUp.x + state.sx,\n pageY : pageUp.y + state.sy,\n clientX: clientUp.x + state.sx,\n clientY: clientUp.y + state.sy,\n } ])\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","/** @module interact */\n\nimport { Options } from '@interactjs/core/defaultOptions'\nimport Interactable from '@interactjs/core/Interactable'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport browser from '@interactjs/utils/browser'\nimport events from '@interactjs/utils/events'\n\nexport interface Plugin {\n install (scope: Scope): void\n [key: string]: any\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n interact: InteractStatic\n _plugins: Plugin[]\n }\n}\n\nexport interface InteractStatic {\n (target: Interact.Target, options?: Options): Interactable\n on: typeof on\n pointerMoveTolerance: typeof pointerMoveTolerance\n stop: typeof stop\n supportsPointerEvent: typeof supportsPointerEvent\n supportsTouch: typeof supportsTouch\n debug: typeof debug\n off: typeof off\n isSet: typeof isSet\n use: typeof use\n getPointerAverage: typeof utils.pointer.pointerAverage\n getTouchBBox: typeof utils.pointer.touchBBox\n getTouchDistance: typeof utils.pointer.touchDistance\n getTouchAngle: typeof utils.pointer.touchAngle\n getElementRect: typeof utils.dom.getElementRect\n getElementClientRect: typeof utils.dom.getElementClientRect\n matchesSelector: typeof utils.dom.matchesSelector\n closest: typeof utils.dom.closest\n addDocument: typeof scope.addDocument\n removeDocument: typeof scope.removeDocument\n version: string\n}\n\nconst globalEvents: any = {}\nconst scope = new Scope()\n\n/**\n * ```js\n * interact('#draggable').draggable(true)\n *\n * var rectables = interact('rect')\n * rectables\n * .gesturable(true)\n * .on('gesturemove', function (event) {\n * // ...\n * })\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @global\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\nexport const interact: InteractStatic = function interact (target: Interact.Target, options?: any) {\n let interactable = scope.interactables.get(target, options)\n\n if (!interactable) {\n interactable = scope.interactables.new(target, options)\n interactable.events.global = globalEvents\n }\n\n return interactable\n} as InteractStatic\n\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 = use\nfunction use (plugin: Plugin) {\n if (scope._plugins.indexOf(plugin) !== -1) {\n return interact\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 = isSet\nfunction isSet (element: Element, options?: any) {\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 = on\nfunction on (type: string | Interact.EventTypes, listener: Interact.ListenersArg, options?) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (utils.is.array(type)) {\n for (const eventType of (type as any[])) {\n interact.on(eventType, listener, options)\n }\n\n return interact\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.on(prop, (type as Interact.EventTypes)[prop], listener)\n }\n\n return interact\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (utils.arr.contains(scope.actions.eventTypes, type)) {\n // if this type of event was never bound\n if (!globalEvents[type]) {\n globalEvents[type] = [listener]\n }\n else {\n globalEvents[type].push(listener)\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n events.add(scope.document, type, listener as Interact.Listener, { options })\n }\n\n return interact\n}\n\n/**\n * Removes a global InteractEvent listener or DOM event from `document`\n *\n * @alias module:interact.off\n *\n * @param {string | array | object} type The types of events that were listened\n * for\n * @param {function} listener The listener function to be removed\n * @param {object | boolean} options [options] object or useCapture flag for\n * removeEventListener\n * @return {object} interact\n */\ninteract.off = off\nfunction off (type, listener, options) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (utils.is.array(type)) {\n for (const eventType of type) {\n interact.off(eventType, listener, options)\n }\n\n return interact\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.off(prop, type[prop], listener)\n }\n\n return interact\n }\n\n if (!utils.arr.contains(scope.actions.eventTypes, type)) {\n events.remove(scope.document, type, listener, options)\n }\n else {\n let index\n\n if (type in globalEvents &&\n (index = globalEvents[type].indexOf(listener)) !== -1) {\n globalEvents[type].splice(index, 1)\n }\n }\n\n return interact\n}\n\n/**\n * Returns an object which exposes internal data\n * @alias module:interact.debug\n *\n * @return {object} An object with properties that outline the current state\n * and expose internal functions and variables\n */\ninteract.debug = debug\nfunction debug () {\n return scope\n}\n\n// expose the functions used to calculate multi-touch properties\ninteract.getPointerAverage = utils.pointer.pointerAverage\ninteract.getTouchBBox = utils.pointer.touchBBox\ninteract.getTouchDistance = utils.pointer.touchDistance\ninteract.getTouchAngle = utils.pointer.touchAngle\n\ninteract.getElementRect = utils.dom.getElementRect\ninteract.getElementClientRect = utils.dom.getElementClientRect\ninteract.matchesSelector = utils.dom.matchesSelector\ninteract.closest = utils.dom.closest\n\n/**\n * @alias module:interact.supportsTouch\n *\n * @return {boolean} Whether or not the browser supports touch input\n */\ninteract.supportsTouch = supportsTouch\nfunction supportsTouch () {\n return browser.supportsTouch\n}\n\n/**\n * @alias module:interact.supportsPointerEvent\n *\n * @return {boolean} Whether or not the browser supports PointerEvents\n */\ninteract.supportsPointerEvent = supportsPointerEvent\nfunction supportsPointerEvent () {\n return browser.supportsPointerEvent\n}\n\n/**\n * Cancels all interactions (end events are not fired)\n *\n * @alias module:interact.stop\n *\n * @return {object} interact\n */\ninteract.stop = stop\nfunction stop () {\n for (const interaction of scope.interactions.list) {\n interaction.stop()\n }\n\n return interact\n}\n\n/**\n * Returns or sets the distance the pointer must be moved before an action\n * sequence occurs. This also affects tolerance for tap events.\n *\n * @alias module:interact.pointerMoveTolerance\n *\n * @param {number} [newValue] The movement from the start position must be greater than this value\n * @return {interact | number}\n */\ninteract.pointerMoveTolerance = pointerMoveTolerance\nfunction pointerMoveTolerance (newValue) {\n if (utils.is.number(newValue)) {\n scope.interactions.pointerMoveTolerance = newValue\n\n return interact\n }\n\n return scope.interactions.pointerMoveTolerance\n}\n\nscope.interactables.signals.on('unset', ({ interactable }) => {\n scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1)\n\n // Stop related interactions when an Interactable is unset\n for (const interaction of scope.interactions.list) {\n if (interaction.target === interactable && interaction.interacting() && interaction._ending) {\n interaction.stop()\n }\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 = {} as { [key: string]: number }\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?: Interact.Point) {\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 Interaction from '@interactjs/core/Interaction'\nimport extend from '@interactjs/utils/extend'\nimport rectUtils from '@interactjs/utils/rect'\nimport restrict from './pointer'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Action {\n linkedEdges?: { [key: string]: boolean }\n }\n}\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 }: { interaction: Interaction, state: any }) {\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 coords: Interact.Point,\n interaction: Interaction,\n state: any\n}) {\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 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 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 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\nconst snapEdges = {\n start,\n set,\n defaults: extend(clone(snapSize.defaults), {\n offset: { x: 0, y: 0 },\n }),\n}\n\nexport default snapEdges\n","import Eventable from '@interactjs/core/Eventable'\nimport Interaction from '@interactjs/core/Interaction'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport PointerEvent from './PointerEvent'\n\ntype EventTargetList = Array<{\n eventable: Eventable,\n element: Window | Document | Element,\n props: { [key: string]: any },\n}>\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n pointerEvents: typeof pointerEvents\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n prevTap?: PointerEvent\n tapTime?: number\n }\n}\n\ndeclare module '@interactjs/core/PointerInfo' {\n interface PointerInfo {\n hold: {\n duration: number\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n pointerEvents?: any\n }\n}\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 interaction: Interaction,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n eventTarget: EventTarget,\n targets?: EventTargetList,\n pointerEvent?: PointerEvent,\n type: T\n}) {\n const {\n interaction, pointer, event, eventTarget,\n type = (arg as any).pointerEvent.type,\n targets = collectEventTargets(arg),\n } = arg\n\n const {\n pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction),\n } = arg\n\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n targets,\n type,\n pointerEvent,\n }\n\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n\n for (const prop in target.props || {}) {\n (pointerEvent as any)[prop] = target.props[prop]\n }\n\n const origin = utils.getOriginXY(target.eventable, target.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,\n pointer,\n event,\n 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 interaction: Interaction,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n eventTarget: EventTarget,\n type: T\n}) {\n const pointerIndex = interaction.getPointerIndex(pointer)\n const pointerInfo = interaction.pointers[pointerIndex]\n\n // do not fire a tap event if the pointer was moved before being lifted\n if (type === 'tap' && (interaction.pointerWasMoved ||\n // or if the pointerup target is different to the pointerdown target\n !(pointerInfo && pointerInfo.downTarget === eventTarget))) {\n return []\n }\n\n const path = utils.dom.getPath(eventTarget)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n path,\n targets: [] as EventTargetList,\n 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: Scope) {\n const {\n interactions,\n } = scope\n\n scope.pointerEvents = pointerEvents\n scope.defaults.actions.pointerEvents = pointerEvents.defaults\n\n interactions.signals.on('new', (interaction) => {\n interaction.prevTap = null // the most recent tap event on this interaction\n interaction.tapTime = 0 // time of the most recent tap event\n })\n\n interactions.signals.on('update-pointer', ({ down, pointerInfo }) => {\n if (!down && pointerInfo.hold) {\n return\n }\n\n pointerInfo.hold = { duration: Infinity, timeout: null }\n })\n\n interactions.signals.on('move', ({ interaction, pointer, event, eventTarget, duplicateMove }) => {\n const pointerIndex = interaction.getPointerIndex(pointer)\n\n if (!duplicateMove && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {\n if (interaction.pointerIsDown) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout)\n }\n\n fire({\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'move',\n })\n }\n })\n\n interactions.signals.on('down', ({ interaction, pointer, event, eventTarget, pointerIndex }) => {\n const timer = interaction.pointers[pointerIndex].hold\n const path = utils.dom.getPath(eventTarget)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'hold',\n targets: [] as EventTargetList,\n path,\n 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(() => {\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, ({ 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: string) {\n return function ({ interaction, pointer, event, eventTarget }: any) {\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(() => {\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 { Scope } from '@interactjs/core/scope'\nimport { merge } from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\ntype Interactable = import ('@interactjs/core/Interactable').default\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n pointerEvents: typeof pointerEventsMethod\n __backCompatOption: (optionName: string, newValue: any) => any\n }\n}\n\nfunction install (scope: Scope) {\n const {\n pointerEvents,\n actions,\n Interactable,\n interactables,\n } = scope\n\n pointerEvents.signals.on('collect-targets', ({ targets, element, type, eventTarget }: any) => {\n scope.interactables.forEachMatch(element, (interactable: Interactable) => {\n const eventable = interactable.events\n const options = eventable.options\n\n if (\n eventable.types[type] &&\n eventable.types[type].length &&\n is.element(element) &&\n interactable.testIgnoreAllow(options, element, eventTarget)) {\n targets.push({\n element,\n eventable,\n props: { interactable },\n })\n }\n })\n })\n\n interactables.signals.on('new', ({ interactable }) => {\n interactable.events.getRect = function (element: Element) {\n return interactable.getRect(element)\n }\n })\n\n interactables.signals.on('set', ({ interactable, options }) => {\n extend(interactable.events.options, pointerEvents.defaults)\n extend(interactable.events.options, options.pointerEvents || {})\n })\n\n merge(actions.eventTypes, pointerEvents.types)\n\n Interactable.prototype.pointerEvents = pointerEventsMethod\n\n const __backCompatOption = Interactable.prototype._backCompatOption\n\n Interactable.prototype._backCompatOption = function (optionName, newValue) {\n const ret = __backCompatOption.call(this, optionName, newValue)\n\n if (ret === this) {\n this.events.options[optionName] = newValue\n }\n\n return ret\n }\n}\n\nfunction pointerEventsMethod (this: Interactable, options: any) {\n extend(this.events.options, options)\n\n return this\n}\n\nexport default {\n 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 { pointerEvents, holdRepeat, interactableTargets, install }\n","import Interactable from '@interactjs/core/Interactable'\nimport { Action, Interaction } from '@interactjs/core/Interaction'\nimport { newInteraction } from '@interactjs/core/interactions'\nimport { Scope } from '@interactjs/core/scope'\nimport { arr, extend, is, pointer as pointerUtils, rect as rectUtils, win } from '@interactjs/utils'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n reflow: (action: Action) => ReturnType\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n _reflowResolve: () => void\n }\n}\n\nexport function install (scope: Scope) {\n const {\n actions,\n interactions,\n /** @lends Interactable */\n // eslint-disable-next-line no-shadow\n Interactable,\n } = scope\n\n // add action reflow event types\n for (const actionName of actions.names) {\n actions.eventTypes.push(`${actionName}reflow`)\n }\n\n // remove completed reflow interactions\n interactions.signals.on('stop', ({ interaction }) => {\n if (interaction.pointerType === '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: Interactable, action: Action, scope: Scope) {\n const elements = is.string(interactable.target)\n ? arr.from(interactable._context.querySelectorAll(interactable.target))\n : [interactable.target]\n\n // tslint:disable-next-line variable-name\n const Promise = (win.window as any).Promise\n const promises: Array> | null = Promise ? [] : null\n\n for (const element of elements) {\n const rect = interactable.getRect(element)\n\n if (!rect) { break }\n\n const runningInteraction = arr.find(\n scope.interactions.list,\n (interaction: Interaction) => {\n return interaction.interacting() &&\n interaction.target === interactable &&\n interaction.element === element &&\n interaction.prepared.name === action.name\n })\n let reflowPromise: Promise\n\n if (runningInteraction) {\n runningInteraction.move()\n\n reflowPromise = runningInteraction._reflowPromise || new Promise((resolve: any) => {\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: Scope, interactable: Interactable, element: Element, action: Action, event: any) {\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 as unknown as any).Promise\n ? new (win.window as unknown as any).Promise((resolve: any) => {\n interaction._reflowResolve = resolve\n })\n : null\n\n interaction._reflowPromise = reflowPromise\n interaction.start(action, interactable, element)\n\n if (interaction._interacting) {\n interaction.move(signalArg)\n interaction.end(event)\n }\n else {\n interaction.stop()\n }\n\n interaction.removePointer(event, event)\n interaction.pointerIsDown = false\n\n return reflowPromise\n}\n\nexport default { install }\n","import * as actions from '@interactjs/actions'\nimport autoScroll from '@interactjs/auto-scroll'\nimport * as autoStart from '@interactjs/auto-start'\nimport interactablePreventDefault from '@interactjs/core/interactablePreventDefault'\nimport inertia from '@interactjs/inertia'\nimport * as modifiers from '@interactjs/modifiers'\nimport modifiersBase from '@interactjs/modifiers/base'\nimport * as pointerEvents from '@interactjs/pointer-events'\nimport reflow from '@interactjs/reflow'\nimport interact, { scope } from './interact'\n\nexport function init (window: Window): typeof interact {\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\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 {\n interact,\n actions,\n autoScroll,\n interactablePreventDefault,\n inertia,\n modifiersBase as modifiers,\n pointerEvents,\n reflow,\n}\n","function createGrid (grid: (Interact.Rect | Interact.Point) & { range?: number, limits: Interact.Rect, offset: Interact.Point }) {\n const coordFields = [\n ['x', 'y'],\n ['left', 'top'],\n ['right', 'bottom'],\n ['width', 'height'],\n ].filter(([xField, yField]) => xField in grid || yField in grid)\n\n return function (x, y) {\n const {\n range,\n limits = {\n left : -Infinity,\n right : Infinity,\n top : -Infinity,\n bottom: Infinity,\n },\n offset = { x: 0, y: 0 },\n } = grid\n\n const result = { range }\n\n for (const [xField, yField] of coordFields) {\n const gridx = Math.round((x - offset.x) / grid[xField])\n const gridy = Math.round((y - offset.y) / grid[yField])\n\n result[xField] = Math.max(limits.left, Math.min(limits.right, gridx * grid[xField] + offset.x))\n result[yField] = Math.max(limits.top, Math.min(limits.bottom, gridy * grid[yField] + offset.y))\n }\n\n return result\n }\n}\n\nexport default createGrid\n","import interact, { init as initInteract } from '@interactjs/interact'\nimport * as modifiers from '@interactjs/modifiers'\nimport extend from '@interactjs/utils/extend'\nimport * as snappers from '@interactjs/utils/snappers'\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n modifiers?: any\n snappers?: typeof snappers\n createSnapGrid?: typeof snappers.grid\n }\n}\n\nif (typeof window === 'object' && !!window) {\n init(window)\n}\n\nexport function init (win: Window) {\n initInteract(win)\n\n return interact.use({\n install (scope) {\n interact.modifiers = extend(scope.modifiers, modifiers)\n interact.snappers = snappers\n interact.createSnapGrid = interact.snappers.grid\n },\n })\n}\n\nexport default interact\n\nif (typeof module === 'object' && !!module) {\n module.exports = interact\n}\n","export default (thing) => !!(thing && thing.Window) && (thing instanceof thing.Window)\n","// tslint:disable variable-name\n\nimport isWindow from './isWindow'\nimport win from './window'\n\nexport const window = (thing: any): thing is Window =>\n thing === win.window || isWindow(thing)\n\nexport const docFrag = (thing: any): thing is DocumentFragment =>\n object(thing) && thing.nodeType === 11\n\nexport const object = (thing: any): thing is { [index: string]: any } =>\n !!thing && (typeof thing === 'object')\n\nexport const func = (thing: any): thing is (...args: any) => any =>\n typeof thing === 'function'\n\nexport const number = (thing: any): thing is number =>\n typeof thing === 'number'\n\nexport const bool = (thing: any): thing is boolean =>\n typeof thing === 'boolean'\n\nexport const string = (thing: any): thing is string =>\n typeof thing === 'string'\n\nexport const element = (thing: any): thing is Element => {\n if (!thing || (typeof thing !== 'object')) { return false }\n\n const _window = win.getWindow(thing) || win.window\n\n return (/object|function/.test(typeof _window.Element)\n ? thing instanceof _window.Element // DOM2\n : thing.nodeType === 1 && typeof thing.nodeName === 'string')\n}\n\nexport const plainObject: typeof object = (thing: any): thing is { [index: string]: any } =>\n object(thing) &&\n !!thing.constructor &&\n /function Object\\b/.test(thing.constructor.toString())\n\nexport const array = (thing: any): thing is any[] =>\n (object(thing) &&\n (typeof thing.length !== 'undefined') &&\n func(thing.splice))\n","export interface Defaults {\n base: BaseDefaults\n perAction: PerActionDefaults\n actions: ActionDefaults\n}\n\nexport interface ActionDefaults {\n [key: string]: Options\n}\n\nexport interface BaseDefaults {\n preventDefault?: 'auto' | 'never' | string\n deltaSource?: 'page' | 'client'\n [key: string]: any\n}\n\nexport interface PerActionDefaults {\n enabled?: boolean\n origin?: Interact.Point | string | Element\n listeners?: Interact.Listeners\n}\n\nexport interface Options extends BaseDefaults, PerActionDefaults {}\nexport interface OptionsArg extends BaseDefaults, Interact.OrBoolean {}\n\nexport const defaults: Defaults = {\n base: {\n preventDefault: 'auto',\n deltaSource: 'page',\n },\n\n perAction: {\n enabled: false,\n origin: { x: 0, y: 0 },\n },\n\n actions: {} as ActionDefaults,\n}\n\nexport default defaults\n","export default (x, y) => Math.sqrt(x * x + y * y)\n","import extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport hypot from '@interactjs/utils/hypot'\nimport defaults from './defaultOptions'\nimport Interactable from './Interactable'\nimport Interaction from './Interaction'\n\nexport enum EventPhase {\n Start = 'start',\n Move = 'move',\n End = 'end',\n _NONE = '',\n}\n\nexport class InteractEvent<\n T extends Interact.ActionName = Interact.ActionName,\n P extends EventPhase = EventPhase._NONE,\n> {\n type: string\n target: Element\n relatedTarget: Element | null\n currentTarget: Element\n screenX?: number\n screenY?: number\n button: number\n buttons: number\n ctrlKey: boolean\n shiftKey: boolean\n altKey: boolean\n metaKey: boolean\n // added by interact.js\n interactable: Interactable\n interaction: any\n page: Interact.Point\n client: Interact.Point\n delta: Interact.Point\n x0: number\n y0: number\n t0: number\n dt: number\n duration: number\n clientX0: number\n clientY0: number\n velocity: Interact.Point\n speed: number\n swipe: ReturnType['getSwipe']>\n timeStamp: any\n // drag\n dragEnter?: Element\n dragLeave?: Element\n // resize\n axes?: Interact.Point\n // gestureend\n distance?: number\n angle?: number\n da?: number // angle change\n scale?: number // ratio of distance start to current event\n ds?: number // scale change\n box?: Interact.Rect // enclosing box of all points\n preEnd?: boolean\n immediatePropagationStopped = false\n propagationStopped = false\n\n /** */\n constructor (\n interaction: Interaction,\n event: Interact.PointerEventType,\n actionName: T,\n phase: P,\n element: Element,\n related?: Element,\n preEnd?: boolean,\n type?: string,\n ) {\n element = element || interaction.element\n\n const target = interaction.target\n // FIXME: add deltaSource to defaults\n const deltaSource = (((target && target.options) || defaults) as any).deltaSource as 'page' | 'client'\n const origin = getOriginXY(target, element, actionName)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const prevEvent = starting ? this : interaction.prevEvent\n const coords = starting\n ? interaction.coords.start\n : ending\n ? { page: prevEvent.page, client: prevEvent.client, timeStamp: interaction.coords.cur.timeStamp }\n : interaction.coords.cur\n\n this.page = extend({}, coords.page)\n this.client = extend({}, coords.client)\n this.timeStamp = coords.timeStamp\n\n if (!ending) {\n this.page.x -= origin.x\n this.page.y -= origin.y\n\n this.client.x -= origin.x\n this.client.y -= origin.y\n }\n\n this.ctrlKey = event.ctrlKey\n this.altKey = event.altKey\n this.shiftKey = event.shiftKey\n this.metaKey = event.metaKey\n this.button = (event as MouseEvent).button\n this.buttons = (event as MouseEvent).buttons\n this.target = element\n this.currentTarget = element\n this.relatedTarget = related || null\n this.preEnd = preEnd\n this.type = type || (actionName + (phase || ''))\n this.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 set pageX (value) { this.page.x = value }\n get pageY () { return this.page.y }\n set pageY (value) { this.page.y = value }\n\n get clientX () { return this.client.x }\n set clientX (value) { this.client.x = value }\n get clientY () { return this.client.y }\n set clientY (value) { this.client.y = value }\n\n get dx () { return this.delta.x }\n set dx (value) { this.delta.x = value }\n get dy () { return this.delta.y }\n set dy (value) { this.delta.y = value }\n\n get velocityX () { return this.velocity.x }\n set velocityX (value) { this.velocity.x = value }\n get velocityY () { return this.velocity.y }\n set velocityY (value) { this.velocity.y = value }\n\n getSwipe () {\n const interaction = this.interaction\n\n if (interaction.prevEvent.speed < 600 ||\n this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n return null\n }\n\n let angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI\n const overlap = 22.5\n\n if (angle < 0) {\n angle += 360\n }\n\n const left = 135 - overlap <= angle && angle < 225 + overlap\n const up = 225 - overlap <= angle && angle < 315 + overlap\n\n const right = !left && (315 - overlap <= angle || angle < 45 + overlap)\n const down = !up && 45 - overlap <= angle && angle < 135 + overlap\n\n return {\n up,\n down,\n left,\n right,\n angle,\n speed: interaction.prevEvent.speed,\n velocity: {\n x: interaction.prevEvent.velocityX,\n y: interaction.prevEvent.velocityY,\n },\n }\n }\n\n preventDefault () {}\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n}\n\nexport default InteractEvent\n","import browser from './browser'\nimport dom from './domObjects'\nimport * as domUtils from './domUtils'\nimport hypot from './hypot'\nimport * as is from './is'\nimport pointerExtend from './pointerExtend'\n\nconst pointerUtils = {\n copyCoords (dest, src) {\n dest.page = dest.page || {}\n dest.page.x = src.page.x\n dest.page.y = src.page.y\n\n dest.client = dest.client || {}\n dest.client.x = src.client.x\n dest.client.y = src.client.y\n\n dest.timeStamp = src.timeStamp\n },\n\n setCoordDeltas (targetObj, prev, cur) {\n targetObj.page.x = cur.page.x - prev.page.x\n targetObj.page.y = cur.page.y - prev.page.y\n targetObj.client.x = cur.client.x - prev.client.x\n targetObj.client.y = cur.client.y - prev.client.y\n targetObj.timeStamp = cur.timeStamp - prev.timeStamp\n },\n\n setCoordVelocity (targetObj, delta) {\n const dt = Math.max(delta.timeStamp / 1000, 0.001)\n\n targetObj.page.x = delta.page.x / dt\n targetObj.page.y = delta.page.y / dt\n targetObj.client.x = delta.client.x / dt\n targetObj.client.y = delta.client.y / dt\n targetObj.timeStamp = dt\n },\n\n isNativePointer (pointer) {\n return (pointer instanceof dom.Event || pointer instanceof dom.Touch)\n },\n\n // Get specified X/Y coords for mouse or event.touches[0]\n getXY (type, pointer, xy) {\n xy = xy || {}\n type = type || 'page'\n\n xy.x = pointer[type + 'X']\n xy.y = pointer[type + 'Y']\n\n return xy\n },\n\n getPageXY (pointer: Interact.PointerType | Interact.InteractEvent, page?: Interact.Point) {\n page = page || { x: 0, y: 0 }\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n pointerUtils.getXY('screen', pointer, page)\n\n page.x += window.scrollX\n page.y += window.scrollY\n }\n else {\n pointerUtils.getXY('page', pointer, page)\n }\n\n return page\n },\n\n getClientXY (pointer, client) {\n client = client || {}\n\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n pointerUtils.getXY('screen', pointer, client)\n }\n else {\n pointerUtils.getXY('client', pointer, client)\n }\n\n return client\n },\n\n getPointerId (pointer) {\n return is.number(pointer.pointerId) ? pointer.pointerId : pointer.identifier\n },\n\n setCoords (targetObj, pointers: any[], timeStamp?: number) {\n const pointer = (pointers.length > 1\n ? pointerUtils.pointerAverage(pointers)\n : pointers[0])\n\n const tmpXY = {} as { x: number, y: number }\n\n pointerUtils.getPageXY(pointer, tmpXY)\n targetObj.page.x = tmpXY.x\n targetObj.page.y = tmpXY.y\n\n pointerUtils.getClientXY(pointer, tmpXY)\n targetObj.client.x = tmpXY.x\n targetObj.client.y = tmpXY.y\n\n targetObj.timeStamp = is.number(timeStamp) ? timeStamp : new Date().getTime()\n },\n\n pointerExtend,\n\n getTouchPair (event) {\n const touches = []\n\n // array of touches is supplied\n if (is.array(event)) {\n touches[0] = event[0]\n touches[1] = event[1]\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0]\n touches[1] = event.changedTouches[0]\n }\n else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0]\n touches[1] = event.changedTouches[1]\n }\n }\n else {\n touches[0] = event.touches[0]\n touches[1] = event.touches[1]\n }\n }\n\n return touches\n },\n\n pointerAverage (pointers: PointerEvent[] | Event[]) {\n const average = {\n pageX : 0,\n pageY : 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n }\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop] += pointer[prop]\n }\n }\n for (const prop in average) {\n average[prop] /= pointers.length\n }\n\n return average\n },\n\n touchBBox (event: Event | PointerEvent[]) {\n if (!(event as any).length &&\n !((event as TouchEvent).touches &&\n (event as TouchEvent).touches.length > 1)) {\n return null\n }\n\n const touches = pointerUtils.getTouchPair(event)\n const minX = Math.min(touches[0].pageX, touches[1].pageX)\n const minY = Math.min(touches[0].pageY, touches[1].pageY)\n const maxX = Math.max(touches[0].pageX, touches[1].pageX)\n const maxY = Math.max(touches[0].pageY, touches[1].pageY)\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n width: maxX - minX,\n height: maxY - minY,\n }\n },\n\n touchDistance (event, deltaSource) {\n const sourceX = deltaSource + 'X'\n const sourceY = deltaSource + 'Y'\n const touches = pointerUtils.getTouchPair(event)\n\n const dx = touches[0][sourceX] - touches[1][sourceX]\n const dy = touches[0][sourceY] - touches[1][sourceY]\n\n return hypot(dx, dy)\n },\n\n touchAngle (event, deltaSource) {\n const sourceX = deltaSource + 'X'\n const sourceY = deltaSource + 'Y'\n const touches = pointerUtils.getTouchPair(event)\n const dx = touches[1][sourceX] - touches[0][sourceX]\n const dy = touches[1][sourceY] - touches[0][sourceY]\n const angle = 180 * Math.atan2(dy, dx) / Math.PI\n\n return angle\n },\n\n getPointerType (pointer) {\n return is.string(pointer.pointerType)\n ? pointer.pointerType\n : is.number(pointer.pointerType)\n ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType]\n // if the PointerEvent API isn't available, then the \"pointer\" must\n // be either a MouseEvent, TouchEvent, or Touch object\n : /touch/.test(pointer.type) || pointer instanceof dom.Touch\n ? 'touch'\n : 'mouse'\n },\n\n // [ event.target, event.currentTarget ]\n getEventTargets (event) {\n const path = is.func(event.composedPath) ? event.composedPath() : event.path\n\n return [\n domUtils.getActualElement(path ? path[0] : event.target),\n domUtils.getActualElement(event.currentTarget),\n ]\n },\n\n newCoords () {\n return {\n page : { x: 0, y: 0 },\n client : { x: 0, y: 0 },\n timeStamp: 0,\n }\n },\n\n coordsToEvent ({ 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 arr from '@interactjs/utils/arr'\nimport browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport { getElementRect, nodeContains, trySelector } from '@interactjs/utils/domUtils'\nimport events from '@interactjs/utils/events'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport { getWindow } from '@interactjs/utils/window'\nimport { ActionDefaults, Defaults, Options } from './defaultOptions'\nimport Eventable from './Eventable'\nimport { Actions } from './scope'\n\n/** */\nexport class Interactable implements Partial {\n protected get _defaults (): Defaults {\n return {\n base: {},\n perAction: {},\n actions: {} as ActionDefaults,\n }\n }\n\n options!: Required\n readonly _actions: Actions\n readonly target: Interact.Target\n readonly events = new Eventable()\n readonly _context: Element\n readonly _win: Window\n readonly _doc: Document\n\n /** */\n constructor (target: Interact.Target, options: any, defaultContext: Element | Node) {\n this._actions = options.actions\n this.target = target\n this._context = options.context || defaultContext\n this._win = getWindow(trySelector(target) ? this._context : target)\n this._doc = this._win.document\n\n this.set(options)\n }\n\n setOnEvents (actionName: string, phases: { [phase: string]: Interact.ListenersArg }) {\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: Interact.OrBoolean) {\n const defaults = this._defaults\n\n // for all the default per-action options\n for (const optionName in options) {\n const actionOptions = this.options[actionName]\n const optionValue = options[optionName]\n const isArray = is.array(optionValue)\n\n // remove old event listeners and add new ones\n if (optionName === 'listeners') {\n this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue)\n }\n\n // if the option value is an array\n if (isArray) {\n actionOptions[optionName] = arr.from(optionValue)\n }\n // if the option value is an object\n else if (!isArray && is.plainObject(optionValue)) {\n // copy the object\n actionOptions[optionName] = extend(\n actionOptions[optionName] || {},\n clone(optionValue))\n\n // set anabled field to true if it exists in the defaults\n if (is.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) {\n actionOptions[optionName].enabled = optionValue.enabled !== false\n }\n }\n // if the option value is a boolean and the default is an object\n else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n actionOptions[optionName].enabled = optionValue\n }\n // if it's anything else, do a plain assignment\n else {\n actionOptions[optionName] = optionValue\n }\n }\n }\n\n /**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {object} The object's bounding rectangle.\n */\n getRect (element: Element) {\n element = element || (is.element(this.target)\n ? this.target\n : null)\n\n if (is.string(this.target)) {\n element = element || this._context.querySelector(this.target)\n }\n\n return getElementRect(element)\n }\n\n /**\n * Returns or sets the function used to calculate the interactable's\n * element's rectangle\n *\n * @param {function} [checker] A function which returns this Interactable's\n * bounding rectangle. See {@link Interactable.getRect}\n * @return {function | object} The checker function or this Interactable\n */\n rectChecker (checker: (element: Element) => any) {\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: 'on' | 'off', typeArg: Interact.EventTypes, listenerArg?: Interact.ListenersArg | null, options?: any) {\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg\n listenerArg = null\n }\n\n const addRemove = method === 'on' ? 'add' : 'remove'\n const listeners = normalizeListeners(typeArg, listenerArg)\n\n for (let type in listeners) {\n if (type === 'wheel') { type = browser.wheelEvent }\n\n for (const listener of listeners[type]) {\n // if it is an action event type\n if (arr.contains(this._actions.eventTypes, type)) {\n this.events[method](type, listener)\n }\n // delegated event\n else if (is.string(this.target)) {\n events[`${addRemove}Delegate`](this.target, this._context, type, listener, options)\n }\n // remove listener from this Interatable's element\n else {\n (events[addRemove] as typeof events.remove)(this.target, type, listener, options)\n }\n }\n }\n\n return this\n }\n\n /**\n * Binds a listener for an InteractEvent, pointerEvent or DOM event.\n *\n * @param {string | array | object} types The types of events to listen\n * for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * addEventListener\n * @return {Interactable} This Interactable\n */\n on (types: Interact.EventTypes, listener?: Interact.ListenersArg, options?: any) {\n return this._onOff('on', types, listener, options)\n }\n\n /**\n * Removes an InteractEvent, pointerEvent or DOM event listener.\n *\n * @param {string | array | object} types The types of events that were\n * listened for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * removeEventListener\n * @return {Interactable} This Interactable\n */\n off (types: string | string[] | Interact.EventTypes, listener?: Interact.ListenersArg, options?: any) {\n return this._onOff('off', types, listener, options)\n }\n\n /**\n * Reset the options of this Interactable\n *\n * @param {object} options The new settings to apply\n * @return {object} This Interactable\n */\n set (options: Interact.OptionsArg) {\n const defaults = this._defaults\n\n if (!is.object(options)) {\n options = {}\n }\n\n this.options = clone(defaults.base) as Required\n\n for (const actionName in this._actions.methodDict) {\n const methodName = this._actions.methodDict[actionName]\n\n this.options[actionName] = {}\n this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName]))\n\n this[methodName](options[actionName])\n }\n\n for (const setting in options) {\n if (is.func(this[setting])) {\n this[setting](options[setting])\n }\n }\n\n return this\n }\n\n /**\n * Remove this interactable from the list of interactables and remove it's\n * action capabilities and event listeners\n *\n * @return {interact}\n */\n unset () {\n events.remove(this.target as Node, 'all')\n\n if (is.string(this.target)) {\n // remove delegated events\n for (const type in events.delegatedEvents) {\n const delegated = events.delegatedEvents[type]\n\n if (delegated.selectors[0] === this.target &&\n delegated.contexts[0] === this._context) {\n delegated.selectors.splice(0, 1)\n delegated.contexts.splice(0, 1)\n delegated.listeners.splice(0, 1)\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegated[type] = null\n }\n }\n\n events.remove(this._context, type, events.delegateListener)\n events.remove(this._context, type, events.delegateUseCapture, true)\n }\n }\n else {\n events.remove(this.target as Node, 'all')\n }\n }\n}\n\nexport default Interactable\n","export class PointerInfo {\n constructor (\n public id: number,\n public pointer: Interact.PointerType,\n public event: Interact.PointerEventType,\n public downTime: number,\n public downTarget: EventTarget,\n ) {}\n}\n\nexport default PointerInfo\n","export type SignalListener = (signalArg: PartialSignalArg, sinalName: string) => (void | boolean)\n\nexport interface SignalArg {\n interaction: Interact.Interaction\n Interactable: Interact.Interactable\n iEvent: Interact.InteractEvent\n element: Window | Document | Element\n coords: Interact.Point\n event: Interact.PointerEventType\n phase: Interact.EventPhase\n [index: string]: any\n}\n\nexport type PartialSignalArg = Partial\n\nclass Signals {\n listeners: {\n [signalName: string]: SignalListener[],\n } = {}\n\n on (name: string, listener: SignalListener) {\n if (!this.listeners[name]) {\n this.listeners[name] = [listener]\n return\n }\n\n this.listeners[name].push(listener)\n }\n\n off (name: string, listener: SignalListener) {\n if (!this.listeners[name]) { return }\n\n const index = this.listeners[name].indexOf(listener)\n\n if (index !== -1) {\n this.listeners[name].splice(index, 1)\n }\n }\n\n fire (name: string, arg: any): void | false {\n const targetListeners = this.listeners[name]\n\n if (!targetListeners) { return }\n\n for (const listener of targetListeners) {\n if (listener(arg, name) === false) {\n return false\n }\n }\n }\n}\n\nexport default Signals\n","import * as utils from '@interactjs/utils'\nimport Interactable from './Interactable'\nimport InteractEvent, { EventPhase } from './InteractEvent'\nimport PointerInfo from './PointerInfo'\nimport { ActionName } from './scope'\n\nexport interface Action {\n name: ActionName\n axis?: 'x' | 'y' | 'xy'\n edges?: Partial\n}\n\nexport class Interaction {\n // current interactable being interacted with\n target: Interactable = null\n\n // the target element of the interactable\n element: Element = null\n\n _signals: utils.Signals\n\n // action that's ready to be fired on next move event\n prepared: Action = {\n name : null,\n axis : null,\n edges: null,\n }\n\n pointerType: string\n\n // keep track of added pointers\n pointers: PointerInfo[] = []\n\n // pointerdown/mousedown/touchstart event\n downEvent: Interact.PointerEventType = null\n\n downPointer: Interact.PointerType = {} as Interact.PointerType\n\n _latestPointer: {\n pointer: EventTarget\n event: Interact.PointerEventType\n eventTarget: Node,\n } = {\n pointer: null,\n event: null,\n eventTarget: null,\n }\n\n // previous action event\n prevEvent: InteractEvent = null\n\n pointerIsDown = false\n pointerWasMoved = false\n _interacting = false\n _ending = false\n\n simulation = null\n\n get pointerMoveTolerance () {\n return 1\n }\n\n /**\n * @alias Interaction.prototype.move\n */\n doMove = utils.warnOnce(\n function (this: Interaction, signalArg: any) {\n this.move(signalArg)\n },\n 'The interaction.doMove() method has been renamed to interaction.move()')\n\n coords = {\n // Starting InteractEvent pointer coordinates\n start: utils.pointer.newCoords(),\n // Previous native pointer move event coordinates\n prev: utils.pointer.newCoords(),\n // current native pointer move event coordinates\n cur: utils.pointer.newCoords(),\n // Change in coordinates and time of the pointer\n delta: utils.pointer.newCoords(),\n // pointer velocity\n velocity: utils.pointer.newCoords(),\n }\n\n /** */\n constructor ({ pointerType, signals }: { pointerType: string, signals: utils.Signals }) {\n this._signals = signals\n this.pointerType = pointerType\n\n 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 let pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) {\n pointerIndex = this.updatePointer(pointer, event, eventTarget, false)\n }\n\n this._signals.fire(/cancel$/i.test(event.type) ? 'cancel' : 'up', {\n pointer,\n pointerIndex,\n event,\n eventTarget,\n curEventTarget,\n interaction: this,\n })\n\n if (!this.simulation) {\n this.end(event)\n }\n\n this.pointerIsDown = false\n this.removePointer(pointer, event)\n }\n\n documentBlur (event) {\n this.end(event)\n this._signals.fire('blur', { event, interaction: this })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('move', function (event) {\n * if (event.pageX > 1000) {\n * // end the current action\n * event.interaction.end();\n * // stop all further listeners from being called\n * event.stopImmediatePropagation();\n * }\n * });\n * ```\n *\n * @param {PointerEvent} [event]\n */\n end (event) {\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 ? this.pointers.length - 1\n : utils.arr.findIndex(this.pointers, (curPointer) => curPointer.id === pointerId)\n }\n\n getPointerInfo (pointer) {\n return this.pointers[this.getPointerIndex(pointer)]\n }\n\n updatePointer (pointer, event, eventTarget, down) {\n const id = utils.pointer.getPointerId(pointer)\n let pointerIndex = this.getPointerIndex(pointer)\n let pointerInfo = this.pointers[pointerIndex]\n\n down = down === false\n ? false\n : down || /(down|start)$/i.test(event.type)\n\n if (!pointerInfo) {\n pointerInfo = new PointerInfo(\n id,\n pointer,\n event,\n null,\n null,\n )\n\n pointerIndex = this.pointers.length\n this.pointers.push(pointerInfo)\n }\n else {\n pointerInfo.pointer = pointer\n }\n\n if (down) {\n this.pointerIsDown = true\n\n if (!this.interacting()) {\n utils.pointer.setCoords(this.coords.start, this.pointers.map((p) => p.pointer))\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: Interact.PointerEventType, phase: EventPhase, preEnd: boolean, type: string) {\n const actionName = this.prepared.name\n\n return new InteractEvent(this, event, actionName, phase, this.element, null, preEnd, type)\n }\n\n _fireEvent (iEvent) {\n this.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\nexport default Interaction\nexport { PointerInfo }\n","import Interactable from '@interactjs/core/Interactable'\nimport InteractEvent from '@interactjs/core/InteractEvent'\nimport Interaction from '@interactjs/core/Interaction'\nimport { ActionName } from '@interactjs/core/scope'\nimport * as arr from '@interactjs/utils/arr'\n\nclass DropEvent {\n type: string\n target: Element\n currentTarget: Element\n dropzone: Interactable\n dragEvent: InteractEvent\n relatedTarget: Element\n interaction: Interaction\n draggable: Interactable\n timeStamp: number\n propagationStopped = false\n immediatePropagationStopped = false\n\n /**\n * Class of events fired on dropzones during drags with acceptable targets.\n */\n constructor (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\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","import base from './base'\nimport restrictEdgesModule from './restrict/edges'\nimport restrictModule from './restrict/pointer'\nimport restrictSizeModule from './restrict/size'\nimport snapEdgesModule from './snap/edges'\nimport snapModule from './snap/pointer'\nimport snapSizeModule from './snap/size'\n\nconst { makeModifier } = base\n\nexport const snap = makeModifier(snapModule, 'snap')\nexport const snapSize = makeModifier(snapSizeModule, 'snapSize')\nexport const snapEdges = makeModifier(snapEdgesModule, 'snapEdges')\nexport const restrict = makeModifier(restrictModule, 'restrict')\nexport const restrictEdges = makeModifier(restrictEdgesModule, 'restrictEdges')\nexport const restrictSize = makeModifier(restrictSizeModule, 'restrictSize')\n","import Interaction from '@interactjs/core/Interaction'\nimport pointerUtils from '@interactjs/utils/pointerUtils'\n\n/** */\nexport default class PointerEvent {\n interaction: Interaction\n timeStamp: number\n originalEvent: Interact.PointerEventType\n type: T\n pointerId: number\n pointerType: string\n target: Node | Window\n currentTarget: Node | Window\n double: boolean\n pageX: number\n pageY: number\n clientX: number\n clientY: number\n dt: number\n eventable: any\n propagationStopped = false\n immediatePropagationStopped = false\n\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 * Prevent the default behaviour of the original Event\n */\n preventDefault () {\n this.originalEvent.preventDefault()\n }\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n","import grid from './grid'\n\nexport { grid }\n","\nreturn _$index_25;\n\n});\n"]} \ No newline at end of file +{"version":3,"sources":["../../scripts/minHeader.js","../../scripts/header.js","../utils/arr.ts","../utils/extend.ts","../utils/window.ts","../utils/normalizeListeners.ts","../core/Eventable.ts","../utils/domObjects.ts","../utils/browser.ts","../utils/domUtils.ts","../utils/rect.ts","../utils/getOriginXY.ts","../utils/clone.ts","../utils/pointerExtend.ts","../utils/events.ts","../utils/raf.ts","../utils/index.ts","../utils/interactionFinder.ts","../core/interactions.ts","../core/scope.ts","../actions/drag.ts","../actions/drop/index.ts","../actions/gesture.ts","../actions/resize.ts","../actions/index.ts","../auto-scroll/index.ts","../auto-start/InteractableMethods.ts","../auto-start/base.ts","../auto-start/dragAxis.ts","../auto-start/hold.ts","../auto-start/index.ts","../core/interactablePreventDefault.ts","../modifiers/base.ts","../inertia/index.ts","../interact/interact.ts","../modifiers/restrict/pointer.ts","../modifiers/restrict/edges.ts","../modifiers/restrict/size.ts","../modifiers/snap/pointer.ts","../modifiers/snap/size.ts","../modifiers/snap/edges.ts","../pointer-events/base.ts","../pointer-events/holdRepeat.ts","../pointer-events/interactableTargets.ts","../pointer-events/index.ts","../reflow/index.ts","../interact/index.ts","../utils/snappers/grid.ts","index.ts","../utils/isWindow.ts","../utils/is.ts","../core/defaultOptions.ts","../utils/hypot.ts","../core/InteractEvent.ts","../utils/pointerUtils.ts","../core/Interactable.ts","../core/PointerInfo.ts","../utils/Signals.ts","../core/Interaction.ts","../actions/drop/DropEvent.ts","../modifiers/index.ts","../pointer-events/PointerEvent.ts","../utils/snappers/index.ts","../../node_modules/browser-pack-flat/_postlude"],"names":[],"mappings":";AAAA,CCMA,SAAA,GAAA,GAAA,gBAAA,UAAA,mBAAA,QAAA,OAAA,QAAA,QAAA,IAAA,kBAAA,SAAA,OAAA,IAAA,UAAA,OAAA,CAAA,GAAA,EAAA,GAAA,mBAAA,QAAA,OAAA,mBAAA,QAAA,OAAA,mBAAA,MAAA,KAAA,KAAA,EAAA,SAAA,MAAA,WCNM,QAAU,GAAU,EAAO,GAC/B,OAAkC,IAA3B,EAAM,QAAQ,GAGjB,QAAU,GAAQ,EAAO,GAC7B,MAAO,GAAM,OAAO,EAAM,QAAQ,GAAS,GAGvC,QAAU,GAAO,EAAQ,GAC7B,IAAA,GAAA,GAAA,EAAA,EAAmB,EAAnB,OAAA,IAA2B,CAAA,GAAA,EAAA,GAAR,EAAQ,EAAA,IAAhB,GAAgB,CACzB,GAAO,KAAK,GAGd,MAAO,GAGH,QAAU,GAAM,GACpB,MAAO,MAAU,GAGb,QAAU,GAAW,EAAO,GAChC,IAAK,GAAI,GAAI,EAAG,EAAI,EAAM,OAAQ,IAChC,GAAI,EAAK,EAAM,GAAI,EAAG,GACpB,MAAO,EAIX,QAAQ,EAGJ,QAAU,GAAM,EAAO,GAC3B,MAAO,GAAM,EAAU,EAAO,IAG1B,QAAU,GAAM,EAAO,GAC3B,OAAmC,IAA5B,EAAU,EAAO,GCnCZ,QAAU,GAAiC,EAAS,GAChE,IAAK,GAAM,KAAQ,GAChB,EAAsB,GAAQ,EAAO,EAExC,OAAO,GCKH,QAAU,GAAM,GAGpB,GAAI,WAAa,CAGjB,IAAM,GAAK,EAAO,SAAS,eAAe,GAGtC,GAAG,gBAAkB,EAAO,UACL,kBAAhB,GAAO,MAChB,EAAO,KAAK,KAAQ,IAEpB,EAAS,EAAO,KAAK,IAGvB,GAAI,OAAS,EAWT,QAAU,GAAW,GACzB,OAAI,EAAA,GAAA,SAAS,GACJ,GAGS,EAAK,eAAiB,GAExB,aAAe,GAAI,+RCpCvB,QAAU,GACtB,EACA,EACA,GAQA,GANA,EAAS,MAEL,GAAG,OAAO,KAA+B,IAAtB,EAAK,OAAO,OACjC,EAAO,EAAM,IAGX,GAAG,MAAM,GACX,MAAO,GAAK,OACV,SAAC,EAAK,GAAN,OAAY,EAAA,GAAA,SAAO,EAAK,EAAU,EAAG,EAAW,KAChD,EAUJ,IALI,GAAG,OAAO,KACZ,EAAY,EACZ,EAAO,IAGL,GAAG,KAAK,GACV,EAAO,GAAQ,EAAO,OACtB,EAAO,GAAM,KAAK,OAEf,IAAI,GAAG,MAAM,GAChB,IAAA,GAAA,GAAA,EAAA,EAAgB,EAAhB,OAAA,IAA2B,CAAA,GAAA,EAAA,GAAX,EAAW,EAAA,IAAhB,GAAgB,CACzB,GAAU,EAAM,EAAG,OAGlB,IAAI,GAAG,OAAO,GACjB,IAAK,GAAM,KAAU,GAAW,CAC9B,GAAM,GAAgB,EAAM,GAAQ,IAAI,SAAC,GAAD,MAAA,GAAA,OAAU,GAAV,OAAiB,IAEzD,GAAU,EAAe,EAAU,GAAS,GAIhD,MAAO,GAGT,QAAS,GAAO,GACd,MAAO,GAAK,OAAO,MAAM,sXC9C3B,QAAS,GAGN,EAA4B,GAC7B,IAAA,GAAA,GAAA,EAAA,EAAuB,EAAvB,OAAA,IAAkC,CAAA,GAAA,EAAA,GAAX,EAAW,EAAA,IAAvB,GAAuB,CAChC,IAAI,EAAM,4BAA+B,KAEzC,GAAS,ICeb,QAAS,MAIT,QAAS,GAAM,GACb,GAAM,GAAM,CAEZ,IAAW,SAAqB,EAAI,SACpC,GAAW,iBAAqB,EAAI,kBAAsB,EAC1D,GAAW,WAAqB,EAAI,YAAsB,EAC1D,GAAW,cAAqB,EAAI,eAAsB,EAC1D,GAAW,mBAAqB,EAAI,oBAAsB,EAC1D,GAAW,QAAqB,EAAI,SAAsB,EAC1D,GAAW,YAAqB,EAAI,aAAsB,GAAW,QAErE,GAAW,MAAe,EAAI,MAC9B,GAAW,MAAe,EAAI,OAAS,EACvC,GAAW,aAAgB,EAAI,cAAgB,EAAI,kECrBrD,QAAS,GAAM,GACb,GAAM,GAAU,GAAA,QAAW,QACrB,EAAa,GAAA,QAAI,OAAO,SAG9B,IAAQ,cAAiB,gBAAkB,IACxC,GAAG,KAAK,EAAO,gBAAkB,GAAA,QAAW,mBAAoB,GAAO,cAG1E,GAAQ,uBAAyB,GAAA,QAAW,aAE5C,GAAQ,MAAS,iBAAiB,KAAK,EAAU,UAGjD,GAAQ,OAAU,iBAAiB,KAAK,EAAU,WACzC,YAAY,KAAK,EAAU,YAEpC,GAAQ,MAAQ,SAAS,KAAK,EAAU,WAGxC,GAAQ,cAAuC,UAAtB,EAAU,SACjC,GAAQ,eACR,EAAU,UAAU,MAAM,UAG5B,GAAQ,wBAA0B,WAAa,GAAQ,UACnD,UACA,yBAA2B,GAAQ,UACjC,wBACA,sBAAwB,GAAQ,UAC9B,qBACA,oBAAsB,GAAQ,UAC5B,mBACA,oBAEV,GAAQ,YAAe,GAAA,QAAW,aAC7B,GAAA,QAAW,eAAiB,EAAO,gBAElC,GAAQ,cACR,KAAQ,gBACR,KAAQ,YACR,IAAQ,WACR,KAAQ,gBACR,OAAQ,oBAGR,GAAQ,YACR,KAAQ,cACR,KAAQ,cACR,IAAQ,aACR,KAAQ,cACR,OAAQ,iBAEV,KAGJ,GAAQ,WAAa,gBAAkB,IAAA,QAAW,SAAW,aAAe,2DC3ExE,QAAU,GAAc,EAAQ,GACpC,KAAO,GAAO,CACZ,GAAI,IAAU,EACZ,OAAO,CAGT,GAAQ,EAAM,WAGhB,OAAO,EAGH,QAAU,GAAS,EAAS,GAChC,KAAO,GAAG,QAAQ,IAAU,CAC1B,GAAI,EAAgB,EAAS,GAAa,MAAO,EAEjD,GAAU,EAAW,GAGvB,MAAO,MAGH,QAAU,GAAY,GAC1B,GAAI,GAAS,EAAK,UAElB,IAAI,GAAG,QAAQ,GAAS,CAGtB,MAAQ,EAAU,EAAe,OAAS,GAAG,QAAQ,KAIrD,MAAO,GAGT,MAAO,GAGH,QAAU,GAAiB,EAAS,GAMxC,MAJI,IAAA,QAAI,SAAW,GAAA,QAAI,aACrB,EAAW,EAAS,QAAQ,YAAa,MAGpC,EAAQ,GAAA,QAAQ,yBAAyB,GAI5C,QAAU,GAAuB,GACrC,GAEI,GAGA,EACA,EACA,EACA,EARA,KACA,KAEA,EAAc,EAAS,GACvB,EAAQ,EAAc,GAAK,CAM/B,KAAK,EAAI,EAAG,EAAI,EAAS,OAAQ,IAI/B,IAHA,EAAW,EAAS,KAGH,IAAa,EAI9B,GAAK,GAQL,GAAI,EAAS,aAAe,EAAS,cAIhC,GAAI,EAAY,aAAe,EAAS,cAAxC,CAML,IAAK,EAAmB,OAEtB,IADA,EAAS,EACF,EAAO,YAAc,EAAO,aAAe,EAAO,eACvD,EAAmB,QAAQ,GAC3B,EAAS,EAAO,UAMpB,IAAI,YAAuB,IAAA,QAAW,aAClC,YAAoB,IAAA,QAAW,cAC7B,YAAoB,IAAA,QAAW,eAAgB,CACnD,GAAI,IAAa,EAAY,WAC3B,QAGF,GAAS,EAAS,oBAGlB,GAAS,CAKX,KAFA,KAEO,EAAO,aAAe,EAAO,eAClC,EAAgB,QAAQ,GACxB,EAAS,EAAO,UAMlB,KAHA,EAAI,EAGG,EAAgB,IAAM,EAAgB,KAAO,EAAmB,IACrE,GAGF,IAAM,IACJ,EAAgB,EAAI,GACpB,EAAgB,GAChB,EAAmB,GAKrB,KAFA,EAAQ,EAAQ,GAAG,UAEZ,GAAO,CACZ,GAAI,IAAU,EAAQ,GAAI,CACxB,EAAc,EACd,EAAQ,EACR,IAEA,OAEG,GAAI,IAAU,EAAQ,GACzB,KAGF,GAAQ,EAAM,qBA9Dd,GAAc,EACd,EAAQ,MAbR,GAAc,EACd,EAAQ,CA6EZ,OAAO,GAGH,QAAU,GAAa,EAAS,EAAU,GAC9C,KAAO,GAAG,QAAQ,IAAU,CAC1B,GAAI,EAAgB,EAAS,GAC3B,OAAO,CAKT,KAFA,EAAU,EAAW,MAEL,EACd,MAAO,GAAgB,EAAS,GAIpC,OAAO,EAGH,QAAU,GAAkB,GAChC,MAAQ,aAAmB,IAAA,QAAW,mBAClC,EAAQ,wBACR,EAGA,QAAU,GAAa,GAE3B,MADA,GAAiB,GAAkB,GAAA,QAAI,QAErC,EAAG,EAAe,SAAW,EAAe,SAAS,gBAAgB,WACrE,EAAG,EAAe,SAAW,EAAe,SAAS,gBAAgB,WAInE,QAAU,GAAsB,GACpC,GAAM,GAAc,YAAmB,IAAA,QAAW,WAC9C,EAAQ,wBACR,EAAQ,iBAAiB,EAE7B,OAAO,KACL,KAAQ,EAAW,KACnB,MAAQ,EAAW,MACnB,IAAQ,EAAW,IACnB,OAAQ,EAAW,OACnB,MAAQ,EAAW,OAAU,EAAW,MAAS,EAAW,KAC5D,OAAQ,EAAW,QAAU,EAAW,OAAS,EAAW,KAI1D,QAAU,GAAgB,GAC9B,GAAM,GAAa,EAAqB,EAExC,KAAK,GAAA,QAAQ,QAAU,EAAY,CACjC,GAAM,GAAS,EAAY,GAAA,QAAI,UAAU,GAEzC,GAAW,MAAU,EAAO,EAC5B,EAAW,OAAU,EAAO,EAC5B,EAAW,KAAU,EAAO,EAC5B,EAAW,QAAU,EAAO,EAG9B,MAAO,GAGH,QAAU,GAAS,GAGvB,IAFA,GAAM,MAEC,GACL,EAAK,KAAK,GACV,EAAU,EAAW,EAGvB,OAAO,GAGH,QAAU,GAAa,GAC3B,QAAK,GAAG,OAAO,KAGf,GAAA,QAAW,SAAS,cAAc,IAC3B,GClOH,QAAU,GAAuB,EAAO,EAAc,GAC1D,MAAK,IAAG,OAAO,GAKb,EADY,WAAV,GACM,EAAA,GAAA,YAAW,GAEF,SAAV,EACC,EAAa,QAAQ,IAGrB,EAAA,GAAA,SAAQ,EAAS,GAVlB,KAgBL,QAAU,GAAiB,EAAO,EAAe,EAAU,GAW/D,MAVA,GAAQ,EAAsB,EAAO,EAAc,IAAY,EAE3D,GAAG,KAAK,KACV,EAAQ,EAAM,MAAM,KAAM,IAGxB,GAAG,QAAQ,KACb,GAAQ,EAAA,GAAA,gBAAe,IAGlB,EAGH,QAAU,GAAU,GACxB,MAAQ,KACN,EAAG,KAAO,GAAO,EAAK,EAAI,EAAK,KAC/B,EAAG,KAAO,GAAO,EAAK,EAAI,EAAK,KAI7B,QAAU,GAAY,GAU1B,OATI,GAAU,QAAU,IAAQ,OAAS,KACvC,GAAO,EAAA,GAAA,YAAW,GAElB,EAAK,KAAS,EAAK,GAAK,EACxB,EAAK,IAAS,EAAK,GAAK,EACxB,EAAK,MAAS,EAAK,OAAY,EAAK,KAAO,EAAK,MAChD,EAAK,OAAS,EAAK,QAAY,EAAK,IAAM,EAAK,QAG1C,EAGH,QAAU,GAAY,GAU1B,OATI,GAAU,KAAO,IAAQ,KAAO,KAClC,GAAO,EAAA,GAAA,YAAW,GAElB,EAAK,EAAS,EAAK,MAAQ,EAC3B,EAAK,EAAS,EAAK,KAAQ,EAC3B,EAAK,MAAS,EAAK,OAAW,EAAK,MAAS,EAAK,EACjD,EAAK,OAAS,EAAK,QAAW,EAAK,OAAS,EAAK,GAG5C,EChEK,QAAA,GAAW,EAAQ,EAAS,GACxC,GAAM,GAAgB,EAAO,QAAQ,GAC/B,EAAe,GAAiB,EAAc,OAC9C,EAAS,GAAgB,EAAO,QAAQ,OAExC,GAAa,EAAA,GAAA,iBAAgB,EAAQ,EAAQ,GAAU,GAAU,GAEvE,QAAO,EAAA,GAAA,UAAS,KAAiB,EAAG,EAAG,EAAG,4pBCN9B,QAAU,GAAyC,GAC/D,GAAM,KAEN,KAAK,GAAM,KAAQ,GAAQ,CACzB,GAAM,GAAQ,EAAO,EAEjB,IAAG,YAAY,GACjB,EAAK,GAAQ,EAAM,GAEZ,GAAG,MAAM,GAChB,EAAK,GAAQ,GAAI,KAAK,GAGtB,EAAK,GAAQ,EAIjB,MAAO,GCfH,QAAU,GAA8B,EAAM,GAClD,IAAK,GAAM,KAAQ,GAAQ,CACzB,GAAM,GAAkB,EAAc,gBAClC,GAAa,CAGjB,KAAK,GAAM,KAAU,GACnB,GAA6B,IAAzB,EAAK,QAAQ,IAAiB,EAAgB,GAAQ,KAAK,GAAO,CACpE,GAAa,CACb,OAIC,GAAsC,kBAAjB,GAAO,KAC/B,EAAK,GAAQ,EAAO,IAGxB,MAAO,85CCCT,QAAS,IAAK,EAAsB,EAAc,EAAoB,GACpE,GAAM,GAAU,GAAW,GACvB,EAAe,GAAS,QAAQ,GAChC,EAAS,GAAQ,EAEhB,KACH,GACE,UACA,UAAW,GAGb,EAAe,GAAS,KAAK,GAAW,EACxC,GAAQ,KAAK,IAGV,EAAO,OAAO,KACjB,EAAO,OAAO,MACd,EAAO,cAGJ,EAAA,GAAA,UAAS,EAAO,OAAO,GAAO,KACjC,EAAQ,iBAAiB,EAAM,EAAiB,GAAO,gBAAkB,IAAY,EAAQ,SAC7F,EAAO,OAAO,GAAM,KAAK,IAI7B,QAAS,IAAQ,EAAsB,EAAc,EAA6B,GAChF,GAAM,GAAU,GAAW,GACrB,EAAe,GAAS,QAAQ,GAChC,EAAS,GAAQ,EAEvB,IAAK,GAAW,EAAO,OAIvB,GAAa,QAAT,EAAJ,CASA,GAAI,EAAO,OAAO,GAAO,CACvB,GAAM,GAAM,EAAO,OAAO,GAAM,MAEhC,IAAiB,QAAb,EAAoB,CACtB,IAAK,GAAI,GAAI,EAAG,EAAI,EAAK,IACvB,GAAO,EAAS,EAAM,EAAO,OAAO,GAAM,GAAI,EAEhD,QAGA,IAAK,GAAI,GAAI,EAAG,EAAI,EAAK,IACvB,GAAI,EAAO,OAAO,GAAM,KAAO,EAAU,CACvC,EAAQ,oBAAoB,EAAM,EAAiB,GAAO,gBAAkB,IAAY,EAAQ,SAChG,EAAO,OAAO,GAAM,OAAO,EAAG,EAE9B,OAKF,EAAO,OAAO,IAAwC,IAA/B,EAAO,OAAO,GAAM,SAC5C,EAAO,OAAO,GAAgB,KAC/B,EAAO,aAIN,EAAO,YACV,GAAQ,OAAO,EAAc,GAC7B,GAAS,OAAO,EAAc,QApC9B,KAAK,IAAQ,GAAO,OACd,EAAO,OAAO,eAAe,IAC/B,GAAO,EAAS,EAAM,OAsC9B,QAAS,IAAa,EAAkB,EAAsB,EAAc,EAAoB,GAC9F,GAAM,GAAU,GAAW,EAC3B,KAAK,GAAgB,GAAO,CAC1B,GAAgB,IACd,YACA,aACA,aAIF,KAAA,GAAA,GAAA,EAAA,EAAkB,GAAlB,OAAA,IAA6B,CAAxB,GAAM,GAAO,GAAJ,EACZ,IAAI,EAAK,EAAM,IACf,GAAI,EAAK,EAAM,IAAoB,IAIvC,GACI,GADE,EAAY,GAAgB,EAGlC,KAAK,EAAQ,EAAU,UAAU,OAAS,EAAG,GAAS,IAChD,EAAU,UAAU,KAAW,GAC/B,EAAU,SAAS,KAAW,GAFqB,MAO1C,IAAX,IACF,EAAQ,EAAU,UAAU,OAE5B,EAAU,UAAU,KAAK,GACzB,EAAU,SAAS,KAAK,GACxB,EAAU,UAAU,UAItB,EAAU,UAAU,GAAO,MAAM,IAAY,EAAQ,QAAS,EAAQ,UAGxE,QAAS,IAAgB,EAAU,EAAS,EAAM,EAAW,GAC3D,GAGI,GAHE,EAAU,GAAW,GACrB,EAAY,GAAgB,GAC9B,GAAa,CAGjB,IAAK,EAGL,IAAK,EAAQ,EAAU,UAAU,OAAS,EAAG,GAAS,EAAG,IAEvD,GAAI,EAAU,UAAU,KAAW,GAC/B,EAAU,SAAS,KAAW,EAAS,CAIzC,IAAK,GAHC,GAAY,EAAU,UAAU,GAG7B,EAAI,EAAU,OAAS,EAAG,GAAK,EAAG,IAAK,CAAA,GAAA,GAAA,GACf,EAAU,GADK,GACvC,EADuC,EAAA,GACnC,EADmC,EAAA,GAC1B,EAD0B,EAAA,EAI9C,IAAI,IAAO,GAAY,MAAc,EAAQ,SAAW,IAAY,EAAQ,QAAS,CAEnF,EAAU,OAAO,EAAG,GAIf,EAAU,SACb,EAAU,UAAU,OAAO,EAAO,GAClC,EAAU,SAAS,OAAO,EAAO,GACjC,EAAU,UAAU,OAAO,EAAO,GAGlC,GAAO,EAAS,EAAM,IACtB,GAAO,EAAS,EAAM,IAAoB,GAGrC,EAAU,UAAU,SACvB,GAAgB,GAAQ,OAK5B,GAAa,CACb,QAIJ,GAAI,EAAc,OAOxB,QAAS,IAAkB,EAAc,GAQvC,IAPA,GAAM,GAAU,GAAW,GACrB,EAAY,GAAI,IAAU,GAC1B,EAAY,GAAgB,EAAM,MAHgB,EAIjC,GAAA,QAAa,gBAAgB,GAJI,EAAA,GAAA,EAAA,GAIjD,EAJiD,EAAA,GAKpD,EAAU,EAGP,GAAG,QAAQ,IAAU,CAC1B,IAAK,GAAI,GAAI,EAAG,EAAI,EAAU,UAAU,OAAQ,IAAK,CACnD,GAAM,GAAW,EAAU,UAAU,GAC/B,EAAU,EAAU,SAAS,EAEnC,IAAI,GAAS,gBAAgB,EAAS,IAClC,GAAS,aAAa,EAAS,IAC/B,GAAS,aAAa,EAAS,GAAU,CAC3C,GAAM,GAAY,EAAU,UAAU,EAEtC,GAAU,cAAgB,CAE1B,KAAA,GAAA,GAAA,EAAA,EAAqC,EAArC,OAAA,IAAgD,CAAA,GAAA,EAAA,GAAX,EAAW,EAAA,IAAA,GAAA,EAAA,EAAA,GAAA,EAAA,GAApC,EAAoC,EAAA,GAAhC,EAAgC,EAAA,GAAvB,EAAuB,EAAA,EAC1C,OAAc,EAAQ,SAAW,IAAY,EAAQ,SACvD,EAAG,KAMX,EAAU,GAAS,WAAW,IAIlC,QAAS,IAAoB,GAC3B,MAAO,IAAiB,KAAK,KAAM,GAAO,GAG5C,QAAS,IAAY,GACnB,MAAO,IAAG,OAAO,GAAS,GAAU,QAAS,okCChO/C,QAAS,IAAM,GAIb,GAHA,GAAU,EAAO,sBACjB,GAAS,EAAO,sBAEX,GAGH,IAAA,GAFM,IAAW,KAAM,MAAO,SAAU,KAExC,EAAA,EAAA,EAAqB,EAArB,OAAA,IAA8B,CAAzB,GAAM,GAAU,EAAJ,EACf,IAAU,EAAM,GAAA,OAAI,EAAJ,0BAChB,GAAS,EAAM,GAAA,OAAI,EAAJ,0BAAqC,EAAM,GAAA,OAAI,EAAJ,gCAIzD,KACH,GAAU,SAAC,GACT,GAAM,IAAW,GAAI,OAAO,UACtB,EAAa,KAAK,IAAI,EAAG,IAAM,EAAW,KAE1C,EAAQ,WAAW,WAAQ,EAAS,EAAW,IACnD,EAGF,OADA,IAAW,EAAW,EACf,GAGT,GAAS,SAAC,GAAD,MAAW,cAAa,mWCxB/B,QAAU,IAAsB,EAA+B,GACnE,GAAI,IAAS,CAGb,OAAO,YAML,MALK,KACF,GAAA,QAAY,OAAO,QAAQ,KAAK,GACjC,GAAS,GAGJ,EAAO,MAAM,KAAM,YAKxB,QAAU,IAAkB,EAAW,EAAY,EAAY,GACnE,GAAM,GAAK,EAAI,CACf,OAAO,GAAK,EAAK,EAAK,EAAI,EAAK,EAAI,EAAK,EAAI,EAAI,EAG5C,QAAU,IACd,EAAgB,EAAgB,EAAa,EAAa,EAAc,EAAc,GACtF,OACE,EAAI,GAAiB,EAAU,EAAQ,EAAK,GAC5C,EAAI,GAAiB,EAAU,EAAQ,EAAK,IAK1C,QAAU,IAAa,EAAW,EAAW,EAAW,GAE5D,MADA,IAAK,GACG,EAAI,GAAK,EAAI,GAAK,EAGtB,QAAU,IAAY,EAAW,GAKrC,MAJA,GAAK,KAAQ,EAAI,KACjB,EAAK,KAAQ,EAAI,KACjB,EAAK,MAAQ,EAAI,MAEV,8mBCoFT,QAAS,IAAc,EAAa,GAClC,MAAO,IAAM,IAAI,KAAK,EAAY,SAAU,SAAA,GAAA,MAAA,GAAG,KAAgB,gpDCpGjE,QAAS,IAAS,GAKhB,IAAA,GAJM,GAAU,GAAI,IAAA,QAEd,KAEN,EAAA,EAAA,EAAqB,GAArB,OAAA,IAAkC,CAA7B,GAAM,GAAU,GAAJ,EACf,GAAU,GAAU,GAAiB,EAAQ,GAG/C,GAAM,GAAc,GAAA,QAAQ,YACtB,IAEF,IAAA,QAAW,cACb,EAAS,EAAY,MAAU,EAAU,YACzC,EAAS,EAAY,MAAU,EAAU,YACzC,EAAS,EAAY,IAAU,EAAU,UACzC,EAAS,EAAY,QAAU,EAAU,YAGzC,EAAS,UAAc,EAAU,YACjC,EAAS,UAAc,EAAU,YACjC,EAAS,QAAc,EAAU,UAEjC,EAAS,WAAc,EAAU,YACjC,EAAS,UAAc,EAAU,YACjC,EAAS,SAAc,EAAU,UACjC,EAAS,YAAc,EAAU,WAGnC,EAAS,KAAO,SAAC,GACf,IAAA,GAAA,GAAA,EAAA,EAA0B,EAAM,aAAa,KAA7C,OAAA,IAAmD,CAAA,GAAA,EAAA,GAAzB,EAAM,aAAa,KAAM,EAAA,GACrC,aAAa,KAI7B,EAAM,QAAQ,GAAG,eAAgB,IACjC,EAAM,QAAQ,GAAG,kBAAmB,IAGpC,EAAM,cAAgB,EAEtB,EAAM,YAAN,SAAA,GAAA,QAAA,KAAA,MAAA,IAAA,KAAA,GAAA,GAAA,KAAA,GAAA,GAAA,MAAA,KAAA,YAAA,MAAA,IAAA,EAAA,GAAA,GAAA,IAAA,IAAA,uBAAA,IAAA,WAEI,MAAO,GAAM,aAAa,sBAF9B,IAAA,SAK4B,GACxB,EAAM,aAAa,qBAAuB,MAN9C,GAA8C,GAAA,SAS9C,EAAM,cACJ,QAAA,EAEA,QACA,IAJmB,SAId,GAGH,MAFA,GAAQ,QAAU,EAEX,GAAI,GAAM,YAAY,IAE/B,UAAA,EACA,SAAA,EACA,qBAAsB,GAI1B,QAAS,IAAkB,EAAQ,GACjC,MAAO,UAAU,GACf,GAAM,GAAe,EAAM,aAAa,KAElC,EAAc,GAAA,QAAa,eAAe,GAH5B,EAIkB,GAAA,QAAa,gBAAgB,GAJ/C,EAAA,GAAA,EAAA,GAIb,EAJa,EAAA,GAIA,EAJA,EAAA,GAKd,IAEN,IAAI,GAAA,QAAQ,eAAiB,QAAQ,KAAK,EAAM,MAAO,CACrD,EAAM,eAAgB,GAAI,OAAO,SAEjC,KAAA,GAAA,GAAA,EAAA,EAA2B,EAAM,eAAjC,OAAA,IAAiD,CAAA,GAAA,EAAA,GAAtB,EAAM,eAAgB,EAAA,IAAtC,GAAsC,EACzC,EAAU,EACV,EAAY,GAAA,QAAa,aAAa,GACtC,GACJ,QAAA,EACA,UAAA,EACA,YAAA,EACA,UAAW,EAAM,KACjB,YAAA,EACA,eAAA,EACA,MAAA,GAEI,EAAc,GAAe,EAEnC,GAAQ,MACN,EAAc,QACd,EAAc,YACd,EAAc,eACd,SAID,CACH,GAAI,IAAiB,CAErB,KAAK,GAAA,QAAQ,sBAAwB,QAAQ,KAAK,EAAM,MAAO,CAE7D,IAAK,GAAI,GAAI,EAAG,EAAI,EAAa,SAAW,EAAgB,IAC1D,EAAiD,UAAhC,EAAa,GAAG,aAA2B,EAAa,GAAG,aAK9E,GAAiB,IACd,GAAI,OAAO,UAAY,EAAM,cAAgB,KAE1B,IAApB,EAAM,UAGV,IAAK,EAAgB,CACnB,GAAM,IACJ,QAAS,EACT,UAAW,GAAA,QAAa,aAAa,GACrC,YAAA,EACA,UAAW,EAAM,KACjB,eAAA,EACA,YAAA,EACA,MAAA,GAGI,EAAc,GAAe,EAEnC,GAAQ,MACN,EAAc,QACd,EAAc,YACd,EAAc,eACd,KAMN,IAAA,GAAA,GAAA,EAAA,EAAkE,EAAlE,OAAA,IAA2E,CAAA,GAAA,GAAA,GAAT,EAAS,GAAA,GAA/D,EAA+D,EAAA,GAAtD,EAAsD,EAAA,GAAzC,EAAyC,EAAA,EAAA,GAAA,GAC7D,GAAQ,EAAS,EAAO,EAAa,KAKvD,QAAS,IAAgB,GAA4B,GAC3C,GAAuB,EAAvB,YAAa,EAAU,EAAV,MAEf,EAAmB,GAAA,QAAO,OAAO,GACjC,GAAc,YAAa,EAAkB,cAAA,EAInD,OAFA,GAAM,aAAa,QAAQ,KAAK,OAAQ,GAEjC,EAAU,aAAe,IAAiB,YAAA,GAAe,GAG5D,QAAU,IAAgB,EAAS,GACvC,GAAM,GAAc,EAAM,aAAa,IAAI,EAG3C,OADA,GAAM,aAAa,KAAK,KAAK,GACtB,EAGT,QAAS,IAAT,EAA+C,GAAU,GAAjC,GAAiC,EAAjC,IAAK,EAA4B,EAA5B,MAAO,EAAqB,EAArB,QAC1B,EAAa,EAAM,aAAnB,SACF,EAA4C,IAA9B,EAAW,QAAQ,OACnC,GAAA,QAAO,IAAM,GAAA,QAAO,MAEpB,GAAM,QAAQ,QAAU,EAAQ,SAClC,EAAQ,QAAW,SAAS,GAI9B,KAAK,GAAM,KAAa,IAAA,QAAO,gBAC7B,EAAY,EAAK,EAAW,GAAA,QAAO,kBACnC,EAAY,EAAK,EAAW,GAAA,QAAO,oBAAoB,EAGzD,IAAM,GAAe,GAAW,EAAQ,MAExC,KAAK,GAAM,KAAa,GACtB,EAAY,EAAK,EAAW,EAAS,GAAY,4hDCE/C,QAAU,IAAW,EAAc,GAUvC,MATA,IAAI,KAAK,GACT,GAAA,QAAW,KAAK,GAChB,GAAQ,KAAK,GACb,GAAI,KAAK,GACT,GAAO,KAAK,GAEZ,GAAA,QAAa,QAAQ,GACrB,EAAM,SAAW,EAAO,SAEjB,4SC5LT,QAAS,IAAS,GAAY,GAE1B,GAIE,EAJF,QACA,EAGE,EAHF,aACA,EAEE,EAFF,aACA,EACE,EADF,QAGF,GAAa,QAAQ,GAAG,qBAAsB,IAC9C,EAAa,QAAQ,GAAG,gBAAiB,IAGzC,EAAa,QAAQ,GAAG,cAAe,IAEvC,EAAa,UAAU,UAAY,GAAK,UAExC,EAAQ,GAAA,WAAW,MAAQ,GAC3B,EAAQ,MAAM,KAAK,GAAA,WAAW,MAC9B,GAAI,MAAM,EAAQ,YAChB,YACA,WACA,mBACA,aACA,YAEF,EAAQ,WAAW,KAAO,YAE1B,EAAS,QAAQ,KAAO,GAAK,SAG/B,QAAS,IAAT,GAAoC,GAAb,GAAa,EAAb,WACrB,IAAkC,SAA9B,EAAY,SAAS,KAAzB,CAEA,GAAM,GAAO,EAAY,SAAS,IAErB,OAAT,GACF,EAAY,OAAO,IAAI,KAAK,EAAM,EAAY,OAAO,MAAM,KAAK,EAChE,EAAY,OAAO,IAAI,OAAO,EAAI,EAAY,OAAO,MAAM,OAAO,EAElE,EAAY,OAAO,SAAS,OAAO,EAAI,EACvC,EAAY,OAAO,SAAS,KAAK,EAAM,GAEvB,MAAT,IACP,EAAY,OAAO,IAAI,KAAK,EAAM,EAAY,OAAO,MAAM,KAAK,EAChE,EAAY,OAAO,IAAI,OAAO,EAAI,EAAY,OAAO,MAAM,OAAO,EAElE,EAAY,OAAO,SAAS,OAAO,EAAI,EACvC,EAAY,OAAO,SAAS,KAAK,EAAM,IAI3C,QAAS,IAAT,GAAsC,GAArB,GAAqB,EAArB,OAAQ,EAAa,EAAb,WACvB,IAAkC,SAA9B,EAAY,SAAS,KAAzB,CAEA,GAAM,GAAO,EAAY,SAAS,IAElC,IAAa,MAAT,GAAyB,MAAT,EAAc,CAChC,GAAM,GAAoB,MAAT,EAAe,IAAM,GAEtC,GAAO,KAAK,GAAc,EAAY,OAAO,MAAM,KAAK,GACxD,EAAO,OAAO,GAAY,EAAY,OAAO,MAAM,OAAO,GAC1D,EAAO,MAAM,GAAY,2qBChC7B,QAAS,IAAS,GAAY,GAE1B,GAOE,EAPF,QAEA,EAKE,EALF,SAEA,EAGE,EAHF,aACA,EAEE,EAFF,aACA,EACE,EADF,QAGF,GAAa,QAAQ,GAAG,qBAAsB,SAAA,GAA8C,GAA3C,GAA2C,EAA3C,YAAa,EAA8B,EAA9B,MAAe,EAAe,EAAvB,MACnE,IAAkC,SAA9B,EAAY,SAAS,KAAzB,CAEA,GAAM,GAAa,EAAY,WAAa,EAAY,aACtD,KACE,SAAU,KACV,QAAS,MAEX,MACE,SAAU,KACV,QAAS,MAEX,SAAU,KACV,OAAQ,KACR,YAAa,KAIf,GAAW,YAAc,KACzB,EAAW,OAAS,KAGf,EAAM,cACT,EAAW,YAAc,GAAe,EAAO,EAAY,UAG7D,EAAW,OAAS,GAAc,EAAa,EAAO,GAElD,EAAW,OAAO,UACpB,GAAqB,EAAW,YAAa,EAAW,OAAO,aAKnE,EAAa,QAAQ,GAAG,cAAe,SAAC,GAAD,MAAS,IAAe,EAAY,KAC3E,EAAa,QAAQ,GAAG,aAAc,SAAC,GAAD,MAAS,IAAe,EAAY,KAE1E,EAAa,QAAQ,GAAG,oBAAqB,SAAA,GAAoB,GAAjB,GAAiB,EAAjB,WACZ,UAA9B,EAAY,SAAS,OAEzB,GAAe,EAAa,EAAY,WAAW,QACnD,EAAY,WAAW,aAGzB,EAAa,QAAQ,GAAG,mBAAoB,SAAA,GAAoB,GAAjB,GAAiB,EAAjB,WACX,UAA9B,EAAY,SAAS,MACvB,GAAe,EAAa,EAAY,WAAW,UAIvD,EAAa,QAAQ,GAAG,OAAQ,SAAA,GAAoB,GAAjB,GAAiB,EAAjB,WACjC,GAAY,WAAW,YAAc,KACrC,EAAY,WAAW,OAAS,OAGlC,EAAa,QAAQ,GAAG,OAAQ,SAAA,GAAoC,GAAlB,GAAkB,EAAjC,YAAe,UAChD,GAAW,IAAI,SAAW,EAAW,IAAI,QACvC,EAAW,KAAK,SAAW,EAAW,KAAK,QAAU,KACvD,EAAW,UAAW,IA2CxB,EAAa,UAAU,SAAW,SAAuC,GACvE,MAAO,IAAe,KAAM,IAkB9B,EAAa,UAAU,UAAY,SAAuC,EAAW,EAAO,EAAW,EAAkB,EAAa,GACpI,MAAO,IAAgB,KAAM,EAAW,EAAO,EAAW,EAAkB,EAAa,IAW3F,EAAS,YAAc,SAAU,GAC/B,MAAI,IAAM,GAAG,KAAK,IAKhB,EAAM,YAAc,EAEb,GAEF,EAAM,aAGf,GAAM,IAAI,MAAM,EAAQ,YACtB,YACA,YACA,eACA,iBACA,WACA,SAEF,EAAQ,WAAW,KAAO,WAE1B,EAAM,aAAc,EAEpB,EAAS,QAAQ,KAAO,GAAK,SAG/B,QAAS,IAAT,EAA0C,GAIxC,IAAA,GAJuB,GAAiC,EAAjC,cACjB,KAGN,EAAA,EAAA,EAAuB,EAAc,KAArC,OAAA,IAA2C,CAAA,GAAA,EAAA,GAApB,EAAc,KAAM,EAAA,IAAhC,GAAgC,CACzC,IAAK,EAAS,QAAQ,KAAK,QAA3B,CAEA,GAAM,GAAS,EAAS,QAAQ,KAAK,MAGrC,MAAK,GAAM,GAAG,QAAQ,IAAW,IAAW,GACvC,GAAM,GAAG,OAAO,KAChB,GAAM,IAAI,gBAAgB,EAAkB,IAC5C,GAAM,GAAG,KAAK,KAAY,GAAS,SAAA,EAAU,iBAAA,KASlD,IAAA,GAJM,GAAe,GAAM,GAAG,OAAO,EAAS,QAC1C,EAAS,SAAS,iBAAiB,EAAS,QAC5C,GAAM,GAAG,MAAM,EAAS,QAAU,EAAS,QAAU,EAAS,QAElE,EAAA,EAAA,EAA8B,EAA9B,OAAA,IAA4C,CAAA,GAAA,EAAA,GAAd,EAAc,EAAA,IAAjC,GAAiC,CACtC,KAAoB,GACtB,EAAM,MACJ,SAAA,EACA,QAAS,MAMjB,MAAO,GAGT,QAAS,IAAsB,EAAa,GAE1C,IAAA,GAAA,GAAA,EAAA,EAAoC,EAApC,OAAA,IAAiD,CAAA,GAAA,EAAA,GAAb,EAAa,EAAA,IAAA,GAAA,EAApC,EAAoC,EAApC,SAAU,EAA0B,EAA1B,OACrB,GAAM,SAAW,EAGjB,EAAM,OAAS,EACf,EAAS,KAAK,GACd,EAAM,mBAAqB,EAAM,6BAA8B,GAOnE,QAAS,IAAgB,EAAc,GAIrC,IAAA,GAFM,GAAc,GAAa,EAAO,GAExC,EAAA,EAAA,EAAyB,EAAzB,OAAA,IAAsC,CAAA,GAAA,EAAA,GAAb,EAAa,EAAA,IAA3B,GAA2B,CACpC,GAAW,KAAO,EAAW,SAAS,QAAQ,EAAW,SAG3D,MAAO,GAGT,QAAS,IAAT,EAA2E,EAAW,GAIpF,IAAA,GAJkB,GAA8E,EAA9E,WAAoB,EAA0D,EAAlE,OAA4B,EAAsC,EAA/C,QAC3C,KAGN,EAAA,EAAA,EAA2D,EAAW,YAAtE,OAAA,IAAmF,CAAA,GAAA,EAAA,GAAxB,EAAW,YAAa,EAAA,IAAA,GAAA,EAAtE,EAAsE,EAAtE,SAAmB,EAAmD,EAA5D,QAA0B,EAAkC,EAAlC,IAC/C,GAAW,KAAK,EAAS,UAAU,EAAW,EAAc,EAAW,EAAa,EAAiB,GACjG,EACA,MAIN,GAAM,GAAY,GAAM,IAAI,sBAAsB,EAElD,OAAO,GAAW,YAAY,IAAc,KAG9C,QAAS,IAAe,EAAa,EAAe,GAAS,GACnD,GAAe,EAAf,WACF,GACJ,MAAY,KACZ,MAAY,KACZ,SAAY,KACZ,WAAY,KACZ,KAAY,KACZ,KAAY,KAgBd,OAbuB,cAAnB,EAAU,OACZ,EAAW,SAAW,GAAI,IAAA,QAAU,EAAY,EAAW,gBAE3D,EAAW,SAAS,OAAW,KAC/B,EAAW,SAAS,SAAW,MAEV,YAAnB,EAAU,OACZ,EAAW,WAAa,GAAI,IAAA,QAAU,EAAY,EAAW,kBAE7D,EAAW,WAAW,OAAW,KACjC,EAAW,WAAW,SAAW,MAG/B,EAAW,SACN,GAGL,EAAW,IAAI,UAAY,EAAW,KAAK,UAEzC,EAAW,KAAK,WAClB,EAAW,MAAQ,GAAI,IAAA,QAAU,EAAY,EAAW,aAExD,EAAU,UAAe,EAAW,MAAM,OAAW,EAAW,KAAK,QACrE,EAAU,aAAe,EAAW,MAAM,SAAW,EAAW,KAAK,UAGnE,EAAW,IAAI,WACjB,EAAW,MAAQ,GAAI,IAAA,QAAU,EAAY,EAAW,aAExD,EAAU,UAAY,EAAW,IAAI,QACrC,EAAU,SAAW,EAAW,IAAI,WAIjB,YAAnB,EAAU,MAAsB,EAAW,IAAI,WACjD,EAAW,KAAO,GAAI,IAAA,QAAU,EAAY,EAAW,QAEvD,EAAU,SAAW,EAAW,IAAI,SACpC,EAAU,cAAgB,EAAW,IAAI,SAEpB,aAAnB,EAAU,MAAuB,EAAW,IAAI,WAClD,EAAW,KAAO,GAAI,IAAA,QAAU,EAAY,EAAW,YAEvD,EAAW,KAAK,SAAW,EAC3B,EAAU,SAAW,EAAW,IAAI,UAG/B,GAGT,QAAS,IAAgB,EAAa,GAAM,GAClC,GAAe,EAAf,WAEN,EAGE,EAHF,YACA,EAEE,EAFF,IACA,EACE,EADF,IAGE,GAAO,OAAS,EAAK,SAAS,KAAK,EAAO,OAC1C,EAAO,MAAQ,EAAI,SAAS,KAAK,EAAO,MACxC,EAAO,OAAS,EAAI,SAAS,KAAK,EAAO,OACzC,EAAO,MAAQ,EAAI,SAAS,KAAK,EAAO,MAExC,EAAO,YACT,GAAqB,EAAa,EAAO,YAG3C,EAAW,KAAK,SAAY,EAAI,SAChC,EAAW,KAAK,QAAU,EAAI,QAGhC,QAAS,IAAT,EAAyD,GAAK,GAAnC,GAAmC,EAAnC,YAAa,EAAsB,EAAtB,OAAQ,EAAc,EAAd,KAC9C,IAAoB,aAAhB,EAAO,MAAuC,YAAhB,EAAO,KAAzC,CAD4D,GAGpD,GAAe,EAAf,UAEJ,GAAM,cACR,EAAW,YAAc,GAAe,EAAO,EAAY,SAG7D,IAAM,GAAY,EACZ,EAAa,GAAQ,EAAa,EAAW,EAGnD,GAAW,SAAW,EAAW,YAC7B,GACF,EAAW,WAAa,EAAW,IAAI,UACvC,EAAW,UAAY,EAAW,IAAI,QAExC,EAAW,IAAI,SAAY,GAAc,EAAW,SACpD,EAAW,IAAI,QAAU,GAAc,EAAW,QAElD,EAAW,OAAS,GAAc,EAAa,EAAO,IAGxD,QAAS,IAAgB,EAAqC,GAC5D,GAAI,GAAM,GAAG,OAAO,GAAU,CAG5B,GAFA,EAAa,QAAQ,KAAK,SAA8B,IAApB,EAAQ,QAExC,EAAQ,UAAW,CACrB,GAAM,GAAa,GAAM,mBAAmB,EAAQ,WAE9C,EAAY,OAAO,KAAK,GAAY,OAAO,SAAC,EAAK,GASrD,MAFA,GANsB,iBAAiB,KAAK,GAAtB,OAAA,OACX,GACP,8BAA8B,KAAK,GAAnC,OAAA,OACS,GACP,GAEe,EAAW,GAEzB,MAGT,GAAa,IAAI,EAAa,QAAQ,KAAK,WAC3C,EAAa,GAAG,GAChB,EAAa,QAAQ,KAAK,UAAY,EAuBxC,MApBI,IAAM,GAAG,KAAK,EAAQ,SAAW,EAAa,GAAG,OAAQ,EAAQ,QACjE,GAAM,GAAG,KAAK,EAAQ,iBAAmB,EAAa,GAAG,eAAgB,EAAQ,gBACjF,GAAM,GAAG,KAAK,EAAQ,mBAAqB,EAAa,GAAG,iBAAkB,EAAQ,kBACrF,GAAM,GAAG,KAAK,EAAQ,cAAgB,EAAa,GAAG,YAAa,EAAQ,aAC3E,GAAM,GAAG,KAAK,EAAQ,cAAgB,EAAa,GAAG,YAAa,EAAQ,aAC3E,GAAM,GAAG,KAAK,EAAQ,aAAe,EAAa,GAAG,WAAY,EAAQ,YAEzE,qBAAqB,KAAK,EAAQ,SACpC,EAAa,QAAQ,KAAK,QAAU,EAAQ,QAErC,GAAM,GAAG,OAAO,EAAQ,WAC/B,EAAa,QAAQ,KAAK,QAAU,KAAK,IAAI,KAAK,IAAI,EAAG,EAAQ,SAAU,IAEzE,UAAY,KACd,EAAa,QAAQ,KAAK,OAAS,EAAQ,QAEzC,WAAa,KACf,EAAa,QAAQ,KAAK,QAAU,EAAQ,SAGvC,EAGT,MAAI,IAAM,GAAG,KAAK,IAChB,EAAa,QAAQ,KAAK,QAAU,EAE7B,GAGF,EAAa,QAAQ,KAG9B,QAAS,IACP,EACA,EACA,EACA,EACA,EACA,EACA,GAEA,GAAI,IAAU,CAId,MAAM,EAAO,GAAQ,EAAa,QAAQ,IACxC,QAAQ,EAAa,QAAQ,KAAK,SAC9B,EAAa,QAAQ,KAAK,QAAQ,EAAW,EAAO,EAAS,EAAc,EAAa,EAAW,EAIzG,IAAM,GAAc,EAAa,QAAQ,KAAK,OAE9C,IAAoB,YAAhB,EAA2B,CAC7B,GAAM,GAAS,GAAM,YAAY,EAAW,EAAkB,QACxD,EAAO,GAAM,QAAQ,UAAU,EAErC,GAAK,GAAK,EAAO,EACjB,EAAK,GAAK,EAAO,CAEjB,IAAM,GAAc,EAAK,EAAI,EAAK,MAAU,EAAK,EAAI,EAAK,MACpD,EAAc,EAAK,EAAI,EAAK,KAAS,EAAK,EAAI,EAAK,MAEzD,GAAU,GAAc,EAG1B,GAAM,GAAW,EAAU,QAAQ,EAEnC,IAAI,GAA4B,WAAhB,EAA0B,CACxC,GAAM,GAAK,EAAS,KAAO,EAAS,MAAS,EACvC,EAAK,EAAS,IAAO,EAAS,OAAS,CAE7C,GAAU,GAAM,EAAK,MAAQ,GAAM,EAAK,OAAS,GAAM,EAAK,KAAO,GAAM,EAAK,OAGhF,GAAI,GAAY,GAAM,GAAG,OAAO,GAAc,CAM5C,EALsB,KAAK,IAAI,EAAG,KAAK,IAAI,EAAK,MAAO,EAAS,OAAS,KAAK,IAAI,EAAK,KAAM,EAAS,OAChF,KAAK,IAAI,EAAG,KAAK,IAAI,EAAK,OAAQ,EAAS,QAAU,KAAK,IAAI,EAAK,IAAK,EAAS,OAEnE,EAAS,MAAQ,EAAS,SAEpC,EAO5B,MAJI,GAAa,QAAQ,KAAK,UAC5B,EAAU,EAAa,QAAQ,KAAK,QAAQ,EAAW,EAAO,EAAS,EAAc,EAAa,EAAW,IAGxG,ECrdT,QAAS,IAAS,GAAY,GAE1B,GAIE,EAJF,QACA,EAGE,EAHF,aACA,EAEE,EAFF,aACA,EACE,EADF,QA0BF,GAAa,UAAU,WAAa,SAAuC,GACzE,MAAI,IAAM,GAAG,OAAO,IAClB,KAAK,QAAQ,QAAQ,SAA8B,IAApB,EAAQ,QACvC,KAAK,aAAa,UAAW,GAC7B,KAAK,YAAY,UAAW,GAErB,MAGL,GAAM,GAAG,KAAK,IAChB,KAAK,QAAQ,QAAQ,QAAU,EAExB,MAGF,KAAK,QAAQ,SAGtB,EAAa,QAAQ,GAAG,eAAgB,IACxC,EAAa,QAAQ,GAAG,cAAe,IACvC,EAAa,QAAQ,GAAG,aAAc,IAEtC,EAAa,QAAQ,GAAG,eAAgB,IACxC,EAAa,QAAQ,GAAG,cAAe,IAEvC,EAAa,QAAQ,GAAG,MAAO,SAAC,GAC9B,EAAY,SACV,OAAS,EAAG,EAAG,EAAG,GAElB,cAAe,EACf,aAAe,EACf,SAAe,EAEf,MAAO,EAEP,WAAY,EACZ,UAAY,KAIhB,EAAQ,GAAA,WAAW,SAAW,GAC9B,EAAQ,MAAM,KAAK,GAAA,WAAW,SAC9B,GAAM,IAAI,MAAM,EAAQ,YACtB,eACA,cACA,eAEF,EAAQ,WAAW,QAAU,aAE7B,EAAS,QAAQ,QAAU,GAAQ,SAqBrC,QAAS,IAAT,GAAuC,GAArB,GAAqB,EAArB,OAAQ,EAAa,EAAb,WACU,aAA9B,EAAY,SAAS,OAEzB,EAAO,GAAK,EAEZ,EAAY,QAAQ,cAAgB,EAAY,QAAQ,aAAe,EAAO,SAC9E,EAAY,QAAQ,WAAa,EAAY,QAAQ,UAAY,EAAO,MACxE,EAAY,QAAQ,MAAQ,GAG9B,QAAS,IAAT,GAAsC,GAArB,GAAqB,EAArB,OAAQ,EAAa,EAAb,WACW,aAA9B,EAAY,SAAS,OAEzB,EAAO,GAAK,EAAO,MAAQ,EAAY,QAAQ,MAE/C,EAAY,OAAO,KAAK,GAExB,EAAY,QAAQ,UAAY,EAAO,MACvC,EAAY,QAAQ,aAAe,EAAO,SAEtC,EAAO,QAAU,EAAA,GACA,OAAjB,EAAO,WACU,KAAjB,EAAO,OACN,MAAM,EAAO,SAChB,EAAY,QAAQ,MAAQ,EAAO,QAIvC,QAAS,IAAT,GAAoF,GAArD,GAAqD,EAArD,YAAa,EAAwC,EAAxC,OAAQ,EAAgC,EAAhC,MAAO,EAAyB,EAAzB,KACzD,IAAkC,YAA9B,EAAY,SAAS,KAAzB,CAEA,GAAM,GAAW,EAAY,SAAS,IAAI,SAAC,GAAD,MAAO,GAAE,UAC7C,EAAqB,UAAV,EACX,EAAmB,QAAV,EACT,EAAc,EAAY,OAAO,QAAQ,WAI/C,IAFA,EAAO,SAAW,EAAS,GAAI,EAAS,IAEpC,EACF,EAAO,SAAW,GAAM,QAAQ,cAAc,EAAU,GACxD,EAAO,IAAW,GAAM,QAAQ,UAAU,GAC1C,EAAO,MAAW,EAClB,EAAO,GAAW,EAClB,EAAO,MAAW,GAAM,QAAQ,WAAW,EAAU,GACrD,EAAO,GAAW,MAEf,IAAI,GAAU,YAAiB,IAAA,QAAe,CACjD,GAAM,GAAY,EAAY,SAE9B,GAAO,SAAW,EAAU,SAC5B,EAAO,IAAW,EAAU,IAC5B,EAAO,MAAW,EAAU,MAC5B,EAAO,GAAW,EAAO,MAAQ,EACjC,EAAO,MAAW,EAAU,MAC5B,EAAO,GAAW,EAAO,MAAQ,EAAY,QAAQ,eAGrD,GAAO,SAAW,GAAM,QAAQ,cAAc,EAAU,GACxD,EAAO,IAAW,GAAM,QAAQ,UAAU,GAC1C,EAAO,MAAW,EAAO,SAAW,EAAY,QAAQ,cACxD,EAAO,MAAW,GAAM,QAAQ,WAAW,EAAU,GAErD,EAAO,GAAK,EAAO,MAAQ,EAAY,QAAQ,UAC/C,EAAO,GAAK,EAAO,MAAQ,EAAY,QAAQ,WCvKnD,QAAS,IAAS,GAAY,GAE1B,GAME,EANF,QACA,EAKE,EALF,QAEA,EAGE,EAHF,aACA,EAEE,EAFF,aACA,EACE,EADF,QAKF,GAAa,QAAQ,GAAG,MAAO,SAAC,GAC9B,EAAY,WAAa,OAG3B,EAAa,QAAQ,GAAG,eAAgB,IACxC,EAAa,QAAQ,GAAG,cAAe,IAEvC,EAAa,QAAQ,GAAG,eAAgB,IACxC,EAAa,QAAQ,GAAG,cAAe,IAEvC,GAAO,QAAU,GAAY,GAC7B,GAAO,cAAgB,EAAQ,eAAiB,EAAQ,qBAAuB,GAAK,GA+CpF,EAAa,UAAU,UAAY,SAAuC,GACxE,MAAO,IAAU,KAAM,EAAS,IAGlC,EAAQ,GAAA,WAAW,QAAU,GAC7B,EAAQ,MAAM,KAAK,GAAA,WAAW,QAC9B,GAAM,IAAI,MAAM,EAAQ,YACtB,cACA,aACA,qBACA,eACA,cAEF,EAAQ,WAAW,OAAS,YAE5B,EAAS,QAAQ,OAAS,GAAO,SA2GnC,QAAS,IAAW,EAAqC,EAAkE,GACzH,MAAI,IAAM,GAAG,OAAO,IAClB,EAAa,QAAQ,OAAO,SAA8B,IAApB,EAAQ,QAC9C,EAAa,aAAa,SAAU,GACpC,EAAa,YAAY,SAAU,GAE/B,GAAM,GAAG,OAAO,EAAQ,OAAS,eAAe,KAAK,EAAQ,MAC/D,EAAa,QAAQ,OAAO,KAAO,EAAQ,KAEnB,OAAjB,EAAQ,OACf,EAAa,QAAQ,OAAO,KAAO,EAAM,SAAS,QAAQ,OAAO,MAG/D,GAAM,GAAG,KAAK,EAAQ,qBACxB,EAAa,QAAQ,OAAO,oBAAsB,EAAQ,oBAEnD,GAAM,GAAG,KAAK,EAAQ,UAC7B,EAAa,QAAQ,OAAO,OAAS,EAAQ,QAGxC,GAEL,GAAM,GAAG,KAAK,IAChB,EAAa,QAAQ,OAAO,QAAU,EAE/B,GAEF,EAAa,QAAQ,OAG9B,QAAS,IAAiB,EAAc,EAAY,EAAsB,EAAe,EAA8B,EAAqB,GAE1I,IAAK,EAAS,OAAO,CAGrB,KAAc,IAAV,EAAgB,CAElB,GAAM,GAAS,GAAM,GAAG,OAAO,EAAK,OAAS,EAAK,MAAS,EAAK,MAAS,EAAK,KACxE,EAAS,GAAM,GAAG,OAAO,EAAK,QAAU,EAAK,OAAS,EAAK,OAAS,EAAK,GAc/E,IAXA,EAAS,KAAK,IAAI,GAAkB,SAAT,GAA4B,UAAT,EAAmB,EAAQ,GAAU,GAE/E,EAAQ,IACQ,SAAT,EAAoB,EAAO,QAClB,UAAT,IAAoB,EAAO,SAElC,EAAS,IACO,QAAT,EAAqB,EAAO,SACnB,WAAT,IAAqB,EAAO,QAG1B,SAAT,EAAmB,MAAO,GAAK,GAAM,GAAU,EAAI,EAAK,KAAO,EAAK,OAAS,CACjF,IAAa,QAAT,EAAkB,MAAO,GAAK,GAAM,GAAU,EAAI,EAAK,IAAM,EAAK,QAAU,CAEhF,IAAa,UAAT,EAAoB,MAAO,GAAK,GAAM,GAAU,EAAI,EAAK,MAAQ,EAAK,MAAQ,CAClF,IAAa,WAAT,EAAqB,MAAO,GAAK,GAAM,GAAU,EAAI,EAAK,OAAS,EAAK,KAAO,EAIrF,QAAK,GAAM,GAAG,QAAQ,KAEf,GAAM,GAAG,QAAQ,GAEpB,IAAU,EAEV,GAAM,IAAI,YAAY,EAAS,EAAO,IAG5C,QAAS,IAAa,GACpB,MAAQ,GAAQ,OACd,EAAI,WACJ,EAAI,WACJ,GAAI,YAEJ,IAAa,WACb,KAAa,WACb,OAAa,WACb,MAAa,WACb,QAAa,YACb,YAAa,YACb,SAAa,YACb,WAAa,cAEb,EAAI,YACJ,EAAI,YACJ,GAAI,cAEJ,IAAa,YACb,KAAa,YACb,OAAa,YACb,MAAa,YACb,QAAa,cACb,YAAa,cACb,SAAa,cACb,WAAa;AvBtVjB,0BuB0VA,QAAS,IAAT,GAA2D,GAAzC,GAAyC,EAAzC,OAAQ,EAAiC,EAAjC,WACxB,IAAkC,WAA9B,EAAY,SAAS,MAAsB,EAAY,SAAS,MAApE,CAIA,GAAM,GAAY,EAAY,OAAO,QAAQ,EAAY,SACnD,EAAgB,EAAY,OAAO,QAAQ,MAQjD,IAAI,EAAc,QAAU,EAAc,oBAAqB,CAC7D,GAAM,GAAc,GAAM,UAAW,EAAY,SAAS,MAE1D,GAAY,IAAS,EAAY,KAAW,EAAY,OAAW,EAAY,OAC/E,EAAY,KAAS,EAAY,MAAW,EAAY,MAAW,EAAY,MAC/E,EAAY,OAAS,EAAY,QAAW,EAAY,QAAW,EAAY,IAC/E,EAAY,MAAS,EAAY,OAAW,EAAY,SAAW,EAAY,KAE/E,EAAY,SAAS,aAAe,MAGpC,GAAY,SAAS,aAAe,IAIlC,GAAc,sBAChB,EAAY,uBAAyB,EAAU,MAAQ,EAAU,QAGnE,EAAY,aACV,MAAY,EACZ,QAAY,GAAM,UAAW,GAC7B,SAAY,GAAM,UAAW,GAC7B,SAAY,GAAM,UAAW,GAC7B,OACE,KAAM,EACN,MAAQ,EACR,MAAQ,EACR,IAAM,EACN,OAAQ,EACR,OAAQ,IAIX,EAAuB,KAAO,EAAY,YAAY,SACtD,EAAuB,UAAY,EAAY,YAAY,OAG9D,QAAS,IAAT,GAAsC,GAArB,GAAqB,EAArB,OAAQ,EAAa,EAAb,WACvB,IAAkC,WAA9B,EAAY,SAAS,MAAsB,EAAY,SAAS,MAApE,CAEA,GAAM,GAAgB,EAAY,OAAO,QAAQ,OAC3C,EAAS,EAAc,OACvB,EAAwB,eAAX,GAAsC,WAAX,EAE1C,EAAQ,EAAY,SAAS,MAG3B,EAAa,EAAY,YAAY,MACrC,EAAa,EAAY,YAAY,QACrC,EAAa,EAAY,YAAY,SACrC,EAAa,EAAY,YAAY,MACrC,EAAa,GAAM,OAAO,EAAY,YAAY,SAAU,GAC5D,EAAgB,EAEhB,EAAa,GAAM,UAAW,EAAO,MAE3C,IAAI,EAAc,qBAAuB,EAAc,OAAQ,CAE7D,GAAM,GAAmB,EAAc,oBACnC,EAAY,uBACZ,CAEJ,GAAQ,EAAY,SAAS,aAExB,EAAc,MAAQ,EAAc,QACpC,EAAc,OAAS,EAAc,IACxC,EAAW,GAAK,EAAW,EAAI,EAExB,EAAc,MAAQ,EAAc,MAAS,EAAW,EAAI,EAAW,EAAI,GAC3E,EAAc,KAAQ,EAAc,UAAU,EAAW,EAAI,EAAW,EAAI,GASvF,GALI,EAAM,MAAO,EAAQ,KAAU,EAAW,GAC1C,EAAM,SAAU,EAAQ,QAAU,EAAW,GAC7C,EAAM,OAAQ,EAAQ,MAAU,EAAW,GAC3C,EAAM,QAAS,EAAQ,OAAU,EAAW,GAE5C,GAIF,GAFA,GAAM,OAAO,EAAU,GAER,eAAX,EAAyB,CAE3B,GAAI,EAEA,GAAS,IAAM,EAAS,SAC1B,EAAO,EAAS,IAEhB,EAAS,IAAM,EAAS,OACxB,EAAS,OAAS,GAEhB,EAAS,KAAO,EAAS,QAC3B,EAAO,EAAS,KAEhB,EAAS,KAAO,EAAS,MACzB,EAAS,MAAQ,QAMrB,GAAS,IAAS,KAAK,IAAI,EAAQ,IAAK,EAAM,QAC9C,EAAS,OAAS,KAAK,IAAI,EAAQ,OAAQ,EAAM,KACjD,EAAS,KAAS,KAAK,IAAI,EAAQ,KAAM,EAAM,OAC/C,EAAS,MAAS,KAAK,IAAI,EAAQ,MAAO,EAAM,KAGlD,GAAS,MAAS,EAAS,MAAS,EAAS,KAC7C,EAAS,OAAS,EAAS,OAAS,EAAS,GAE7C,KAAK,GAAM,KAAQ,GACjB,EAAU,GAAQ,EAAS,GAAQ,EAAS,EAG9C,GAAO,MAAQ,EAAY,SAAS,MACpC,EAAO,KAAO,EACd,EAAO,UAAY,GAGrB,QAAS,IAAT,GAAyD,GAA7B,GAA6B,EAA7B,YAAa,EAAgB,EAAhB,MACxB,YADwC,EAAR,QACnB,EAAY,aAExB,EAAY,OAAO,QAEvB,OAAO,QACc,MAA3B,EAAY,WACd,EAAO,MAAM,EAAI,EAAO,MAAM,EAG9B,EAAO,MAAM,EAAI,EAAO,MAAM,EAEhC,EAAO,KAAO,OAGd,EAAO,KAAO,EAAY,WAEK,MAA3B,EAAY,WACd,EAAO,MAAM,EAAI,EAEiB,MAA3B,EAAY,aACnB,EAAO,MAAM,EAAI,yDCjfvB,QAAS,IAAS,GAChB,GAAA,QAAQ,QAAQ,GAChB,GAAA,QAAO,QAAQ,GACf,GAAA,QAAK,QAAQ,GACb,GAAA,QAAK,QAAQ,6SCgBf,QAAS,IAAS,GAAY,GAE1B,GAGE,EAHF,aACA,EAEE,EAFF,SACA,EACE,EADF,OAGF,GAAM,WAAa,GAEnB,EAAa,QAAQ,GAAG,MAAO,SAAA,GAAoB,EAAjB,YACpB,WAAa,OAG3B,EAAa,QAAQ,GAAG,OAAQ,GAAW,MAE3C,EAAa,QAAQ,GAAG,cAAe,GAAW,mBAElD,EAAQ,WAAW,KAAK,cACxB,EAAS,UAAU,WAAa,GAAW,SAuJvC,QAAU,IAAc,EAAO,EAAc,GACjD,OAAQ,GAAG,OAAO,IAAS,EAAA,GAAA,uBAAsB,EAAO,EAAc,GAAW,KAAU,EAAA,GAAA,WAAU,GAGjG,QAAU,IAAW,GAGzB,MAFI,IAAG,OAAO,KAAc,EAAY,OAAO,SAAS,OAE/C,EAAG,EAAU,WAAY,EAAG,EAAU,WAG3C,QAAU,IAAe,GAG7B,MAFI,IAAG,OAAO,KAAc,EAAY,OAAO,SAAS,OAE/C,EAAG,EAAU,YAAa,EAAG,EAAU,cAG5C,QAAU,IAAV,EAAwD,GAAI,GAA5B,GAA4B,EAA5B,YAAa,EAAe,EAAf,QAC3C,EAAgB,GAAe,EAAY,OAAO,QAAQ,EAAY,SAAS,MAAM,UAE3F,KAAK,IAAkB,EAAc,QAEnC,MADA,MACS,EAAG,EAAG,EAAG,EAGpB,IAAM,GAAkB,GACtB,EAAc,UACd,EAAY,OACZ,GAGI,EAAW,GAAU,EAC3B,IACA,IAAM,GAAU,GAAU,EAE1B,QACE,EAAG,EAAQ,EAAI,EAAS,EACxB,EAAG,EAAQ,EAAI,EAAS,6SCtM5B,QAAS,IAAS,GAAY,GAG1B,GAEE,EAFF,aACA,EACE,EADF,OAGF,GAAa,UAAU,UAAY,GA8BnC,EAAa,UAAU,YAAa,EAAA,GAAA,UAAS,SAA8B,GACzE,MAAO,MAAK,kBAAkB,aAAc,IAC3C,qGAyBH,EAAa,UAAU,WAAY,EAAA,GAAA,UAAS,SAA8B,GACxE,MAAO,MAAK,kBAAkB,YAAa,IAC1C,mGAEH,EAAa,UAAU,WAAa,GAEpC,EAAa,UAAU,UAAY,GAEnC,EAAa,UAAU,gBAAkB,GAiCzC,EAAa,UAAU,cAAgB,GASvC,EAAa,UAAU,YAAc,GAErC,EAAa,UAAU,qBAAuB,SAA8B,EAAS,EAAO,EAAa,GACvG,MAAO,IAAqB,KAAM,EAAS,EAAO,EAAa,EAAS,IAI5E,QAAS,IAA+B,EAA+B,EAAkC,EAA0B,GACjI,GAAM,GAAS,KAAK,qBAAqB,EAAS,EAAO,EAAa,EAEtE,OAAI,MAAK,QAAQ,cACR,KAAK,QAAQ,cAAc,EAAS,EAAO,EAAQ,KAAM,EAAS,GAGpE,EAGT,QAAS,IAAsB,EAA4B,EAA+B,EAAkC,EAA0B,EAAkB,GAUtK,IAAA,GATM,GAAO,EAAa,QAAQ,GAC5B,EAAW,EAAqB,UACpC,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,IACD,EAAqB,QACrB,EAAS,KAEb,EAAA,EAAA,EAAyB,EAAQ,MAAjC,OAAA,IAAwC,CAAA,GAAA,EAAA,GAAf,EAAQ,MAAO,EAAA,IAA7B,GAA6B,CAEtC,MAAI,EAAY,gBACZ,gBAAgB,KAAK,EAAY,cAC2B,IAA7D,EAAU,EAAa,QAAQ,GAAY,iBAI9C,EAAU,EAAQ,GAAqC,QAAQ,EAAS,EAAO,EAAc,EAAS,EAAa,IAGjH,MAAO,IAKb,QAAS,IAAiC,GACxC,MAAI,IAAG,KAAK,IACV,KAAK,QAAQ,YAAc,EAEpB,MAGQ,OAAb,SACK,MAAK,QAAQ,YAEb,MAGF,KAAK,QAAQ,YAGtB,QAAS,IAAmC,GAC1C,MAAI,IAAG,KAAK,IACV,KAAK,QAAQ,cAAgB,EAEtB,MAGO,OAAZ,SACK,MAAK,QAAQ,cAEb,MAGF,KAAK,QAAQ,cAGtB,QAAS,IAAqC,EAA8D,EAA8B,GACxI,OAAS,KAAK,WAAW,EAAQ,WAAY,EAAqB,IAC1D,KAAK,UAAU,EAAQ,UAAW,EAAqB,GAGjE,QAAS,IAA+B,EAAwB,EAA8B,GAC5F,OAAK,KAEA,GAAG,QAAQ,KAEZ,GAAG,OAAO,GACL,GAAS,YAAY,EAAS,EAAW,KAEzC,GAAG,QAAQ,IACX,GAAS,aAAa,EAAW,IAM5C,QAAS,IAAgC,EAAyB,EAA8B,GAC9F,SAAK,IAAe,GAAG,QAAQ,MAE3B,GAAG,OAAO,GACL,GAAS,YAAY,EAAS,EAAY,KAE1C,GAAG,QAAQ,IACX,GAAS,aAAa,EAAY,IC7M7C,QAAS,IAAS,GAAY,GAE1B,GAGE,EAHF,SACA,EAEE,EAFF,aACA,EACE,EADF,QAGF,GAAS,IAAI,GAAA,SAGb,EAAa,QAAQ,GAAG,OAAQ,SAAA,GAAiD,GAA9C,GAA8C,EAA9C,YAAa,EAAiC,EAAjC,QAAS,EAAwB,EAAxB,MAAO,EAAiB,EAAjB,WAC9D,KAAI,EAAY,cAAhB,CAGA,GAAQ,EADW,GAAc,EAAa,EAAS,EAAO,EAAa,GAC1C,MAInC,EAAa,QAAQ,GAAG,OAAQ,SAAA,GAAiD,GAA9C,GAA8C,EAA9C,YAAa,EAAiC,EAAjC,QAAS,EAAwB,EAAxB,MAAO,EAAiB,EAAjB,WAC9D,IAAgC,UAA5B,EAAY,cACZ,EAAY,gBACZ,EAAY,cAFhB,CAKA,GAAQ,EADW,GAAc,EAAa,EAAS,EAAO,EAAa,GAC1C,MAGnC,EAAa,QAAQ,GAAG,OAAQ,SAAC,GAAO,GAC9B,GAAgB,EAAhB,WAER,IAAK,EAAY,gBACb,EAAY,eACX,EAAY,iBACZ,EAAY,SAAS,KAH1B,CAOA,EAAM,UAAU,QAAQ,KAAK,eAAgB,EAE7C,IAAM,GAAS,EAAY,MAEvB,GAAY,SAAS,MAAQ,IAE3B,EAAO,QAAQ,EAAY,SAAS,MAAM,cACzC,GAAuB,EAAQ,EAAY,QAAS,EAAY,SAAU,GAC7E,EAAY,OAGZ,EAAY,MAAM,EAAY,SAAU,EAAQ,EAAY,aAKlE,EAAa,QAAQ,GAAG,OAAQ,SAAA,GAAoB,GAAjB,GAAiB,EAAjB,YAC3B,EAAS,EAAY,MAEvB,IAAU,EAAO,QAAQ,aAC3B,GAAU,EAAY,QAAS,GAAI,KAIvC,EAAS,KAAK,cAAgB,KAC9B,EAAS,KAAK,aAAc,EAE5B,GAAM,OAAO,EAAS,WACpB,aAAa,EACb,IAAK,EAAA,EACL,cAAe,EACf,UAAY,KACZ,WAAY,KAIZ,aAAc,IAcf,EAA6B,gBAAkB,SAAC,GAAD,MAAc,IAAgB,EAAU,IAExF,EAAM,WAEJ,gBAAiB,EAAA,EACjB,uBAAA,GACA,cAAe,KACf,QAAS,GAAI,IAAM,SAMvB,QAAS,IAAgB,EAAQ,EAAc,EAAS,EAAa,GACnE,MAAI,IAAM,GAAG,OAAO,IAChB,EAAa,gBAAgB,EAAa,QAAQ,EAAO,MAAO,EAAS,IACzE,EAAa,QAAQ,EAAO,MAAM,SAClC,GAAuB,EAAc,EAAS,EAAQ,GACjD,EAGF,KAGT,QAAS,IAAkB,EAAa,EAAS,EAAO,EAAS,EAAe,EAAa,GAC3F,IAAK,GAAI,GAAI,EAAG,EAAM,EAAQ,OAAQ,EAAI,EAAK,IAAK,CAClD,GAAM,GAAQ,EAAQ,GAChB,EAAe,EAAc,GAC7B,EAAS,GACb,EAAM,UAAU,EAAS,EAAO,EAAa,GAC7C,EACA,EACA,EACA,EAEF,IAAI,EACF,OACE,OAAA,EACA,OAAQ,EACR,QAAS,GAKf,OAAS,OAAQ,KAAM,OAAQ,KAAM,QAAS,MAGhD,QAAS,IAAe,EAAa,EAAS,EAAO,EAAa,GAMhE,QAAS,GAAa,GACpB,EAAQ,KAAK,GACb,EAAc,KAAK,GAGrB,IAVA,GAAI,MACA,KAEA,EAAU,EAOP,GAAM,GAAG,QAAQ,IAAU,CAChC,KACA,KAEA,EAAM,cAAc,aAAa,EAAS,EAE1C,IAAM,GAAa,GAAiB,EAAa,EAAS,EAAO,EAAS,EAAe,EAAa,EAEtG,IAAI,EAAW,SACZ,EAAW,OAAO,QAAQ,EAAW,OAAO,MAAM,YACnD,MAAO,EAGT,GAAU,GAAM,IAAI,WAAW,GAGjC,OAAS,OAAQ,KAAM,OAAQ,KAAM,QAAS,MAGhD,QAAS,IAAS,EAAlB,EAA4D,GAAK,GAAhC,GAAgC,EAAhC,OAAQ,EAAwB,EAAxB,OAAQ,EAAgB,EAAhB,OAW/C,IAVA,EAAS,MAEL,EAAY,QAAU,EAAY,OAAO,QAAQ,aACnD,GAAU,EAAY,QAAS,GAAI,GAGrC,EAAY,OAAS,EACrB,EAAY,QAAU,EACtB,GAAM,WAAW,EAAY,SAAU,GAEnC,GAAU,EAAO,QAAQ,YAAa,CACxC,GAAM,GAAS,EAAS,EAAM,QAAQ,EAAO,MAAM,UAAU,GAAU,EACvE,IAAU,EAAY,QAAS,EAAQ,GAGzC,EAAM,UAAU,QAAQ,KAAK,YAAc,YAAA,IAG7C,QAAS,IAAwB,EAAc,EAAS,EAAQ,GAC9D,GAAM,GAAU,EAAa,QACvB,EAAa,EAAQ,EAAO,MAAM,IAClC,EAAgB,EAAQ,EAAO,MAAM,cACrC,EAAe,EAAM,UAAU,gBACjC,EAAqB,EACrB,EAAc,EACd,EAAqB,CAGzB,MAAM,GAAc,GAAiB,GAAiB,OAAO,CAE7D,KAAA,GAAA,GAAA,EAAA,EAA0B,EAAM,aAAa,KAA7C,OAAA,IAAmD,CAAA,GAAA,EAAA,GAAzB,EAAM,aAAa,KAAM,EAAA,IAAxC,GAAwC,EAC3C,EAAc,EAAY,SAAS,IAEzC,IAAK,EAAY,cAAjB,CAIA,KAFA,GAE0B,EACxB,OAAO,CAGT,IAAI,EAAY,SAAW,EAA3B,CAIA,IAFA,GAAe,IAAgB,EAAO,KAAO,EAAI,IAE9B,EACjB,OAAO,CAGT,IAAI,EAAY,UAAY,IAC1B,IAEI,IAAgB,EAAO,MAAQ,GAAsB,GACvD,OAAO,IAKb,MAAO,GAAe,EAGxB,QAAS,IAAiB,EAAU,GAClC,MAAI,IAAM,GAAG,OAAO,IAClB,EAAM,UAAU,gBAAkB,EAE3B,MAGF,EAAM,UAAU,gBAGzB,QAAS,IAAW,EAAS,EAAQ,GAC/B,EAAM,UAAU,gBAClB,EAAM,UAAU,cAAc,MAAM,OAAS,IAG/C,EAAQ,cAAc,gBAAgB,MAAM,OAAS,EACrD,EAAQ,MAAM,OAAS,EACvB,EAAM,UAAU,cAAgB,EAAS,EAAU,KCxRrD,QAAS,IAAS,GA0DhB,QAAS,GAAgB,EAAW,GAClC,IAAK,EAAgB,OAAO,CAE5B,IAAM,GAAW,EAAa,QAAQ,KAAK,SAE3C,OAAsB,OAAd,GAAmC,OAAb,GAAqB,IAAa,EA9DlE,EAAM,UAAU,QAAQ,GAAG,eAAiB,SAAA,GAAyC,GAAtC,GAAsC,EAAtC,YAAa,EAAyB,EAAzB,YAAa,EAAY,EAAZ,GAAI,EAAQ,EAAR,EAC3E,IAAkC,SAA9B,EAAY,SAAS,KAAzB,CAGA,GAAM,GAAO,KAAK,IAAI,GAChB,EAAO,KAAK,IAAI,GAChB,EAAgB,EAAY,OAAO,QAAQ,KAC3C,EAAY,EAAc,UAC1B,EAAe,EAAO,EAAO,IAAM,EAAO,EAAO,IAAM,IAO7D,IALA,EAAY,SAAS,KAAkC,UAA3B,EAAc,SACtC,EAAY,GACZ,EAAc,SAGE,OAAhB,GAAsC,OAAd,GAAsB,IAAc,EAAa,CAE3E,EAAY,SAAS,KAAO,IAyB5B,KAtBA,GAAI,GAAU,EAER,EAAe,SAAU,GAC7B,GAAI,IAAiB,EAAY,OAAjC,CAEA,GAAM,GAAU,EAAY,OAAO,QAAQ,IAE3C,KAAK,EAAQ,aACT,EAAa,gBAAgB,EAAS,EAAS,GAAc,CAC/D,GAAM,GAAS,EAAa,UAC1B,EAAY,YAAa,EAAY,UAAW,EAAa,EAE/D,IAAI,GACgB,SAAhB,EAAO,MACP,EAAe,EAAa,IAC5B,GAAA,QAAU,eAAe,EAAQ,EAAc,EAAS,EAAa,GACvE,MAAO,MAMN,GAAG,QAAQ,IAAU,CAC1B,GAAM,GAAe,EAAM,cAAc,aAAa,EAAS,EAE/D,IAAI,EAAc,CAChB,EAAY,SAAS,KAAO,GAAA,WAAW,KACvC,EAAY,OAAS,EACrB,EAAY,QAAU,CACtB,OAGF,GAAU,EAAA,GAAA,YAAW,QC7C7B,QAAS,IAAS,GAAY,GAE1B,GAGE,EAHF,UACA,EAEE,EAFF,aACA,EACE,EADF,QAGF,GAAS,UAAU,KAAO,EAC1B,EAAS,UAAU,MAAQ,EAE3B,EAAa,QAAQ,GAAG,MAAO,SAAC,GAC9B,EAAY,mBAAqB,OAGnC,EAAU,QAAQ,GAAG,WAAY,SAAA,GAAoB,GAAjB,GAAiB,EAAjB,YAC5B,EAAO,GAAgB,EAEzB,GAAO,IACT,EAAY,mBAAqB,WAAW,WAC1C,EAAY,MAAM,EAAY,SAAU,EAAY,OAAQ,EAAY,UACvE,MAIP,EAAa,QAAQ,GAAG,OAAQ,SAAA,GAA+B,GAA5B,GAA4B,EAA5B,YAAa,EAAe,EAAf,SAC1C,GAAY,kBAAoB,GAClC,aAAa,EAAY,sBAK7B,EAAU,QAAQ,GAAG,eAAgB,SAAA,GAAoB,GAAjB,GAAiB,EAAjB,WACzB,IAAgB,GAElB,IACT,EAAY,SAAS,KAAO,QAKlC,QAAS,IAAiB,GACxB,GAAM,GAAa,EAAY,UAAY,EAAY,SAAS,IAEhE,KAAK,EAAc,MAAO,KAE1B,IAAM,GAAU,EAAY,OAAO,OAEnC,OAAO,GAAQ,GAAY,MAAQ,EAAQ,GAAY,0DC1DzD,QAAS,IAAS,GAChB,GAAA,QAAU,QAAQ,GAClB,GAAA,QAAK,QAAQ,GACb,GAAA,QAAS,QAAQ,GCFnB,QAAS,IAAgB,EAAc,GACrC,MAAI,wBAAwB,KAAK,IAC/B,EAAa,QAAQ,eAAiB,EAC/B,GAGL,GAAG,KAAK,IACV,EAAa,QAAQ,eAAiB,EAAW,SAAW,QACrD,GAGF,EAAa,QAAQ,eAG9B,QAAS,IAAwB,EAAc,EAAO,GACpD,GAAM,GAAU,EAAa,QAAQ,cAErC,IAAgB,UAAZ,EAAJ,CAEA,GAAgB,WAAZ,EAEF,WADA,GAAM,gBASR,IAAI,GAAA,QAAO,iBAAmB,sBAAsB,KAAK,EAAM,MAAO,CACpE,GAAM,IAAM,EAAA,GAAA,WAAU,EAAM,QAAQ,SAC9B,EAAa,EAAM,cAAc,EAEvC,KAAM,IAAc,EAAW,SAAyC,IAA9B,EAAW,OAAO,QAC1D,OAKA,uCAAuC,KAAK,EAAM,OAKlD,GAAG,QAAQ,EAAM,UACjB,EAAA,GAAA,iBAAgB,EAAM,OAAQ,0EAIlC,EAAM,kBAGR,QAAS,IAAT,GAAmD,GAApB,GAAoB,EAApB,YAAa,EAAO,EAAP,KACtC,GAAY,QACd,EAAY,OAAO,uBAAuB,GAIxC,QAAU,IAAS,GAEvB,GAAM,GAAe,EAAM,YAY3B,GAAa,UAAU,eAAiB,SAAU,GAChD,MAAO,IAAe,KAAM,IAG9B,EAAa,UAAU,uBAAyB,SAAU,GACxD,MAAO,IAAuB,KAAM,EAAO,GAG7C,KAAA,GAtB4B,IAsBD,OAAQ,OAAQ,KAAM,UAAjD,EAAA,EAAA,EAAA,EAAA,OAAA,IAA4D,CAAvD,GAAM,GAAW,EAAA,EACpB,GAAM,aAAa,QAAQ,GAAG,EAAa,IAI7C,EAAM,aAAa,SAAS,UAAY,SAA4B,GAClE,IAAA,GAAA,GAAA,EAAA,EAA0B,EAAM,aAAa,KAA7C,OAAA,IAAmD,CAAA,GAAA,EAAA,GAAzB,EAAM,aAAa,KAAM,EAAA,IAAxC,GAAwC,CACjD,IAAI,EAAY,UACb,EAAY,UAAY,EAAM,SAC7B,EAAA,GAAA,cAAa,EAAY,QAAS,EAAM,SAE1C,WADA,GAAY,OAAO,uBAAuB,uaC1ElD,QAAS,IAAS,GAAY,GAE1B,GACE,EADF,YAGF,GAAM,SAAS,UAAU,aACzB,EAAM,aAEN,EAAa,QAAQ,GAAG,MAAO,SAAA,GAAoB,EAAjB,YACpB,WACV,aAAe,KAAM,EAAG,MAAO,EAAG,IAAK,EAAG,OAAQ,GAClD,WACA,OAAW,KACX,OAAa,QAIjB,EAAa,QAAQ,GAAG,sBAAuB,SAAC,GAC9C,GAAM,EAAY,EAAI,YAAY,OAAO,MAAM,KAAM,EAAM,aAG7D,EAAa,QAAQ,GAAG,gBAAiB,SAAC,GACxC,GAAW,GACX,GAAM,EAAY,EAAI,YAAY,OAAO,IAAI,KAAM,EAAM,aAG3D,EAAa,QAAQ,GAAG,qBAAsB,IAC9C,EAAa,QAAQ,GAAG,oBAAqB,IAE7C,EAAa,QAAQ,GAAG,sBAAuB,IAC/C,EAAa,QAAQ,GAAG,qBAAsB,IAE9C,EAAa,QAAQ,GAAG,qBAAsB,IAC9C,EAAa,QAAQ,GAAG,oBAAqB,IAC7C,EAAa,QAAQ,GAAG,OAAQ,IAGlC,QAAS,IAAU,GACjB,IAAA,GAAA,GAAA,EAAA,EAAoB,EAAI,OAAxB,OAAA,IAAgC,CAAA,GAAA,EAAA,GAAZ,EAAI,OAAQ,EAAA,IAArB,GAAqB,CAC1B,GAAM,QAAQ,QAChB,EAAI,MAAQ,EACZ,EAAM,QAAQ,MAAM,KAK1B,QAAS,IAAe,EAAM,GAC5B,MAAO,IAEH,KAAQ,EAAO,EAAI,EAAK,KACxB,IAAQ,EAAO,EAAI,EAAK,IACxB,MAAQ,EAAK,MAAS,EAAO,EAC7B,OAAQ,EAAK,OAAS,EAAO,IAG7B,KAAQ,EACR,IAAQ,EACR,MAAQ,EACR,OAAQ,GAId,QAAS,IAAT,EAEE,EACA,GAAmB,GAFjB,GAEiB,EAFjB,YAAa,EAEI,EAFJ,MAIC,EAA0B,EAAlC,OAAsB,EAAY,EAAZ,QACxB,EAAe,GAAgB,EAAa,GAC5C,EAAS,GAAc,GAEvB,GAAO,EAAA,GAAA,YAAW,EAAa,QAAQ,GAEvC,UAAY,KAAS,EAAK,MAAS,EAAK,MAAS,EAAK,MACtD,UAAY,KAAS,EAAK,OAAS,EAAK,OAAS,EAAK,IAE5D,IAAM,GAAc,GAAc,EAAM,EAExC,GAAY,UAAU,YAAc,EACpC,EAAY,UAAU,YAAe,EAAG,EAAG,EAAG,EAE9C,IAAM,IACJ,YAAA,EACA,aAAA,EACA,QAAA,EACA,WAAA,EACA,MAAA,EACA,KAAA,EACA,YAAA,EACA,OAAA,EACA,QAAQ,EACR,gBAAgB,EAWlB,OARA,GAAY,UAAU,OAAS,EAC/B,EAAY,UAAU,OAAS,KAC/B,GAAS,GAET,EAAI,YAAa,EAAA,GAAA,YAAW,EAAY,OAAO,MAAM,MAEtC,EAAY,UAAU,OAAS,GAAO,GAKvD,QAAS,IAAQ,GAAgC,GACvC,GAAoE,EAApE,YAAa,EAAuD,EAAvD,MAAO,EAAgD,EAAhD,OAAQ,EAAwC,EAAxC,eAAgB,EAAwB,EAAxB,KAAM,EAAkB,EAAlB,cAEpD,EAAS,EACX,EAAI,OAAO,MAAM,EAAY,UAAU,MACvC,EAAI,MAER,GAAI,QAAS,EAAA,GAAA,YAAW,EAAI,YAC5B,EAAI,MAAO,EAAA,GAAA,YAAW,EAQtB,KAAA,GANM,IACJ,OAAS,EAAG,EAAG,EAAG,GAClB,OAAQ,EAAI,OACZ,SAAS,GAGX,EAAA,EAAA,EAAoB,EAApB,OAAA,IAA4B,CAAA,GAAA,EAAA,GAAR,EAAQ,EAAA,IAAjB,GAAiB,EAClB,EAAY,EAAZ,OAEH,GAAM,QAAQ,KAChB,GAAS,EAAS,EAAQ,EAAgB,KAE7C,EAAI,MAAQ,EACZ,EAAM,QAAQ,IAAI,IAGpB,EAAO,MAAM,EAAI,EAAI,OAAO,EAAI,EAAI,WAAW,EAC/C,EAAO,MAAM,EAAI,EAAI,OAAO,EAAI,EAAI,WAAW,CAE/C,IAAM,GAAa,EAAY,UAAU,OACrC,EAAY,UAAU,OAAO,OAC7B,EAAY,OAAO,KAAK,IAM5B,OAJA,GAAO,QACL,EAAW,IAAM,EAAO,OAAO,GAC/B,EAAW,IAAM,EAAO,OAAO,EAE1B,EAGT,QAAS,IAAe,GAGtB,IAAK,GAFC,MAEG,EAAQ,EAAG,EAAQ,EAAa,OAAQ,IAAS,CAAA,GAAA,GACrB,EAAa,GAAxC,EADgD,EAChD,QAAS,EADuC,EACvC,QAAS,EAD8B,EAC9B,IAE1B,KAAI,IAA+B,IAApB,EAAQ,QAAvB,CAEA,GAAM,IACJ,QAAA,EACA,QAAA,EACA,MAAA,EACA,KAAA,EAGF,GAAO,KAAK,IAGd,MAAO,GAGT,QAAS,IAAT,GAAkE,GAA3C,GAA2C,EAA3C,YAAa,EAA8B,EAA9B,MAAO,EAAuB,EAAvB,OAAQ,EAAe,EAAf,cACjC,EAA0B,EAAlC,OAAsB,EAAY,EAAZ,QACxB,EAAiB,IAEnB,YAAA,EACA,aAAA,EACA,QAAA,EACA,OAAA,EACA,MAAA,EACA,WAAY,EAAY,OAAO,IAAI,KACnC,KAAM,EAAa,QAAQ,GAC3B,OAAQ,EAAY,UAAU,OAC9B,gBAAgB,EAChB,cAAA,GAOJ,IAJA,EAAY,UAAU,OAAS,GAI1B,EAAe,SAAW,EAAY,cACzC,OAAO,EAIX,QAAS,IAAW,GAAG,GACb,GAAiC,EAAjC,YAAa,EAAoB,EAApB,MAAO,EAAa,EAAb,SACtB,EAAS,EAAY,UAAU,MAErC,KAAI,GAAa,GAAW,EAAO,OAMnC,IAAA,GAFI,IAAY,EAEhB,EAAA,EAAA,EAAoB,EAApB,OAAA,IAA4B,CAAA,GAAA,EAAA,GAAR,EAAQ,EAAA,IAAjB,GAAiB,CAC1B,GAAI,MAAQ,CADc,IAElB,GAAqB,EAArB,QAAS,EAAY,EAAZ,QAEX,EAAY,EAAQ,WAAa,EAAQ,UAAU,EAEzD,KAAkB,IAAd,EACF,OAAO,GAIJ,GAAa,GAAS,GAAS,GAAM,KAExC,EAAY,MAAO,MAAA,EAAO,QAAQ,IAClC,GAAY,IAKlB,QAAS,IAAM,GAAG,GACR,GAAgB,EAAhB,YACF,EAAS,EAAY,UAAU,MAErC,IAAK,GAAW,EAAO,OAAvB,CAIA,GAAM,IAAc,EAAA,GAAA,UAClB,OAAA,EACA,aAAc,EAAY,OAC1B,QAAS,EAAY,SACpB,EAEH,IAAc,EAEd,KAAA,GAAA,GAAA,EAAA,EAAoB,EAApB,OAAA,IAA4B,CAAA,GAAA,EAAA,GAAR,EAAQ,EAAA,IAAjB,GAAiB,CAC1B,GAAY,MAAQ,EAEhB,EAAM,QAAQ,MAAQ,EAAM,QAAQ,KAAK,GAG/C,EAAI,YAAY,UAAU,OAAS,MAGrC,QAAS,IAAW,GAAG,GACb,GAAuB,EAAvB,YAAa,EAAU,EAAV,MACf,EAAY,EAAI,WAAa,EAAY,OAAO,IAChD,EAAc,EAAI,aAAe,EAAY,OAAO,MAHrC,EAIU,EAAY,UAAnC,EAJa,EAIb,OAAQ,EAJK,EAIL,WACV,EAAW,EAAO,KAEV,WAAV,IACF,EAAA,GAAA,SAAO,EAAY,UAAU,WAAY,EAAO,MAGlD,KAAA,GAXqB,KAWc,EAAa,IAAc,EAAW,IAAzE,EAAA,EAAA,EAAA,EAAA,OAAA,IAAqF,CAAA,GAAA,GAAA,GAAA,EAAA,GAAA,GAAzE,EAAyE,EAAA,GAA9D,EAA8D,EAAA,EACnF,GAAU,KAAK,GAAO,EAAM,EAC5B,EAAU,KAAK,GAAO,EAAM,EAC5B,EAAU,OAAO,GAAK,EAAM,EAC5B,EAAU,OAAO,GAAK,EAAM,GAIhC,QAAS,IAAT,GAGE,IAAA,GAH4D,GAAA,EAApC,YAAe,EAAqB,EAArB,OAAQ,EAAa,EAAb,UACvC,EAA4C,EAA5C,WAA6B,EAAe,EAAhC,OAAU,MAD8B,IAGzB,EAAO,MAAO,IAAc,EAAO,IAAK,IAA3E,EAAA,EAAA,EAAA,EAAA,OAAA,IAAuF,CAAA,GAAA,GAAA,GAAA,EAAA,GAAA,GAA3E,EAA2E,EAAA,GAAhE,EAAgE,EAAA,EACrF,GAAU,KAAK,GAAK,EAAM,EAC1B,EAAU,KAAK,GAAK,EAAM,EAC1B,EAAU,OAAO,GAAK,EAAM,EAC5B,EAAU,OAAO,GAAK,EAAM,GAIhC,QAAS,IAAiB,EAAa,GACrC,GAAM,GAAgB,EAAY,OAAO,QAAQ,EAAY,SAAS,MAChE,EAAkB,EAAc,SAEtC,OAAI,IAAmB,EAAgB,OAC9B,EAAgB,IAAI,SAAC,GAC1B,OAAK,EAAS,SAAW,EAAS,KACzB,EAAoB,EAAS,MAAM,GAGrC,KAIH,OAAQ,WAAY,YAAa,WAAY,gBAAiB,gBACnE,IAAI,SAAC,GACJ,GAAM,GAAU,EAAc,EAE9B,OAAO,IAAW,EAAQ,UACxB,QAAA,EACA,QAAS,EAAQ,YAGpB,OAAO,SAAC,GAAD,QAAS,IAGrB,QAAS,IAAU,EAAS,EAAkB,EAA0B,GACtE,MAAO,IACiB,IAApB,EAAQ,UACP,IAAW,EAAQ,YAClB,GAAkB,EAAQ,WAC3B,EAAQ,UAAsB,UAAV,IACpB,EAGP,QAAS,IAAc,EAAQ,GAAa,GAClC,GAAa,EAAb,SACF,GACJ,MAAO,EAAO,MACd,IAAK,EAAO,IACZ,UAAW,EAAO,UAClB,KAAM,EAAO,MAGT,EAAW,SAAC,GAChB,EAAU,MAGV,EAAQ,SAA8B,IAApB,EAAQ,OAE1B,KAAK,GAAM,KAAQ,GACX,IAAQ,KACZ,EAAQ,GAAQ,EAAS,GAI7B,QAAS,QAAA,EAAS,QAAA,EAAS,KAAA,GAc7B,OAXoB,gBAAT,KACT,OAAO,eACL,EACA,QACE,MAAO,IAGX,EAAS,UAAY,EACrB,EAAS,SAAW,GAGf,sDCzUT,QAAS,IAAS,GAAY,GAE1B,GAEE,EAFF,aACA,EACE,EADF,QAGF,GAAa,QAAQ,GAAG,MAAO,SAAA,GAAoB,EAAjB,YACpB,SACV,QAAa,EACb,WAAa,EACb,aAAa,EAEb,WAAY,KACZ,YAEA,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EAEJ,GAAI,EACJ,IAAK,EACL,IAAK,EACL,SAAU,EAEV,UAAW,EACX,UAAW,EACX,EAAK,QAKT,EAAa,QAAQ,GAAG,oBAAqB,SAAC,GAAD,MAAS,IAAQ,EAAY,KAC1E,EAAa,QAAQ,GAAG,OAAQ,SAAC,GAAD,MAAS,IAAO,EAAY,KAC5D,EAAa,QAAQ,GAAG,OAAQ,SAAC,GAAD,MAAS,IAAK,KAE9C,EAAS,UAAU,SACjB,SAAmB,EACnB,WAAmB,GACnB,SAAmB,IACnB,SAAmB,GACnB,aAAmB,EACnB,kBAAmB,KAIvB,QAAS,IAAT,EAAmF,GAAY,GAA5E,GAA4E,EAA5E,YAAa,EAA+D,EAA/D,MAAO,EAAwD,EAAxD,QAAS,EAA+C,EAA/C,YACxC,EAAQ,EAAY,OAG1B,IAAI,EAAM,OAIR,IAHA,GAAI,GAAU,EAGP,GAAM,GAAG,QAAQ,IAAU,CAEhC,GAAI,IAAY,EAAY,QAAS,CAEnC,GAAA,QAAI,OAAO,EAAM,GACjB,EAAM,QAAS,EACf,EAAY,WAAa,KAGzB,EAAY,cAAc,EAAS,EAAO,GAAa,GACvD,GAAM,QAAQ,UACZ,EAAY,OAAO,IACnB,EAAY,SAAS,IAAI,SAAC,GAAD,MAAO,GAAE,UAIpC,IAAM,IACJ,YAAA,EAGF,GAAM,aAAa,QAAQ,KAAK,gBAAiB,EAGjD,IAAM,GAAc,GAAI,GAAM,cAC5B,EAAa,EAAO,EAAY,SAAS,KAAM,GAAA,WAAW,OAAQ,EAAY,QAEhF,GAAY,WAAW,GAEvB,GAAM,QAAQ,WAAW,EAAY,OAAO,KAAM,EAAY,OAAO,IACrE,OAGF,EAAU,GAAM,IAAI,WAAW,IAKrC,QAAS,IAAT,EAAuG,GAAY,GAAhE,GAAgE,EAAhE,YAAa,EAAmD,EAAnD,MAAO,EAA4C,EAA5C,SAC/D,EAAQ,EAAY,OAE1B,KAAK,EAAY,eACd,EAAY,YAAc,EAAY,WAAW,QACpD,EACE,MAAO,KAGT,IAOI,GAPE,EAAU,GAAW,GAErB,GAAM,GAAI,OAAO,UACP,EAAmB,EAAY,OAAO,SAA9C,OACF,EAAe,GAAM,MAAM,EAAe,EAAG,EAAe,GAE9D,GAAY,EAIV,EAAmB,GAAW,EAAQ,SACK,YAA9B,EAAY,SAAS,MACrB,IAAU,EAAM,WAE7B,EAAW,GACd,EAAM,EAAY,OAAO,IAAI,UAAa,IAC3C,EAAe,EAAQ,UACvB,EAAe,EAAQ,SAEnB,GACJ,YAAA,EACA,WAAY,GAAM,UAAW,EAAY,OAAO,IAAI,MACpD,OAAQ,GAAmB,EAAY,UAAU,OAAO,IACtD,SAAC,GAAD,MAAoB,IAAM,UAAW,KAEvC,QAAQ,EACR,gBAAgB,EAYlB,OARI,KAAoB,IACtB,EAAiB,GAAA,QAAU,OAAO,GAE9B,EAAe,UACjB,GAAY,IAIV,GAAW,GAEjB,GAAM,QAAQ,WAAW,EAAM,SAAU,EAAY,OAAO,KAE5D,EAAY,SAAS,GAAG,QAAU,EAAM,WAAa,GAAI,GAAM,cAC7D,EACA,EAEA,EAAY,SAAS,KACrB,GAAA,WAAW,aACX,EAAY,SAGd,EAAM,GAAK,EAEX,EAAM,QAAS,EACf,EAAM,YAAc,EAAQ,YAC5B,EAAY,WAAa,EAEzB,EAAY,OAAO,KAAK,EAAM,YAE1B,GACF,EAAM,IAAM,EAAY,OAAO,SAAS,OAAO,EAC/C,EAAM,IAAM,EAAY,OAAO,SAAS,OAAO,EAC/C,EAAM,GAAK,EAEX,GAAY,EAAa,GAEzB,GAAM,OAAO,EAAY,WAAY,EAAY,OAAO,IAAI,MAE5D,EAAY,WAAW,GAAK,EAAM,GAClC,EAAY,WAAW,GAAK,EAAM,GAElC,EAAiB,GAAA,QAAU,OAAO,GAElC,EAAM,YAAc,EAAe,MAAM,EACzC,EAAM,YAAc,EAAe,MAAM,EAEzC,EAAM,EAAI,GAAA,QAAI,QAAQ,WAAA,MAAM,IAAY,OAGxC,EAAM,WAAY,EAClB,EAAM,GAAK,EAAe,MAAM,EAChC,EAAM,GAAK,EAAe,MAAM,EAEhC,EAAM,GAAK,EAAM,GAAK,EAEtB,EAAM,EAAI,GAAA,QAAI,QAAQ,WAAA,MAAM,IAAa,OAGpC,GAlD+B,KAqDxC,QAAS,IAAT,GAAkD,GAAjC,GAAiC,EAAjC,YACT,EAAQ,EAAY,OACtB,GAAM,SACR,GAAA,QAAI,OAAO,EAAM,GACjB,EAAM,QAAS,EACf,EAAY,WAAa,MAI7B,QAAS,IAAa,EAAmC,GACvD,GAAM,GAAU,GAAW,GACrB,EAAS,EAAQ,WACjB,GAAc,KAAK,IAAI,EAAQ,SAAW,EAAM,IAAM,CAE5D,GAAM,GAAK,EAAY,UAAU,KAAK,EACtC,EAAM,GAAK,EAAY,UAAU,KAAK,EACtC,EAAM,GAAK,EAAM,WAAW,UAAY,IACxC,EAAM,GAAK,EAAM,GAAK,EAEtB,EAAM,WAAa,EAAM,IAAM,EAAM,IAAM,GAAc,EACzD,EAAM,WAAa,EAAM,IAAM,EAAM,IAAM,GAAc,EACzD,EAAM,GAAK,EAEX,EAAM,UAAY,EAAS,EAAM,GACjC,EAAM,UAAY,EAAI,EAAQ,SAAW,EAAM,GAGjD,QAAS,IAAa,GACpB,GAAoB,GACpB,GAAM,QAAQ,eAAe,EAAY,OAAO,MAAO,EAAY,OAAO,KAAM,EAAY,OAAO,KACnG,GAAM,QAAQ,iBAAiB,EAAY,OAAO,SAAU,EAAY,OAAO,MAE/E,IAAM,GAAQ,EAAY,QACpB,EAAU,GAAW,GACrB,EAAS,EAAQ,WACjB,GAAI,GAAI,OAAO,UAAY,IAAO,EAAM,EAE9C,IAAI,EAAI,EAAM,GAAI,CAChB,GAAM,GAAY,GAAK,KAAK,KAAK,EAAS,GAAK,EAAM,WAAa,EAAM,SAExE,IAAI,EAAM,aAAe,EAAM,IAAM,EAAM,aAAe,EAAM,GAC9D,EAAM,GAAK,EAAM,GAAK,EACtB,EAAM,GAAK,EAAM,GAAK,MAEnB,CACH,GAAM,GAAY,GAAM,uBACtB,EAAG,EACH,EAAM,GAAI,EAAM,GAChB,EAAM,WAAY,EAAM,WACxB,EAEF,GAAM,GAAK,EAAU,EACrB,EAAM,GAAK,EAAU,EAGvB,EAAY,OAEZ,EAAM,EAAI,GAAA,QAAI,QAAQ,WAAA,MAAM,IAAY,SAGxC,GAAM,GAAK,EAAM,WACjB,EAAM,GAAK,EAAM,WAEjB,EAAY,OACZ,EAAY,IAAI,EAAM,YACtB,EAAM,QAAS,EACf,EAAY,WAAa,IAG3B,IAAM,QAAQ,WAAW,EAAY,OAAO,KAAM,EAAY,OAAO,KAGvE,QAAS,IAAc,GACrB,GAAoB,EAEpB,IAAM,GAAQ,EAAY,QACpB,GAAI,GAAI,OAAO,UAAY,EAAM,GAJe,EAKd,GAAW,GAAxB,EAL2B,EAK9C,iBAEJ,GAAI,GACN,EAAM,GAAK,GAAM,YAAY,EAAG,EAAG,EAAM,GAAI,GAC7C,EAAM,GAAK,GAAM,YAAY,EAAG,EAAG,EAAM,GAAI,GAE7C,EAAY,OAEZ,EAAM,EAAI,GAAA,QAAI,QAAQ,WAAA,MAAM,IAAa,OAGzC,EAAM,GAAK,EAAM,GACjB,EAAM,GAAK,EAAM,GAEjB,EAAY,OACZ,EAAY,IAAI,EAAM,YAEtB,EAAM,UACJ,EAAM,QAAS,EACjB,EAAY,WAAa,MAI7B,QAAS,IAAqB,GAC5B,GAAM,GAAQ,EAAY,OAG1B,IAAK,EAAM,OAAX,CAEA,GAAM,GAAW,EAAM,SAAS,KAC1B,EAAW,EAAM,SAAS,MAEhC,IAAM,QAAQ,UAAU,EAAY,OAAO,MACzC,MAAS,EAAO,EAAM,EAAM,GAC5B,MAAS,EAAO,EAAM,EAAM,GAC5B,QAAS,EAAS,EAAI,EAAM,GAC5B,QAAS,EAAS,EAAI,EAAM,OAIhC,QAAS,IAAT,GAAyC,GAAlB,GAAkB,EAAlB,OAAQ,EAAU,EAAV,QAC7B,OAAO,IAAU,EAAO,SAAW,EAAS,MAAQ,EAAO,QAAQ,EAAS,MAAM,4DC1PpF,QAAS,IAAK,GACZ,OAAwC,IAApC,GAAM,SAAS,QAAQ,GAClB,IAGT,EAAO,QAAQ,IACf,GAAM,SAAS,KAAK,GACb,IAcT,QAAS,IAAO,EAAkB,GAChC,OAAoF,IAA7E,GAAM,cAAc,eAAe,EAAS,GAAW,EAAQ,SAexE,QAAS,IAAI,EAAoC,EAAiC,GAKhF,GAJI,GAAM,GAAG,OAAO,KAA+B,IAAtB,EAAK,OAAO,OACvC,EAAO,EAAK,OAAO,MAAM,OAGvB,GAAM,GAAG,MAAM,GAAO,CACxB,IAAA,GAAA,GAAA,EAAA,EAAyB,EAAzB,OAAA,IAAyC,CAAA,GAAA,EAAA,GAAhB,EAAgB,EAAA,IAA9B,GAA8B,CACvC,IAAS,GAAG,EAAW,EAAU,GAGnC,MAAO,IAGT,GAAI,GAAM,GAAG,OAAO,GAAO,CACzB,IAAK,GAAM,KAAQ,GACjB,GAAS,GAAG,EAAO,EAA6B,GAAO,EAGzD,OAAO,IAkBT,MAdI,IAAM,IAAI,SAAS,GAAM,QAAQ,WAAY,GAE1C,GAAa,GAIhB,GAAa,GAAM,KAAK,GAHxB,GAAa,IAAS,GAQxB,GAAA,QAAO,IAAI,GAAM,SAAU,EAAM,GAAiC,QAAA,IAG7D,GAgBT,QAAS,IAAK,EAAM,EAAU,GAK5B,GAJI,GAAM,GAAG,OAAO,KAA+B,IAAtB,EAAK,OAAO,OACvC,EAAO,EAAK,OAAO,MAAM,OAGvB,GAAM,GAAG,MAAM,GAAO,CACxB,IAAA,GAAA,GAAA,EAAA,EAAwB,EAAxB,OAAA,IAA8B,CAAA,GAAA,EAAA,GAAN,EAAM,EAAA,IAAnB,GAAmB,CAC5B,IAAS,IAAI,EAAW,EAAU,GAGpC,MAAO,IAGT,GAAI,GAAM,GAAG,OAAO,GAAO,CACzB,IAAK,GAAM,KAAQ,GACjB,GAAS,IAAI,EAAM,EAAK,GAAO,EAGjC,OAAO,IAGT,GAAK,GAAM,IAAI,SAAS,GAAM,QAAQ,WAAY,GAG7C,CACH,GAAI,EAEA,KAAQ,MAC4C,KAAnD,EAAQ,GAAa,GAAM,QAAQ,KACtC,GAAa,GAAM,OAAO,EAAO,OAPnC,IAAA,QAAO,OAAO,GAAM,SAAU,EAAM,EAAU,EAWhD,OAAO,IAWT,QAAS,MACP,MAAO,IAoBT,QAAS,MACP,MAAO,IAAA,QAAQ,cASjB,QAAS,MACP,MAAO,IAAA,QAAQ,qBAWjB,QAAS,MACP,IAAA,GAAA,GAAA,EAAA,EAA0B,GAAM,aAAa,KAA7C,OAAA,IAAmD,CAAA,GAAA,EAAA,GAAzB,GAAM,aAAa,KAAM,EAAA,GACrC,OAGd,MAAO,IAaT,QAAS,IAAsB,GAC7B,MAAI,IAAM,GAAG,OAAO,IAClB,GAAM,aAAa,qBAAuB,EAEnC,IAGF,GAAM,aAAa,qBCtS5B,QAAS,IAAT,GAA4C,GAA1B,GAA0B,EAA1B,KAAM,EAAoB,EAApB,YAAa,EAAO,EAAP,MAC3B,EAAY,EAAZ,QACA,EAAgB,EAAhB,YACF,IAEF,IAAQ,GACV,EAAO,KAAO,EAAY,KAAQ,EAAK,MAAS,EAAY,KAC5D,EAAO,IAAO,EAAY,IAAQ,EAAK,OAAS,EAAY,IAE5D,EAAO,MAAS,EAAY,MAAU,EAAK,OAAU,EAAI,EAAY,OACrE,EAAO,OAAS,EAAY,OAAU,EAAK,QAAU,EAAI,EAAY,SAGrE,EAAO,KAAO,EAAO,IAAM,EAAO,MAAQ,EAAO,OAAS,EAG5D,EAAM,OAAS,EAGjB,QAAS,IAAT,GAA4C,GAA5B,GAA4B,EAA5B,OAAQ,EAAoB,EAApB,YAAa,EAAO,EAAP,MAC3B,EAAoB,EAApB,QAAS,EAAW,EAAX,OAEX,EAAc,GAAmB,EAAQ,YAAa,EAAa,EAEzE,KAAK,EAAe,MAAO,EAE3B,IAAM,GAAO,CAKT,MAAO,IAAe,KAAO,IAC/B,EAAO,EAAI,KAAK,IAAI,KAAK,IAAI,EAAK,EAAI,EAAK,MAAS,EAAO,MAAO,EAAO,GAAI,EAAK,EAAI,EAAO,MAC7F,EAAO,EAAI,KAAK,IAAI,KAAK,IAAI,EAAK,EAAI,EAAK,OAAS,EAAO,OAAQ,EAAO,GAAI,EAAK,EAAI,EAAO,OAG9F,EAAO,EAAI,KAAK,IAAI,KAAK,IAAI,EAAK,MAAS,EAAO,MAAO,EAAO,GAAI,EAAK,KAAO,EAAO,MACvF,EAAO,EAAI,KAAK,IAAI,KAAK,IAAI,EAAK,OAAS,EAAO,OAAQ,EAAO,GAAI,EAAK,IAAO,EAAO,MAI5F,QAAS,IAAoB,EAAO,EAAa,GAC/C,MAAI,IAAG,KAAK,GACH,GAAA,QAAU,gBAAgB,EAAO,EAAY,OAAQ,EAAY,SAAU,EAAO,EAAG,EAAO,EAAG,IAE/F,GAAA,QAAU,gBAAgB,EAAO,EAAY,OAAQ,EAAY,6DC5B5E,QAAS,IAAT,GAAgF,GAG1E,GAHY,EAA8D,EAA9D,YAAa,EAAiD,EAAjD,MACrB,EAAY,EAAZ,QACF,EAAc,EAAY,UAAU,WAG1C,IAAI,EAAS,CACX,GAAM,GAAa,GAAmB,EAAQ,OAAQ,EAAa,EAAY,OAAO,MAAM,KAE5F,GAAS,GAAA,QAAU,SAAS,GAG9B,EAAS,IAAY,EAAG,EAAG,EAAG,GAE9B,EAAM,QACJ,IAAQ,EAAO,EAAI,EAAY,IAC/B,KAAQ,EAAO,EAAI,EAAY,KAC/B,OAAQ,EAAO,EAAI,EAAY,OAC/B,MAAQ,EAAO,EAAI,EAAY,OAInC,QAAS,IAAT,GAIC,GAJe,GAIf,EAJe,OAAQ,EAIvB,EAJuB,YAAa,EAIpC,EAJoC,MAK3B,EAAoB,EAApB,OAAQ,EAAY,EAAZ,QACV,EAAQ,EAAY,SAAS,cAAgB,EAAY,SAAS,KAExE,IAAK,EAAL,CAIA,GAAM,IAAO,EAAA,GAAA,YAAW,GAClB,EAAQ,GAAmB,EAAQ,MAAO,EAAa,OACvD,EAAQ,GAAmB,EAAQ,MAAO,EAAa,MAE7D,IAAQ,EAAO,IACf,GAAQ,EAAO,IAEX,EAAM,IACR,EAAO,EAAI,KAAK,IAAI,KAAK,IAAI,EAAM,IAAS,EAAO,IAAQ,EAAK,GAAI,EAAM,IAAS,EAAO,KAEnF,EAAM,SACb,EAAO,EAAI,KAAK,IAAI,KAAK,IAAI,EAAM,OAAS,EAAO,OAAQ,EAAK,GAAI,EAAM,OAAS,EAAO,SAExF,EAAM,KACR,EAAO,EAAI,KAAK,IAAI,KAAK,IAAI,EAAM,KAAS,EAAO,KAAQ,EAAK,GAAI,EAAM,KAAS,EAAO,MAEnF,EAAM,QACb,EAAO,EAAI,KAAK,IAAI,KAAK,IAAI,EAAM,MAAS,EAAO,MAAQ,EAAK,GAAI,EAAM,MAAS,EAAO,SAI9F,QAAS,IAAS,EAAM,GACtB,IAAA,GAD8B,IACV,MAAO,OAAQ,SAAU,SAA7C,EAAA,EAAA,EAAA,EAAA,OAAA,IAAuD,CAAlD,GAAM,GAAI,EAAA,EACP,KAAQ,KACZ,EAAK,GAAQ,EAAS,IAI1B,MAAO,uDC/DT,QAAS,IAAO,GACd,MAAO,IAAA,QAAc,MAAM,GAG7B,QAAS,IAAK,GAAG,GACP,GAAuB,EAAvB,YAAa,EAAU,EAAV,MACb,EAAY,EAAZ,QACF,EAAQ,EAAY,SAAS,aAAe,EAAY,SAAS,KAEvE,IAAK,EAAL,CAIA,GAAM,GAAO,GAAA,QAAU,WAAW,EAAY,YAAY,UAEpD,EAAU,GAAA,QAAU,WAAW,GAAA,QAAc,mBAAmB,EAAQ,IAAK,KAAiB,GAC9F,EAAU,GAAA,QAAU,WAAW,GAAA,QAAc,mBAAmB,EAAQ,IAAK,KAAiB,EAEpG,GAAM,SACJ,QAAS,EAAQ,QACjB,QAAS,EAAQ,QACjB,OAAO,EAAA,GAAA,YAAW,GAAA,QAAc,SAChC,OAAO,EAAA,GAAA,YAAW,GAAA,QAAc,UAG9B,EAAM,KACR,EAAM,QAAQ,MAAM,IAAM,EAAK,OAAS,EAAQ,OAChD,EAAM,QAAQ,MAAM,IAAM,EAAK,OAAS,EAAQ,QAEzC,EAAM,SACb,EAAM,QAAQ,MAAM,OAAS,EAAK,IAAM,EAAQ,OAChD,EAAM,QAAQ,MAAM,OAAS,EAAK,IAAM,EAAQ,QAE9C,EAAM,MACR,EAAM,QAAQ,MAAM,KAAO,EAAK,MAAQ,EAAQ,MAChD,EAAM,QAAQ,MAAM,KAAO,EAAK,MAAQ,EAAQ,OAEzC,EAAM,QACb,EAAM,QAAQ,MAAM,MAAQ,EAAK,KAAO,EAAQ,MAChD,EAAM,QAAQ,MAAM,MAAQ,EAAK,KAAO,EAAQ,OAGlD,GAAA,QAAc,IAAI,GAElB,EAAM,QAAU,GC5DlB,QAAS,IAAT,GAAgF,GAM1E,GANY,EAA8D,EAA9D,YAAa,EAAiD,EAAjD,aAAc,EAAmC,EAAnC,QAAS,EAA0B,EAA1B,KAAM,EAAoB,EAApB,MAAO,EAAa,EAAb,YACzD,EAAY,EAAZ,QACF,KACA,EAAgB,GAAM,KAAK,SAAS,GAAM,KAAK,gBAAgB,EAAQ,SACvE,EAAS,GAAiB,GAAM,YAAY,EAAc,EAAS,EAAY,SAAS,KAI9F,IAAuB,gBAAnB,EAAQ,OACV,GACE,EAAG,EAAY,OAAO,MAAM,KAAK,EAAI,EAAO,EAC5C,EAAG,EAAY,OAAO,MAAM,KAAK,EAAI,EAAO,OAG1C,CACJ,GAAM,GAAa,GAAM,KAAK,gBAAgB,EAAQ,OAAQ,EAAc,GAAU,GAEtF,GAAa,GAAM,KAAK,SAAS,KAAiB,EAAG,EAAG,EAAG,GAG7D,GAAM,GAAiB,EAAQ,kBAE/B,IAAI,GAAQ,EAAQ,gBAAkB,EAAQ,eAAe,OAC3D,IAAK,GAAI,GAAQ,EAAG,EAAQ,EAAe,OAAQ,IAAS,CAC1D,GAAM,GAAgB,EAAe,EAErC,GAAQ,MACN,MAAA,EACA,cAAA,EACA,EAAG,EAAY,KAAQ,EAAK,MAAS,EAAc,EAAK,EAAW,EACnE,EAAG,EAAY,IAAQ,EAAK,OAAS,EAAc,EAAK,EAAW,QAKvE,GAAQ,KAAK,GAAM,QACjB,MAAO,EACP,cAAe,MACd,GAGL,GAAM,QAAU,EAGlB,QAAS,IAAT,GAA4C,GAMtC,GACA,EAPU,EAA4B,EAA5B,YAAa,EAAe,EAAf,OAAQ,EAAO,EAAP,MAC3B,EAAqB,EAArB,QAAS,EAAY,EAAZ,QAEX,EAAS,GAAM,YAAY,EAAY,OAAQ,EAAY,QAAS,EAAY,SAAS,MACzF,EAAO,GAAM,UAAW,GACxB,IAIN,GAAK,GAAK,EAAO,EACjB,EAAK,GAAK,EAAO,EAEjB,EAAM,MAAQ,EAAK,EACnB,EAAM,MAAQ,EAAK,CAInB,KAAA,GAFI,GAAM,EAAQ,QAAU,EAAQ,QAAQ,OAAS,EAErD,EAAA,EAAA,EAAqB,EAArB,OAAA,IAA8B,CAAA,GAAA,EAAA,GAAT,EAAS,EAI5B,KAAK,GAJI,GAAmB,EACtB,EAAY,EAAK,EAAI,EAAO,EAC5B,EAAY,EAAK,EAAI,EAAO,EAEzB,EAAQ,EAAG,EAAQ,EAAQ,QAAQ,OAAQ,IAAS,CAC3D,GAAM,GAAa,EAAQ,QAAQ,EAEjC,GADE,GAAM,GAAG,KAAK,GACP,EAAW,EAAW,EAAW,EAAa,EAAQ,GAGtD,EAGN,GAEL,EAAQ,MACN,EAAG,GAAM,GAAG,OAAO,EAAO,GAAM,EAAO,EAAI,EAAO,EAAK,EACvD,EAAG,GAAM,GAAG,OAAO,EAAO,GAAM,EAAO,EAAI,EAAO,EAAK,EAEvD,MAAO,GAAM,GAAG,OAAO,EAAO,OAAS,EAAO,MAAQ,EAAQ,SAKpE,GAAM,IACJ,OAAQ,KACR,SAAS,EACT,SAAU,EACV,MAAO,EACP,GAAI,EACJ,GAAI,EAGN,KAAK,EAAI,EAAG,EAAM,EAAQ,OAAQ,EAAI,EAAK,IAAK,CAC9C,EAAS,EAAQ,EAEjB,IAAM,GAAQ,EAAO,MACf,EAAK,EAAO,EAAI,EAAK,EACrB,EAAK,EAAO,EAAI,EAAK,EACrB,EAAW,GAAM,MAAM,EAAI,GAC7B,EAAU,GAAY,CAItB,KAAU,EAAA,GAAY,EAAQ,SAAW,EAAQ,QAAU,EAAA,IAC7D,GAAU,GAGP,EAAQ,UAAW,EAEnB,EAAQ,SAAW,IAAU,EAAA,EAE5B,EAAW,EAAQ,EAAQ,SAAW,EAAQ,MAE7C,IAAU,EAAA,GAAY,EAAQ,QAAU,EAAA,GAEzC,EAAW,EAAQ,UAEnB,EAAQ,SAAW,EAAW,EAAQ,YAC1C,EAAQ,OAAS,EACjB,EAAQ,SAAW,EACnB,EAAQ,MAAQ,EAChB,EAAQ,QAAU,EAClB,EAAQ,GAAK,EACb,EAAQ,GAAK,EAEb,EAAM,MAAQ,GAId,EAAQ,UACV,EAAO,EAAI,EAAQ,OAAO,EAC1B,EAAO,EAAI,EAAQ,OAAO,GAG5B,EAAM,QAAU,wdCnIlB,QAAS,IAAO,GAAG,GACT,GAAuB,EAAvB,YAAa,EAAU,EAAV,MACb,EAAY,EAAZ,QACF,EAAQ,EAAY,SAAS,KAEnC,KAAK,EAAS,MAAO,KAErB,GAAI,OACF,SACE,iBACE,EAAG,EAAM,KAAO,EAAI,EACpB,EAAG,EAAM,IAAM,EAAI,IAErB,QAAU,EAAG,EAAG,EAAG,GACnB,OAAQ,EAAQ,QAAU,OAC1B,MAAO,EAAQ,QAInB,EAAM,aAAe,EAAM,gBACxB,QAAS,WACT,IAAK,MAGR,GAAA,QAAK,MAAM,GACX,EAAM,QAAU,EAAI,MAAM,QAE1B,EAAI,MAAQ,EAGd,QAAS,IAAK,GAAG,GACP,GAA+B,EAA/B,YAAa,EAAkB,EAAlB,MAAO,EAAW,EAAX,OACpB,EAAqB,EAArB,QAAS,EAAY,EAAZ,QACX,GACJ,EAAG,EAAO,EAAI,EAAQ,GAAG,EACzB,EAAG,EAAO,EAAI,EAAQ,GAAG,EAG3B,GAAM,SAAU,EAAA,GAAA,YAAW,GAC3B,EAAM,QAAQ,UAEd,KAAA,GAAA,GAAA,EAAA,GAA0B,EAAQ,aAAlC,OAAA,IAAkD,CAAA,GAAA,EAAA,IAAxB,EAAQ,aAAgB,EAAA,IAAvC,GAAuC,EAC5C,MAAM,EASV,IANE,EADE,GAAG,KAAK,GACD,EAAW,EAAS,EAAG,EAAS,EAAG,GAGnC,EAGX,CAEA,IAAA,GAAA,GAAA,EAAA,EAA+B,EAAM,aAArC,OAAA,IAAmD,CAAA,GAAA,EAAA,GAApB,EAAM,aAAc,EAAA,IAAA,GAAA,EAAA,EAAA,GAAA,EAAA,GAAvC,EAAuC,EAAA,GAA/B,EAA+B,EAAA,EACjD,IAAI,IAAU,IAAU,IAAU,GAAQ,CACxC,EAAO,EAAI,EAAO,GAClB,EAAO,EAAI,EAAO,EAElB,QAIJ,EAAM,QAAQ,QAAQ,KAAK,IAG7B,GAAA,QAAK,IAAI,GAET,EAAM,QAAU,sDC1ClB,QAAS,IAAO,GACd,GAAM,GAAQ,EAAI,YAAY,SAAS,KAEvC,OAAK,IAEL,EAAI,MAAM,aAAe,EAAI,MAAM,gBAChC,EAAM,KAAO,OAAS,QAAS,EAAM,IAAM,MAAQ,WAG/C,GAAA,QAAS,MAAM,IAND,KASvB,QAAS,IAAK,GACZ,MAAO,IAAA,QAAS,IAAI,yXCuBtB,QAAS,IAAwB,GA6B/B,IAAK,GAnBH,GAGE,EAHF,YAAa,EAGX,EAHW,QAAS,EAGpB,EAHoB,MAAO,EAG3B,EAH2B,YAFhC,EAKK,EAFF,KAAA,MAHH,KAAA,EAGW,EAAY,aAAa,KAHpC,EAAA,EAKK,EADF,QAAA,MAJH,KAAA,EAIa,GAAoB,GAJjC,EAAA,EASK,EADF,aAAA,MARH,KAAA,EAQkB,GAAI,IAAA,QAAa,EAAM,EAAS,EAAO,EAAa,GARtE,EAWO,GACJ,YAAA,EACA,QAAA,EACA,MAAA,EACA,YAAA,EACA,QAAA,EACA,KAAA,EACA,aAAA,GAGO,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAAK,CACvC,GAAM,GAAS,EAAQ,EAEvB,KAAK,GAAM,KAAQ,GAAO,UACvB,EAAqB,GAAQ,EAAO,MAAM,EAG7C,IAAM,GAAS,GAAM,YAAY,EAAO,UAAW,EAAO,QAU1D,IARA,EAAa,eAAe,GAC5B,EAAa,UAAY,EAAO,UAChC,EAAa,cAAgB,EAAO,QAEpC,EAAO,UAAU,KAAK,GAEtB,EAAa,UAAU,GAEnB,EAAa,6BACZ,EAAa,oBACT,EAAI,EAAK,EAAQ,QAAU,EAAQ,EAAI,GAAG,UAAY,EAAa,cAC1E,MAMJ,GAFA,GAAQ,KAAK,QAAS,GAET,QAAT,EAAgB,CAGlB,GAAM,GAAU,EAAa,OACzB,IACA,YAAA,EACA,QAAA,EACA,MAAA,EACA,YAAA,EACA,KAAM,cAEN,CAEJ,GAAY,QAAU,EACtB,EAAY,QAAU,EAAQ,UAGhC,MAAO,GAGT,QAAS,IAAT,GAMC,GANiD,GAMjD,EANiD,YAAa,EAM9D,EAN8D,QAAS,EAMvE,EANuE,MAAO,EAM9E,EAN8E,YAAa,EAM3F,EAN2F,KAOpF,EAAe,EAAY,gBAAgB,GAC3C,EAAc,EAAY,SAAS,EAGzC,IAAa,QAAT,IAAmB,EAAY,kBAE7B,GAAe,EAAY,aAAe,GAC9C,QAeF,KAAA,GAZM,GAAO,GAAM,IAAI,QAAQ,GACzB,GACJ,YAAA,EACA,QAAA,EACA,MAAA,EACA,YAAA,EACA,KAAA,EACA,KAAA,EACA,WACA,QAAS,MAGX,EAAA,EAAA,EAAsB,EAAtB,OAAA,IAA4B,CAAA,GAAA,EAAA,GAAN,EAAM,EAAA,IAAjB,GAAiB,CAC1B,GAAU,QAAU,EAEpB,GAAQ,KAAK,kBAAmB,GAQlC,MALa,SAAT,IACF,EAAU,QAAU,EAAU,QAAQ,OAAO,SAAC,GAAD,MAC3C,GAAO,UAAU,QAAQ,eAAiB,EAAY,SAAS,GAAc,KAAK,YAG/E,EAAU,QAGnB,QAAS,IAAS,GAAY,GAE1B,GACE,EADF,YAGF,GAAM,cAAgB,GACtB,EAAM,SAAS,QAAQ,cAAgB,GAAc,SAErD,EAAa,QAAQ,GAAG,MAAO,SAAA,GAAoB,GAAjB,GAAiB,EAAjB,WAChC,GAAY,QAAa,KACzB,EAAY,QAAa,IAG3B,EAAa,QAAQ,GAAG,iBAAkB,SAAA,GAA0B,GAAvB,GAAuB,EAAvB,KAAM,EAAiB,EAAjB,aAC5C,GAAQ,EAAY,OAIzB,EAAY,MAAS,SAAU,EAAA,EAAU,QAAS,SAGpD,EAAa,QAAQ,GAAG,OAAQ,SAAA,GAAgE,GAA7D,GAA6D,EAA7D,YAAa,EAAgD,EAAhD,QAAS,EAAuC,EAAvC,MAAO,EAAgC,EAAhC,YAAa,EAAmB,EAAnB,cACrE,EAAe,EAAY,gBAAgB,EAE5C,IAAmB,EAAY,gBAAiB,EAAY,kBAC3D,EAAY,eACd,aAAa,EAAY,SAAS,GAAc,KAAK,SAGvD,IACE,YAAA,EACA,QAAA,EACA,MAAA,EACA,YAAA,EACA,KAAM,YAKZ,EAAa,QAAQ,GAAG,OAAQ,SAAA,GAc9B,IAAA,GAdiC,GAA4D,EAA5D,YAAa,EAA+C,EAA/C,QAAS,EAAsC,EAAtC,MAAO,EAA+B,EAA/B,YAAa,EAAkB,EAAlB,aACrE,EAAQ,EAAY,SAAS,GAAc,KAC3C,EAAO,GAAM,IAAI,QAAQ,GACzB,GACJ,YAAA,EACA,QAAA,EACA,MAAA,EACA,YAAA,EACA,KAAM,OACN,WACA,KAAA,EACA,QAAS,MAGX,EAAA,EAAA,EAAsB,EAAtB,OAAA,IAA4B,CAAA,GAAA,EAAA,GAAN,EAAM,EAAA,IAAjB,GAAiB,CAC1B,GAAU,QAAU,EAEpB,GAAQ,KAAK,kBAAmB,GAGlC,GAAK,EAAU,QAAQ,OAAvB,CAIA,IAAA,GAFI,GAAc,EAAA,EAElB,EAAA,EAAA,EAAqB,EAAU,QAA/B,OAAA,IAAwC,CAAA,GAAA,EAAA,GAAnB,EAAU,QAAS,EAAA,IAA7B,GAA6B,EAChC,EAAe,EAAO,UAAU,QAAQ,YAE1C,GAAe,IACjB,EAAc,GAIlB,EAAM,SAAW,EACjB,EAAM,QAAU,WAAW,WACzB,IACE,YAAA,EACA,YAAA,EACA,QAAA,EACA,MAAA,EACA,KAAM,UAEP,MAGL,EAAa,QAAQ,GAAG,KAAM,SAAA,GAAiD,GAA9C,GAA8C,EAA9C,YAAa,EAAiC,EAAjC,QAAS,EAAwB,EAAxB,MAAO,EAAiB,EAAjB,WACvD,GAAY,iBACf,IAAO,YAAA,EAAa,YAAA,EAAa,QAAA,EAAS,MAAA,EAAO,KAAM,SAI3D,KAAA,GAzF4B,IAyFF,KAAM,UAAhC,EAAA,EAAA,EAAA,EAAA,OAAA,IAA2C,CAAtC,GAAM,GAAU,EAAA,EACnB,GAAa,QAAQ,GAAG,EAAY,SAAA,GAAkC,GAA/B,GAA+B,EAA/B,YAAa,EAAkB,EAAlB,YAC9C,GAAY,SAAS,GAAc,MACrC,aAAa,EAAY,SAAS,GAAc,KAAK,WAK3D,IAAK,GAAI,GAAI,EAAG,EAAI,GAAc,OAAQ,IACxC,EAAa,QAAQ,GAAG,GAAc,GAAI,GAAqB,GAAa,KAIhF,QAAS,IAAsB,GAC7B,MAAO,UAAA,GAA2D,GAA/C,GAA+C,EAA/C,YAAa,EAAkC,EAAlC,QAAS,EAAyB,EAAzB,KACvC,KAAO,YAAA,EAAa,YAD4C,EAAlB,YACb,QAAA,EAAS,MAAA,EAAO,KAAA,KC5RrD,QAAS,IAAS,GAAK,GAEnB,GAEE,EAFF,cACA,EACE,EADF,YAGF,GAAc,QAAQ,GAAG,MAAO,IAChC,EAAc,QAAQ,GAAG,QAAS,SAAC,GAAD,MAAS,IAAQ,EAAK,IAExD,KAAA,GATqB,IASC,OAAQ,KAAM,SAAU,UAA9C,EAAA,EAAA,EAAA,EAAA,OAAA,IAAyD,CAApD,GAAM,GAAM,EAAA,EACf,GAAa,QAAQ,GAAG,EAAQ,IAIlC,EAAc,SAAS,mBAAqB,EAC5C,EAAc,MAAM,KAAK,cAG3B,QAAS,IAAT,GAAgC,GAAd,GAAc,EAAd,YACU,UAAtB,EAAa,OAEjB,EAAa,OAAS,EAAa,OAAS,GAAK,GAGnD,QAAS,IAAT,EAAuE,GAAa,GAAhE,GAAgE,EAAhE,YAAa,EAAmD,EAAnD,aAAc,EAAqC,EAArC,YAAa,EAAwB,EAAxB,OAC1D,IAA0B,SAAtB,EAAa,MAAoB,EAAQ,OAA7C,CAGA,GAAM,GAAW,EAAQ,GAAG,UAAU,QAAQ,kBAG1C,IAAY,IAGhB,EAAY,mBAAqB,WAAW,WAC1C,EAAc,MACZ,YAAA,EACA,YAAA,EACA,KAAM,OACN,QAAS,EACT,MAAO,KAER,KAGL,QAAS,IAAT,GAAuC,GAAb,GAAa,EAAb,WAGpB,GAAY,qBACd,cAAc,EAAY,oBAC1B,EAAY,mBAAqB,MC3CrC,QAAS,IAAS,GAAY,GAE1B,GAIE,EAJF,cACA,EAGE,EAHF,QACA,EAEE,EAFF,aACA,EACE,EADF,aAGF,GAAc,QAAQ,GAAG,kBAAmB,SAAA,GAAiD,GAA9C,GAA8C,EAA9C,QAAS,EAAqC,EAArC,QAAS,EAA4B,EAA5B,KAAM,EAAsB,EAAtB,WACrE,GAAM,cAAc,aAAa,EAAS,SAAC,GACzC,GAAM,GAAY,EAAa,OACzB,EAAU,EAAU,OAGxB,GAAU,MAAM,IAChB,EAAU,MAAM,GAAM,QACtB,GAAG,QAAQ,IACX,EAAa,gBAAgB,EAAS,EAAS,IAC/C,EAAQ,MACN,QAAA,EACA,UAAA,EACA,OAAS,aAAA,SAMjB,EAAc,QAAQ,GAAG,MAAO,SAAA,GAAqB,GAAlB,GAAkB,EAAlB,YACjC,GAAa,OAAO,QAAU,SAAU,GACtC,MAAO,GAAa,QAAQ,MAIhC,EAAc,QAAQ,GAAG,MAAO,SAAA,GAA8B,GAA3B,GAA2B,EAA3B,aAAc,EAAa,EAAb,SAC/C,EAAA,GAAA,SAAO,EAAa,OAAO,QAAS,EAAc,WAClD,EAAA,GAAA,SAAO,EAAa,OAAO,QAAS,EAAQ,sBAG9C,EAAA,GAAA,OAAM,EAAQ,WAAY,EAAc,OAExC,EAAa,UAAU,cAAgB,EAEvC,IAAM,GAAqB,EAAa,UAAU,iBAElD,GAAa,UAAU,kBAAoB,SAAU,EAAY,GAC/D,GAAM,GAAM,EAAmB,KAAK,KAAM,EAAY,EAMtD,OAJI,KAAQ,OACV,KAAK,OAAO,QAAQ,GAAc;6CAG7B,GAIX,QAAS,IAAyC,GAGhD,OAFA,EAAA,GAAA,SAAO,KAAK,OAAO,QAAS,GAErB,yDCnET,QAAS,IAAS,GAChB,GAAA,QAAc,QAAQ,GACtB,GAAA,QAAW,QAAQ,GACnB,GAAA,QAAoB,QAAQ,GCWxB,QAAU,IAAS,GAUvB,IAAA,GARE,GAKE,EALF,QACA,EAIE,EAJF,aAGA,EACE,EADF,aAIF,EAAA,EAAA,EAAyB,EAAQ,MAAjC,OAAA,IAAwC,CAAA,GAAA,EAAA,GAAf,EAAQ,MAAO,EAAA,IAA7B,GAA6B,CACtC,GAAQ,WAAW,KAAnB,GAAA,OAA2B,EAA3B,WAIF,EAAa,QAAQ,GAAG,OAAQ,SAAA,GAAoB,GAAjB,GAAiB,EAAjB,WACD,YAA5B,EAAY,cACd,EAAY,iBACZ,GAAA,IAAI,OAAO,EAAM,aAAa,KAAM,MAoBxC,EAAa,UAAU,OAAS,SAAU,GACxC,MAAO,IAAO,KAAM,EAAQ,IAIhC,QAAS,IAAQ,EAA4B,EAAqB,GAShE,IAAA,GARM,GAAW,GAAA,GAAG,OAAO,EAAa,QACpC,GAAA,IAAI,KAAK,EAAa,SAAS,iBAAiB,EAAa,UAC5D,EAAa,QAGZ,EAAW,GAAA,IAAI,OAAe,QAC9B,EAAwC,KAAe,KAE7D,EAAA,EAAA,EAAsB,EAAtB,OAAA,IAAgC,CAAA,GAAA,EAAA,IAAA,UAT4C,WAAA,EAStD,EATsD,EAAA,IASjE,GATiE,EAUpE,EAAO,EAAa,QAAQ,EAElC,KAAK,EAAQ,MAAA,OAEb,IAAM,GAAqB,GAAA,IAAI,KAC7B,EAAM,aAAa,KACnB,SAAC,GACC,MAAO,GAAY,eACjB,EAAY,SAAW,GACvB,EAAY,UAAY,GACxB,EAAY,SAAS,OAAS,EAAO,OAEvC,MAA4B,EAEhC,IAAI,EACF,EAAmB,OAEnB,EAAgB,EAAmB,gBAAkB,GAAI,GAAQ,SAAC,GAChE,EAAmB,eAAiB,QAGnC,CACH,GAAM,GAAO,GAAA,KAAU,WAAW,GAC5B,GACJ,MAAa,EAAG,EAAK,EAAG,EAAG,EAAK,GAChC,QAAa,EAAG,EAAK,EAAG,EAAG,EAAK,GAChC,UAAW,KAAK,OAGZ,EAAQ,GAAA,QAAa,cAAc,EACzC,GAAgB,GAAY,EAAO,EAAc,EAAS,EAAQ,GAGhE,GACF,EAAS,KAAK,MAhCH,MAoCf,MAAO,IAAY,EAAQ,IAAI,GAAU,KAAK,WAAA,MAAM,KAGtD,QAAS,IAAa,EAAc,EAA4B,EAAkB,EAAqB,GACrG,GAAM,IAAc,EAAA,GAAA,iBAAiB,YAAa,UAAY,GACxD,GACJ,YAAA,EACA,MAAA,EACA,QAAS,EACT,YAAa,EACb,MAAO,SAGT,GAAY,OAAS,EACrB,EAAY,QAAU,EACtB,EAAY,UAAW,EAAA,GAAA,WAAW,GAClC,EAAY,UAAY,EACxB,EAAY,cAAc,EAAO,EAAO,GAAS,GAEjD,EAAY,SAAS,EAErB,IAAM,GAAiB,GAAA,IAAI,OAA0B,QACjD,GAAK,IAAA,IAAI,OAA0B,QAAQ,SAAC,GAC5C,EAAY,eAAiB,IAE7B,IAgBJ,OAdA,GAAY,eAAiB,EAC7B,EAAY,MAAM,EAAQ,EAAc,GAEpC,EAAY,cACd,EAAY,KAAK,GACjB,EAAY,IAAI,IAGhB,EAAY,OAGd,EAAY,cAAc,EAAO,GACjC,EAAY,eAAgB,EAErB,gWC3IH,QAAU,IAAM,GACpB,GAAA,MAAM,KAAK,GAEX,GAAA,QAAS,IAAI,GAAA,SAGb,GAAA,QAAS,IAAI,GAAA,SAGb,GAAA,QAAS,IAAI,IAGb,GAAA,QAAS,IAAI,IAGb,GAAA,QAAS,IAAI,IAGb,GAAA,QAAS,IAAI,GAAA,QAGb,KAAK,GAAM,KAAQ,IAAW,CAAA,GAAA,GACI,GAAU,GAAlC,EADoB,EACpB,UAAW,EADS,EACT,QAEnB,GAAU,SAAW,EACrB,GAAA,MAAM,SAAS,UAAU,GAAQ,EASnC,MALA,IAAA,QAAS,IAAI,GAAA,SAGb,GAAA,QAAS,IAAI,GAAA,SAEN,GAAA,0aC7CT,QAAS,IAAY,GACnB,GAAM,KACH,IAAK,MACL,OAAQ,QACR,QAAS,WACT,QAAS,WACV,OAAO,SAAA,GAAA,GAAA,GAAA,GAAA,EAAA,GAAE,EAAF,EAAA,GAAU,EAAV,EAAA,EAAA,OAAsB,KAAU,IAAQ,IAAU,IAE3D,OAAO,UAAU,EAAG,GAclB,IAAA,GAZE,GAQE,EARF,MAFiB,EAUf,EAPF,OAAA,MAHiB,KAAA,GAIf,MAAS,EAAA,EACT,MAAS,EAAA,EACT,KAAS,EAAA,EACT,OAAS,EAAA,GAPM,EAAA,EAUf,EADF,OAAA,MATiB,KAAA,GASN,EAAG,EAAG,EAAG,GATH,EAYb,GAAW,MAAA,GAEjB,EAAA,EAAA,EAA+B,EAA/B,OAAA,IAA4C,CAAA,GAAA,EAAA,GAAb,EAAa,EAAA,IAAA,GAAA,EAAA,EAAA,GAAA,EAAA,GAAhC,EAAgC,EAAA,GAAxB,EAAwB,EAAA,GACpC,EAAQ,KAAK,OAAO,EAAI,EAAO,GAAK,EAAK,IACzC,EAAQ,KAAK,OAAO,EAAI,EAAO,GAAK,EAAK,GAE/C,GAAO,GAAU,KAAK,IAAI,EAAO,KAAM,KAAK,IAAI,EAAO,MAAO,EAAQ,EAAK,GAAU,EAAO,IAC5F,EAAO,GAAU,KAAK,IAAI,EAAO,IAAK,KAAK,IAAI,EAAO,OAAQ,EAAQ,EAAK,GAAU,EAAO,IAG9F,MAAO,qhBCZJ,QAAS,IAAM,GAGpB,OAFA,EAAA,GAAA,MAAa,GAEN,GAAA,QAAS,KACd,QADkB,SACT,GACP,GAAA,QAAS,WAAY,EAAA,GAAA,SAAO,EAAM,UAAW,IAC7C,GAAA,QAAS,SAAW,GACpB,GAAA,QAAS,eAAiB,GAAA,QAAS,SAAS,Q/CnBlD,GACA,ySgDPe,SAAC,GAAD,SAAc,IAAS,EAAM,SAAY,YAAiB,GAAM,4H7CA/E,IAAA,sDAAA,IAEM,IACJ,eAAY,GACZ,WAAQ,GACR,UAAA,EACA,KAAA,EAsBoB,oBAAX,SACT,GAAI,WAAa,GACjB,GAAI,eAAa,IAGjB,EAAK,QAaP,GAAI,KAAO,SAEI,yL8C9Cf,IAAA,IAAA,EAAA,IACA,GAAA,EAAA,IAEa,GAAS,SAAC,GAAD,MACpB,KAAU,GAAA,QAAI,SAAU,EAAA,GAAA,SAAS,gBAE5B,IAAM,IAAU,SAAC,GAAD,MACrB,IAAO,IAA6B,KAAnB,EAAM,uBAElB,IAAM,IAAS,SAAC,GAAD,QAClB,GAA2B,WAAjB,EAAO,gBAEd,IAAM,IAAO,SAAC,GAAD,MACD,kBAAV,cAEF,IAAM,IAAS,SAAC,GAAD,MACH,gBAAV,gBAEF,IAAM,IAAO,SAAC,GAAD,MACD,iBAAV,cAEF,IAAM,IAAS,SAAC,GAAD,MACH,gBAAV,gBAEF,IAAM,IAAU,SAAC,GACtB,IAAK,GAA2B,WAAjB,EAAO,GAAuB,OAAO,CAEpD,IAAM,GAAU,GAAA,QAAI,UAAU,IAAU,GAAA,QAAI,MAE5C,OAAQ,kBAAkB,KAAlB,EAA8B,EAAQ,UAC1C,YAAiB,GAAQ,QACN,IAAnB,EAAM,UAA4C,gBAAnB,GAAM,uBAGpC,IAAM,IAA6B,SAAC,GAAD,MACxC,IAAO,MACL,EAAM,aACR,oBAAoB,KAAK,EAAM,YAAY,8BAEtC,IAAM,IAAQ,SAAC,GAAD,MAClB,IAAO,QACiB,KAAjB,EAAM,QACd,GAAK,EAAM,6F7C5Cb,IAAA,sDAAA,IACA,2SAAA,6ECDA,IAAA,4SAAA,IACA,GAAA,EAAA,IACA,GAAA,EAAA,IAeM,cAOJ,QAAA,GAAa,GAAkC,EAAA,KAAA,GAL/C,KAAA,SACA,KAAA,oBAAqB,EACrB,KAAA,6BAA8B,EAI5B,KAAK,SAAU,EAAA,GAAA,YAAW,8CAGtB,GACJ,GAAI,GACE,EAAS,KAAK,QAIf,EAAY,KAAK,MAAM,EAAM,QAChC,EAA0B,EAAO,IAI9B,EAAM,oBAAsB,IAAW,EAAY,EAAO,EAAM,QACnE,EAA0B,EAAO,8BAIjC,EAAc,GAChB,GAAM,IAAY,EAAA,GAAA,SAAU,EAAM,EAElC,KAAK,IAAQ,GACX,KAAK,MAAM,GAAQ,GAAI,MAAM,KAAK,MAAM,OAAa,EAAU,gCAI9D,EAAc,GACjB,GAAM,IAAY,EAAA,GAAA,SAAU,EAAM,EAElC,KAAK,IAAQ,GAAW,CACtB,GAAM,GAAY,KAAK,MAAM,EAE7B,IAAK,GAAc,EAAU,OAE7B,IAAA,GAAA,GAAA,EAAA,EAA0B,EAAU,GAApC,OAAA,IAA2C,CAAA,GAAA,EAAA,GAAjB,EAAU,GAAO,EAAA,IAAhC,GAAgC,EACnC,EAAQ,EAAU,QAAQ,IAEjB,IAAX,GACF,EAAU,OAAO,EAAO,iBAOnB,0G6CtCR,IAAM,KACX,MACE,eAAgB,OAChB,YAAa,QAGf,WACE,SAAS,EACT,QAAU,EAAG,EAAG,EAAG,IAGrB,kCAGa,8F5C/Cf,IAAM,KAcJ,KAAA,EACA,SAAU,KACV,iBAAkB,KAClB,WAAY,KACZ,cAAe,KAEf,mBAAoB,KACpB,QAAS,KACT,YAAa,KACb,MAAO,KACP,MAAO,KACP,aAAc,SAKD,8FC9Bf,IAAA,IAAA,EAAA,IACA,2SAAA,IACA,GAAA,EAAA,IAEM,IACJ,KAAA,EACA,cAAe,KACf,qBAAsB,KACtB,OAAQ,KACR,MAAO,KACP,MAAO,KACP,cAAe,KACf,wBAAyB,KACzB,YAAa,KAQb,WAAY,SA8DC,+SCnFf,IAAA,IAAA,EAAA,IACA,GAAA,EAAA,IACA,2SAAA,IACA,GAAA,EAAA,2KCFA,IAAA,sDAAA,IACA,2SAAA,QAoEE,sBAAA,EACA,gBAAA,EACA,SAAA,EACA,WAAA,EACA,WAAA,+K0C1Ea,SAAC,EAAG,GAAJ,MAAW,MAAK,KAAK,EAAI,EAAI,EAAI,8HCAhD,IAQY,IARZ,GAAA,EAAA,IACA,GAAA,EAAA,IACA,GAAA,EAAA,IACA,GAAA,EAAA,qBAKA,SAAY,GACV,EAAA,MAAA,QACA,EAAA,KAAA,OACA,EAAA,IAAA,MACA,EAAA,MAAA,IAJU,KAAU,GAAA,WAAV,WAOC,eA2CX,QAAA,GACE,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAAa,EAAA,KAAA,GAZf,KAAA,6BAA8B,EAC9B,KAAA,oBAAqB,EAanB,EAAU,GAAW,EAAY,OAEjC,IAAM,GAAc,EAAY,OAE1B,GAAiB,GAAU,EAAO,SAAY,GAAA,SAAkB,YAChE,GAAc,EAAA,GAAA,SAAY,EAAQ,EAAS,GAC3C,EAAwB,UAAV,EACd,EAAwB,QAAV,EACd,EAAc,EAAW,KAAO,EAAY,UAC5C,EAAc,EAChB,EAAY,OAAO,MACnB,GACI,KAAM,EAAU,KAAM,OAAQ,EAAU,OAAQ,UAAW,EAAY,OAAO,IAAI,WACpF,EAAY,OAAO,GAEzB,MAAK,MAAY,EAAA,GAAA,YAAW,EAAO,MACnC,KAAK,QAAY,EAAA,GAAA,YAAW,EAAO,QACnC,KAAK,UAAY,EAAO,UAEnB,IACH,KAAK,KAAK,GAAK,EAAO,EACtB,KAAK,KAAK,GAAK,EAAO,EAEtB,KAAK,OAAO,GAAK,EAAO,EACxB,KAAK,OAAO,GAAK,EAAO,GAG1B,KAAK,QAAgB,EAAM,QAC3B,KAAK,OAAgB,EAAM,OAC3B,KAAK,SAAgB,EAAM,SAC3B,KAAK,QAAgB,EAAM,QAC3B,KAAK,OAAiB,EAAqB,OAC3C,KAAK,QAAiB,EAAqB,QAC3C,KAAK,OAAgB,EACrB,KAAK,cAAgB,EACrB,KAAK,cAAgB,GAAW,KAChC,KAAK,OAAgB,EACrB,KAAK,KAAgB,GAAS,GAAc,GAAS,IACrD,KAAK,YAAgB,EACrB,KAAK,aAAgB,EAErB,KAAK,GAAK,EACN,EAAY,SAAS,EAAY,SAAS,OAAS,GAAG,SACtD,EAAU,GAEd,KAAK,GAAW,EAAY,OAAO,MAAM,KAAK,EAAI,EAAO,EACzD,KAAK,GAAW,EAAY,OAAO,MAAM,KAAK,EAAI,EAAO,EACzD,KAAK,SAAW,EAAY,OAAO,MAAM,OAAO,EAAI,EAAO,EAC3D,KAAK,SAAW,EAAY,OAAO,MAAM,OAAO,EAAI,EAAO,EAGzD,KAAK,MADH,GAAY,GACC,EAAG,EAAG,EAAG,IAItB,EAAG,KAAK,GAAa,EAAI,EAAU,GAAa,EAChD,EAAG,KAAK,GAAa,EAAI,EAAU,GAAa,GAIpD,KAAK,GAAY,EAAY,OAAO,MAAM,UAC1C,KAAK,SAAY,KAAK,UAAY,KAAK,GAGvC,KAAK,UAAW,EAAA,GAAA,YAAW,EAAY,OAAO,SAAS,IACvD,KAAK,OAAQ,EAAA,GAAA,SAAM,KAAK,SAAS,EAAG,KAAK,SAAS,GAElD,KAAK,MAAS,GAAoB,iBAAV,EAA4B,KAAK,WAAa,kDAwBtE,GAAM,GAAc,KAAK,WAEzB,IAAI,EAAY,UAAU,MAAQ,KAC9B,KAAK,UAAY,EAAY,UAAU,UAAY,IACrD,MAAO,KAGT,IAAI,GAAQ,IAAM,KAAK,MAAM,EAAY,UAAU,UAAW,EAAY,UAAU,WAAa,KAAK,EAGlG,GAAQ,IACV,GAAS,IAGX,IAAM,GAAO,OAAiB,GAAS,EAAQ,MACzC,EAAO,OAAiB,GAAS,EAAQ,MAEzC,GAAS,IAAS,OAAiB,GAAS,EAAS,KAG3D,QACE,GAAA,EACA,MAJa,GAAU,MAAgB,GAAS,EAAQ,MAKxD,KAAA,EACA,MAAA,EACA,MAAA,EACA,MAAO,EAAY,UAAU,MAC7B,UACE,EAAG,EAAY,UAAU,UACzB,EAAG,EAAY,UAAU,yGAW7B,KAAK,4BAA8B,KAAK,oBAAqB,4CAO7D,KAAK,oBAAqB,gCApEb,MAAO,MAAK,KAAK,gBACrB,GAAS,KAAK,KAAK,EAAI,gCACnB,MAAO,MAAK,KAAK,gBACrB,GAAS,KAAK,KAAK,EAAI,kCAEjB,MAAO,MAAK,OAAO,gBACvB,GAAS,KAAK,OAAO,EAAI,kCACrB,MAAO,MAAK,OAAO,gBACvB,GAAS,KAAK,OAAO,EAAI,6BAE1B,MAAO,MAAK,MAAM,gBACtB,GAAS,KAAK,MAAM,EAAI,6BACpB,MAAO,MAAK,MAAM,gBACtB,GAAS,KAAK,MAAM,EAAI,oCAEb,MAAO,MAAK,SAAS,gBACzB,GAAS,KAAK,SAAS,EAAI,oCACvB,MAAO,MAAK,SAAS,gBACzB,GAAS,KAAK,SAAS,EAAI,sCAsD7B,yFzClNf,IAAA,IAAA,EAAA,IACA,GAAA,EAAA,iGCwBA,EAAc,iBACZ,OAAQ,yDAGK,6FyC7Bf,IAAA,IAAA,EAAA,IACA,GAAA,EAAA,IACA,GAAA,EAAA,IACA,GAAA,EAAA,IACA,GAAA,EAAA,IACA,GAAA,EAAA,IAEM,IACJ,WADmB,SACP,EAAM,GAChB,EAAK,KAAO,EAAK,SACjB,EAAK,KAAK,EAAI,EAAI,KAAK,EACvB,EAAK,KAAK,EAAI,EAAI,KAAK,EAEvB,EAAK,OAAS,EAAK,WACnB,EAAK,OAAO,EAAI,EAAI,OAAO,EAC3B,EAAK,OAAO,EAAI,EAAI,OAAO,EAE3B,EAAK,UAAY,EAAI,WAGvB,eAbmB,SAaH,EAAW,EAAM,GAC/B,EAAU,KAAK,EAAO,EAAI,KAAK,EAAO,EAAK,KAAK,EAChD,EAAU,KAAK,EAAO,EAAI,KAAK,EAAO,EAAK,KAAK,EAChD,EAAU,OAAO,EAAK,EAAI,OAAO,EAAK,EAAK,OAAO,EAClD,EAAU,OAAO,EAAK,EAAI,OAAO,EAAK,EAAK,OAAO,EAClD,EAAU,UAAY,EAAI,UAAY,EAAK,WAG7C,iBArBmB,SAqBD,EAAW,GAC3B,GAAM,GAAK,KAAK,IAAI,EAAM,UAAY,IAAM,KAE5C,GAAU,KAAK,EAAM,EAAM,KAAK,EAAI,EACpC,EAAU,KAAK,EAAM,EAAM,KAAK,EAAI,EACpC,EAAU,OAAO,EAAI,EAAM,OAAO,EAAI,EACtC,EAAU,OAAO,EAAI,EAAM,OAAO,EAAI,EACtC,EAAU,UAAY,GAGxB,gBA/BmB,SA+BD,GAChB,MAAQ,aAAmB,IAAA,QAAI,OAAS,YAAmB,IAAA,QAAI,OAIjE,MApCmB,SAoCZ,EAAM,EAAS,GAOpB,MANA,GAAK,MACL,EAAO,GAAQ,OAEf,EAAG,EAAI,EAAQ,EAAO,KACtB,EAAG,EAAI,EAAQ,EAAO,KAEf,GAGT,UA9CmB,SA8CR,EAAwD,GAcjE,MAbA,GAAO,IAAU,EAAG,EAAG,EAAG,GAGtB,GAAA,QAAQ,eAAiB,GAAa,gBAAgB,IACxD,GAAa,MAAM,SAAU,EAAS,GAEtC,EAAK,GAAK,OAAO,QACjB,EAAK,GAAK,OAAO,SAGjB,GAAa,MAAM,OAAQ,EAAS,GAG/B,GAGT,YA/DmB,SA+DN,EAAS,GAWpB,MAVA,GAAS,MAEL,GAAA,QAAQ,eAAiB,GAAa,gBAAgB,GAExD,GAAa,MAAM,SAAU,EAAS,GAGtC,GAAa,MAAM,SAAU,EAAS,GAGjC,GAGT,aA7EmB,SA6EL,GACZ,MAAO,IAAG,OAAO,EAAQ,WAAa,EAAQ,UAAY,EAAQ,YAGpE,UAjFmB,SAiFR,EAAW,EAAiB,GACrC,GAAM,GAAW,EAAS,OAAS,EAC/B,GAAa,eAAe,GAC5B,EAAS,GAEP,IAEN,IAAa,UAAU,EAAS,GAChC,EAAU,KAAK,EAAI,EAAM,EACzB,EAAU,KAAK,EAAI,EAAM,EAEzB,GAAa,YAAY,EAAS,GAClC,EAAU,OAAO,EAAI,EAAM,EAC3B,EAAU,OAAO,EAAI,EAAM,EAE3B,EAAU,UAAY,GAAG,OAAO,GAAa,GAAY,GAAI,OAAO,WAGtE,cAAA,GAAA,QAEA,aArGmB,SAqGL,GACZ,GAAM,KAyBN,OAtBI,IAAG,MAAM,IACX,EAAQ,GAAK,EAAM,GACnB,EAAQ,GAAK,EAAM,IAIA,aAAf,EAAM,KACqB,IAAzB,EAAM,QAAQ,QAChB,EAAQ,GAAK,EAAM,QAAQ,GAC3B,EAAQ,GAAK,EAAM,eAAe,IAEF,IAAzB,EAAM,QAAQ,SACrB,EAAQ,GAAK,EAAM,eAAe,GAClC,EAAQ,GAAK,EAAM,eAAe,KAIpC,EAAQ,GAAK,EAAM,QAAQ,GAC3B,EAAQ,GAAK,EAAM,QAAQ,IAIxB,GAGT,eAlImB,SAkIH,GAUd,IAAA,GATM,IACJ,MAAS,EACT,MAAS,EACT,QAAS,EACT,QAAS,EACT,QAAS,EACT,QAAS,GAGX,EAAA,EAAA,EAAsB,EAAtB,OAAA,IAAgC,CAAA,GAAA,EAAA,GAAV,EAAU,EAAA,IAArB,GAAqB,CAC9B,KAAK,GAAM,KAAQ,GACjB,EAAQ,IAAS,EAAQ,GAG7B,IAAK,GAAM,KAAQ,GACjB,EAAQ,IAAS,EAAS,MAG5B,OAAO,IAGT,UAxJmB,SAwJR,GACT,KAAM,EAAc,QACb,EAAqB,SACrB,EAAqB,QAAQ,OAAS,GAC3C,MAAO,KAGT,IAAM,GAAU,GAAa,aAAa,GACpC,EAAO,KAAK,IAAI,EAAQ,GAAG,MAAO,EAAQ,GAAG,OAC7C,EAAO,KAAK,IAAI,EAAQ,GAAG,MAAO,EAAQ,GAAG,OAC7C,EAAO,KAAK,IAAI,EAAQ,GAAG,MAAO,EAAQ,GAAG,OAC7C,EAAO,KAAK,IAAI,EAAQ,GAAG,MAAO,EAAQ,GAAG,MAEnD,QACE,EAAG,EACH,EAAG,EACH,KAAM,EACN,IAAK,EACL,MAAO,EACP,OAAQ,EACR,MAAO,EAAO,EACd,OAAQ,EAAO,IAInB,cAjLmB,SAiLJ,EAAO,GACpB,GAAM,GAAU,EAAc,IACxB,EAAU,EAAc,IACxB,EAAU,GAAa,aAAa,GAEpC,EAAK,EAAQ,GAAG,GAAW,EAAQ,GAAG,GACtC,EAAK,EAAQ,GAAG,GAAW,EAAQ,GAAG,EAE5C,QAAO,EAAA,GAAA,SAAM,EAAI,IAGnB,WA5LmB,SA4LP,EAAO,GACjB,GAAM,GAAU,EAAc,IACxB,EAAU,EAAc,IACxB,EAAU,GAAa,aAAa,GACpC,EAAK,EAAQ,GAAG,GAAW,EAAQ,GAAG,GACtC,EAAK,EAAQ,GAAG,GAAW,EAAQ,GAAG,EAG5C,OAFc,KAAM,KAAK,MAAM,EAAI,GAAM,KAAK,IAKhD,eAvMmB,SAuMH,GACd,MAAO,IAAG,OAAO,EAAQ,aACrB,EAAQ,YACR,GAAG,OAAO,EAAQ,kBACf,OAAW,GAAW,QAAS,MAAO,SAAS,EAAQ,aAGxD,QAAQ,KAAK,EAAQ,OAAS,YAAmB,IAAA,QAAI,MACnD,QACA,SAIV,gBApNmB,SAoNF,GACf,GAAM,GAAO,GAAG,KAAK,EAAM,cAAgB,EAAM,eAAiB,EAAM,IAExE,QACE,GAAS,iBAAiB,EAAO,EAAK,GAAK,EAAM,QACjD,GAAS,iBAAiB,EAAM,iBAIpC,UA7NmB,WA8NjB,OACE,MAAa,EAAG,EAAG,EAAG,GACtB,QAAa,EAAG,EAAG,EAAG,GACtB,UAAW,IAIf,cArOmB,SAAA,GAqO4B,GAA9B,GAA8B,EAA9B,KAAM,EAAwB,EAAxB,OAAQ,EAAgB,EAAhB,SAC7B,QACE,KAAA,EACA,OAAA,EACA,UAAA,EACA,YAAe,MAAO,GAAK,GAC3B,YAAe,MAAO,GAAK,GAC3B,cAAiB,MAAO,GAAO,GAC/B,cAAiB,MAAO,GAAO,SAKtB,2GxCxPf,IAAA,IAAA,EAAA,IACA,GAAA,EAAA,IACA,GAAA,EAAA,IACA,GAAA,EAAA,IAIM,MACA,MAKA,MAOA,MAkNO,cAGX,QAAA,GAAoB,GAAa,EAAA,KAAA,GAAb,KAAA,cAAA,GAElB,EAAA,GAAA,SAAQ,KAAM,+DAId,KAAK,cAAc,2DAInB,KAAK,cAAc,qEAInB,KAAK,cAAc,mDAIvB,IAAM,KACJ,IAAA,GACA,OAAA,GAEA,YAAA,GACA,eAAA,GAEA,iBAAA,GACA,mBAAA,GACA,gBAAA,GACA,UAAA,GAEA,iBAAiB,EACjB,iBAAiB,EAEjB,UAAW,GACX,SAAU,GAEV,KAlBa,SAkBP,GACJ,EAAO,SAAS,cAAc,OAAO,iBAAiB,OAAQ,MAC5D,cAAiB,MAAQ,IAAO,iBAAkB,GAClD,cAAiB,MAAQ,IAAO,iBAAkB,UAKzC,8GyCtRf,IAAA,IAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IAEA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IAGA,GAAA,GAAA,IAIa,cAkBX,QAAA,GAAa,EAAyB,EAAc,GAAkC,GAAA,KAAA,GAN7E,KAAA,OAAS,GAAI,IAAA,QAOpB,KAAK,SAAW,EAAQ,QACxB,KAAK,OAAW,EAChB,KAAK,SAAW,EAAQ,SAAW,EACnC,KAAK,MAAW,EAAA,GAAA,YAAU,EAAA,GAAA,aAAY,GAAU,KAAK,SAAW,GAChE,KAAK,KAAW,KAAK,KAAK,SAE1B,KAAK,IAAI,kDAGE,EAAoB,GAM/B,MALI,IAAG,KAAK,EAAO,UAAY,KAAK,GAAL,GAAA,OAAW,EAAX,SAA8B,EAAO,SAChE,GAAG,KAAK,EAAO,SAAW,KAAK,GAAL,GAAA,OAAW,EAAX,QAA6B,EAAO,QAC9D,GAAG,KAAK,EAAO,QAAU,KAAK,GAAL,GAAA,OAAW,EAAX,OAA4B,EAAO,OAC5D,GAAG,KAAK,EAAO,iBAAmB,KAAK,GAAL,GAAA,OAAW,EAAX,gBAAqC,EAAO,gBAE3E,sDAGiB,EAAY,EAAM,GACtC,GAAG,MAAM,IACX,KAAK,IAAI,EAAY,GAGnB,GAAG,MAAM,IACX,KAAK,GAAG,EAAY,wCAIV,EAAY,GACxB,GAAM,GAAW,KAAK,SAGtB,KAAK,GAAM,KAAc,GAAS,CAChC,GAAM,GAAgB,KAAK,QAAQ,GAC7B,EAAc,EAAQ,GACtB,EAAU,GAAG,MAAM,EAGN,eAAf,GACF,KAAK,yBAAyB,EAAY,EAAc,UAAW,GAIjE,EACF,EAAc,GAAc,GAAI,KAAK,IAG7B,GAAW,GAAG,YAAY,IAElC,EAAc,IAAc,EAAA,GAAA,SAC1B,EAAc,QACd,EAAA,GAAA,SAAM,IAGJ,GAAG,OAAO,EAAS,UAAU,KAAgB,WAAa,GAAS,UAAU,KAC/E,EAAc,GAAY,SAAkC,IAAxB,EAAY,UAI3C,GAAG,KAAK,IAAgB,GAAG,OAAO,EAAS,UAAU,IAC5D,EAAc,GAAY,QAAU,EAIpC,EAAc,GAAc,mCAYzB,GASP,MARA,GAAU,IAAY,GAAG,QAAQ,KAAK,QAClC,KAAK,OACL,MAEA,GAAG,OAAO,KAAK,UACjB,EAAU,GAAW,KAAK,SAAS,cAAc,KAAK,UAGjD,EAAA,GAAA,gBAAe,uCAWX,GACX,MAAI,IAAG,KAAK,IACV,KAAK,QAAU,EAER,MAGO,OAAZ,SACK,MAAK,QAEL,MAGF,KAAK,kDAGK,EAAY,GAC7B,IAAI,EAAA,GAAA,aAAY,IAAa,GAAG,OAAO,GAAW,CAChD,KAAK,QAAQ,GAAc,CAE3B,KAAA,GAAA,GAAA,EAAA,EAAqB,KAAK,SAAS,MAAnC,OAAA,IAA0C,CAAA,GAAA,EAAA,GAArB,KAAK,SAAS,MAAO,EAAA,IAA/B,GAA+B,CACxC,MAAK,QAAQ,GAAQ,GAAc,EAGrC,MAAO,MAGT,MAAO,MAAK,QAAQ,kCAad,GACN,MAAO,MAAK,kBAAkB,SAAU,uCAW7B,GACX,MAAiB,SAAb,GAAoC,WAAb,GACzB,KAAK,QAAQ,YAAc,EAEpB,MAGF,KAAK,QAAQ,8CAUpB,MAAO,MAAK,2CAGH,GACT,MAAQ,MAAK,WAAa,EAAQ,gBAC1B,EAAA,GAAA,cAAa,KAAK,SAAU,gCAWhC,GAGJ,MAFA,MAAK,OAAO,KAAK,GAEV,oCAGD,EAAsB,EAA8B,EAA4C,GAClG,GAAG,OAAO,KAAa,GAAG,MAAM,KAClC,EAAU,EACV,EAAc,KAGhB,IAAM,GAAuB,OAAX,EAAkB,MAAQ,SACtC,GAAY,EAAA,GAAA,SAAmB,EAAS,EAE9C,KAAK,GAAI,KAAQ,GAAW,CACb,UAAT,IAAoB,EAAO,GAAA,QAAQ,WAEvC,KAAA,GAAA,GAAA,EAAA,EAAuB,EAAU,GAAjC,OAAA,IAAwC,CAAA,GAAA,EAAA,GAAjB,EAAU,GAAO,EAAA,IAA7B,GAA6B,CAElC,IAAI,SAAS,KAAK,SAAS,WAAY,GACzC,KAAK,OAAO,GAAQ,EAAM,GAGnB,GAAG,OAAO,KAAK,QACtB,GAAA,QAAA,GAAA,OAAU,EAAV,aAA+B,KAAK,OAAQ,KAAK,SAAU,EAAM,EAAU,GAI1E,GAAA,QAAO,GAAoC,KAAK,OAAQ,EAAM,EAAU,IAK/E,MAAO,iCAaL,EAA4B,EAAkC,GAChE,MAAO,MAAK,OAAO,KAAM,EAAO,EAAU,+BAavC,EAAgD,EAAkC,GACrF,MAAO,MAAK,OAAO,MAAO,EAAO,EAAU,+BASxC,GACH,GAAM,GAAW,KAAK,SAEjB,IAAG,OAAO,KACb,MAGD,KAAK,SAAgC,EAAA,GAAA,SAAM,EAAS,KAErD,KAAK,GAAM,KAAc,MAAK,SAAS,WAAY,CACjD,GAAM,GAAa,KAAK,SAAS,WAAW,EAE5C,MAAK,QAAQ,MACb,KAAK,aAAa,GAAY,EAAA,GAAA,UAAO,EAAA,GAAA,YAAW,EAAS,WAAY,EAAS,QAAQ,KAEtF,KAAK,GAAY,EAAQ,IAG3B,IAAK,GAAM,KAAW,GAChB,GAAG,KAAK,KAAK,KACf,KAAK,GAAS,EAAQ,GAI1B,OAAO,sCAYP,GAFA,GAAA,QAAO,OAAO,KAAK,OAAgB,OAE/B,GAAG,OAAO,KAAK,QAEjB,IAAK,GAAM,KAAQ,IAAA,QAAO,gBAAiB,CACzC,GAAM,GAAY,GAAA,QAAO,gBAAgB,EAErC,GAAU,UAAU,KAAO,KAAK,QAChC,EAAU,SAAS,KAAO,KAAK,WACjC,EAAU,UAAU,OAAO,EAAG,GAC9B,EAAU,SAAS,OAAO,EAAG,GAC7B,EAAU,UAAU,OAAO,EAAG,GAGzB,EAAU,UAAU,SACvB,EAAU,GAAQ,OAItB,GAAA,QAAO,OAAO,KAAK,SAAU,EAAM,GAAA,QAAO,kBAC1C,GAAA,QAAO,OAAO,KAAK,SAAU,EAAM,GAAA,QAAO,oBAAoB,OAIhE,IAAA,QAAO,OAAO,KAAK,OAAgB,yCAvUrC,OACE,QACA,aACA,+CAyUS,iHC5VF,IACX,QAAA,GACS,EACA,EACA,EACA,EACA,GAAuB,GAAA,KAAA,GAJvB,KAAA,GAAA,EACA,KAAA,QAAA,EACA,KAAA,MAAA,EACA,KAAA,SAAA,EACA,KAAA,WAAA,4BAII,kGCKT,eAAN,QAAA,KAAA,GAAA,KAAA,GACE,KAAA,mDAII,EAAc,GAChB,IAAK,KAAK,UAAU,GAElB,YADA,KAAK,UAAU,IAAS,GAI1B,MAAK,UAAU,GAAM,KAAK,+BAGvB,EAAc,GACjB,GAAK,KAAK,UAAU,GAApB,CAEA,GAAM,GAAQ,KAAK,UAAU,GAAM,QAAQ,IAE5B,IAAX,GACF,KAAK,UAAU,GAAM,OAAO,EAAO,iCAIjC,EAAc,GAClB,GAAM,GAAkB,KAAK,UAAU,EAEvC,IAAK,EAEL,IAAA,GAAA,GAAA,EAAA,EAAuB,EAAvB,OAAA,IAAwC,CAAA,GAAA,EAAA,GAAjB,EAAiB,EAAA,IAA7B,GAA6B,CACtC,KAA4B,IAAxB,EAAS,EAAK,GAChB,OAAO,eAMA,8F1CpDf,IACI,IACA,GAFA,GAAW,MAkCb,QAAS,SAAC,GAAD,MAAc,IAAQ,IAC/B,OAAQ,SAAC,GAAD,MAAW,IAAO,IAC1B,KAAA,otCCpCF,IAAA,IAAA,GAAA,aACA,IAAA,IAAA,GAAA,aACA,IAAA,IAAA,GAAA,YACA,IAAA,IAAA,GAAA,IA4CA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,sL0CzDA,IAAA,IAAA,GAAA,IAEA,GAAA,GAAA,IACA,qDAAA,IAWa,cAyEX,QAAA,GAAA,GAAuF,GAAxE,GAAwE,EAAxE,YAAa,EAA2D,EAA3D,OAA2D,IAAA,KAAA,GAvEvF,KAAA,OAAuB,KAGvB,KAAA,QAAmB,KAKnB,KAAA,UACE,KAAO,KACP,KAAO,KACP,MAAO,MAMT,KAAA,YAGA,KAAA,UAAuC,KAEvC,KAAA,eAEA,KAAA,gBAKE,QAAS,KACT,MAAO,KACP,YAAa,MAIf,KAAA,UAA8B,KAE9B,KAAA,eAAgB,EAChB,KAAA,iBAAkB,EAClB,KAAA,cAAe,EACf,KAAA,SAAU,EAEV,KAAA,WAAa,KASb,KAAA,OAAS,GAAM,SACb,SAA6B,GAC3B,KAAK,KAAK,IAEZ,0EAEF,KAAA,QAEE,MAAO,GAAM,QAAQ,YAErB,KAAM,GAAM,QAAQ,YAEpB,IAAK,GAAM,QAAQ,YAEnB,MAAO,GAAM,QAAQ,YAErB,SAAU,GAAM,QAAQ,aAKxB,KAAK,SAAW,EAChB,KAAK,YAAc,EAEnB,KAAK,SAAS,KAAK,OAAS,YAAa,sDAG9B,EAAS,EAAO,GAC3B,GAAM,GAAe,KAAK,cAAc,EAAS,EAAO,GAAa,EAErE,MAAK,SAAS,KAAK,QACjB,QAAA,EACA,MAAA,EACA,YAAA,EACA,aAAA,EACA,YAAa,qCAmCV,EAAQ,EAAQ,GACjB,KAAK,gBACJ,KAAK,eACN,KAAK,SAAS,QAA0B,YAAhB,EAAO,KAAqB,EAAI,KAI5D,GAAM,WAAW,KAAK,SAAU,GAEhC,KAAK,OAAe,EACpB,KAAK,QAAe,EACpB,KAAK,aAAe,KAAK,UACvB,YAAa,KACb,MAAO,KAAK,UACZ,MAAO,GAAA,WAAW,6CAIT,EAAS,EAAO,GACtB,KAAK,aACR,KAAK,cAAc,EAAS,EAAO,GAAa,GAChD,GAAM,QAAQ,UAAU,KAAK,OAAO,IAAK,KAAK,SAAS,IAAI,SAAC,GAAD,MAAO,GAAE,WAGtE,IAKI,GACA,EANE,EAAiB,KAAK,OAAO,IAAI,KAAK,IAAM,KAAK,OAAO,KAAK,KAAK,GACjD,KAAK,OAAO,IAAI,KAAK,IAAM,KAAK,OAAO,KAAK,KAAK,GACjD,KAAK,OAAO,IAAI,OAAO,IAAM,KAAK,OAAO,KAAK,OAAO,GACrD,KAAK,OAAO,IAAI,OAAO,IAAM,KAAK,OAAO,KAAK,OAAO,CAMxE,MAAK,gBAAkB,KAAK,kBAC9B,EAAK,KAAK,OAAO,IAAI,OAAO,EAAI,KAAK,OAAO,MAAM,OAAO,EACzD,EAAK,KAAK,OAAO,IAAI,OAAO,EAAI,KAAK,OAAO,MAAM,OAAO,EAEzD,KAAK,gBAAkB,GAAM,MAAM,EAAI,GAAM,KAAK,qBAGpD,IAAM,IACJ,QAAA,EACA,aAAc,KAAK,gBAAgB,GACnC,MAAA,EACA,YAAA,EACA,GAAA,EACA,GAAA,EACA,UAAW,EACX,YAAa,KAGV,KAEH,GAAM,QAAQ,eAAe,KAAK,OAAO,MAAO,KAAK,OAAO,KAAM,KAAK,OAAO,KAC9E,GAAM,QAAQ,iBAAiB,KAAK,OAAO,SAAU,KAAK,OAAO,QAGnE,KAAK,SAAS,KAAK,OAAQ,GAEtB,IAEC,KAAK,eACP,KAAK,KAAK,GAGR,KAAK,iBACP,GAAM,QAAQ,WAAW,KAAK,OAAO,KAAM,KAAK,OAAO,mCAuBvD,GACJ,EAAY,GAAM,QAChB,QAAS,KAAK,eAAe,QAC7B,MAAO,KAAK,eAAe,MAC3B,YAAa,KAAK,eAAe,YACjC,YAAa,KACb,UAAU,GACT,OAEH,EAAU,MAAQ,GAAA,WAAW,KAE7B,KAAK,SAAS,qCAIL,EAAS,EAAO,EAAa,GACtC,GAAI,GAAe,KAAK,gBAAgB,IAElB,IAAlB,IACF,EAAe,KAAK,cAAc,EAAS,EAAO,GAAa,IAGjE,KAAK,SAAS,KAAK,WAAW,KAAK,EAAM,MAAQ,SAAW,MAC1D,QAAA,EACA,aAAA,EACA,MAAA,EACA,YAAA,EACA,eAAA,EACA,YAAa,OAGV,KAAK,YACR,KAAK,IAAI,GAGX,KAAK,eAAgB,EACrB,KAAK,cAAc,EAAS,wCAGhB,GACZ,KAAK,IAAI,GACT,KAAK,SAAS,KAAK,QAAU,MAAA,EAAO,YAAa,mCAmB9C,GACH,KAAK,SAAU,EACf,EAAQ,GAAS,KAAK,eAAe,KACrC,IAAI,EAEA,MAAK,gBACP,EAAiB,KAAK,UACpB,MAAA,EACA,YAAa,KACb,MAAO,GAAA,WAAW,OAItB,KAAK,SAAU,GAEQ,IAAnB,GACF,KAAK,+CAKP,MAAO,MAAK,aAAe,KAAK,SAAS,KAAO,2CAIhD,MAAO,MAAK,4CAKZ,KAAK,SAAS,KAAK,QAAU,YAAa,OAE1C,KAAK,OAAS,KAAK,QAAU,KAE7B,KAAK,cAAe,EACpB,KAAK,SAAS,KAAO,KAAK,UAAY,6CAGvB,GACf,GAAM,GAAY,GAAM,QAAQ,aAAa,EAG7C,OAA6B,UAArB,KAAK,aAAgD,QAArB,KAAK,YACzC,KAAK,SAAS,OAAS,EACvB,GAAM,IAAI,UAAU,KAAK,SAAU,SAAC,GAAD,MAAgB,GAAW,KAAO,2CAG3D,GACd,MAAO,MAAK,SAAS,KAAK,gBAAgB,0CAG7B,EAA+B,EAAkC,EAA0C,GACxH,GAAM,GAAK,GAAM,QAAQ,aAAa,GAClC,EAAe,KAAK,gBAAgB,GACpC,EAAc,KAAK,SAAS,EAoDhC,OAlDA,IAAgB,IAAT,IAEH,GAAQ,iBAAiB,KAAK,EAAM,OAEnC,EAaH,EAAY,QAAU,GAZtB,EAAc,GAAI,IAAA,QAChB,EACA,EACA,EACA,KACA,MAGF,EAAe,KAAK,SAAS,OAC7B,KAAK,SAAS,KAAK,IAMjB,IACF,KAAK,eAAgB,EAEhB,KAAK,gBACR,GAAM,QAAQ,UAAU,KAAK,OAAO,MAAO,KAAK,SAAS,IAAI,SAAC,GAAD,MAAO,GAAE,WAEtE,GAAM,QAAQ,WAAW,KAAK,OAAO,IAAK,KAAK,OAAO,OACtD,GAAM,QAAQ,WAAW,KAAK,OAAO,KAAM,KAAK,OAAO,OACvD,GAAM,QAAQ,cAAc,KAAK,YAAa,GAE9C,KAAK,UAAY,EACjB,EAAY,SAAW,KAAK,OAAO,IAAI,UACvC,EAAY,WAAa,EAEzB,KAAK,iBAAkB,IAI3B,KAAK,qBAAqB,EAAS,EAAO,GAE1C,KAAK,SAAS,KAAK,kBACjB,QAAA,EACA,MAAA,EACA,YAAA,EACA,KAAA,EACA,YAAA,EACA,aAAA,EACA,YAAa,OAGR,wCAGM,EAAS,GACtB,GAAM,GAAe,KAAK,gBAAgB,EAE1C,KAAsB,IAAlB,EAAJ,CAEA,GAAM,GAAc,KAAK,SAAS,EAElC,MAAK,SAAS,KAAK,kBACjB,QAAA,EACA,MAAA,EACA,aAAA,EACA,YAAA,EACA,YAAa,OAGf,KAAK,SAAS,OAAO,EAAc,iDAGf,EAAS,EAAO,GACpC,KAAK,eAAe,QAAU,EAC9B,KAAK,eAAe,MAAQ,EAC5B,KAAK,eAAe,YAAc,+CAGd,EAAkC,EAAmB,EAAiB,GAC1F,GAAM,GAAa,KAAK,SAAS,IAEjC,OAAO,IAAI,IAAA,QAAc,KAAM,EAAO,EAAY,EAAO,KAAK,QAAS,KAAM,EAAQ,sCAG3E,GACV,KAAK,OAAO,KAAK,KAEZ,KAAK,WAAa,EAAO,WAAa,KAAK,UAAU,aACxD,KAAK,UAAY,oCAIX,GAAsC,GACtC,GAA+B,EAA/B,MAAO,EAAwB,EAAxB,MAAO,EAAiB,EAAjB,OAAQ,EAAS,EAAT,IAE9B,KAAK,EAAU,SAAU,CAGvB,IAAqB,IAFA,KAAK,SAAS,KAAd,iBAAA,OAAoC,GAAS,GAGhE,OAAO,EAIX,GAAM,GAAS,EAAU,OAAS,KAAK,qBAAqB,EAAO,EAAO,EAAQ,EAQlF,OANA,MAAK,SAAS,KAAd,UAAA,OAA6B,GAAS,GAEtC,KAAK,WAAW,GAEhB,KAAK,SAAS,KAAd,gBAAA,OAAmC,GAAS,IAErC,+CAvYP,MAAO,qCA2YI,8FzCxcf,IAAA,4SAAA,IAYM,IACJ,aAAe,mBAAoB,aAAc,aAAc,QAE/D,OAHa,SAGL,GACN,IAAA,GAAA,GAAA,EAAA,EAAqB,GAAO,YAA5B,OAAA,IAAyC,CAAA,GAAA,EAAA,GAApB,GAAO,YAAa,EAAA,IAA9B,GAA8B,EACjC,EAAc,GAAO,GAAQ,EAEnC,IAAI,EACF,MAAO,KAMb,iBAda,SAAA,GAckE,GAA3D,GAA2D,EAA3D,YAAa,EAA8C,EAA9C,UAAW,EAAmC,EAAnC,YAAa,EAAsB,EAAtB,KACvD,KAAK,cAAc,KAAK,GACtB,MAAO,KAGT,KAAA,GAAA,GAAA,EAAA,EAA0B,EAAM,aAAa,KAA7C,OAAA,IAAmD,CAAA,GAAA,EAAA,GAAzB,EAAM,aAAa,KAAM,EAAA,IAAxC,GAAwC,EAC7C,EAAU,CAEd,IAAI,EAAY,YAAc,EAAY,WAAW,aAChD,EAAY,cAAgB,EAC/B,KAAO,GAAS,CAEd,GAAI,IAAY,EAAY,QAC1B,MAAO,EAET,GAAU,GAAM,IAAI,WAAW,IAKrC,MAAO,OAIT,WAtCa,SAAA,GAsC0D,GAAzD,GAAyD,EAAzD,UAAW,EAA8C,EAA9C,YAAa,EAAiC,EAAjC,UAAW,EAAsB,EAAtB,KAC/C,IAAoB,UAAhB,GAA2C,QAAhB,EAC7B,MAAO,KAKT,KAAA,GAFI,GAEJ,EAAA,EAAA,EAA0B,EAAM,aAAa,KAA7C,OAAA,IAAmD,CAAA,GAAA,EAAA,GAAzB,EAAM,aAAa,KAAM,EAAA,IAAxC,GAAwC,CACjD,IAAI,EAAY,cAAgB,EAAa,CAE3C,GAAI,EAAY,aAAe,GAAa,EAAa,GAAc,QAGvE,IAAI,EAAY,cACd,MAAO,EAGC,KACR,EAAiB,IAOvB,GAAI,EACF,MAAO,EAMT,KAAA,GAAA,GAAA,EAAA,EAA0B,EAAM,aAAa,KAA7C,OAAA,IAAmD,CAAA,GAAA,EAAA,GAAzB,EAAM,aAAa,KAAM,EAAA,IAAxC,GAAwC,CACjD,MAAI,EAAY,cAAgB,GAAiB,QAAQ,KAAK,IAAc,EAAY,YACtF,MAAO,GAIX,MAAO,OAIT,WAhFa,SAAA,GAiFX,IAAA,GADY,GAAiC,EAAjC,UAAW,EAAsB,EAAtB,MACvB,EAAA,EAAA,EAA0B,EAAM,aAAa,KAA7C,OAAA,IAAmD,CAAA,GAAA,EAAA,GAAzB,EAAM,aAAa,KAAM,EAAA,IAAxC,GAAwC,CACjD,IAAI,GAAa,EAAa,GAC5B,MAAO,GAIX,MAAO,OAIT,KA3Fa,SAAA,GA4FX,IAAA,GADM,GAAmC,EAAnC,YAAa,EAAsB,EAAtB,MACnB,EAAA,EAAA,EAA0B,EAAM,aAAa,KAA7C,OAAA,IAAmD,CAAA,GAAA,EAAA,GAAzB,EAAM,aAAa,KAAM,EAAA,IAAxC,GAAwC,CAEjD,IAAoC,IAAhC,EAAY,SAAS,OAAc,CACrC,GAAM,GAAS,EAAY,MAG3B,IAAI,IAAW,EAAO,QAAQ,QAAQ,QACpC,aAIC,IAAI,EAAY,SAAS,QAAU,EACtC,QAGF,KAAK,EAAY,eAAkB,IAAgB,EAAY,YAC7D,MAAO,GAIX,MAAO,WAQI,mHCpIf,IAAA,IAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IAkBM,IACJ,cAAe,cAAe,YAC9B,gBAAiB,gBAAiB,kBA4LlC,QAAA,GACA,YAAA,GACA,iBAAA,GACA,eAAA,GACA,YAAA,2GC1NF,IAgBY,IAhBZ;+KAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IAGE,GAKE,GALF,IACA,GAIE,GAJF,QACA,GAGE,GAHF,IACA,GAEE,GAFF,QACA,GACE,GADF,wBAGU,KAAU,GAAA,WAAV,UAeC,eA2BX,QAAA,KAAA,GAAA,KAAA,GAzBA,KAAA,QAAU,GAAI,IACd,KAAA,QAAU,GACV,KAAA,OAAS,GACT,KAAA,MAAQ,GACR,KAAA,SAAqB,GAAM,MAAM,GAAA,SACjC,KAAA,UAAY,GAAA,QACZ,KAAA,SACE,SACA,cACA,eAGF,KAAA,cAAgB,GAAA,QAEhB,KAAA,cAAgB,GAAI,IAAgB,MASpC,KAAA,YAGE,IAAM,GAAQ,IAEb,MAAmD,aAAnD,SAAA,GAAA,QAAA,KAAA,MAAA,IAAA,KAAA,GAAA,GAAA,KAAA,GAAA,GAAA,MAAA,KAAA,YAAA,MAAA,IAAA,EAAA,GAAA,GAAA,IAAA,IAAA,MAAA,MAAA,SAGM,GAQH,MAPA,IAAA,GAAA,EAAA,WAAA,MAAA,MAAA,KAAA,KAAU,GAEV,EAAM,cAAc,QAAQ,KAAK,OAC/B,QAAA,EACA,aAAc,OAGT,QAXV,IAAA,QAAA,MAAA,WAeG,GAAA,GAAA,EAAA,WAAA,QAAA,MAAA,KAAA,MACA,EAAM,cAAc,QAAQ,KAAK,SAAW,aAAc,UAhB7D,IAAA,YAAA,IAAA,WACoB,MAAO,GAAM,aADjC,GAA6F,GAAA,iDAqB1F,GACJ,MAAO,IAAU,KAAM,uCAGZ,EAAe,GAE1B,IAA+B,IAA3B,KAAK,YAAY,GAAe,OAAO,CAE3C,IAAM,GAAS,GAAI,UAAU,EAE7B,GAAU,EAAU,GAAM,UAAW,MAErC,KAAK,UAAU,MAAO,IAAA,EAAK,QAAA,IAC3B,GAAO,UAAU,KAAK,GAIlB,IAAQ,KAAK,UACf,GAAO,IAAI,EAAQ,SAAU,KAAK,gBAGpC,KAAK,QAAQ,KAAK,gBAAkB,IAAA,EAAK,OAAA,EAAQ,MAAO,KAAM,QAAA,2CAGhD,GACd,GAAM,GAAQ,KAAK,YAAY,GAEzB,EAAS,GAAI,UAAU,GACvB,EAAU,KAAK,UAAU,GAAO,OAEtC,IAAO,OAAO,EAAQ,SAAU,KAAK,gBAErC,KAAK,UAAU,OAAO,EAAO,GAC7B,GAAO,UAAU,OAAO,EAAO,GAE/B,KAAK,QAAQ,KAAK,mBAAqB,IAAA,EAAK,OAAA,EAAQ,MAAO,KAAM,QAAA,2CAGnD,GACd,KAAK,eAAe,EAAM,4CAGf,GACX,IAAK,GAAI,GAAI,EAAG,EAAI,KAAK,UAAU,OAAQ,IACzC,GAAI,KAAK,UAAU,GAAG,MAAQ,EAC5B,MAAO,EAIX,QAAQ,wCAGK,GACb,GAAM,GAAW,KAAK,YAAY,EAElC,QAAqB,IAAd,EAAkB,KAAO,KAAK,UAAU,GAAU,gCAIhD,eAMX,QAAA,GAAuB,GAAY,GAAA,KAAA,GAAZ,KAAA,MAAA,EALvB,KAAA,QAAU,GAAI,IAAM,QAGpB,KAAA,+CAIK,EAAyB,GAC5B,EAAU,GAAM,OAAO,OACrB,QAAS,KAAK,MAAM,SAEtB,IAAM,GAAe,GAAI,MAAK,MAAM,aAAa,EAAQ,EAAS,KAAK,MAAM,SAY7E,OAVA,MAAK,MAAM,YAAY,EAAa,MACpC,KAAK,KAAK,KAAK,GAEf,KAAK,QAAQ,KAAK,OAChB,OAAA,EACA,QAAA,EACA,aAAA,EACA,IAAK,KAAK,MAAM,OAGX,yCAGO,EAAyB,GACvC,EAAU,GAAW,KAAK,MAAM,QAIhC,KAAK,GAFC,GAAO,KAAK,KAET,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,GAAM,GAAe,EAAK,EAE1B,IAAI,EAAa,SAAW,GAAU,EAAa,WAAa,EAC9D,MAAO,GAIX,OAAQ,8BAGL,EAA0B,EAAS,GACtC,GAAM,GAAM,KAAK,KAAK,KAAK,eAAe,EAAS,GAAW,EAAQ,SAEtE,OAAO,KAAQ,GAAM,GAAG,OAAO,IAAY,GAAsB,EAAI,UAAU,IAAY,EAAM,0CAGrF,EAA6B,GACzC,IAAA,GAAA,GAAA,EAAA,EAA2B,KAAK,KAAhC,OAAA,IAAsC,CAAA,GAAA,EAAA,GAAX,KAAK,KAAM,EAAA,IAA3B,GAA2B,EAChC,MAAG,EAYP,KAVK,GAAM,GAAG,OAAO,EAAa,QAE7B,GAAM,GAAG,QAAQ,IAAY,GAAM,IAAI,gBAAgB,EAAS,EAAa,QAE9E,IAAY,EAAa,SAE1B,EAAa,UAAU,KACxB,EAAM,EAAS,QAGL,KAAR,EACF,MAAO,sFC5Mf,IAAA,IAAA,GAAA,IACA,GAAA,GAAA,GAyBC,IAAA,WAAmB,KAAO,MA8G3B,IAAM,IAA6B,SAAiD,GAClF,MAAI,IAAG,OAAO,IACZ,KAAK,QAAQ,KAAK,SAA8B,IAApB,EAAQ,QACpC,KAAK,aAAa,OAAQ,GAC1B,KAAK,YAAY,OAAQ,GAErB,mBAAmB,KAAK,EAAQ,YAClC,KAAK,QAAQ,KAAK,SAAW,EAAQ,UAEnC,aAAa,KAAK,EAAQ,aAC5B,KAAK,QAAQ,KAAK,UAAY,EAAQ,WAGjC,MAGL,GAAG,KAAK,IACV,KAAK,QAAQ,KAAK,QAAU,EAErB,MAGF,KAAK,QAAQ,MAGhB,IACJ,QAAA,GACA,UAAA,GACA,WAAA,GACA,KAAA,GACA,UACE,UAAY,KACZ,SAAY,MAGd,QAVW,SAUF,EAAU,EAAQ,GACzB,GAAM,GAAc,EAAa,QAAQ,IAEzC,OAAO,GAAY,SAEf,KAAM,OACN,KAAgC,UAAzB,EAAY,SACf,EAAY,UACZ,EAAY,UAEhB,MAGN,UAvBW,WAwBT,MAAO,YAII,8FuC1Lf,IAAA,4SAAA,IAEM,cAgBJ,QAAA,GAAa,EAAY,EAAW,GAAI,GAAA,KAAA,GANxC,KAAA,oBAAqB,EACrB,KAAA,6BAA8B,CAKU,IAAA,GACC,cAAT,EAC1B,EAAW,KACX,EAAW,IAFP,EAD8B,EAC9B,QAAS,EADqB,EACrB,QAIjB,MAAK,KAAgB,EACrB,KAAK,OAAgB,EACrB,KAAK,cAAgB,EACrB,KAAK,SAAgB,EACrB,KAAK,UAAgB,EACrB,KAAK,cAAgB,EAAU,OAC/B,KAAK,YAAgB,EAAU,YAC/B,KAAK,UAAgB,EAAU,aAC/B,KAAK,UAAgB,EAAU,sDAU3B,GAAA,GAAA,KACI,EAAe,KAAK,YAApB,UAER,IACiB,iBAAd,KAAK,MACH,KAAK,UACN,EAAW,IAAI,WAAa,KAAK,UACjC,EAAW,IAAI,UAAY,KAAK,OAYpC,GARA,EAAW,KAAK,SAAW,KAAK,SAChC,EAAW,KAAK,QAAU,KAAK,OAE/B,EAAW,UAAW,EACtB,EAAW,OAAO,MAAQ,KAE1B,KAAK,2BAEa,iBAAd,KAAK,KAAyB,CAChC,GAAM,GAAc,EAAW,YACzB,EAAQ,GAAI,UAAU,EAAa,SAAA,GAAA,GAAG,GAAH,EAAG,SAAU,EAAb,EAAa,OAAb,OACvC,KAAa,EAAK,UAAY,IAAY,EAAK,QAEjD,GAAW,eAAX,OAAA,GACK,EAAY,MAAM,EAAG,IAD1B,GAEK,EAAY,MAAM,EAAQ,IAG/B,IAAM,GAAkB,GAAI,GAAU,EAAY,KAAK,UAAW,iBAElE,GAAgB,SAAW,KAAK,SAChC,EAAgB,OAAS,KAAK,OAE9B,KAAK,SAAS,KAAK,OAGnB,MAAK,SAAS,KAAK,GAAI,GAAU,EAAY,KAAK,UAAW,kGAO/D,KAAK,oBAAqB,qDAI1B,KAAK,4BAA8B,KAAK,oBAAqB,cAIlD,8FtC9Ff,IAAA,4SAAA,IACA,qDAAA,IA+gBM,IACJ,QAAA,GACA,eAAA,GACA,QAAA,GACA,cAAA,GACA,eAAA,GACA,UACE,SAAS,EACT,OAAS,KACT,QAAS,eAIE,8FChiBf,IAAA,sDAAA,IAEA,2SAAA,GAuCC,IAAA,WAAmB,QAAU,SAqG9B,IAAM,KACJ,QAAA,GACA,YAGA,QALc,SAKL,EAAU,EAAQ,EAAe,EAAU,GAClD,MAAI,GAAY,SAAS,QAAU,GACxB,KAAM,WAGV,MAGT,UAbc,WAcZ,MAAO,QAuEI,8FCjOf,IAAA,4SAAA,GA+CC,IAAA,WAAmB,OAAS,QA+F7B,IAAM,KACJ,QAAA,GACA,UACE,QAAQ,EACR,qBAAqB,EACrB,KAAM,KAGN,OAAQ,IAMR,MAAO,KAMP,OAAQ,QAGV,QAvBa,SAwBX,EACA,EACA,EACA,EACA,EACA,GAEA,IAAK,EAAQ,MAAO,KAEpB,IAAM,GAAO,GAAM,UAAW,EAAY,OAAO,IAAI,MAC/C,EAAU,EAAa,OAE7B,IAAI,EAAQ,OAAO,QAAS,CAC1B,GAAM,GAAgB,EAAQ,OACxB,GAA6C,MAAM,EAAO,OAAO,EAAO,KAAK,EAAO,QAAQ,EAGlG,IAAI,GAAM,GAAG,OAAO,EAAc,OAAQ,CACxC,IAAK,GAAM,KAAQ,GACjB,EAAY,GAAQ,GAAgB,EAClC,EAAc,MAAM,GACpB,EACA,EAAY,eAAe,YAC3B,EACA,EACA,EAAc,QAAU,KAAK,cAMjC,IAHA,EAAY,KAAO,EAAY,OAAS,EAAY,MACpD,EAAY,IAAO,EAAY,MAAS,EAAY,OAEhD,EAAY,MAAQ,EAAY,OAAS,EAAY,KAAO,EAAY,OAC1E,OACE,KAAM,SACN,MAAO,OAIR,CACH,GAAM,GAAiC,MAAxB,EAAQ,OAAO,MAAgB,EAAK,EAAK,EAAK,MAAS,KAAK,cACrE,EAAiC,MAAxB,EAAQ,OAAO,MAAgB,EAAK,EAAK,EAAK,OAAS,KAAK,aAE3E,IAAI,GAAS,EACX,OACE,KAAM,SACN,MAAO,EAAQ,IAAM,KAAO,EAAS,IAAM,MAMnD,MAAO,OAGT,QAAS,KAET,UAhFa,SAgFF,GACT,GAAM,GAAU,GAAO,OACvB,IAAI,EAAO,KACT,MAAO,GAAQ,EAAO,KAAO,EAAO,KAEjC,IAAI,EAAO,MAAO,CAIrB,IAAK,GAHD,GAAY,GACV,GAAa,MAAO,SAAU,OAAQ,SAEnC,EAAI,EAAG,EAAI,EAAG,IACjB,EAAO,MAAM,EAAU,MACzB,GAAa,EAAU,GAI3B,OAAO,GAAQ,GAGjB,MAAO,OAGT,cAAe,SAuQF,2aC3ff,IAAA,IAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,6JCJA,IAAA,IAAA,GAAA,IACA,GAAA,GAAA,IACA,qDAAA,IA6CM,IACJ,UACE,SAAW,EACX,OAAW,GAGX,UAAW,KAGX,MAAW,KAGb,YAAa,KACb,EAAG,KACH,EAAG,EACH,EAAG,EAEH,aAAa,EACb,SAAU,EACV,OAAQ,EACR,MAAO,EAEP,MAtBiB,SAsBV,GACL,GAAW,aAAc,EACzB,GAAA,QAAI,OAAO,GAAW,GAEtB,EAAY,WAAa,GACzB,GAAW,YAAc,EACzB,GAAW,UAAW,GAAI,OAAO,UACjC,GAAW,EAAI,GAAA,QAAI,QAAQ,GAAW,SAGxC,KAhCiB,WAiCf,GAAW,aAAc,EACrB,GAAW,cACb,GAAW,YAAY,WAAa,MAEtC,GAAA,QAAI,OAAO,GAAW,IAIxB,OAzCiB,WAyCX,GACI,GAAgB,GAAhB,YACQ,EAA0B,EAAlC,OAAsB,EAAY,EAAZ,QACxB,EAAU,EAAa,QAAQ,GAAW,YAAY,SAAS,MAAM,WACrE,EAAY,GAAa,EAAQ,UAAW,EAAc,GAC1D,GAAM,GAAI,OAAO,UAEjB,GAAM,EAAM,GAAW,UAAY,IAEnC,EAAI,EAAQ,MAAQ,CAE1B,IAAI,GAAK,EAAG,CACV,GAAM,IACJ,EAAG,GAAW,EAAI,EAClB,EAAG,GAAW,EAAI,EAGpB,IAAI,EAAS,GAAK,EAAS,EAAG,CAC5B,GAAM,GAAa,GAAU,EAEzB,IAAG,OAAO,GACZ,EAAU,SAAS,EAAS,EAAG,EAAS,GAEjC,IACP,EAAU,YAAc,EAAS,EACjC,EAAU,WAAc,EAAS,EAGnC,IAAM,GAAY,GAAU,GACtB,GACJ,EAAG,EAAU,EAAI,EAAW,EAC5B,EAAG,EAAU,EAAI,EAAW,IAG1B,EAAM,GAAK,EAAM,IACnB,EAAa,MACX,KAAM,aACN,OAAQ,EACR,aAAA,EACA,MAAA,EACA,YAAA,EACA,UAAA,IAKN,GAAW,SAAW,EAGpB,GAAW,cACb,GAAA,QAAI,OAAO,GAAW,GACtB,GAAW,EAAI,GAAA,QAAI,QAAQ,GAAW,UAG1C,MA/FiB,SA+FV,EAAc,GACnB,GAAM,GAAU,EAAa,OAE7B,OAAO,GAAQ,GAAY,YAAc,EAAQ,GAAY,WAAW,SAE1E,kBApGiB,SAAA,GAoG0B,GAAtB,GAAsB,EAAtB,YAAa,EAAS,EAAT,OAChC,IAAM,EAAY,eACZ,GAAW,MAAM,EAAY,OAAQ,EAAY,SAAS,MADhE,CAKA,GAAI,EAAY,WAEd,YADA,GAAW,EAAI,GAAW,EAAI,EAIhC,IAAI,GACA,EACA,EACA,EAEY,EAA0B,EAAlC,OAAsB,EAAY,EAAZ,QACxB,EAAU,EAAa,QAAQ,EAAY,SAAS,MAAM,WAC1D,EAAY,GAAa,EAAQ,UAAW,EAAc,EAEhE,IAAI,GAAG,OAAO,GACZ,EAAS,EAAQ,QAAU,GAAW,OACtC,EAAS,EAAQ,QAAU,GAAW,OACtC,EAAS,EAAQ,QAAU,EAAU,WAAc,GAAW,OAC9D,EAAS,EAAQ,QAAU,EAAU,YAAc,GAAW,WAE3D,CACH,GAAM,GAAO,GAAS,qBAAqB,EAE3C,GAAS,EAAQ,QAAU,EAAK,KAAS,GAAW,OACpD,EAAS,EAAQ,QAAU,EAAK,IAAS,GAAW,OACpD,EAAS,EAAQ,QAAU,EAAK,MAAS,GAAW,OACpD,EAAS,EAAQ,QAAU,EAAK,OAAS,GAAW,OAGtD,GAAW,EAAK,EAAQ,EAAI,GAAQ,EAAI,EACxC,GAAW,EAAK,EAAS,EAAK,GAAO,EAAI,EAEpC,GAAW,cAEd,GAAW,OAAS,EAAQ,OAC5B,GAAW,MAAS,EAAQ,MAE5B,GAAW,MAAM,WA6CN,QAAA,+FC1OjB,IAAA,IAAA,GAAA,IACA,GAAA,GAAA,QA6PiB,QAAA,+FC/PjB,IAAA,4SAAA,IACA,qDAAA,QAkSE,QAAA,GACA,gBAAA,GACA,uBAAA,GACA,eAAA,+FCpSF,IAAA,4SAAA,IACA,qDAAA,QAuEiB,QAAA,wGCRf,QAAA,GACA,gBAAA,6VCnEF,IAAA,IAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,2FCDA,IAAA,sDAAA,IACA,2SAAA,QAsGiB,QAAA,+FCvGjB,IAAA,sDAAA,QAiXE,QAAA,GACA,SAAA,GACA,OAAA,GACA,cAAA,GACA,MAAA,GACA,WAAA,GACA,UAAA,GACA,KAAA,GACA,SAAA,GACA,gBAAA,GACA,cAAA,GACA,aAAA,+FC5XF,IAAA,IAAA,GAAA,IACA,2SAAA,IACA,GAAA,GAAA,GA+BC,IAAA,WAAmB,OAAS,SAC5B,GAAA,WAAmB,aAAe,uBA2TjC,QAAA,GACA,YAAA,GACA,YAAA,GACA,aAAA,GACA,oBAAA,oHC7VF,IAAA,4SAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IAsCM,MACA,GAAQ,GAAI,IAAA,iBA2BX,IAAM,IAA2B,SAAmB,EAAyB,GAClF,GAAI,GAAe,GAAM,cAAc,IAAI,EAAQ,EAOnD,OALK,KACH,EAAe,GAAM,cAAc,IAAI,EAAQ,GAC/C,EAAa,OAAO,OAAS,IAGxB,kBAGT,GAAM,YAWN,GAAS,IAAM,GAqBf,GAAS,MAAQ,GAgBjB,GAAS,GAAK,GAoDd,GAAS,IAAM,GA4Cf,GAAS,MAAQ,GAMjB,GAAS,kBAAqB,GAAM,QAAQ,eAC5C,GAAS,aAAqB,GAAM,QAAQ,UAC5C,GAAS,iBAAqB,GAAM,QAAQ,cAC5C,GAAS,cAAqB,GAAM,QAAQ,WAE5C,GAAS,eAAuB,GAAM,IAAI,eAC1C,GAAS,qBAAuB,GAAM,IAAI,qBAC1C,GAAS,gBAAuB,GAAM,IAAI,gBAC1C,GAAS,QAAuB,GAAM,IAAI,QAO1C,GAAS,cAAgB,GAUzB,GAAS,qBAAuB,GAYhC,GAAS,KAAO,GAkBhB,GAAS,qBAAuB,GAWhC,GAAM,cAAc,QAAQ,GAAG,QAAS,SAAA,GAAqB,GAAlB,GAAkB,EAAlB,YACzC,IAAM,cAAc,KAAK,OAAO,GAAM,cAAc,KAAK,QAAQ,GAAe,EAGhF,KAAA,GAAA,GAAA,EAAA,EAA0B,GAAM,aAAa,KAA7C,OAAA,IAAmD,CAAA,GAAA,EAAA,GAAzB,GAAM,aAAa,KAAM,EAAA,IAAxC,GAAwC,CAC7C,GAAY,SAAW,GAAgB,EAAY,eAAiB,EAAY,SAClF,EAAY,UAKlB,GAAS,YAAiB,GAAM,YAChC,GAAS,eAAiB,GAAM,eAEhC,GAAM,SAAW,UAGF,8FC7Tf,IAAA,4SAAA,IACA,qDAAA,IAmDM,IACJ,MAAA,GACA,IAAA,GACA,mBAAA,GACA,UACE,SAAS,EACT,YAAa,KACb,YAAa,UAIF,8FCnDf,IAAA,IAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IAEQ,GAAuB,GAAA,QAAvB,mBACF,IAAY,IAAM,EAAA,EAAU,KAAO,EAAA,EAAU,QAAS,EAAA,EAAU,OAAQ,EAAA,GACxE,IAAY,KAAM,EAAA,EAAU,MAAO,EAAA,EAAU,OAAS,EAAA,EAAU,MAAQ,EAAA,GAkExE,IACJ,QAAA,GACA,QAAA,GACA,mBAAA,GACA,MAAA,GACA,IAAA,GACA,UACE,SAAS,EACT,MAAO,KACP,MAAO,KACP,OAAQ,UAIG,8FCvFf,IAAA,IAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IAEM,IAAU,OAAQ,EAAA,EAAU,QAAS,EAAA,GACrC,IAAU,MAAQ,EAAA,EAAU,OAAS,EAAA,GAiDrC,IACJ,MAAA,GACA,IAAA,GACA,UACE,SAAS,EACT,IAAK,KACL,IAAK,UAIM,8FC3Ef,IAAA,4SAAA,IA6IM,IACJ,MAAA,GACA,IAAA,GACA,UACE,SAAS,EACT,MAAS,EAAA,EACT,QAAS,KACT,OAAQ,KAER,eAAgB,UAIL,8FCvJf,IAAA,IAAA,GAAA,IACA,2SAAA,IACA,GAAA,GAAA,IAwEM,IACJ,MAAA,GACA,IAAA,GACA,UACE,SAAS,EACT,MAAS,EAAA,EACT,QAAS,KACT,OAAQ,UAIG,8FC5Df,IAAA,IAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IAkBM,IACJ,MAAA,GACA,IAAA,GACA,UAAU,EAAA,GAAA,UAAO,EAAA,GAAA,SAAM,GAAA,QAAS,WAC9B,QAAU,EAAG,EAAG,EAAG,SAIR,iKoBxDf,IAAA,IAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IAEQ,GAAiB,GAAA,QAAjB,aAEK,GAAO,GAAa,GAAA,QAAY,kBACtC,IAAM,IAAW,GAAa,GAAA,QAAgB,0BAC9C,IAAM,IAAY,GAAa,GAAA,QAAiB,4BAChD,IAAM,IAAW,GAAa,GAAA,QAAgB,0BAC9C,IAAM,IAAgB,GAAa,GAAA,QAAqB,oCACxD,IAAM,IAAe,GAAa,GAAA,QAAoB,gHCd7D,IAAA,sDAAA,IAGqB,cAoBnB,QAAA,GAAa,EAAM,EAAS,EAAO,EAAa,GAiB9C,GAjByD,GAAA,KAAA,GAJ3D,KAAA,oBAAqB,EACrB,KAAA,6BAA8B,EAI5B,GAAA,QAAa,cAAc,KAAM,GAE7B,IAAU,GACZ,GAAA,QAAa,cAAc,KAAM,GAGnC,KAAK,YAAc,EAEnB,KAAK,WAAgB,GAAI,OAAO,UAChC,KAAK,cAAgB,EACrB,KAAK,KAAgB,EACrB,KAAK,UAAgB,GAAA,QAAa,aAAa,GAC/C,KAAK,YAAgB,GAAA,QAAa,eAAe,GACjD,KAAK,OAAgB,EACrB,KAAK,cAAgB,KAER,QAAT,EAAgB,CAClB,GAAM,GAAe,EAAY,gBAAgB,EACjD,MAAK,GAAK,KAAK,UAAY,EAAY,SAAS,GAAc,QAE9D,IAAM,GAAW,KAAK,UAAY,EAAY,OAE9C,MAAK,UAAY,EAAY,SACE,cAA7B,EAAY,QAAQ,MACpB,EAAY,QAAQ,SAAW,KAAK,QACpC,EAAW,SAEG,cAAT,IACP,KAAK,GAAK,EAAQ,UAAY,EAAY,8DAIJ,GAArB,GAAqB,EAAxB,EAAe,EAAS,EAAZ,CAM5B,OALA,MAAK,OAAW,EAChB,KAAK,OAAW,EAChB,KAAK,SAAW,EAChB,KAAK,SAAW,EAET,0CAG4B,GAArB,GAAqB,EAAxB,EAAe,EAAS,EAAZ,CAMvB,OALA,MAAK,OAAW,EAChB,KAAK,OAAW,EAChB,KAAK,SAAW,EAChB,KAAK,SAAW,EAET,8CAOP,KAAK,cAAc,2DAOnB,KAAK,oBAAqB,qDAO1B,KAAK,4BAA8B,KAAK,oBAAqB,sGpB1FjE,IAAA,4SAAA,IACA,qDAAA,IAoCM,GAAgB,GAAI,IAAM,QAC1B,IAAkB,OAAQ,KAAM,UAChC,IAAkB,OAAQ,KAAM,UAEhC,IACJ,QAAA,GACA,QAAA,GACA,aAAA,GAAA,QACA,KAAA,GACA,oBAAA,GACA,qBAAA,GACA,UACE,aAAc,IACd,WAAc,KACd,UAAc,KACd,QAAgB,EAAG,EAAG,EAAG,IAE3B,OACE,OACA,OACA,KACA,SACA,MACA,YACA,YAsOW,uGCzOb,QAAA,+FC3DF,IAAA,sDAAA,IACA,2SAAA,QAwEE,QAAA,kXC3EF,IAAA,IAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,oGCuJiB,QAAA,kqBCzJjB,IAAA,IAAA,GAAA,iBACA,IAAA,IAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,IACA,GAAA,GAAA,uBACA,IAAA,IAAA,GAAA,IACA,GAAA,GAAA,GAwCA,IAAA,QAAS,QAAU,GAAK,QAAU,wBAEnB,GAAA,2GCjBA,+JelCf,IAAA,sDAAA,0HdAA,IAAA,IAAA,GAAA,IACA,GAAA,GAAA,IAEA,qDAAA,IACA,GAAA,GAAA,GAUsB,aAAlB,mBAAO,QAAP,YAAA,GAAO,UAAyB,QAClC,GAAK,eAeQ,GAAA,Oe7Bf,8Bf8BA,GAAA,QAAA,QAAsB,GAAA,QACtB,GAAA,QAAA,KAAmB,GAEG,WAAlB,GAAO,KAAyB,KAClC,GAAA,QAAiB,GAAA,SenCnB,GAAA,GAAA","file":"interact.min.js","sourceRoot":"","sourcesContent":["/* interact.js v1.4.0-alpha.28+sha.e624c4d-dirty | https://raw.github.com/taye/interact.js/master/LICENSE */\n","/**\n * interact.js v1.4.0-alpha.28+sha.e624c4d-dirty\n *\n * Copyright (c) 2012-2019 Taye Adeyemi \n * Released under the MIT License.\n * https://raw.github.com/taye/interact.js/master/LICENSE\n */\n","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 function extend> (dest: U, source: T) {\n for (const prop in source) {\n (dest as unknown as T)[prop] = source[prop]\n }\n return dest as T & U\n}\n","import isWindow from './isWindow'\n\nconst win = {\n realWindow: undefined,\n window: undefined,\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 extend from './extend'\nimport * as is from './is'\n\nexport interface NormalizedListeners {\n [type: string]: Interact.Listener[]\n}\n\nexport default function normalize (\n type: Interact.EventTypes,\n listeners?: Interact.ListenersArg | Interact.ListenersArg[],\n result?: NormalizedListeners,\n): NormalizedListeners {\n result = result || {}\n\n if (is.string(type) && type.search(' ') !== -1) {\n type = split(type)\n }\n\n if (is.array(type)) {\n return type.reduce(\n (acc, t) => extend(acc, normalize(t, listeners, result)),\n result\n )\n }\n\n // ({ type: fn }) -> ('', { type: fn })\n if (is.object(type)) {\n listeners = type\n type = ''\n }\n\n if (is.func(listeners)) {\n result[type] = result[type] || []\n result[type].push(listeners)\n }\n else if (is.array(listeners)) {\n for (const l of listeners) {\n normalize(type, l, result)\n }\n }\n else if (is.object(listeners)) {\n for (const prefix in listeners) {\n const combinedTypes = split(prefix).map((p) => `${type}${p}`)\n\n normalize(combinedTypes, listeners[prefix], result)\n }\n }\n\n return result as NormalizedListeners\n}\n\nfunction split (type: string) {\n return type.trim().split(/ +/)\n}\n","import * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport normalize, { NormalizedListeners } from '@interactjs/utils/normalizeListeners'\nimport { EventPhase, InteractEvent } from './InteractEvent'\nimport { ActionName } from './scope'\n\nfunction fireUntilImmediateStopped<\nT extends ActionName,\nP extends EventPhase,\n> (event: InteractEvent, listeners: Interact.Listener[]) {\n for (const listener of listeners) {\n if (event.immediatePropagationStopped) { break }\n\n listener(event)\n }\n}\n\nclass Eventable {\n options: any\n types: NormalizedListeners = {}\n propagationStopped = false\n immediatePropagationStopped = false\n global: any\n\n constructor (options?: { [index: string]: any }) {\n this.options = extend({}, options || {})\n }\n\n fire (event: any) {\n let listeners\n const global = this.global\n\n // Interactable#on() listeners\n // tslint:disable no-conditional-assignment\n if ((listeners = this.types[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n\n // interact.on() listeners\n if (!event.propagationStopped && global && (listeners = global[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n }\n\n on (type: string, listener: Interact.ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n this.types[type] = arr.merge(this.types[type] || [], listeners[type])\n }\n }\n\n off (type: string, listener: Interact.ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n const eventList = this.types[type]\n\n if (!eventList || !eventList.length) { continue }\n\n for (const subListener of listeners[type]) {\n const index = eventList.indexOf(subListener)\n\n if (index !== -1) {\n eventList.splice(index, 1)\n }\n }\n }\n }\n}\n\nexport default Eventable\n","const domObjects: {\n init: any,\n document: Document,\n DocumentFragment: typeof DocumentFragment,\n SVGElement: typeof SVGElement,\n SVGSVGElement: typeof SVGSVGElement,\n SVGElementInstance: any,\n Element: typeof Element,\n HTMLElement: typeof HTMLElement,\n Event: typeof Event,\n Touch: typeof Touch,\n PointerEvent: typeof PointerEvent,\n} =\n{\n init,\n document: null as any,\n DocumentFragment: null as any,\n SVGElement: null as any,\n SVGSVGElement: null as any,\n // eslint-disable-next-line no-undef\n SVGElementInstance: null as any,\n Element: null as any,\n HTMLElement: null as any,\n Event: null as any,\n Touch: null as any,\n PointerEvent: null as any,\n}\n\nfunction blank () {}\n\nexport default domObjects\n\nfunction init (window: Window) {\n const win = window as any\n\n domObjects.document = win.document\n domObjects.DocumentFragment = win.DocumentFragment || blank\n domObjects.SVGElement = win.SVGElement || blank\n domObjects.SVGSVGElement = win.SVGSVGElement || blank\n domObjects.SVGElementInstance = win.SVGElementInstance || blank\n domObjects.Element = win.Element || blank\n domObjects.HTMLElement = win.HTMLElement || domObjects.Element\n\n domObjects.Event = win.Event\n domObjects.Touch = win.Touch || blank\n domObjects.PointerEvent = (win.PointerEvent || win.MSPointerEvent)\n}\n","import domObjects from './domObjects'\nimport * as is from './is'\nimport win from './window'\n\nconst browser = {\n init,\n supportsTouch: null as boolean,\n supportsPointerEvent: null as boolean,\n isIOS7: null as boolean,\n isIOS: null as boolean,\n isIe9: null as boolean,\n isOperaMobile: null as boolean,\n prefixedMatchesSelector: null as string,\n pEventTypes: null as {\n up: string,\n down: string,\n over: string,\n out: string,\n move: string,\n cancel: string,\n },\n wheelEvent: null as string,\n}\n\nfunction init (window) {\n const Element = domObjects.Element as any\n const navigator = win.window.navigator\n\n // Does the browser support touch input?\n browser.supportsTouch = ('ontouchstart' in window) ||\n (is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch)\n\n // Does the browser support PointerEvents\n browser.supportsPointerEvent = !!domObjects.PointerEvent\n\n browser.isIOS = (/iP(hone|od|ad)/.test(navigator.platform))\n\n // scrolling doesn't change the result of getClientRects on iOS 7\n browser.isIOS7 = (/iP(hone|od|ad)/.test(navigator.platform) &&\n /OS 7[^\\d]/.test(navigator.appVersion))\n\n browser.isIe9 = /MSIE 9/.test(navigator.userAgent)\n\n // Opera Mobile must be handled differently\n browser.isOperaMobile = (navigator.appName === 'Opera' &&\n browser.supportsTouch &&\n navigator.userAgent.match('Presto'))\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\nexport default browser\n","import browser from './browser'\nimport domObjects from './domObjects'\nimport * as is from './is'\nimport win from './window'\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 // tslint:disable-next-line\n while ((parent = (parent as any).host) && is.docFrag(parent)) {\n continue\n }\n\n return parent\n }\n\n return parent\n}\n\nexport function matchesSelector (element, selector) {\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (win.window !== win.realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ')\n }\n\n return element[browser.prefixedMatchesSelector](selector)\n}\n\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 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","import { closest, getElementRect, parentNode } from './domUtils'\nimport extend from './extend'\nimport * as is from './is'\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 { rectToXY, resolveRectLike } from './rect'\n\nexport default function (target, element, action?) {\n const actionOptions = target.options[action]\n const actionOrigin = actionOptions && actionOptions.origin\n const origin = actionOrigin || target.options.origin\n\n const originRect = resolveRectLike(origin, target, element, [target && element])\n\n return rectToXY(originRect) || { x: 0, y: 0 }\n}\n","import * as arr from './arr'\nimport * as is from './is'\n\nexport default function clone (source: T): Partial {\n const dest = {} as Partial\n\n for (const prop in source) {\n const value = source[prop]\n\n if (is.plainObject(value)) {\n dest[prop] = clone(value) as any\n }\n else if (is.array(value)) {\n dest[prop] = arr.from(value)\n }\n else {\n dest[prop] = value\n }\n }\n\n return dest\n}\n","export interface PointerExtend {\n webkit: RegExp\n [prefix: string]: RegExp\n}\n\nexport 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\nexport default pointerExtend\n","import { contains } from './arr'\nimport * as domUtils from './domUtils'\nimport * as is from './is'\nimport pExtend from './pointerExtend'\nimport pointerUtils from './pointerUtils'\n\ntype Listener = (event: Event | FakeEvent) => any\n\nconst elements: EventTarget[] = []\nconst targets: Array<{\n events: { [type: string]: Listener[] },\n typeCount: number,\n}> = []\n\nconst delegatedEvents: {\n [type: string]: {\n selectors: string[],\n contexts: EventTarget[],\n listeners: Array>,\n },\n} = {}\nconst documents: Document[] = []\n\nfunction add (element: EventTarget, type: string, listener: Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n let elementIndex = elements.indexOf(element)\n let target = targets[elementIndex]\n\n if (!target) {\n target = {\n events: {},\n typeCount: 0,\n }\n\n elementIndex = elements.push(element) - 1\n targets.push(target)\n }\n\n if (!target.events[type]) {\n target.events[type] = []\n target.typeCount++\n }\n\n if (!contains(target.events[type], listener)) {\n element.addEventListener(type, listener as any, events.supportsOptions ? options : !!options.capture)\n target.events[type].push(listener)\n }\n}\n\nfunction remove (element: EventTarget, type: string, listener?: 'all' | Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n const elementIndex = elements.indexOf(element)\n const target = targets[elementIndex]\n\n if (!target || !target.events) {\n return\n }\n\n if (type === 'all') {\n for (type in target.events) {\n if (target.events.hasOwnProperty(type)) {\n remove(element, type, 'all')\n }\n }\n return\n }\n\n if (target.events[type]) {\n const len = target.events[type].length\n\n if (listener === 'all') {\n for (let i = 0; i < len; i++) {\n remove(element, type, target.events[type][i], options)\n }\n return\n }\n else {\n for (let i = 0; i < len; i++) {\n if (target.events[type][i] === listener) {\n element.removeEventListener(type, listener as any, events.supportsOptions ? options : !!options.capture)\n target.events[type].splice(i, 1)\n\n break\n }\n }\n }\n\n if (target.events[type] && target.events[type].length === 0) {\n (target.events[type] as any) = null\n target.typeCount--\n }\n }\n\n if (!target.typeCount) {\n targets.splice(elementIndex, 1)\n elements.splice(elementIndex, 1)\n }\n}\n\nfunction addDelegate (selector: string, context: EventTarget, type: string, listener: Listener, optionalArg?: any) {\n const options = getOptions(optionalArg)\n if (!delegatedEvents[type]) {\n delegatedEvents[type] = {\n contexts : [],\n listeners: [],\n selectors: [],\n }\n\n // add delegate listener functions\n for (const doc of documents) {\n add(doc, type, delegateListener)\n add(doc, type, delegateUseCapture, true)\n }\n }\n\n const delegated = delegatedEvents[type]\n let index\n\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n if (delegated.selectors[index] === selector &&\n delegated.contexts[index] === context) {\n break\n }\n }\n\n if (index === -1) {\n index = delegated.selectors.length\n\n delegated.selectors.push(selector)\n delegated.contexts.push(context)\n delegated.listeners.push([])\n }\n\n // keep listener and capture and passive flags\n delegated.listeners[index].push([listener, !!options.capture, options.passive])\n}\n\nfunction removeDelegate (selector, context, type, listener?, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const delegated = delegatedEvents[type]\n let matchFound = false\n let index\n\n if (!delegated) { return }\n\n // count from last index of delegated to 0\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n // look for matching selector and context Node\n if (delegated.selectors[index] === selector &&\n delegated.contexts[index] === context) {\n const listeners = delegated.listeners[index]\n\n // each item of the listeners array is an array: [function, capture, passive]\n for (let i = listeners.length - 1; i >= 0; i--) {\n const [fn, capture, passive] = listeners[i]\n\n // check if the listener functions and capture and passive flags match\n if (fn === listener && capture === !!options.capture && passive === options.passive) {\n // remove the listener from the array of listeners\n listeners.splice(i, 1)\n\n // if all listeners for this interactable have been removed\n // remove the interactable from the delegated arrays\n if (!listeners.length) {\n delegated.selectors.splice(index, 1)\n delegated.contexts.splice(index, 1)\n delegated.listeners.splice(index, 1)\n\n // remove delegate function from context\n remove(context, type, delegateListener)\n remove(context, type, delegateUseCapture, true)\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegatedEvents[type] = null\n }\n }\n\n // only remove one listener\n matchFound = true\n break\n }\n }\n\n if (matchFound) { break }\n }\n }\n}\n\n// bound to the interactable context when a DOM event\n// listener is added to a selector interactable\nfunction delegateListener (event: Event, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const fakeEvent = new FakeEvent(event)\n const delegated = delegatedEvents[event.type]\n const [eventTarget] = (pointerUtils.getEventTargets(event))\n let element = eventTarget\n\n // climb up document tree looking for selector matches\n while (is.element(element)) {\n for (let i = 0; i < delegated.selectors.length; i++) {\n const selector = delegated.selectors[i]\n const context = delegated.contexts[i]\n\n if (domUtils.matchesSelector(element, selector) &&\n domUtils.nodeContains(context, eventTarget) &&\n domUtils.nodeContains(context, element)) {\n const listeners = delegated.listeners[i]\n\n fakeEvent.currentTarget = element\n\n for (const [fn, capture, passive] of listeners) {\n if (capture === !!options.capture && passive === options.passive) {\n fn(fakeEvent)\n }\n }\n }\n }\n\n element = domUtils.parentNode(element)\n }\n}\n\nfunction delegateUseCapture (event: Event) {\n return delegateListener.call(this, event, true)\n}\n\nfunction getOptions (param) {\n return is.object(param) ? param : { capture: param }\n}\n\nexport class FakeEvent implements Partial {\n currentTarget: EventTarget\n\n constructor (public originalEvent) {\n // duplicate the event so that currentTarget can be changed\n pExtend(this, originalEvent)\n }\n\n preventOriginalDefault () {\n this.originalEvent.preventDefault()\n }\n\n stopPropagation () {\n this.originalEvent.stopPropagation()\n }\n\n stopImmediatePropagation () {\n this.originalEvent.stopImmediatePropagation()\n }\n}\n\nconst events = {\n add,\n remove,\n\n addDelegate,\n removeDelegate,\n\n delegateListener,\n delegateUseCapture,\n delegatedEvents,\n documents,\n\n supportsOptions: false,\n supportsPassive: false,\n\n _elements: elements,\n _targets: targets,\n\n init (window: Window) {\n window.document.createElement('div').addEventListener('test', null, {\n get capture () { return (events.supportsOptions = true) },\n get passive () { return (events.supportsPassive = true) },\n })\n },\n}\n\nexport default events\n","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 // eslint-disable-next-line standard/no-callback-literal\n const token = setTimeout(() => { callback(currTime + timeToCall) },\n timeToCall)\n\n lastTime = currTime + timeToCall\n return token\n }\n\n cancel = (token) => clearTimeout(token)\n }\n}\n\nexport default {\n request: (callback) => request(callback),\n cancel: (token) => cancel(token),\n init,\n}\n","import * as arr from './arr'\nimport * as dom from './domUtils'\nimport * as is from './is'\nimport win from './window'\n\nexport function warnOnce (this: T, method: (...args: any) => any, message: string) {\n let warned = false\n\n // eslint-disable-next-line no-shadow\n return function (this: T) {\n if (!warned) {\n (win as any).window.console.warn(message)\n warned = true\n }\n\n return method.apply(this, arguments)\n }\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nexport function _getQBezierValue (t: number, p1: number, p2: number, p3: number) {\n const iT = 1 - t\n return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3\n}\n\nexport function getQuadraticCurvePoint (\n startX: number, startY: number, cpX: number, cpY: number, endX: number, endY: number, position: number) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY),\n }\n}\n\n// http://gizma.com/easing/\nexport function easeOutQuad (t: number, b: number, c: number, d: number) {\n t /= d\n return -c * t * (t - 2) + b\n}\n\nexport function copyAction (dest: any, src: any) {\n dest.name = src.name\n dest.axis = src.axis\n dest.edges = src.edges\n\n return dest\n}\n\nexport { default as browser } from './browser'\nexport { default as clone } from './clone'\nexport { default as events } from './events'\nexport { default as extend } from './extend'\nexport { default as getOriginXY } from './getOriginXY'\nexport { default as hypot } from './hypot'\nexport { default as normalizeListeners } from './normalizeListeners'\nexport { default as pointer } from './pointerUtils'\nexport { default as raf } from './raf'\nexport { default as rect } from './rect'\nexport { default as Signals } from './Signals'\nexport { win, arr, dom, is }\n","import * as utils from './index'\n\nexport interface SearchDetails {\n pointer: Interact.PointerType\n pointerId: number\n pointerType: string\n eventType: string\n eventTarget: Window | Document | Element\n curEventTarget: Window | Document | Element\n scope: Interact.Scope\n}\n\nconst finder = {\n methodOrder: [ 'simulationResume', 'mouseOrPen', 'hasPointer', 'idle' ],\n\n search (details) {\n for (const method of finder.methodOrder) {\n const interaction = finder[method](details)\n\n if (interaction) {\n return interaction\n }\n }\n },\n\n // try to resume simulation with a new pointer\n simulationResume ({ pointerType, eventType, eventTarget, scope }: SearchDetails) {\n if (!/down|start/i.test(eventType)) {\n return null\n }\n\n for (const interaction of scope.interactions.list) {\n let element = eventTarget\n\n if (interaction.simulation && interaction.simulation.allowResume &&\n (interaction.pointerType === pointerType)) {\n while (element) {\n // if the element is the interaction element\n if (element === interaction.element) {\n return interaction\n }\n element = utils.dom.parentNode(element)\n }\n }\n }\n\n return null\n },\n\n // if it's a mouse or pen interaction\n mouseOrPen ({ pointerId, pointerType, eventType, scope }: SearchDetails) {\n if (pointerType !== 'mouse' && pointerType !== 'pen') {\n return null\n }\n\n let firstNonActive\n\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType) {\n // if it's a down event, skip interactions with running simulations\n if (interaction.simulation && !hasPointerId(interaction, pointerId)) { continue }\n\n // if the interaction is active, return it immediately\n if (interaction.interacting()) {\n return interaction\n }\n // otherwise save it and look for another active interaction\n else if (!firstNonActive) {\n firstNonActive = interaction\n }\n }\n }\n\n // if no active mouse interaction was found use the first inactive mouse\n // interaction\n if (firstNonActive) {\n return firstNonActive\n }\n\n // find any mouse or pen interaction.\n // ignore the interaction if the eventType is a *down, and a simulation\n // is active\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get interaction that has this pointer\n hasPointer ({ pointerId, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n if (hasPointerId(interaction, pointerId)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get first idle interaction with a matching pointerType\n idle ({ pointerType, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n // if there's already a pointer held down\n if (interaction.pointers.length === 1) {\n const target = interaction.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 browser from '@interactjs/utils/browser'\nimport domObjects from '@interactjs/utils/domObjects'\nimport events from '@interactjs/utils/events'\nimport finder, { SearchDetails } from '@interactjs/utils/interactionFinder'\nimport pointerUtils from '@interactjs/utils/pointerUtils'\nimport Signals from '@interactjs/utils/Signals'\nimport InteractionBase from './Interaction'\nimport { Scope } from './scope'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n Interaction: typeof InteractionBase\n interactions: {\n signals: Signals\n new: (options: any) => InteractionBase\n list: InteractionBase[]\n listeners: { [type: string]: Interact.Listener }\n eventMap: any\n pointerMoveTolerance: number\n }\n prevTouchTime: number\n }\n}\n\nconst methodNames = [\n 'pointerDown', 'pointerMove', 'pointerUp',\n 'updatePointer', 'removePointer', 'windowBlur',\n]\n\nfunction install (scope: Scope) {\n const signals = new Signals()\n\n const listeners = {} as any\n\n for (const method of methodNames) {\n listeners[method] = doOnInteractions(method, scope)\n }\n\n const pEventTypes = browser.pEventTypes\n const eventMap = {} as { [key: string]: Interact.Listener }\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\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: 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: 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 * as utils from '@interactjs/utils'\nimport domObjects from '@interactjs/utils/domObjects'\nimport defaults from './defaultOptions'\nimport Eventable from './Eventable'\nimport InteractableBase from './Interactable'\nimport InteractEvent from './InteractEvent'\nimport interactions from './interactions'\n\nconst {\n win,\n browser,\n raf,\n Signals,\n events,\n} = utils\n\nexport enum ActionName {\n}\n\nexport interface Actions {\n names: ActionName[]\n methodDict: { [key: string]: string }\n eventTypes: string[]\n}\n\nexport function createScope () {\n return new Scope()\n}\n\nexport type Defaults = typeof defaults\n\nexport class Scope {\n // FIXME Signals\n signals = new Signals()\n browser = browser\n events = events\n utils = utils\n defaults: Defaults = utils.clone(defaults) as Defaults\n Eventable = Eventable\n actions: Actions = {\n names: [],\n methodDict: {},\n eventTypes: [],\n }\n\n InteractEvent = InteractEvent\n Interactable!: typeof InteractableBase\n interactables = new InteractableSet(this)\n\n // main window\n _win!: Window\n\n // main document\n document!: Document\n\n // all documents being listened to\n documents: Array<{ doc: Document, options: any }> = []\n\n constructor () {\n const scope = this as Scope;\n\n (this as { Interactable: typeof InteractableBase }).Interactable = class Interactable extends InteractableBase implements InteractableBase {\n get _defaults () { return scope.defaults }\n\n set (options: any) {\n super.set(options)\n\n scope.interactables.signals.fire('set', {\n options,\n interactable: this,\n })\n\n return this\n }\n\n unset () {\n super.unset()\n scope.interactables.signals.fire('unset', { interactable: this })\n }\n }\n }\n\n init (window: Window) {\n return initScope(this, window)\n }\n\n addDocument (doc: Document, options?: any): void | false {\n // do nothing if document is already known\n if (this.getDocIndex(doc) !== -1) { return false }\n\n const window = win.getWindow(doc)\n\n options = options ? utils.extend({}, options) : {}\n\n this.documents.push({ doc, options })\n events.documents.push(doc)\n\n // don't add an unload event for the main document\n // so that the page may be cached in browser history\n if (doc !== this.document) {\n events.add(window, 'unload', this.onWindowUnload)\n }\n\n this.signals.fire('add-document', { doc, window, scope: this, options })\n }\n\n removeDocument (doc: Document) {\n const index = this.getDocIndex(doc)\n\n const window = win.getWindow(doc)\n const options = this.documents[index].options\n\n events.remove(window, 'unload', this.onWindowUnload)\n\n this.documents.splice(index, 1)\n events.documents.splice(index, 1)\n\n this.signals.fire('remove-document', { doc, window, scope: this, options })\n }\n\n onWindowUnload (event: Event) {\n this.removeDocument(event.target as Document)\n }\n\n getDocIndex (doc: Document) {\n for (let i = 0; i < this.documents.length; i++) {\n if (this.documents[i].doc === doc) {\n return i\n }\n }\n\n return -1\n }\n\n getDocOptions (doc: Document) {\n const docIndex = this.getDocIndex(doc)\n\n return docIndex === -1 ? null : this.documents[docIndex].options\n }\n}\n\nexport class InteractableSet {\n signals = new utils.Signals()\n\n // all set interactables\n list: InteractableBase[] = []\n\n constructor (protected scope: Scope) {}\n\n new (target: Interact.Target, options?: any): InteractableBase {\n options = utils.extend(options || {}, {\n actions: this.scope.actions,\n })\n const interactable = new this.scope.Interactable(target, options, this.scope.document)\n\n this.scope.addDocument(interactable._doc)\n this.list.push(interactable)\n\n this.signals.fire('new', {\n target,\n options,\n interactable,\n win: this.scope._win,\n })\n\n return interactable\n }\n\n indexOfElement (target: Interact.Target, context: Document | Element) {\n context = context || this.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: Interact.Target, options, dontCheckInContext?: boolean) {\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: Document | Element, callback: (interactable: any) => any) {\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\nexport function initScope (scope: Scope, window: Window) {\n win.init(window)\n domObjects.init(window)\n browser.init(window)\n raf.init(window)\n events.init(window)\n\n interactions.install(scope)\n scope.document = window.document\n\n return scope\n}\n","import { ActionName, Scope } from '@interactjs/core/scope'\nimport * as arr from '@interactjs/utils/arr'\nimport * as is from '@interactjs/utils/is'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n draggable: DraggableMethod\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n drag: Interact.DraggableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Drag]?: typeof drag\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Drag = 'drag'\n }\n}\n\n(ActionName as any).Drag = 'drag'\n\nexport type DragEvent = Interact.InteractEvent\n\nexport type DraggableMethod = Interact.ActionMethod\n\nfunction install (scope: Scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope\n\n interactions.signals.on('before-action-move', beforeMove)\n interactions.signals.on('action-resume', beforeMove)\n\n // dragmove\n interactions.signals.on('action-move', move)\n\n Interactable.prototype.draggable = drag.draggable\n\n actions[ActionName.Drag] = drag\n actions.names.push(ActionName.Drag)\n arr.merge(actions.eventTypes, [\n 'dragstart',\n 'dragmove',\n 'draginertiastart',\n 'dragresume',\n 'dragend',\n ])\n actions.methodDict.drag = 'draggable'\n\n defaults.actions.drag = drag.defaults\n}\n\nfunction beforeMove ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x') {\n interaction.coords.cur.page.y = interaction.coords.start.page.y\n interaction.coords.cur.client.y = interaction.coords.start.client.y\n\n interaction.coords.velocity.client.y = 0\n interaction.coords.velocity.page.y = 0\n }\n else if (axis === 'y') {\n interaction.coords.cur.page.x = interaction.coords.start.page.x\n interaction.coords.cur.client.x = interaction.coords.start.client.x\n\n interaction.coords.velocity.client.x = 0\n interaction.coords.velocity.page.x = 0\n }\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x' || axis === 'y') {\n const opposite = axis === 'x' ? 'y' : 'x'\n\n iEvent.page[opposite] = interaction.coords.start.page[opposite]\n iEvent.client[opposite] = interaction.coords.start.client[opposite]\n iEvent.delta[opposite] = 0\n }\n}\n\n/**\n * ```js\n * interact(element).draggable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // the axis in which the first movement must be\n * // for the drag sequence to start\n * // 'xy' by default - any direction\n * startAxis: 'x' || 'y' || 'xy',\n *\n * // 'xy' by default - don't restrict to one axis (move in any direction)\n * // 'x' or 'y' to restrict movement to either axis\n * // 'start' to restrict movement to the axis the drag started in\n * lockAxis: 'x' || 'y' || 'xy' || 'start',\n *\n * // max number of drags that can happen concurrently\n * // with elements of this Interactable. Infinity by default\n * max: Infinity,\n *\n * // max number of drags that can target the same element+Interactable\n * // 1 by default\n * maxPerElement: 2\n * });\n *\n * var isDraggable = interact('element').draggable(); // true\n * ```\n *\n * Get or set whether drag actions can be performed on the target\n *\n * @alias Interactable.prototype.draggable\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on drag events (object makes the Interactable\n * draggable)\n * @return {boolean | Interactable} boolean indicating if this can be the\n * target of drag events, or this Interctable\n */\nconst draggable: DraggableMethod = function draggable (this: Interact.Interactable, options?: Interact.DraggableOptions | boolean): any {\n if (is.object(options)) {\n this.options.drag.enabled = options.enabled !== false\n this.setPerAction('drag', options)\n this.setOnEvents('drag', options)\n\n if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n this.options.drag.lockAxis = options.lockAxis\n }\n if (/^(xy|x|y)$/.test(options.startAxis)) {\n this.options.drag.startAxis = options.startAxis\n }\n\n return this\n }\n\n if (is.bool(options)) {\n this.options.drag.enabled = options\n\n return this\n }\n\n return this.options.drag\n}\n\nconst drag = {\n install,\n draggable,\n beforeMove,\n move,\n defaults: {\n startAxis : 'xy',\n lockAxis : 'xy',\n } as Interact.DropzoneOptions,\n\n checker (_pointer, _event, interactable) {\n const dragOptions = interactable.options.drag\n\n return dragOptions.enabled\n ? {\n name: 'drag',\n axis: (dragOptions.lockAxis === 'start'\n ? dragOptions.startAxis\n : dragOptions.lockAxis),\n }\n : null\n },\n\n getCursor () {\n return 'move'\n },\n}\n\nexport default drag\n","import Interactable from '@interactjs/core/Interactable'\nimport InteractEvent from '@interactjs/core/InteractEvent'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport DropEvent from './DropEvent'\n\nexport type DropzoneMethod = (options?: Interact.DropzoneOptions | boolean) => Interact.Interactable | Interact.DropzoneOptions\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n dropzone: DropzoneMethod\n dropCheck: (\n dragEvent: InteractEvent,\n event: Interact.PointerEventType,\n draggable: Interactable,\n draggableElement: Element,\n dropElemen: Element,\n rect: any\n ) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n dropStatus?: {\n cur: {\n dropzone: Interactable, // the dropzone a drag target might be dropped into\n element: Element, // the element at the time of checking\n },\n prev: {\n dropzone: Interactable, // the dropzone that was recently dragged away from\n element: Element, // the element at the time of checking\n },\n rejected: boolean, // wheather the potential drop was rejected from a listener\n events: any, // the drop events related to the current drag event\n activeDrops: Array<{\n dropzone: Interactable\n Element: Element\n rect: Interact.Rect\n }>,\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n drop: Interact.DropzoneOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n dynamicDrop?: boolean\n }\n}\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n dynamicDrop: (newValue?: boolean) => boolean | Interact.interact\n }\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n /** @lends module:interact */\n interact,\n /** @lends Interactable */\n Interactable, // eslint-disable-line no-shadow\n interactions,\n defaults,\n } = scope\n\n interactions.signals.on('after-action-start', ({ interaction, event, iEvent: dragEvent }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n const dropStatus = interaction.dropStatus = interaction.dropStatus || {\n cur: {\n dropzone: null,\n element: null,\n },\n prev: {\n dropzone: null,\n element: null,\n },\n rejected: null,\n events: null,\n activeDrops: null,\n }\n\n // reset active dropzones\n dropStatus.activeDrops = null\n dropStatus.events = null\n\n // TODO: maybe Interaction { element: T }\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 // FIXME proper signal types\n interactions.signals.on('action-move', (arg) => onEventCreated(arg as any, scope))\n interactions.signals.on('action-end', (arg) => onEventCreated(arg as any, scope))\n\n interactions.signals.on('after-action-move', ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n fireDropEvents(interaction, interaction.dropStatus.events)\n interaction.dropStatus.events = {}\n })\n\n interactions.signals.on('after-action-end', ({ interaction }) => {\n if (interaction.prepared.name === 'drag') {\n fireDropEvents(interaction, interaction.dropStatus.events)\n }\n })\n\n interactions.signals.on('stop', ({ interaction }) => {\n interaction.dropStatus.activeDrops = null\n interaction.dropStatus.events = null\n })\n\n interactions.signals.on('stop', ({ interaction: { dropStatus } }) => {\n dropStatus.cur.dropzone = dropStatus.cur.element =\n dropStatus.prev.dropzone = dropStatus.prev.element = null\n dropStatus.rejected = false\n })\n\n /**\n *\n * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param {boolean | object | null} [options] The new options to be set.\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.dropzone = function (this: Interact.Interactable, options) {\n return dropzoneMethod(this, options)\n }\n\n /**\n * ```js\n * interact(target)\n * .dropChecker(function(dragEvent, // related dragmove or dragend event\n * event, // TouchEvent/PointerEvent/MouseEvent\n * dropped, // bool result of the default checker\n * dropzone, // dropzone Interactable\n * dropElement, // dropzone elemnt\n * draggable, // draggable Interactable\n * draggableElement) {// draggable element\n *\n * return dropped && event.target.hasAttribute('allow-drop');\n * }\n * ```\n */\n Interactable.prototype.dropCheck = function (this: Interact.Interactable, dragEvent, event, draggable, draggableElement, dropElement, rect) {\n return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect)\n }\n\n /**\n * Returns or sets whether the dimensions of dropzone elements are calculated\n * on every dragmove or only on dragstart for the default dropChecker\n *\n * @param {boolean} [newValue] True to check on each move. False to check only\n * before start\n * @return {boolean | interact} The current setting or interact\n */\n interact.dynamicDrop = function (newValue?: boolean) {\n if (utils.is.bool(newValue)) {\n // if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n // calcRects(dropzones);\n // }\n\n scope.dynamicDrop = newValue\n\n return interact\n }\n return scope.dynamicDrop\n }\n\n utils.arr.merge(actions.eventTypes, [\n 'dragenter',\n 'dragleave',\n 'dropactivate',\n 'dropdeactivate',\n 'dropmove',\n 'drop',\n ])\n actions.methodDict.drop = 'dropzone'\n\n scope.dynamicDrop = false\n\n defaults.actions.drop = drop.defaults\n}\n\nfunction collectDrops ({ interactables }, draggableElement) {\n const drops = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const dropzone of interactables.list) {\n if (!dropzone.options.drop.enabled) { continue }\n\n const accept = dropzone.options.drop.accept\n\n // test the draggable draggableElement against the dropzone's accept setting\n if ((utils.is.element(accept) && accept !== draggableElement) ||\n (utils.is.string(accept) &&\n !utils.dom.matchesSelector(draggableElement, accept)) ||\n (utils.is.func(accept) && !accept({ dropzone, draggableElement }))) {\n continue\n }\n\n // query for new elements if necessary\n const dropElements = utils.is.string(dropzone.target)\n ? dropzone._context.querySelectorAll(dropzone.target)\n : utils.is.array(dropzone.target) ? dropzone.target : [dropzone.target]\n\n for (const dropzoneElement of dropElements) {\n if (dropzoneElement !== draggableElement) {\n drops.push({\n dropzone,\n element: dropzoneElement,\n })\n }\n }\n }\n\n return drops\n}\n\nfunction fireActivationEvents (activeDrops, event) {\n // loop through all active dropzones and trigger event\n for (const { dropzone, element } of activeDrops) {\n event.dropzone = dropzone\n\n // set current element as event target\n event.target = element\n dropzone.fire(event)\n event.propagationStopped = event.immediatePropagationStopped = false\n }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops (scope: Scope, dragElement: Element) {\n // get dropzones and their elements that could receive the draggable\n const activeDrops = collectDrops(scope, dragElement)\n\n for (const activeDrop of activeDrops) {\n activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element)\n }\n\n return activeDrops\n}\n\nfunction getDrop ({ 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.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\nfunction dropzoneMethod (interactable: Interact.Interactable, options: Interact.DropzoneOptions | boolean) {\n if (utils.is.object(options)) {\n interactable.options.drop.enabled = options.enabled !== false\n\n if (options.listeners) {\n const normalized = utils.normalizeListeners(options.listeners)\n // rename 'drop' to '' as it will be prefixed with 'drop'\n const corrected = Object.keys(normalized).reduce((acc, type) => {\n const correctedType = /^(enter|leave)/.test(type)\n ? `drag${type}`\n : /^(activate|deactivate|move)/.test(type)\n ? `drop${type}`\n : type\n\n acc[correctedType] = normalized[type]\n\n return acc\n }, {})\n\n interactable.off(interactable.options.drop.listeners)\n interactable.on(corrected)\n interactable.options.drop.listeners = corrected\n }\n\n if (utils.is.func(options.ondrop)) { interactable.on('drop', options.ondrop) }\n if (utils.is.func(options.ondropactivate)) { interactable.on('dropactivate', options.ondropactivate) }\n if (utils.is.func(options.ondropdeactivate)) { interactable.on('dropdeactivate', options.ondropdeactivate) }\n if (utils.is.func(options.ondragenter)) { interactable.on('dragenter', options.ondragenter) }\n if (utils.is.func(options.ondragleave)) { interactable.on('dragleave', options.ondragleave) }\n if (utils.is.func(options.ondropmove)) { interactable.on('dropmove', options.ondropmove) }\n\n if (/^(pointer|center)$/.test(options.overlap as string)) {\n interactable.options.drop.overlap = options.overlap\n }\n else if (utils.is.number(options.overlap)) {\n interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0)\n }\n if ('accept' in options) {\n interactable.options.drop.accept = options.accept\n }\n if ('checker' in options) {\n interactable.options.drop.checker = options.checker\n }\n\n return interactable\n }\n\n if (utils.is.bool(options)) {\n interactable.options.drop.enabled = options\n\n return interactable\n }\n\n return interactable.options.drop\n}\n\nfunction dropCheckMethod (\n interactable: Interact.Interactable,\n dragEvent: InteractEvent,\n event: Interact.PointerEventType,\n draggable: Interact.Interactable,\n draggableElement: Element,\n dropElement: Element,\n rect: any\n) {\n let dropped = false\n\n // if the dropzone has no rect (eg. display: none)\n // call the custom dropChecker or just return false\n if (!(rect = rect || interactable.getRect(dropElement))) {\n return (interactable.options.drop.checker\n ? interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n : false)\n }\n\n const dropOverlap = interactable.options.drop.overlap\n\n if (dropOverlap === 'pointer') {\n const origin = utils.getOriginXY(draggable, draggableElement, 'drag')\n const page = utils.pointer.getPageXY(dragEvent)\n\n page.x += origin.x\n page.y += origin.y\n\n const horizontal = (page.x > rect.left) && (page.x < rect.right)\n const vertical = (page.y > rect.top) && (page.y < rect.bottom)\n\n dropped = horizontal && vertical\n }\n\n const dragRect = draggable.getRect(draggableElement)\n\n if (dragRect && dropOverlap === 'center') {\n const cx = dragRect.left + dragRect.width / 2\n const cy = dragRect.top + dragRect.height / 2\n\n dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom\n }\n\n if (dragRect && utils.is.number(dropOverlap)) {\n const overlapArea = (Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) *\n Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top)))\n\n const overlapRatio = overlapArea / (dragRect.width * dragRect.height)\n\n dropped = overlapRatio >= dropOverlap\n }\n\n if (interactable.options.drop.checker) {\n dropped = interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n }\n\n return dropped\n}\n\nconst drop = {\n install,\n getActiveDrops,\n getDrop,\n getDropEvents,\n fireDropEvents,\n defaults: {\n enabled: false,\n accept : null,\n overlap: 'pointer',\n } as Interact.DropzoneOptions,\n}\n\nexport default drop\n","import InteractEvent from '@interactjs/core/InteractEvent'\nimport { ActionName, Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\n\nexport type GesturableMethod = Interact.ActionMethod\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n gesture?: {\n startAngle: number\n startDistance: number\n prevScale: number\n prevAngle: number\n prevDistance: number\n }\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n gesturable: GesturableMethod\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n gesture: Interact.GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Gesture]?: typeof gesture\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Gesture = 'gesture'\n }\n}\n\n(ActionName as any).Gesture = 'gesture'\n\nexport interface GestureEvent extends Interact.InteractEvent {\n distance: number\n angle: number\n da: number // angle change\n scale: number // ratio of distance start to current event\n ds: number // scale change\n box: Interact.Rect // enclosing box of all points\n touches: Interact.PointerType[]\n}\n\nexport interface GestureSignalArg extends Interact.SignalArg {\n iEvent: GestureEvent\n interaction: Interact.Interaction\n event: Interact.PointerEventType | GestureEvent\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope\n\n /**\n * ```js\n * interact(element).gesturable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // limit multiple gestures.\n * // See the explanation in {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * });\n *\n * var isGestureable = interact(element).gesturable();\n * ```\n *\n * Gets or sets whether multitouch gestures can be performed on the target\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on gesture events (makes the Interactable gesturable)\n * @return {boolean | Interactable} A boolean indicating if this can be the\n * target of gesture events, or this Interactable\n */\n Interactable.prototype.gesturable = function (this: Interact.Interactable, options: Interact.GesturableOptions | boolean) {\n if (utils.is.object(options)) {\n this.options.gesture.enabled = options.enabled !== false\n this.setPerAction('gesture', options)\n this.setOnEvents('gesture', options)\n\n return this\n }\n\n if (utils.is.bool(options)) {\n this.options.gesture.enabled = options\n\n return this\n }\n\n return this.options.gesture as Interact.Options\n } as GesturableMethod\n\n interactions.signals.on('action-start', updateGestureProps)\n interactions.signals.on('action-move', updateGestureProps)\n interactions.signals.on('action-end', updateGestureProps)\n\n interactions.signals.on('action-start', start)\n interactions.signals.on('action-move', move)\n\n interactions.signals.on('new', (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[ActionName.Gesture] = gesture\n actions.names.push(ActionName.Gesture)\n utils.arr.merge(actions.eventTypes, [\n 'gesturestart',\n 'gesturemove',\n 'gestureend',\n ])\n actions.methodDict.gesture = 'gesturable'\n\n defaults.actions.gesture = gesture.defaults\n}\n\nconst gesture = {\n install,\n defaults: {\n },\n\n checker (_pointer, _event, _interactable, _element, interaction: { pointers: { length: number; }; }) {\n if (interaction.pointers.length >= 2) {\n return { name: 'gesture' }\n }\n\n return null\n },\n\n getCursor () {\n return ''\n },\n}\n\nfunction 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 interaction.gesture.scale = iEvent.scale\n }\n}\n\nfunction updateGestureProps ({ interaction, iEvent, event, phase }: GestureSignalArg) {\n if (interaction.prepared.name !== 'gesture') { return }\n\n const pointers = interaction.pointers.map((p) => p.pointer)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const deltaSource = interaction.target.options.deltaSource\n\n iEvent.touches = [pointers[0], pointers[1]]\n\n if (starting) {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource)\n iEvent.box = utils.pointer.touchBBox(pointers)\n iEvent.scale = 1\n iEvent.ds = 0\n iEvent.angle = utils.pointer.touchAngle(pointers, deltaSource)\n iEvent.da = 0\n }\n else if (ending || event instanceof InteractEvent) {\n const prevEvent = interaction.prevEvent as GestureEvent\n\n iEvent.distance = prevEvent.distance\n iEvent.box = prevEvent.box\n iEvent.scale = prevEvent.scale\n iEvent.ds = iEvent.scale - 1\n iEvent.angle = 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, deltaSource)\n\n iEvent.ds = iEvent.scale - interaction.gesture.prevScale\n iEvent.da = iEvent.angle - interaction.gesture.prevAngle\n }\n}\n\nexport default gesture\n","import { ActionProps, Interaction } from '@interactjs/core/Interaction'\nimport { ActionName, Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\n\nexport type EdgeName = 'top' | 'left' | 'bottom' | 'right'\n\nexport type ResizableMethod = Interact.ActionMethod\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n resizable: ResizableMethod\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n resizeAxes: 'x' | 'y' | 'xy'\n resizeRects: {\n start: Interact.Rect\n current: Interact.Rect\n inverted: Interact.Rect\n previous: Interact.Rect\n delta: Interact.Rect\n }\n resizeStartAspectRatio: number\n }\n\n interface ActionProps {\n _linkedEdges?: { [key: string]: boolean }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n resize: Interact.ResizableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Resize]?: typeof resize\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Resize = 'resize'\n }\n}\n\n(ActionName as any).Resize = 'resize'\n\nexport interface ResizeEvent extends Interact.InteractEvent {\n deltaRect?: Interact.Rect\n rect?: Interact.Rect\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n browser,\n /** @lends Interactable */\n Interactable, // tslint:disable-line no-shadowed-variable\n interactions,\n defaults,\n } = scope\n\n // Less Precision with touch input\n\n interactions.signals.on('new', (interaction) => {\n interaction.resizeAxes = 'xy'\n })\n\n interactions.signals.on('action-start', start)\n interactions.signals.on('action-move', move)\n\n interactions.signals.on('action-start', updateEventAxes)\n interactions.signals.on('action-move', updateEventAxes)\n\n resize.cursors = initCursors(browser)\n resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10\n\n /**\n * ```js\n * interact(element).resizable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * edges: {\n * top : true, // Use pointer coords to check for resize.\n * left : false, // Disable resizing from left edge.\n * bottom: '.resize-s',// Resize if pointer target matches selector\n * right : handleEl // Resize if pointer target is the given Element\n * },\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height are adjusted at a 1:1 ratio.\n * square: false,\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height maintain the aspect ratio they had when resizing started.\n * preserveAspectRatio: false,\n *\n * // a value of 'none' will limit the resize rect to a minimum of 0x0\n * // 'negate' will allow the rect to have negative width/height\n * // 'reposition' will keep the width/height positive by swapping\n * // the top and bottom edges and/or swapping the left and right edges\n * invert: 'none' || 'negate' || 'reposition'\n *\n * // limit multiple resizes.\n * // See the explanation in the {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * });\n *\n * var isResizeable = interact(element).resizable();\n * ```\n *\n * Gets or sets whether resize actions can be performed on the target\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on resize events (object makes the Interactable\n * resizable)\n * @return {boolean | Interactable} A boolean indicating if this can be the\n * target of resize elements, or this Interactable\n */\n Interactable.prototype.resizable = function (this: Interact.Interactable, options: Interact.ResizableOptions | boolean) {\n return resizable(this, options, scope)\n } as ResizableMethod\n\n actions[ActionName.Resize] = resize\n actions.names.push(ActionName.Resize)\n utils.arr.merge(actions.eventTypes, [\n 'resizestart',\n 'resizemove',\n 'resizeinertiastart',\n 'resizeresume',\n 'resizeend',\n ])\n actions.methodDict.resize = 'resizable'\n\n defaults.actions.resize = resize.defaults\n}\n\nconst resize = {\n install,\n defaults: {\n square: false,\n preserveAspectRatio: false,\n axis: 'xy',\n\n // use default margin\n margin: NaN,\n\n // object with props left, right, top, bottom which are\n // true/false values to resize when the pointer is over that edge,\n // CSS selectors to match the handles for each direction\n // or the Elements for each handle\n edges: null,\n\n // a value of 'none' will limit the resize rect to a minimum of 0x0\n // 'negate' will alow the rect to have negative width/height\n // 'reposition' will keep the width/height positive by swapping\n // the top and bottom edges and/or swapping the left and right edges\n invert: 'none',\n } as Interact.ResizableOptions,\n\n checker (\n _pointer: Interact.PointerType,\n _event: Interact.PointerEventType,\n interactable: Interact.Interactable,\n element: Element,\n interaction: Interaction,\n rect: Interact.Rect\n ) {\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: { [edge: string]: boolean } = { 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._latestPointer.eventTarget,\n element,\n rect,\n resizeOptions.margin || this.defaultMargin)\n }\n\n resizeEdges.left = resizeEdges.left && !resizeEdges.right\n resizeEdges.top = resizeEdges.top && !resizeEdges.bottom\n\n if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n return {\n name: 'resize',\n edges: resizeEdges,\n }\n }\n }\n else {\n const right = options.resize.axis !== 'y' && page.x > (rect.right - this.defaultMargin)\n const bottom = options.resize.axis !== 'x' && page.y > (rect.bottom - this.defaultMargin)\n\n if (right || bottom) {\n return {\n name: 'resize',\n axes: (right ? 'x' : '') + (bottom ? 'y' : ''),\n }\n }\n }\n }\n\n return null\n },\n\n cursors: null as unknown as ReturnType,\n\n getCursor (action: ActionProps) {\n const cursors = resize.cursors as { [key: string]: string }\n if (action.axis) {\n return 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 cursors[cursorKey]\n }\n\n return null\n },\n\n defaultMargin: null as unknown as number,\n}\n\nfunction resizable (interactable: Interact.Interactable, options: Interact.OrBoolean | boolean, scope: Scope) {\n if (utils.is.object(options)) {\n interactable.options.resize.enabled = options.enabled !== false\n interactable.setPerAction('resize', options)\n interactable.setOnEvents('resize', options)\n\n if (utils.is.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) {\n interactable.options.resize.axis = options.axis\n }\n else if (options.axis === null) {\n interactable.options.resize.axis = scope.defaults.actions.resize.axis\n }\n\n if (utils.is.bool(options.preserveAspectRatio)) {\n interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio\n }\n else if (utils.is.bool(options.square)) {\n interactable.options.resize.square = options.square\n }\n\n return interactable\n }\n if (utils.is.bool(options)) {\n interactable.options.resize.enabled = options\n\n return interactable\n }\n return interactable.options.resize\n}\n\nfunction checkResizeEdge (name: string, value: any, page: Interact.Point, element: Node, interactableElement: Element, rect: Interact.Rect, margin: number) {\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 initCursors (browser: typeof import ('@interactjs/utils/browser').default) {\n return (browser.isIe9 ? {\n x : 'e-resize',\n y : 's-resize',\n xy: 'se-resize',\n\n top : 'n-resize',\n left : 'w-resize',\n bottom : 's-resize',\n right : 'e-resize',\n topleft : 'se-resize',\n bottomright: 'se-resize',\n topright : 'ne-resize',\n bottomleft : 'ne-resize',\n } : {\n x : 'ew-resize',\n y : 'ns-resize',\n xy: 'nwse-resize',\n\n top : 'ns-resize',\n left : 'ew-resize',\n bottom : 'ns-resize',\n right : 'ew-resize',\n topleft : 'nwse-resize',\n bottomright: 'nwse-resize',\n topright : 'nesw-resize',\n bottomleft : 'nesw-resize',\n })\n}\n\nfunction start ({ iEvent, interaction }: Interact.SignalArg) {\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,\n right : 0,\n width : 0,\n top : 0,\n bottom: 0,\n height: 0,\n },\n };\n\n (iEvent as ResizeEvent).rect = interaction.resizeRects.inverted;\n (iEvent as ResizeEvent).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 resize\n","import { Scope } from '@interactjs/core/scope'\nimport drag, { DragEvent } from './drag'\nimport drop from './drop'\nimport gesture, { GestureEvent } from './gesture'\nimport resize, { ResizeEvent } from './resize'\n\nfunction install (scope: Scope) {\n gesture.install(scope)\n resize.install(scope)\n drag.install(scope)\n drop.install(scope)\n}\n\nexport {\n gesture,\n GestureEvent,\n resize,\n ResizeEvent,\n drag,\n DragEvent,\n drop,\n install,\n}\n","import * as domUtils from '@interactjs/utils/domUtils'\nimport * as is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport { getStringOptionResult } from '@interactjs/utils/rect'\nimport { getWindow } from '@interactjs/utils/window'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoScroll: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoScroll?: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n autoScroll?: Interact.AutoScrollOption\n }\n}\n\nfunction install (scope: Scope) {\n const {\n interactions,\n defaults,\n actions,\n } = scope\n\n scope.autoScroll = autoScroll\n\n interactions.signals.on('new', ({ 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\nconst autoScroll = {\n defaults: {\n enabled : false,\n margin : 60,\n\n // the item that is scrolled (Window or HTMLElement)\n container: null as Window | Element,\n\n // the scroll speed in pixels per second\n speed : 300,\n } as Interact.AutoScrollOption,\n\n interaction: null,\n i: null, // the handle returned by window.setInterval\n x: 0,\n y: 0, // Direction each pulse is to scroll in\n\n isScrolling: false,\n prevTime: 0,\n margin: 0,\n speed: 0,\n\n start (interaction: Interact.Interaction) {\n autoScroll.isScrolling = true\n raf.cancel(autoScroll.i)\n\n interaction.autoScroll = autoScroll\n autoScroll.interaction = interaction\n autoScroll.prevTime = new Date().getTime()\n autoScroll.i = raf.request(autoScroll.scroll)\n },\n\n stop () {\n autoScroll.isScrolling = false\n if (autoScroll.interaction) {\n autoScroll.interaction.autoScroll = null\n }\n raf.cancel(autoScroll.i)\n },\n\n // scroll the window by the values in scroll.x/y\n scroll () {\n const { interaction } = autoScroll\n const { 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 (interactable, actionName) {\n const options = interactable.options\n\n return options[actionName].autoScroll && options[actionName].autoScroll.enabled\n },\n onInteractionMove ({ interaction, pointer }) {\n if (!(interaction.interacting() &&\n autoScroll.check(interaction.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\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 { warnOnce } from '@interactjs/utils'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport * as is from '@interactjs/utils/is'\n\n// TODO: there seems to be a @babel/preset-typescript bug causing regular import\n// syntax to remain in js output\ntype Scope = import ('@interactjs/core/scope').Scope\ntype Actions = import ('@interactjs/core/scope').Actions\ntype Interaction = import ('@interactjs/core/Interaction').default\ntype Interactable = import ('@interactjs/core/Interactable').default\n\ntype IgnoreValue = string | Element | boolean\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n getAction: typeof getAction\n defaultActionChecker: (pointer: any, event: any, interaction: any, element: any) => any\n styleCursor: typeof styleCursor\n actionChecker: typeof actionChecker\n testIgnoreAllow: typeof testIgnoreAllow\n testAllow: typeof testAllow\n testIgnore: typeof testIgnore\n ignoreFrom: (...args: any) => boolean\n allowFrom: (...args: any) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n pointerIsDown: boolean\n }\n}\n\nfunction install (scope: Scope) {\n const {\n /** @lends Interactable */\n Interactable, // tslint:disable-line no-shadowed-variable\n actions,\n } = scope\n\n Interactable.prototype.getAction = getAction\n\n /**\n * ```js\n * interact(element, { ignoreFrom: document.getElementById('no-action') });\n * // or\n * interact(element).ignoreFrom('input, textarea, a');\n * ```\n * @deprecated\n * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n * of it's parents match the given CSS selector or Element, no\n * drag/resize/gesture is started.\n *\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to not ignore any elements\n * @return {string | Element | object} The current ignoreFrom value or this\n * Interactable\n */\n Interactable.prototype.ignoreFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('ignoreFrom', newValue)\n }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).')\n\n /**\n * @deprecated\n *\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * });\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to allow from any element\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */\n Interactable.prototype.allowFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('allowFrom', newValue)\n }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).')\n\n Interactable.prototype.testIgnore = testIgnore\n\n Interactable.prototype.testAllow = testAllow\n\n Interactable.prototype.testIgnoreAllow = testIgnoreAllow\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 = actionChecker\n\n /**\n * Returns or sets whether the the cursor should be changed depending on the\n * action that would be performed if the mouse were pressed and dragged.\n *\n * @param {boolean} [newValue]\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.styleCursor = styleCursor\n\n Interactable.prototype.defaultActionChecker = function (this: Interactable, pointer, event, interaction, element) {\n return defaultActionChecker(this, pointer, event, interaction, element, actions)\n }\n}\n\nfunction getAction (this: Interactable, pointer: Interact.PointerType, event: Interact.PointerEventType, interaction: Interaction, element: 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\nfunction defaultActionChecker (interactable: Interactable, pointer: Interact.PointerType, event: Interact.PointerEventType, interaction: Interaction, element: Element, actions: Actions) {\n const rect = interactable.getRect(element)\n const buttons = (event as MouseEvent).buttons || ({\n 0: 1,\n 1: 4,\n 3: 8,\n 4: 16,\n })[(event as MouseEvent).button as 0 | 1 | 3 | 4]\n let action = null\n\n for (const actionName of actions.names) {\n // check mouseButton setting if the pointer is down\n if (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & interactable.options[actionName].mouseButtons) === 0) {\n continue\n }\n\n action = (actions[actionName as keyof Actions] as any).checker(pointer, event, interactable, element, interaction, rect)\n\n if (action) {\n return action\n }\n }\n}\n\nfunction styleCursor (this: Interactable, newValue?: boolean) {\n if (is.bool(newValue)) {\n this.options.styleCursor = newValue\n\n return this\n }\n\n if (newValue === null) {\n delete this.options.styleCursor\n\n return this\n }\n\n return this.options.styleCursor\n}\n\nfunction actionChecker (this: Interactable, checker: any) {\n if (is.func(checker)) {\n this.options.actionChecker = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.options.actionChecker\n\n return this\n }\n\n return this.options.actionChecker\n}\n\nfunction testIgnoreAllow (this: Interactable, options: { ignoreFrom: IgnoreValue, allowFrom: IgnoreValue }, interactableElement: Element, eventTarget: Element) {\n return (!this.testIgnore(options.ignoreFrom, interactableElement, eventTarget) &&\n this.testAllow(options.allowFrom, interactableElement, eventTarget))\n}\n\nfunction testAllow (this: Interactable, allowFrom: IgnoreValue, interactableElement: Element, element: 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\nfunction testIgnore (this: Interactable, ignoreFrom: IgnoreValue, interactableElement: Element, element: 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\nexport default { install }\n","import * as utils from '@interactjs/utils'\nimport InteractableMethods from './InteractableMethods'\ntype Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n maxInteractions: (newValue: any) => any\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoStart: AutoStart\n maxInteractions: (...args: any) => any\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface BaseDefaults {\n actionChecker?\n styleCursor?\n }\n\n interface PerActionDefaults {\n manualStart?: boolean\n max?: number\n maxPerElement?: number\n allowFrom?: string | Element\n ignoreFrom?: string | Element\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons?: 0 | 1 | 2 | 4 | 16\n }\n}\n\nexport interface AutoStart {\n // Allow this many interactions to happen simultaneously\n maxInteractions: number\n withinInteractionLimit: typeof withinInteractionLimit\n cursorElement: Element\n signals: utils.Signals\n}\n\nfunction install (scope: Scope) {\n const {\n interact,\n interactions,\n defaults,\n } = scope\n\n interact.use(InteractableMethods)\n\n // set cursor style on mousedown\n interactions.signals.on('down', ({ interaction, pointer, event, eventTarget }) => {\n if (interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n })\n\n // set cursor style on mousemove\n interactions.signals.on('move', ({ interaction, pointer, event, eventTarget }) => {\n if (interaction.pointerType !== 'mouse' ||\n interaction.pointerIsDown ||\n interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n })\n\n interactions.signals.on('move', (arg) => {\n const { interaction } = arg\n\n if (!interaction.pointerIsDown ||\n interaction.interacting() ||\n !interaction.pointerWasMoved ||\n !interaction.prepared.name) {\n return\n }\n\n scope.autoStart.signals.fire('before-start', arg)\n\n const 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()\n }\n else {\n interaction.start(interaction.prepared, target, interaction.element)\n }\n }\n })\n\n interactions.signals.on('stop', ({ interaction }) => {\n const target = interaction.target\n\n if (target && target.options.styleCursor) {\n setCursor(interaction.element, '', scope)\n }\n })\n\n defaults.base.actionChecker = null\n defaults.base.styleCursor = true\n\n utils.extend(defaults.perAction, {\n manualStart: false,\n max: Infinity,\n maxPerElement: 1,\n allowFrom: null,\n ignoreFrom: null,\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons: 1,\n });\n\n /**\n * Returns or sets the maximum number of concurrent interactions allowed. By\n * default only 1 interaction is allowed at a time (for backwards\n * compatibility). To allow multiple interactions on the same Interactables and\n * elements, you need to enable it in the draggable, resizable and gesturable\n * `'max'` and `'maxPerElement'` options.\n *\n * @alias module:interact.maxInteractions\n *\n * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n */\n (interact as any /* FIXME */).maxInteractions = (newValue) => maxInteractions(newValue, scope)\n\n scope.autoStart = {\n // Allow this many interactions to happen simultaneously\n maxInteractions: Infinity,\n withinInteractionLimit,\n cursorElement: null,\n signals: new utils.Signals(),\n }\n}\n\n// Check if the current 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 { action: null, target: null, element: null }\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 { action: null, target: null, element: null }\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 })\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 false }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name\n\n if (!interaction.interacting()) { continue }\n\n activeInteractions++\n\n if (activeInteractions >= autoStartMax) {\n return false\n }\n\n if (interaction.target !== interactable) { continue }\n\n targetCount += otherAction === action.name ? 1 : 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 { ActionName } from '@interactjs/core/scope'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport * as is from '@interactjs/utils/is'\nimport autoStart from './base'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\nfunction install (scope: Scope) {\n scope.autoStart.signals.on('before-start', ({ interaction, eventTarget, dx, dy }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n // check if a drag is in the correct axis\n const absX = Math.abs(dx)\n const absY = Math.abs(dy)\n const targetOptions = interaction.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] as 'x' | 'y' // always lock to one axis even if currentAxis === 'xy'\n : targetOptions.lockAxis\n\n // if the movement isn't in the startAxis of the interactable\n if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n // cancel the prepared action\n interaction.prepared.name = null\n\n // then try to get a drag from another ineractable\n let element = eventTarget\n\n const getDraggable = function (interactable) {\n if (interactable === interaction.target) { return }\n\n const options = interaction.target.options.drag\n\n if (!options.manualStart &&\n interactable.testIgnoreAllow(options, element, eventTarget)) {\n const action = interactable.getAction(\n interaction.downPointer, interaction.downEvent, interaction, element)\n\n if (action &&\n action.name === 'drag' &&\n checkStartAxis(currentAxis, interactable) &&\n autoStart.validateAction(action, interactable, element, eventTarget, scope)) {\n return interactable\n }\n }\n }\n\n // check all interactables\n while (is.element(element)) {\n const interactable = scope.interactables.forEachMatch(element, getDraggable)\n\n if (interactable) {\n interaction.prepared.name = ActionName.Drag\n interaction.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","type Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n hold?: number\n delay?: number\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoStartHoldTimer?: any\n }\n}\n\nfunction install (scope: 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', (interaction) => {\n interaction.autoStartHoldTimer = null\n })\n\n autoStart.signals.on('prepared', ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.autoStartHoldTimer = setTimeout(() => {\n interaction.start(interaction.prepared, interaction.target, interaction.element)\n }, hold)\n }\n })\n\n interactions.signals.on('move', ({ interaction, duplicate }) => {\n if (interaction.pointerWasMoved && !duplicate) {\n clearTimeout(interaction.autoStartHoldTimer)\n }\n })\n\n // prevent regular down->move autoStart\n autoStart.signals.on('before-start', ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.prepared.name = null\n }\n })\n}\n\nfunction getHoldDuration (interaction) {\n const actionName = interaction.prepared && interaction.prepared.name\n\n if (!actionName) { return null }\n\n const options = interaction.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 dragAxis from './dragAxis'\nimport hold from './hold'\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 { matchesSelector, nodeContains } from '@interactjs/utils/domUtils'\nimport events from '@interactjs/utils/events'\nimport * as is from '@interactjs/utils/is'\nimport { getWindow } from '@interactjs/utils/window'\n\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 /**\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 if (interaction.element &&\n (interaction.element === event.target ||\n nodeContains(interaction.element, event.target))) {\n interaction.target.checkAndPreventDefault(event)\n return\n }\n }\n }\n}\n\nexport type Install = typeof install\n\nexport default { install }\n","import { Scope } from '@interactjs/core/scope'\nimport extend from '@interactjs/utils/extend'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n modifiers?: any\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n modifiers?: any\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n modifiers?: any[]\n }\n}\n\nfunction install (scope: Scope) {\n const {\n interactions,\n } = scope\n\n scope.defaults.perAction.modifiers = []\n scope.modifiers = {}\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.modifiers = {\n startOffset: { left: 0, right: 0, top: 0, bottom: 0 },\n offsets : {},\n states : null,\n result : null,\n }\n })\n\n interactions.signals.on('before-action-start', (arg) => {\n start(arg as any, arg.interaction.coords.start.page, scope.modifiers)\n })\n\n interactions.signals.on('action-resume', (arg) => {\n beforeMove(arg as any)\n start(arg as any, 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 as any)\n interactions.signals.on('after-action-move', restoreCoords as any)\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 (\n { interaction, phase }: Interact.SignalArg,\n pageCoords: Interact.Point,\n registeredModifiers,\n) {\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)) as Interact.Rect & Interact.Rect2\n\n if (!('width' in rect)) { rect.width = rect.right - rect.left }\n if (!('height' in rect)) { rect.height = rect.bottom - rect.top }\n\n const startOffset = getRectOffset(rect, pageCoords)\n\n interaction.modifiers.startOffset = startOffset\n interaction.modifiers.startDelta = { x: 0, y: 0 }\n\n const arg: Partial = {\n interaction,\n interactable,\n element,\n pageCoords,\n phase,\n rect,\n startOffset,\n states,\n preEnd: false,\n requireEndOnly: false,\n }\n\n interaction.modifiers.states = states\n interaction.modifiers.result = null\n startAll(arg)\n\n arg.pageCoords = extend({}, interaction.coords.start.page)\n\n const result = interaction.modifiers.result = setAll(arg)\n\n return result\n}\n\nfunction setAll (arg: Partial) {\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, name } = modifierList[index]\n\n if (options && options.enabled === false) { continue }\n\n const state = {\n options,\n methods,\n index,\n name,\n }\n\n states.push(state)\n }\n\n return states\n}\n\nfunction beforeMove ({ interaction, phase, preEnd, skipModifiers }): void | false {\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): void | false {\n const { interaction, event, noPreEnd } = arg\n const states = interaction.modifiers.states\n\n if (noPreEnd || !states || !states.length) {\n return\n }\n\n let didPreEnd = false\n\n for (const state of states) {\n arg.state = state\n const { options, methods } = state\n\n const endResult = methods.beforeEnd && methods.beforeEnd(arg)\n\n if (endResult === false) {\n 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 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\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?: boolean, requireEndOnly?: boolean, phase?: string) {\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?: string) {\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, name }\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 { EventPhase } from '@interactjs/core/InteractEvent'\nimport modifiers from '@interactjs/modifiers/base'\nimport * as utils from '@interactjs/utils'\nimport raf from '@interactjs/utils/raf'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/core/InteractEvent' {\n // eslint-disable-next-line no-shadow\n enum EventPhase {\n Resume = 'resume',\n InertiaStart = 'inertiastart',\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n inertia?: any\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n inertia?: {\n enabled?: boolean,\n resistance?: number, // the lambda in exponential decay\n minSpeed?: number, // target speed must be above this for inertia to start\n endSpeed?: number, // the speed at which inertia is slow enough to stop\n allowResume?: true, // allow resuming an action in inertia phase\n smoothEndDuration?: number, // animate to snap/restrict endOnly if there's no inertia\n } | boolean // FIXME\n }\n}\n\n(EventPhase as any).Resume = 'resume';\n(EventPhase as any).InertiaStart = 'inertiastart'\n\nfunction install (scope: Scope) {\n const {\n interactions,\n defaults,\n } = scope\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.inertia = {\n active : false,\n smoothEnd : false,\n allowResume: false,\n\n startEvent: null,\n upCoords : {},\n\n xe: 0,\n ye: 0,\n sx: 0,\n sy: 0,\n\n t0: 0,\n vx0: 0,\n vys: 0,\n duration: 0,\n\n lambda_v0: 0,\n one_ve_v0: 0,\n i : null,\n }\n })\n\n // FIXME proper signal typing\n interactions.signals.on('before-action-end', (arg) => release(arg as any, scope))\n interactions.signals.on('down', (arg) => resume(arg as any, scope))\n interactions.signals.on('stop', (arg) => stop(arg as any))\n\n defaults.perAction.inertia = {\n enabled : false,\n resistance : 10, // the lambda in exponential decay\n minSpeed : 100, // target speed must be above this for inertia to start\n endSpeed : 10, // the speed at which inertia is slow enough to stop\n allowResume : true, // allow resuming an action in inertia phase\n smoothEndDuration: 300, // animate to snap/restrict endOnly if there's no inertia\n }\n}\n\nfunction resume ({ interaction, event, pointer, eventTarget }: Interact.SignalArg, scope: 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 // 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, EventPhase.Resume, interaction.element)\n\n interaction._fireEvent(resumeEvent)\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur)\n break\n }\n\n element = utils.dom.parentNode(element)\n }\n }\n}\n\nfunction release ({ interaction, event, noPreEnd }: Interact.SignalArg, scope: Scope) {\n const state = interaction.inertia\n\n if (!interaction.interacting() ||\n (interaction.simulation && interaction.simulation.active) ||\n noPreEnd) {\n return null\n }\n\n const options = getOptions(interaction)\n\n const now = 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: ReturnType\n\n // check if inertia should be started\n const inertiaPossible = (options && options.enabled &&\n interaction.prepared.name !== 'gesture' &&\n event !== state.startEvent)\n\n const inertia = (inertiaPossible &&\n (now - interaction.coords.cur.timeStamp) < 50 &&\n pointerSpeed > options.minSpeed &&\n pointerSpeed > options.endSpeed)\n\n const modifierArg = {\n interaction,\n pageCoords: utils.extend({}, interaction.coords.cur.page),\n states: inertiaPossible && interaction.modifiers.states.map(\n (modifierStatus) => utils.extend({}, modifierStatus)\n ),\n preEnd: true,\n requireEndOnly: true,\n }\n\n // smoothEnd\n if (inertiaPossible && !inertia) {\n modifierResult = modifiers.setAll(modifierArg)\n\n if (modifierResult.changed) {\n smoothEnd = true\n }\n }\n\n if (!(inertia || smoothEnd)) { return null }\n\n utils.pointer.copyCoords(state.upCoords, interaction.coords.cur)\n\n interaction.pointers[0].pointer = state.startEvent = new scope.InteractEvent(\n interaction,\n event,\n // FIXME add proper typing Action.name\n interaction.prepared.name as T,\n EventPhase.InertiaStart,\n interaction.element,\n )\n\n state.t0 = now\n\n state.active = true\n state.allowResume = options.allowResume\n interaction.simulation = state\n\n interaction.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 }: Interact.SignalArg) {\n const state = interaction.inertia\n if (state.active) {\n raf.cancel(state.i)\n state.active = false\n interaction.simulation = null\n }\n}\n\nfunction calcInertia (interaction: Interact.Interaction, state) {\n const options = getOptions(interaction)\n const lambda = options.resistance\n const inertiaDur = -Math.log(options.endSpeed / state.v0) / lambda\n\n state.x0 = interaction.prevEvent.page.x\n state.y0 = interaction.prevEvent.page.y\n state.t0 = state.startEvent.timeStamp / 1000\n state.sx = state.sy = 0\n\n state.modifiedXe = state.xe = (state.vx0 - inertiaDur) / lambda\n state.modifiedYe = state.ye = (state.vy0 - inertiaDur) / lambda\n state.te = inertiaDur\n\n state.lambda_v0 = lambda / state.v0\n state.one_ve_v0 = 1 - options.endSpeed / state.v0\n}\n\nfunction inertiaTick (interaction: Interact.Interaction) {\n updateInertiaCoords(interaction)\n utils.pointer.setCoordDeltas(interaction.coords.delta, interaction.coords.prev, interaction.coords.cur)\n utils.pointer.setCoordVelocity(interaction.coords.velocity, interaction.coords.delta)\n\n const state = interaction.inertia\n const options = getOptions(interaction)\n const lambda = options.resistance\n const t = new Date().getTime() / 1000 - state.t0\n\n if (t < state.te) {\n const progress = 1 - (Math.exp(-lambda * t) - state.lambda_v0) / state.one_ve_v0\n\n if (state.modifiedXe === state.xe && state.modifiedYe === state.ye) {\n state.sx = state.xe * progress\n state.sy = state.ye * progress\n }\n else {\n const quadPoint = utils.getQuadraticCurvePoint(\n 0, 0,\n state.xe, state.ye,\n state.modifiedXe, state.modifiedYe,\n progress)\n\n state.sx = quadPoint.x\n state.sy = quadPoint.y\n }\n\n interaction.move()\n\n state.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: Interact.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: Interact.Interaction) {\n const state = interaction.inertia\n\n // return if inertia isn't running\n if (!state.active) { return }\n\n const pageUp = state.upCoords.page\n const clientUp = state.upCoords.client\n\n utils.pointer.setCoords(interaction.coords.cur, [ {\n pageX : pageUp.x + state.sx,\n pageY : pageUp.y + state.sy,\n clientX: clientUp.x + state.sx,\n clientY: clientUp.y + state.sy,\n } ])\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","/** @module interact */\n\nimport { Options } from '@interactjs/core/defaultOptions'\nimport Interactable from '@interactjs/core/Interactable'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport browser from '@interactjs/utils/browser'\nimport events from '@interactjs/utils/events'\n\nexport interface Plugin {\n install (scope: Scope): void\n [key: string]: any\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n interact: InteractStatic\n _plugins: Plugin[]\n }\n}\n\nexport interface InteractStatic {\n (target: Interact.Target, options?: Options): Interactable\n on: typeof on\n pointerMoveTolerance: typeof pointerMoveTolerance\n stop: typeof stop\n supportsPointerEvent: typeof supportsPointerEvent\n supportsTouch: typeof supportsTouch\n debug: typeof debug\n off: typeof off\n isSet: typeof isSet\n use: typeof use\n getPointerAverage: typeof utils.pointer.pointerAverage\n getTouchBBox: typeof utils.pointer.touchBBox\n getTouchDistance: typeof utils.pointer.touchDistance\n getTouchAngle: typeof utils.pointer.touchAngle\n getElementRect: typeof utils.dom.getElementRect\n getElementClientRect: typeof utils.dom.getElementClientRect\n matchesSelector: typeof utils.dom.matchesSelector\n closest: typeof utils.dom.closest\n addDocument: typeof scope.addDocument\n removeDocument: typeof scope.removeDocument\n version: string\n}\n\nconst globalEvents: any = {}\nconst scope = new Scope()\n\n/**\n * ```js\n * interact('#draggable').draggable(true)\n *\n * var rectables = interact('rect')\n * rectables\n * .gesturable(true)\n * .on('gesturemove', function (event) {\n * // ...\n * })\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @global\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\nexport const interact: InteractStatic = function interact (target: Interact.Target, options?: any) {\n let interactable = scope.interactables.get(target, options)\n\n if (!interactable) {\n interactable = scope.interactables.new(target, options)\n interactable.events.global = globalEvents\n }\n\n return interactable\n} as InteractStatic\n\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 = use\nfunction use (plugin: Plugin) {\n if (scope._plugins.indexOf(plugin) !== -1) {\n return interact\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 = isSet\nfunction isSet (element: Element, options?: any) {\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 = on\nfunction on (type: string | Interact.EventTypes, listener: Interact.ListenersArg, options?) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (utils.is.array(type)) {\n for (const eventType of (type as any[])) {\n interact.on(eventType, listener, options)\n }\n\n return interact\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.on(prop, (type as Interact.EventTypes)[prop], listener)\n }\n\n return interact\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (utils.arr.contains(scope.actions.eventTypes, type)) {\n // if this type of event was never bound\n if (!globalEvents[type]) {\n globalEvents[type] = [listener]\n }\n else {\n globalEvents[type].push(listener)\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n events.add(scope.document, type, listener as Interact.Listener, { options })\n }\n\n return interact\n}\n\n/**\n * Removes a global InteractEvent listener or DOM event from `document`\n *\n * @alias module:interact.off\n *\n * @param {string | array | object} type The types of events that were listened\n * for\n * @param {function} listener The listener function to be removed\n * @param {object | boolean} options [options] object or useCapture flag for\n * removeEventListener\n * @return {object} interact\n */\ninteract.off = off\nfunction off (type, listener, options) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (utils.is.array(type)) {\n for (const eventType of type) {\n interact.off(eventType, listener, options)\n }\n\n return interact\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.off(prop, type[prop], listener)\n }\n\n return interact\n }\n\n if (!utils.arr.contains(scope.actions.eventTypes, type)) {\n events.remove(scope.document, type, listener, options)\n }\n else {\n let index\n\n if (type in globalEvents &&\n (index = globalEvents[type].indexOf(listener)) !== -1) {\n globalEvents[type].splice(index, 1)\n }\n }\n\n return interact\n}\n\n/**\n * Returns an object which exposes internal data\n * @alias module:interact.debug\n *\n * @return {object} An object with properties that outline the current state\n * and expose internal functions and variables\n */\ninteract.debug = debug\nfunction debug () {\n return scope\n}\n\n// expose the functions used to calculate multi-touch properties\ninteract.getPointerAverage = utils.pointer.pointerAverage\ninteract.getTouchBBox = utils.pointer.touchBBox\ninteract.getTouchDistance = utils.pointer.touchDistance\ninteract.getTouchAngle = utils.pointer.touchAngle\n\ninteract.getElementRect = utils.dom.getElementRect\ninteract.getElementClientRect = utils.dom.getElementClientRect\ninteract.matchesSelector = utils.dom.matchesSelector\ninteract.closest = utils.dom.closest\n\n/**\n * @alias module:interact.supportsTouch\n *\n * @return {boolean} Whether or not the browser supports touch input\n */\ninteract.supportsTouch = supportsTouch\nfunction supportsTouch () {\n return browser.supportsTouch\n}\n\n/**\n * @alias module:interact.supportsPointerEvent\n *\n * @return {boolean} Whether or not the browser supports PointerEvents\n */\ninteract.supportsPointerEvent = supportsPointerEvent\nfunction supportsPointerEvent () {\n return browser.supportsPointerEvent\n}\n\n/**\n * Cancels all interactions (end events are not fired)\n *\n * @alias module:interact.stop\n *\n * @return {object} interact\n */\ninteract.stop = stop\nfunction stop () {\n for (const interaction of scope.interactions.list) {\n interaction.stop()\n }\n\n return interact\n}\n\n/**\n * Returns or sets the distance the pointer must be moved before an action\n * sequence occurs. This also affects tolerance for tap events.\n *\n * @alias module:interact.pointerMoveTolerance\n *\n * @param {number} [newValue] The movement from the start position must be greater than this value\n * @return {interact | number}\n */\ninteract.pointerMoveTolerance = pointerMoveTolerance\nfunction pointerMoveTolerance (newValue) {\n if (utils.is.number(newValue)) {\n scope.interactions.pointerMoveTolerance = newValue\n\n return interact\n }\n\n return scope.interactions.pointerMoveTolerance\n}\n\nscope.interactables.signals.on('unset', ({ interactable }) => {\n scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1)\n\n // Stop related interactions when an Interactable is unset\n for (const interaction of scope.interactions.list) {\n if (interaction.target === interactable && interaction.interacting() && interaction._ending) {\n interaction.stop()\n }\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 = {} as { [key: string]: number }\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?: Interact.Point) {\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 Interaction from '@interactjs/core/Interaction'\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 }: { interaction: Interaction, state: any }) {\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 coords: Interact.Point,\n interaction: Interaction,\n state: any\n}) {\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 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 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 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\nconst snapEdges = {\n start,\n set,\n defaults: extend(clone(snapSize.defaults), {\n offset: { x: 0, y: 0 },\n }),\n}\n\nexport default snapEdges\n","import Eventable from '@interactjs/core/Eventable'\nimport Interaction from '@interactjs/core/Interaction'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport PointerEvent from './PointerEvent'\n\ntype EventTargetList = Array<{\n eventable: Eventable,\n element: Window | Document | Element,\n props: { [key: string]: any },\n}>\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n pointerEvents: typeof pointerEvents\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n prevTap?: PointerEvent\n tapTime?: number\n }\n}\n\ndeclare module '@interactjs/core/PointerInfo' {\n interface PointerInfo {\n hold: {\n duration: number\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n pointerEvents: Interact.Options\n }\n}\n\nconst signals = new utils.Signals()\nconst simpleSignals = [ 'down', 'up', 'cancel' ]\nconst simpleEvents = [ 'down', 'up', 'cancel' ]\n\nconst 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 interaction: Interaction,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n eventTarget: EventTarget,\n targets?: EventTargetList,\n pointerEvent?: PointerEvent,\n type: T\n}) {\n const {\n interaction, pointer, event, eventTarget,\n type = (arg as any).pointerEvent.type,\n targets = collectEventTargets(arg),\n } = arg\n\n const {\n pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction),\n } = arg\n\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n targets,\n type,\n pointerEvent,\n }\n\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n\n for (const prop in target.props || {}) {\n (pointerEvent as any)[prop] = target.props[prop]\n }\n\n const origin = utils.getOriginXY(target.eventable, target.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,\n pointer,\n event,\n 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 interaction: Interaction,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n eventTarget: EventTarget,\n type: T\n}) {\n const pointerIndex = interaction.getPointerIndex(pointer)\n const pointerInfo = interaction.pointers[pointerIndex]\n\n // do not fire a tap event if the pointer was moved before being lifted\n if (type === 'tap' && (interaction.pointerWasMoved ||\n // or if the pointerup target is different to the pointerdown target\n !(pointerInfo && pointerInfo.downTarget === eventTarget))) {\n return []\n }\n\n const path = utils.dom.getPath(eventTarget)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n path,\n targets: [] as EventTargetList,\n 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: Scope) {\n const {\n interactions,\n } = scope\n\n scope.pointerEvents = pointerEvents\n scope.defaults.actions.pointerEvents = pointerEvents.defaults\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.prevTap = null // the most recent tap event on this interaction\n interaction.tapTime = 0 // time of the most recent tap event\n })\n\n interactions.signals.on('update-pointer', ({ down, pointerInfo }) => {\n if (!down && pointerInfo.hold) {\n return\n }\n\n pointerInfo.hold = { duration: Infinity, timeout: null }\n })\n\n interactions.signals.on('move', ({ interaction, pointer, event, eventTarget, duplicateMove }) => {\n const pointerIndex = interaction.getPointerIndex(pointer)\n\n if (!duplicateMove && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {\n if (interaction.pointerIsDown) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout)\n }\n\n fire({\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'move',\n })\n }\n })\n\n interactions.signals.on('down', ({ interaction, pointer, event, eventTarget, pointerIndex }) => {\n const timer = interaction.pointers[pointerIndex].hold\n const path = utils.dom.getPath(eventTarget)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'hold',\n targets: [] as EventTargetList,\n path,\n 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(() => {\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, ({ 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: string) {\n return function ({ interaction, pointer, event, eventTarget }: any) {\n fire({ interaction, eventTarget, pointer, event, type })\n }\n}\n\nexport default pointerEvents\n","declare module '@interactjs/core/Interaction' {\n interface Interaction {\n holdIntervalHandle?: any\n }\n}\n\nfunction 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(() => {\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 { Scope } from '@interactjs/core/scope'\nimport { merge } from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\ntype Interactable = import ('@interactjs/core/Interactable').default\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n pointerEvents: typeof pointerEventsMethod\n __backCompatOption: (optionName: string, newValue: any) => any\n }\n}\n\nfunction install (scope: Scope) {\n const {\n pointerEvents,\n actions,\n Interactable,\n interactables,\n } = scope\n\n pointerEvents.signals.on('collect-targets', ({ targets, element, type, eventTarget }: any) => {\n scope.interactables.forEachMatch(element, (interactable: Interactable) => {\n const eventable = interactable.events\n const options = eventable.options\n\n if (\n eventable.types[type] &&\n eventable.types[type].length &&\n is.element(element) &&\n interactable.testIgnoreAllow(options, element, eventTarget)) {\n targets.push({\n element,\n eventable,\n props: { interactable },\n })\n }\n })\n })\n\n interactables.signals.on('new', ({ interactable }) => {\n interactable.events.getRect = function (element: Element) {\n return interactable.getRect(element)\n }\n })\n\n interactables.signals.on('set', ({ interactable, options }) => {\n extend(interactable.events.options, pointerEvents.defaults)\n extend(interactable.events.options, options.pointerEvents || {})\n })\n\n merge(actions.eventTypes, pointerEvents.types)\n\n Interactable.prototype.pointerEvents = pointerEventsMethod\n\n const __backCompatOption = Interactable.prototype._backCompatOption\n\n Interactable.prototype._backCompatOption = function (optionName, newValue) {\n const ret = __backCompatOption.call(this, optionName, newValue)\n\n if (ret === this) {\n this.events.options[optionName] = newValue\n }\n\n return ret\n }\n}\n\nfunction pointerEventsMethod (this: Interactable, options: any) {\n extend(this.events.options, options)\n\n return this\n}\n\nexport default {\n 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 { pointerEvents, holdRepeat, interactableTargets, install }\n","import Interactable from '@interactjs/core/Interactable'\nimport { ActionProps, Interaction } from '@interactjs/core/Interaction'\nimport { newInteraction } from '@interactjs/core/interactions'\nimport { Scope } from '@interactjs/core/scope'\nimport { arr, extend, is, pointer as pointerUtils, rect as rectUtils, win } from '@interactjs/utils'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n reflow: (action: ActionProps) => ReturnType\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n _reflowResolve: () => void\n }\n}\n\nexport function install (scope: Scope) {\n const {\n actions,\n interactions,\n /** @lends Interactable */\n // eslint-disable-next-line no-shadow\n Interactable,\n } = scope\n\n // add action reflow event types\n for (const actionName of actions.names) {\n actions.eventTypes.push(`${actionName}reflow`)\n }\n\n // remove completed reflow interactions\n interactions.signals.on('stop', ({ interaction }) => {\n if (interaction.pointerType === '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: Interactable, action: ActionProps, scope: Scope) {\n const elements = is.string(interactable.target)\n ? arr.from(interactable._context.querySelectorAll(interactable.target))\n : [interactable.target]\n\n // tslint:disable-next-line variable-name\n const Promise = (win.window as any).Promise\n const promises: Array> | null = Promise ? [] : null\n\n for (const element of elements) {\n const rect = interactable.getRect(element)\n\n if (!rect) { break }\n\n const runningInteraction = arr.find(\n scope.interactions.list,\n (interaction: Interaction) => {\n return interaction.interacting() &&\n interaction.target === interactable &&\n interaction.element === element &&\n interaction.prepared.name === action.name\n })\n let reflowPromise: Promise\n\n if (runningInteraction) {\n runningInteraction.move()\n\n reflowPromise = runningInteraction._reflowPromise || new Promise((resolve: any) => {\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: Scope, interactable: Interactable, element: Element, action: ActionProps, event: any) {\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 as unknown as any).Promise\n ? new (win.window as unknown as any).Promise((resolve: any) => {\n interaction._reflowResolve = resolve\n })\n : null\n\n interaction._reflowPromise = reflowPromise\n interaction.start(action, interactable, element)\n\n if (interaction._interacting) {\n interaction.move(signalArg)\n interaction.end(event)\n }\n else {\n interaction.stop()\n }\n\n interaction.removePointer(event, event)\n interaction.pointerIsDown = false\n\n return reflowPromise\n}\n\nexport default { install }\n","import * as actions from '@interactjs/actions'\nimport autoScroll from '@interactjs/auto-scroll'\nimport * as autoStart from '@interactjs/auto-start'\nimport interactablePreventDefault from '@interactjs/core/interactablePreventDefault'\nimport inertia from '@interactjs/inertia'\nimport * as modifiers from '@interactjs/modifiers'\nimport modifiersBase from '@interactjs/modifiers/base'\nimport * as pointerEvents from '@interactjs/pointer-events'\nimport reflow from '@interactjs/reflow'\nimport interact, { scope } from './interact'\n\nexport function init (window: Window): typeof interact {\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\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 {\n interact,\n actions,\n autoScroll,\n interactablePreventDefault,\n inertia,\n modifiersBase as modifiers,\n pointerEvents,\n reflow,\n}\n","function createGrid (grid: (Interact.Rect | Interact.Point) & { range?: number, limits: Interact.Rect, offset: Interact.Point }) {\n const coordFields = [\n ['x', 'y'],\n ['left', 'top'],\n ['right', 'bottom'],\n ['width', 'height'],\n ].filter(([xField, yField]) => xField in grid || yField in grid)\n\n return function (x, y) {\n const {\n range,\n limits = {\n left : -Infinity,\n right : Infinity,\n top : -Infinity,\n bottom: Infinity,\n },\n offset = { x: 0, y: 0 },\n } = grid\n\n const result = { range }\n\n for (const [xField, yField] of coordFields) {\n const gridx = Math.round((x - offset.x) / grid[xField])\n const gridy = Math.round((y - offset.y) / grid[yField])\n\n result[xField] = Math.max(limits.left, Math.min(limits.right, gridx * grid[xField] + offset.x))\n result[yField] = Math.max(limits.top, Math.min(limits.bottom, gridy * grid[yField] + offset.y))\n }\n\n return result\n }\n}\n\nexport default createGrid\n","import interact, { init as initInteract } from '@interactjs/interact'\nimport * as modifiers from '@interactjs/modifiers'\nimport '@interactjs/types'\nimport extend from '@interactjs/utils/extend'\nimport * as snappers from '@interactjs/utils/snappers'\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n modifiers?: any\n snappers?: typeof snappers\n createSnapGrid?: typeof snappers.grid\n }\n}\n\nif (typeof window === 'object' && !!window) {\n init(window)\n}\n\nexport function init (win: Window) {\n initInteract(win)\n\n return interact.use({\n install (scope) {\n interact.modifiers = extend(scope.modifiers, modifiers)\n interact.snappers = snappers\n interact.createSnapGrid = interact.snappers.grid\n },\n })\n}\n\nexport default interact\ninteract['default'] = interact // tslint:disable-line no-string-literal\ninteract['init'] = init // tslint:disable-line no-string-literal\n\nif (typeof module === 'object' && !!module) {\n module.exports = interact\n}\n","export default (thing) => !!(thing && thing.Window) && (thing instanceof thing.Window)\n","// tslint:disable variable-name\n\nimport isWindow from './isWindow'\nimport win from './window'\n\nexport const window = (thing: any): thing is Window =>\n thing === win.window || isWindow(thing)\n\nexport const docFrag = (thing: any): thing is DocumentFragment =>\n object(thing) && thing.nodeType === 11\n\nexport const object = (thing: any): thing is { [index: string]: any } =>\n !!thing && (typeof thing === 'object')\n\nexport const func = (thing: any): thing is (...args: any) => any =>\n typeof thing === 'function'\n\nexport const number = (thing: any): thing is number =>\n typeof thing === 'number'\n\nexport const bool = (thing: any): thing is boolean =>\n typeof thing === 'boolean'\n\nexport const string = (thing: any): thing is string =>\n typeof thing === 'string'\n\nexport const element = (thing: any): thing is Element => {\n if (!thing || (typeof thing !== 'object')) { return false }\n\n const _window = win.getWindow(thing) || win.window\n\n return (/object|function/.test(typeof _window.Element)\n ? thing instanceof _window.Element // DOM2\n : thing.nodeType === 1 && typeof thing.nodeName === 'string')\n}\n\nexport const plainObject: typeof object = (thing: any): thing is { [index: string]: any } =>\n object(thing) &&\n !!thing.constructor &&\n /function Object\\b/.test(thing.constructor.toString())\n\nexport const array = (thing: any): thing is any[] =>\n (object(thing) &&\n (typeof thing.length !== 'undefined') &&\n func(thing.splice))\n","// tslint:disable no-empty-interface\n\nexport interface Defaults {\n base: BaseDefaults\n perAction: PerActionDefaults\n actions: ActionDefaults\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ActionDefaults {\n}\n\nexport interface BaseDefaults {\n preventDefault?: 'auto' | 'never' | string\n deltaSource?: 'page' | 'client'\n context?: Window | Document | Element\n [key: string]: any\n}\n\nexport interface PerActionDefaults {\n enabled?: boolean\n origin?: Interact.Point | string | Element\n listeners?: Interact.Listeners\n}\n\nexport type Options = Partial & Partial & {\n [P in keyof ActionDefaults]?: Partial\n}\n\n// export interface Options extends BaseDefaults, PerActionDefaults {}\n\nexport interface OptionsArg extends BaseDefaults, Interact.OrBoolean {}\n\nexport const defaults: Defaults = {\n base: {\n preventDefault: 'auto',\n deltaSource: 'page',\n },\n\n perAction: {\n enabled: false,\n origin: { x: 0, y: 0 },\n },\n\n actions: {} as ActionDefaults,\n}\n\nexport default defaults\n","export default (x, y) => Math.sqrt(x * x + y * y)\n","import extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport hypot from '@interactjs/utils/hypot'\nimport defaults from './defaultOptions'\nimport Interactable from './Interactable'\nimport Interaction from './Interaction'\nimport { ActionName } from './scope'\n\nexport enum EventPhase {\n Start = 'start',\n Move = 'move',\n End = 'end',\n _NONE = '',\n}\n\nexport class InteractEvent<\n T extends ActionName = any,\n P extends EventPhase = EventPhase._NONE,\n> {\n type: string\n target: Element\n relatedTarget: Element | null\n currentTarget: Element\n screenX?: number\n screenY?: number\n button: number\n buttons: number\n ctrlKey: boolean\n shiftKey: boolean\n altKey: boolean\n metaKey: boolean\n // added by interact.js\n interactable: Interactable\n interaction: Interaction\n page: Interact.Point\n client: Interact.Point\n delta: Interact.Point\n x0: number\n y0: number\n t0: number\n dt: number\n duration: number\n clientX0: number\n clientY0: number\n velocity: Interact.Point\n speed: number\n swipe: ReturnType['getSwipe']>\n timeStamp: any\n // drag\n dragEnter?: Element\n dragLeave?: Element\n // resize\n axes?: Interact.Point\n preEnd?: boolean\n immediatePropagationStopped = false\n propagationStopped = false\n\n /** */\n constructor (\n interaction: Interaction,\n event: Interact.PointerEventType,\n actionName: T,\n phase: P,\n element: Element,\n related?: Element,\n preEnd?: boolean,\n type?: string,\n ) {\n element = element || interaction.element\n\n const target = interaction.target\n // FIXME: add deltaSource to defaults\n const deltaSource = (((target && target.options) || defaults) as any).deltaSource as 'page' | 'client'\n const origin = getOriginXY(target, element, actionName)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const prevEvent = starting ? this : interaction.prevEvent\n const coords = starting\n ? interaction.coords.start\n : ending\n ? { page: prevEvent.page, client: prevEvent.client, timeStamp: interaction.coords.cur.timeStamp }\n : interaction.coords.cur\n\n this.page = extend({}, coords.page)\n this.client = extend({}, coords.client)\n this.timeStamp = coords.timeStamp\n\n if (!ending) {\n this.page.x -= origin.x\n this.page.y -= origin.y\n\n this.client.x -= origin.x\n this.client.y -= origin.y\n }\n\n this.ctrlKey = event.ctrlKey\n this.altKey = event.altKey\n this.shiftKey = event.shiftKey\n this.metaKey = event.metaKey\n this.button = (event as MouseEvent).button\n this.buttons = (event as MouseEvent).buttons\n this.target = element\n this.currentTarget = element\n this.relatedTarget = related || null\n this.preEnd = preEnd\n this.type = type || (actionName + (phase || ''))\n this.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 set pageX (value) { this.page.x = value }\n get pageY () { return this.page.y }\n set pageY (value) { this.page.y = value }\n\n get clientX () { return this.client.x }\n set clientX (value) { this.client.x = value }\n get clientY () { return this.client.y }\n set clientY (value) { this.client.y = value }\n\n get dx () { return this.delta.x }\n set dx (value) { this.delta.x = value }\n get dy () { return this.delta.y }\n set dy (value) { this.delta.y = value }\n\n get velocityX () { return this.velocity.x }\n set velocityX (value) { this.velocity.x = value }\n get velocityY () { return this.velocity.y }\n set velocityY (value) { this.velocity.y = value }\n\n getSwipe () {\n const interaction = this.interaction\n\n if (interaction.prevEvent.speed < 600 ||\n this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n return null\n }\n\n let angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI\n const overlap = 22.5\n\n if (angle < 0) {\n angle += 360\n }\n\n const left = 135 - overlap <= angle && angle < 225 + overlap\n const up = 225 - overlap <= angle && angle < 315 + overlap\n\n const right = !left && (315 - overlap <= angle || angle < 45 + overlap)\n const down = !up && 45 - overlap <= angle && angle < 135 + overlap\n\n return {\n up,\n down,\n left,\n right,\n angle,\n speed: interaction.prevEvent.speed,\n velocity: {\n x: interaction.prevEvent.velocityX,\n y: interaction.prevEvent.velocityY,\n },\n }\n }\n\n preventDefault () {}\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n}\n\nexport default InteractEvent\n","import browser from './browser'\nimport dom from './domObjects'\nimport * as domUtils from './domUtils'\nimport hypot from './hypot'\nimport * as is from './is'\nimport pointerExtend from './pointerExtend'\n\nconst pointerUtils = {\n copyCoords (dest, src) {\n dest.page = dest.page || {}\n dest.page.x = src.page.x\n dest.page.y = src.page.y\n\n dest.client = dest.client || {}\n dest.client.x = src.client.x\n dest.client.y = src.client.y\n\n dest.timeStamp = src.timeStamp\n },\n\n setCoordDeltas (targetObj, prev, cur) {\n targetObj.page.x = cur.page.x - prev.page.x\n targetObj.page.y = cur.page.y - prev.page.y\n targetObj.client.x = cur.client.x - prev.client.x\n targetObj.client.y = cur.client.y - prev.client.y\n targetObj.timeStamp = cur.timeStamp - prev.timeStamp\n },\n\n setCoordVelocity (targetObj, delta) {\n const dt = Math.max(delta.timeStamp / 1000, 0.001)\n\n targetObj.page.x = delta.page.x / dt\n targetObj.page.y = delta.page.y / dt\n targetObj.client.x = delta.client.x / dt\n targetObj.client.y = delta.client.y / dt\n targetObj.timeStamp = dt\n },\n\n isNativePointer (pointer) {\n return (pointer instanceof dom.Event || pointer instanceof dom.Touch)\n },\n\n // Get specified X/Y coords for mouse or event.touches[0]\n getXY (type, pointer, xy) {\n xy = xy || {}\n type = type || 'page'\n\n xy.x = pointer[type + 'X']\n xy.y = pointer[type + 'Y']\n\n return xy\n },\n\n getPageXY (pointer: Interact.PointerType | Interact.InteractEvent, page?: Interact.Point) {\n page = page || { x: 0, y: 0 }\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n pointerUtils.getXY('screen', pointer, page)\n\n page.x += window.scrollX\n page.y += window.scrollY\n }\n else {\n pointerUtils.getXY('page', pointer, page)\n }\n\n return page\n },\n\n getClientXY (pointer, client) {\n client = client || {}\n\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n pointerUtils.getXY('screen', pointer, client)\n }\n else {\n pointerUtils.getXY('client', pointer, client)\n }\n\n return client\n },\n\n getPointerId (pointer) {\n return is.number(pointer.pointerId) ? pointer.pointerId : pointer.identifier\n },\n\n setCoords (targetObj, pointers: any[], timeStamp?: number) {\n const pointer = (pointers.length > 1\n ? pointerUtils.pointerAverage(pointers)\n : pointers[0])\n\n const tmpXY = {} as { x: number, y: number }\n\n pointerUtils.getPageXY(pointer, tmpXY)\n targetObj.page.x = tmpXY.x\n targetObj.page.y = tmpXY.y\n\n pointerUtils.getClientXY(pointer, tmpXY)\n targetObj.client.x = tmpXY.x\n targetObj.client.y = tmpXY.y\n\n targetObj.timeStamp = is.number(timeStamp) ? timeStamp : new Date().getTime()\n },\n\n pointerExtend,\n\n getTouchPair (event) {\n const touches = []\n\n // array of touches is supplied\n if (is.array(event)) {\n touches[0] = event[0]\n touches[1] = event[1]\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0]\n touches[1] = event.changedTouches[0]\n }\n else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0]\n touches[1] = event.changedTouches[1]\n }\n }\n else {\n touches[0] = event.touches[0]\n touches[1] = event.touches[1]\n }\n }\n\n return touches\n },\n\n pointerAverage (pointers: PointerEvent[] | Event[]) {\n const average = {\n pageX : 0,\n pageY : 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n }\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop] += pointer[prop]\n }\n }\n for (const prop in average) {\n average[prop] /= pointers.length\n }\n\n return average\n },\n\n touchBBox (event: Event | Array<(Interact.PointerType) | TouchEvent>) {\n if (!(event as any).length &&\n !((event as TouchEvent).touches &&\n (event as TouchEvent).touches.length > 1)) {\n return null\n }\n\n const touches = pointerUtils.getTouchPair(event)\n const minX = Math.min(touches[0].pageX, touches[1].pageX)\n const minY = Math.min(touches[0].pageY, touches[1].pageY)\n const maxX = Math.max(touches[0].pageX, touches[1].pageX)\n const maxY = Math.max(touches[0].pageY, touches[1].pageY)\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n right: maxX,\n bottom: maxY,\n width: maxX - minX,\n height: maxY - minY,\n }\n },\n\n touchDistance (event, deltaSource) {\n const sourceX = deltaSource + 'X'\n const sourceY = deltaSource + 'Y'\n const touches = pointerUtils.getTouchPair(event)\n\n const dx = touches[0][sourceX] - touches[1][sourceX]\n const dy = touches[0][sourceY] - touches[1][sourceY]\n\n return hypot(dx, dy)\n },\n\n touchAngle (event, deltaSource) {\n const sourceX = deltaSource + 'X'\n const sourceY = deltaSource + 'Y'\n const touches = pointerUtils.getTouchPair(event)\n const dx = touches[1][sourceX] - touches[0][sourceX]\n const dy = touches[1][sourceY] - touches[0][sourceY]\n const angle = 180 * Math.atan2(dy, dx) / Math.PI\n\n return angle\n },\n\n getPointerType (pointer) {\n return is.string(pointer.pointerType)\n ? pointer.pointerType\n : is.number(pointer.pointerType)\n ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType]\n // if the PointerEvent API isn't available, then the \"pointer\" must\n // be either a MouseEvent, TouchEvent, or Touch object\n : /touch/.test(pointer.type) || pointer instanceof dom.Touch\n ? 'touch'\n : 'mouse'\n },\n\n // [ event.target, event.currentTarget ]\n getEventTargets (event) {\n const path = is.func(event.composedPath) ? event.composedPath() : event.path\n\n return [\n domUtils.getActualElement(path ? path[0] : event.target),\n domUtils.getActualElement(event.currentTarget),\n ]\n },\n\n newCoords () {\n return {\n page : { x: 0, y: 0 },\n client : { x: 0, y: 0 },\n timeStamp: 0,\n }\n },\n\n coordsToEvent ({ page, client, timeStamp }: any) {\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 arr from '@interactjs/utils/arr'\nimport browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport { getElementRect, nodeContains, trySelector } from '@interactjs/utils/domUtils'\nimport events from '@interactjs/utils/events'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport { getWindow } from '@interactjs/utils/window'\nimport { ActionDefaults, Defaults, Options } from './defaultOptions'\nimport Eventable from './Eventable'\nimport { Actions } from './scope'\n\n/** */\nexport class Interactable implements Partial {\n protected get _defaults (): Defaults {\n return {\n base: {},\n perAction: {},\n actions: {} as ActionDefaults,\n }\n }\n\n readonly options!: Required\n readonly _actions: Actions\n readonly target: Interact.Target\n readonly events = new Eventable()\n readonly _context: Document | Element\n readonly _win: Window\n readonly _doc: Document\n\n /** */\n constructor (target: Interact.Target, options: any, defaultContext: Document | Element) {\n this._actions = options.actions\n this.target = target\n this._context = options.context || defaultContext\n this._win = getWindow(trySelector(target) ? this._context : target)\n this._doc = this._win.document\n\n this.set(options)\n }\n\n setOnEvents (actionName: string, phases: NonNullable) {\n if (is.func(phases.onstart)) { this.on(`${actionName}start`, phases.onstart) }\n if (is.func(phases.onmove)) { this.on(`${actionName}move`, phases.onmove) }\n if (is.func(phases.onend)) { this.on(`${actionName}end`, phases.onend) }\n if (is.func(phases.oninertiastart)) { this.on(`${actionName}inertiastart`, phases.oninertiastart) }\n\n return this\n }\n\n updatePerActionListeners (actionName, prev, cur) {\n if (is.array(prev)) {\n this.off(actionName, prev)\n }\n\n if (is.array(cur)) {\n this.on(actionName, cur)\n }\n }\n\n setPerAction (actionName, options: Interact.OrBoolean) {\n const defaults = this._defaults\n\n // for all the default per-action options\n for (const optionName in options) {\n const actionOptions = this.options[actionName]\n const optionValue = options[optionName]\n const isArray = is.array(optionValue)\n\n // remove old event listeners and add new ones\n if (optionName === 'listeners') {\n this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue)\n }\n\n // if the option value is an array\n if (isArray) {\n actionOptions[optionName] = arr.from(optionValue)\n }\n // if the option value is an object\n else if (!isArray && is.plainObject(optionValue)) {\n // copy the object\n actionOptions[optionName] = extend(\n actionOptions[optionName] || {},\n clone(optionValue))\n\n // set anabled field to true if it exists in the defaults\n if (is.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) {\n actionOptions[optionName].enabled = optionValue.enabled !== false\n }\n }\n // if the option value is a boolean and the default is an object\n else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n actionOptions[optionName].enabled = optionValue\n }\n // if it's anything else, do a plain assignment\n else {\n actionOptions[optionName] = optionValue\n }\n }\n }\n\n /**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {object} The object's bounding rectangle.\n */\n getRect (element: Element) {\n element = element || (is.element(this.target)\n ? this.target\n : null)\n\n if (is.string(this.target)) {\n element = element || this._context.querySelector(this.target)\n }\n\n return getElementRect(element)\n }\n\n /**\n * Returns or sets the function used to calculate the interactable's\n * element's rectangle\n *\n * @param {function} [checker] A function which returns this Interactable's\n * bounding rectangle. See {@link Interactable.getRect}\n * @return {function | object} The checker function or this Interactable\n */\n rectChecker (checker: (element: Element) => any) {\n if (is.func(checker)) {\n this.getRect = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.getRect\n\n return this\n }\n\n return this.getRect\n }\n\n _backCompatOption (optionName, newValue) {\n if (trySelector(newValue) || is.object(newValue)) {\n this.options[optionName] = newValue\n\n for (const action of this._actions.names) {\n this.options[action][optionName] = newValue\n }\n\n return this\n }\n\n return this.options[optionName]\n }\n\n /**\n * Gets or sets the origin of the Interactable's element. The x and y\n * of the origin will be subtracted from action event coordinates.\n *\n * @param {Element | object | string} [origin] An HTML or SVG Element whose\n * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\n * or any CSS selector\n *\n * @return {object} The current origin or this Interactable\n */\n origin (newValue) {\n return this._backCompatOption('origin', newValue)\n }\n\n /**\n * Returns or sets the mouse coordinate types used to calculate the\n * movement of the pointer.\n *\n * @param {string} [newValue] Use 'client' if you will be scrolling while\n * interacting; Use 'page' if you want autoScroll to work\n * @return {string | object} The current deltaSource or this Interactable\n */\n deltaSource (newValue) {\n if (newValue === 'page' || newValue === 'client') {\n this.options.deltaSource = newValue\n\n return this\n }\n\n return this.options.deltaSource\n }\n\n /**\n * Gets the selector context Node of the Interactable. The default is\n * `window.document`.\n *\n * @return {Node} The context Node of this Interactable\n */\n context () {\n return this._context\n }\n\n inContext (element) {\n return (this._context === element.ownerDocument ||\n nodeContains(this._context, element))\n }\n\n /**\n * Calls listeners for the given InteractEvent type bound globally\n * and directly to this Interactable\n *\n * @param {InteractEvent} iEvent The InteractEvent object to be fired on this\n * Interactable\n * @return {Interactable} this Interactable\n */\n fire (iEvent) {\n this.events.fire(iEvent)\n\n return this\n }\n\n _onOff (method: 'on' | 'off', typeArg: Interact.EventTypes, listenerArg?: Interact.ListenersArg | null, options?: any) {\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg\n listenerArg = null\n }\n\n const addRemove = method === 'on' ? 'add' : 'remove'\n const listeners = normalizeListeners(typeArg, listenerArg)\n\n for (let type in listeners) {\n if (type === 'wheel') { type = browser.wheelEvent }\n\n for (const listener of listeners[type]) {\n // if it is an action event type\n if (arr.contains(this._actions.eventTypes, type)) {\n this.events[method](type, listener)\n }\n // delegated event\n else if (is.string(this.target)) {\n events[`${addRemove}Delegate`](this.target, this._context, type, listener, options)\n }\n // remove listener from this Interatable's element\n else {\n (events[addRemove] as typeof events.remove)(this.target, type, listener, options)\n }\n }\n }\n\n return this\n }\n\n /**\n * Binds a listener for an InteractEvent, pointerEvent or DOM event.\n *\n * @param {string | array | object} types The types of events to listen\n * for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * addEventListener\n * @return {Interactable} This Interactable\n */\n on (types: Interact.EventTypes, listener?: Interact.ListenersArg, options?: any) {\n return this._onOff('on', types, listener, options)\n }\n\n /**\n * Removes an InteractEvent, pointerEvent or DOM event listener.\n *\n * @param {string | array | object} types The types of events that were\n * listened for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * removeEventListener\n * @return {Interactable} This Interactable\n */\n off (types: string | string[] | Interact.EventTypes, listener?: Interact.ListenersArg, options?: any) {\n return this._onOff('off', types, listener, options)\n }\n\n /**\n * Reset the options of this Interactable\n *\n * @param {object} options The new settings to apply\n * @return {object} This Interactable\n */\n set (options: Interact.OptionsArg) {\n const defaults = this._defaults\n\n if (!is.object(options)) {\n options = {}\n }\n\n (this.options as Required) = clone(defaults.base) as Required\n\n for (const actionName in this._actions.methodDict) {\n const methodName = this._actions.methodDict[actionName]\n\n this.options[actionName] = {}\n this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName]))\n\n this[methodName](options[actionName])\n }\n\n for (const setting in options) {\n if (is.func(this[setting])) {\n this[setting](options[setting])\n }\n }\n\n return this\n }\n\n /**\n * Remove this interactable from the list of interactables and remove it's\n * action capabilities and event listeners\n *\n * @return {interact}\n */\n unset () {\n events.remove(this.target as Node, 'all')\n\n if (is.string(this.target)) {\n // remove delegated events\n for (const type in events.delegatedEvents) {\n const delegated = events.delegatedEvents[type]\n\n if (delegated.selectors[0] === this.target &&\n delegated.contexts[0] === this._context) {\n delegated.selectors.splice(0, 1)\n delegated.contexts.splice(0, 1)\n delegated.listeners.splice(0, 1)\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegated[type] = null\n }\n }\n\n events.remove(this._context, type, events.delegateListener)\n events.remove(this._context, type, events.delegateUseCapture, true)\n }\n }\n else {\n events.remove(this.target as Node, 'all')\n }\n }\n}\n\nexport default Interactable\n","export class PointerInfo {\n constructor (\n public id: number,\n public pointer: Interact.PointerType,\n public event: Interact.PointerEventType,\n public downTime: number,\n public downTarget: EventTarget,\n ) {}\n}\n\nexport default PointerInfo\n","export type SignalListener = (signalArg: PartialSignalArg, sinalName: string) => (void | boolean)\n\nexport interface SignalArg {\n interaction: Interact.Interaction\n Interactable: Interact.Interactable\n iEvent: Interact.InteractEvent\n element: Window | Document | Element\n coords: Interact.Point\n event: Interact.PointerEventType\n phase: Interact.EventPhase\n [index: string]: any\n}\n\nexport type PartialSignalArg = Partial\n\nclass Signals {\n listeners: {\n [signalName: string]: SignalListener[],\n } = {}\n\n on (name: string, listener: SignalListener) {\n if (!this.listeners[name]) {\n this.listeners[name] = [listener]\n return\n }\n\n this.listeners[name].push(listener)\n }\n\n off (name: string, listener: SignalListener) {\n if (!this.listeners[name]) { return }\n\n const index = this.listeners[name].indexOf(listener)\n\n if (index !== -1) {\n this.listeners[name].splice(index, 1)\n }\n }\n\n fire (name: string, arg: Partial): void | false {\n const targetListeners = this.listeners[name]\n\n if (!targetListeners) { return }\n\n for (const listener of targetListeners) {\n if (listener(arg, name) === false) {\n return false\n }\n }\n }\n}\n\nexport default Signals\n","import * as utils from '@interactjs/utils'\nimport Interactable from './Interactable'\nimport InteractEvent, { EventPhase } from './InteractEvent'\nimport PointerInfo from './PointerInfo'\nimport { ActionName } from './scope'\n\nexport interface ActionProps {\n name: T\n axis?: 'x' | 'y' | 'xy'\n edges?: {\n [edge in keyof Interact.Rect]?: boolean\n }\n}\n\nexport class Interaction {\n // current interactable being interacted with\n target: Interactable = null\n\n // the target element of the interactable\n element: Element = null\n\n _signals: utils.Signals\n\n // action that's ready to be fired on next move event\n prepared: ActionProps = {\n name : null,\n axis : null,\n edges: null,\n }\n\n pointerType: string\n\n // keep track of added pointers\n pointers: PointerInfo[] = []\n\n // pointerdown/mousedown/touchstart event\n downEvent: Interact.PointerEventType = null\n\n downPointer: Interact.PointerType = {} as Interact.PointerType\n\n _latestPointer: {\n pointer: EventTarget\n event: Interact.PointerEventType\n eventTarget: Node,\n } = {\n pointer: null,\n event: null,\n eventTarget: null,\n }\n\n // previous action event\n prevEvent: InteractEvent = null\n\n pointerIsDown = false\n pointerWasMoved = false\n _interacting = false\n _ending = false\n\n simulation = null\n\n get pointerMoveTolerance () {\n return 1\n }\n\n /**\n * @alias Interaction.prototype.move\n */\n doMove = utils.warnOnce(\n function (this: Interaction, signalArg: any) {\n this.move(signalArg)\n },\n 'The interaction.doMove() method has been renamed to interaction.move()')\n\n coords = {\n // Starting InteractEvent pointer coordinates\n start: utils.pointer.newCoords(),\n // Previous native pointer move event coordinates\n prev: utils.pointer.newCoords(),\n // current native pointer move event coordinates\n cur: utils.pointer.newCoords(),\n // Change in coordinates and time of the pointer\n delta: utils.pointer.newCoords(),\n // pointer velocity\n velocity: utils.pointer.newCoords(),\n }\n\n /** */\n constructor ({ pointerType, signals }: { pointerType?: string, signals: utils.Signals }) {\n this._signals = signals\n this.pointerType = pointerType\n\n this._signals.fire('new', { interaction: 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: EventPhase.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 = EventPhase.Move\n\n this._doPhase(signalArg)\n }\n\n // End interact move events and stop auto-scroll unless simulation is running\n pointerUp (pointer, event, eventTarget, curEventTarget) {\n let pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) {\n pointerIndex = this.updatePointer(pointer, event, eventTarget, false)\n }\n\n this._signals.fire(/cancel$/i.test(event.type) ? 'cancel' : 'up', {\n pointer,\n pointerIndex,\n event,\n eventTarget,\n curEventTarget,\n interaction: this,\n })\n\n if (!this.simulation) {\n this.end(event)\n }\n\n this.pointerIsDown = false\n this.removePointer(pointer, event)\n }\n\n documentBlur (event) {\n this.end(event)\n this._signals.fire('blur', { event, interaction: this })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('move', function (event) {\n * if (event.pageX > 1000) {\n * // end the current action\n * event.interaction.end();\n * // stop all further listeners from being called\n * event.stopImmediatePropagation();\n * }\n * });\n * ```\n *\n * @param {PointerEvent} [event]\n */\n end (event?: Interact.PointerEventType) {\n this._ending = true\n event = event || this._latestPointer.event\n let endPhaseResult\n\n if (this.interacting()) {\n endPhaseResult = this._doPhase({\n event,\n interaction: this,\n phase: EventPhase.End,\n })\n }\n\n this._ending = false\n\n if (endPhaseResult === true) {\n this.stop()\n }\n }\n\n currentAction () {\n return this._interacting ? this.prepared.name : null\n }\n\n interacting () {\n return this._interacting\n }\n\n /** */\n stop () {\n this._signals.fire('stop', { interaction: this })\n\n this.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 ? this.pointers.length - 1\n : utils.arr.findIndex(this.pointers, (curPointer) => curPointer.id === pointerId)\n }\n\n getPointerInfo (pointer) {\n return this.pointers[this.getPointerIndex(pointer)]\n }\n\n updatePointer (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Window | Document | Element, down?: boolean) {\n const id = utils.pointer.getPointerId(pointer)\n let pointerIndex = this.getPointerIndex(pointer)\n let pointerInfo = this.pointers[pointerIndex]\n\n down = down === false\n ? false\n : down || /(down|start)$/i.test(event.type)\n\n if (!pointerInfo) {\n pointerInfo = new PointerInfo(\n id,\n pointer,\n event,\n null,\n null,\n )\n\n pointerIndex = this.pointers.length\n this.pointers.push(pointerInfo)\n }\n else {\n pointerInfo.pointer = pointer\n }\n\n if (down) {\n this.pointerIsDown = true\n\n if (!this.interacting()) {\n utils.pointer.setCoords(this.coords.start, this.pointers.map((p) => p.pointer))\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: Interact.PointerEventType, phase: EventPhase, preEnd: boolean, type: string) {\n const actionName = this.prepared.name\n\n return new InteractEvent(this, event, actionName, phase, this.element, null, preEnd, type)\n }\n\n _fireEvent (iEvent) {\n this.target.fire(iEvent)\n\n if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n this.prevEvent = iEvent\n }\n }\n\n _doPhase (signalArg: Partial) {\n const { event, phase, preEnd, type } = signalArg\n\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\nexport default Interaction\nexport { PointerInfo }\n","import Interactable from '@interactjs/core/Interactable'\nimport InteractEvent from '@interactjs/core/InteractEvent'\nimport Interaction from '@interactjs/core/Interaction'\nimport { ActionName } from '@interactjs/core/scope'\nimport * as arr from '@interactjs/utils/arr'\n\nclass DropEvent {\n type: string\n target: Element\n currentTarget: Element\n dropzone: Interactable\n dragEvent: InteractEvent\n relatedTarget: Element\n interaction: Interaction\n draggable: Interactable\n timeStamp: number\n propagationStopped = false\n immediatePropagationStopped = false\n\n /**\n * Class of events fired on dropzones during drags with acceptable targets.\n */\n constructor (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\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","import base from './base'\nimport restrictEdgesModule from './restrict/edges'\nimport restrictModule from './restrict/pointer'\nimport restrictSizeModule from './restrict/size'\nimport snapEdgesModule from './snap/edges'\nimport snapModule from './snap/pointer'\nimport snapSizeModule from './snap/size'\n\nconst { makeModifier } = base\n\nexport const snap = makeModifier(snapModule, 'snap')\nexport const snapSize = makeModifier(snapSizeModule, 'snapSize')\nexport const snapEdges = makeModifier(snapEdgesModule, 'snapEdges')\nexport const restrict = makeModifier(restrictModule, 'restrict')\nexport const restrictEdges = makeModifier(restrictEdgesModule, 'restrictEdges')\nexport const restrictSize = makeModifier(restrictSizeModule, 'restrictSize')\n","import Interaction from '@interactjs/core/Interaction'\nimport pointerUtils from '@interactjs/utils/pointerUtils'\n\n/** */\nexport default class PointerEvent {\n interaction: Interaction\n timeStamp: number\n originalEvent: Interact.PointerEventType\n type: T\n pointerId: number\n pointerType: string\n target: Node | Window\n currentTarget: Node | Window\n double: boolean\n pageX: number\n pageY: number\n clientX: number\n clientY: number\n dt: number\n eventable: any\n propagationStopped = false\n immediatePropagationStopped = false\n\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 * Prevent the default behaviour of the original Event\n */\n preventDefault () {\n this.originalEvent.preventDefault()\n }\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n","import grid from './grid'\n\nexport { grid }\n","\nreturn _$index_25;\n\n});\n"]} \ No newline at end of file diff --git a/packages/interactjs/index.d.ts b/packages/interactjs/index.d.ts index ef89a3e80..4ce10f221 100644 --- a/packages/interactjs/index.d.ts +++ b/packages/interactjs/index.d.ts @@ -1,4 +1,5 @@ import interact from '@interactjs/interact'; +import '@interactjs/types'; import * as snappers from '@interactjs/utils/snappers'; declare module '@interactjs/interact/interact' { interface InteractStatic { diff --git a/packages/interactjs/index.js b/packages/interactjs/index.js index 2e2c671e8..379518291 100644 --- a/packages/interactjs/index.js +++ b/packages/interactjs/index.js @@ -1,5 +1,6 @@ import interact, { init as initInteract } from '@interactjs/interact'; import * as modifiers from '@interactjs/modifiers'; +import '@interactjs/types'; import extend from '@interactjs/utils/extend'; import * as snappers from '@interactjs/utils/snappers'; if (typeof window === 'object' && !!window) { @@ -16,7 +17,9 @@ export function init(win) { }); } export default interact; +interact['default'] = interact; // tslint:disable-line no-string-literal +interact['init'] = init; // tslint:disable-line no-string-literal if (typeof module === 'object' && !!module) { module.exports = interact; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFFBQVEsRUFBRSxFQUFFLElBQUksSUFBSSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNyRSxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFBO0FBQ2xELE9BQU8sTUFBTSxNQUFNLDBCQUEwQixDQUFBO0FBQzdDLE9BQU8sS0FBSyxRQUFRLE1BQU0sNEJBQTRCLENBQUE7QUFVdEQsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7Q0FDYjtBQUVELE1BQU0sVUFBVSxJQUFJLENBQUUsR0FBVztJQUMvQixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFakIsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDO1FBQ2xCLE9BQU8sQ0FBRSxLQUFLO1lBQ1osUUFBUSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQTtZQUN2RCxRQUFRLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtZQUM1QixRQUFRLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFBO1FBQ2xELENBQUM7S0FDRixDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQsZUFBZSxRQUFRLENBQUE7QUFFdkIsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUMxQyxNQUFNLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQTtDQUMxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbnRlcmFjdCwgeyBpbml0IGFzIGluaXRJbnRlcmFjdCB9IGZyb20gJ0BpbnRlcmFjdGpzL2ludGVyYWN0J1xuaW1wb3J0ICogYXMgbW9kaWZpZXJzIGZyb20gJ0BpbnRlcmFjdGpzL21vZGlmaWVycydcbmltcG9ydCBleHRlbmQgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvZXh0ZW5kJ1xuaW1wb3J0ICogYXMgc25hcHBlcnMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvc25hcHBlcnMnXG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9pbnRlcmFjdC9pbnRlcmFjdCcge1xuICAgIGludGVyZmFjZSBJbnRlcmFjdFN0YXRpYyB7XG4gICAgICAgIG1vZGlmaWVycz86IGFueVxuICAgICAgICBzbmFwcGVycz86IHR5cGVvZiBzbmFwcGVyc1xuICAgICAgICBjcmVhdGVTbmFwR3JpZD86IHR5cGVvZiBzbmFwcGVycy5ncmlkXG4gICAgfVxufVxuXG5pZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgISF3aW5kb3cpIHtcbiAgaW5pdCh3aW5kb3cpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0ICh3aW46IFdpbmRvdykge1xuICBpbml0SW50ZXJhY3Qod2luKVxuXG4gIHJldHVybiBpbnRlcmFjdC51c2Uoe1xuICAgIGluc3RhbGwgKHNjb3BlKSB7XG4gICAgICBpbnRlcmFjdC5tb2RpZmllcnMgPSBleHRlbmQoc2NvcGUubW9kaWZpZXJzLCBtb2RpZmllcnMpXG4gICAgICBpbnRlcmFjdC5zbmFwcGVycyA9IHNuYXBwZXJzXG4gICAgICBpbnRlcmFjdC5jcmVhdGVTbmFwR3JpZCA9IGludGVyYWN0LnNuYXBwZXJzLmdyaWRcbiAgICB9LFxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBpbnRlcmFjdFxuXG5pZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgISFtb2R1bGUpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBpbnRlcmFjdFxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFFBQVEsRUFBRSxFQUFFLElBQUksSUFBSSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNyRSxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFBO0FBQ2xELE9BQU8sbUJBQW1CLENBQUE7QUFDMUIsT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUE7QUFDN0MsT0FBTyxLQUFLLFFBQVEsTUFBTSw0QkFBNEIsQ0FBQTtBQVV0RCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtDQUNiO0FBRUQsTUFBTSxVQUFVLElBQUksQ0FBRSxHQUFXO0lBQy9CLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUVqQixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDbEIsT0FBTyxDQUFFLEtBQUs7WUFDWixRQUFRLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1lBQ3ZELFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO1lBQzVCLFFBQVEsQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUE7UUFDbEQsQ0FBQztLQUNGLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRCxlQUFlLFFBQVEsQ0FBQTtBQUN2QixRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFBLENBQUMsd0NBQXdDO0FBQ3ZFLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUEsQ0FBQyx3Q0FBd0M7QUFFaEUsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUMxQyxNQUFNLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQTtDQUMxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbnRlcmFjdCwgeyBpbml0IGFzIGluaXRJbnRlcmFjdCB9IGZyb20gJ0BpbnRlcmFjdGpzL2ludGVyYWN0J1xuaW1wb3J0ICogYXMgbW9kaWZpZXJzIGZyb20gJ0BpbnRlcmFjdGpzL21vZGlmaWVycydcbmltcG9ydCAnQGludGVyYWN0anMvdHlwZXMnXG5pbXBvcnQgZXh0ZW5kIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2V4dGVuZCdcbmltcG9ydCAqIGFzIHNuYXBwZXJzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL3NuYXBwZXJzJ1xuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvaW50ZXJhY3QvaW50ZXJhY3QnIHtcbiAgICBpbnRlcmZhY2UgSW50ZXJhY3RTdGF0aWMge1xuICAgICAgICBtb2RpZmllcnM/OiBhbnlcbiAgICAgICAgc25hcHBlcnM/OiB0eXBlb2Ygc25hcHBlcnNcbiAgICAgICAgY3JlYXRlU25hcEdyaWQ/OiB0eXBlb2Ygc25hcHBlcnMuZ3JpZFxuICAgIH1cbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnICYmICEhd2luZG93KSB7XG4gIGluaXQod2luZG93KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCAod2luOiBXaW5kb3cpIHtcbiAgaW5pdEludGVyYWN0KHdpbilcblxuICByZXR1cm4gaW50ZXJhY3QudXNlKHtcbiAgICBpbnN0YWxsIChzY29wZSkge1xuICAgICAgaW50ZXJhY3QubW9kaWZpZXJzID0gZXh0ZW5kKHNjb3BlLm1vZGlmaWVycywgbW9kaWZpZXJzKVxuICAgICAgaW50ZXJhY3Quc25hcHBlcnMgPSBzbmFwcGVyc1xuICAgICAgaW50ZXJhY3QuY3JlYXRlU25hcEdyaWQgPSBpbnRlcmFjdC5zbmFwcGVycy5ncmlkXG4gICAgfSxcbiAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW50ZXJhY3RcbmludGVyYWN0WydkZWZhdWx0J10gPSBpbnRlcmFjdCAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lIG5vLXN0cmluZy1saXRlcmFsXG5pbnRlcmFjdFsnaW5pdCddID0gaW5pdCAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lIG5vLXN0cmluZy1saXRlcmFsXG5cbmlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiAhIW1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0XG59XG4iXX0= \ No newline at end of file diff --git a/packages/interactjs/package.json b/packages/interactjs/package.json index 35050d290..a5e2924ea 100644 --- a/packages/interactjs/package.json +++ b/packages/interactjs/package.json @@ -1,6 +1,6 @@ { "name": "interactjs", - "version": "1.4.0-alpha.27+sha.12b8f8f", + "version": "1.4.0-alpha.28+sha.e624c4d", "repository": { "type": "git", "url": "https://github.com/taye/interact.js.git" @@ -41,13 +41,13 @@ ], "license": "MIT", "dependencies": { - "@interactjs/types": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/types": "1.4.0-alpha.28+sha.e624c4d" }, "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/interact": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/modifiers": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/utils": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/_dev": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/interact": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/modifiers": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/utils": "1.4.0-alpha.28+sha.e624c4d" }, "_dev": { "entries": "./index.ts", diff --git a/packages/modifiers/base.d.ts b/packages/modifiers/base.d.ts index a50148634..443bafa2c 100644 --- a/packages/modifiers/base.d.ts +++ b/packages/modifiers/base.d.ts @@ -13,10 +13,6 @@ declare module '@interactjs/core/defaultOptions' { interface PerActionDefaults { modifiers?: any[]; } - interface Options { - drag?: Interact.DraggableOptions; - modifiers?: any[]; - } } declare function install(scope: Scope): void; declare function startAll(arg: any): void; @@ -31,7 +27,7 @@ declare function start({ interaction, phase }: Interact.SignalArg, pageCoords: I x: number; y: number; }; - coords: import("../types").Point; + coords: import("../types/types").Point; changed: boolean; }; declare function setAll(arg: Partial): { @@ -39,7 +35,7 @@ declare function setAll(arg: Partial): { x: number; y: number; }; - coords: import("../types").Point; + coords: import("../types/types").Point; changed: boolean; }; declare function prepareStates(modifierList: any): any[]; @@ -53,7 +49,7 @@ declare function beforeEnd(arg: any): void | false; declare function stop(arg: any): void; declare function getModifierList(interaction: any, registeredModifiers: any): any; declare function shouldDo(options: any, preEnd?: boolean, requireEndOnly?: boolean, phase?: string): any; -declare function makeModifier(module: any, name: any): { +declare function makeModifier(module: any, name?: string): { (options: any): { options: any; methods: { @@ -62,6 +58,7 @@ declare function makeModifier(module: any, name: any): { beforeEnd: any; stop: any; }; + name: string; }; _defaults: any; _methods: { diff --git a/packages/modifiers/base.js b/packages/modifiers/base.js index 38f5f4c3e..3c011975d 100644 --- a/packages/modifiers/base.js +++ b/packages/modifiers/base.js @@ -3,7 +3,7 @@ function install(scope) { const { interactions, } = scope; scope.defaults.perAction.modifiers = []; scope.modifiers = {}; - interactions.signals.on('new', (interaction) => { + interactions.signals.on('new', ({ interaction }) => { interaction.modifiers = { startOffset: { left: 0, right: 0, top: 0, bottom: 0 }, offsets: {}, @@ -115,7 +115,7 @@ function setAll(arg) { function prepareStates(modifierList) { const states = []; for (let index = 0; index < modifierList.length; index++) { - const { options, methods } = modifierList[index]; + const { options, methods, name } = modifierList[index]; if (options && options.enabled === false) { continue; } @@ -123,6 +123,7 @@ function prepareStates(modifierList) { options, methods, index, + name, }; states.push(state); } @@ -262,7 +263,7 @@ function makeModifier(module, name) { options[prop] = defaults[prop]; } } - return { options, methods }; + return { options, methods, name }; }; if (typeof name === 'string') { Object.defineProperty(modifier, 'name', { value: name }); @@ -286,4 +287,4 @@ export default { getRectOffset, makeModifier, }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUE7QUF3QjdDLFNBQVMsT0FBTyxDQUFFLEtBQVk7SUFDNUIsTUFBTSxFQUNKLFlBQVksR0FDYixHQUFHLEtBQUssQ0FBQTtJQUVULEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUE7SUFDdkMsS0FBSyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUE7SUFFcEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7UUFDN0MsV0FBVyxDQUFDLFNBQVMsR0FBRztZQUN0QixXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO1lBQ3JELE9BQU8sRUFBTSxFQUFFO1lBQ2YsTUFBTSxFQUFLLElBQUk7WUFDZixNQUFNLEVBQU8sSUFBSTtTQUNsQixDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRixZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ3JELEtBQUssQ0FBQyxHQUFVLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDdkUsQ0FBQyxDQUFDLENBQUE7SUFFRixZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUMvQyxVQUFVLENBQUMsR0FBVSxDQUFDLENBQUE7UUFDdEIsS0FBSyxDQUFDLEdBQVUsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNyRSxDQUFDLENBQUMsQ0FBQTtJQUVGLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQ3pELFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBRXZELFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLHFCQUFxQixFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQ3pELFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBRXhELFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLGFBQW9CLENBQUMsQ0FBQTtJQUNuRSxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxhQUFvQixDQUFDLENBQUE7SUFDbEUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFBO0FBQ3ZDLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBRSxHQUFHO0lBQ3BCLEtBQUssTUFBTSxLQUFLLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTtRQUM5QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ3ZCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1lBQ2pCLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1NBQ3pCO0tBQ0Y7QUFDSCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUUsSUFBSSxFQUFFLE1BQU07SUFDbEMsT0FBTyxJQUFJO1FBQ1QsQ0FBQyxDQUFDO1lBQ0EsSUFBSSxFQUFJLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUk7WUFDNUIsR0FBRyxFQUFLLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUc7WUFDM0IsS0FBSyxFQUFHLElBQUksQ0FBQyxLQUFLLEdBQUksTUFBTSxDQUFDLENBQUM7WUFDOUIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUM7U0FDL0I7UUFDRCxDQUFDLENBQUM7WUFDQSxJQUFJLEVBQUksQ0FBQztZQUNULEdBQUcsRUFBSyxDQUFDO1lBQ1QsS0FBSyxFQUFHLENBQUM7WUFDVCxNQUFNLEVBQUUsQ0FBQztTQUNWLENBQUE7QUFDTCxDQUFDO0FBRUQsU0FBUyxLQUFLLENBQ1osRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFzQixFQUMxQyxVQUEwQixFQUMxQixtQkFBbUI7SUFFbkIsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsV0FBVyxDQUFBO0lBQ3JELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxXQUFXLEVBQUUsbUJBQW1CLENBQUMsQ0FBQTtJQUN0RSxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUE7SUFFMUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFvQyxDQUFBO0lBRXpGLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSyxJQUFJLENBQUMsRUFBRTtRQUFFLElBQUksQ0FBQyxLQUFLLEdBQUksSUFBSSxDQUFDLEtBQUssR0FBSSxJQUFJLENBQUMsSUFBSSxDQUFBO0tBQUU7SUFDbEUsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFO1FBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUE7S0FBRztJQUVsRSxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBRW5ELFdBQVcsQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtJQUMvQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFBO0lBRWpELE1BQU0sR0FBRyxHQUFnQztRQUN2QyxXQUFXO1FBQ1gsWUFBWTtRQUNaLE9BQU87UUFDUCxVQUFVO1FBQ1YsS0FBSztRQUNMLElBQUk7UUFDSixXQUFXO1FBQ1gsTUFBTTtRQUNOLE1BQU0sRUFBRSxLQUFLO1FBQ2IsY0FBYyxFQUFFLEtBQUs7S0FDdEIsQ0FBQTtJQUVELFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtJQUNyQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUE7SUFDbkMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRWIsR0FBRyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRTFELE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUV6RCxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBRSxHQUFnQztJQUMvQyxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsR0FBRyxHQUFHLENBQUE7SUFFL0UsTUFBTSxNQUFNLEdBQUcsYUFBYTtRQUMxQixDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDOUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUE7SUFFZCxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3ZDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUUzQixNQUFNLE1BQU0sR0FBRztRQUNiLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUNyQixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07UUFDbEIsT0FBTyxFQUFFLElBQUk7S0FDZCxDQUFBO0lBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUU7UUFDMUIsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQTtRQUV6QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHO1lBQ3BCLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQUUsU0FBUTtTQUFFO1FBRWpFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2pCLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0tBQ3ZCO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7SUFDaEQsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7SUFFaEQsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNO1FBQzdDLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNO1FBQ3JDLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUE7SUFFaEMsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUNmLFVBQVUsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLFVBQVUsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUVuQyxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBRSxZQUFZO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtJQUVqQixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUN4RCxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUVoRCxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLEtBQUssRUFBRTtZQUFFLFNBQVE7U0FBRTtRQUV0RCxNQUFNLEtBQUssR0FBRztZQUNaLE9BQU87WUFDUCxPQUFPO1lBQ1AsS0FBSztTQUNOLENBQUE7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0tBQ25CO0lBRUQsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUU7SUFDaEUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsV0FBVyxDQUFBO0lBQ3JELE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FDM0I7UUFDRSxXQUFXO1FBQ1gsWUFBWTtRQUNaLE9BQU87UUFDUCxNQUFNO1FBQ04sS0FBSztRQUNMLFVBQVUsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJO1FBQ3ZDLElBQUksRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNuQyxNQUFNLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNO1FBQ3BDLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLGFBQWE7S0FDZCxDQUFDLENBQUE7SUFFSixXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUE7SUFFN0MsMkVBQTJFO0lBQzNFLHVCQUF1QjtJQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUU7UUFDeEQsT0FBTyxLQUFLLENBQUE7S0FDYjtBQUNILENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBRSxHQUFHO0lBQ3JCLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsQ0FBQTtJQUM1QyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQTtJQUUzQyxJQUFJLFFBQVEsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7UUFDekMsT0FBTTtLQUNQO0lBRUQsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFBO0lBRXJCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFO1FBQzFCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2pCLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFBO1FBRWxDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUU3RCxJQUFJLFNBQVMsS0FBSyxLQUFLLEVBQUU7WUFDdkIsT0FBTyxLQUFLLENBQUE7U0FDYjtRQUVELGlEQUFpRDtRQUNqRCxJQUFJLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQy9DLGdEQUFnRDtZQUNoRCxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1lBQ3pDLFNBQVMsR0FBRyxJQUFJLENBQUE7U0FDakI7S0FDRjtBQUNILENBQUM7QUFFRCxTQUFTLElBQUksQ0FBRSxHQUFHO0lBQ2hCLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUE7SUFDM0IsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUE7SUFFM0MsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7UUFDN0IsT0FBTTtLQUNQO0lBRUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLE1BQU07UUFDTixZQUFZLEVBQUUsV0FBVyxDQUFDLE1BQU07UUFDaEMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxPQUFPO0tBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFFUCxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFbEIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUU7UUFDMUIsV0FBVyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7UUFFekIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtZQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1NBQUU7S0FDNUQ7SUFFRCxHQUFHLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFBO0FBQ3pDLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBRSxHQUFHO0lBQ3JCLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFBO0lBQ2xDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxTQUFTLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUE7SUFDekQsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQTtJQUMvRCxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUE7SUFDcEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQTtJQUU3QixJQUFJLEtBQUssS0FBSyxPQUFPLEVBQUU7UUFDckIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtLQUN2RDtJQUVELEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7UUFDbkYsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQU0sS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUM3QixTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQzdCLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFDN0IsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQTtLQUM5QjtBQUNILENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRTtJQUM1RCxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQTtJQUU3RCxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7UUFDckYsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUMzQixTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQzNCLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFDN0IsU0FBUyxDQUFDLE1BQU0sQ0FBQyxD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QUFDLENBQUE7UUFFbEIsOEJBQThCO1FBQzlCLFFBQVEsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFBO1FBQzdCLFFBQVEsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFBO0tBQzVCO0lBRUQsT0FBTyxRQUFRLENBQUE7QUFDakIsQ0FBQztBQUVELGVBQWU7SUFDYixPQUFPO0lBQ1AsUUFBUTtJQUNSLE1BQU07SUFDTixhQUFhO0lBQ2IsS0FBSztJQUNMLFVBQVU7SUFDVixTQUFTO0lBQ1QsSUFBSTtJQUNKLFFBQVE7SUFDUixlQUFlO0lBQ2YsYUFBYTtJQUNiLFlBQVk7Q0FDYixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2NvcGUgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJ1xuaW1wb3J0IGV4dGVuZCBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9leHRlbmQnXG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJyB7XG4gIGludGVyZmFjZSBTY29wZSB7XG4gICAgbW9kaWZpZXJzPzogYW55XG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3Rpb24nIHtcbiAgaW50ZXJmYWNlIEludGVyYWN0aW9uIHtcbiAgICBtb2RpZmllcnM/OiBhbnlcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9kZWZhdWx0T3B0aW9ucycge1xuICBpbnRlcmZhY2UgUGVyQWN0aW9uRGVmYXVsdHMge1xuICAgIG1vZGlmaWVycz86IGFueVtdXG4gIH1cbiAgaW50ZXJmYWNlIE9wdGlvbnMge1xuICAgIGRyYWc/OiBJbnRlcmFjdC5EcmFnZ2FibGVPcHRpb25zXG4gICAgbW9kaWZpZXJzPzogYW55W11cbiAgfVxufVxuXG5mdW5jdGlvbiBpbnN0YWxsIChzY29wZTogU2NvcGUpIHtcbiAgY29uc3Qge1xuICAgIGludGVyYWN0aW9ucyxcbiAgfSA9IHNjb3BlXG5cbiAgc2NvcGUuZGVmYXVsdHMucGVyQWN0aW9uLm1vZGlmaWVycyA9IFtdXG4gIHNjb3BlLm1vZGlmaWVycyA9IHt9XG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ25ldycsIChpbnRlcmFjdGlvbikgPT4ge1xuICAgIGludGVyYWN0aW9uLm1vZGlmaWVycyA9IHtcbiAgICAgIHN0YXJ0T2Zmc2V0OiB7IGxlZnQ6IDAsIHJpZ2h0OiAwLCB0b3A6IDAsIGJvdHRvbTogMCB9LFxuICAgICAgb2Zmc2V0cyAgICA6IHt9LFxuICAgICAgc3RhdGVzICAgOiBudWxsLFxuICAgICAgcmVzdWx0ICAgICA6IG51bGwsXG4gICAgfVxuICB9KVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdiZWZvcmUtYWN0aW9uLXN0YXJ0JywgKGFyZykgPT4ge1xuICAgIHN0YXJ0KGFyZyBhcyBhbnksIGFyZy5pbnRlcmFjdGlvbi5jb29yZHMuc3RhcnQucGFnZSwgc2NvcGUubW9kaWZpZXJzKVxuICB9KVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tcmVzdW1lJywgKGFyZykgPT4ge1xuICAgIGJlZm9yZU1vdmUoYXJnIGFzIGFueSlcbiAgICBzdGFydChhcmcgYXMgYW55LCBhcmcuaW50ZXJhY3Rpb24uY29vcmRzLmN1ci5wYWdlLCBzY29wZS5tb2RpZmllcnMpXG4gIH0pXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2JlZm9yZS1hY3Rpb24tbW92ZScsIGJlZm9yZU1vdmUpXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdiZWZvcmUtYWN0aW9uLWVuZCcsIGJlZm9yZUVuZClcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYmVmb3JlLWFjdGlvbi1zdGFydCcsIHNldENvb3JkcylcbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2JlZm9yZS1hY3Rpb24tbW92ZScsIHNldENvb3JkcylcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYWZ0ZXItYWN0aW9uLXN0YXJ0JywgcmVzdG9yZUNvb3JkcyBhcyBhbnkpXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhZnRlci1hY3Rpb24tbW92ZScsIHJlc3RvcmVDb29yZHMgYXMgYW55KVxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignc3RvcCcsIHN0b3ApXG59XG5cbmZ1bmN0aW9uIHN0YXJ0QWxsIChhcmcpIHtcbiAgZm9yIChjb25zdCBzdGF0ZSBvZiBhcmcuc3RhdGVzKSB7XG4gICAgaWYgKHN0YXRlLm1ldGhvZHMuc3RhcnQpIHtcbiAgICAgIGFyZy5zdGF0ZSA9IHN0YXRlXG4gICAgICBzdGF0ZS5tZXRob2RzLnN0YXJ0KGFyZylcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UmVjdE9mZnNldCAocmVjdCwgY29vcmRzKSB7XG4gIHJldHVybiByZWN0XG4gICAgPyB7XG4gICAgICBsZWZ0ICA6IGNvb3Jkcy54IC0gcmVjdC5sZWZ0LFxuICAgICAgdG9wICAgOiBjb29yZHMueSAtIHJlY3QudG9wLFxuICAgICAgcmlnaHQgOiByZWN0LnJpZ2h0ICAtIGNvb3Jkcy54LFxuICAgICAgYm90dG9tOiByZWN0LmJvdHRvbSAtIGNvb3Jkcy55LFxuICAgIH1cbiAgICA6IHtcbiAgICAgIGxlZnQgIDogMCxcbiAgICAgIHRvcCAgIDogMCxcbiAgICAgIHJpZ2h0IDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHN0YXJ0IChcbiAgeyBpbnRlcmFjdGlvbiwgcGhhc2UgfTogSW50ZXJhY3QuU2lnbmFsQXJnLFxuICBwYWdlQ29vcmRzOiBJbnRlcmFjdC5Qb2ludCxcbiAgcmVnaXN0ZXJlZE1vZGlmaWVycyxcbikge1xuICBjb25zdCB7IHRhcmdldDogaW50ZXJhY3RhYmxlLCBlbGVtZW50IH0gPSBpbnRlcmFjdGlvblxuICBjb25zdCBtb2RpZmllckxpc3QgPSBnZXRNb2RpZmllckxpc3QoaW50ZXJhY3Rpb24sIHJlZ2lzdGVyZWRNb2RpZmllcnMpXG4gIGNvbnN0IHN0YXRlcyA9IHByZXBhcmVTdGF0ZXMobW9kaWZpZXJMaXN0KVxuXG4gIGNvbnN0IHJlY3QgPSBleHRlbmQoe30sIGludGVyYWN0YWJsZS5nZXRSZWN0KGVsZW1lbnQpKSBhcyAgSW50ZXJhY3QuUmVjdCAmIEludGVyYWN0LlJlY3QyXG5cbiAgaWYgKCEoJ3dpZHRoJyAgaW4gcmVjdCkpIHsgcmVjdC53aWR0aCAgPSByZWN0LnJpZ2h0ICAtIHJlY3QubGVmdCB9XG4gIGlmICghKCdoZWlnaHQnIGluIHJlY3QpKSB7IHJlY3QuaGVpZ2h0ID0gcmVjdC5ib3R0b20gLSByZWN0LnRvcCAgfVxuXG4gIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gZ2V0UmVjdE9mZnNldChyZWN0LCBwYWdlQ29vcmRzKVxuXG4gIGludGVyYWN0aW9uLm1vZGlmaWVycy5zdGFydE9mZnNldCA9IHN0YXJ0T2Zmc2V0XG4gIGludGVyYWN0aW9uLm1vZGlmaWVycy5zdGFydERlbHRhID0geyB4OiAwLCB5OiAwIH1cblxuICBjb25zdCBhcmc6IFBhcnRpYWw8SW50ZXJhY3QuU2lnbmFsQXJnPiA9IHtcbiAgICBpbnRlcmFjdGlvbixcbiAgICBpbnRlcmFjdGFibGUsXG4gICAgZWxlbWVudCxcbiAgICBwYWdlQ29vcmRzLFxuICAgIHBoYXNlLFxuICAgIHJlY3QsXG4gICAgc3RhcnRPZmZzZXQsXG4gICAgc3RhdGVzLFxuICAgIHByZUVuZDogZmFsc2UsXG4gICAgcmVxdWlyZUVuZE9ubHk6IGZhbHNlLFxuICB9XG5cbiAgaW50ZXJhY3Rpb24ubW9kaWZpZXJzLnN0YXRlcyA9IHN0YXRlc1xuICBpbnRlcmFjdGlvbi5tb2RpZmllcnMucmVzdWx0ID0gbnVsbFxuICBzdGFydEFsbChhcmcpXG5cbiAgYXJnLnBhZ2VDb29yZHMgPSBleHRlbmQoe30sIGludGVyYWN0aW9uLmNvb3Jkcy5zdGFydC5wYWdlKVxuXG4gIGNvbnN0IHJlc3VsdCA9IGludGVyYWN0aW9uLm1vZGlmaWVycy5yZXN1bHQgPSBzZXRBbGwoYXJnKVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gc2V0QWxsIChhcmc6IFBhcnRpYWw8SW50ZXJhY3QuU2lnbmFsQXJnPikge1xuICBjb25zdCB7IGludGVyYWN0aW9uLCBwaGFzZSwgcHJlRW5kLCByZXF1aXJlRW5kT25seSwgcmVjdCwgc2tpcE1vZGlmaWVycyB9ID0gYXJnXG5cbiAgY29uc3Qgc3RhdGVzID0gc2tpcE1vZGlmaWVyc1xuICAgID8gYXJnLnN0YXRlcy5zbGljZShpbnRlcmFjdGlvbi5tb2RpZmllcnMuc2tpcClcbiAgICA6IGFyZy5zdGF0ZXNcblxuICBhcmcuY29vcmRzID0gZXh0ZW5kKHt9LCBhcmcucGFnZUNvb3JkcylcbiAgYXJnLnJlY3QgPSBleHRlbmQoe30sIHJlY3QpXG5cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIGRlbHRhOiB7IHg6IDAsIHk6IDAgfSxcbiAgICBjb29yZHM6IGFyZy5jb29yZHMsXG4gICAgY2hhbmdlZDogdHJ1ZSxcbiAgfVxuXG4gIGZvciAoY29uc3Qgc3RhdGUgb2Ygc3RhdGVzKSB7XG4gICAgY29uc3QgeyBvcHRpb25zIH0gPSBzdGF0ZVxuXG4gICAgaWYgKCFzdGF0ZS5tZXRob2RzLnNldCB8fFxuICAgICAgIXNob3VsZERvKG9wdGlvbnMsIHByZUVuZCwgcmVxdWlyZUVuZE9ubHksIHBoYXNlKSkgeyBjb250aW51ZSB9XG5cbiAgICBhcmcuc3RhdGUgPSBzdGF0ZVxuICAgIHN0YXRlLm1ldGhvZHMuc2V0KGFyZylcbiAgfVxuXG4gIHJlc3VsdC5kZWx0YS54ID0gYXJnLmNvb3Jkcy54IC0gYXJnLnBhZ2VDb29yZHMueFxuICByZXN1bHQuZGVsdGEueSA9IGFyZy5jb29yZHMueSAtIGFyZy5wYWdlQ29vcmRzLnlcblxuICBjb25zdCBwcmV2Q29vcmRzID0gaW50ZXJhY3Rpb24ubW9kaWZpZXJzLnJlc3VsdFxuICAgID8gaW50ZXJhY3Rpb24ubW9kaWZpZXJzLnJlc3VsdC5jb29yZHNcbiAgICA6IGludGVyYWN0aW9uLmNvb3Jkcy5wcmV2LnBhZ2VcblxuICByZXN1bHQuY2hhbmdlZCA9IChcbiAgICBwcmV2Q29vcmRzLnggIT09IHJlc3VsdC5jb29yZHMueCB8fFxuICAgIHByZXZDb29yZHMueSAhPT0gcmVzdWx0LmNvb3Jkcy55KVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVN0YXRlcyAobW9kaWZpZXJMaXN0KSB7XG4gIGNvbnN0IHN0YXRlcyA9IFtdXG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1vZGlmaWVyTGlzdC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCB7IG9wdGlvbnMsIG1ldGhvZHMgfSA9IG1vZGlmaWVyTGlzdFtpbmRleF1cblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW5hYmxlZCA9PT0gZmFsc2UpIHsgY29udGludWUgfVxuXG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICBvcHRpb25zLFxuICAgICAgbWV0aG9kcyxcbiAgICAgIGluZGV4LFxuICAgIH1cblxuICAgIHN0YXRlcy5wdXNoKHN0YXRlKVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlc1xufVxuXG5mdW5jdGlvbiBiZWZvcmVNb3ZlICh7IGludGVyYWN0aW9uLCBwaGFzZSwgcHJlRW5kLCBza2lwTW9kaWZpZXJzIH0pOiB2b2lkIHwgZmFsc2Uge1xuICBjb25zdCB7IHRhcmdldDogaW50ZXJhY3RhYmxlLCBlbGVtZW50IH0gPSBpbnRlcmFjdGlvblxuICBjb25zdCBtb2RpZmllclJlc3VsdCA9IHNldEFsbChcbiAgICB7XG4gICAgICBpbnRlcmFjdGlvbixcbiAgICAgIGludGVyYWN0YWJsZSxcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwcmVFbmQsXG4gICAgICBwaGFzZSxcbiAgICAgIHBhZ2VDb29yZHM6IGludGVyYWN0aW9uLmNvb3Jkcy5jdXIucGFnZSxcbiAgICAgIHJlY3Q6IGludGVyYWN0YWJsZS5nZXRSZWN0KGVsZW1lbnQpLFxuICAgICAgc3RhdGVzOiBpbnRlcmFjdGlvbi5tb2RpZmllcnMuc3RhdGVzLFxuICAgICAgcmVxdWlyZUVuZE9ubHk6IGZhbHNlLFxuICAgICAgc2tpcE1vZGlmaWVycyxcbiAgICB9KVxuXG4gIGludGVyYWN0aW9uLm1vZGlmaWVycy5yZXN1bHQgPSBtb2RpZmllclJlc3VsdFxuXG4gIC8vIGRvbid0IGZpcmUgYW4gYWN0aW9uIG1vdmUgaWYgYSBtb2RpZmllciB3b3VsZCBrZWVwIHRoZSBldmVudCBpbiB0aGUgc2FtZVxuICAvLyBjb3JkaW5hdGVzIGFzIGJlZm9yZVxuICBpZiAoIW1vZGlmaWVyUmVzdWx0LmNoYW5nZWQgJiYgaW50ZXJhY3Rpb24uaW50ZXJhY3RpbmcoKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGJlZm9yZUVuZCAoYXJnKTogdm9pZCB8IGZhbHNlIHtcbiAgY29uc3QgeyBpbnRlcmFjdGlvbiwgZXZlbnQsIG5vUHJlRW5kIH0gPSBhcmdcbiAgY29uc3Qgc3RhdGVzID0gaW50ZXJhY3Rpb24ubW9kaWZpZXJzLnN0YXRlc1xuXG4gIGlmIChub1ByZUVuZCB8fCAhc3RhdGVzIHx8ICFzdGF0ZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBsZXQgZGlkUHJlRW5kID0gZmFsc2VcblxuICBmb3IgKGNvbnN0IHN0YXRlIG9mIHN0YXRlcykge1xuICAgIGFyZy5zdGF0ZSA9IHN0YXRlXG4gICAgY29uc3QgeyBvcHRpb25zLCBtZXRob2RzIH0gPSBzdGF0ZVxuXG4gICAgY29uc3QgZW5kUmVzdWx0ID0gbWV0aG9kcy5iZWZvcmVFbmQgJiYgbWV0aG9kcy5iZWZvcmVFbmQoYXJnKVxuXG4gICAgaWYgKGVuZFJlc3VsdCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIGlmIHRoZSBlbmRPbmx5IG9wdGlvbiBpcyB0cnVlIGZvciBhbnkgbW9kaWZpZXJcbiAgICBpZiAoIWRpZFByZUVuZCAmJiBzaG91bGREbyhvcHRpb25zLCB0cnVlLCB0cnVlKSkge1xuICAgICAgLy8gZmlyZSBhIG1vdmUgZXZlbnQgYXQgdGhlIG1vZGlmaWVkIGNvb3JkaW5hdGVzXG4gICAgICBpbnRlcmFjdGlvbi5tb3ZlKHsgZXZlbnQsIHByZUVuZDogdHJ1ZSB9KVxuICAgICAgZGlkUHJlRW5kID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdG9wIChhcmcpIHtcbiAgY29uc3QgeyBpbnRlcmFjdGlvbiB9ID0gYXJnXG4gIGNvbnN0IHN0YXRlcyA9IGludGVyYWN0aW9uLm1vZGlmaWVycy5zdGF0ZXNcblxuICBpZiAoIXN0YXRlcyB8fCAhc3RhdGVzLmxlbmd0aCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgbW9kaWZpZXJBcmcgPSBleHRlbmQoe1xuICAgIHN0YXRlcyxcbiAgICBpbnRlcmFjdGFibGU6IGludGVyYWN0aW9uLnRhcmdldCxcbiAgICBlbGVtZW50OiBpbnRlcmFjdGlvbi5lbGVtZW50LFxuICB9LCBhcmcpXG5cbiAgcmVzdG9yZUNvb3JkcyhhcmcpXG5cbiAgZm9yIChjb25zdCBzdGF0ZSBvZiBzdGF0ZXMpIHtcbiAgICBtb2RpZmllckFyZy5zdGF0ZSA9IHN0YXRlXG5cbiAgICBpZiAoc3RhdGUubWV0aG9kcy5zdG9wKSB7IHN0YXRlLm1ldGhvZHMuc3RvcChtb2RpZmllckFyZykgfVxuICB9XG5cbiAgYXJnLmludGVyYWN0aW9uLm1vZGlmaWVycy5zdGF0ZXMgPSBudWxsXG59XG5cbmZ1bmN0aW9uIHNldENvb3JkcyAoYXJnKSB7XG4gIGNvbnN0IHsgaW50ZXJhY3Rpb24sIHBoYXNlIH0gPSBhcmdcbiAgY29uc3QgY3VyQ29vcmRzID0gYXJnLmN1ckNvb3JkcyB8fCBpbnRlcmFjdGlvbi5jb29yZHMuY3VyXG4gIGNvbnN0IHN0YXJ0Q29vcmRzID0gYXJnLnN0YXJ0Q29vcmRzIHx8IGludGVyYWN0aW9uLmNvb3Jkcy5zdGFydFxuICBjb25zdCB7IHJlc3VsdCwgc3RhcnREZWx0YSB9ID0gaW50ZXJhY3Rpb24ubW9kaWZpZXJzXG4gIGNvbnN0IGN1ckRlbHRhID0gcmVzdWx0LmRlbHRhXG5cbiAgaWYgKHBoYXNlID09PSAnc3RhcnQnKSB7XG4gICAgZXh0ZW5kKGludGVyYWN0aW9uLm1vZGlmaWVycy5zdGFydERlbHRhLCByZXN1bHQuZGVsdGEpXG4gIH1cblxuICBmb3IgKGNvbnN0IFtjb29yZHNTZXQsIGRlbHRhXSBvZiBbW3N0YXJ0Q29vcmRzLCBzdGFydERlbHRhXSwgW2N1ckNvb3JkcywgY3VyRGVsdGFdXSkge1xuICAgIGNvb3Jkc1NldC5wYWdlLnggICArPSBkZWx0YS54XG4gICAgY29vcmRzU2V0LnBhZ2UueSAgICs9IGRlbHRhLnlcbiAgICBjb29yZHNTZXQuY2xpZW50LnggKz0gZGVsdGEueFxuICAgIGNvb3Jkc1NldC5jbGllbnQueSArPSBkZWx0YS55XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzdG9yZUNvb3JkcyAoeyBpbnRlcmFjdGlvbjogeyBjb29yZHMsIG1vZGlmaWVycyB9IH0pIHtcbiAgY29uc3QgeyBzdGFydERlbHRhLCByZXN1bHQ6IHsgZGVsdGE6IGN1ckRlbHRhIH0gfSA9IG1vZGlmaWVyc1xuXG4gIGZvciAoY29uc3QgW2Nvb3Jkc1NldCwgZGVsdGFdIG9mIFtbY29vcmRzLnN0YXJ0LCBzdGFydERlbHRhXSwgW2Nvb3Jkcy5jdXIsIGN1ckRlbHRhXV0pIHtcbiAgICBjb29yZHNTZXQucGFnZS54IC09IGRlbHRhLnhcbiAgICBjb29yZHNTZXQucGFnZS55IC09IGRlbHRhLnlcbiAgICBjb29yZHNTZXQuY2xpZW50LnggLT0gZGVsdGEueFxuICAgIGNvb3Jkc1NldC5jbGllbnQueSAtPSBkZWx0YS55XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TW9kaWZpZXJMaXN0IChpbnRlcmFjdGlvbiwgcmVnaXN0ZXJlZE1vZGlmaWVycykge1xuICBjb25zdCBhY3Rpb25PcHRpb25zID0gaW50ZXJhY3Rpb24udGFyZ2V0Lm9wdGlvbnNbaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZV1cbiAgY29uc3QgYWN0aW9uTW9kaWZpZXJzID0gYWN0aW9uT3B0aW9ucy5tb2RpZmllcnNcblxuICBpZiAoYWN0aW9uTW9kaWZpZXJzICYmIGFjdGlvbk1vZGlmaWVycy5sZW5ndGgpIHtcbiAgICByZXR1cm4gYWN0aW9uTW9kaWZpZXJzLm1hcCgobW9kaWZpZXIpID0+IHtcbiAgICAgIGlmICghbW9kaWZpZXIubWV0aG9kcyAmJiBtb2RpZmllci50eXBlKSB7XG4gICAgICAgIHJldHVybiByZWdpc3RlcmVkTW9kaWZpZXJzW21vZGlmaWVyLnR5cGVdKG1vZGlmaWVyKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbW9kaWZpZXJcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIFsnc25hcCcsICdzbmFwU2l6ZScsICdzbmFwRWRnZXMnLCAncmVzdHJpY3QnLCAncmVzdHJpY3RFZGdlcycsICdyZXN0cmljdFNpemUnXVxuICAgIC5tYXAoKHR5cGUpID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBhY3Rpb25PcHRpb25zW3R5cGVdXG5cbiAgICAgIHJldHVybiBvcHRpb25zICYmIG9wdGlvbnMuZW5hYmxlZCAmJiB7XG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIG1ldGhvZHM6IG9wdGlvbnMuX21ldGhvZHMsXG4gICAgICB9XG4gICAgfSlcbiAgICAuZmlsdGVyKChtKSA9PiAhIW0pXG59XG5cbmZ1bmN0aW9uIHNob3VsZERvIChvcHRpb25zLCBwcmVFbmQ/OiBib29sZWFuLCByZXF1aXJlRW5kT25seT86IGJvb2xlYW4sIHBoYXNlPzogc3RyaW5nKSB7XG4gIHJldHVybiBvcHRpb25zXG4gICAgPyBvcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlICYmXG4gICAgICAocHJlRW5kIHx8ICFvcHRpb25zLmVuZE9ubHkpICYmXG4gICAgICAoIXJlcXVpcmVFbmRPbmx5IHx8IG9wdGlvbnMuZW5kT25seSkgJiZcbiAgICAgIChvcHRpb25zLnNldFN0YXJ0IHx8IHBoYXNlICE9PSAnc3RhcnQnKVxuICAgIDogIXJlcXVpcmVFbmRPbmx5XG59XG5cbmZ1bmN0aW9uIG1ha2VNb2RpZmllciAobW9kdWxlLCBuYW1lKSB7XG4gIGNvbnN0IHsgZGVmYXVsdHMgfSA9IG1vZHVsZVxuICBjb25zdCBtZXRob2RzID0ge1xuICAgIHN0YXJ0OiBtb2R1bGUuc3RhcnQsXG4gICAgc2V0OiBtb2R1bGUuc2V0LFxuICAgIGJlZm9yZUVuZDogbW9kdWxlLmJlZm9yZUVuZCxcbiAgICBzdG9wOiBtb2R1bGUuc3RvcCxcbiAgfVxuXG4gIGNvbnN0IG1vZGlmaWVyID0gKG9wdGlvbnMpID0+IHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuXG4gICAgLy8gYWRkIG1pc3NpbmcgZGVmYXVsdHMgdG8gb3B0aW9uc1xuICAgIG9wdGlvbnMuZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2VcblxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBkZWZhdWx0cykge1xuICAgICAgaWYgKCEocHJvcCBpbiBvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zW3Byb3BdID0gZGVmYXVsdHNbcHJvcF1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBvcHRpb25zLCBtZXRob2RzIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICBtb2RpZmllcixcbiAgICAgICduYW1lJyxcbiAgICAgIHsgdmFsdWU6IG5hbWUgfSlcblxuICAgIC8vIGZvciBiYWNrd3JhZHMgY29tcGF0aWJpbGl0eVxuICAgIG1vZGlmaWVyLl9kZWZhdWx0cyA9IGRlZmF1bHRzXG4gICAgbW9kaWZpZXIuX21ldGhvZHMgPSBtZXRob2RzXG4gIH1cblxuICByZXR1cm4gbW9kaWZpZXJcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpbnN0YWxsLFxuICBzdGFydEFsbCxcbiAgc2V0QWxsLFxuICBwcmVwYXJlU3RhdGVzLFxuICBzdGFydCxcbiAgYmVmb3JlTW92ZSxcbiAgYmVmb3JlRW5kLFxuICBzdG9wLFxuICBzaG91bGREbyxcbiAgZ2V0TW9kaWZpZXJMaXN0LFxuICBnZXRSZWN0T2Zmc2V0LFxuICBtYWtlTW9kaWZpZXIsXG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUE7QUFvQjdDLFNBQVMsT0FBTyxDQUFFLEtBQVk7SUFDNUIsTUFBTSxFQUNKLFlBQVksR0FDYixHQUFHLEtBQUssQ0FBQTtJQUVULEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUE7SUFDdkMsS0FBSyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUE7SUFFcEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFO1FBQ2pELFdBQVcsQ0FBQyxTQUFTLEdBQUc7WUFDdEIsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtZQUNyRCxPQUFPLEVBQU0sRUFBRTtZQUNmLE1BQU0sRUFBSyxJQUFJO1lBQ2YsTUFBTSxFQUFPLElBQUk7U0FDbEIsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUYsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNyRCxLQUFLLENBQUMsR0FBVSxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3ZFLENBQUMsQ0FBQyxDQUFBO0lBRUYsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDL0MsVUFBVSxDQUFDLEdBQVUsQ0FBQyxDQUFBO1FBQ3RCLEtBQUssQ0FBQyxHQUFVLEVBQUUsR0FBRyxDQUFDLFdB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QUNSLE1BQU0sRUFDTixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBRWxCLDhCQUE4QjtRQUM5QixRQUFRLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQTtRQUM3QixRQUFRLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQTtLQUM1QjtJQUVELE9BQU8sUUFBUSxDQUFBO0FBQ2pCLENBQUM7QUFFRCxlQUFlO0lBQ2IsT0FBTztJQUNQLFFBQVE7SUFDUixNQUFNO0lBQ04sYUFBYTtJQUNiLEtBQUs7SUFDTCxVQUFVO0lBQ1YsU0FBUztJQUNULElBQUk7SUFDSixRQUFRO0lBQ1IsZUFBZTtJQUNmLGFBQWE7SUFDYixZQUFZO0NBQ2IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjb3BlIH0gZnJvbSAnQGludGVyYWN0anMvY29yZS9zY29wZSdcbmltcG9ydCBleHRlbmQgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvZXh0ZW5kJ1xuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9zY29wZScge1xuICBpbnRlcmZhY2UgU2NvcGUge1xuICAgIG1vZGlmaWVycz86IGFueVxuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0aW9uJyB7XG4gIGludGVyZmFjZSBJbnRlcmFjdGlvbiB7XG4gICAgbW9kaWZpZXJzPzogYW55XG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvZGVmYXVsdE9wdGlvbnMnIHtcbiAgaW50ZXJmYWNlIFBlckFjdGlvbkRlZmF1bHRzIHtcbiAgICBtb2RpZmllcnM/OiBhbnlbXVxuICB9XG59XG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlOiBTY29wZSkge1xuICBjb25zdCB7XG4gICAgaW50ZXJhY3Rpb25zLFxuICB9ID0gc2NvcGVcblxuICBzY29wZS5kZWZhdWx0cy5wZXJBY3Rpb24ubW9kaWZpZXJzID0gW11cbiAgc2NvcGUubW9kaWZpZXJzID0ge31cblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignbmV3JywgKHsgaW50ZXJhY3Rpb24gfSkgPT4ge1xuICAgIGludGVyYWN0aW9uLm1vZGlmaWVycyA9IHtcbiAgICAgIHN0YXJ0T2Zmc2V0OiB7IGxlZnQ6IDAsIHJpZ2h0OiAwLCB0b3A6IDAsIGJvdHRvbTogMCB9LFxuICAgICAgb2Zmc2V0cyAgICA6IHt9LFxuICAgICAgc3RhdGVzICAgOiBudWxsLFxuICAgICAgcmVzdWx0ICAgICA6IG51bGwsXG4gICAgfVxuICB9KVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdiZWZvcmUtYWN0aW9uLXN0YXJ0JywgKGFyZykgPT4ge1xuICAgIHN0YXJ0KGFyZyBhcyBhbnksIGFyZy5pbnRlcmFjdGlvbi5jb29yZHMuc3RhcnQucGFnZSwgc2NvcGUubW9kaWZpZXJzKVxuICB9KVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tcmVzdW1lJywgKGFyZykgPT4ge1xuICAgIGJlZm9yZU1vdmUoYXJnIGFzIGFueSlcbiAgICBzdGFydChhcmcgYXMgYW55LCBhcmcuaW50ZXJhY3Rpb24uY29vcmRzLmN1ci5wYWdlLCBzY29wZS5tb2RpZmllcnMpXG4gIH0pXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2JlZm9yZS1hY3Rpb24tbW92ZScsIGJlZm9yZU1vdmUpXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdiZWZvcmUtYWN0aW9uLWVuZCcsIGJlZm9yZUVuZClcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYmVmb3JlLWFjdGlvbi1zdGFydCcsIHNldENvb3JkcylcbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2JlZm9yZS1hY3Rpb24tbW92ZScsIHNldENvb3JkcylcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYWZ0ZXItYWN0aW9uLXN0YXJ0JywgcmVzdG9yZUNvb3JkcyBhcyBhbnkpXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhZnRlci1hY3Rpb24tbW92ZScsIHJlc3RvcmVDb29yZHMgYXMgYW55KVxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignc3RvcCcsIHN0b3ApXG59XG5cbmZ1bmN0aW9uIHN0YXJ0QWxsIChhcmcpIHtcbiAgZm9yIChjb25zdCBzdGF0ZSBvZiBhcmcuc3RhdGVzKSB7XG4gICAgaWYgKHN0YXRlLm1ldGhvZHMuc3RhcnQpIHtcbiAgICAgIGFyZy5zdGF0ZSA9IHN0YXRlXG4gICAgICBzdGF0ZS5tZXRob2RzLnN0YXJ0KGFyZylcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UmVjdE9mZnNldCAocmVjdCwgY29vcmRzKSB7XG4gIHJldHVybiByZWN0XG4gICAgPyB7XG4gICAgICBsZWZ0ICA6IGNvb3Jkcy54IC0gcmVjdC5sZWZ0LFxuICAgICAgdG9wICAgOiBjb29yZHMueSAtIHJlY3QudG9wLFxuICAgICAgcmlnaHQgOiByZWN0LnJpZ2h0ICAtIGNvb3Jkcy54LFxuICAgICAgYm90dG9tOiByZWN0LmJvdHRvbSAtIGNvb3Jkcy55LFxuICAgIH1cbiAgICA6IHtcbiAgICAgIGxlZnQgIDogMCxcbiAgICAgIHRvcCAgIDogMCxcbiAgICAgIHJpZ2h0IDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHN0YXJ0IChcbiAgeyBpbnRlcmFjdGlvbiwgcGhhc2UgfTogSW50ZXJhY3QuU2lnbmFsQXJnLFxuICBwYWdlQ29vcmRzOiBJbnRlcmFjdC5Qb2ludCxcbiAgcmVnaXN0ZXJlZE1vZGlmaWVycyxcbikge1xuICBjb25zdCB7IHRhcmdldDogaW50ZXJhY3RhYmxlLCBlbGVtZW50IH0gPSBpbnRlcmFjdGlvblxuICBjb25zdCBtb2RpZmllckxpc3QgPSBnZXRNb2RpZmllckxpc3QoaW50ZXJhY3Rpb24sIHJlZ2lzdGVyZWRNb2RpZmllcnMpXG4gIGNvbnN0IHN0YXRlcyA9IHByZXBhcmVTdGF0ZXMobW9kaWZpZXJMaXN0KVxuXG4gIGNvbnN0IHJlY3QgPSBleHRlbmQoe30sIGludGVyYWN0YWJsZS5nZXRSZWN0KGVsZW1lbnQpKSBhcyAgSW50ZXJhY3QuUmVjdCAmIEludGVyYWN0LlJlY3QyXG5cbiAgaWYgKCEoJ3dpZHRoJyAgaW4gcmVjdCkpIHsgcmVjdC53aWR0aCAgPSByZWN0LnJpZ2h0ICAtIHJlY3QubGVmdCB9XG4gIGlmICghKCdoZWlnaHQnIGluIHJlY3QpKSB7IHJlY3QuaGVpZ2h0ID0gcmVjdC5ib3R0b20gLSByZWN0LnRvcCAgfVxuXG4gIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gZ2V0UmVjdE9mZnNldChyZWN0LCBwYWdlQ29vcmRzKVxuXG4gIGludGVyYWN0aW9uLm1vZGlmaWVycy5zdGFydE9mZnNldCA9IHN0YXJ0T2Zmc2V0XG4gIGludGVyYWN0aW9uLm1vZGlmaWVycy5zdGFydERlbHRhID0geyB4OiAwLCB5OiAwIH1cblxuICBjb25zdCBhcmc6IFBhcnRpYWw8SW50ZXJhY3QuU2lnbmFsQXJnPiA9IHtcbiAgICBpbnRlcmFjdGlvbixcbiAgICBpbnRlcmFjdGFibGUsXG4gICAgZWxlbWVudCxcbiAgICBwYWdlQ29vcmRzLFxuICAgIHBoYXNlLFxuICAgIHJlY3QsXG4gICAgc3RhcnRPZmZzZXQsXG4gICAgc3RhdGVzLFxuICAgIHByZUVuZDogZmFsc2UsXG4gICAgcmVxdWlyZUVuZE9ubHk6IGZhbHNlLFxuICB9XG5cbiAgaW50ZXJhY3Rpb24ubW9kaWZpZXJzLnN0YXRlcyA9IHN0YXRlc1xuICBpbnRlcmFjdGlvbi5tb2RpZmllcnMucmVzdWx0ID0gbnVsbFxuICBzdGFydEFsbChhcmcpXG5cbiAgYXJnLnBhZ2VDb29yZHMgPSBleHRlbmQoe30sIGludGVyYWN0aW9uLmNvb3Jkcy5zdGFydC5wYWdlKVxuXG4gIGNvbnN0IHJlc3VsdCA9IGludGVyYWN0aW9uLm1vZGlmaWVycy5yZXN1bHQgPSBzZXRBbGwoYXJnKVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gc2V0QWxsIChhcmc6IFBhcnRpYWw8SW50ZXJhY3QuU2lnbmFsQXJnPikge1xuICBjb25zdCB7IGludGVyYWN0aW9uLCBwaGFzZSwgcHJlRW5kLCByZXF1aXJlRW5kT25seSwgcmVjdCwgc2tpcE1vZGlmaWVycyB9ID0gYXJnXG5cbiAgY29uc3Qgc3RhdGVzID0gc2tpcE1vZGlmaWVyc1xuICAgID8gYXJnLnN0YXRlcy5zbGljZShpbnRlcmFjdGlvbi5tb2RpZmllcnMuc2tpcClcbiAgICA6IGFyZy5zdGF0ZXNcblxuICBhcmcuY29vcmRzID0gZXh0ZW5kKHt9LCBhcmcucGFnZUNvb3JkcylcbiAgYXJnLnJlY3QgPSBleHRlbmQoe30sIHJlY3QpXG5cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIGRlbHRhOiB7IHg6IDAsIHk6IDAgfSxcbiAgICBjb29yZHM6IGFyZy5jb29yZHMsXG4gICAgY2hhbmdlZDogdHJ1ZSxcbiAgfVxuXG4gIGZvciAoY29uc3Qgc3RhdGUgb2Ygc3RhdGVzKSB7XG4gICAgY29uc3QgeyBvcHRpb25zIH0gPSBzdGF0ZVxuXG4gICAgaWYgKCFzdGF0ZS5tZXRob2RzLnNldCB8fFxuICAgICAgIXNob3VsZERvKG9wdGlvbnMsIHByZUVuZCwgcmVxdWlyZUVuZE9ubHksIHBoYXNlKSkgeyBjb250aW51ZSB9XG5cbiAgICBhcmcuc3RhdGUgPSBzdGF0ZVxuICAgIHN0YXRlLm1ldGhvZHMuc2V0KGFyZylcbiAgfVxuXG4gIHJlc3VsdC5kZWx0YS54ID0gYXJnLmNvb3Jkcy54IC0gYXJnLnBhZ2VDb29yZHMueFxuICByZXN1bHQuZGVsdGEueSA9IGFyZy5jb29yZHMueSAtIGFyZy5wYWdlQ29vcmRzLnlcblxuICBjb25zdCBwcmV2Q29vcmRzID0gaW50ZXJhY3Rpb24ubW9kaWZpZXJzLnJlc3VsdFxuICAgID8gaW50ZXJhY3Rpb24ubW9kaWZpZXJzLnJlc3VsdC5jb29yZHNcbiAgICA6IGludGVyYWN0aW9uLmNvb3Jkcy5wcmV2LnBhZ2VcblxuICByZXN1bHQuY2hhbmdlZCA9IChcbiAgICBwcmV2Q29vcmRzLnggIT09IHJlc3VsdC5jb29yZHMueCB8fFxuICAgIHByZXZDb29yZHMueSAhPT0gcmVzdWx0LmNvb3Jkcy55KVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVN0YXRlcyAobW9kaWZpZXJMaXN0KSB7XG4gIGNvbnN0IHN0YXRlcyA9IFtdXG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1vZGlmaWVyTGlzdC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCB7IG9wdGlvbnMsIG1ldGhvZHMsIG5hbWUgfSA9IG1vZGlmaWVyTGlzdFtpbmRleF1cblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW5hYmxlZCA9PT0gZmFsc2UpIHsgY29udGludWUgfVxuXG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICBvcHRpb25zLFxuICAgICAgbWV0aG9kcyxcbiAgICAgIGluZGV4LFxuICAgICAgbmFtZSxcbiAgICB9XG5cbiAgICBzdGF0ZXMucHVzaChzdGF0ZSlcbiAgfVxuXG4gIHJldHVybiBzdGF0ZXNcbn1cblxuZnVuY3Rpb24gYmVmb3JlTW92ZSAoeyBpbnRlcmFjdGlvbiwgcGhhc2UsIHByZUVuZCwgc2tpcE1vZGlmaWVycyB9KTogdm9pZCB8IGZhbHNlIHtcbiAgY29uc3QgeyB0YXJnZXQ6IGludGVyYWN0YWJsZSwgZWxlbWVudCB9ID0gaW50ZXJhY3Rpb25cbiAgY29uc3QgbW9kaWZpZXJSZXN1bHQgPSBzZXRBbGwoXG4gICAge1xuICAgICAgaW50ZXJhY3Rpb24sXG4gICAgICBpbnRlcmFjdGFibGUsXG4gICAgICBlbGVtZW50LFxuICAgICAgcHJlRW5kLFxuICAgICAgcGhhc2UsXG4gICAgICBwYWdlQ29vcmRzOiBpbnRlcmFjdGlvbi5jb29yZHMuY3VyLnBhZ2UsXG4gICAgICByZWN0OiBpbnRlcmFjdGFibGUuZ2V0UmVjdChlbGVtZW50KSxcbiAgICAgIHN0YXRlczogaW50ZXJhY3Rpb24ubW9kaWZpZXJzLnN0YXRlcyxcbiAgICAgIHJlcXVpcmVFbmRPbmx5OiBmYWxzZSxcbiAgICAgIHNraXBNb2RpZmllcnMsXG4gICAgfSlcblxuICBpbnRlcmFjdGlvbi5tb2RpZmllcnMucmVzdWx0ID0gbW9kaWZpZXJSZXN1bHRcblxuICAvLyBkb24ndCBmaXJlIGFuIGFjdGlvbiBtb3ZlIGlmIGEgbW9kaWZpZXIgd291bGQga2VlcCB0aGUgZXZlbnQgaW4gdGhlIHNhbWVcbiAgLy8gY29yZGluYXRlcyBhcyBiZWZvcmVcbiAgaWYgKCFtb2RpZmllclJlc3VsdC5jaGFuZ2VkICYmIGludGVyYWN0aW9uLmludGVyYWN0aW5nKCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBiZWZvcmVFbmQgKGFyZyk6IHZvaWQgfCBmYWxzZSB7XG4gIGNvbnN0IHsgaW50ZXJhY3Rpb24sIGV2ZW50LCBub1ByZUVuZCB9ID0gYXJnXG4gIGNvbnN0IHN0YXRlcyA9IGludGVyYWN0aW9uLm1vZGlmaWVycy5zdGF0ZXNcblxuICBpZiAobm9QcmVFbmQgfHwgIXN0YXRlcyB8fCAhc3RhdGVzLmxlbmd0aCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgbGV0IGRpZFByZUVuZCA9IGZhbHNlXG5cbiAgZm9yIChjb25zdCBzdGF0ZSBvZiBzdGF0ZXMpIHtcbiAgICBhcmcuc3RhdGUgPSBzdGF0ZVxuICAgIGNvbnN0IHsgb3B0aW9ucywgbWV0aG9kcyB9ID0gc3RhdGVcblxuICAgIGNvbnN0IGVuZFJlc3VsdCA9IG1ldGhvZHMuYmVmb3JlRW5kICYmIG1ldGhvZHMuYmVmb3JlRW5kKGFyZylcblxuICAgIGlmIChlbmRSZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgZW5kT25seSBvcHRpb24gaXMgdHJ1ZSBmb3IgYW55IG1vZGlmaWVyXG4gICAgaWYgKCFkaWRQcmVFbmQgJiYgc2hvdWxkRG8ob3B0aW9ucywgdHJ1ZSwgdHJ1ZSkpIHtcbiAgICAgIC8vIGZpcmUgYSBtb3ZlIGV2ZW50IGF0IHRoZSBtb2RpZmllZCBjb29yZGluYXRlc1xuICAgICAgaW50ZXJhY3Rpb24ubW92ZSh7IGV2ZW50LCBwcmVFbmQ6IHRydWUgfSlcbiAgICAgIGRpZFByZUVuZCA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcCAoYXJnKSB7XG4gIGNvbnN0IHsgaW50ZXJhY3Rpb24gfSA9IGFyZ1xuICBjb25zdCBzdGF0ZXMgPSBpbnRlcmFjdGlvbi5tb2RpZmllcnMuc3RhdGVzXG5cbiAgaWYgKCFzdGF0ZXMgfHwgIXN0YXRlcy5sZW5ndGgpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IG1vZGlmaWVyQXJnID0gZXh0ZW5kKHtcbiAgICBzdGF0ZXMsXG4gICAgaW50ZXJhY3RhYmxlOiBpbnRlcmFjdGlvbi50YXJnZXQsXG4gICAgZWxlbWVudDogaW50ZXJhY3Rpb24uZWxlbWVudCxcbiAgfSwgYXJnKVxuXG4gIHJlc3RvcmVDb29yZHMoYXJnKVxuXG4gIGZvciAoY29uc3Qgc3RhdGUgb2Ygc3RhdGVzKSB7XG4gICAgbW9kaWZpZXJBcmcuc3RhdGUgPSBzdGF0ZVxuXG4gICAgaWYgKHN0YXRlLm1ldGhvZHMuc3RvcCkgeyBzdGF0ZS5tZXRob2RzLnN0b3AobW9kaWZpZXJBcmcpIH1cbiAgfVxuXG4gIGFyZy5pbnRlcmFjdGlvbi5tb2RpZmllcnMuc3RhdGVzID0gbnVsbFxufVxuXG5mdW5jdGlvbiBzZXRDb29yZHMgKGFyZykge1xuICBjb25zdCB7IGludGVyYWN0aW9uLCBwaGFzZSB9ID0gYXJnXG4gIGNvbnN0IGN1ckNvb3JkcyA9IGFyZy5jdXJDb29yZHMgfHwgaW50ZXJhY3Rpb24uY29vcmRzLmN1clxuICBjb25zdCBzdGFydENvb3JkcyA9IGFyZy5zdGFydENvb3JkcyB8fCBpbnRlcmFjdGlvbi5jb29yZHMuc3RhcnRcbiAgY29uc3QgeyByZXN1bHQsIHN0YXJ0RGVsdGEgfSA9IGludGVyYWN0aW9uLm1vZGlmaWVyc1xuICBjb25zdCBjdXJEZWx0YSA9IHJlc3VsdC5kZWx0YVxuXG4gIGlmIChwaGFzZSA9PT0gJ3N0YXJ0Jykge1xuICAgIGV4dGVuZChpbnRlcmFjdGlvbi5tb2RpZmllcnMuc3RhcnREZWx0YSwgcmVzdWx0LmRlbHRhKVxuICB9XG5cbiAgZm9yIChjb25zdCBbY29vcmRzU2V0LCBkZWx0YV0gb2YgW1tzdGFydENvb3Jkcywgc3RhcnREZWx0YV0sIFtjdXJDb29yZHMsIGN1ckRlbHRhXV0pIHtcbiAgICBjb29yZHNTZXQucGFnZS54ICAgKz0gZGVsdGEueFxuICAgIGNvb3Jkc1NldC5wYWdlLnkgICArPSBkZWx0YS55XG4gICAgY29vcmRzU2V0LmNsaWVudC54ICs9IGRlbHRhLnhcbiAgICBjb29yZHNTZXQuY2xpZW50LnkgKz0gZGVsdGEueVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3RvcmVDb29yZHMgKHsgaW50ZXJhY3Rpb246IHsgY29vcmRzLCBtb2RpZmllcnMgfSB9KSB7XG4gIGNvbnN0IHsgc3RhcnREZWx0YSwgcmVzdWx0OiB7IGRlbHRhOiBjdXJEZWx0YSB9IH0gPSBtb2RpZmllcnNcblxuICBmb3IgKGNvbnN0IFtjb29yZHNTZXQsIGRlbHRhXSBvZiBbW2Nvb3Jkcy5zdGFydCwgc3RhcnREZWx0YV0sIFtjb29yZHMuY3VyLCBjdXJEZWx0YV1dKSB7XG4gICAgY29vcmRzU2V0LnBhZ2UueCAtPSBkZWx0YS54XG4gICAgY29vcmRzU2V0LnBhZ2UueSAtPSBkZWx0YS55XG4gICAgY29vcmRzU2V0LmNsaWVudC54IC09IGRlbHRhLnhcbiAgICBjb29yZHNTZXQuY2xpZW50LnkgLT0gZGVsdGEueVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldE1vZGlmaWVyTGlzdCAoaW50ZXJhY3Rpb24sIHJlZ2lzdGVyZWRNb2RpZmllcnMpIHtcbiAgY29uc3QgYWN0aW9uT3B0aW9ucyA9IGludGVyYWN0aW9uLnRhcmdldC5vcHRpb25zW2ludGVyYWN0aW9uLnByZXBhcmVkLm5hbWVdXG4gIGNvbnN0IGFjdGlvbk1vZGlmaWVycyA9IGFjdGlvbk9wdGlvbnMubW9kaWZpZXJzXG5cbiAgaWYgKGFjdGlvbk1vZGlmaWVycyAmJiBhY3Rpb25Nb2RpZmllcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGFjdGlvbk1vZGlmaWVycy5tYXAoKG1vZGlmaWVyKSA9PiB7XG4gICAgICBpZiAoIW1vZGlmaWVyLm1ldGhvZHMgJiYgbW9kaWZpZXIudHlwZSkge1xuICAgICAgICByZXR1cm4gcmVnaXN0ZXJlZE1vZGlmaWVyc1ttb2RpZmllci50eXBlXShtb2RpZmllcilcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1vZGlmaWVyXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBbJ3NuYXAnLCAnc25hcFNpemUnLCAnc25hcEVkZ2VzJywgJ3Jlc3RyaWN0JywgJ3Jlc3RyaWN0RWRnZXMnLCAncmVzdHJpY3RTaXplJ11cbiAgICAubWFwKCh0eXBlKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID0gYWN0aW9uT3B0aW9uc1t0eXBlXVxuXG4gICAgICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zLmVuYWJsZWQgJiYge1xuICAgICAgICBvcHRpb25zLFxuICAgICAgICBtZXRob2RzOiBvcHRpb25zLl9tZXRob2RzLFxuICAgICAgfVxuICAgIH0pXG4gICAgLmZpbHRlcigobSkgPT4gISFtKVxufVxuXG5mdW5jdGlvbiBzaG91bGREbyAob3B0aW9ucywgcHJlRW5kPzogYm9vbGVhbiwgcmVxdWlyZUVuZE9ubHk/OiBib29sZWFuLCBwaGFzZT86IHN0cmluZykge1xuICByZXR1cm4gb3B0aW9uc1xuICAgID8gb3B0aW9ucy5lbmFibGVkICE9PSBmYWxzZSAmJlxuICAgICAgKHByZUVuZCB8fCAhb3B0aW9ucy5lbmRPbmx5KSAmJlxuICAgICAgKCFyZXF1aXJlRW5kT25seSB8fCBvcHRpb25zLmVuZE9ubHkpICYmXG4gICAgICAob3B0aW9ucy5zZXRTdGFydCB8fCBwaGFzZSAhPT0gJ3N0YXJ0JylcbiAgICA6ICFyZXF1aXJlRW5kT25seVxufVxuXG5mdW5jdGlvbiBtYWtlTW9kaWZpZXIgKG1vZHVsZSwgbmFtZT86IHN0cmluZykge1xuICBjb25zdCB7IGRlZmF1bHRzIH0gPSBtb2R1bGVcbiAgY29uc3QgbWV0aG9kcyA9IHtcbiAgICBzdGFydDogbW9kdWxlLnN0YXJ0LFxuICAgIHNldDogbW9kdWxlLnNldCxcbiAgICBiZWZvcmVFbmQ6IG1vZHVsZS5iZWZvcmVFbmQsXG4gICAgc3RvcDogbW9kdWxlLnN0b3AsXG4gIH1cblxuICBjb25zdCBtb2RpZmllciA9IChvcHRpb25zKSA9PiB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cblxuICAgIC8vIGFkZCBtaXNzaW5nIGRlZmF1bHRzIHRvIG9wdGlvbnNcbiAgICBvcHRpb25zLmVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlXG5cbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gZGVmYXVsdHMpIHtcbiAgICAgIGlmICghKHByb3AgaW4gb3B0aW9ucykpIHtcbiAgICAgICAgb3B0aW9uc1twcm9wXSA9IGRlZmF1bHRzW3Byb3BdXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgb3B0aW9ucywgbWV0aG9kcywgbmFtZSB9XG4gIH1cblxuICBpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgbW9kaWZpZXIsXG4gICAgICAnbmFtZScsXG4gICAgICB7IHZhbHVlOiBuYW1lIH0pXG5cbiAgICAvLyBmb3IgYmFja3dyYWRzIGNvbXBhdGliaWxpdHlcbiAgICBtb2RpZmllci5fZGVmYXVsdHMgPSBkZWZhdWx0c1xuICAgIG1vZGlmaWVyLl9tZXRob2RzID0gbWV0aG9kc1xuICB9XG5cbiAgcmV0dXJuIG1vZGlmaWVyXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5zdGFsbCxcbiAgc3RhcnRBbGwsXG4gIHNldEFsbCxcbiAgcHJlcGFyZVN0YXRlcyxcbiAgc3RhcnQsXG4gIGJlZm9yZU1vdmUsXG4gIGJlZm9yZUVuZCxcbiAgc3RvcCxcbiAgc2hvdWxkRG8sXG4gIGdldE1vZGlmaWVyTGlzdCxcbiAgZ2V0UmVjdE9mZnNldCxcbiAgbWFrZU1vZGlmaWVyLFxufVxuIl19 \ No newline at end of file diff --git a/packages/modifiers/index.d.ts b/packages/modifiers/index.d.ts index b297a3d6a..ecada6bc6 100644 --- a/packages/modifiers/index.d.ts +++ b/packages/modifiers/index.d.ts @@ -7,6 +7,7 @@ export declare const snap: { beforeEnd: any; stop: any; }; + name: string; }; _defaults: any; _methods: { @@ -25,6 +26,7 @@ export declare const snapSize: { beforeEnd: any; stop: any; }; + name: string; }; _defaults: any; _methods: { @@ -43,6 +45,7 @@ export declare const snapEdges: { beforeEnd: any; stop: any; }; + name: string; }; _defaults: any; _methods: { @@ -61,6 +64,7 @@ export declare const restrict: { beforeEnd: any; stop: any; }; + name: string; }; _defaults: any; _methods: { @@ -79,6 +83,7 @@ export declare const restrictEdges: { beforeEnd: any; stop: any; }; + name: string; }; _defaults: any; _methods: { @@ -97,6 +102,7 @@ export declare const restrictSize: { beforeEnd: any; stop: any; }; + name: string; }; _defaults: any; _methods: { diff --git a/packages/modifiers/package.json b/packages/modifiers/package.json index 9fb566bbc..cd62bf160 100644 --- a/packages/modifiers/package.json +++ b/packages/modifiers/package.json @@ -1,14 +1,14 @@ { "name": "@interactjs/modifiers", - "version": "1.4.0-alpha.27+sha.12b8f8f", + "version": "1.4.0-alpha.28+sha.e624c4d", "peerDependencies": { - "@interactjs/core": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/utils": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/core": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/utils": "1.4.0-alpha.28+sha.e624c4d" }, "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/core": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/utils": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/_dev": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/core": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/utils": "1.4.0-alpha.28+sha.e624c4d" }, "publishConfig": { "access": "public" diff --git a/packages/modifiers/restrict/edges.d.ts b/packages/modifiers/restrict/edges.d.ts index 69b8fdeb0..17c0fdd38 100644 --- a/packages/modifiers/restrict/edges.d.ts +++ b/packages/modifiers/restrict/edges.d.ts @@ -1,11 +1,4 @@ import Interaction from '@interactjs/core/Interaction'; -declare module '@interactjs/core/Interaction' { - interface Action { - linkedEdges?: { - [key: string]: boolean; - }; - } -} declare function start({ interaction, state }: { interaction: Interaction; state: any; @@ -28,7 +21,7 @@ declare const restrictEdges: { bottom: number; right: number; }; - getRestrictionRect: (value: any, interaction: any, coords?: import("../../types").Point) => any; + getRestrictionRect: (value: any, interaction: any, coords?: import("../../types/types").Point) => any; start: typeof start; set: typeof set; defaults: { diff --git a/packages/modifiers/restrict/edges.js b/packages/modifiers/restrict/edges.js index 2bffa6600..008ce2da8 100644 --- a/packages/modifiers/restrict/edges.js +++ b/packages/modifiers/restrict/edges.js @@ -32,7 +32,7 @@ function start({ interaction, state }) { } function set({ coords, interaction, state }) { const { offset, options } = state; - const edges = interaction.prepared.linkedEdges || interaction.prepared.edges; + const edges = interaction.prepared._linkedEdges || interaction.prepared.edges; if (!edges) { return; } @@ -76,4 +76,4 @@ const restrictEdges = { }, }; export default restrictEdges; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlZGdlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrRUFBK0U7QUFDL0UsNkVBQTZFO0FBQzdFLEVBQUU7QUFDRiw0QkFBNEI7QUFDNUIsc0NBQXNDO0FBQ3RDLHFCQUFxQjtBQUNyQiwrREFBK0Q7QUFDL0QsK0RBQStEO0FBQy9ELE9BQU87QUFDUCxNQUFNO0FBR04sT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUE7QUFDN0MsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUE7QUFDOUMsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFBO0FBUWhDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxHQUFHLFFBQVEsQ0FBQTtBQUN2QyxNQUFNLE9BQU8sR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFBO0FBQ3hGLE1BQU0sT0FBTyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUE7QUFFeEYsU0FBUyxLQUFLLENBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUE0QztJQUM5RSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBQ3pCLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFBO0lBQ3JELElBQUksTUFBTSxDQUFBO0lBRVYsSUFBSSxPQUFPLEVBQUU7UUFDWCxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUVqRyxNQUFNLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtLQUN4QztJQUVELE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQTtJQUVqQyxLQUFLLENBQUMsTUFBTSxHQUFHO1FBQ2IsR0FBRyxFQUFLLE1BQU0sQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUc7UUFDbEMsSUFBSSxFQUFJLE1BQU0sQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUk7UUFDbkMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU07UUFDckMsS0FBSyxFQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUs7S0FDckMsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLEdBQUcsQ0FBRSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUl6QztJQUNDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBQ2pDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFBO0lBRTVFLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixPQUFNO0tBQ1A7SUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQy9CLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUN4RSxNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7SUFFeEUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUN2QixPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBRXZCLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRTtRQUNiLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQU0sTUFBTSxDQUFDLEdBQUcsRUFBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsR0FBTSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7S0FDL0Y7U0FDSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7UUFDckIsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtLQUNsRztJQUNELElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtRQUNkLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUssTUFBTSxDQUFDLElBQUksRUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksR0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7S0FDaEc7U0FDSSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7UUFDcEIsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBSSxNQUFNLENBQUMsS0FBSyxFQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxHQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtLQUNqRztBQUNILENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBRSxJQUFJLEVBQUUsUUFBUTtJQUM5QixLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUU7UUFDckQsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDNUI7S0FDRjtJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELE1BQU0sYUFBYSxHQUFHO0lBQ3BCLE9BQU87SUFDUCxPQUFPO0lBQ1Asa0JBQWtCO0lBQ2xCLEtBQUs7SUFDTCxHQUFHO0lBQ0gsUUFBUSxFQUFFO1FBQ1IsT0FBTyxFQUFFLEtBQUs7UUFDZCxLQUFLLEVBQUUsSUFBSTtRQUNYLEtBQUssRUFBRSxJQUFJO1FBQ1gsTUFBTSxFQUFFLElBQUk7S0FDYjtDQUNGLENBQUE7QUFFRCxlQUFlLGFBQWEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgbW9kdWxlIGFkZHMgdGhlIG9wdGlvbnMucmVzaXplLnJlc3RyaWN0RWRnZXMgc2V0dGluZyB3aGljaCBzZXRzIG1pbiBhbmRcbi8vIG1heCBmb3IgdGhlIHRvcCwgbGVmdCwgYm90dG9tIGFuZCByaWdodCBlZGdlcyBvZiB0aGUgdGFyZ2V0IGJlaW5nIHJlc2l6ZWQuXG4vL1xuLy8gaW50ZXJhY3QodGFyZ2V0KS5yZXNpemUoe1xuLy8gICBlZGdlczogeyB0b3A6IHRydWUsIGxlZnQ6IHRydWUgfSxcbi8vICAgcmVzdHJpY3RFZGdlczoge1xuLy8gICAgIGlubmVyOiB7IHRvcDogMjAwLCBsZWZ0OiAyMDAsIHJpZ2h0OiA0MDAsIGJvdHRvbTogNDAwIH0sXG4vLyAgICAgb3V0ZXI6IHsgdG9wOiAgIDAsIGxlZnQ6ICAgMCwgcmlnaHQ6IDYwMCwgYm90dG9tOiA2MDAgfSxcbi8vICAgfSxcbi8vIH0pO1xuXG5pbXBvcnQgSW50ZXJhY3Rpb24gZnJvbSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbidcbmltcG9ydCBleHRlbmQgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvZXh0ZW5kJ1xuaW1wb3J0IHJlY3RVdGlscyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9yZWN0J1xuaW1wb3J0IHJlc3RyaWN0IGZyb20gJy4vcG9pbnRlcidcblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3Rpb24nIHtcbiAgaW50ZXJmYWNlIEFjdGlvbiB7XG4gICAgbGlua2VkRWRnZXM/OiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfVxuICB9XG59XG5cbmNvbnN0IHsgZ2V0UmVzdHJpY3Rpb25SZWN0IH0gPSByZXN0cmljdFxuY29uc3Qgbm9Jbm5lciA9IHsgdG9wOiArSW5maW5pdHksIGxlZnQ6ICtJbmZpbml0eSwgYm90dG9tOiAtSW5maW5pdHksIHJpZ2h0OiAtSW5maW5pdHkgfVxuY29uc3Qgbm9PdXRlciA9IHsgdG9wOiAtSW5maW5pdHksIGxlZnQ6IC1JbmZpbml0eSwgYm90dG9tOiArSW5maW5pdHksIHJpZ2h0OiArSW5maW5pdHkgfVxuXG5mdW5jdGlvbiBzdGFydCAoeyBpbnRlcmFjdGlvbiwgc3RhdGUgfTogeyBpbnRlcmFjdGlvbjogSW50ZXJhY3Rpb24sIHN0YXRlOiBhbnkgfSkge1xuICBjb25zdCB7IG9wdGlvbnMgfSA9IHN0YXRlXG4gIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gaW50ZXJhY3Rpb24ubW9kaWZpZXJzLnN0YXJ0T2Zmc2V0XG4gIGxldCBvZmZzZXRcblxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9mZnNldFJlY3QgPSBnZXRSZXN0cmljdGlvblJlY3Qob3B0aW9ucy5vZmZzZXQsIGludGVyYWN0aW9uLCBpbnRlcmFjdGlvbi5jb29yZHMuc3RhcnQucGFnZSlcblxuICAgIG9mZnNldCA9IHJlY3RVdGlscy5yZWN0VG9YWShvZmZzZXRSZWN0KVxuICB9XG5cbiAgb2Zmc2V0ID0gb2Zmc2V0IHx8IHsgeDogMCwgeTogMCB9XG5cbiAgc3RhdGUub2Zmc2V0ID0ge1xuICAgIHRvcDogICAgb2Zmc2V0LnkgKyBzdGFydE9mZnNldC50b3AsXG4gICAgbGVmdDogICBvZmZzZXQueCArIHN0YXJ0T2Zmc2V0LmxlZnQsXG4gICAgYm90dG9tOiBvZmZzZXQueSAtIHN0YXJ0T2Zmc2V0LmJvdHRvbSxcbiAgICByaWdodDogIG9mZnNldC54IC0gc3RhcnRPZmZzZXQucmlnaHQsXG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0ICh7IGNvb3JkcywgaW50ZXJhY3Rpb24sIHN0YXRlIH06IHtcbiAgY29vcmRzOiBJbnRlcmFjdC5Qb2ludCxcbiAgaW50ZXJhY3Rpb246IEludGVyYWN0aW9uLFxuICBzdGF0ZTogYW55XG59KSB7XG4gIGNvbnN0IHsgb2Zmc2V0LCBvcHRpb25zIH0gPSBzdGF0ZVxuICBjb25zdCBlZGdlcyA9IGludGVyYWN0aW9uLnByZXBhcmVkLmxpbmtlZEVkZ2VzIHx8IGludGVyYWN0aW9uLnByZXBhcmVkLmVkZ2VzXG5cbiAgaWYgKCFlZGdlcykge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgcGFnZSA9IGV4dGVuZCh7fSwgY29vcmRzKVxuICBjb25zdCBpbm5lciA9IGdldFJlc3RyaWN0aW9uUmVjdChvcHRpb25zLmlubmVyLCBpbnRlcmFjdGlvbiwgcGFnZSkgfHwge31cbiAgY29uc3Qgb3V0ZXIgPSBnZXRSZXN0cmljdGlvblJlY3Qob3B0aW9ucy5vdXRlciwgaW50ZXJhY3Rpb24sIHBhZ2UpIHx8IHt9XG5cbiAgZml4UmVjdChpbm5lciwgbm9Jbm5lcilcbiAgZml4UmVjdChvdXRlciwgbm9PdXRlcilcblxuICBpZiAoZWRnZXMudG9wKSB7XG4gICAgY29vcmRzLnkgPSBNYXRoLm1pbihNYXRoLm1heChvdXRlci50b3AgICAgKyBvZmZzZXQudG9wLCAgICBwYWdlLnkpLCBpbm5lci50b3AgICAgKyBvZmZzZXQudG9wKVxuICB9XG4gIGVsc2UgaWYgKGVkZ2VzLmJvdHRvbSkge1xuICAgIGNvb3Jkcy55ID0gTWF0aC5tYXgoTWF0aC5taW4ob3V0ZXIuYm90dG9tICsgb2Zmc2V0LmJvdHRvbSwgcGFnZS55KSwgaW5uZXIuYm90dG9tICsgb2Zmc2V0LmJvdHRvbSlcbiAgfVxuICBpZiAoZWRnZXMubGVmdCkge1xuICAgIGNvb3Jkcy54ID0gTWF0aC5taW4oTWF0aC5tYXgob3V0ZXIubGVmdCAgICsgb2Zmc2V0LmxlZnQsICAgcGFnZS54KSwgaW5uZXIubGVmdCAgICsgb2Zmc2V0LmxlZnQpXG4gIH1cbiAgZWxzZSBpZiAoZWRnZXMucmlnaHQpIHtcbiAgICBjb29yZHMueCA9IE1hdGgubWF4KE1hdGgubWluKG91dGVyLnJpZ2h0ICArIG9mZnNldC5yaWdodCwgIHBhZ2UueCksIGlubmVyLnJpZ2h0ICArIG9mZnNldC5yaWdodClcbiAgfVxufVxuXG5mdW5jdGlvbiBmaXhSZWN0IChyZWN0LCBkZWZhdWx0cykge1xuICBmb3IgKGNvbnN0IGVkZ2Ugb2YgWyd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnXSkge1xuICAgIGlmICghKGVkZ2UgaW4gcmVjdCkpIHtcbiAgICAgIHJlY3RbZWRnZV0gPSBkZWZhdWx0c1tlZGdlXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWN0XG59XG5cbmNvbnN0IHJlc3RyaWN0RWRnZXMgPSB7XG4gIG5vSW5uZXIsXG4gIG5vT3V0ZXIsXG4gIGdldFJlc3RyaWN0aW9uUmVjdCxcbiAgc3RhcnQsXG4gIHNldCxcbiAgZGVmYXVsdHM6IHtcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBpbm5lcjogbnVsbCxcbiAgICBvdXRlcjogbnVsbCxcbiAgICBvZmZzZXQ6IG51bGwsXG4gIH0sXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlc3RyaWN0RWRnZXNcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlZGdlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrRUFBK0U7QUFDL0UsNkVBQTZFO0FBQzdFLEVBQUU7QUFDRiw0QkFBNEI7QUFDNUIsc0NBQXNDO0FBQ3RDLHFCQUFxQjtBQUNyQiwrREFBK0Q7QUFDL0QsK0RBQStEO0FBQy9ELE9BQU87QUFDUCxNQUFNO0FBR04sT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUE7QUFDN0MsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUE7QUFDOUMsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFBO0FBRWhDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxHQUFHLFFBQVEsQ0FBQTtBQUN2QyxNQUFNLE9BQU8sR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFBO0FBQ3hGLE1BQU0sT0FBTyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUE7QUFFeEYsU0FBUyxLQUFLLENBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUE0QztJQUM5RSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBQ3pCLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFBO0lBQ3JELElBQUksTUFBTSxDQUFBO0lBRVYsSUFBSSxPQUFPLEVBQUU7UUFDWCxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUVqRyxNQUFNLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtLQUN4QztJQUVELE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQTtJQUVqQyxLQUFLLENBQUMsTUFBTSxHQUFHO1FBQ2IsR0FBRyxFQUFLLE1BQU0sQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUc7UUFDbEMsSUFBSSxFQUFJLE1BQU0sQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUk7UUFDbkMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU07UUFDckMsS0FBSyxFQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUs7S0FDckMsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLEdBQUcsQ0FBRSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUl6QztJQUNDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBQ2pDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFBO0lBRTdFLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixPQUFNO0tBQ1A7SUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQy9CLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUN4RSxNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7SUFFeEUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUN2QixPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBRXZCLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRTtRQUNiLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQU0sTUFBTSxDQUFDLEdBQUcsRUFBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsR0FBTSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7S0FDL0Y7U0FDSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7UUFDckIsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtLQUNsRztJQUNELElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtRQUNkLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUssTUFBTSxDQUFDLElBQUksRUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksR0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7S0FDaEc7U0FDSSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7UUFDcEIsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBSSxNQUFNLENBQUMsS0FBSyxFQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxHQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtLQUNqRztBQUNILENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBRSxJQUFJLEVBQUUsUUFBUTtJQUM5QixLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUU7UUFDckQsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDNUI7S0FDRjtJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELE1BQU0sYUFBYSxHQUFHO0lBQ3BCLE9BQU87SUFDUCxPQUFPO0lBQ1Asa0JBQWtCO0lBQ2xCLEtBQUs7SUFDTCxHQUFHO0lBQ0gsUUFBUSxFQUFFO1FBQ1IsT0FBTyxFQUFFLEtBQUs7UUFDZCxLQUFLLEVBQUUsSUFBSTtRQUNYLEtBQUssRUFBRSxJQUFJO1FBQ1gsTUFBTSxFQUFFLElBQUk7S0FDYjtDQUNGLENBQUE7QUFFRCxlQUFlLGFBQWEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgbW9kdWxlIGFkZHMgdGhlIG9wdGlvbnMucmVzaXplLnJlc3RyaWN0RWRnZXMgc2V0dGluZyB3aGljaCBzZXRzIG1pbiBhbmRcbi8vIG1heCBmb3IgdGhlIHRvcCwgbGVmdCwgYm90dG9tIGFuZCByaWdodCBlZGdlcyBvZiB0aGUgdGFyZ2V0IGJlaW5nIHJlc2l6ZWQuXG4vL1xuLy8gaW50ZXJhY3QodGFyZ2V0KS5yZXNpemUoe1xuLy8gICBlZGdlczogeyB0b3A6IHRydWUsIGxlZnQ6IHRydWUgfSxcbi8vICAgcmVzdHJpY3RFZGdlczoge1xuLy8gICAgIGlubmVyOiB7IHRvcDogMjAwLCBsZWZ0OiAyMDAsIHJpZ2h0OiA0MDAsIGJvdHRvbTogNDAwIH0sXG4vLyAgICAgb3V0ZXI6IHsgdG9wOiAgIDAsIGxlZnQ6ICAgMCwgcmlnaHQ6IDYwMCwgYm90dG9tOiA2MDAgfSxcbi8vICAgfSxcbi8vIH0pO1xuXG5pbXBvcnQgSW50ZXJhY3Rpb24gZnJvbSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbidcbmltcG9ydCBleHRlbmQgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvZXh0ZW5kJ1xuaW1wb3J0IHJlY3RVdGlscyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9yZWN0J1xuaW1wb3J0IHJlc3RyaWN0IGZyb20gJy4vcG9pbnRlcidcblxuY29uc3QgeyBnZXRSZXN0cmljdGlvblJlY3QgfSA9IHJlc3RyaWN0XG5jb25zdCBub0lubmVyID0geyB0b3A6ICtJbmZpbml0eSwgbGVmdDogK0luZmluaXR5LCBib3R0b206IC1JbmZpbml0eSwgcmlnaHQ6IC1JbmZpbml0eSB9XG5jb25zdCBub091dGVyID0geyB0b3A6IC1JbmZpbml0eSwgbGVmdDogLUluZmluaXR5LCBib3R0b206ICtJbmZpbml0eSwgcmlnaHQ6ICtJbmZpbml0eSB9XG5cbmZ1bmN0aW9uIHN0YXJ0ICh7IGludGVyYWN0aW9uLCBzdGF0ZSB9OiB7IGludGVyYWN0aW9uOiBJbnRlcmFjdGlvbiwgc3RhdGU6IGFueSB9KSB7XG4gIGNvbnN0IHsgb3B0aW9ucyB9ID0gc3RhdGVcbiAgY29uc3Qgc3RhcnRPZmZzZXQgPSBpbnRlcmFjdGlvbi5tb2RpZmllcnMuc3RhcnRPZmZzZXRcbiAgbGV0IG9mZnNldFxuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2Zmc2V0UmVjdCA9IGdldFJlc3RyaWN0aW9uUmVjdChvcHRpb25zLm9mZnNldCwgaW50ZXJhY3Rpb24sIGludGVyYWN0aW9uLmNvb3Jkcy5zdGFydC5wYWdlKVxuXG4gICAgb2Zmc2V0ID0gcmVjdFV0aWxzLnJlY3RUb1hZKG9mZnNldFJlY3QpXG4gIH1cblxuICBvZmZzZXQgPSBvZmZzZXQgfHwgeyB4OiAwLCB5OiAwIH1cblxuICBzdGF0ZS5vZmZzZXQgPSB7XG4gICAgdG9wOiAgICBvZmZzZXQueSArIHN0YXJ0T2Zmc2V0LnRvcCxcbiAgICBsZWZ0OiAgIG9mZnNldC54ICsgc3RhcnRPZmZzZXQubGVmdCxcbiAgICBib3R0b206IG9mZnNldC55IC0gc3RhcnRPZmZzZXQuYm90dG9tLFxuICAgIHJpZ2h0OiAgb2Zmc2V0LnggLSBzdGFydE9mZnNldC5yaWdodCxcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXQgKHsgY29vcmRzLCBpbnRlcmFjdGlvbiwgc3RhdGUgfToge1xuICBjb29yZHM6IEludGVyYWN0LlBvaW50LFxuICBpbnRlcmFjdGlvbjogSW50ZXJhY3Rpb24sXG4gIHN0YXRlOiBhbnlcbn0pIHtcbiAgY29uc3QgeyBvZmZzZXQsIG9wdGlvbnMgfSA9IHN0YXRlXG4gIGNvbnN0IGVkZ2VzID0gaW50ZXJhY3Rpb24ucHJlcGFyZWQuX2xpbmtlZEVkZ2VzIHx8IGludGVyYWN0aW9uLnByZXBhcmVkLmVkZ2VzXG5cbiAgaWYgKCFlZGdlcykge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgcGFnZSA9IGV4dGVuZCh7fSwgY29vcmRzKVxuICBjb25zdCBpbm5lciA9IGdldFJlc3RyaWN0aW9uUmVjdChvcHRpb25zLmlubmVyLCBpbnRlcmFjdGlvbiwgcGFnZSkgfHwge31cbiAgY29uc3Qgb3V0ZXIgPSBnZXRSZXN0cmljdGlvblJlY3Qob3B0aW9ucy5vdXRlciwgaW50ZXJhY3Rpb24sIHBhZ2UpIHx8IHt9XG5cbiAgZml4UmVjdChpbm5lciwgbm9Jbm5lcilcbiAgZml4UmVjdChvdXRlciwgbm9PdXRlcilcblxuICBpZiAoZWRnZXMudG9wKSB7XG4gICAgY29vcmRzLnkgPSBNYXRoLm1pbihNYXRoLm1heChvdXRlci50b3AgICAgKyBvZmZzZXQudG9wLCAgICBwYWdlLnkpLCBpbm5lci50b3AgICAgKyBvZmZzZXQudG9wKVxuICB9XG4gIGVsc2UgaWYgKGVkZ2VzLmJvdHRvbSkge1xuICAgIGNvb3Jkcy55ID0gTWF0aC5tYXgoTWF0aC5taW4ob3V0ZXIuYm90dG9tICsgb2Zmc2V0LmJvdHRvbSwgcGFnZS55KSwgaW5uZXIuYm90dG9tICsgb2Zmc2V0LmJvdHRvbSlcbiAgfVxuICBpZiAoZWRnZXMubGVmdCkge1xuICAgIGNvb3Jkcy54ID0gTWF0aC5taW4oTWF0aC5tYXgob3V0ZXIubGVmdCAgICsgb2Zmc2V0LmxlZnQsICAgcGFnZS54KSwgaW5uZXIubGVmdCAgICsgb2Zmc2V0LmxlZnQpXG4gIH1cbiAgZWxzZSBpZiAoZWRnZXMucmlnaHQpIHtcbiAgICBjb29yZHMueCA9IE1hdGgubWF4KE1hdGgubWluKG91dGVyLnJpZ2h0ICArIG9mZnNldC5yaWdodCwgIHBhZ2UueCksIGlubmVyLnJpZ2h0ICArIG9mZnNldC5yaWdodClcbiAgfVxufVxuXG5mdW5jdGlvbiBmaXhSZWN0IChyZWN0LCBkZWZhdWx0cykge1xuICBmb3IgKGNvbnN0IGVkZ2Ugb2YgWyd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnXSkge1xuICAgIGlmICghKGVkZ2UgaW4gcmVjdCkpIHtcbiAgICAgIHJlY3RbZWRnZV0gPSBkZWZhdWx0c1tlZGdlXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWN0XG59XG5cbmNvbnN0IHJlc3RyaWN0RWRnZXMgPSB7XG4gIG5vSW5uZXIsXG4gIG5vT3V0ZXIsXG4gIGdldFJlc3RyaWN0aW9uUmVjdCxcbiAgc3RhcnQsXG4gIHNldCxcbiAgZGVmYXVsdHM6IHtcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBpbm5lcjogbnVsbCxcbiAgICBvdXRlcjogbnVsbCxcbiAgICBvZmZzZXQ6IG51bGwsXG4gIH0sXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlc3RyaWN0RWRnZXNcbiJdfQ== \ No newline at end of file diff --git a/packages/modifiers/tests/base.d.ts b/packages/modifiers/tests/base.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/modifiers/tests/base.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/modifiers/tests/base.js b/packages/modifiers/tests/base.js new file mode 100644 index 000000000..fc0812562 --- /dev/null +++ b/packages/modifiers/tests/base.js @@ -0,0 +1,108 @@ +import test from '@interactjs/_dev/test/test'; +import * as helpers from '@interactjs/core/tests/helpers'; +import * as utils from '@interactjs/utils'; +import modifiersBase from '../base'; +test('modifiers/base', (t) => { + const scope = helpers.mockScope(); + modifiersBase.install(scope); + scope.actions.eventTypes.push('teststart', 'testmove', 'testend'); + // eslint-disable-next-line new-cap + const interaction = scope.interactions.new({}); + t.ok(utils.is.object(interaction.modifiers), 'modifiers prop is added new Interaction'); + const element = utils.win.window.document.documentElement; + const interactable = scope.interactables.new(element); + const startEvent = { + pageX: 100, + pageY: 200, + clientX: 100, + clientY: 200, + target: element, + }; + const moveEvent = { + pageX: 400, + pageY: 500, + clientX: 400, + clientY: 500, + target: element, + }; + const options = { target: { x: 100, y: 100 }, setStart: true }; + let firedEvents = []; + interactable.rectChecker(() => ({ top: 0, left: 0, bottom: 50, right: 50 })); + interactable.on('teststart testmove testend', (event) => firedEvents.push(event)); + interaction.pointerDown(startEvent, startEvent, element); + interactable.options.test = { + modifiers: [ + { + options, + methods: targetModifier, + }, + ], + }; + interaction.start({ name: 'test' }, interactable, element); + t.ok(options.started, 'modifier methods.start() was called'); + t.ok(options.setted, 'modifier methods.set() was called'); + t.deepEqual(interaction.prevEvent.page, options.target, 'start event coords are modified'); + t.deepEqual(interaction.coords.start.page, { x: 100, y: 200 }, 'interaction.coords.start are restored after action start phase'); + t.deepEqual(interaction.coords.cur.page, { x: 100, y: 200 }, 'interaction.coords.cur are restored after action start phase'); + interaction.pointerMove(moveEvent, moveEvent, element); + t.deepEqual(interaction.coords.cur.page, { x: moveEvent.pageX, y: moveEvent.pageY }, 'interaction.coords.cur are restored after action move phase'); + t.deepEqual(interaction.coords.start.page, { x: startEvent.pageX, y: startEvent.pageY }, 'interaction.coords.start are restored after action move phase'); + t.deepEqual({ x: interaction.prevEvent.x0, y: interaction.prevEvent.y0 }, { x: 100, y: 100 }, 'move event start coords are modified'); + firedEvents = []; + const similarMoveEvent = { ...moveEvent, pageX: moveEvent.pageX + 0.5 }; + interaction.pointerMove(similarMoveEvent, similarMoveEvent, element); + t.equal(firedEvents.length, 0, 'duplicate result coords are ignored'); + interaction.stop(); + t.ok(options.stopped, 'modifier methods.stop() was called'); + // don't set start + options.setStart = null; + // add second modifier + interactable.options.test.modifiers.push({ + options, + methods: doubleModifier, + }); + interaction.pointerDown(startEvent, startEvent, element); + interaction.start({ name: 'test' }, interactable, element); + t.notOk(options.setted, 'modifier methods.set() was not called on start phase without options.setStart'); + t.deepEqual(interaction.prevEvent.page, { x: 100, y: 200 }, 'start event coords are not modified without options.setStart'); + t.deepEqual(interaction.coords.start.page, { x: 100, y: 200 }, 'interaction.coords.start are not modified without options.setStart'); + interaction.pointerMove(moveEvent, moveEvent, element); + t.deepEqual(interaction.prevEvent.page, { x: 200, y: 200 }, 'move event coords are modified by all modifiers'); + // modifier options.type + scope.modifiers.target = modifiersBase.makeModifier(targetModifier); + options.type = 'target'; + options.started = false; + interactable.options.test = { + modifiers: [ + options, + ], + }; + interaction.stop(); + interaction.start({ name: 'test' }, interactable, element); + t.ok(options.started, 'gets `scpe.modifiers[options.type]`'); + t.end(); +}); +const targetModifier = { + start({ state }) { + state.options.started = true; + }, + set({ state, coords }) { + const { target } = state.options; + coords.x = target.x; + coords.y = target.y; + state.options.setted = true; + }, + stop({ state }) { + state.options.stopped = true; + delete state.options.started; + delete state.options.setted; + }, +}; +const doubleModifier = { + start() { }, + set({ coords }) { + coords.x *= 2; + coords.y *= 2; + }, +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sNEJBQTRCLENBQUE7QUFDN0MsT0FBTyxLQUFLLE9BQU8sTUFBTSxnQ0FBZ0MsQ0FBQTtBQUN6RCxPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFBO0FBQzFDLE9BQU8sYUFBYSxNQUFNLFNBQVMsQ0FBQTtBQUVuQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtJQUMzQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUE7SUFFakMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM1QixLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUVqRSxtQ0FBbUM7SUFDbkMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7SUFFOUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUseUNBQXlDLENBQUMsQ0FBQTtJQUV2RixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFBO0lBQ3pELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3JELE1BQU0sVUFBVSxHQUFHO1FBQ2pCLEtBQUssRUFBRSxHQUFHO1FBQ1YsS0FBSyxFQUFFLEdBQUc7UUFDVixPQUFPLEVBQUUsR0FBRztRQUNaLE9BQU8sRUFBRSxHQUFHO1FBQ1osTUFBTSxFQUFFLE9BQU87S0FDaEIsQ0FBQTtJQUNELE1B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QUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQTtRQUVoQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDbkIsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBRW5CLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQTtJQUM3QixDQUFDO0lBQ0QsSUFBSSxDQUFFLEVBQUUsS0FBSyxFQUFFO1FBQ2IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO1FBQzVCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUE7UUFDNUIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQTtJQUM3QixDQUFDO0NBQ0YsQ0FBQTtBQUVELE1BQU0sY0FBYyxHQUFHO0lBQ3JCLEtBQUssS0FBSyxDQUFDO0lBQ1gsR0FBRyxDQUFFLEVBQUUsTUFBTSxFQUFFO1FBQ2IsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDYixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNmLENBQUM7Q0FDRixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgKiBhcyBoZWxwZXJzIGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvdGVzdHMvaGVscGVycydcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzJ1xuaW1wb3J0IG1vZGlmaWVyc0Jhc2UgZnJvbSAnLi4vYmFzZSdcblxudGVzdCgnbW9kaWZpZXJzL2Jhc2UnLCAodCkgPT4ge1xuICBjb25zdCBzY29wZSA9IGhlbHBlcnMubW9ja1Njb3BlKClcblxuICBtb2RpZmllcnNCYXNlLmluc3RhbGwoc2NvcGUpXG4gIHNjb3BlLmFjdGlvbnMuZXZlbnRUeXBlcy5wdXNoKCd0ZXN0c3RhcnQnLCAndGVzdG1vdmUnLCAndGVzdGVuZCcpXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcbiAgY29uc3QgaW50ZXJhY3Rpb24gPSBzY29wZS5pbnRlcmFjdGlvbnMubmV3KHt9KVxuXG4gIHQub2sodXRpbHMuaXMub2JqZWN0KGludGVyYWN0aW9uLm1vZGlmaWVycyksICdtb2RpZmllcnMgcHJvcCBpcyBhZGRlZCBuZXcgSW50ZXJhY3Rpb24nKVxuXG4gIGNvbnN0IGVsZW1lbnQgPSB1dGlscy53aW4ud2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxuICBjb25zdCBpbnRlcmFjdGFibGUgPSBzY29wZS5pbnRlcmFjdGFibGVzLm5ldyhlbGVtZW50KVxuICBjb25zdCBzdGFydEV2ZW50ID0ge1xuICAgIHBhZ2VYOiAxMDAsXG4gICAgcGFnZVk6IDIwMCxcbiAgICBjbGllbnRYOiAxMDAsXG4gICAgY2xpZW50WTogMjAwLFxuICAgIHRhcmdldDogZWxlbWVudCxcbiAgfVxuICBjb25zdCBtb3ZlRXZlbnQgPSB7XG4gICAgcGFnZVg6IDQwMCxcbiAgICBwYWdlWTogNTAwLFxuICAgIGNsaWVudFg6IDQwMCxcbiAgICBjbGllbnRZOiA1MDAsXG4gICAgdGFyZ2V0OiBlbGVtZW50LFxuICB9XG4gIGNvbnN0IG9wdGlvbnM6IGFueSA9IHsgdGFyZ2V0OiB7IHg6IDEwMCwgeTogMTAwIH0sIHNldFN0YXJ0OiB0cnVlIH1cbiAgbGV0IGZpcmVkRXZlbnRzID0gW11cblxuICBpbnRlcmFjdGFibGUucmVjdENoZWNrZXIoKCkgPT4gKHsgdG9wOiAwLCBsZWZ0OiAwLCBib3R0b206IDUwLCByaWdodDogNTAgfSkpXG4gIGludGVyYWN0YWJsZS5vbigndGVzdHN0YXJ0IHRlc3Rtb3ZlIHRlc3RlbmQnLCAoZXZlbnQpID0+IGZpcmVkRXZlbnRzLnB1c2goZXZlbnQpKVxuICBpbnRlcmFjdGlvbi5wb2ludGVyRG93bihzdGFydEV2ZW50LCBzdGFydEV2ZW50LCBlbGVtZW50KVxuXG4gIGludGVyYWN0YWJsZS5vcHRpb25zLnRlc3QgPSB7XG4gICAgbW9kaWZpZXJzOiBbXG4gICAgICB7XG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIG1ldGhvZHM6IHRhcmdldE1vZGlmaWVyLFxuICAgICAgfSxcbiAgICBdLFxuICB9XG5cbiAgaW50ZXJhY3Rpb24uc3RhcnQoeyBuYW1lOiAndGVzdCcgfSwgaW50ZXJhY3RhYmxlLCBlbGVtZW50KVxuXG4gIHQub2soXG4gICAgb3B0aW9ucy5zdGFydGVkLFxuICAgICdtb2RpZmllciBtZXRob2RzLnN0YXJ0KCkgd2FzIGNhbGxlZCcsXG4gIClcblxuICB0Lm9rKFxuICAgIG9wdGlvbnMuc2V0dGVkLFxuICAgICdtb2RpZmllciBtZXRob2RzLnNldCgpIHdhcyBjYWxsZWQnLFxuICApXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgaW50ZXJhY3Rpb24ucHJldkV2ZW50LnBhZ2UsXG4gICAgb3B0aW9ucy50YXJnZXQsXG4gICAgJ3N0YXJ0IGV2ZW50IGNvb3JkcyBhcmUgbW9kaWZpZWQnKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGludGVyYWN0aW9uLmNvb3Jkcy5zdGFydC5wYWdlLFxuICAgIHsgeDogMTAwLCB5OiAyMDAgfSxcbiAgICAnaW50ZXJhY3Rpb24uY29vcmRzLnN0YXJ0IGFyZSByZXN0b3JlZCBhZnRlciBhY3Rpb24gc3RhcnQgcGhhc2UnKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGludGVyYWN0aW9uLmNvb3Jkcy5jdXIucGFnZSxcbiAgICB7IHg6IDEwMCwgeTogMjAwIH0sXG4gICAgJ2ludGVyYWN0aW9uLmNvb3Jkcy5jdXIgYXJlIHJlc3RvcmVkIGFmdGVyIGFjdGlvbiBzdGFydCBwaGFzZScpXG5cbiAgaW50ZXJhY3Rpb24ucG9pbnRlck1vdmUobW92ZUV2ZW50LCBtb3ZlRXZlbnQsIGVsZW1lbnQpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgaW50ZXJhY3Rpb24uY29vcmRzLmN1ci5wYWdlLFxuICAgIHsgeDogbW92ZUV2ZW50LnBhZ2VYLCB5OiBtb3ZlRXZlbnQucGFnZVkgfSxcbiAgICAnaW50ZXJhY3Rpb24uY29vcmRzLmN1ciBhcmUgcmVzdG9yZWQgYWZ0ZXIgYWN0aW9uIG1vdmUgcGhhc2UnKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGludGVyYWN0aW9uLmNvb3Jkcy5zdGFydC5wYWdlLFxuICAgIHsgeDogc3RhcnRFdmVudC5wYWdlWCwgeTogc3RhcnRFdmVudC5wYWdlWSB9LFxuICAgICdpbnRlcmFjdGlvbi5jb29yZHMuc3RhcnQgYXJlIHJlc3RvcmVkIGFmdGVyIGFjdGlvbiBtb3ZlIHBoYXNlJylcblxuICB0LmRlZXBFcXVhbChcbiAgICB7IHg6IGludGVyYWN0aW9uLnByZXZFdmVudC54MCwgeTogaW50ZXJhY3Rpb24ucHJldkV2ZW50LnkwIH0sXG4gICAgeyB4OiAxMDAsIHk6IDEwMCB9LFxuICAgICdtb3ZlIGV2ZW50IHN0YXJ0IGNvb3JkcyBhcmUgbW9kaWZpZWQnKVxuXG4gIGZpcmVkRXZlbnRzID0gW11cbiAgY29uc3Qgc2ltaWxhck1vdmVFdmVudCA9IHsgLi4ubW92ZUV2ZW50LCBwYWdlWDogbW92ZUV2ZW50LnBhZ2VYICsgMC41IH1cbiAgaW50ZXJhY3Rpb24ucG9pbnRlck1vdmUoc2ltaWxhck1vdmVFdmVudCwgc2ltaWxhck1vdmVFdmVudCwgZWxlbWVudClcbiAgdC5lcXVhbChmaXJlZEV2ZW50cy5sZW5ndGgsIDAsICdkdXBsaWNhdGUgcmVzdWx0IGNvb3JkcyBhcmUgaWdub3JlZCcpXG5cbiAgaW50ZXJhY3Rpb24uc3RvcCgpXG5cbiAgdC5vayhcbiAgICBvcHRpb25zLnN0b3BwZWQsXG4gICAgJ21vZGlmaWVyIG1ldGhvZHMuc3RvcCgpIHdhcyBjYWxsZWQnLFxuICApXG5cbiAgLy8gZG9uJ3Qgc2V0IHN0YXJ0XG4gIG9wdGlvbnMuc2V0U3RhcnQgPSBudWxsXG4gIC8vIGFkZCBzZWNvbmQgbW9kaWZpZXJcbiAgaW50ZXJhY3RhYmxlLm9wdGlvbnMudGVzdC5tb2RpZmllcnMucHVzaCh7XG4gICAgb3B0aW9ucyxcbiAgICBtZXRob2RzOiBkb3VibGVNb2RpZmllcixcbiAgfSlcblxuICBpbnRlcmFjdGlvbi5wb2ludGVyRG93bihzdGFydEV2ZW50LCBzdGFydEV2ZW50LCBlbGVtZW50KVxuICBpbnRlcmFjdGlvbi5zdGFydCh7IG5hbWU6ICd0ZXN0JyB9LCBpbnRlcmFjdGFibGUsIGVsZW1lbnQpXG5cbiAgdC5ub3RPayhcbiAgICBvcHRpb25zLnNldHRlZCxcbiAgICAnbW9kaWZpZXIgbWV0aG9kcy5zZXQoKSB3YXMgbm90IGNhbGxlZCBvbiBzdGFydCBwaGFzZSB3aXRob3V0IG9wdGlvbnMuc2V0U3RhcnQnLFxuICApXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgaW50ZXJhY3Rpb24ucHJldkV2ZW50LnBhZ2UsXG4gICAgeyB4OiAxMDAsIHk6IDIwMCB9LFxuICAgICdzdGFydCBldmVudCBjb29yZHMgYXJlIG5vdCBtb2RpZmllZCB3aXRob3V0IG9wdGlvbnMuc2V0U3RhcnQnKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGludGVyYWN0aW9uLmNvb3Jkcy5zdGFydC5wYWdlLFxuICAgIHsgeDogMTAwLCB5OiAyMDAgfSxcbiAgICAnaW50ZXJhY3Rpb24uY29vcmRzLnN0YXJ0IGFyZSBub3QgbW9kaWZpZWQgd2l0aG91dCBvcHRpb25zLnNldFN0YXJ0JylcblxuICBpbnRlcmFjdGlvbi5wb2ludGVyTW92ZShtb3ZlRXZlbnQsIG1vdmVFdmVudCwgZWxlbWVudClcblxuICB0LmRlZXBFcXVhbChcbiAgICBpbnRlcmFjdGlvbi5wcmV2RXZlbnQucGFnZSxcbiAgICB7IHg6IDIwMCwgeTogMjAwIH0sXG4gICAgJ21vdmUgZXZlbnQgY29vcmRzIGFyZSBtb2RpZmllZCBieSBhbGwgbW9kaWZpZXJzJylcblxuICAvLyBtb2RpZmllciBvcHRpb25zLnR5cGVcbiAgc2NvcGUubW9kaWZpZXJzLnRhcmdldCA9IG1vZGlmaWVyc0Jhc2UubWFrZU1vZGlmaWVyKHRhcmdldE1vZGlmaWVyKVxuICBvcHRpb25zLnR5cGUgPSAndGFyZ2V0J1xuICBvcHRpb25zLnN0YXJ0ZWQgPSBmYWxzZVxuICBpbnRlcmFjdGFibGUub3B0aW9ucy50ZXN0ID0ge1xuICAgIG1vZGlmaWVyczogW1xuICAgICAgb3B0aW9ucyxcbiAgICBdLFxuICB9XG4gIGludGVyYWN0aW9uLnN0b3AoKVxuICBpbnRlcmFjdGlvbi5zdGFydCh7IG5hbWU6ICd0ZXN0JyB9LCBpbnRlcmFjdGFibGUsIGVsZW1lbnQpXG5cbiAgdC5vayhvcHRpb25zLnN0YXJ0ZWQsICdnZXRzIGBzY3BlLm1vZGlmaWVyc1tvcHRpb25zLnR5cGVdYCcpXG5cbiAgdC5lbmQoKVxufSlcblxuY29uc3QgdGFyZ2V0TW9kaWZpZXIgPSB7XG4gIHN0YXJ0ICh7IHN0YXRlIH0pIHtcbiAgICBzdGF0ZS5vcHRpb25zLnN0YXJ0ZWQgPSB0cnVlXG4gIH0sXG4gIHNldCAoeyBzdGF0ZSwgY29vcmRzIH0pIHtcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gc3RhdGUub3B0aW9uc1xuXG4gICAgY29vcmRzLnggPSB0YXJnZXQueFxuICAgIGNvb3Jkcy55ID0gdGFyZ2V0LnlcblxuICAgIHN0YXRlLm9wdGlvbnMuc2V0dGVkID0gdHJ1ZVxuICB9LFxuICBzdG9wICh7IHN0YXRlIH0pIHtcbiAgICBzdGF0ZS5vcHRpb25zLnN0b3BwZWQgPSB0cnVlXG4gICAgZGVsZXRlIHN0YXRlLm9wdGlvbnMuc3RhcnRlZFxuICAgIGRlbGV0ZSBzdGF0ZS5vcHRpb25zLnNldHRlZFxuICB9LFxufVxuXG5jb25zdCBkb3VibGVNb2RpZmllciA9IHtcbiAgc3RhcnQgKCkge30sXG4gIHNldCAoeyBjb29yZHMgfSkge1xuICAgIGNvb3Jkcy54ICo9IDJcbiAgICBjb29yZHMueSAqPSAyXG4gIH0sXG59XG4iXX0= \ No newline at end of file diff --git a/packages/modifiers/tests/restrict/edges.d.ts b/packages/modifiers/tests/restrict/edges.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/modifiers/tests/restrict/edges.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/modifiers/tests/restrict/edges.js b/packages/modifiers/tests/restrict/edges.js new file mode 100644 index 000000000..b83bda7dc --- /dev/null +++ b/packages/modifiers/tests/restrict/edges.js @@ -0,0 +1,53 @@ +import test from '@interactjs/_dev/test/test'; +import Interaction from '@interactjs/core/Interaction'; +import { mockSignals } from '@interactjs/core/tests/helpers'; +import restrictEdges from '../../restrict/edges'; +test('restrictEdges', (t) => { + const interaction = new Interaction({ signals: mockSignals() }); + interaction.prepared = {}; + interaction.prepared.edges = { top: true, bottom: true, left: true, right: true }; + interaction.resizeRects = {}; + interaction.resizeRects.inverted = { x: 10, y: 20, width: 300, height: 200 }; + interaction._interacting = true; + const options = { enabled: true }; + const coords = { x: 40, y: 40 }; + const offset = { top: 0, left: 0, bottom: 0, right: 0 }; + const state = { options, offset }; + const arg = { interaction, state }; + arg.coords = { ...coords }; + // outer restriction + options.outer = { top: 100, left: 100, bottom: 200, right: 200 }; + restrictEdges.set(arg); + t.deepEqual(arg.coords, { x: coords.y + 60, y: coords.y + 60 }, 'outer restriction is applied correctly'); + arg.coords = { ...coords }; + // inner restriction + options.outer = null; + options.inner = { top: 0, left: 0, bottom: 10, right: 10 }; + restrictEdges.set(arg); + t.deepEqual(arg.coords, { x: coords.x - 40, y: coords.y - 40 }, 'inner restriction is applied correctly'); + // offset + Object.assign(offset, { + top: 100, + left: 100, + bottom: 200, + right: 200, + }); + arg.coords = { ...coords }; + options.outer = { top: 100, left: 100, bottom: 200, right: 200 }; + options.inner = null; + restrictEdges.set(arg); + t.deepEqual(arg.coords, { x: coords.x + 160, y: coords.x + 160 }, 'outer restriction is applied correctly with offset'); + // start + interaction.modifiers = {}; + interaction.modifiers.startOffset = { top: 5, left: 10, bottom: -8, right: -16 }; + interaction.target = { + getRect() { + return { top: 500, left: 900 }; + }, + }; + options.offset = 'self'; + restrictEdges.start(arg); + t.deepEqual(arg.state.offset, { top: 505, left: 910, bottom: 508, right: 916 }, 'start gets x/y from selector string'); + t.end(); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlZGdlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSw0QkFBNEIsQ0FBQTtBQUM3QyxPQUFPLFdBQVcsTUFBTSw4QkFBOEIsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFDNUQsT0FBTyxhQUFhLE1BQU0sc0JBQXNCLENBQUE7QUFFaEQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO0lBQzFCLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFTLENBQUMsQ0FBQTtJQUN0RSxXQUFXLENBQUMsUUFBUSxHQUFHLEVBQVMsQ0FBQTtJQUNoQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQTtJQUNqRixXQUFXLENBQUMsV0FBVyxHQUFHLEVBQVMsQ0FBQTtJQUNuQyxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQVMsQ0FBQTtJQUNuRixXQUFXLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQTtJQUUvQixNQUFNLE9BQU8sR0FBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQTtJQUN0QyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFBO0lBQy9CLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxF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LE1BQU0sQ0FBQTtJQUN2QixhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRXhCLENBQUMsQ0FBQyxTQUFTLENBQ1QsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQ2hCLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUNoRCxxQ0FBcUMsQ0FDdEMsQ0FBQTtJQUVELENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgSW50ZXJhY3Rpb24gZnJvbSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbidcbmltcG9ydCB7IG1vY2tTaWduYWxzIH0gZnJvbSAnQGludGVyYWN0anMvY29yZS90ZXN0cy9oZWxwZXJzJ1xuaW1wb3J0IHJlc3RyaWN0RWRnZXMgZnJvbSAnLi4vLi4vcmVzdHJpY3QvZWRnZXMnXG5cbnRlc3QoJ3Jlc3RyaWN0RWRnZXMnLCAodCkgPT4ge1xuICBjb25zdCBpbnRlcmFjdGlvbiA9IG5ldyBJbnRlcmFjdGlvbih7IHNpZ25hbHM6IG1vY2tTaWduYWxzKCkgfSBhcyBhbnkpXG4gIGludGVyYWN0aW9uLnByZXBhcmVkID0ge30gYXMgYW55XG4gIGludGVyYWN0aW9uLnByZXBhcmVkLmVkZ2VzID0geyB0b3A6IHRydWUsIGJvdHRvbTogdHJ1ZSwgbGVmdDogdHJ1ZSwgcmlnaHQ6IHRydWUgfVxuICBpbnRlcmFjdGlvbi5yZXNpemVSZWN0cyA9IHt9IGFzIGFueVxuICBpbnRlcmFjdGlvbi5yZXNpemVSZWN0cy5pbnZlcnRlZCA9IHsgeDogMTAsIHk6IDIwLCB3aWR0aDogMzAwLCBoZWlnaHQ6IDIwMCB9IGFzIGFueVxuICBpbnRlcmFjdGlvbi5faW50ZXJhY3RpbmcgPSB0cnVlXG5cbiAgY29uc3Qgb3B0aW9uczogYW55ID0geyBlbmFibGVkOiB0cnVlIH1cbiAgY29uc3QgY29vcmRzID0geyB4OiA0MCwgeTogNDAgfVxuICBjb25zdCBvZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMCwgYm90dG9tOiAwLCByaWdodDogMCB9XG4gIGNvbnN0IHN0YXRlID0geyBvcHRpb25zLCBvZmZzZXQgfVxuICBjb25zdCBhcmcgPSB7IGludGVyYWN0aW9uLCBzdGF0ZSB9IGFzIGFueVxuXG4gIGFyZy5jb29yZHMgPSB7IC4uLmNvb3JkcyB9XG5cbiAgLy8gb3V0ZXIgcmVzdHJpY3Rpb25cbiAgb3B0aW9ucy5vdXRlciA9IHsgdG9wOiAxMDAsIGxlZnQ6IDEwMCwgYm90dG9tOiAyMDAsIHJpZ2h0OiAyMDAgfVxuICByZXN0cmljdEVkZ2VzLnNldChhcmcpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgYXJnLmNvb3JkcyxcbiAgICB7IHg6IGNvb3Jkcy55ICsgNjAsIHk6IGNvb3Jkcy55ICsgNjAgfSxcbiAgICAnb3V0ZXIgcmVzdHJpY3Rpb24gaXMgYXBwbGllZCBjb3JyZWN0bHknXG4gIClcblxuICBhcmcuY29vcmRzID0geyAuLi5jb29yZHMgfVxuXG4gIC8vIGlubmVyIHJlc3RyaWN0aW9uXG4gIG9wdGlvbnMub3V0ZXIgPSBudWxsXG4gIG9wdGlvbnMuaW5uZXIgPSB7IHRvcDogMCwgbGVmdDogMCwgYm90dG9tOiAxMCwgcmlnaHQ6IDEwIH1cbiAgcmVzdHJpY3RFZGdlcy5zZXQoYXJnKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGFyZy5jb29yZHMsXG4gICAgeyB4OiBjb29yZHMueCAtIDQwLCB5OiBjb29yZHMueSAtIDQwIH0sXG4gICAgJ2lubmVyIHJlc3RyaWN0aW9uIGlzIGFwcGxpZWQgY29ycmVjdGx5J1xuICApXG5cbiAgLy8gb2Zmc2V0XG4gIE9iamVjdC5hc3NpZ24ob2Zmc2V0LCB7XG4gICAgdG9wOiAxMDAsXG4gICAgbGVmdDogMTAwLFxuICAgIGJvdHRvbTogMjAwLFxuICAgIHJpZ2h0OiAyMDAsXG4gIH0pXG4gIGFyZy5jb29yZHMgPSB7IC4uLmNvb3JkcyB9XG5cbiAgb3B0aW9ucy5vdXRlciA9IHsgdG9wOiAxMDAsIGxlZnQ6IDEwMCwgYm90dG9tOiAyMDAsIHJpZ2h0OiAyMDAgfVxuICBvcHRpb25zLmlubmVyID0gbnVsbFxuICByZXN0cmljdEVkZ2VzLnNldChhcmcpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgYXJnLmNvb3JkcyxcbiAgICB7IHg6IGNvb3Jkcy54ICsgMTYwLCB5OiBjb29yZHMueCArIDE2MCB9LFxuICAgICdvdXRlciByZXN0cmljdGlvbiBpcyBhcHBsaWVkIGNvcnJlY3RseSB3aXRoIG9mZnNldCdcbiAgKVxuXG4gIC8vIHN0YXJ0XG4gIGludGVyYWN0aW9uLm1vZGlmaWVycyA9IHt9XG4gIGludGVyYWN0aW9uLm1vZGlmaWVycy5zdGFydE9mZnNldCA9IHsgdG9wOiA1LCBsZWZ0OiAxMCwgYm90dG9tOiAtOCwgcmlnaHQ6IC0xNiB9XG4gIGludGVyYWN0aW9uLnRhcmdldCA9IHtcbiAgICBnZXRSZWN0ICgpIHtcbiAgICAgIHJldHVybiB7IHRvcDogNTAwLCBsZWZ0OiA5MDAgfVxuICAgIH0sXG4gIH0gYXMgYW55XG5cbiAgb3B0aW9ucy5vZmZzZXQgPSAnc2VsZidcbiAgcmVzdHJpY3RFZGdlcy5zdGFydChhcmcpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgYXJnLnN0YXRlLm9mZnNldCxcbiAgICB7IHRvcDogNTA1LCBsZWZ0OiA5MTAsIGJvdHRvbTogNTA4LCByaWdodDogOTE2IH0sXG4gICAgJ3N0YXJ0IGdldHMgeC95IGZyb20gc2VsZWN0b3Igc3RyaW5nJ1xuICApXG5cbiAgdC5lbmQoKVxufSlcbiJdfQ== \ No newline at end of file diff --git a/packages/modifiers/tests/restrict/size.d.ts b/packages/modifiers/tests/restrict/size.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/modifiers/tests/restrict/size.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/modifiers/tests/restrict/size.js b/packages/modifiers/tests/restrict/size.js new file mode 100644 index 000000000..7fa90e193 --- /dev/null +++ b/packages/modifiers/tests/restrict/size.js @@ -0,0 +1,53 @@ +import test from '@interactjs/_dev/test/test'; +import { mockSignals } from '@interactjs/core/tests/helpers'; +import rectUtils from '@interactjs/utils/rect'; +import Interaction from '@interactjs/core/Interaction'; +import base from '../../base'; +import restrictSize from '../../restrict/size'; +test('restrictSize', t => { + const edges = { left: true, top: true }; + const rect = { left: 0, top: 0, right: 200, bottom: 300 }; + const interaction = new Interaction({ signals: mockSignals() }); + interaction.prepared = { name: null }; + interaction.prepared.edges = edges; + interaction.resizeRects = {}; + interaction.resizeRects.inverted = rectUtils.xywhToTlbr(rect); + interaction.modifiers = {}; + interaction._interacting = true; + const options = { + min: { width: 60, height: 50 }, + max: { width: 300, height: 350 }, + }; + const startCoords = Object.freeze({ x: 0, y: 0 }); + const offset = { top: 0, bottom: 0, left: 0, right: 0 }; + const state = { + options, + offset, + methods: restrictSize, + }; + const arg = { + interaction, + states: [state], + coords: startCoords, + pageCoords: startCoords, + options, + state: null, + }; + interaction.modifiers.startOffset = base.getRectOffset(rect, startCoords); + base.startAll(arg); + arg.state = state; + const move1 = Object.freeze({ x: -50, y: -40 }); + arg.coords = { ...move1 }; + restrictSize.set(arg); + t.deepEqual(arg.coords, move1, 'within both min and max'); + const move2 = Object.freeze({ x: -200, y: -300 }); + arg.coords = { ...move2 }; + restrictSize.set(arg); + t.deepEqual(arg.coords, { x: -100, y: -50 }, 'outside max'); + const move3 = Object.freeze({ x: 250, y: 320 }); + arg.coords = { ...move3 }; + restrictSize.set(arg); + t.deepEqual(arg.coords, { x: 140, y: 250 }, 'outside min'); + t.end(); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sNEJBQTRCLENBQUE7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBRTVELE9BQU8sU0FBUyxNQUFNLHdCQUF3QixDQUFBO0FBQzlDLE9BQU8sV0FBVyxNQUFNLDhCQUE4QixDQUFBO0FBQ3RELE9BQU8sSUFBSSxNQUFNLFlBQVksQ0FBQTtBQUM3QixPQUFPLFlBQVksTUFBTSxxQkFBcUIsQ0FBQTtBQUU5QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ3ZCLE1BQU0sS0FBSyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUE7SUFDdkMsTUFBTSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUE7SUFDekQsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQVMsQ0FBQyxDQUFBO0lBRXRFLFdBQVcsQ0FBQyxRQUFRLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUE7SUFDckMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO0lBQ2xDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsRUFBUyxDQUFBO0lBQ25DLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDN0QsV0FBVyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUE7SUFDMUIsV0FBVyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUE7SUFFL0IsTUFBTSxPQUFPLEdBQUc7UUFDZCxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRyxFQUFFLEVBQUU7UUFDaEMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFO0tBQ2pDLENBQUE7SUFDRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNqRCxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQTtJQUN2RCxNQUFNLEtBQUssR0FBRztRQUNaLE9BQU87UUFDUCxNQUFNO1FBQ04sT0FBTyxFQUFFLFlBQVk7S0FDdEIsQ0FBQTtJQUNELE1BQU0sR0FBRyxHQUFHO1FBQ1YsV0FBVztRQUNYLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQztRQUNmLE1BQU0sRUFBRSxXQUFXO1FBQ25CLFVBQVUsRUFBRSxXQUFXO1FBQ3ZCLE9BQU87UUFDUCxLQUFLLEVBQUUsSUFBSTtLQUNaLENBQUE7SUFFRCxXQUFXLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUN6RSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2xCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO0lBRWpCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUMvQyxHQUFHLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQTtJQUN6QixZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRXJCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUseUJBQXlCLENBQUMsQ0FBQTtJQUV6RCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUE7SUFDakQsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUE7SUFDekIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUVyQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUE7SUFFM0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7SUFDL0MsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUE7SUFDekIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUVyQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQTtJQUUxRCxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7QUFDVCxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0ZXN0IGZyb20gJ0BpbnRlcmFjdGpzL19kZXYvdGVzdC90ZXN0J1xuaW1wb3J0IHsgbW9ja1NpZ25hbHMgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Rlc3RzL2hlbHBlcnMnXG5cbmltcG9ydCByZWN0VXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvcmVjdCdcbmltcG9ydCBJbnRlcmFjdGlvbiBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0aW9uJ1xuaW1wb3J0IGJhc2UgZnJvbSAnLi4vLi4vYmFzZSdcbmltcG9ydCByZXN0cmljdFNpemUgZnJvbSAnLi4vLi4vcmVzdHJpY3Qvc2l6ZSdcblxudGVzdCgncmVzdHJpY3RTaXplJywgdCA9PiB7XG4gIGNvbnN0IGVkZ2VzID0geyBsZWZ0OiB0cnVlLCB0b3A6IHRydWUgfVxuICBjb25zdCByZWN0ID0geyBsZWZ0OiAwLCB0b3A6IDAsIHJpZ2h0OiAyMDAsIGJvdHRvbTogMzAwIH1cbiAgY29uc3QgaW50ZXJhY3Rpb24gPSBuZXcgSW50ZXJhY3Rpb24oeyBzaWduYWxzOiBtb2NrU2lnbmFscygpIH0gYXMgYW55KVxuXG4gIGludGVyYWN0aW9uLnByZXBhcmVkID0geyBuYW1lOiBudWxsIH1cbiAgaW50ZXJhY3Rpb24ucHJlcGFyZWQuZWRnZXMgPSBlZGdlc1xuICBpbnRlcmFjdGlvbi5yZXNpemVSZWN0cyA9IHt9IGFzIGFueVxuICBpbnRlcmFjdGlvbi5yZXNpemVSZWN0cy5pbnZlcnRlZCA9IHJlY3RVdGlscy54eXdoVG9UbGJyKHJlY3QpXG4gIGludGVyYWN0aW9uLm1vZGlmaWVycyA9IHt9XG4gIGludGVyYWN0aW9uLl9pbnRlcmFjdGluZyA9IHRydWVcblxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIG1pbjogeyB3aWR0aDogIDYwLCBoZWlnaHQ6ICA1MCB9LFxuICAgIG1heDogeyB3aWR0aDogMzAwLCBoZWlnaHQ6IDM1MCB9LFxuICB9XG4gIGNvbnN0IHN0YXJ0Q29vcmRzID0gT2JqZWN0LmZyZWV6ZSh7IHg6IDAsIHk6IDAgfSlcbiAgY29uc3Qgb2Zmc2V0ID0geyB0b3A6IDAsIGJvdHRvbTogMCwgbGVmdDogMCwgcmlnaHQ6IDAgfVxuICBjb25zdCBzdGF0ZSA9IHtcbiAgICBvcHRpb25zLFxuICAgIG9mZnNldCxcbiAgICBtZXRob2RzOiByZXN0cmljdFNpemUsXG4gIH1cbiAgY29uc3QgYXJnID0ge1xuICAgIGludGVyYWN0aW9uLFxuICAgIHN0YXRlczogW3N0YXRlXSxcbiAgICBjb29yZHM6IHN0YXJ0Q29vcmRzLFxuICAgIHBhZ2VDb29yZHM6IHN0YXJ0Q29vcmRzLFxuICAgIG9wdGlvbnMsXG4gICAgc3RhdGU6IG51bGwsXG4gIH1cblxuICBpbnRlcmFjdGlvbi5tb2RpZmllcnMuc3RhcnRPZmZzZXQgPSBiYXNlLmdldFJlY3RPZmZzZXQocmVjdCwgc3RhcnRDb29yZHMpXG4gIGJhc2Uuc3RhcnRBbGwoYXJnKVxuICBhcmcuc3RhdGUgPSBzdGF0ZVxuXG4gIGNvbnN0IG1vdmUxID0gT2JqZWN0LmZyZWV6ZSh7IHg6IC01MCwgeTogLTQwIH0pXG4gIGFyZy5jb29yZHMgPSB7IC4uLm1vdmUxIH1cbiAgcmVzdHJpY3RTaXplLnNldChhcmcpXG5cbiAgdC5kZWVwRXF1YWwoYXJnLmNvb3JkcywgbW92ZTEsICd3aXRoaW4gYm90aCBtaW4gYW5kIG1heCcpXG5cbiAgY29uc3QgbW92ZTIgPSBPYmplY3QuZnJlZXplKHsgeDogLTIwMCwgeTogLTMwMCB9KVxuICBhcmcuY29vcmRzID0geyAuLi5tb3ZlMiB9XG4gIHJlc3RyaWN0U2l6ZS5zZXQoYXJnKVxuXG4gIHQuZGVlcEVxdWFsKGFyZy5jb29yZHMsIHsgeDogLTEwMCwgeTogLTUwIH0sICdvdXRzaWRlIG1heCcpXG5cbiAgY29uc3QgbW92ZTMgPSBPYmplY3QuZnJlZXplKHsgeDogMjUwLCB5OiAzMjAgfSlcbiAgYXJnLmNvb3JkcyA9IHsgLi4ubW92ZTMgfVxuICByZXN0cmljdFNpemUuc2V0KGFyZylcblxuICB0LmRlZXBFcXVhbChhcmcuY29vcmRzLCB7IHg6IDE0MCwgeTogMjUwIH0sICdvdXRzaWRlIG1pbicpXG5cbiAgdC5lbmQoKVxufSlcbiJdfQ== \ No newline at end of file diff --git a/packages/modifiers/tests/snap/edges.d.ts b/packages/modifiers/tests/snap/edges.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/modifiers/tests/snap/edges.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/modifiers/tests/snap/edges.js b/packages/modifiers/tests/snap/edges.js new file mode 100644 index 000000000..637fe3f36 --- /dev/null +++ b/packages/modifiers/tests/snap/edges.js @@ -0,0 +1,46 @@ +import test from '@interactjs/_dev/test/test'; +import Interaction from '@interactjs/core/Interaction'; +import { mockInteractable, mockScope, mockSignals } from '@interactjs/core/tests/helpers'; +import snapEdges from '../../snap/edges'; +test('modifiers/snapEdges', (t) => { + mockScope(); + const interaction = new Interaction({ signals: mockSignals() }); + interaction.target = mockInteractable(); + interaction.target.getRect = () => ({ top: 0, left: 0, bottom: 100, right: 100 }); + interaction._interacting = true; + const target0 = Object.freeze({ + left: 50, + right: 150, + top: 0, + bottom: 100, + }); + const options = { + targets: [ + { ...target0 }, + ], + range: Infinity, + }; + const pageCoords = Object.freeze({ x: 0, y: 0 }); + const arg = { + interaction, + interactable: interaction.target, + state: null, + pageCoords, + coords: { ...pageCoords }, + offset: [{ x: 0, y: 0 }], + }; + // resize from top left + interaction.prepared.edges = { top: true, left: true }; + arg.state = { options }; + snapEdges.start(arg); + snapEdges.set(arg); + t.deepEqual(arg.coords, { x: target0.left, y: target0.top }, 'modified coords are correct'); + // resize from bottom right + interaction.prepared.edges = { bottom: true, right: true }; + arg.state = { options }; + snapEdges.start(arg); + snapEdges.set(arg); + t.deepEqual(arg.coords, { x: target0.right, y: target0.bottom }, 'modified coord are correct'); + t.end(); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlZGdlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSw0QkFBNEIsQ0FBQTtBQUM3QyxPQUFPLFdBQVcsTUFBTSw4QkFBOEIsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBQ3pGLE9BQU8sU0FBUyxNQUFNLGtCQUFrQixDQUFBO0FBRXhDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO0lBQ2hDLFNBQVMsRUFBRSxDQUFBO0lBQ1gsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQVMsQ0FBQyxDQUFBO0lBQ3RFLFdBQVcsQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQTtJQUN2QyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBVSxDQUFBLENBQUE7SUFDeEYsV0FBVyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUE7SUFFL0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM1QixJQUFJLEVBQUUsRUFBRTtRQUNSLEtBQUssRUFBRSxHQUFHO1FBQ1YsR0FBRyxFQUFFLENBQUM7UUFDTixNQUFNLEVBQUUsR0FBRztLQUNaLENBQUMsQ0FBQTtJQUNGLE1BQU0sT0FBTyxHQUFHO1FBQ2QsT0FBTyxFQUFFO1lBQ1AsRUFBRSxHQUFHLE9BQU8sRUFBRTtTQUNmO1FBQ0QsS0FBSyxFQUFFLFFBQVE7S0FDaEIsQ0FBQTtJQUNELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ2hELE1BQU0sR0FBRyxHQUFHO1FBQ1YsV0FBVztRQUNYLFlBQVksRUFBRSxXQUFXLENBQUMsTUFBTTtRQUNoQyxLQUFLLEVBQUUsSUFBSTtRQUNYLFVBQVU7UUFDVixNQUFNLEVBQUUsRUFBRSxHQUFHLFVBQVUsRUFBRTtRQUN6QixNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0tBQ3pCLENBQUE7SUFFRCx1QkFBdUI7SUFDdkIsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQTtJQUV0RCxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUE7SUFDdkIsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNwQixTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRWxCLENBQUMsQ0FBQyxTQUFTLENBQ1QsR0FBRyxDQUFDLE1BQU0sRUFDVixFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQ25DLDZCQUE2QixDQUFDLENBQUE7SUFFaEMsMkJBQTJCO0lBQzNCLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUE7SUFFMUQsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFBO0lBQ3ZCLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDcEIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUVsQixDQUFDLENBQUMsU0FBUyxDQUNULEdBQUcsQ0FBQyxNQUFNLEVBQ1YsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUN2Qyw0QkFBNEIsQ0FBQyxDQUFBO0lBRS9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgSW50ZXJhY3Rpb24gZnJvbSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbidcbmltcG9ydCB7IG1vY2tJbnRlcmFjdGFibGUsIG1vY2tTY29wZSwgbW9ja1NpZ25hbHMgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Rlc3RzL2hlbHBlcnMnXG5pbXBvcnQgc25hcEVkZ2VzIGZyb20gJy4uLy4uL3NuYXAvZWRnZXMnXG5cbnRlc3QoJ21vZGlmaWVycy9zbmFwRWRnZXMnLCAodCkgPT4ge1xuICBtb2NrU2NvcGUoKVxuICBjb25zdCBpbnRlcmFjdGlvbiA9IG5ldyBJbnRlcmFjdGlvbih7IHNpZ25hbHM6IG1vY2tTaWduYWxzKCkgfSBhcyBhbnkpXG4gIGludGVyYWN0aW9uLnRhcmdldCA9IG1vY2tJbnRlcmFjdGFibGUoKVxuICBpbnRlcmFjdGlvbi50YXJnZXQuZ2V0UmVjdCA9ICgpID0+ICh7IHRvcDogMCwgbGVmdDogMCwgYm90dG9tOiAxMDAsIHJpZ2h0OiAxMDAgfSBhcyBhbnkpXG4gIGludGVyYWN0aW9uLl9pbnRlcmFjdGluZyA9IHRydWVcblxuICBjb25zdCB0YXJnZXQwID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgbGVmdDogNTAsXG4gICAgcmlnaHQ6IDE1MCxcbiAgICB0b3A6IDAsXG4gICAgYm90dG9tOiAxMDAsXG4gIH0pXG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgdGFyZ2V0czogW1xuICAgICAgeyAuLi50YXJnZXQwIH0sXG4gICAgXSxcbiAgICByYW5nZTogSW5maW5pdHksXG4gIH1cbiAgY29uc3QgcGFnZUNvb3JkcyA9IE9iamVjdC5mcmVlemUoeyB4OiAwLCB5OiAwIH0pXG4gIGNvbnN0IGFyZyA9IHtcbiAgICBpbnRlcmFjdGlvbixcbiAgICBpbnRlcmFjdGFibGU6IGludGVyYWN0aW9uLnRhcmdldCxcbiAgICBzdGF0ZTogbnVsbCxcbiAgICBwYWdlQ29vcmRzLFxuICAgIGNvb3JkczogeyAuLi5wYWdlQ29vcmRzIH0sXG4gICAgb2Zmc2V0OiBbeyB4OiAwLCB5OiAwIH1dLFxuICB9XG5cbiAgLy8gcmVzaXplIGZyb20gdG9wIGxlZnRcbiAgaW50ZXJhY3Rpb24ucHJlcGFyZWQuZWRnZXMgPSB7IHRvcDogdHJ1ZSwgbGVmdDogdHJ1ZSB9XG5cbiAgYXJnLnN0YXRlID0geyBvcHRpb25zIH1cbiAgc25hcEVkZ2VzLnN0YXJ0KGFyZylcbiAgc25hcEVkZ2VzLnNldChhcmcpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgYXJnLmNvb3JkcyxcbiAgICB7IHg6IHRhcmdldDAubGVmdCwgeTogdGFyZ2V0MC50b3AgfSxcbiAgICAnbW9kaWZpZWQgY29vcmRzIGFyZSBjb3JyZWN0JylcblxuICAvLyByZXNpemUgZnJvbSBib3R0b20gcmlnaHRcbiAgaW50ZXJhY3Rpb24ucHJlcGFyZWQuZWRnZXMgPSB7IGJvdHRvbTogdHJ1ZSwgcmlnaHQ6IHRydWUgfVxuXG4gIGFyZy5zdGF0ZSA9IHsgb3B0aW9ucyB9XG4gIHNuYXBFZGdlcy5zdGFydChhcmcpXG4gIHNuYXBFZGdlcy5zZXQoYXJnKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGFyZy5jb29yZHMsXG4gICAgeyB4OiB0YXJnZXQwLnJpZ2h0LCB5OiB0YXJnZXQwLmJvdHRvbSB9LFxuICAgICdtb2RpZmllZCBjb29yZCBhcmUgY29ycmVjdCcpXG5cbiAgdC5lbmQoKVxufSlcbiJdfQ== \ No newline at end of file diff --git a/packages/modifiers/tests/snap/pointer.d.ts b/packages/modifiers/tests/snap/pointer.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/modifiers/tests/snap/pointer.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/modifiers/tests/snap/pointer.js b/packages/modifiers/tests/snap/pointer.js new file mode 100644 index 000000000..b71a1fdb4 --- /dev/null +++ b/packages/modifiers/tests/snap/pointer.js @@ -0,0 +1,58 @@ +import test from '@interactjs/_dev/test/test'; +import { mockSignals, mockInteractable } from '@interactjs/core/tests/helpers'; +import Interaction from '@interactjs/core/Interaction'; +import snap from '../../snap/pointer'; +test('modifiers/snap', t => { + const interaction = new Interaction({ signals: mockSignals() }); + interaction.target = mockInteractable(); + interaction.prepared = {}; + interaction._interacting = true; + let funcArgs = null; + const target0 = Object.freeze({ x: 50, y: 100 }); + // eslint-disable-next-line no-restricted-syntax, no-shadow + const targetFunc = (x, y, interaction, offset, index, ...unexpected) => { + funcArgs = { x, y, interaction, offset, index, unexpected }; + return target0; + }; + const relativePoint = { x: 0, y: 0 }; + const options = { + targets: [ + target0, + targetFunc, + ], + range: Infinity, + relativePoints: [relativePoint], + origin: { x: 0, y: 0 }, + }; + const state = { + options, + delta: { x: 0, y: 0 }, + }; + const pageCoords = Object.freeze({ x: 10, y: 20 }); + const arg = { + interaction, + state, + pageCoords, + coords: { ...pageCoords }, + rect: { top: 0, left: 0, bottom: 100, right: 100, width: 100, height: 100 }, + startOffset: { top: 0, left: 0, bottom: 0, right: 0 }, + }; + snap.start(arg); + snap.set(arg); + t.deepEqual(arg.coords, target0, 'snap.set single target, zereo offset'); + t.deepEqual(funcArgs, { + x: pageCoords.x, + y: pageCoords.y, + interaction, + offset: { + x: relativePoint.x, + y: relativePoint.y, + relativePoint, + index: 0, + }, + index: 1, + unexpected: [], + }, ' x, y, interaction, offset, index are passed to target function'); + t.end(); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBvaW50ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sNEJBQTRCLENBQUE7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBRTlFLE9BQU8sV0FBVyxNQUFNLDhCQUE4QixDQUFBO0FBQ3RELE9BQU8sSUFBSSxNQUFNLG9CQUFvQixDQUFBO0FBRXJDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUN6QixNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBUyxDQUFDLENBQUE7SUFDdEUsV0FBVyxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsRUFBRSxDQUFBO0lBQ3ZDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsRUFBUyxDQUFBO0lBQ2hDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFBO0lBRS9CLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQTtJQUNuQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUNsRCwyREFBMkQ7SUFDM0QsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsVUFBVSxFQUFFLEVBQUU7UUFDckUsUUFBUSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQTtRQUMzRCxPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDLENBQUE7SUFDRCxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFBO0lBQ3BDLE1BQU0sT0FBTyxHQUFHO1FBQ2QsT0FBTyxFQUFFO1lBQ1AsT0FBTztZQUNQLFVBQVU7U0FDWDtRQUNELEtBQUssRUFBRSxRQUFRO1FBQ2YsY0FBYyxFQUFFLENBQUMsYUFBYSxDQUFDO1FBQy9CLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtLQUN2QixDQUFBO0lBRUQsTUFBTSxLQUFLLEdBQUc7UUFDWixPQUFPO1FBQ1AsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0tBQ3RCLENBQUE7SUFDRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUNsRCxNQUFNLEdBQUcsR0FBRztRQUNWLFdBQVc7UUFDWCxLQUFLO1FBQ0wsVUFBVTtRQUNWLE1BQU0sRUFBRSxFQUFFLEdBQUcsVUFBVSxFQUFFO1FBQ3pCLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFO1FBQzNFLFdBQVcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7S0FDL0MsQ0FBQTtJQUVSLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRWIsQ0FBQyxDQUFDLFNBQVMsQ0FDVCxHQUFHLENBQUMsTUFBTSxFQUNWLE9BQU8sRUFDUCxzQ0FBc0MsQ0FDdkMsQ0FBQTtJQUVELENBQUMsQ0FBQyxTQUFTLENBQ1QsUUFBUSxFQUNSO1FBQ0UsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2YsV0FBVztRQUNYLE1BQU0sRUFBRTtZQUNOLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNsQixDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDbEIsYUFBYTtZQUNiLEtBQUssRUFBRSxDQUFDO1NBQ1Q7UUFDRCxLQUFLLEVBQUUsQ0FBQztRQUNSLFVBQVUsRUFBRSxFQUFFO0tBQ2YsRUFDRCxpRUFBaUUsQ0FDbEUsQ0FBQTtJQUVELENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgeyBtb2NrU2lnbmFscywgbW9ja0ludGVyYWN0YWJsZSB9IGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvdGVzdHMvaGVscGVycydcblxuaW1wb3J0IEludGVyYWN0aW9uIGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3Rpb24nXG5pbXBvcnQgc25hcCBmcm9tICcuLi8uLi9zbmFwL3BvaW50ZXInXG5cbnRlc3QoJ21vZGlmaWVycy9zbmFwJywgdCA9PiB7XG4gIGNvbnN0IGludGVyYWN0aW9uID0gbmV3IEludGVyYWN0aW9uKHsgc2lnbmFsczogbW9ja1NpZ25hbHMoKSB9IGFzIGFueSlcbiAgaW50ZXJhY3Rpb24udGFyZ2V0ID0gbW9ja0ludGVyYWN0YWJsZSgpXG4gIGludGVyYWN0aW9uLnByZXBhcmVkID0ge30gYXMgYW55XG4gIGludGVyYWN0aW9uLl9pbnRlcmFjdGluZyA9IHRydWVcblxuICBsZXQgZnVuY0FyZ3MgPSBudWxsXG4gIGNvbnN0IHRhcmdldDAgPSBPYmplY3QuZnJlZXplKHsgeDogIDUwLCB5OiAgMTAwIH0pXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tc2hhZG93XG4gIGNvbnN0IHRhcmdldEZ1bmMgPSAoeCwgeSwgaW50ZXJhY3Rpb24sIG9mZnNldCwgaW5kZXgsIC4uLnVuZXhwZWN0ZWQpID0+IHtcbiAgICBmdW5jQXJncyA9IHsgeCwgeSwgaW50ZXJhY3Rpb24sIG9mZnNldCwgaW5kZXgsIHVuZXhwZWN0ZWQgfVxuICAgIHJldHVybiB0YXJnZXQwXG4gIH1cbiAgY29uc3QgcmVsYXRpdmVQb2ludCA9IHsgeDogMCwgeTogMCB9XG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgdGFyZ2V0czogW1xuICAgICAgdGFyZ2V0MCxcbiAgICAgIHRhcmdldEZ1bmMsXG4gICAgXSxcbiAgICByYW5nZTogSW5maW5pdHksXG4gICAgcmVsYXRpdmVQb2ludHM6IFtyZWxhdGl2ZVBvaW50XSxcbiAgICBvcmlnaW46IHsgeDogMCwgeTogMCB9LFxuICB9XG5cbiAgY29uc3Qgc3RhdGUgPSB7XG4gICAgb3B0aW9ucyxcbiAgICBkZWx0YTogeyB4OiAwLCB5OiAwIH0sXG4gIH1cbiAgY29uc3QgcGFnZUNvb3JkcyA9IE9iamVjdC5mcmVlemUoeyB4OiAxMCwgeTogMjAgfSlcbiAgY29uc3QgYXJnID0ge1xuICAgIGludGVyYWN0aW9uLFxuICAgIHN0YXRlLFxuICAgIHBhZ2VDb29yZHMsXG4gICAgY29vcmRzOiB7IC4uLnBhZ2VDb29yZHMgfSxcbiAgICByZWN0OiB7IHRvcDogMCwgbGVmdDogMCwgYm90dG9tOiAxMDAsIHJpZ2h0OiAxMDAsIHdpZHRoOiAxMDAsIGhlaWdodDogMTAwIH0sXG4gICAgc3RhcnRPZmZzZXQ6IHsgdG9wOiAwLCBsZWZ0OiAwLCBib3R0b206IDAsIHJpZ2h0OiAwIH0sXG4gIH0gYXMgYW55XG5cbiAgc25hcC5zdGFydChhcmcpXG4gIHNuYXAuc2V0KGFyZylcblxuICB0LmRlZXBFcXVhbChcbiAgICBhcmcuY29vcmRzLFxuICAgIHRhcmdldDAsXG4gICAgJ3NuYXAuc2V0IHNpbmdsZSB0YXJnZXQsIHplcmVvIG9mZnNldCdcbiAgKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGZ1bmNBcmdzLFxuICAgIHtcbiAgICAgIHg6IHBhZ2VDb29yZHMueCxcbiAgICAgIHk6IHBhZ2VDb29yZHMueSxcbiAgICAgIGludGVyYWN0aW9uLFxuICAgICAgb2Zmc2V0OiB7XG4gICAgICAgIHg6IHJlbGF0aXZlUG9pbnQueCxcbiAgICAgICAgeTogcmVsYXRpdmVQb2ludC55LFxuICAgICAgICByZWxhdGl2ZVBvaW50LFxuICAgICAgICBpbmRleDogMCxcbiAgICAgIH0sXG4gICAgICBpbmRleDogMSxcbiAgICAgIHVuZXhwZWN0ZWQ6IFtdLFxuICAgIH0sXG4gICAgJyB4LCB5LCBpbnRlcmFjdGlvbiwgb2Zmc2V0LCBpbmRleCBhcmUgcGFzc2VkIHRvIHRhcmdldCBmdW5jdGlvbidcbiAgKVxuXG4gIHQuZW5kKClcbn0pXG4iXX0= \ No newline at end of file diff --git a/packages/modifiers/tests/snap/size.d.ts b/packages/modifiers/tests/snap/size.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/modifiers/tests/snap/size.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/modifiers/tests/snap/size.js b/packages/modifiers/tests/snap/size.js new file mode 100644 index 000000000..054645bb7 --- /dev/null +++ b/packages/modifiers/tests/snap/size.js @@ -0,0 +1,39 @@ +import test from '@interactjs/_dev/test/test'; +import { mockSignals, mockInteractable } from '@interactjs/core/tests/helpers'; +import Interaction from '@interactjs/core/Interaction'; +import snapSize from '../../snap/size'; +test('modifiers/snapSize', t => { + const interaction = new Interaction({ signals: mockSignals() }); + interaction.target = mockInteractable(); + interaction.target.getRect = () => ({ top: 0, left: 0, bottom: 100, right: 100 }); + interaction.prepared = { + name: null, + edges: { top: true, left: true, bottom: false, right: false }, + }; + interaction._interacting = true; + const target0 = Object.freeze({ x: 50, y: 100 }); + const options = { + targets: [ + { ...target0 }, + ], + range: Infinity, + }; + const state = { + options, + delta: { x: 0, y: 0 }, + offset: [{ x: 0, y: 0 }], + }; + const pageCoords = Object.freeze({ x: 10, y: 20 }); + const arg = { + interaction, + interactable: interaction.target, + state, + pageCoords, + coords: { ...pageCoords }, + }; + snapSize.start(arg); + snapSize.set(arg); + t.deepEqual(arg.coords, target0, 'snapSize.set single target, zereo offset'); + t.end(); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sNEJBQTRCLENBQUE7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBQzlFLE9BQU8sV0FBVyxNQUFNLDhCQUE4QixDQUFBO0FBQ3RELE9BQU8sUUFBUSxNQUFNLGlCQUFpQixDQUFBO0FBRXRDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUM3QixNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBUyxDQUFDLENBQUE7SUFDdEUsV0FBVyxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsRUFBRSxDQUFBO0lBQ3ZDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFVLENBQUEsQ0FBQTtJQUN4RixXQUFXLENBQUMsUUFBUSxHQUFHO1FBQ3JCLElBQUksRUFBRSxJQUFJO1FBQ1YsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtLQUM5RCxDQUFBO0lBQ0QsV0FBVyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUE7SUFFL0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUUsQ0FBQyxFQUFHLEdBQUcsRUFBRSxDQUFDLENBQUE7SUFDbEQsTUFBTSxPQUFPLEdBQUc7UUFDZCxPQUFPLEVBQUU7WUFDUCxFQUFFLEdBQUcsT0FBTyxFQUFFO1NBQ2Y7UUFDRCxLQUFLLEVBQUUsUUFBUTtLQUNoQixDQUFBO0lBQ0QsTUFBTSxLQUFLLEdBQUc7UUFDWixPQUFPO1FBQ1AsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3JCLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7S0FDekIsQ0FBQTtJQUNELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ2xELE1BQU0sR0FBRyxHQUFHO1FBQ1YsV0FBVztRQUNYLFlBQVksRUFBRSxXQUFXLENBQUMsTUFBTTtRQUNoQyxLQUFLO1FBQ0wsVUFBVTtRQUNWLE1BQU0sRUFBRSxFQUFFLEdBQUcsVUFBVSxFQUFFO0tBQzFCLENBQUE7SUFFRCxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ25CLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFakIsQ0FBQyxDQUFDLFNBQVMsQ0FDVCxHQUFHLENBQUMsTUFBTSxFQUNWLE9BQU8sRUFDUCwwQ0FBMEMsQ0FDM0MsQ0FBQTtJQUVELENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgeyBtb2NrU2lnbmFscywgbW9ja0ludGVyYWN0YWJsZSB9IGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvdGVzdHMvaGVscGVycydcbmltcG9ydCBJbnRlcmFjdGlvbiBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0aW9uJ1xuaW1wb3J0IHNuYXBTaXplIGZyb20gJy4uLy4uL3NuYXAvc2l6ZSdcblxudGVzdCgnbW9kaWZpZXJzL3NuYXBTaXplJywgdCA9PiB7XG4gIGNvbnN0IGludGVyYWN0aW9uID0gbmV3IEludGVyYWN0aW9uKHsgc2lnbmFsczogbW9ja1NpZ25hbHMoKSB9IGFzIGFueSlcbiAgaW50ZXJhY3Rpb24udGFyZ2V0ID0gbW9ja0ludGVyYWN0YWJsZSgpXG4gIGludGVyYWN0aW9uLnRhcmdldC5nZXRSZWN0ID0gKCkgPT4gKHsgdG9wOiAwLCBsZWZ0OiAwLCBib3R0b206IDEwMCwgcmlnaHQ6IDEwMCB9IGFzIGFueSlcbiAgaW50ZXJhY3Rpb24ucHJlcGFyZWQgPSB7XG4gICAgbmFtZTogbnVsbCxcbiAgICBlZGdlczogeyB0b3A6IHRydWUsIGxlZnQ6IHRydWUsIGJvdHRvbTogZmFsc2UsIHJpZ2h0OiBmYWxzZSB9LFxuICB9XG4gIGludGVyYWN0aW9uLl9pbnRlcmFjdGluZyA9IHRydWVcblxuICBjb25zdCB0YXJnZXQwID0gT2JqZWN0LmZyZWV6ZSh7IHg6ICA1MCwgeTogIDEwMCB9KVxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIHRhcmdldHM6IFtcbiAgICAgIHsgLi4udGFyZ2V0MCB9LFxuICAgIF0sXG4gICAgcmFuZ2U6IEluZmluaXR5LFxuICB9XG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIG9wdGlvbnMsXG4gICAgZGVsdGE6IHsgeDogMCwgeTogMCB9LFxuICAgIG9mZnNldDogW3sgeDogMCwgeTogMCB9XSxcbiAgfVxuICBjb25zdCBwYWdlQ29vcmRzID0gT2JqZWN0LmZyZWV6ZSh7IHg6IDEwLCB5OiAyMCB9KVxuICBjb25zdCBhcmcgPSB7XG4gICAgaW50ZXJhY3Rpb24sXG4gICAgaW50ZXJhY3RhYmxlOiBpbnRlcmFjdGlvbi50YXJnZXQsXG4gICAgc3RhdGUsXG4gICAgcGFnZUNvb3JkcyxcbiAgICBjb29yZHM6IHsgLi4ucGFnZUNvb3JkcyB9LFxuICB9XG5cbiAgc25hcFNpemUuc3RhcnQoYXJnKVxuICBzbmFwU2l6ZS5zZXQoYXJnKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGFyZy5jb29yZHMsXG4gICAgdGFyZ2V0MCxcbiAgICAnc25hcFNpemUuc2V0IHNpbmdsZSB0YXJnZXQsIHplcmVvIG9mZnNldCdcbiAgKVxuXG4gIHQuZW5kKClcbn0pXG4iXX0= \ No newline at end of file diff --git a/packages/pointer-events/base.d.ts b/packages/pointer-events/base.d.ts index 15be170c7..fd6f94f3d 100644 --- a/packages/pointer-events/base.d.ts +++ b/packages/pointer-events/base.d.ts @@ -31,7 +31,7 @@ declare module '@interactjs/core/PointerInfo' { } declare module '@interactjs/core/defaultOptions' { interface ActionDefaults { - pointerEvents?: any; + pointerEvents: Interact.Options; } } declare const pointerEvents: { diff --git a/packages/pointer-events/base.js b/packages/pointer-events/base.js index 003a64030..47f3b47c8 100644 --- a/packages/pointer-events/base.js +++ b/packages/pointer-events/base.js @@ -106,7 +106,7 @@ function install(scope) { const { interactions, } = scope; scope.pointerEvents = pointerEvents; scope.defaults.actions.pointerEvents = pointerEvents.defaults; - interactions.signals.on('new', (interaction) => { + interactions.signals.on('new', ({ interaction }) => { interaction.prevTap = null; // the most recent tap event on this interaction interaction.tapTime = 0; // time of the most recent tap event }); @@ -191,4 +191,4 @@ function createSignalListener(type) { }; } export default pointerEvents; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxLQUFLLEtBQUssTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQyxPQUFPLFlBQVksTUFBTSxnQkFBZ0IsQ0FBQTtBQW9DekMsTUFBTSxPQUFPLEdBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUE7QUFDekMsTUFBTSxhQUFhLEdBQUcsQ0FBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBRSxDQUFBO0FBQ2hELE1BQU0sWUFBWSxHQUFJLENBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUUsQ0FBQTtBQUVoRCxNQUFNLGFBQWEsR0FBRztJQUNwQixPQUFPO0lBQ1AsT0FBTztJQUNQLFlBQVk7SUFDWixJQUFJO0lBQ0osbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQixRQUFRLEVBQUU7UUFDUixZQUFZLEVBQUUsR0FBRztRQUNqQixVQUFVLEVBQUksSUFBSTtRQUNsQixTQUFTLEVBQUssSUFBSTtRQUNsQixNQUFNLEVBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7S0FDN0I7SUFDRCxLQUFLLEVBQUU7UUFDTCxNQUFNO1FBQ04sTUFBTTtRQUNOLElBQUk7UUFDSixRQUFRO1FBQ1IsS0FBSztRQUNMLFdBQVc7UUFDWCxNQUFNO0tBQ1A7Q0FDRixDQUFBO0FBRUQsU0FBUyxJQUFJLENBQW9CLEdBUWhDO0lBQ0MsTUFBTSxFQUNKLFdBQVcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFDeEMsSUFBSSxHQUFJLEdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUNyQyxPQUFPLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEdBQ25DLEdBQUcsR0FBRyxDQUFBO0lBRVAsTUFBTSxFQUNKLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsT0FBTyxF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RXZlbnRhYmxlJ1xuaW1wb3J0IEludGVyYWN0aW9uIGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3Rpb24nXG5pbXBvcnQgeyBTY29wZSB9IGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvc2NvcGUnXG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscydcbmltcG9ydCBQb2ludGVyRXZlbnQgZnJvbSAnLi9Qb2ludGVyRXZlbnQnXG5cbnR5cGUgRXZlbnRUYXJnZXRMaXN0ID0gQXJyYXk8e1xuICBldmVudGFibGU6IEV2ZW50YWJsZSxcbiAgZWxlbWVudDogV2luZG93IHwgRG9jdW1lbnQgfCBFbGVtZW50LFxuICBwcm9wczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSxcbn0+XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJyB7XG4gIGludGVyZmFjZSBTY29wZSB7XG4gICAgcG9pbnRlckV2ZW50czogdHlwZW9mIHBvaW50ZXJFdmVudHNcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbicge1xuICBpbnRlcmZhY2UgSW50ZXJhY3Rpb24ge1xuICAgIHByZXZUYXA/OiBQb2ludGVyRXZlbnQ8c3RyaW5nPlxuICAgIHRhcFRpbWU/OiBudW1iZXJcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9Qb2ludGVySW5mbycge1xuICBpbnRlcmZhY2UgUG9pbnRlckluZm8ge1xuICAgIGhvbGQ6IHtcbiAgICAgIGR1cmF0aW9uOiBudW1iZXJcbiAgICAgIHRpbWVvdXQ6IGFueVxuICAgIH1cbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9kZWZhdWx0T3B0aW9ucycge1xuICBpbnRlcmZhY2UgQWN0aW9uRGVmYXVsdHMge1xuICAgIHBvaW50ZXJFdmVudHM/OiBhbnlcbiAgfVxufVxuXG5jb25zdCBzaWduYWxzICAgICAgID0gbmV3IHV0aWxzLlNpZ25hbHMoKVxuY29uc3Qgc2ltcGxlU2lnbmFscyA9IFsgJ2Rvd24nLCAndXAnLCAnY2FuY2VsJyBdXG5jb25zdCBzaW1wbGVFdmVudHMgID0gWyAnZG93bicsICd1cCcsICdjYW5jZWwnIF1cblxuY29uc3QgcG9pbnRlckV2ZW50cyA9IHtcbiAgaW5zdGFsbCxcbiAgc2lnbmFscyxcbiAgUG9pbnRlckV2ZW50LFxuICBmaXJlLFxuICBjb2xsZWN0RXZlbnRUYXJnZXRzLFxuICBjcmVhdGVTaWduYWxMaXN0ZW5lcixcbiAgZGVmYXVsdHM6IHtcbiAgICBob2xkRHVyYXRpb246IDYwMCxcbiAgICBpZ25vcmVGcm9tICA6IG51bGwsXG4gICAgYWxsb3dGcm9tICAgOiBudWxsLFxuICAgIG9yaWdpbiAgICAgIDogeyB4OiAwLCB5OiAwIH0sXG4gIH0sXG4gIHR5cGVzOiBbXG4gICAgJ2Rvd24nLFxuICAgICdtb3ZlJyxcbiAgICAndXAnLFxuICAgICdjYW5jZWwnLFxuICAgICd0YXAnLFxuICAgICdkb3VibGV0YXAnLFxuICAgICdob2xkJyxcbiAgXSxcbn1cblxuZnVuY3Rpb24gZmlyZTxUIGV4dGVuZHMgc3RyaW5nPiAoYXJnOiB7XG4gIGludGVyYWN0aW9uOiBJbnRlcmFjdGlvbixcbiAgcG9pbnRlcjogSW50ZXJhY3QuUG9pbnRlclR5cGUsXG4gIGV2ZW50OiBJbnRlcmFjdC5Qb2ludGVyRXZlbnRUeXBlLFxuICBldmVudFRhcmdldDogRXZlbnRUYXJnZXQsXG4gIHRhcmdldHM/OiBFdmVudFRhcmdldExpc3QsXG4gIHBvaW50ZXJFdmVudD86IFBvaW50ZXJFdmVudDxUPixcbiAgdHlwZTogVFxufSkge1xuICBjb25zdCB7XG4gICAgaW50ZXJhY3Rpb24sIHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCxcbiAgICB0eXBlID0gKGFyZyBhcyBhbnkpLnBvaW50ZXJFdmVudC50eXBlLFxuICAgIHRhcmdldHMgPSBjb2xsZWN0RXZlbnRUYXJnZXRzKGFyZyksXG4gIH0gPSBhcmdcblxuICBjb25zdCB7XG4gICAgcG9pbnRlckV2ZW50ID0gbmV3IFBvaW50ZXJFdmVudCh0eXBlLCBwb2ludGVyLCBldmVudCwgZXZlbnRUYXJnZXQsIGludGVyYWN0aW9uKSxcbiAgfSA9IGFyZ1xuXG4gIGNvbnN0IHNpZ25hbEFyZyA9IHtcbiAgICBpbnRlcmFjdGlvbixcbiAgICBwb2ludGVyLFxuICAgIGV2ZW50LFxuICAgIGV2ZW50VGFyZ2V0LFxuICAgIHRhcmdldHMsXG4gICAgdHlwZSxcbiAgICBwb2ludGVyRXZlbnQsXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0YXJnZXQgPSB0YXJnZXRzW2ldXG5cbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gdGFyZ2V0LnByb3BzIHx8IHt9KSB7XG4gICAgICAocG9pbnRlckV2ZW50IGFzIGFueSlbcHJvcF0gPSB0YXJnZXQucHJvcHNbcHJvcF1cbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW4gPSB1dGlscy5nZXRPcmlnaW5YWSh0YXJnZXQuZXZlbnRhYmxlLCB0YXJnZXQuZWxlbWVudClcblxuICAgIHBvaW50ZXJFdmVudC5zdWJ0cmFjdE9yaWdpbihvcmlnaW4pXG4gICAgcG9pbnRlckV2ZW50LmV2ZW50YWJsZSA9IHRhcmdldC5ldmVudGFibGVcbiAgICBwb2ludGVyRXZlbnQuY3VycmVudFRhcmdldCA9IHRhcmdldC5lbGVtZW50XG5cbiAgICB0YXJnZXQuZXZlbnRhYmxlLmZpcmUocG9pbnRlckV2ZW50KVxuXG4gICAgcG9pbnRlckV2ZW50LmFkZE9yaWdpbihvcmlnaW4pXG5cbiAgICBpZiAocG9pbnRlckV2ZW50LmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCB8fFxuICAgICAgICAocG9pbnRlckV2ZW50LnByb3BhZ2F0aW9uU3RvcHBlZCAmJlxuICAgICAgICAgICAgKGkgKyAxKSA8IHRhcmdldHMubGVuZ3RoICYmIHRhcmdldHNbaSArIDFdLmVsZW1lbnQgIT09IHBvaW50ZXJFdmVudC5jdXJyZW50VGFyZ2V0KSkge1xuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBzaWduYWxzLmZpcmUoJ2ZpcmVkJywgc2lnbmFsQXJnKVxuXG4gIGlmICh0eXBlID09PSAndGFwJykge1xuICAgIC8vIGlmIHBvaW50ZXJFdmVudCBzaG91bGQgbWFrZSBhIGRvdWJsZSB0YXAsIGNyZWF0ZSBhbmQgZmlyZSBhIGRvdWJsZXRhcFxuICAgIC8vIFBvaW50ZXJFdmVudCBhbmQgdXNlIHRoYXQgYXMgdGhlIHByZXZUYXBcbiAgICBjb25zdCBwcmV2VGFwID0gcG9pbnRlckV2ZW50LmRvdWJsZVxuICAgICAgPyBmaXJlKHtcbiAgICAgICAgaW50ZXJhY3Rpb24sXG4gICAgICAgIHBvaW50ZXIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBldmVudFRhcmdldCxcbiAgICAgICAgdHlwZTogJ2RvdWJsZXRhcCcsXG4gICAgICB9KVxuICAgICAgOiBwb2ludGVyRXZlbnRcblxuICAgIGludGVyYWN0aW9uLnByZXZUYXAgPSBwcmV2VGFwXG4gICAgaW50ZXJhY3Rpb24udGFwVGltZSA9IHByZXZUYXAudGltZVN0YW1wXG4gIH1cblxuICByZXR1cm4gcG9pbnRlckV2ZW50XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RFdmVudFRhcmdldHM8VCBleHRlbmRzIHN0cmluZz4gKHsgaW50ZXJhY3Rpb24sIHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCwgdHlwZSB9OiB7XG4gIGludGVyYWN0aW9uOiBJbnRlcmFjdGlvbixcbiAgcG9pbnRlcjogSW50ZXJhY3QuUG9pbnRlclR5cGUsXG4gIGV2ZW50OiBJbnRlcmFjdC5Qb2ludGVyRXZlbnRUeXBlLFxuICBldmVudFRhcmdldDogRXZlbnRUYXJnZXQsXG4gIHR5cGU6IFRcbn0pIHtcbiAgY29uc3QgcG9pbnRlckluZGV4ID0gaW50ZXJhY3Rpb24uZ2V0UG9pbnRlckluZGV4KHBvaW50ZXIpXG4gIGNvbnN0IHBvaW50ZXJJbmZvID0gaW50ZXJhY3Rpb24ucG9pbnRlcnNbcG9pbnRlckluZGV4XVxuXG4gIC8vIGRvIG5vdCBmaXJlIGEgdGFwIGV2ZW50IGlmIHRoZSBwb2ludGVyIHdhcyBtb3ZlZCBiZWZvcmUgYmVpbmcgbGlmdGVkXG4gIGlmICh0eXBlID09PSAndGFwJyAmJiAoaW50ZXJhY3Rpb24ucG9pbnRlcldhc01vdmVkIHx8XG4gICAgICAvLyBvciBpZiB0aGUgcG9pbnRlcnVwIHRhcmdldCBpcyBkaWZmZXJlbnQgdG8gdGhlIHBvaW50ZXJkb3duIHRhcmdldFxuICAgICAgIShwb2ludGVySW5mbyAmJiBwb2ludGVySW5mby5kb3duVGFyZ2V0ID09PSBldmVudFRhcmdldCkpKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICBjb25zdCBwYXRoID0gdXRpbHMuZG9tLmdldFBhdGgoZXZlbnRUYXJnZXQpXG4gIGNvbnN0IHNpZ25hbEFyZyA9IHtcbiAgICBpbnRlcmFjdGlvbixcbiAgICBwb2ludGVyLFxuICAgIGV2ZW50LFxuICAgIGV2ZW50VGFyZ2V0LFxuICAgIHR5cGUsXG4gICAgcGF0aCxcbiAgICB0YXJnZXRzOiBbXSBhcyBFdmVudFRhcmdldExpc3QsXG4gICAgZWxlbWVudDogbnVsbCxcbiAgfVxuXG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBwYXRoKSB7XG4gICAgc2lnbmFsQXJnLmVsZW1lbnQgPSBlbGVtZW50XG5cbiAgICBzaWduYWxzLmZpcmUoJ2NvbGxlY3QtdGFyZ2V0cycsIHNpZ25hbEFyZylcbiAgfVxuXG4gIGlmICh0eXBlID09PSAnaG9sZCcpIHtcbiAgICBzaWduYWxBcmcudGFyZ2V0cyA9IHNpZ25hbEFyZy50YXJnZXRzLmZpbHRlcigodGFyZ2V0KSA9PlxuICAgICAgdGFyZ2V0LmV2ZW50YWJsZS5vcHRpb25zLmhvbGREdXJhdGlvbiA9PT0gaW50ZXJhY3Rpb24ucG9pbnRlcnNbcG9pbnRlckluZGV4XS5ob2xkLmR1cmF0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHNpZ25hbEFyZy50YXJnZXRzXG59XG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlOiBTY29wZSkge1xuICBjb25zdCB7XG4gICAgaW50ZXJhY3Rpb25zLFxuICB9ID0gc2NvcGVcblxuICBzY29wZS5wb2ludGVyRXZlbnRzID0gcG9pbnRlckV2ZW50c1xuICBzY29wZS5kZWZhdWx0cy5hY3Rpb25zLnBvaW50ZXJFdmVudHMgPSBwb2ludGVyRXZlbnRzLmRlZmF1bHRzXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ25ldycsIChpbnRlcmFjdGlvbikgPT4ge1xuICAgIGludGVyYWN0aW9uLnByZXZUYXAgICAgPSBudWxsICAvLyB0aGUgbW9zdCByZWNlbnQgdGFwIGV2ZW50IG9uIHRoaXMgaW50ZXJhY3Rpb25cbiAgICBpbnRlcmFjdGlvbi50YXBUaW1lICAgID0gMCAgICAgLy8gdGltZSBvZiB0aGUgbW9zdCByZWNlbnQgdGFwIGV2ZW50XG4gIH0pXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ3VwZGF0ZS1wb2ludGVyJywgKHsgZG93biwgcG9pbnRlckluZm8gfSkgPT4ge1xuICAgIGlmICghZG93biAmJiBwb2ludGVySW5mby5ob2xkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBwb2ludGVySW5mby5ob2xkID0geyBkdXJhdGlvbjogSW5maW5pdHksIHRpbWVvdXQ6IG51bGwgfVxuICB9KVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdtb3ZlJywgKHsgaW50ZXJhY3Rpb24sIHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCwgZHVwbGljYXRlTW92ZSB9KSA9PiB7XG4gICAgY29uc3QgcG9pbnRlckluZGV4ID0gaW50ZXJhY3Rpb24uZ2V0UG9pbnRlckluZGV4KHBvaW50ZXIpXG5cbiAgICBpZiAoIWR1cGxpY2F0ZU1vdmUgJiYgKCFpbnRlcmFjdGlvbi5wb2ludGVySXNEb3duIHx8IGludGVyYWN0aW9uLnBvaW50ZXJXYXNNb3ZlZCkpIHtcbiAgICAgIGlmIChpbnRlcmFjdGlvbi5wb2ludGVySXNEb3duKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChpbnRlcmFjdGlvbi5wb2ludGVyc1twb2ludGVySW5kZXhdLmhvbGQudGltZW91dClcbiAgICAgIH1cblxuICAgICAgZmlyZSh7XG4gICAgICAgIGludGVyYWN0aW9uLFxuICAgICAgICBwb2ludGVyLFxuICAgICAgICBldmVudCxcbiAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgIHR5cGU6ICdtb3ZlJyxcbiAgICAgIH0pXG4gICAgfVxuICB9KVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdkb3duJywgKHsgaW50ZXJhY3Rpb24sIHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCwgcG9pbnRlckluZGV4IH0pID0+IHtcbiAgICBjb25zdCB0aW1lciA9IGludGVyYWN0aW9uLnBvaW50ZXJzW3BvaW50ZXJJbmRleF0uaG9sZFxuICAgIGNvbnN0IHBhdGggPSB1dGlscy5kb20uZ2V0UGF0aChldmVudFRhcmdldClcbiAgICBjb25zdCBzaWduYWxBcmcgPSB7XG4gICAgICBpbnRlcmFjdGlvbixcbiAgICAgIHBvaW50ZXIsXG4gICAgICBldmVudCxcbiAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgdHlwZTogJ2hvbGQnLFxuICAgICAgdGFyZ2V0czogW10gYXMgRXZlbnRUYXJnZXRMaXN0LFxuICAgICAgcGF0aCxcbiAgICAgIGVsZW1lbnQ6IG51bGwsXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHBhdGgpIHtcbiAgICAgIHNpZ25hbEFyZy5lbGVtZW50ID0gZWxlbWVudFxuXG4gICAgICBzaWduYWxzLmZpcmUoJ2NvbGxlY3QtdGFyZ2V0cycsIHNpZ25hbEFyZylcbiAgICB9XG5cbiAgICBpZiAoIXNpZ25hbEFyZy50YXJnZXRzLmxlbmd0aCkgeyByZXR1cm4gfVxuXG4gICAgbGV0IG1pbkR1cmF0aW9uID0gSW5maW5pdHlcblxuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHNpZ25hbEFyZy50YXJnZXRzKSB7XG4gICAgICBjb25zdCBob2xkRHVyYXRpb24gPSB0YXJnZXQuZXZlbnRhYmxlLm9wdGlvbnMuaG9sZER1cmF0aW9uXG5cbiAgICAgIGlmIChob2xkRHVyYXRpb24gPCBtaW5EdXJhdGlvbikge1xuICAgICAgICBtaW5EdXJhdGlvbiA9IGhvbGREdXJhdGlvblxuICAgICAgfVxuICAgIH1cblxuICAgIHRpbWVyLmR1cmF0aW9uID0gbWluRHVyYXRpb25cbiAgICB0aW1lci50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBmaXJlKHtcbiAgICAgICAgaW50ZXJhY3Rpb24sXG4gICAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgICBwb2ludGVyLFxuICAgICAgICBldmVudCxcbiAgICAgICAgdHlwZTogJ2hvbGQnLFxuICAgICAgfSlcbiAgICB9LCBtaW5EdXJhdGlvbilcbiAgfSlcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbigndXAnLCAoeyBpbnRlcmFjdGlvbiwgcG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0IH0pID0+IHtcbiAgICBpZiAoIWludGVyYWN0aW9uLnBvaW50ZXJXYXNNb3ZlZCkge1xuICAgICAgZmlyZSh7IGludGVyYWN0aW9uLCBldmVudFRhcmdldCwgcG9pbnRlciwgZXZlbnQsIHR5cGU6ICd0YXAnIH0pXG4gICAgfVxuICB9KVxuXG4gIGZvciAoY29uc3Qgc2lnbmFsTmFtZSBvZiBbJ3VwJywgJ2NhbmNlbCddKSB7XG4gICAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oc2lnbmFsTmFtZSwgKHsgaW50ZXJhY3Rpb24sIHBvaW50ZXJJbmRleCB9KSA9PiB7XG4gICAgICBpZiAoaW50ZXJhY3Rpb24ucG9pbnRlcnNbcG9pbnRlckluZGV4XS5ob2xkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChpbnRlcmFjdGlvbi5wb2ludGVyc1twb2ludGVySW5kZXhdLmhvbGQudGltZW91dClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaW1wbGVTaWduYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oc2ltcGxlU2lnbmFsc1tpXSwgY3JlYXRlU2lnbmFsTGlzdGVuZXIoc2ltcGxlRXZlbnRzW2ldKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTaWduYWxMaXN0ZW5lciAodHlwZTogc3RyaW5nKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoeyBpbnRlcmFjdGlvbiwgcG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0IH06IGFueSkge1xuICAgIGZpcmUoeyBpbnRlcmFjdGlvbiwgZXZlbnRUYXJnZXQsIHBvaW50ZXIsIGV2ZW50LCB0eXBlIH0pXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgcG9pbnRlckV2ZW50c1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxLQUFLLEtBQUssTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQyxPQUFPLFlBQVksTUFBTSxnQkFBZ0IsQ0FBQTtBQW9DekMsTUFBTSxPQUFPLEdBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUE7QUFDekMsTUFBTSxhQUFhLEdBQUcsQ0FBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBRSxDQUFBO0FBQ2hELE1BQU0sWUFBWSxHQUFJLENBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUUsQ0FBQTtBQUVoRCxNQUFNLGFBQWEsR0FBRztJQUNwQixPQUFPO0lBQ1AsT0FBTztJQUNQLFlBQVk7SUFDWixJQUFJO0lBQ0osbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQixRQUFRLEVBQUU7UUFDUixZQUFZLEVBQUUsR0FBRztRQUNqQixVQUFVLEVBQUksSUFBSTtRQUNsQixTQUFTLEVBQUssSUFBSTtRQUNsQixNQUFNLEVBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7S0FDN0I7SUFDRCxLQUFLLEVBQUU7UUFDTCxNQUFNO1FBQ04sTUFBTTtRQUNOLElBQUk7UUFDSixRQUFRO1FBQ1IsS0FBSztRQUNMLFdBQVc7UUFDWCxNQUFNO0tBQ1A7Q0FDRixDQUFBO0FBRUQsU0FBUyxJQUFJLENBQW9CLEdBUWhDO0lBQ0MsTUFBTSxFQUNKLFdBQVcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFDeEMsSUFBSSxHQUFJLEdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUNyQyxPQUFPLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEdBQ25DLEdBQUcsR0FBRyxDQUFBO0lBRVAsTUFBTSxFQUNKLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsT0FBTyxF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Y3Rqcy9jb3JlL0V2ZW50YWJsZSdcbmltcG9ydCBJbnRlcmFjdGlvbiBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0aW9uJ1xuaW1wb3J0IHsgU2NvcGUgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJ1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMnXG5pbXBvcnQgUG9pbnRlckV2ZW50IGZyb20gJy4vUG9pbnRlckV2ZW50J1xuXG50eXBlIEV2ZW50VGFyZ2V0TGlzdCA9IEFycmF5PHtcbiAgZXZlbnRhYmxlOiBFdmVudGFibGUsXG4gIGVsZW1lbnQ6IFdpbmRvdyB8IERvY3VtZW50IHwgRWxlbWVudCxcbiAgcHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sXG59PlxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9zY29wZScge1xuICBpbnRlcmZhY2UgU2NvcGUge1xuICAgIHBvaW50ZXJFdmVudHM6IHR5cGVvZiBwb2ludGVyRXZlbnRzXG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3Rpb24nIHtcbiAgaW50ZXJmYWNlIEludGVyYWN0aW9uIHtcbiAgICBwcmV2VGFwPzogUG9pbnRlckV2ZW50PHN0cmluZz5cbiAgICB0YXBUaW1lPzogbnVtYmVyXG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvUG9pbnRlckluZm8nIHtcbiAgaW50ZXJmYWNlIFBvaW50ZXJJbmZvIHtcbiAgICBob2xkOiB7XG4gICAgICBkdXJhdGlvbjogbnVtYmVyXG4gICAgICB0aW1lb3V0OiBhbnlcbiAgICB9XG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvZGVmYXVsdE9wdGlvbnMnIHtcbiAgaW50ZXJmYWNlIEFjdGlvbkRlZmF1bHRzIHtcbiAgICBwb2ludGVyRXZlbnRzOiBJbnRlcmFjdC5PcHRpb25zXG4gIH1cbn1cblxuY29uc3Qgc2lnbmFscyAgICAgICA9IG5ldyB1dGlscy5TaWduYWxzKClcbmNvbnN0IHNpbXBsZVNpZ25hbHMgPSBbICdkb3duJywgJ3VwJywgJ2NhbmNlbCcgXVxuY29uc3Qgc2ltcGxlRXZlbnRzICA9IFsgJ2Rvd24nLCAndXAnLCAnY2FuY2VsJyBdXG5cbmNvbnN0IHBvaW50ZXJFdmVudHMgPSB7XG4gIGluc3RhbGwsXG4gIHNpZ25hbHMsXG4gIFBvaW50ZXJFdmVudCxcbiAgZmlyZSxcbiAgY29sbGVjdEV2ZW50VGFyZ2V0cyxcbiAgY3JlYXRlU2lnbmFsTGlzdGVuZXIsXG4gIGRlZmF1bHRzOiB7XG4gICAgaG9sZER1cmF0aW9uOiA2MDAsXG4gICAgaWdub3JlRnJvbSAgOiBudWxsLFxuICAgIGFsbG93RnJvbSAgIDogbnVsbCxcbiAgICBvcmlnaW4gICAgICA6IHsgeDogMCwgeTogMCB9LFxuICB9LFxuICB0eXBlczogW1xuICAgICdkb3duJyxcbiAgICAnbW92ZScsXG4gICAgJ3VwJyxcbiAgICAnY2FuY2VsJyxcbiAgICAndGFwJyxcbiAgICAnZG91YmxldGFwJyxcbiAgICAnaG9sZCcsXG4gIF0sXG59XG5cbmZ1bmN0aW9uIGZpcmU8VCBleHRlbmRzIHN0cmluZz4gKGFyZzoge1xuICBpbnRlcmFjdGlvbjogSW50ZXJhY3Rpb24sXG4gIHBvaW50ZXI6IEludGVyYWN0LlBvaW50ZXJUeXBlLFxuICBldmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZSxcbiAgZXZlbnRUYXJnZXQ6IEV2ZW50VGFyZ2V0LFxuICB0YXJnZXRzPzogRXZlbnRUYXJnZXRMaXN0LFxuICBwb2ludGVyRXZlbnQ/OiBQb2ludGVyRXZlbnQ8VD4sXG4gIHR5cGU6IFRcbn0pIHtcbiAgY29uc3Qge1xuICAgIGludGVyYWN0aW9uLCBwb2ludGVyLCBldmVudCwgZXZlbnRUYXJnZXQsXG4gICAgdHlwZSA9IChhcmcgYXMgYW55KS5wb2ludGVyRXZlbnQudHlwZSxcbiAgICB0YXJnZXRzID0gY29sbGVjdEV2ZW50VGFyZ2V0cyhhcmcpLFxuICB9ID0gYXJnXG5cbiAgY29uc3Qge1xuICAgIHBvaW50ZXJFdmVudCA9IG5ldyBQb2ludGVyRXZlbnQodHlwZSwgcG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0LCBpbnRlcmFjdGlvbiksXG4gIH0gPSBhcmdcblxuICBjb25zdCBzaWduYWxBcmcgPSB7XG4gICAgaW50ZXJhY3Rpb24sXG4gICAgcG9pbnRlcixcbiAgICBldmVudCxcbiAgICBldmVudFRhcmdldCxcbiAgICB0YXJnZXRzLFxuICAgIHR5cGUsXG4gICAgcG9pbnRlckV2ZW50LFxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YXJnZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGFyZ2V0c1tpXVxuXG4gICAgZm9yIChjb25zdCBwcm9wIGluIHRhcmdldC5wcm9wcyB8fCB7fSkge1xuICAgICAgKHBvaW50ZXJFdmVudCBhcyBhbnkpW3Byb3BdID0gdGFyZ2V0LnByb3BzW3Byb3BdXG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luID0gdXRpbHMuZ2V0T3JpZ2luWFkodGFyZ2V0LmV2ZW50YWJsZSwgdGFyZ2V0LmVsZW1lbnQpXG5cbiAgICBwb2ludGVyRXZlbnQuc3VidHJhY3RPcmlnaW4ob3JpZ2luKVxuICAgIHBvaW50ZXJFdmVudC5ldmVudGFibGUgPSB0YXJnZXQuZXZlbnRhYmxlXG4gICAgcG9pbnRlckV2ZW50LmN1cnJlbnRUYXJnZXQgPSB0YXJnZXQuZWxlbWVudFxuXG4gICAgdGFyZ2V0LmV2ZW50YWJsZS5maXJlKHBvaW50ZXJFdmVudClcblxuICAgIHBvaW50ZXJFdmVudC5hZGRPcmlnaW4ob3JpZ2luKVxuXG4gICAgaWYgKHBvaW50ZXJFdmVudC5pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgfHxcbiAgICAgICAgKHBvaW50ZXJFdmVudC5wcm9wYWdhdGlvblN0b3BwZWQgJiZcbiAgICAgICAgICAgIChpICsgMSkgPCB0YXJnZXRzLmxlbmd0aCAmJiB0YXJnZXRzW2kgKyAxXS5lbGVtZW50ICE9PSBwb2ludGVyRXZlbnQuY3VycmVudFRhcmdldCkpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgc2lnbmFscy5maXJlKCdmaXJlZCcsIHNpZ25hbEFyZylcblxuICBpZiAodHlwZSA9PT0gJ3RhcCcpIHtcbiAgICAvLyBpZiBwb2ludGVyRXZlbnQgc2hvdWxkIG1ha2UgYSBkb3VibGUgdGFwLCBjcmVhdGUgYW5kIGZpcmUgYSBkb3VibGV0YXBcbiAgICAvLyBQb2ludGVyRXZlbnQgYW5kIHVzZSB0aGF0IGFzIHRoZSBwcmV2VGFwXG4gICAgY29uc3QgcHJldlRhcCA9IHBvaW50ZXJFdmVudC5kb3VibGVcbiAgICAgID8gZmlyZSh7XG4gICAgICAgIGludGVyYWN0aW9uLFxuICAgICAgICBwb2ludGVyLFxuICAgICAgICBldmVudCxcbiAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgIHR5cGU6ICdkb3VibGV0YXAnLFxuICAgICAgfSlcbiAgICAgIDogcG9pbnRlckV2ZW50XG5cbiAgICBpbnRlcmFjdGlvbi5wcmV2VGFwID0gcHJldlRhcFxuICAgIGludGVyYWN0aW9uLnRhcFRpbWUgPSBwcmV2VGFwLnRpbWVTdGFtcFxuICB9XG5cbiAgcmV0dXJuIHBvaW50ZXJFdmVudFxufVxuXG5mdW5jdGlvbiBjb2xsZWN0RXZlbnRUYXJnZXRzPFQgZXh0ZW5kcyBzdHJpbmc+ICh7IGludGVyYWN0aW9uLCBwb2ludGVyLCBldmVudCwgZXZlbnRUYXJnZXQsIHR5cGUgfToge1xuICBpbnRlcmFjdGlvbjogSW50ZXJhY3Rpb24sXG4gIHBvaW50ZXI6IEludGVyYWN0LlBvaW50ZXJUeXBlLFxuICBldmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZSxcbiAgZXZlbnRUYXJnZXQ6IEV2ZW50VGFyZ2V0LFxuICB0eXBlOiBUXG59KSB7XG4gIGNvbnN0IHBvaW50ZXJJbmRleCA9IGludGVyYWN0aW9uLmdldFBvaW50ZXJJbmRleChwb2ludGVyKVxuICBjb25zdCBwb2ludGVySW5mbyA9IGludGVyYWN0aW9uLnBvaW50ZXJzW3BvaW50ZXJJbmRleF1cblxuICAvLyBkbyBub3QgZmlyZSBhIHRhcCBldmVudCBpZiB0aGUgcG9pbnRlciB3YXMgbW92ZWQgYmVmb3JlIGJlaW5nIGxpZnRlZFxuICBpZiAodHlwZSA9PT0gJ3RhcCcgJiYgKGludGVyYWN0aW9uLnBvaW50ZXJXYXNNb3ZlZCB8fFxuICAgICAgLy8gb3IgaWYgdGhlIHBvaW50ZXJ1cCB0YXJnZXQgaXMgZGlmZmVyZW50IHRvIHRoZSBwb2ludGVyZG93biB0YXJnZXRcbiAgICAgICEocG9pbnRlckluZm8gJiYgcG9pbnRlckluZm8uZG93blRhcmdldCA9PT0gZXZlbnRUYXJnZXQpKSkge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgY29uc3QgcGF0aCA9IHV0aWxzLmRvbS5nZXRQYXRoKGV2ZW50VGFyZ2V0KVxuICBjb25zdCBzaWduYWxBcmcgPSB7XG4gICAgaW50ZXJhY3Rpb24sXG4gICAgcG9pbnRlcixcbiAgICBldmVudCxcbiAgICBldmVudFRhcmdldCxcbiAgICB0eXBlLFxuICAgIHBhdGgsXG4gICAgdGFyZ2V0czogW10gYXMgRXZlbnRUYXJnZXRMaXN0LFxuICAgIGVsZW1lbnQ6IG51bGwsXG4gIH1cblxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGF0aCkge1xuICAgIHNpZ25hbEFyZy5lbGVtZW50ID0gZWxlbWVudFxuXG4gICAgc2lnbmFscy5maXJlKCdjb2xsZWN0LXRhcmdldHMnLCBzaWduYWxBcmcpXG4gIH1cblxuICBpZiAodHlwZSA9PT0gJ2hvbGQnKSB7XG4gICAgc2lnbmFsQXJnLnRhcmdldHMgPSBzaWduYWxBcmcudGFyZ2V0cy5maWx0ZXIoKHRhcmdldCkgPT5cbiAgICAgIHRhcmdldC5ldmVudGFibGUub3B0aW9ucy5ob2xkRHVyYXRpb24gPT09IGludGVyYWN0aW9uLnBvaW50ZXJzW3BvaW50ZXJJbmRleF0uaG9sZC5kdXJhdGlvbilcbiAgfVxuXG4gIHJldHVybiBzaWduYWxBcmcudGFyZ2V0c1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsIChzY29wZTogU2NvcGUpIHtcbiAgY29uc3Qge1xuICAgIGludGVyYWN0aW9ucyxcbiAgfSA9IHNjb3BlXG5cbiAgc2NvcGUucG9pbnRlckV2ZW50cyA9IHBvaW50ZXJFdmVudHNcbiAgc2NvcGUuZGVmYXVsdHMuYWN0aW9ucy5wb2ludGVyRXZlbnRzID0gcG9pbnRlckV2ZW50cy5kZWZhdWx0c1xuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCduZXcnLCAoeyBpbnRlcmFjdGlvbiB9KSA9PiB7XG4gICAgaW50ZXJhY3Rpb24ucHJldlRhcCAgICA9IG51bGwgIC8vIHRoZSBtb3N0IHJlY2VudCB0YXAgZXZlbnQgb24gdGhpcyBpbnRlcmFjdGlvblxuICAgIGludGVyYWN0aW9uLnRhcFRpbWUgICAgPSAwICAgICAvLyB0aW1lIG9mIHRoZSBtb3N0IHJlY2VudCB0YXAgZXZlbnRcbiAgfSlcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbigndXBkYXRlLXBvaW50ZXInLCAoeyBkb3duLCBwb2ludGVySW5mbyB9KSA9PiB7XG4gICAgaWYgKCFkb3duICYmIHBvaW50ZXJJbmZvLmhvbGQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHBvaW50ZXJJbmZvLmhvbGQgPSB7IGR1cmF0aW9uOiBJbmZpbml0eSwgdGltZW91dDogbnVsbCB9XG4gIH0pXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ21vdmUnLCAoeyBpbnRlcmFjdGlvbiwgcG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0LCBkdXBsaWNhdGVNb3ZlIH0pID0+IHtcbiAgICBjb25zdCBwb2ludGVySW5kZXggPSBpbnRlcmFjdGlvbi5nZXRQb2ludGVySW5kZXgocG9pbnRlcilcblxuICAgIGlmICghZHVwbGljYXRlTW92ZSAmJiAoIWludGVyYWN0aW9uLnBvaW50ZXJJc0Rvd24gfHwgaW50ZXJhY3Rpb24ucG9pbnRlcldhc01vdmVkKSkge1xuICAgICAgaWYgKGludGVyYWN0aW9uLnBvaW50ZXJJc0Rvd24pIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGludGVyYWN0aW9uLnBvaW50ZXJzW3BvaW50ZXJJbmRleF0uaG9sZC50aW1lb3V0KVxuICAgICAgfVxuXG4gICAgICBmaXJlKHtcbiAgICAgICAgaW50ZXJhY3Rpb24sXG4gICAgICAgIHBvaW50ZXIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBldmVudFRhcmdldCxcbiAgICAgICAgdHlwZTogJ21vdmUnLFxuICAgICAgfSlcbiAgICB9XG4gIH0pXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2Rvd24nLCAoeyBpbnRlcmFjdGlvbiwgcG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0LCBwb2ludGVySW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHRpbWVyID0gaW50ZXJhY3Rpb24ucG9pbnRlcnNbcG9pbnRlckluZGV4XS5ob2xkXG4gICAgY29uc3QgcGF0aCA9IHV0aWxzLmRvbS5nZXRQYXRoKGV2ZW50VGFyZ2V0KVxuICAgIGNvbnN0IHNpZ25hbEFyZyA9IHtcbiAgICAgIGludGVyYWN0aW9uLFxuICAgICAgcG9pbnRlcixcbiAgICAgIGV2ZW50LFxuICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICB0eXBlOiAnaG9sZCcsXG4gICAgICB0YXJnZXRzOiBbXSBhcyBFdmVudFRhcmdldExpc3QsXG4gICAgICBwYXRoLFxuICAgICAgZWxlbWVudDogbnVsbCxcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGF0aCkge1xuICAgICAgc2lnbmFsQXJnLmVsZW1lbnQgPSBlbGVtZW50XG5cbiAgICAgIHNpZ25hbHMuZmlyZSgnY29sbGVjdC10YXJnZXRzJywgc2lnbmFsQXJnKVxuICAgIH1cblxuICAgIGlmICghc2lnbmFsQXJnLnRhcmdldHMubGVuZ3RoKSB7IHJldHVybiB9XG5cbiAgICBsZXQgbWluRHVyYXRpb24gPSBJbmZpbml0eVxuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2Ygc2lnbmFsQXJnLnRhcmdldHMpIHtcbiAgICAgIGNvbnN0IGhvbGREdXJhdGlvbiA9IHRhcmdldC5ldmVudGFibGUub3B0aW9ucy5ob2xkRHVyYXRpb25cblxuICAgICAgaWYgKGhvbGREdXJhdGlvbiA8IG1pbkR1cmF0aW9uKSB7XG4gICAgICAgIG1pbkR1cmF0aW9uID0gaG9sZER1cmF0aW9uXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGltZXIuZHVyYXRpb24gPSBtaW5EdXJhdGlvblxuICAgIHRpbWVyLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGZpcmUoe1xuICAgICAgICBpbnRlcmFjdGlvbixcbiAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgIHBvaW50ZXIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB0eXBlOiAnaG9sZCcsXG4gICAgICB9KVxuICAgIH0sIG1pbkR1cmF0aW9uKVxuICB9KVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCd1cCcsICh7IGludGVyYWN0aW9uLCBwb2ludGVyLCBldmVudCwgZXZlbnRUYXJnZXQgfSkgPT4ge1xuICAgIGlmICghaW50ZXJhY3Rpb24ucG9pbnRlcldhc01vdmVkKSB7XG4gICAgICBmaXJlKHsgaW50ZXJhY3Rpb24sIGV2ZW50VGFyZ2V0LCBwb2ludGVyLCBldmVudCwgdHlwZTogJ3RhcCcgfSlcbiAgICB9XG4gIH0pXG5cbiAgZm9yIChjb25zdCBzaWduYWxOYW1lIG9mIFsndXAnLCAnY2FuY2VsJ10pIHtcbiAgICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbihzaWduYWxOYW1lLCAoeyBpbnRlcmFjdGlvbiwgcG9pbnRlckluZGV4IH0pID0+IHtcbiAgICAgIGlmIChpbnRlcmFjdGlvbi5wb2ludGVyc1twb2ludGVySW5kZXhdLmhvbGQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGludGVyYWN0aW9uLnBvaW50ZXJzW3BvaW50ZXJJbmRleF0uaG9sZC50aW1lb3V0KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHNpbXBsZVNpZ25hbHMubGVuZ3RoOyBpKyspIHtcbiAgICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbihzaW1wbGVTaWduYWxzW2ldLCBjcmVhdGVTaWduYWxMaXN0ZW5lcihzaW1wbGVFdmVudHNbaV0pKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNpZ25hbExpc3RlbmVyICh0eXBlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh7IGludGVyYWN0aW9uLCBwb2ludGVyLCBldmVudCwgZXZlbnRUYXJnZXQgfTogYW55KSB7XG4gICAgZmlyZSh7IGludGVyYWN0aW9uLCBldmVudFRhcmdldCwgcG9pbnRlciwgZXZlbnQsIHR5cGUgfSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBwb2ludGVyRXZlbnRzXG4iXX0= \ No newline at end of file diff --git a/packages/pointer-events/holdRepeat.d.ts b/packages/pointer-events/holdRepeat.d.ts index cafd6761c..e455a1a0b 100644 --- a/packages/pointer-events/holdRepeat.d.ts +++ b/packages/pointer-events/holdRepeat.d.ts @@ -1,3 +1,8 @@ +declare module '@interactjs/core/Interaction' { + interface Interaction { + holdIntervalHandle?: any; + } +} declare function install(scope: any): void; declare const _default: { install: typeof install; diff --git a/packages/pointer-events/holdRepeat.js b/packages/pointer-events/holdRepeat.js index 7e59d3c7b..93b49a21b 100644 --- a/packages/pointer-events/holdRepeat.js +++ b/packages/pointer-events/holdRepeat.js @@ -47,4 +47,4 @@ function endHoldRepeat({ interaction }) { export default { install, }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9sZFJlcGVhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhvbGRSZXBlYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxPQUFPLENBQUUsS0FBSztJQUNyQixNQUFNLEVBQ0osYUFBYSxFQUNiLFlBQVksR0FDYixHQUFHLEtBQUssQ0FBQTtJQUVULGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUN0QyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQTtJQUV2RSxLQUFLLE1BQU0sTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDdkQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFBO0tBQy9DO0lBRUQsMEJBQTBCO0lBQzFCLGFBQWEsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFBO0lBQzdDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO0FBQ3hDLENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBRSxFQUFFLFlBQVksRUFBRTtJQUM5QixJQUFJLFlBQVksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1FBQUUsT0FBTTtLQUFFO0lBRTVDLFlBQVksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNwRCxDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsRUFBRSxhQUFhO0lBQ2xGLElBQUksWUFBWSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1FBQUUsT0FBTTtLQUFFO0lBRS9ELG1EQUFtRDtJQUNuRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQTtJQUVoRSw0Q0FBNEM7SUFDNUMsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO1FBQUUsT0FBTTtLQUFFO0lBRTdCLDZDQUE2QztJQUM3QyxXQUFXLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUMvQyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQ2pCLFdBQVc7WUFDWCxXQUFXO1lBQ1gsSUFBSSxFQUFFLE1BQU07WUFDWixPQUFPLEVBQUUsWUFBWTtZQUNyQixLQUFLLEVBQUUsWUFBWTtTQUNwQixDQUFDLENBQUE7SUFDSixDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFDZCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUUsRUFBRSxXQUFXLEVBQUU7SUFDckMsOENBQThDO0lBQzlDLG9DQUFvQztJQUNwQyxJQUFJLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRTtRQUNsQyxhQUFhLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFDN0MsV0FBVyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQTtLQUN0QztBQUNILENBQUM7QUFFRCxlQUFlO0lBQ2IsT0FBTztDQUNSLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBpbnN0YWxsIChzY29wZSkge1xuICBjb25zdCB7XG4gICAgcG9pbnRlckV2ZW50cyxcbiAgICBpbnRlcmFjdGlvbnMsXG4gIH0gPSBzY29wZVxuXG4gIHBvaW50ZXJFdmVudHMuc2lnbmFscy5vbignbmV3Jywgb25OZXcpXG4gIHBvaW50ZXJFdmVudHMuc2lnbmFscy5vbignZmlyZWQnLCAoYXJnKSA9PiBvbkZpcmVkKGFyZywgcG9pbnRlckV2ZW50cykpXG5cbiAgZm9yIChjb25zdCBzaWduYWwgb2YgWydtb3ZlJywgJ3VwJywgJ2NhbmNlbCcsICdlbmRhbGwnXSkge1xuICAgIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKHNpZ25hbCwgZW5kSG9sZFJlcGVhdClcbiAgfVxuXG4gIC8vIGRvbid0IHJlcGVhdCBieSBkZWZhdWx0XG4gIHBvaW50ZXJFdmVudHMuZGVmYXVsdHMuaG9sZFJlcGVhdEludGVydmFsID0gMFxuICBwb2ludGVyRXZlbnRzLnR5cGVzLnB1c2goJ2hvbGRyZXBlYXQnKVxufVxuXG5mdW5jdGlvbiBvbk5ldyAoeyBwb2ludGVyRXZlbnQgfSkge1xuICBpZiAocG9pbnRlckV2ZW50LnR5cGUgIT09ICdob2xkJykgeyByZXR1cm4gfVxuXG4gIHBvaW50ZXJFdmVudC5jb3VudCA9IChwb2ludGVyRXZlbnQuY291bnQgfHwgMCkgKyAxXG59XG5cbmZ1bmN0aW9uIG9uRmlyZWQgKHsgaW50ZXJhY3Rpb24sIHBvaW50ZXJFdmVudCwgZXZlbnRUYXJnZXQsIHRhcmdldHMgfSwgcG9pbnRlckV2ZW50cykge1xuICBpZiAocG9pbnRlckV2ZW50LnR5cGUgIT09ICdob2xkJyB8fCAhdGFyZ2V0cy5sZW5ndGgpIHsgcmV0dXJuIH1cblxuICAvLyBnZXQgdGhlIHJlcGVhdCBpbnRlcnZhbCBmcm9tIHRoZSBmaXJzdCBldmVudGFibGVcbiAgY29uc3QgaW50ZXJ2YWwgPSB0YXJnZXRzWzBdLmV2ZW50YWJsZS5vcHRpb25zLmhvbGRSZXBlYXRJbnRlcnZhbFxuXG4gIC8vIGRvbid0IHJlcGVhdCBpZiB0aGUgaW50ZXJ2YWwgaXMgMCBvciBsZXNzXG4gIGlmIChpbnRlcnZhbCA8PSAwKSB7IHJldHVybiB9XG5cbiAgLy8gc2V0IGEgdGltZW91dCB0byBmaXJlIHRoZSBob2xkcmVwZWF0IGV2ZW50XG4gIGludGVyYWN0aW9uLmhvbGRJbnRlcnZhbEhhbmRsZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHBvaW50ZXJFdmVudHMuZmlyZSh7XG4gICAgICBpbnRlcmFjdGlvbixcbiAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgdHlwZTogJ2hvbGQnLFxuICAgICAgcG9pbnRlcjogcG9pbnRlckV2ZW50LFxuICAgICAgZXZlbnQ6IHBvaW50ZXJFdmVudCxcbiAgICB9KVxuICB9LCBpbnRlcnZhbClcbn1cblxuZnVuY3Rpb24gZW5kSG9sZFJlcGVhdCAoeyBpbnRlcmFjdGlvbiB9KSB7XG4gIC8vIHNldCB0aGUgaW50ZXJhY3Rpb24ncyBob2xkU3RvcFRpbWUgcHJvcGVydHlcbiAgLy8gdG8gc3RvcCBmdXJ0aGVyIGhvbGRSZXBlYXQgZXZlbnRzXG4gIGlmIChpbnRlcmFjdGlvbi5ob2xkSW50ZXJ2YWxIYW5kbGUpIHtcbiAgICBjbGVhckludGVydmFsKGludGVyYWN0aW9uLmhvbGRJbnRlcnZhbEhhbmRsZSlcbiAgICBpbnRlcmFjdGlvbi5ob2xkSW50ZXJ2YWxIYW5kbGUgPSBudWxsXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpbnN0YWxsLFxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9sZFJlcGVhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhvbGRSZXBlYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsU0FBUyxPQUFPLENBQUUsS0FBSztJQUNyQixNQUFNLEVBQ0osYUFBYSxFQUNiLFlBQVksR0FDYixHQUFHLEtBQUssQ0FBQTtJQUVULGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUN0QyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQTtJQUV2RSxLQUFLLE1BQU0sTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDdkQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFBO0tBQy9DO0lBRUQsMEJBQTBCO0lBQzFCLGFBQWEsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFBO0lBQzdDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO0FBQ3hDLENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBRSxFQUFFLFlBQVksRUFBRTtJQUM5QixJQUFJLFlBQVksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1FBQUUsT0FBTTtLQUFFO0lBRTVDLFlBQVksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNwRCxDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsRUFBRSxhQUFhO0lBQ2xGLElBQUksWUFBWSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1FBQUUsT0FBTTtLQUFFO0lBRS9ELG1EQUFtRDtJQUNuRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQTtJQUVoRSw0Q0FBNEM7SUFDNUMsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO1FBQUUsT0FBTTtLQUFFO0lBRTdCLDZDQUE2QztJQUM3QyxXQUFXLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUMvQyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQ2pCLFdBQVc7WUFDWCxXQUFXO1lBQ1gsSUFBSSxFQUFFLE1BQU07WUFDWixPQUFPLEVBQUUsWUFBWTtZQUNyQixLQUFLLEVBQUUsWUFBWTtTQUNwQixDQUFDLENBQUE7SUFDSixDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFDZCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUUsRUFBRSxXQUFXLEVBQUU7SUFDckMsOENBQThDO0lBQzlDLG9DQUFvQztJQUNwQyxJQUFJLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRTtRQUNsQyxhQUFhLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFDN0MsV0FBVyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQTtLQUN0QztBQUNILENBQUM7QUFFRCxlQUFlO0lBQ2IsT0FBTztDQUNSLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJkZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbicge1xuICBpbnRlcmZhY2UgSW50ZXJhY3Rpb24ge1xuICAgIGhvbGRJbnRlcnZhbEhhbmRsZT86IGFueVxuICB9XG59XG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlKSB7XG4gIGNvbnN0IHtcbiAgICBwb2ludGVyRXZlbnRzLFxuICAgIGludGVyYWN0aW9ucyxcbiAgfSA9IHNjb3BlXG5cbiAgcG9pbnRlckV2ZW50cy5zaWduYWxzLm9uKCduZXcnLCBvbk5ldylcbiAgcG9pbnRlckV2ZW50cy5zaWduYWxzLm9uKCdmaXJlZCcsIChhcmcpID0+IG9uRmlyZWQoYXJnLCBwb2ludGVyRXZlbnRzKSlcblxuICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBbJ21vdmUnLCAndXAnLCAnY2FuY2VsJywgJ2VuZGFsbCddKSB7XG4gICAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oc2lnbmFsLCBlbmRIb2xkUmVwZWF0KVxuICB9XG5cbiAgLy8gZG9uJ3QgcmVwZWF0IGJ5IGRlZmF1bHRcbiAgcG9pbnRlckV2ZW50cy5kZWZhdWx0cy5ob2xkUmVwZWF0SW50ZXJ2YWwgPSAwXG4gIHBvaW50ZXJFdmVudHMudHlwZXMucHVzaCgnaG9sZHJlcGVhdCcpXG59XG5cbmZ1bmN0aW9uIG9uTmV3ICh7IHBvaW50ZXJFdmVudCB9KSB7XG4gIGlmIChwb2ludGVyRXZlbnQudHlwZSAhPT0gJ2hvbGQnKSB7IHJldHVybiB9XG5cbiAgcG9pbnRlckV2ZW50LmNvdW50ID0gKHBvaW50ZXJFdmVudC5jb3VudCB8fCAwKSArIDFcbn1cblxuZnVuY3Rpb24gb25GaXJlZCAoeyBpbnRlcmFjdGlvbiwgcG9pbnRlckV2ZW50LCBldmVudFRhcmdldCwgdGFyZ2V0cyB9LCBwb2ludGVyRXZlbnRzKSB7XG4gIGlmIChwb2ludGVyRXZlbnQudHlwZSAhPT0gJ2hvbGQnIHx8ICF0YXJnZXRzLmxlbmd0aCkgeyByZXR1cm4gfVxuXG4gIC8vIGdldCB0aGUgcmVwZWF0IGludGVydmFsIGZyb20gdGhlIGZpcnN0IGV2ZW50YWJsZVxuICBjb25zdCBpbnRlcnZhbCA9IHRhcmdldHNbMF0uZXZlbnRhYmxlLm9wdGlvbnMuaG9sZFJlcGVhdEludGVydmFsXG5cbiAgLy8gZG9uJ3QgcmVwZWF0IGlmIHRoZSBpbnRlcnZhbCBpcyAwIG9yIGxlc3NcbiAgaWYgKGludGVydmFsIDw9IDApIHsgcmV0dXJuIH1cblxuICAvLyBzZXQgYSB0aW1lb3V0IHRvIGZpcmUgdGhlIGhvbGRyZXBlYXQgZXZlbnRcbiAgaW50ZXJhY3Rpb24uaG9sZEludGVydmFsSGFuZGxlID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgcG9pbnRlckV2ZW50cy5maXJlKHtcbiAgICAgIGludGVyYWN0aW9uLFxuICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICB0eXBlOiAnaG9sZCcsXG4gICAgICBwb2ludGVyOiBwb2ludGVyRXZlbnQsXG4gICAgICBldmVudDogcG9pbnRlckV2ZW50LFxuICAgIH0pXG4gIH0sIGludGVydmFsKVxufVxuXG5mdW5jdGlvbiBlbmRIb2xkUmVwZWF0ICh7IGludGVyYWN0aW9uIH0pIHtcbiAgLy8gc2V0IHRoZSBpbnRlcmFjdGlvbidzIGhvbGRTdG9wVGltZSBwcm9wZXJ0eVxuICAvLyB0byBzdG9wIGZ1cnRoZXIgaG9sZFJlcGVhdCBldmVudHNcbiAgaWYgKGludGVyYWN0aW9uLmhvbGRJbnRlcnZhbEhhbmRsZSkge1xuICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJhY3Rpb24uaG9sZEludGVydmFsSGFuZGxlKVxuICAgIGludGVyYWN0aW9uLmhvbGRJbnRlcnZhbEhhbmRsZSA9IG51bGxcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluc3RhbGwsXG59XG4iXX0= \ No newline at end of file diff --git a/packages/pointer-events/interactableTargets.d.ts b/packages/pointer-events/interactableTargets.d.ts index 85bb46437..ba6601158 100644 --- a/packages/pointer-events/interactableTargets.d.ts +++ b/packages/pointer-events/interactableTargets.d.ts @@ -1,5 +1,5 @@ import { Scope } from '@interactjs/core/scope'; -type Interactable = import('@interactjs/core/Interactable').default; +declare type Interactable = import('@interactjs/core/Interactable').default; declare module '@interactjs/core/Interactable' { interface Interactable { pointerEvents: typeof pointerEventsMethod; diff --git a/packages/pointer-events/package.json b/packages/pointer-events/package.json index 14bf52a9f..d3da0763a 100644 --- a/packages/pointer-events/package.json +++ b/packages/pointer-events/package.json @@ -1,14 +1,14 @@ { "name": "@interactjs/pointer-events", - "version": "1.4.0-alpha.27+sha.12b8f8f", + "version": "1.4.0-alpha.28+sha.e624c4d", "peerDependencies": { - "@interactjs/core": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/utils": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/core": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/utils": "1.4.0-alpha.28+sha.e624c4d" }, "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/core": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/utils": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/_dev": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/core": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/utils": "1.4.0-alpha.28+sha.e624c4d" }, "publishConfig": { "access": "public" diff --git a/packages/pointer-events/tests/PointerEvent.d.ts b/packages/pointer-events/tests/PointerEvent.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/pointer-events/tests/PointerEvent.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/pointer-events/tests/PointerEvent.js b/packages/pointer-events/tests/PointerEvent.js new file mode 100644 index 000000000..6fb4ffc0d --- /dev/null +++ b/packages/pointer-events/tests/PointerEvent.js @@ -0,0 +1,62 @@ +import Interaction from '@interactjs/core/Interaction'; +import * as helpers from '@interactjs/core/tests/helpers'; +import pointerUtils from '@interactjs/utils/pointerUtils'; +import Signals from '@interactjs/utils/Signals'; +import test from '@interactjs/_dev/test/test'; +import PointerEvent from '../PointerEvent'; +test('PointerEvent constructor', t => { + const type = 'TEST_EVENT'; + const pointerId = -100; + const testPointerProp = ['TEST_POINTER_PROP']; + const pointer = { + pointerId, + testPointerProp, + pointerType: 'TEST_POINTER_TYPE', + }; + const testEventProp = ['TEST_EVENT_PROP']; + const event = { + testEventProp, + }; + const interaction = new Interaction({ signals: new Signals() }); + const eventTarget = {}; + const pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction); + t.equal(pointerEvent.testPointerProp, testPointerProp, 'pointerEvent is extended form pointer'); + t.equal(pointerEvent.testEventProp, testEventProp, 'pointerEvent is extended form Event'); + t.equal(pointerEvent.type, type, 'type is set correctly'); + t.equal(pointerEvent.pointerType, pointerUtils.getPointerType(pointer), 'pointerType is set correctly'); + t.equal(pointerEvent.pointerId, pointerId, 'pointerId is set correctly'); + t.equal(pointerEvent.originalEvent, event, 'originalEvent is set correctly'); + t.equal(pointerEvent.interaction, interaction, 'interaction is set correctly'); + t.equal(pointerEvent.target, eventTarget, 'target is set correctly'); + t.equal(pointerEvent.currentTarget, null, 'currentTarget is null'); + t.end(); +}); +test('PointerEvent methods', t => { + const methodContexts = {}; + const event = ['preventDefault', 'stopPropagation', 'stopImmediatePropagation'] + .reduce((acc, methodName) => { + acc[methodName] = function () { methodContexts[methodName] = this; }; + return acc; + }, helpers.newPointer()); + const pointerEvent = new PointerEvent('TEST', {}, event, null, {}); + pointerEvent.preventDefault(); + t.equal(methodContexts.preventDefault, event, 'PointerEvent.preventDefault() calls preventDefault of originalEvent'); + t.notOk(pointerEvent.propagationStopped, 'propagationStopped is false before call to stopPropagation'); + pointerEvent.stopPropagation(); + t.ok(pointerEvent.propagationStopped, 'stopPropagation sets propagationStopped to true'); + t.equal(methodContexts.stopPropagation, undefined, 'PointerEvent.stopPropagation() does not call stopPropagation of originalEvent'); + t.notOk(pointerEvent.immediatePropagationStopped, 'immediatePropagationStopped is false before call to stopImmediatePropagation'); + pointerEvent.stopImmediatePropagation(); + t.equal(methodContexts.stopImmediatePropagation, undefined, 'PointerEvent.stopImmediatePropagation() does not call stopImmediatePropagation of originalEvent'); + t.ok(pointerEvent.immediatePropagationStopped, 'stopImmediatePropagation sets immediatePropagationStopped to true'); + const origin = { x: 20, y: 30 }; + pointerEvent.subtractOrigin(origin); + t.equal(pointerEvent.pageX, event.pageX - origin.x, 'subtractOrigin updates pageX correctly'); + t.equal(pointerEvent.pageY, event.pageY - origin.y, 'subtractOrigin updates pageY correctly'); + t.equal(pointerEvent.clientX, event.clientX - origin.x, 'subtractOrigin updates clientX correctly'); + t.equal(pointerEvent.clientY, event.clientY - origin.y, 'subtractOrigin updates clientY correctly'); + pointerEvent.addOrigin(origin); + t.ok(['pageX', 'pageY', 'clientX', 'clientY'].reduce((allEqual, prop) => allEqual && pointerEvent[prop] === event[prop], true), 'addOrigin with the subtracted origin reverts to original coordinates'); + t.end(); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9pbnRlckV2ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiUG9pbnRlckV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sV0FBVyxNQUFNLDhCQUE4QixDQUFBO0FBQ3RELE9BQU8sS0FBSyxPQUFPLE1BQU0sZ0NBQWdDLENBQUE7QUFDekQsT0FBTyxZQUFZLE1BQU0sZ0NBQWdDLENBQUE7QUFDekQsT0FBTyxPQUFPLE1BQU0sMkJBQTJCLENBQUE7QUFDL0MsT0FBTyxJQUFJLE1BQU0sNEJBQTRCLENBQUE7QUFDN0MsT0FBTyxZQUFZLE1BQU0saUJBQWlCLENBQUE7QUFFMUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ25DLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQTtJQUN6QixNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQTtJQUN0QixNQUFNLGVBQWUsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUE7SUFDN0MsTUFBTSxPQUFPLEdBQUc7UUFDZCxTQUFTO1FBQ1QsZUFBZTtRQUNmLFdBQVcsRUFBRSxtQkFBbUI7S0FDakMsQ0FBQTtJQUNELE1BQU0sYUFBYSxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtJQUN6QyxNQUFNLEtBQUssR0FBRztRQUNaLGFBQWE7S0FDZCxDQUFBO0lBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxPQUFPLEVBQUUsRUFBUyxDQUFDLENBQUE7SUFDdEUsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFBO0lBQ3RCLE1BQU0sWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQVEsQ0FBQTtJQUU1RixDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUNuRCx1Q0FBdUMsQ0FBQyxDQUFBO0lBQzFD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QUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFJLEtBQUssQ0FBQyxLQUFLLEdBQUssTUFBTSxDQUFDLENBQUMsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFBO0lBQ2pHLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBSSxLQUFLLENBQUMsS0FBSyxHQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsd0NBQXdDLENBQUMsQ0FBQTtJQUNqRyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLDBDQUEwQyxDQUFDLENBQUE7SUFDbkcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSwwQ0FBMEMsQ0FBQyxDQUFBO0lBRW5HLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDOUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLFFBQVEsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUM1SCxzRUFBc0UsQ0FBQyxDQUFBO0lBRXpFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEludGVyYWN0aW9uIGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3Rpb24nXG5pbXBvcnQgKiBhcyBoZWxwZXJzIGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvdGVzdHMvaGVscGVycydcbmltcG9ydCBwb2ludGVyVXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvcG9pbnRlclV0aWxzJ1xuaW1wb3J0IFNpZ25hbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvU2lnbmFscydcbmltcG9ydCB0ZXN0IGZyb20gJ0BpbnRlcmFjdGpzL19kZXYvdGVzdC90ZXN0J1xuaW1wb3J0IFBvaW50ZXJFdmVudCBmcm9tICcuLi9Qb2ludGVyRXZlbnQnXG5cbnRlc3QoJ1BvaW50ZXJFdmVudCBjb25zdHJ1Y3RvcicsIHQgPT4ge1xuICBjb25zdCB0eXBlID0gJ1RFU1RfRVZFTlQnXG4gIGNvbnN0IHBvaW50ZXJJZCA9IC0xMDBcbiAgY29uc3QgdGVzdFBvaW50ZXJQcm9wID0gWydURVNUX1BPSU5URVJfUFJPUCddXG4gIGNvbnN0IHBvaW50ZXIgPSB7XG4gICAgcG9pbnRlcklkLFxuICAgIHRlc3RQb2ludGVyUHJvcCxcbiAgICBwb2ludGVyVHlwZTogJ1RFU1RfUE9JTlRFUl9UWVBFJyxcbiAgfVxuICBjb25zdCB0ZXN0RXZlbnRQcm9wID0gWydURVNUX0VWRU5UX1BST1AnXVxuICBjb25zdCBldmVudCA9IHtcbiAgICB0ZXN0RXZlbnRQcm9wLFxuICB9XG4gIGNvbnN0IGludGVyYWN0aW9uID0gbmV3IEludGVyYWN0aW9uKHsgc2lnbmFsczogbmV3IFNpZ25hbHMoKSB9IGFzIGFueSlcbiAgY29uc3QgZXZlbnRUYXJnZXQgPSB7fVxuICBjb25zdCBwb2ludGVyRXZlbnQgPSBuZXcgUG9pbnRlckV2ZW50KHR5cGUsIHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCwgaW50ZXJhY3Rpb24pIGFzIGFueVxuXG4gIHQuZXF1YWwocG9pbnRlckV2ZW50LnRlc3RQb2ludGVyUHJvcCwgdGVzdFBvaW50ZXJQcm9wLFxuICAgICdwb2ludGVyRXZlbnQgaXMgZXh0ZW5kZWQgZm9ybSBwb2ludGVyJylcbiAgdC5lcXVhbChwb2ludGVyRXZlbnQudGVzdEV2ZW50UHJvcCwgdGVzdEV2ZW50UHJvcCxcbiAgICAncG9pbnRlckV2ZW50IGlzIGV4dGVuZGVkIGZvcm0gRXZlbnQnKVxuXG4gIHQuZXF1YWwocG9pbnRlckV2ZW50LnR5cGUsIHR5cGUsXG4gICAgJ3R5cGUgaXMgc2V0IGNvcnJlY3RseScpXG4gIHQuZXF1YWwocG9pbnRlckV2ZW50LnBvaW50ZXJUeXBlLCBwb2ludGVyVXRpbHMuZ2V0UG9pbnRlclR5cGUocG9pbnRlciksXG4gICAgJ3BvaW50ZXJUeXBlIGlzIHNldCBjb3JyZWN0bHknKVxuICB0LmVxdWFsKHBvaW50ZXJFdmVudC5wb2ludGVySWQsIHBvaW50ZXJJZCxcbiAgICAncG9pbnRlcklkIGlzIHNldCBjb3JyZWN0bHknKVxuICB0LmVxdWFsKHBvaW50ZXJFdmVudC5vcmlnaW5hbEV2ZW50LCBldmVudCxcbiAgICAnb3JpZ2luYWxFdmVudCBpcyBzZXQgY29ycmVjdGx5JylcbiAgdC5lcXVhbChwb2ludGVyRXZlbnQuaW50ZXJhY3Rpb24sIGludGVyYWN0aW9uLFxuICAgICdpbnRlcmFjdGlvbiBpcyBzZXQgY29ycmVjdGx5JylcbiAgdC5lcXVhbChwb2ludGVyRXZlbnQudGFyZ2V0LCBldmVudFRhcmdldCxcbiAgICAndGFyZ2V0IGlzIHNldCBjb3JyZWN0bHknKVxuICB0LmVxdWFsKHBvaW50ZXJFdmVudC5jdXJyZW50VGFyZ2V0LCBudWxsLFxuICAgICdjdXJyZW50VGFyZ2V0IGlzIG51bGwnKVxuXG4gIHQuZW5kKClcbn0pXG5cbnRlc3QoJ1BvaW50ZXJFdmVudCBtZXRob2RzJywgdCA9PiB7XG4gIGNvbnN0IG1ldGhvZENvbnRleHRzID0ge30gYXMgYW55XG4gIGNvbnN0IGV2ZW50ID0gWydwcmV2ZW50RGVmYXVsdCcsICdzdG9wUHJvcGFnYXRpb24nLCAnc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uJ11cbiAgICAucmVkdWNlKChhY2MsIG1ldGhvZE5hbWUpID0+IHtcbiAgICAgIGFjY1ttZXRob2ROYW1lXSA9IGZ1bmN0aW9uICgpIHsgbWV0aG9kQ29udGV4dHNbbWV0aG9kTmFtZV0gPSB0aGlzIH1cbiAgICAgIHJldHVybiBhY2NcbiAgICB9LCBoZWxwZXJzLm5ld1BvaW50ZXIoKSlcbiAgY29uc3QgcG9pbnRlckV2ZW50ID0gbmV3IFBvaW50ZXJFdmVudCgnVEVTVCcsIHt9LCBldmVudCwgbnVsbCwge30pXG5cbiAgcG9pbnRlckV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgdC5lcXVhbChtZXRob2RDb250ZXh0cy5wcmV2ZW50RGVmYXVsdCwgZXZlbnQsXG4gICAgJ1BvaW50ZXJFdmVudC5wcmV2ZW50RGVmYXVsdCgpIGNhbGxzIHByZXZlbnREZWZhdWx0IG9mIG9yaWdpbmFsRXZlbnQnKVxuXG4gIHQubm90T2socG9pbnRlckV2ZW50LnByb3BhZ2F0aW9uU3RvcHBlZCxcbiAgICAncHJvcGFnYXRpb25TdG9wcGVkIGlzIGZhbHNlIGJlZm9yZSBjYWxsIHRvIHN0b3BQcm9wYWdhdGlvbicpXG4gIHBvaW50ZXJFdmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICB0Lm9rKHBvaW50ZXJFdmVudC5wcm9wYWdhdGlvblN0b3BwZWQsXG4gICAgJ3N0b3BQcm9wYWdhdGlvbiBzZXRzIHByb3BhZ2F0aW9uU3RvcHBlZCB0byB0cnVlJylcbiAgdC5lcXVhbChtZXRob2RDb250ZXh0cy5zdG9wUHJvcGFnYXRpb24sIHVuZGVmaW5lZCxcbiAgICAnUG9pbnRlckV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIGRvZXMgbm90IGNhbGwgc3RvcFByb3BhZ2F0aW9uIG9mIG9yaWdpbmFsRXZlbnQnKVxuXG4gIHQubm90T2socG9pbnRlckV2ZW50LmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCxcbiAgICAnaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkIGlzIGZhbHNlIGJlZm9yZSBjYWxsIHRvIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbicpXG4gIHBvaW50ZXJFdmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuICB0LmVxdWFsKG1ldGhvZENvbnRleHRzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiwgdW5kZWZpbmVkLFxuICAgICdQb2ludGVyRXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkgZG9lcyBub3QgY2FsbCBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gb2Ygb3JpZ2luYWxFdmVudCcpXG4gIHQub2socG9pbnRlckV2ZW50LmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCxcbiAgICAnc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIHNldHMgaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkIHRvIHRydWUnKVxuXG4gIGNvbnN0IG9yaWdpbiA9IHsgeDogMjAsIHk6IDMwIH1cbiAgcG9pbnRlckV2ZW50LnN1YnRyYWN0T3JpZ2luKG9yaWdpbilcblxuICB0LmVxdWFsKHBvaW50ZXJFdmVudC5wYWdlWCwgICBldmVudC5wYWdlWCAgIC0gb3JpZ2luLngsICdzdWJ0cmFjdE9yaWdpbiB1cGRhdGVzIHBhZ2VYIGNvcnJlY3RseScpXG4gIHQuZXF1YWwocG9pbnRlckV2ZW50LnBhZ2VZLCAgIGV2ZW50LnBhZ2VZICAgLSBvcmlnaW4ueSwgJ3N1YnRyYWN0T3JpZ2luIHVwZGF0ZXMgcGFnZVkgY29ycmVjdGx5JylcbiAgdC5lcXVhbChwb2ludGVyRXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WCAtIG9yaWdpbi54LCAnc3VidHJhY3RPcmlnaW4gdXBkYXRlcyBjbGllbnRYIGNvcnJlY3RseScpXG4gIHQuZXF1YWwocG9pbnRlckV2ZW50LmNsaWVudFksIGV2ZW50LmNsaWVudFkgLSBvcmlnaW4ueSwgJ3N1YnRyYWN0T3JpZ2luIHVwZGF0ZXMgY2xpZW50WSBjb3JyZWN0bHknKVxuXG4gIHBvaW50ZXJFdmVudC5hZGRPcmlnaW4ob3JpZ2luKVxuICB0Lm9rKFsncGFnZVgnLCAncGFnZVknLCAnY2xpZW50WCcsICdjbGllbnRZJ10ucmVkdWNlKChhbGxFcXVhbCwgcHJvcCkgPT4gYWxsRXF1YWwgJiYgcG9pbnRlckV2ZW50W3Byb3BdID09PSBldmVudFtwcm9wXSwgdHJ1ZSksXG4gICAgJ2FkZE9yaWdpbiB3aXRoIHRoZSBzdWJ0cmFjdGVkIG9yaWdpbiByZXZlcnRzIHRvIG9yaWdpbmFsIGNvb3JkaW5hdGVzJylcblxuICB0LmVuZCgpXG59KVxuIl19 \ No newline at end of file diff --git a/packages/pointer-events/tests/base.d.ts b/packages/pointer-events/tests/base.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/pointer-events/tests/base.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/pointer-events/tests/base.js b/packages/pointer-events/tests/base.js new file mode 100644 index 000000000..1035206e3 --- /dev/null +++ b/packages/pointer-events/tests/base.js @@ -0,0 +1,128 @@ +import Eventable from '@interactjs/core/Eventable'; +import Interaction from '@interactjs/core/Interaction'; +import interactions from '@interactjs/core/interactions'; +import * as helpers from '@interactjs/core/tests/helpers'; +import Signals from '@interactjs/utils/Signals'; +import test from '@interactjs/_dev/test/test'; +import pointerEvents from '../base'; +test('pointerEvents.types', t => { + t.deepEqual(pointerEvents.types, [ + 'down', + 'move', + 'up', + 'cancel', + 'tap', + 'doubletap', + 'hold', + ], 'pointerEvents.types is as expected'); + t.end(); +}); +test('pointerEvents.fire', t => { + const eventable = new Eventable(pointerEvents.defaults); + const type = 'TEST'; + const element = {}; + const eventTarget = {}; + const TEST_PROP = ['TEST_PROP']; + let firedEvent; + eventable.on(type, event => { firedEvent = event; }); + pointerEvents.fire({ + type, + eventTarget, + pointer: {}, + event: {}, + interaction: {}, + targets: [{ + eventable, + element, + props: { + TEST_PROP, + }, + }], + }); + t.ok(firedEvent instanceof pointerEvents.PointerEvent, 'Fired event is an instance of pointerEvents.PointerEvent'); + t.equal(firedEvent.type, type, 'Fired event type is correct'); + t.equal(firedEvent.currentTarget, element, 'Fired event currentTarget is correct'); + t.equal(firedEvent.target, eventTarget, 'Fired event target is correct'); + t.equal(firedEvent.TEST_PROP, TEST_PROP, 'Fired event has props from target.props'); + const tapTime = 500; + const interaction = Object.assign(new Interaction({ signals: new Signals() }), { tapTime: -1, prevTap: null }); + interaction.updatePointer({}, {}, null); + const tapEvent = Object.assign(new pointerEvents.PointerEvent('tap', {}, {}, null, interaction), { + timeStamp: tapTime, + }); + pointerEvents.fire({ + pointerEvent: tapEvent, + interaction, + targets: [{ + eventable, + element, + }], + }); + t.equal(interaction.tapTime, tapTime, 'interaction.tapTime is updated'); + t.equal(interaction.prevTap, tapEvent, 'interaction.prevTap is updated'); + t.end(); +}); +test('pointerEvents.collectEventTargets', t => { + const type = 'TEST'; + const TEST_PROP = ['TEST_PROP']; + const target = { + TEST_PROP, + eventable: new Eventable(pointerEvents.defaults), + }; + let collectedTargets; + function onCollect({ targets }) { + targets.push(target); + collectedTargets = targets; + } + pointerEvents.signals.on('collect-targets', onCollect); + pointerEvents.collectEventTargets({ + interaction: new Interaction({ signals: helpers.mockSignals() }), + pointer: {}, + event: {}, + eventTarget: {}, + type, + }); + t.deepEqual(collectedTargets, [target]); + pointerEvents.signals.off('collect-targets', onCollect); + t.end(); +}); +test('pointerEvents Interaction update-pointer signal', t => { + const scope = helpers.mockScope(); + interactions.install(scope); + pointerEvents.install(scope); + const interaction = scope.interactions.new({}); + const initialHold = { duration: Infinity, timeout: null }; + const event = {}; + interaction.updatePointer(helpers.newPointer(0), event, null, false); + t.deepEqual(interaction.pointers.map(p => p.hold), [initialHold], 'set hold info for move on new pointer'); + interaction.removePointer(helpers.newPointer(0), event); + interaction.updatePointer(helpers.newPointer(0), event, null, true); + t.deepEqual(interaction.pointers.map(p => p.hold), [initialHold]); + interaction.updatePointer(helpers.newPointer(5), event, null, true); + t.deepEqual(interaction.pointers.map(p => p.hold), [initialHold, initialHold]); + t.end(); +}); +test('pointerEvents Interaction remove-pointer signal', t => { + const scope = helpers.mockScope(); + interactions.install(scope); + pointerEvents.install(scope); + const interaction = scope.interactions.new({}); + const ids = [0, 1, 2, 3]; + const removals = [ + { id: 0, remain: [1, 2, 3], message: 'first of 4' }, + { id: 2, remain: [1, 3], message: 'middle of 3' }, + { id: 3, remain: [1], message: 'last of 2' }, + { id: 1, remain: [], message: 'final' }, + ]; + for (const id of ids) { + const index = interaction.updatePointer({ pointerId: id }, {}, null, true); + // use the ids as the pointerInfo.hold value for this test + interaction.pointers[index].hold = id; + } + for (const removal of removals) { + interaction.removePointer({ pointerId: removal.id }, null); + t.deepEqual(interaction.pointers.map(p => p.hold), removal.remain, `${removal.message} - remaining interaction.holdTimers is correct`); + } + t.end(); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxTQUFTLE1BQU0sNEJBQTRCLENBQUE7QUFDbEQsT0FBTyxXQUFXLE1BQU0sOEJBQThCLENBQUE7QUFDdEQsT0FBTyxZQUFZLE1BQU0sK0JBQStCLENBQUE7QUFDeEQsT0FBTyxLQUFLLE9BQU8sTUFBTSxnQ0FBZ0MsQ0FBQTtBQUN6RCxPQUFPLE9BQU8sTUFBTSwyQkFBMkIsQ0FBQTtBQUMvQyxPQUFPLElBQUksTUFBTSw0QkFBNEIsQ0FBQTtBQUM3QyxPQUFPLGFBQWEsTUFBTSxTQUFTLENBQUE7QUFFbkMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQzlCLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssRUFDN0I7UUFDRSxNQUFNO1FBQ04sTUFBTTtRQUNOLElBQUk7UUFDSixRQUFRO1FBQ1IsS0FBSztRQUNMLFdBQVc7UUFDWCxNQUFNO0tBQ1AsRUFDRCxvQ0FBb0MsQ0FBQyxDQUFBO0lBRXZDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQzdCLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUN2RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUE7SUFDbkIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFBO0lBQ2xCLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQTtJQUN0QixNQUFNLFNBQVMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQy9CLElBQUksVUFBVSxDQUFBO0lBRWQsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxVQUFVLEdBQUcsS0FBSyxDQUFBLENBQUMs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dGVudCI6WyJpbXBvcnQgRXZlbnRhYmxlIGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvRXZlbnRhYmxlJ1xuaW1wb3J0IEludGVyYWN0aW9uIGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3Rpb24nXG5pbXBvcnQgaW50ZXJhY3Rpb25zIGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvaW50ZXJhY3Rpb25zJ1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Rlc3RzL2hlbHBlcnMnXG5pbXBvcnQgU2lnbmFscyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9TaWduYWxzJ1xuaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgcG9pbnRlckV2ZW50cyBmcm9tICcuLi9iYXNlJ1xuXG50ZXN0KCdwb2ludGVyRXZlbnRzLnR5cGVzJywgdCA9PiB7XG4gIHQuZGVlcEVxdWFsKHBvaW50ZXJFdmVudHMudHlwZXMsXG4gICAgW1xuICAgICAgJ2Rvd24nLFxuICAgICAgJ21vdmUnLFxuICAgICAgJ3VwJyxcbiAgICAgICdjYW5jZWwnLFxuICAgICAgJ3RhcCcsXG4gICAgICAnZG91YmxldGFwJyxcbiAgICAgICdob2xkJyxcbiAgICBdLFxuICAgICdwb2ludGVyRXZlbnRzLnR5cGVzIGlzIGFzIGV4cGVjdGVkJylcblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdwb2ludGVyRXZlbnRzLmZpcmUnLCB0ID0+IHtcbiAgY29uc3QgZXZlbnRhYmxlID0gbmV3IEV2ZW50YWJsZShwb2ludGVyRXZlbnRzLmRlZmF1bHRzKVxuICBjb25zdCB0eXBlID0gJ1RFU1QnXG4gIGNvbnN0IGVsZW1lbnQgPSB7fVxuICBjb25zdCBldmVudFRhcmdldCA9IHt9XG4gIGNvbnN0IFRFU1RfUFJPUCA9IFsnVEVTVF9QUk9QJ11cbiAgbGV0IGZpcmVkRXZlbnRcblxuICBldmVudGFibGUub24odHlwZSwgZXZlbnQgPT4geyBmaXJlZEV2ZW50ID0gZXZlbnQgfSlcblxuICBwb2ludGVyRXZlbnRzLmZpcmUoe1xuICAgIHR5cGUsXG4gICAgZXZlbnRUYXJnZXQsXG4gICAgcG9pbnRlcjoge30sXG4gICAgZXZlbnQ6IHt9LFxuICAgIGludGVyYWN0aW9uOiB7fSxcbiAgICB0YXJnZXRzOiBbe1xuICAgICAgZXZlbnRhYmxlLFxuICAgICAgZWxlbWVudCxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIFRFU1RfUFJPUCxcbiAgICAgIH0sXG4gICAgfV0sXG4gIH0gYXMgYW55KVxuXG4gIHQub2soZmlyZWRFdmVudCBpbnN0YW5jZW9mIHBvaW50ZXJFdmVudHMuUG9pbnRlckV2ZW50LFxuICAgICdGaXJlZCBldmVudCBpcyBhbiBpbnN0YW5jZSBvZiBwb2ludGVyRXZlbnRzLlBvaW50ZXJFdmVudCcpXG4gIHQuZXF1YWwoZmlyZWRFdmVudC50eXBlLCB0eXBlLFxuICAgICdGaXJlZCBldmVudCB0eXBlIGlzIGNvcnJlY3QnKVxuICB0LmVxdWFsKGZpcmVkRXZlbnQuY3VycmVudFRhcmdldCwgZWxlbWVudCxcbiAgICAnRmlyZWQgZXZlbnQgY3VycmVudFRhcmdldCBpcyBjb3JyZWN0JylcbiAgdC5lcXVhbChmaXJlZEV2ZW50LnRhcmdldCwgZXZlbnRUYXJnZXQsXG4gICAgJ0ZpcmVkIGV2ZW50IHRhcmdldCBpcyBjb3JyZWN0JylcbiAgdC5lcXVhbChmaXJlZEV2ZW50LlRFU1RfUFJPUCwgVEVTVF9QUk9QLFxuICAgICdGaXJlZCBldmVudCBoYXMgcHJvcHMgZnJvbSB0YXJnZXQucHJvcHMnKVxuXG4gIGNvbnN0IHRhcFRpbWUgPSA1MDBcbiAgY29uc3QgaW50ZXJhY3Rpb24gPSBPYmplY3QuYXNzaWduKFxuICAgIG5ldyBJbnRlcmFjdGlvbih7IHNpZ25hbHM6IG5ldyBTaWduYWxzKCkgfSBhcyBhbnkpLFxuICAgIHsgdGFwVGltZTogLTEsIHByZXZUYXA6IG51bGwgfSlcblxuICBpbnRlcmFjdGlvbi51cGRhdGVQb2ludGVyKHt9IGFzIGFueSwge30gYXMgYW55LCBudWxsKVxuXG4gIGNvbnN0IHRhcEV2ZW50ID0gT2JqZWN0LmFzc2lnbihuZXcgcG9pbnRlckV2ZW50cy5Qb2ludGVyRXZlbnQoJ3RhcCcsIHt9LCB7fSwgbnVsbCwgaW50ZXJhY3Rpb24pLCB7XG4gICAgdGltZVN0YW1wOiB0YXBUaW1lLFxuICB9KVxuXG4gIHBvaW50ZXJFdmVudHMuZmlyZSh7XG4gICAgcG9pbnRlckV2ZW50OiB0YXBFdmVudCxcbiAgICBpbnRlcmFjdGlvbixcbiAgICB0YXJnZXRzOiBbe1xuICAgICAgZXZlbnRhYmxlLFxuICAgICAgZWxlbWVudCxcbiAgICB9XSxcbiAgfSBhcyBhbnkpXG5cbiAgdC5lcXVhbChpbnRlcmFjdGlvbi50YXBUaW1lLCB0YXBUaW1lLFxuICAgICdpbnRlcmFjdGlvbi50YXBUaW1lIGlzIHVwZGF0ZWQnKVxuICB0LmVxdWFsKGludGVyYWN0aW9uLnByZXZUYXAsIHRhcEV2ZW50LFxuICAgICdpbnRlcmFjdGlvbi5wcmV2VGFwIGlzIHVwZGF0ZWQnKVxuXG4gIHQuZW5kKClcbn0pXG5cbnRlc3QoJ3BvaW50ZXJFdmVudHMuY29sbGVjdEV2ZW50VGFyZ2V0cycsIHQgPT4ge1xuICBjb25zdCB0eXBlID0gJ1RFU1QnXG4gIGNvbnN0IFRFU1RfUFJPUCA9IFsnVEVTVF9QUk9QJ11cbiAgY29uc3QgdGFyZ2V0ID0ge1xuICAgIFRFU1RfUFJPUCxcbiAgICBldmVudGFibGU6IG5ldyBFdmVudGFibGUocG9pbnRlckV2ZW50cy5kZWZhdWx0cyksXG4gIH1cbiAgbGV0IGNvbGxlY3RlZFRhcmdldHNcblxuICBmdW5jdGlvbiBvbkNvbGxlY3QgKHsgdGFyZ2V0cyB9KSB7XG4gICAgdGFyZ2V0cy5wdXNoKHRhcmdldClcblxuICAgIGNvbGxlY3RlZFRhcmdldHMgPSB0YXJnZXRzXG4gIH1cblxuICBwb2ludGVyRXZlbnRzLnNpZ25hbHMub24oJ2NvbGxlY3QtdGFyZ2V0cycsIG9uQ29sbGVjdClcbiAgcG9pbnRlckV2ZW50cy5jb2xsZWN0RXZlbnRUYXJnZXRzKHtcbiAgICBpbnRlcmFjdGlvbjogbmV3IEludGVyYWN0aW9uKHsgc2lnbmFsczogaGVscGVycy5tb2NrU2lnbmFscygpIH0gYXMgYW55KSxcbiAgICBwb2ludGVyOiB7fSxcbiAgICBldmVudDoge30sXG4gICAgZXZlbnRUYXJnZXQ6IHt9LFxuICAgIHR5cGUsXG4gIH0gYXMgYW55KVxuXG4gIHQuZGVlcEVxdWFsKGNvbGxlY3RlZFRhcmdldHMsIFt0YXJnZXRdKVxuXG4gIHBvaW50ZXJFdmVudHMuc2lnbmFscy5vZmYoJ2NvbGxlY3QtdGFyZ2V0cycsIG9uQ29sbGVjdClcblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdwb2ludGVyRXZlbnRzIEludGVyYWN0aW9uIHVwZGF0ZS1wb2ludGVyIHNpZ25hbCcsIHQgPT4ge1xuICBjb25zdCBzY29wZSA9IGhlbHBlcnMubW9ja1Njb3BlKClcblxuICBpbnRlcmFjdGlvbnMuaW5zdGFsbChzY29wZSlcbiAgcG9pbnRlckV2ZW50cy5pbnN0YWxsKHNjb3BlKVxuXG4gIGNvbnN0IGludGVyYWN0aW9uID0gc2NvcGUuaW50ZXJhY3Rpb25zLm5ldyh7fSlcbiAgY29uc3QgaW5pdGlhbEhvbGQgPSB7IGR1cmF0aW9uOiBJbmZpbml0eSwgdGltZW91dDogbnVsbCB9XG4gIGNvbnN0IGV2ZW50ID0ge30gYXMgSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZVxuXG4gIGludGVyYWN0aW9uLnVwZGF0ZVBvaW50ZXIoaGVscGVycy5uZXdQb2ludGVyKDApLCBldmVudCwgbnVsbCwgZmFsc2UpXG4gIHQuZGVlcEVxdWFsKGludGVyYWN0aW9uLnBvaW50ZXJzLm1hcChwID0+IHAuaG9sZCksIFtpbml0aWFsSG9sZF0sICdzZXQgaG9sZCBpbmZvIGZvciBtb3ZlIG9uIG5ldyBwb2ludGVyJylcblxuICBpbnRlcmFjdGlvbi5yZW1vdmVQb2ludGVyKGhlbHBlcnMubmV3UG9pbnRlcigwKSwgZXZlbnQpXG5cbiAgaW50ZXJhY3Rpb24udXBkYXRlUG9pbnRlcihoZWxwZXJzLm5ld1BvaW50ZXIoMCksIGV2ZW50LCBudWxsLCB0cnVlKVxuICB0LmRlZXBFcXVhbChpbnRlcmFjdGlvbi5wb2ludGVycy5tYXAocCA9PiBwLmhvbGQpLCBbaW5pdGlhbEhvbGRdKVxuXG4gIGludGVyYWN0aW9uLnVwZGF0ZVBvaW50ZXIoaGVscGVycy5uZXdQb2ludGVyKDUpLCBldmVudCwgbnVsbCwgdHJ1ZSlcbiAgdC5kZWVwRXF1YWwoaW50ZXJhY3Rpb24ucG9pbnRlcnMubWFwKHAgPT4gcC5ob2xkKSwgW2luaXRpYWxIb2xkLCBpbml0aWFsSG9sZF0pXG5cbiAgdC5lbmQoKVxufSlcblxudGVzdCgncG9pbnRlckV2ZW50cyBJbnRlcmFjdGlvbiByZW1vdmUtcG9pbnRlciBzaWduYWwnLCB0ID0+IHtcbiAgY29uc3Qgc2NvcGUgPSBoZWxwZXJzLm1vY2tTY29wZSgpXG5cbiAgaW50ZXJhY3Rpb25zLmluc3RhbGwoc2NvcGUpXG4gIHBvaW50ZXJFdmVudHMuaW5zdGFsbChzY29wZSlcblxuICBjb25zdCBpbnRlcmFjdGlvbiA9IHNjb3BlLmludGVyYWN0aW9ucy5uZXcoe30pXG5cbiAgY29uc3QgaWRzID0gWzAsIDEsIDIsIDNdXG4gIGNvbnN0IHJlbW92YWxzID0gW1xuICAgIHsgaWQ6IDAsIHJlbWFpbjogWzEsIDIsIDNdLCBtZXNzYWdlOiAnZmlyc3Qgb2YgNCcgIH0sXG4gICAgeyBpZDogMiwgcmVtYWluOiBbMSwgICAgM10sIG1lc3NhZ2U6ICdtaWRkbGUgb2YgMycgfSxcbiAgICB7IGlkOiAzLCByZW1haW46IFsxICAgICAgXSwgbWVzc2FnZTogJ2xhc3Qgb2YgMicgICB9LFxuICAgIHsgaWQ6IDEsIHJlbWFpbjogWyAgICAgICBdLCBtZXNzYWdlOiAnZmluYWwnICAgICAgIH0sXG4gIF1cblxuICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuICAgIGNvbnN0IGluZGV4ID0gaW50ZXJhY3Rpb24udXBkYXRlUG9pbnRlcih7IHBvaW50ZXJJZDogaWQgfSBhcyBJbnRlcmFjdC5Qb2ludGVyVHlwZSwge30gYXMgSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZSwgbnVsbCwgdHJ1ZSlcbiAgICAvLyB1c2UgdGhlIGlkcyBhcyB0aGUgcG9pbnRlckluZm8uaG9sZCB2YWx1ZSBmb3IgdGhpcyB0ZXN0XG4gICAgaW50ZXJhY3Rpb24ucG9pbnRlcnNbaW5kZXhdLmhvbGQgPSBpZCBhcyBhbnlcbiAgfVxuXG4gIGZvciAoY29uc3QgcmVtb3ZhbCBvZiByZW1vdmFscykge1xuICAgIGludGVyYWN0aW9uLnJlbW92ZVBvaW50ZXIoeyBwb2ludGVySWQ6IHJlbW92YWwuaWQgfSBhcyBhbnksIG51bGwpXG5cbiAgICB0LmRlZXBFcXVhbChpbnRlcmFjdGlvbi5wb2ludGVycy5tYXAocCA9PiBwLmhvbGQpLCByZW1vdmFsLnJlbWFpbixcbiAgICAgIGAke3JlbW92YWwubWVzc2FnZX0gLSByZW1haW5pbmcgaW50ZXJhY3Rpb24uaG9sZFRpbWVycyBpcyBjb3JyZWN0YClcbiAgfVxuXG4gIHQuZW5kKClcbn0pXG4iXX0= \ No newline at end of file diff --git a/packages/pointer-events/tests/holdRepeat.d.ts b/packages/pointer-events/tests/holdRepeat.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/pointer-events/tests/holdRepeat.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/pointer-events/tests/holdRepeat.js b/packages/pointer-events/tests/holdRepeat.js new file mode 100644 index 000000000..1e55e29c1 --- /dev/null +++ b/packages/pointer-events/tests/holdRepeat.js @@ -0,0 +1,67 @@ +import test from '@interactjs/_dev/test/test'; +import Eventable from '@interactjs/core/Eventable'; +import interactions from '@interactjs/core/interactions'; +import * as helpers from '@interactjs/core/tests/helpers'; +import Signals from '@interactjs/utils/Signals'; +import pointerEvents from '../base'; +import holdRepeat from '../holdRepeat'; +function mockScope() { + return helpers.mockScope({ + pointerEvents: { + defaults: {}, + signals: new Signals(), + types: [], + fire: () => { }, + }, + }); +} +test('holdRepeat count', (t) => { + const scope = mockScope(); + const pointerEvent = { + type: 'hold', + count: 0, + }; + pointerEvents.install(scope); + holdRepeat.install(scope); + scope.pointerEvents.signals.fire('new', { pointerEvent }); + t.equal(pointerEvent.count, 1, 'first hold count is 1 with count previously undefined'); + const count = 20; + pointerEvent.count = count; + scope.pointerEvents.signals.fire('new', { pointerEvent }); + t.equal(pointerEvent.count, count + 1, 'existing hold count is incremented'); + t.end(); +}); +test('holdRepeat onFired', (t) => { + const scope = mockScope(); + interactions.install(scope); + pointerEvents.install(scope); + holdRepeat.install(scope); + const interaction = scope.interactions.new({}); + const pointerEvent = { + type: 'hold', + }; + const eventTarget = {}; + const eventable = new Eventable(Object.assign({}, scope.pointerEvents.defaults, { + holdRepeatInterval: 0, + })); + const signalArg = { + interaction, + pointerEvent, + eventTarget, + targets: [{ + eventable, + }], + }; + scope.pointerEvents.signals.fire('fired', signalArg); + t.notOk('holdIntervalHandle' in interaction, 'interaction interval handle was not saved with 0 holdRepeatInterval'); + eventable.options.holdRepeatInterval = 10; + scope.pointerEvents.signals.fire('fired', signalArg); + t.ok('holdIntervalHandle' in interaction, 'interaction interval handle was saved with interval > 0'); + clearInterval(interaction.holdIntervalHandle); + pointerEvent.type = 'NOT_HOLD'; + delete interaction.holdIntervalHandle; + scope.pointerEvents.signals.fire('fired', signalArg); + t.notOk('holdIntervalHandle' in interaction, 'interaction interval handle is not saved if pointerEvent.type is not "hold"'); + t.end(); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9sZFJlcGVhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhvbGRSZXBlYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sNEJBQTRCLENBQUE7QUFDN0MsT0FBTyxTQUFTLE1BQU0sNEJBQTRCLENBQUE7QUFDbEQsT0FBTyxZQUFZLE1BQU0sK0JBQStCLENBQUE7QUFDeEQsT0FBTyxLQUFLLE9BQU8sTUFBTSxnQ0FBZ0MsQ0FBQTtBQUN6RCxPQUFPLE9BQU8sTUFBTSwyQkFBMkIsQ0FBQTtBQUMvQyxPQUFPLGFBQWEsTUFBTSxTQUFTLENBQUE7QUFDbkMsT0FBTyxVQUFVLE1BQU0sZUFBZSxDQUFBO0FBRXRDLFNBQVMsU0FBUztJQUNoQixPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDdkIsYUFBYSxFQUFFO1lBQ2IsUUFBUSxFQUFFLEVBQUU7WUFDWixPQUFPLEVBQUUsSUFBSSxPQUFPLEVBQUU7WUFDdEIsS0FBSyxFQUFFLEVBQUU7WUFDVCxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztTQUNmO0tBQ0YsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO0lBQzdCLE1BQU0sS0FBSyxHQUFHLFNBQVMsRUFBRSxDQUFBO0lBQ3pCLE1BQU0sWUFBWSxHQUFHO1FBQ25CLElBQUksRUFBRSxNQUFNO1FBQ1osS0FBSyxFQUFFLENBQUM7S0FDVCxDQUFBO0lBRUQsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM1QixVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRXpCLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFBO0lBQ3pELENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsdURBQXVELENBQUMsQ0FBQTtJQUV2RixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUE7SUFDaEIsWUFBWSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDMUIsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUE7SUFDekQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsb0NBQW9DLENBQUMsQ0FBQTtJQUU1RSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7QUFDVCxDQUFDLENBQUMsQ0FBQTtBQUVGLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO0lBQy9CLE1BQU0sS0FBSyxHQUFHLFNBQVMsRUFBRSxDQUFBO0lBQ3pCLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDM0IsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM1QixVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRXpCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQzlDLE1BQU0sWUFBWSxHQUFHO1FBQ25CLElBQUksRUFBRSxNQUFNO0tBQ2IsQ0FBQTtJQUNELE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQTtJQUN0QixNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRTtRQUM5RSxrQkFBa0IsRUFBRSxDQUFDO0tBQ3RCLENBQUMsQ0FBQyxDQUFBO0lBQ0gsTUFBTSxTQUFTLEdBQUc7UUFDaEIsV0FBVztRQUNYLFlBQVk7UUFDWixXQUFXO1FBQ1gsT0FBTyxFQUFFLENBQUM7Z0JBQ1IsU0FBUzthQUNWLENBQUM7S0FDSCxDQUFBO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUNwRCxDQUFDLENBQUMsS0FBSyxDQUFDLG9CQUFvQixJQUFJLFdBQVcsRUFDekMscUVBQXFFLENBQUMsQ0FBQTtJQUV4RSxTQUFTLENBQUMsT0FBTyxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQTtJQUN6QyxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLElBQUksV0FBVyxFQUN0Qyx5REFBeUQsQ0FBQyxDQUFBO0lBRTVELGFBQWEsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUU3QyxZQUFZLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQTtJQUM5QixPQUFPLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQTtJQUNyQyxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQ3BELENBQUMsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLElBQUksV0FBVyxFQUN6Qyw2RUFBNkUsQ0FBQyxDQUFBO0lBRWhGLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgRXZlbnRhYmxlIGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvRXZlbnRhYmxlJ1xuaW1wb3J0IGludGVyYWN0aW9ucyBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL2ludGVyYWN0aW9ucydcbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnQGludGVyYWN0anMvY29yZS90ZXN0cy9oZWxwZXJzJ1xuaW1wb3J0IFNpZ25hbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvU2lnbmFscydcbmltcG9ydCBwb2ludGVyRXZlbnRzIGZyb20gJy4uL2Jhc2UnXG5pbXBvcnQgaG9sZFJlcGVhdCBmcm9tICcuLi9ob2xkUmVwZWF0J1xuXG5mdW5jdGlvbiBtb2NrU2NvcGUgKCkge1xuICByZXR1cm4gaGVscGVycy5tb2NrU2NvcGUoe1xuICAgIHBvaW50ZXJFdmVudHM6IHtcbiAgICAgIGRlZmF1bHRzOiB7fSxcbiAgICAgIHNpZ25hbHM6IG5ldyBTaWduYWxzKCksXG4gICAgICB0eXBlczogW10sXG4gICAgICBmaXJlOiAoKSA9PiB7fSxcbiAgICB9LFxuICB9KVxufVxuXG50ZXN0KCdob2xkUmVwZWF0IGNvdW50JywgKHQpID0+IHtcbiAgY29uc3Qgc2NvcGUgPSBtb2NrU2NvcGUoKVxuICBjb25zdCBwb2ludGVyRXZlbnQgPSB7XG4gICAgdHlwZTogJ2hvbGQnLFxuICAgIGNvdW50OiAwLFxuICB9XG5cbiAgcG9pbnRlckV2ZW50cy5pbnN0YWxsKHNjb3BlKVxuICBob2xkUmVwZWF0Lmluc3RhbGwoc2NvcGUpXG5cbiAgc2NvcGUucG9pbnRlckV2ZW50cy5zaWduYWxzLmZpcmUoJ25ldycsIHsgcG9pbnRlckV2ZW50IH0pXG4gIHQuZXF1YWwocG9pbnRlckV2ZW50LmNvdW50LCAxLCAnZmlyc3QgaG9sZCBjb3VudCBpcyAxIHdpdGggY291bnQgcHJldmlvdXNseSB1bmRlZmluZWQnKVxuXG4gIGNvbnN0IGNvdW50ID0gMjBcbiAgcG9pbnRlckV2ZW50LmNvdW50ID0gY291bnRcbiAgc2NvcGUucG9pbnRlckV2ZW50cy5zaWduYWxzLmZpcmUoJ25ldycsIHsgcG9pbnRlckV2ZW50IH0pXG4gIHQuZXF1YWwocG9pbnRlckV2ZW50LmNvdW50LCBjb3VudCArIDEsICdleGlzdGluZyBob2xkIGNvdW50IGlzIGluY3JlbWVudGVkJylcblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdob2xkUmVwZWF0IG9uRmlyZWQnLCAodCkgPT4ge1xuICBjb25zdCBzY29wZSA9IG1vY2tTY29wZSgpXG4gIGludGVyYWN0aW9ucy5pbnN0YWxsKHNjb3BlKVxuICBwb2ludGVyRXZlbnRzLmluc3RhbGwoc2NvcGUpXG4gIGhvbGRSZXBlYXQuaW5zdGFsbChzY29wZSlcblxuICBjb25zdCBpbnRlcmFjdGlvbiA9IHNjb3BlLmludGVyYWN0aW9ucy5uZXcoe30pXG4gIGNvbnN0IHBvaW50ZXJFdmVudCA9IHtcbiAgICB0eXBlOiAnaG9sZCcsXG4gIH1cbiAgY29uc3QgZXZlbnRUYXJnZXQgPSB7fVxuICBjb25zdCBldmVudGFibGUgPSBuZXcgRXZlbnRhYmxlKE9iamVjdC5hc3NpZ24oe30sIHNjb3BlLnBvaW50ZXJFdmVudHMuZGVmYXVsdHMsIHtcbiAgICBob2xkUmVwZWF0SW50ZXJ2YWw6IDAsXG4gIH0pKVxuICBjb25zdCBzaWduYWxBcmcgPSB7XG4gICAgaW50ZXJhY3Rpb24sXG4gICAgcG9pbnRlckV2ZW50LFxuICAgIGV2ZW50VGFyZ2V0LFxuICAgIHRhcmdldHM6IFt7XG4gICAgICBldmVudGFibGUsXG4gICAgfV0sXG4gIH1cblxuICBzY29wZS5wb2ludGVyRXZlbnRzLnNpZ25hbHMuZmlyZSgnZmlyZWQnLCBzaWduYWxBcmcpXG4gIHQubm90T2soJ2hvbGRJbnRlcnZhbEhhbmRsZScgaW4gaW50ZXJhY3Rpb24sXG4gICAgJ2ludGVyYWN0aW9uIGludGVydmFsIGhhbmRsZSB3YXMgbm90IHNhdmVkIHdpdGggMCBob2xkUmVwZWF0SW50ZXJ2YWwnKVxuXG4gIGV2ZW50YWJsZS5vcHRpb25zLmhvbGRSZXBlYXRJbnRlcnZhbCA9IDEwXG4gIHNjb3BlLnBvaW50ZXJFdmVudHMuc2lnbmFscy5maXJlKCdmaXJlZCcsIHNpZ25hbEFyZylcbiAgdC5vaygnaG9sZEludGVydmFsSGFuZGxlJyBpbiBpbnRlcmFjdGlvbixcbiAgICAnaW50ZXJhY3Rpb24gaW50ZXJ2YWwgaGFuZGxlIHdhcyBzYXZlZCB3aXRoIGludGVydmFsID4gMCcpXG5cbiAgY2xlYXJJbnRlcnZhbChpbnRlcmFjdGlvbi5ob2xkSW50ZXJ2YWxIYW5kbGUpXG5cbiAgcG9pbnRlckV2ZW50LnR5cGUgPSAnTk9UX0hPTEQnXG4gIGRlbGV0ZSBpbnRlcmFjdGlvbi5ob2xkSW50ZXJ2YWxIYW5kbGVcbiAgc2NvcGUucG9pbnRlckV2ZW50cy5zaWduYWxzLmZpcmUoJ2ZpcmVkJywgc2lnbmFsQXJnKVxuICB0Lm5vdE9rKCdob2xkSW50ZXJ2YWxIYW5kbGUnIGluIGludGVyYWN0aW9uLFxuICAgICdpbnRlcmFjdGlvbiBpbnRlcnZhbCBoYW5kbGUgaXMgbm90IHNhdmVkIGlmIHBvaW50ZXJFdmVudC50eXBlIGlzIG5vdCBcImhvbGRcIicpXG5cbiAgdC5lbmQoKVxufSlcbiJdfQ== \ No newline at end of file diff --git a/packages/reflow/index.d.ts b/packages/reflow/index.d.ts index 259333406..417599725 100644 --- a/packages/reflow/index.d.ts +++ b/packages/reflow/index.d.ts @@ -1,9 +1,9 @@ import Interactable from '@interactjs/core/Interactable'; -import { Action } from '@interactjs/core/Interaction'; +import { ActionProps } from '@interactjs/core/Interaction'; import { Scope } from '@interactjs/core/scope'; declare module '@interactjs/core/Interactable' { interface Interactable { - reflow: (action: Action) => ReturnType; + reflow: (action: ActionProps) => ReturnType; } } declare module '@interactjs/core/Interaction' { @@ -12,7 +12,7 @@ declare module '@interactjs/core/Interaction' { } } export declare function install(scope: Scope): void; -declare function reflow(interactable: Interactable, action: Action, scope: Scope): any; +declare function reflow(interactable: Interactable, action: ActionProps, scope: Scope): any; declare const _default: { install: typeof install; }; diff --git a/packages/reflow/index.js b/packages/reflow/index.js index 14c8b4bdc..ffcb9572b 100644 --- a/packages/reflow/index.js +++ b/packages/reflow/index.js @@ -111,4 +111,4 @@ function startReflow(scope, interactable, element, action, event) { return reflowPromise; } export default { install }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFFOUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxZQUFZLEVBQUUsSUFBSSxJQUFJLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQWNwRyxNQUFNLFVBQVUsT0FBTyxDQUFFLEtBQVk7SUFDbkMsTUFBTSxFQUNKLE9BQU8sRUFDUCxZQUFZO0lBQ1osMEJBQTBCO0lBQzFCLHFDQUFxQztJQUNyQyxZQUFZLEdBQ2IsR0FBRyxLQUFLLENBQUE7SUFFVCxnQ0FBZ0M7SUFDaEMsS0FBSyxNQUFNLFVBQVUsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO1FBQ3RDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxRQUFRLENBQUMsQ0FBQTtLQUMvQztJQUVELHVDQUF1QztJQUN2QyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUU7UUFDbEQsSUFBSSxXQUFXLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRTtZQUN4QyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUE7WUFDNUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQTtTQUNqRDtJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUY7Ozs7Ozs7Ozs7Ozs7OztPQWVHO0lBQ0gsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsVUFBVSxNQUFNO1FBQzlDLE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDcEMsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztB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Q0FBQTtBQUN0QixDQUFDO0FBRUQsZUFBZSxFQUFFLE9BQU8sRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEludGVyYWN0YWJsZSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0YWJsZSdcbmltcG9ydCB7IEFjdGlvbiwgSW50ZXJhY3Rpb24gfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0aW9uJ1xuaW1wb3J0IHsgbmV3SW50ZXJhY3Rpb24gfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL2ludGVyYWN0aW9ucydcbmltcG9ydCB7IFNjb3BlIH0gZnJvbSAnQGludGVyYWN0anMvY29yZS9zY29wZSdcbmltcG9ydCB7IGFyciwgZXh0ZW5kLCBpcywgcG9pbnRlciBhcyBwb2ludGVyVXRpbHMsIHJlY3QgYXMgcmVjdFV0aWxzLCB3aW4gfSBmcm9tICdAaW50ZXJhY3Rqcy91dGlscydcblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3RhYmxlJyB7XG4gIGludGVyZmFjZSBJbnRlcmFjdGFibGUge1xuICAgIHJlZmxvdzogKGFjdGlvbjogQWN0aW9uKSA9PiBSZXR1cm5UeXBlPHR5cGVvZiByZWZsb3c+XG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3Rpb24nIHtcbiAgaW50ZXJmYWNlIEludGVyYWN0aW9uIHtcbiAgICBfcmVmbG93UmVzb2x2ZTogKCkgPT4gdm9pZFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsIChzY29wZTogU2NvcGUpIHtcbiAgY29uc3Qge1xuICAgIGFjdGlvbnMsXG4gICAgaW50ZXJhY3Rpb25zLFxuICAgIC8qKiBAbGVuZHMgSW50ZXJhY3RhYmxlICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvd1xuICAgIEludGVyYWN0YWJsZSxcbiAgfSA9IHNjb3BlXG5cbiAgLy8gYWRkIGFjdGlvbiByZWZsb3cgZXZlbnQgdHlwZXNcbiAgZm9yIChjb25zdCBhY3Rpb25OYW1lIG9mIGFjdGlvbnMubmFtZXMpIHtcbiAgICBhY3Rpb25zLmV2ZW50VHlwZXMucHVzaChgJHthY3Rpb25OYW1lfXJlZmxvd2ApXG4gIH1cblxuICAvLyByZW1vdmUgY29tcGxldGVkIHJlZmxvdyBpbnRlcmFjdGlvbnNcbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ3N0b3AnLCAoeyBpbnRlcmFjdGlvbiB9KSA9PiB7XG4gICAgaWYgKGludGVyYWN0aW9uLnBvaW50ZXJUeXBlID09PSAncmVmbG93Jykge1xuICAgICAgaW50ZXJhY3Rpb24uX3JlZmxvd1Jlc29sdmUoKVxuICAgICAgYXJyLnJlbW92ZShzY29wZS5pbnRlcmFjdGlvbnMubGlzdCwgaW50ZXJhY3Rpb24pXG4gICAgfVxuICB9KVxuXG4gIC8qKlxuICAgKiBgYGBqc1xuICAgKiBjb25zdCBpbnRlcmFjdGFibGUgPSBpbnRlcmFjdCh0YXJnZXQpO1xuICAgKiBjb25zdCBkcmFnID0geyBuYW1lOiBkcmFnLCBheGlzOiAneCcgfTtcbiAgICogY29uc3QgcmVzaXplID0geyBuYW1lOiByZXNpemUsIGVkZ2VzOiB7IGxlZnQ6IHRydWUsIGJvdHRvbTogdHJ1ZSB9O1xuICAgKlxuICAgKiBpbnRlcmFjdGFibGUucmVmbG93KGRyYWcpO1xuICAgKiBpbnRlcmFjdGFibGUucmVmbG93KHJlc2l6ZSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBTdGFydCBhbiBhY3Rpb24gc2VxdWVuY2UgdG8gcmUtYXBwbHkgbW9kaWZpZXJzLCBjaGVjayBkcm9wcywgZXRjLlxuICAgKlxuICAgKiBAcGFyYW0geyBPYmplY3QgfSBhY3Rpb24gVGhlIGFjdGlvbiB0byBiZWdpblxuICAgKiBAcGFyYW0geyBzdHJpbmcgfSBhY3Rpb24ubmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gICAqIEByZXR1cm5zIHsgUHJvbWlzZTxJbnRlcmFjdGFibGU+IH1cbiAgICovXG4gIEludGVyYWN0YWJsZS5wcm90b3R5cGUucmVmbG93ID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgIHJldHVybiByZWZsb3codGhpcywgYWN0aW9uLCBzY29wZSlcbiAgfVxufVxuXG5mdW5jdGlvbiByZWZsb3cgKGludGVyYWN0YWJsZTogSW50ZXJhY3RhYmxlLCBhY3Rpb246IEFjdGlvbiwgc2NvcGU6IFNjb3BlKSB7XG4gIGNvbnN0IGVsZW1lbnRzID0gaXMuc3RyaW5nKGludGVyYWN0YWJsZS50YXJnZXQpXG4gICAgPyBhcnIuZnJvbShpbnRlcmFjdGFibGUuX2NvbnRleHQucXVlcnlTZWxlY3RvckFsbChpbnRlcmFjdGFibGUudGFyZ2V0KSlcbiAgICA6IFtpbnRlcmFjdGFibGUudGFyZ2V0XVxuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSB2YXJpYWJsZS1uYW1lXG4gIGNvbnN0IFByb21pc2UgPSAod2luLndpbmRvdyBhcyBhbnkpLlByb21pc2VcbiAgY29uc3QgcHJvbWlzZXM6IEFycmF5PFByb21pc2U8bnVsbD4+IHwgbnVsbCA9IFByb21pc2UgPyBbXSA6IG51bGxcblxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICBjb25zdCByZWN0ID0gaW50ZXJhY3RhYmxlLmdldFJlY3QoZWxlbWVudClcblxuICAgIGlmICghcmVjdCkgeyBicmVhayB9XG5cbiAgICBjb25zdCBydW5uaW5nSW50ZXJhY3Rpb24gPSBhcnIuZmluZChcbiAgICAgIHNjb3BlLmludGVyYWN0aW9ucy5saXN0LFxuICAgICAgKGludGVyYWN0aW9uOiBJbnRlcmFjdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gaW50ZXJhY3Rpb24uaW50ZXJhY3RpbmcoKSAmJlxuICAgICAgICAgIGludGVyYWN0aW9uLnRhcmdldCA9PT0gaW50ZXJhY3RhYmxlICYmXG4gICAgICAgICAgaW50ZXJhY3Rpb24uZWxlbWVudCA9PT0gZWxlbWVudCAmJlxuICAgICAgICAgIGludGVyYWN0aW9uLnByZXBhcmVkLm5hbWUgPT09IGFjdGlvbi5uYW1lXG4gICAgICB9KVxuICAgIGxldCByZWZsb3dQcm9taXNlOiBQcm9taXNlPG51bGw+XG5cbiAgICBpZiAocnVubmluZ0ludGVyYWN0aW9uKSB7XG4gICAgICBydW5uaW5nSW50ZXJhY3Rpb24ubW92ZSgpXG5cbiAgICAgIHJlZmxvd1Byb21pc2UgPSBydW5uaW5nSW50ZXJhY3Rpb24uX3JlZmxvd1Byb21pc2UgfHwgbmV3IFByb21pc2UoKHJlc29sdmU6IGFueSkgPT4ge1xuICAgICAgICBydW5uaW5nSW50ZXJhY3Rpb24uX3JlZmxvd1Jlc29sdmUgPSByZXNvbHZlXG4gICAgICB9KVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IHh5d2ggPSByZWN0VXRpbHMudGxiclRvWHl3aChyZWN0KVxuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICBwYWdlICAgICA6IHsgeDogeHl3aC54LCB5OiB4eXdoLnkgfSxcbiAgICAgICAgY2xpZW50ICAgOiB7IHg6IHh5d2gueCwgeTogeHl3aC55IH0sXG4gICAgICAgIHRpbWVTdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXZlbnQgPSBwb2ludGVyVXRpbHMuY29vcmRzVG9FdmVudChjb29yZHMpXG4gICAgICByZWZsb3dQcm9taXNlID0gc3RhcnRSZWZsb3coc2NvcGUsIGludGVyYWN0YWJsZSwgZWxlbWVudCwgYWN0aW9uLCBldmVudClcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZXMpIHtcbiAgICAgIHByb21pc2VzLnB1c2gocmVmbG93UHJvbWlzZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZXMgJiYgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4gaW50ZXJhY3RhYmxlKVxufVxuXG5mdW5jdGlvbiBzdGFydFJlZmxvdyAoc2NvcGU6IFNjb3BlLCBpbnRlcmFjdGFibGU6IEludGVyYWN0YWJsZSwgZWxlbWVudDogRWxlbWVudCwgYWN0aW9uOiBBY3Rpb24sIGV2ZW50OiBhbnkpIHtcbiAgY29uc3QgaW50ZXJhY3Rpb24gPSBuZXdJbnRlcmFjdGlvbih7IHBvaW50ZXJUeXBlOiAncmVmbG93JyB9LCBzY29wZSlcbiAgY29uc3Qgc2lnbmFsQXJnID0ge1xuICAgIGludGVyYWN0aW9uLFxuICAgIGV2ZW50LFxuICAgIHBvaW50ZXI6IGV2ZW50LFxuICAgIGV2ZW50VGFyZ2V0OiBlbGVtZW50LFxuICAgIHBoYXNlOiAncmVmbG93JyxcbiAgfVxuXG4gIGludGVyYWN0aW9uLnRhcmdldCA9IGludGVyYWN0YWJsZVxuICBpbnRlcmFjdGlvbi5lbGVtZW50ID0gZWxlbWVudFxuICBpbnRlcmFjdGlvbi5wcmVwYXJlZCA9IGV4dGVuZCh7fSwgYWN0aW9uKVxuICBpbnRlcmFjdGlvbi5wcmV2RXZlbnQgPSBldmVudFxuICBpbnRlcmFjdGlvbi51cGRhdGVQb2ludGVyKGV2ZW50LCBldmVudCwgZWxlbWVudCwgdHJ1ZSlcblxuICBpbnRlcmFjdGlvbi5fZG9QaGFzZShzaWduYWxBcmcpXG5cbiAgY29uc3QgcmVmbG93UHJvbWlzZSA9ICh3aW4ud2luZG93IGFzIHVua25vd24gYXMgYW55KS5Qcm9taXNlXG4gICAgPyBuZXcgKHdpbi53aW5kb3cgYXMgdW5rbm93biBhcyBhbnkpLlByb21pc2UoKHJlc29sdmU6IGFueSkgPT4ge1xuICAgICAgaW50ZXJhY3Rpb24uX3JlZmxvd1Jlc29sdmUgPSByZXNvbHZlXG4gICAgfSlcbiAgICA6IG51bGxcblxuICBpbnRlcmFjdGlvbi5fcmVmbG93UHJvbWlzZSA9IHJlZmxvd1Byb21pc2VcbiAgaW50ZXJhY3Rpb24uc3RhcnQoYWN0aW9uLCBpbnRlcmFjdGFibGUsIGVsZW1lbnQpXG5cbiAgaWYgKGludGVyYWN0aW9uLl9pbnRlcmFjdGluZykge1xuICAgIGludGVyYWN0aW9uLm1vdmUoc2lnbmFsQXJnKVxuICAgIGludGVyYWN0aW9uLmVuZChldmVudClcbiAgfVxuICBlbHNlIHtcbiAgICBpbnRlcmFjdGlvbi5zdG9wKClcbiAgfVxuXG4gIGludGVyYWN0aW9uLnJlbW92ZVBvaW50ZXIoZXZlbnQsIGV2ZW50KVxuICBpbnRlcmFjdGlvbi5wb2ludGVySXNEb3duID0gZmFsc2VcblxuICByZXR1cm4gcmVmbG93UHJvbWlzZVxufVxuXG5leHBvcnQgZGVmYXVsdCB7IGluc3RhbGwgfVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFFOUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxZQUFZLEVBQUUsSUFBSSxJQUFJLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQWNwRyxNQUFNLFVBQVUsT0FBTyxDQUFFLEtBQVk7SUFDbkMsTUFBTSxFQUNKLE9BQU8sRUFDUCxZQUFZO0lBQ1osMEJBQTBCO0lBQzFCLHFDQUFxQztJQUNyQyxZQUFZLEdBQ2IsR0FBRyxLQUFLLENBQUE7SUFFVCxnQ0FBZ0M7SUFDaEMsS0FBSyxNQUFNLFVBQVUsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO1FBQ3RDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxRQUFRLENBQUMsQ0FBQTtLQUMvQztJQUVELHVDQUF1QztJQUN2QyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUU7UUFDbEQsSUFBSSxXQUFXLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRTtZQUN4QyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUE7WUFDNUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQTtTQUNqRDtJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUY7Ozs7Ozs7Ozs7Ozs7OztPQWVHO0lBQ0gsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsVUFBVSxNQUFNO1FBQzlDLE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDcEMsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztB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YSxDQUFBO0FBQ3RCLENBQUM7QUFFRCxlQUFlLEVBQUUsT0FBTyxFQUFFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSW50ZXJhY3RhYmxlIGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3RhYmxlJ1xuaW1wb3J0IHsgQWN0aW9uUHJvcHMsIEludGVyYWN0aW9uIH0gZnJvbSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbidcbmltcG9ydCB7IG5ld0ludGVyYWN0aW9uIH0gZnJvbSAnQGludGVyYWN0anMvY29yZS9pbnRlcmFjdGlvbnMnXG5pbXBvcnQgeyBTY29wZSB9IGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvc2NvcGUnXG5pbXBvcnQgeyBhcnIsIGV4dGVuZCwgaXMsIHBvaW50ZXIgYXMgcG9pbnRlclV0aWxzLCByZWN0IGFzIHJlY3RVdGlscywgd2luIH0gZnJvbSAnQGludGVyYWN0anMvdXRpbHMnXG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0YWJsZScge1xuICBpbnRlcmZhY2UgSW50ZXJhY3RhYmxlIHtcbiAgICByZWZsb3c6IChhY3Rpb246IEFjdGlvblByb3BzKSA9PiBSZXR1cm5UeXBlPHR5cGVvZiByZWZsb3c+XG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3Rpb24nIHtcbiAgaW50ZXJmYWNlIEludGVyYWN0aW9uIHtcbiAgICBfcmVmbG93UmVzb2x2ZTogKCkgPT4gdm9pZFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsIChzY29wZTogU2NvcGUpIHtcbiAgY29uc3Qge1xuICAgIGFjdGlvbnMsXG4gICAgaW50ZXJhY3Rpb25zLFxuICAgIC8qKiBAbGVuZHMgSW50ZXJhY3RhYmxlICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvd1xuICAgIEludGVyYWN0YWJsZSxcbiAgfSA9IHNjb3BlXG5cbiAgLy8gYWRkIGFjdGlvbiByZWZsb3cgZXZlbnQgdHlwZXNcbiAgZm9yIChjb25zdCBhY3Rpb25OYW1lIG9mIGFjdGlvbnMubmFtZXMpIHtcbiAgICBhY3Rpb25zLmV2ZW50VHlwZXMucHVzaChgJHthY3Rpb25OYW1lfXJlZmxvd2ApXG4gIH1cblxuICAvLyByZW1vdmUgY29tcGxldGVkIHJlZmxvdyBpbnRlcmFjdGlvbnNcbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ3N0b3AnLCAoeyBpbnRlcmFjdGlvbiB9KSA9PiB7XG4gICAgaWYgKGludGVyYWN0aW9uLnBvaW50ZXJUeXBlID09PSAncmVmbG93Jykge1xuICAgICAgaW50ZXJhY3Rpb24uX3JlZmxvd1Jlc29sdmUoKVxuICAgICAgYXJyLnJlbW92ZShzY29wZS5pbnRlcmFjdGlvbnMubGlzdCwgaW50ZXJhY3Rpb24pXG4gICAgfVxuICB9KVxuXG4gIC8qKlxuICAgKiBgYGBqc1xuICAgKiBjb25zdCBpbnRlcmFjdGFibGUgPSBpbnRlcmFjdCh0YXJnZXQpO1xuICAgKiBjb25zdCBkcmFnID0geyBuYW1lOiBkcmFnLCBheGlzOiAneCcgfTtcbiAgICogY29uc3QgcmVzaXplID0geyBuYW1lOiByZXNpemUsIGVkZ2VzOiB7IGxlZnQ6IHRydWUsIGJvdHRvbTogdHJ1ZSB9O1xuICAgKlxuICAgKiBpbnRlcmFjdGFibGUucmVmbG93KGRyYWcpO1xuICAgKiBpbnRlcmFjdGFibGUucmVmbG93KHJlc2l6ZSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBTdGFydCBhbiBhY3Rpb24gc2VxdWVuY2UgdG8gcmUtYXBwbHkgbW9kaWZpZXJzLCBjaGVjayBkcm9wcywgZXRjLlxuICAgKlxuICAgKiBAcGFyYW0geyBPYmplY3QgfSBhY3Rpb24gVGhlIGFjdGlvbiB0byBiZWdpblxuICAgKiBAcGFyYW0geyBzdHJpbmcgfSBhY3Rpb24ubmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gICAqIEByZXR1cm5zIHsgUHJvbWlzZTxJbnRlcmFjdGFibGU+IH1cbiAgICovXG4gIEludGVyYWN0YWJsZS5wcm90b3R5cGUucmVmbG93ID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgIHJldHVybiByZWZsb3codGhpcywgYWN0aW9uLCBzY29wZSlcbiAgfVxufVxuXG5mdW5jdGlvbiByZWZsb3cgKGludGVyYWN0YWJsZTogSW50ZXJhY3RhYmxlLCBhY3Rpb246IEFjdGlvblByb3BzLCBzY29wZTogU2NvcGUpIHtcbiAgY29uc3QgZWxlbWVudHMgPSBpcy5zdHJpbmcoaW50ZXJhY3RhYmxlLnRhcmdldClcbiAgICA/IGFyci5mcm9tKGludGVyYWN0YWJsZS5fY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKGludGVyYWN0YWJsZS50YXJnZXQpKVxuICAgIDogW2ludGVyYWN0YWJsZS50YXJnZXRdXG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIHZhcmlhYmxlLW5hbWVcbiAgY29uc3QgUHJvbWlzZSA9ICh3aW4ud2luZG93IGFzIGFueSkuUHJvbWlzZVxuICBjb25zdCBwcm9taXNlczogQXJyYXk8UHJvbWlzZTxudWxsPj4gfCBudWxsID0gUHJvbWlzZSA/IFtdIDogbnVsbFxuXG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgIGNvbnN0IHJlY3QgPSBpbnRlcmFjdGFibGUuZ2V0UmVjdChlbGVtZW50KVxuXG4gICAgaWYgKCFyZWN0KSB7IGJyZWFrIH1cblxuICAgIGNvbnN0IHJ1bm5pbmdJbnRlcmFjdGlvbiA9IGFyci5maW5kKFxuICAgICAgc2NvcGUuaW50ZXJhY3Rpb25zLmxpc3QsXG4gICAgICAoaW50ZXJhY3Rpb246IEludGVyYWN0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiBpbnRlcmFjdGlvbi5pbnRlcmFjdGluZygpICYmXG4gICAgICAgICAgaW50ZXJhY3Rpb24udGFyZ2V0ID09PSBpbnRlcmFjdGFibGUgJiZcbiAgICAgICAgICBpbnRlcmFjdGlvbi5lbGVtZW50ID09PSBlbGVtZW50ICYmXG4gICAgICAgICAgaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSA9PT0gYWN0aW9uLm5hbWVcbiAgICAgIH0pXG4gICAgbGV0IHJlZmxvd1Byb21pc2U6IFByb21pc2U8bnVsbD5cblxuICAgIGlmIChydW5uaW5nSW50ZXJhY3Rpb24pIHtcbiAgICAgIHJ1bm5pbmdJbnRlcmFjdGlvbi5tb3ZlKClcblxuICAgICAgcmVmbG93UHJvbWlzZSA9IHJ1bm5pbmdJbnRlcmFjdGlvbi5fcmVmbG93UHJvbWlzZSB8fCBuZXcgUHJvbWlzZSgocmVzb2x2ZTogYW55KSA9PiB7XG4gICAgICAgIHJ1bm5pbmdJbnRlcmFjdGlvbi5fcmVmbG93UmVzb2x2ZSA9IHJlc29sdmVcbiAgICAgIH0pXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgeHl3aCA9IHJlY3RVdGlscy50bGJyVG9YeXdoKHJlY3QpXG4gICAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgIHBhZ2UgICAgIDogeyB4OiB4eXdoLngsIHk6IHh5d2gueSB9LFxuICAgICAgICBjbGllbnQgICA6IHsgeDogeHl3aC54LCB5OiB4eXdoLnkgfSxcbiAgICAgICAgdGltZVN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgfVxuXG4gICAgICBjb25zdCBldmVudCA9IHBvaW50ZXJVdGlscy5jb29yZHNUb0V2ZW50KGNvb3JkcylcbiAgICAgIHJlZmxvd1Byb21pc2UgPSBzdGFydFJlZmxvdyhzY29wZSwgaW50ZXJhY3RhYmxlLCBlbGVtZW50LCBhY3Rpb24sIGV2ZW50KVxuICAgIH1cblxuICAgIGlmIChwcm9taXNlcykge1xuICAgICAgcHJvbWlzZXMucHVzaChyZWZsb3dQcm9taXNlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcm9taXNlcyAmJiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiBpbnRlcmFjdGFibGUpXG59XG5cbmZ1bmN0aW9uIHN0YXJ0UmVmbG93IChzY29wZTogU2NvcGUsIGludGVyYWN0YWJsZTogSW50ZXJhY3RhYmxlLCBlbGVtZW50OiBFbGVtZW50LCBhY3Rpb246IEFjdGlvblByb3BzLCBldmVudDogYW55KSB7XG4gIGNvbnN0IGludGVyYWN0aW9uID0gbmV3SW50ZXJhY3Rpb24oeyBwb2ludGVyVHlwZTogJ3JlZmxvdycgfSwgc2NvcGUpXG4gIGNvbnN0IHNpZ25hbEFyZyA9IHtcbiAgICBpbnRlcmFjdGlvbixcbiAgICBldmVudCxcbiAgICBwb2ludGVyOiBldmVudCxcbiAgICBldmVudFRhcmdldDogZWxlbWVudCxcbiAgICBwaGFzZTogJ3JlZmxvdycsXG4gIH1cblxuICBpbnRlcmFjdGlvbi50YXJnZXQgPSBpbnRlcmFjdGFibGVcbiAgaW50ZXJhY3Rpb24uZWxlbWVudCA9IGVsZW1lbnRcbiAgaW50ZXJhY3Rpb24ucHJlcGFyZWQgPSBleHRlbmQoe30sIGFjdGlvbilcbiAgaW50ZXJhY3Rpb24ucHJldkV2ZW50ID0gZXZlbnRcbiAgaW50ZXJhY3Rpb24udXBkYXRlUG9pbnRlcihldmVudCwgZXZlbnQsIGVsZW1lbnQsIHRydWUpXG5cbiAgaW50ZXJhY3Rpb24uX2RvUGhhc2Uoc2lnbmFsQXJnKVxuXG4gIGNvbnN0IHJlZmxvd1Byb21pc2UgPSAod2luLndpbmRvdyBhcyB1bmtub3duIGFzIGFueSkuUHJvbWlzZVxuICAgID8gbmV3ICh3aW4ud2luZG93IGFzIHVua25vd24gYXMgYW55KS5Qcm9taXNlKChyZXNvbHZlOiBhbnkpID0+IHtcbiAgICAgIGludGVyYWN0aW9uLl9yZWZsb3dSZXNvbHZlID0gcmVzb2x2ZVxuICAgIH0pXG4gICAgOiBudWxsXG5cbiAgaW50ZXJhY3Rpb24uX3JlZmxvd1Byb21pc2UgPSByZWZsb3dQcm9taXNlXG4gIGludGVyYWN0aW9uLnN0YXJ0KGFjdGlvbiwgaW50ZXJhY3RhYmxlLCBlbGVtZW50KVxuXG4gIGlmIChpbnRlcmFjdGlvbi5faW50ZXJhY3RpbmcpIHtcbiAgICBpbnRlcmFjdGlvbi5tb3ZlKHNpZ25hbEFyZylcbiAgICBpbnRlcmFjdGlvbi5lbmQoZXZlbnQpXG4gIH1cbiAgZWxzZSB7XG4gICAgaW50ZXJhY3Rpb24uc3RvcCgpXG4gIH1cblxuICBpbnRlcmFjdGlvbi5yZW1vdmVQb2ludGVyKGV2ZW50LCBldmVudClcbiAgaW50ZXJhY3Rpb24ucG9pbnRlcklzRG93biA9IGZhbHNlXG5cbiAgcmV0dXJuIHJlZmxvd1Byb21pc2Vcbn1cblxuZXhwb3J0IGRlZmF1bHQgeyBpbnN0YWxsIH1cbiJdfQ== \ No newline at end of file diff --git a/packages/reflow/package.json b/packages/reflow/package.json index ef6d4e024..bed82ee44 100644 --- a/packages/reflow/package.json +++ b/packages/reflow/package.json @@ -1,14 +1,14 @@ { "name": "@interactjs/reflow", - "version": "1.4.0-alpha.27+sha.12b8f8f", + "version": "1.4.0-alpha.28+sha.e624c4d", "peerDependencies": { - "@interactjs/core": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/utils": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/core": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/utils": "1.4.0-alpha.28+sha.e624c4d" }, "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/core": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/utils": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/_dev": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/core": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/utils": "1.4.0-alpha.28+sha.e624c4d" }, "publishConfig": { "access": "public" diff --git a/packages/reflow/tests/index.d.ts b/packages/reflow/tests/index.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/reflow/tests/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/reflow/tests/index.js b/packages/reflow/tests/index.js new file mode 100644 index 000000000..d21956f85 --- /dev/null +++ b/packages/reflow/tests/index.js @@ -0,0 +1,70 @@ +import interactions from '@interactjs/core/interactions'; +import * as helpers from '@interactjs/core/tests/helpers'; +import win from '@interactjs/utils/window'; +import test from '@interactjs/_dev/test/test'; +import reflow from '../'; +test('reflow', t => { + const scope = helpers.mockScope(); + interactions.install(scope); + Object.assign(scope.actions, { test: {}, names: ['test'] }); + reflow.install(scope); + t.ok(scope.Interactable.prototype.reflow instanceof Function, 'reflow method is added to Interactable.prototype'); + const fired = []; + const interactable = scope.interactables.new(win.window); + const rect = Object.freeze({ top: 100, left: 200, bottom: 300, right: 400 }); + interactable.fire = (iEvent => { fired.push(iEvent); }); + interactable.target = {}; + interactable.options.test = {}; + interactable.rectChecker(() => ({ ...rect })); + // modify move coords + scope.interactions.signals.on('before-action-move', ({ interaction }) => { + interaction.coords.cur.page = { + x: rect.left + 100, + y: rect.top - 50, + }; + }); + interactable.reflow({ name: 'test' }); + const phases = ['reflow', 'start', 'move', 'end']; + for (const index in phases) { + const phase = phases[index]; + t.equal(fired[index].type, `test${phase}`, `event #${index} is ${phase}`); + } + const interaction = fired[0].interaction; + t.deepEqual(interaction.coords.start.page, { + x: rect.left, + y: rect.top, + }, 'uses element top left for event coords'); + const reflowMove = fired[2]; + t.deepEqual(reflowMove.delta, { x: 100, y: -50 }, 'move delta is correct with modified interaction coords'); + t.notOk(interaction.pointerIsDown, 'reflow pointer was lifted'); + t.equal(interaction.pointers.length, 0, 'reflow pointer was removed from interaction'); + t.notOk(scope.interactions.list.includes(interaction), 'interaction is removed from list'); + t.end(); +}); +test('async reflow', async (t) => { + const scope = helpers.mockScope(); + interactions.install(scope); + Object.assign(scope.actions, { test: {}, names: ['test'] }); + let reflowEvent; + let promise; + const interactable = scope.interactables.new(win.window); + const rect = Object.freeze({ top: 100, left: 200, bottom: 300, right: 400 }); + interactable.rectChecker(() => ({ ...rect })); + interactable.fire = (iEvent => { reflowEvent = iEvent; }); + reflow.install(scope); + promise = interactable.reflow({ name: 'test' }); + t.ok(promise instanceof win.window.Promise, 'method returns a Promise'); + t.notOk(reflowEvent.interaction.interacting(), 'reflow may end synchronously'); + t.equal(await promise, interactable, 'returned Promise resolves to interactable'); + // block the end of the reflow interaction and stop it after a timeout + scope.interactions.signals.on('before-action-end', ({ interaction }) => { + setTimeout(() => interaction.stop(), 0); + return false; + }); + promise = interactable.reflow({ name: 'test' }); + t.ok(reflowEvent.interaction.interacting(), 'interaction continues if end is blocked'); + await promise; + t.notOk(reflowEvent.interaction.interacting(), 'interaction is stopped after promise is resolved'); + t.end(); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFlBQVksTUFBTSwrQkFBK0IsQ0FBQTtBQUN4RCxPQUFPLEtBQUssT0FBTyxNQUFNLGdDQUFnQyxDQUFBO0FBQ3pELE9BQU8sR0FBRyxNQUFNLDBCQUEwQixDQUFBO0FBQzFDLE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sTUFBTSxNQUFNLEtBQUssQ0FBQTtBQUV4QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ2pCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUVqQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRTNCLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBRTNELE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFckIsQ0FBQyxDQUFDLEVBQUUsQ0FDRixLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLFlBQVksUUFBUSxFQUN2RCxrREFBa0QsQ0FDbkQsQ0FBQTtJQUVELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQTtJQUNoQixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDeEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFBO0lBRTVFLFlBQVksQ0FBQyxJQUFJLEdB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QUN2QyxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUMsQ0FBQyxDQUFBO0lBRUYsT0FBTyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTtJQUUvQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUUseUNBQXlDLENBQUMsQ0FBQTtJQUN0RixNQUFNLE9BQU8sQ0FBQTtJQUNiLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxrREFBa0QsQ0FBQyxDQUFBO0lBRWxHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGludGVyYWN0aW9ucyBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL2ludGVyYWN0aW9ucydcbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnQGludGVyYWN0anMvY29yZS90ZXN0cy9oZWxwZXJzJ1xuaW1wb3J0IHdpbiBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy93aW5kb3cnXG5pbXBvcnQgdGVzdCBmcm9tICdAaW50ZXJhY3Rqcy9fZGV2L3Rlc3QvdGVzdCdcbmltcG9ydCByZWZsb3cgZnJvbSAnLi4vJ1xuXG50ZXN0KCdyZWZsb3cnLCB0ID0+IHtcbiAgY29uc3Qgc2NvcGUgPSBoZWxwZXJzLm1vY2tTY29wZSgpXG5cbiAgaW50ZXJhY3Rpb25zLmluc3RhbGwoc2NvcGUpXG5cbiAgT2JqZWN0LmFzc2lnbihzY29wZS5hY3Rpb25zLCB7IHRlc3Q6IHt9LCBuYW1lczogWyd0ZXN0J10gfSlcblxuICByZWZsb3cuaW5zdGFsbChzY29wZSlcblxuICB0Lm9rKFxuICAgIHNjb3BlLkludGVyYWN0YWJsZS5wcm90b3R5cGUucmVmbG93IGluc3RhbmNlb2YgRnVuY3Rpb24sXG4gICAgJ3JlZmxvdyBtZXRob2QgaXMgYWRkZWQgdG8gSW50ZXJhY3RhYmxlLnByb3RvdHlwZSdcbiAgKVxuXG4gIGNvbnN0IGZpcmVkID0gW11cbiAgY29uc3QgaW50ZXJhY3RhYmxlID0gc2NvcGUuaW50ZXJhY3RhYmxlcy5uZXcod2luLndpbmRvdylcbiAgY29uc3QgcmVjdCA9IE9iamVjdC5mcmVlemUoeyB0b3A6IDEwMCwgbGVmdDogMjAwLCBib3R0b206IDMwMCwgcmlnaHQ6IDQwMCB9KVxuXG4gIGludGVyYWN0YWJsZS5maXJlID0gKGlFdmVudCA9PiB7IGZpcmVkLnB1c2goaUV2ZW50KSB9KSBhcyBhbnlcbiAgKGludGVyYWN0YWJsZS50YXJnZXQgYXMgYW55KSA9IHt9XG4gIGludGVyYWN0YWJsZS5vcHRpb25zLnRlc3QgPSB7fVxuICBpbnRlcmFjdGFibGUucmVjdENoZWNrZXIoKCkgPT4gKHsgLi4ucmVjdCB9KSlcblxuICAvLyBtb2RpZnkgbW92ZSBjb29yZHNcbiAgc2NvcGUuaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2JlZm9yZS1hY3Rpb24tbW92ZScsICh7IGludGVyYWN0aW9uIH0pID0+IHtcbiAgICBpbnRlcmFjdGlvbi5jb29yZHMuY3VyLnBhZ2UgPSB7XG4gICAgICB4OiByZWN0LmxlZnQgKyAxMDAsXG4gICAgICB5OiByZWN0LnRvcCAtIDUwLFxuICAgIH1cbiAgfSlcblxuICBpbnRlcmFjdGFibGUucmVmbG93KHsgbmFtZTogJ3Rlc3QnIH0pXG5cbiAgY29uc3QgcGhhc2VzID0gWydyZWZsb3cnLCAnc3RhcnQnLCAnbW92ZScsICdlbmQnXVxuXG4gIGZvciAoY29uc3QgaW5kZXggaW4gcGhhc2VzKSB7XG4gICAgY29uc3QgcGhhc2UgPSBwaGFzZXNbaW5kZXhdXG4gICAgdC5lcXVhbChmaXJlZFtpbmRleF0udHlwZSwgYHRlc3Qke3BoYXNlfWAsIGBldmVudCAjJHtpbmRleH0gaXMgJHtwaGFzZX1gKVxuICB9XG5cbiAgY29uc3QgaW50ZXJhY3Rpb24gPSBmaXJlZFswXS5pbnRlcmFjdGlvblxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGludGVyYWN0aW9uLmNvb3Jkcy5zdGFydC5wYWdlLFxuICAgIHtcbiAgICAgIHg6IHJlY3QubGVmdCxcbiAgICAgIHk6IHJlY3QudG9wLFxuICAgIH0sXG4gICAgJ3VzZXMgZWxlbWVudCB0b3AgbGVmdCBmb3IgZXZlbnQgY29vcmRzJ1xuICApXG5cbiAgY29uc3QgcmVmbG93TW92ZSA9IGZpcmVkWzJdXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgcmVmbG93TW92ZS5kZWx0YSxcbiAgICB7IHg6IDEwMCwgeTogLTUwIH0sXG4gICAgJ21vdmUgZGVsdGEgaXMgY29ycmVjdCB3aXRoIG1vZGlmaWVkIGludGVyYWN0aW9uIGNvb3JkcydcbiAgKVxuXG4gIHQubm90T2soXG4gICAgaW50ZXJhY3Rpb24ucG9pbnRlcklzRG93bixcbiAgICAncmVmbG93IHBvaW50ZXIgd2FzIGxpZnRlZCdcbiAgKVxuXG4gIHQuZXF1YWwoXG4gICAgaW50ZXJhY3Rpb24ucG9pbnRlcnMubGVuZ3RoLFxuICAgIDAsXG4gICAgJ3JlZmxvdyBwb2ludGVyIHdhcyByZW1vdmVkIGZyb20gaW50ZXJhY3Rpb24nXG4gIClcblxuICB0Lm5vdE9rKFxuICAgIHNjb3BlLmludGVyYWN0aW9ucy5saXN0LmluY2x1ZGVzKGludGVyYWN0aW9uKSxcbiAgICAnaW50ZXJhY3Rpb24gaXMgcmVtb3ZlZCBmcm9tIGxpc3QnXG4gIClcblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdhc3luYyByZWZsb3cnLCBhc3luYyB0ID0+IHtcbiAgY29uc3Qgc2NvcGUgPSBoZWxwZXJzLm1vY2tTY29wZSgpXG5cbiAgaW50ZXJhY3Rpb25zLmluc3RhbGwoc2NvcGUpXG5cbiAgT2JqZWN0LmFzc2lnbihzY29wZS5hY3Rpb25zLCB7IHRlc3Q6IHt9LCBuYW1lczogWyd0ZXN0J10gfSlcblxuICBsZXQgcmVmbG93RXZlbnRcbiAgbGV0IHByb21pc2VcblxuICBjb25zdCBpbnRlcmFjdGFibGUgPSBzY29wZS5pbnRlcmFjdGFibGVzLm5ldyh3aW4ud2luZG93KVxuICBjb25zdCByZWN0ID0gT2JqZWN0LmZyZWV6ZSh7IHRvcDogMTAwLCBsZWZ0OiAyMDAsIGJvdHRvbTogMzAwLCByaWdodDogNDAwIH0pXG4gIGludGVyYWN0YWJsZS5yZWN0Q2hlY2tlcigoKSA9PiAoeyAuLi5yZWN0IH0pKVxuICBpbnRlcmFjdGFibGUuZmlyZSA9IChpRXZlbnQgPT4geyByZWZsb3dFdmVudCA9IGlFdmVudCB9KSBhcyBhbnlcblxuICByZWZsb3cuaW5zdGFsbChzY29wZSlcblxuICBwcm9taXNlID0gaW50ZXJhY3RhYmxlLnJlZmxvdyh7IG5hbWU6ICd0ZXN0JyB9KVxuICB0Lm9rKHByb21pc2UgaW5zdGFuY2VvZiB3aW4ud2luZG93LlByb21pc2UsICdtZXRob2QgcmV0dXJucyBhIFByb21pc2UnKVxuICB0Lm5vdE9rKHJlZmxvd0V2ZW50LmludGVyYWN0aW9uLmludGVyYWN0aW5nKCksICdyZWZsb3cgbWF5IGVuZCBzeW5jaHJvbm91c2x5JylcblxuICB0LmVxdWFsKGF3YWl0IHByb21pc2UsIGludGVyYWN0YWJsZSwgJ3JldHVybmVkIFByb21pc2UgcmVzb2x2ZXMgdG8gaW50ZXJhY3RhYmxlJylcblxuICAvLyBibG9jayB0aGUgZW5kIG9mIHRoZSByZWZsb3cgaW50ZXJhY3Rpb24gYW5kIHN0b3AgaXQgYWZ0ZXIgYSB0aW1lb3V0XG4gIHNjb3BlLmludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdiZWZvcmUtYWN0aW9uLWVuZCcsICh7IGludGVyYWN0aW9uIH0pID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IGludGVyYWN0aW9uLnN0b3AoKSwgMClcbiAgICByZXR1cm4gZmFsc2VcbiAgfSlcblxuICBwcm9taXNlID0gaW50ZXJhY3RhYmxlLnJlZmxvdyh7IG5hbWU6ICd0ZXN0JyB9KVxuXG4gIHQub2socmVmbG93RXZlbnQuaW50ZXJhY3Rpb24uaW50ZXJhY3RpbmcoKSwgJ2ludGVyYWN0aW9uIGNvbnRpbnVlcyBpZiBlbmQgaXMgYmxvY2tlZCcpXG4gIGF3YWl0IHByb21pc2VcbiAgdC5ub3RPayhyZWZsb3dFdmVudC5pbnRlcmFjdGlvbi5pbnRlcmFjdGluZygpLCAnaW50ZXJhY3Rpb24gaXMgc3RvcHBlZCBhZnRlciBwcm9taXNlIGlzIHJlc29sdmVkJylcblxuICB0LmVuZCgpXG59KVxuIl19 \ No newline at end of file diff --git a/packages/types/index.d.ts b/packages/types/index.d.ts new file mode 100644 index 000000000..653bd7825 --- /dev/null +++ b/packages/types/index.d.ts @@ -0,0 +1 @@ +/// diff --git a/packages/types/index.js b/packages/types/index.js new file mode 100644 index 000000000..f304e27ee --- /dev/null +++ b/packages/types/index.js @@ -0,0 +1,2 @@ +/// +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQ0FBcUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi90eXBlcy5kLnRzXCIgLz5cbiJdfQ== \ No newline at end of file diff --git a/packages/types/interactjs-test.js b/packages/types/interactjs-test.js index 97a79d45e..98874fd51 100644 --- a/packages/types/interactjs-test.js +++ b/packages/types/interactjs-test.js @@ -5,12 +5,13 @@ interact(document); interact(window); interact('.drag-and-resize') .draggable({ - snap: { - targets: [ - { x: 100, y: 200 }, - function (x, y) { return { x: x % 20, y }; }, - ] - }, + modifiers: [{ + type: 'snap', + targets: [ + { x: 100, y: 200 }, + function (x, y) { return { x: x % 20, y }; }, + ], + }], }) .resizable({ inertia: true, @@ -28,18 +29,17 @@ interact(target) max: 1, maxPerElement: 2, manualStart: true, - snap: { /* ... */}, - restrict: { /* ... */}, + modifiers: [], inertia: { /* ... */}, autoScroll: { /* ... */}, - axis: 'x' || 'y', + lockAxis: 'x' || 'y' || 'start', + startAxis: 'x' || 'y', }) .resizable({ max: 1, maxPerElement: 2, manualStart: true, - snap: { /* ... */}, - restrict: { /* ... */}, + modifiers: [], inertia: { /* ... */}, autoScroll: { /* ... */}, margin: 50, @@ -50,7 +50,7 @@ interact(target) max: 1, maxPerElement: 2, manualStart: true, - restrict: { /* ... */}, + modifiers: [], }); // autoscroll const element = 'li'; @@ -164,4 +164,4 @@ interact('a[href]').on('tap', (event) => { window.location.href = event.currentTarget.href; event.preventDefault(); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Rqcy10ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZXJhY3Rqcy10ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sUUFBUSxNQUFNLFlBQVksQ0FBQTtBQUVqQyxnQkFBZ0I7QUFDaEIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUN2QixRQUFRLENBQUMsUUFBUSxDQUFDLENBQUE7QUFDbEIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBRWhCLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztLQUN6QixTQUFTLENBQUM7SUFDVCxJQUFJLEVBQUU7UUFDSixPQUFPLEVBQUU7WUFDUCxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtZQUNsQixVQUFVLENBQVMsRUFBRSxDQUFTLElBQUksT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFBLENBQUMsQ0FBQztTQUM1RDtLQUFFO0NBQ04sQ0FBQztLQUNELFNBQVMsQ0FBQztJQUNULE9BQU8sRUFBRSxJQUFJO0NBQ2QsQ0FBQyxDQUFBO0FBRUosbUJBQW1CO0FBQ25CLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUE7QUFFakQsUUFBUSxDQUFDLElBQUksRUFBRTtJQUNiLE9BQU8sRUFBRSxNQUFNO0NBQ2hCLENBQUM7S0FDQyxTQUFTLENBQUMsRUFBRSxTQUFTLENBQUUsQ0FBQyxDQUFBO0FBRTNCLGlCQUFpQjtBQUNqQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUE7QUFDbkIsUUFBUSxDQUFDLE1BQU0sQ0FBQztLQUNiLFNBQVMsQ0FBQztJQUNULEdBQUcsRUFBWSxDQUFDO0lBQ2hCLGFBQWEsRUFBRSxDQUFDO0lBQ2hCLFdBQVcsRUFBSSxJQUFJO0lBQ25CLElBQUksRUFBVyxFQUFDLFNBQVMsQ0FBQztJQUMxQixR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QTtBQUN4QixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbnRlcmFjdCBmcm9tICdpbnRlcmFjdGpzJ1xuXG4vLyBJbnRlcmFjdGFibGVzXG5pbnRlcmFjdChkb2N1bWVudC5ib2R5KVxuaW50ZXJhY3QoZG9jdW1lbnQpXG5pbnRlcmFjdCh3aW5kb3cpXG5cbmludGVyYWN0KCcuZHJhZy1hbmQtcmVzaXplJylcbiAgLmRyYWdnYWJsZSh7XG4gICAgc25hcDoge1xuICAgICAgdGFyZ2V0czogW1xuICAgICAgICB7IHg6IDEwMCwgeTogMjAwIH0sXG4gICAgICAgIGZ1bmN0aW9uICh4OiBudW1iZXIsIHk6IG51bWJlcikgeyByZXR1cm4geyB4OiB4ICUgMjAsIHkgfSB9LFxuICAgICAgXSB9LFxuICB9KVxuICAucmVzaXphYmxlKHtcbiAgICBpbmVydGlhOiB0cnVlLFxuICB9KVxuXG4vLyBTZWxlY3RvciBjb250ZXh0XG5jb25zdCBteUxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXktbGlzdCcpXG5cbmludGVyYWN0KCdsaScsIHtcbiAgY29udGV4dDogbXlMaXN0LFxufSlcbiAgLmRyYWdnYWJsZSh7IC8qIC4uLiAqLyB9KVxuXG4vLyBBY3Rpb24gb3B0aW9uc1xuY29uc3QgdGFyZ2V0ID0gJ2xpJ1xuaW50ZXJhY3QodGFyZ2V0KVxuICAuZHJhZ2dhYmxlKHtcbiAgICBtYXggICAgICAgICAgOiAxLFxuICAgIG1heFBlckVsZW1lbnQ6IDIsXG4gICAgbWFudWFsU3RhcnQgIDogdHJ1ZSxcbiAgICBzbmFwICAgICAgICAgOiB7LyogLi4uICovfSxcbiAgICByZXN0cmljdCAgICAgOiB7LyogLi4uICovfSxcbiAgICBpbmVydGlhICAgICAgOiB7LyogLi4uICovfSxcbiAgICBhdXRvU2Nyb2xsICAgOiB7LyogLi4uICovfSxcblxuICAgIGF4aXMgICAgICAgICA6ICd4JyB8fCAneScsXG5cbiAgfSlcbiAgLnJlc2l6YWJsZSh7XG4gICAgbWF4ICAgICAgICAgIDogMSxcbiAgICBtYXhQZXJFbGVtZW50OiAyLFxuICAgIG1hbnVhbFN0YXJ0ICA6IHRydWUsXG4gICAgc25hcCAgICAgICAgIDogey8qIC4uLiAqL30sXG4gICAgcmVzdHJpY3QgICAgIDogey8qIC4uLiAqL30sXG4gICAgaW5lcnRpYSAgICAgIDogey8qIC4uLiAqL30sXG4gICAgYXV0b1Njcm9sbCAgIDogey8qIC4uLiAqL30sXG4gICAgbWFyZ2luICAgICAgIDogNTAsXG5cbiAgICBzcXVhcmUgICAgICAgOiB0cnVlIHx8IGZhbHNlLFxuICAgIGF4aXMgICAgICAgICA6ICd4JyB8fCAneScsXG4gIH0pXG4gIC5nZXN0dXJhYmxlKHtcbiAgICBtYXggICAgICAgICAgOiAxLFxuICAgIG1heFBlckVsZW1lbnQ6IDIsXG4gICAgbWFudWFsU3RhcnQgIDogdHJ1ZSxcbiAgICByZXN0cmljdCAgICAgOiB7LyogLi4uICovfSxcbiAgfSlcblxuLy8gYXV0b3Njcm9sbFxuY29uc3QgZWxlbWVudCA9ICdsaSdcbmludGVyYWN0KGVsZW1lbnQpXG4gIC5kcmFnZ2FibGUoe1xuICAgIGF1dG9TY3JvbGw6IHRydWUsXG4gIH0pXG4gIC5yZXNpemFibGUoe1xuICAgIGF1dG9TY3JvbGw6IHtcbiAgICAgIGNvbnRhaW5lcjogZG9jdW1lbnQuYm9keSxcbiAgICAgIG1hcmdpbjogNTAsXG4gICAgICBkaXN0YW5jZTogNSxcbiAgICAgIGludGVydmFsOiAxMCxcbiAgICB9LFxuICB9KVxuXG4vLyBheGlzXG5pbnRlcmFjdCh0YXJnZXQpLmRyYWdnYWJsZSh7XG4gIGF4aXM6ICd4Jyxcbn0pXG5cbmludGVyYWN0KHRhcmdldCkucmVzaXphYmxlKHtcbiAgYXhpczogJ3gnLFxufSlcblxuY29uc3QgaGFuZGxlRWwgPSAnbGknXG5pbnRlcmFjdCh0YXJnZXQpLnJlc2l6YWJsZSh7XG4gIGVkZ2VzOiB7XG4gICAgdG9wICAgOiB0cnVlLCAgICAgICAvLyBVc2UgcG9pbnRlciBjb29yZHMgdG8gY2hlY2sgZm9yIHJlc2l6ZS5cbiAgICBsZWZ0ICA6IGZhbHNlLCAgICAgIC8vIERpc2FibGUgcmVzaXppbmcgZnJvbSBsZWZ0IGVkZ2UuXG4gICAgYm90dG9tOiAnLnJlc2l6ZS1zJywgLy8gUmVzaXplIGlmIHBvaW50ZXIgdGFyZ2V0IG1hdGNoZXMgc2VsZWN0b3JcbiAgICByaWdodCA6IGhhbmRsZUVsLCAgICAvLyBSZXNpemUgaWYgcG9pbnRlciB0YXJnZXQgaXMgdGhlIGdpdmVuIEVsZW1lbnRcbiAgfSxcbn0pXG5cbi8vIHJlc2l6ZSBpbnZlcnRcbmludGVyYWN0KHRhcmdldCkucmVzaXphYmxlKHtcbiAgZWRnZXM6IHsgYm90dG9tOiB0cnVlLCByaWdodDogdHJ1ZSB9LFxuICBpbnZlcnQ6ICdyZXBvc2l0aW9uJyxcbn0pXG5cbi8vIHJlc2l6ZSBzcXVhcmVcbmludGVyYWN0KHRhcmdldCkucmVzaXphYmxlKHtcbiAgc3F1YXJlUmVzaXplOiB0cnVlLFxufSlcblxuLy8gZHJvcHpvbmUgIGFjY2VwdFxuaW50ZXJhY3QodGFyZ2V0KS5kcm9wem9uZSh7XG4gIGFjY2VwdDogJy5kcmFnMCwgLmRyYWcxJyxcbn0pXG5cbi8vIGRyb3B6b25lIG92ZXJsYXBcbmludGVyYWN0KHRhcmdldCkuZHJvcHpvbmUoe1xuICBvdmVybGFwOiAwLjI1LFxufSlcblxuLy8gZHJvcHpvbmUgY2hlY2tlclxuaW50ZXJhY3QodGFyZ2V0KS5kcm9wem9uZSh7XG4gIGNoZWNrZXIgKFxuICAgIF9kcmFnRXZlbnQ6IEVsZW1lbnQsICAgICAgICAgIC8vIHJlbGF0ZWQgZHJhZ21vdmUgb3IgZHJhZ2VuZFxuICAgIF9ldmVudDogRXZlbnQsICAgICAgICAgICAgICAgIC8vIFRvdWNoLCBQb2ludGVyIG9yIE1vdXNlIEV2ZW50XG4gICAgZHJvcHBlZDogYm9vbGVhbiwgICAgICAgICAgICAgLy8gYm9vbCBkZWZhdWx0IGNoZWNrZXIgcmVzdWx0XG4gICAgX2Ryb3B6b25lOiBJbnRlcmFjdC5JbnRlcmFjdGFibGUsICAgICAgLy8gZHJvcHpvbmUgSW50ZXJhY3RhYmxlXG4gICAgZHJvcEVsZW1lbnQ6IEVsZW1lbnQsICAgICAgICAgLy8gZHJvcHpvbmUgZWxlbW50XG4gICAgX2RyYWdnYWJsZTogSW50ZXJhY3QuSW50ZXJhY3RhYmxlLCAgICAgLy8gZHJhZ2dhYmxlIEludGVyYWN0YWJsZVxuICAgIF9kcmFnZ2FibGVFbGVtZW50OiBFbGVtZW50KSB7IC8vIGRyYWdnYWJsZSBlbGVtZW50XG4gICAgLy8gb25seSBhbGxvdyBkcm9wcyBpbnRvIGVtcHR5IGRyb3B6b25lIGVsZW1lbnRzXG4gICAgcmV0dXJuIGRyb3BwZWQgJiYgIWRyb3BFbGVtZW50Lmhhc0NoaWxkTm9kZXMoKVxuICB9LFxufSlcblxuaW50ZXJhY3QuZHluYW1pY0Ryb3AoKVxuaW50ZXJhY3QuZHluYW1pY0Ryb3AoZmFsc2UpXG5cbi8vIEV2ZW50c1xuZnVuY3Rpb24gbGlzdGVuZXIgKGV2ZW50KSB7XG4gIGNvbnN0IHsgdHlwZSwgcGFnZVgsIHBhZ2VZIH0gPSBldmVudFxuICBhbGVydCh7IHR5cGUsIHBhZ2VYLCBwYWdlWSB9KVxufVxuXG5pbnRlcmFjdCh0YXJnZXQpXG4gIC5vbignZHJhZ3N0YXJ0JywgbGlzdGVuZXIpXG4gIC5vbignZHJhZ21vdmUgZHJhZ2VuZCcsIGxpc3RlbmVyKVxuICAub24oWydyZXNpemVtb3ZlJywgJ3Jlc2l6ZWVuZCddLCBsaXN0ZW5lcilcbiAgLm9uKHtcbiAgICBnZXN0dXJlc3RhcnQ6IGxpc3RlbmVyLFxuICAgIGdlc3R1cmVlbmQ6IGxpc3RlbmVyLFxuICB9KVxuXG5pbnRlcmFjdC5vbigncmVzaXplJywgKGV2ZW50OiBJbnRlcmFjdC5SZXNpemVFdmVudCkgPT4ge1xuICBjb25zdCB7IHJlY3QsIGRlbHRhUmVjdCB9ID0gZXZlbnRcbiAgYWxlcnQoSlNPTi5zdHJpbmdpZnkoeyByZWN0LCBkZWx0YVJlY3QgfSkpXG59KVxuXG5pbnRlcmFjdCh0YXJnZXQpLnJlc2l6YWJsZSh7XG4gIGxpc3RlbmVyczogW1xuICAgIHsgc3RhcnQ6IGxpc3RlbmVyLCBtb3ZlOiBsaXN0ZW5lciB9LFxuICBdLFxufSlcblxuaW50ZXJhY3QodGFyZ2V0KS5kcmFnZ2FibGUoe1xuICBsaXN0ZW5lcnM6IHsgc3RhcnQ6IGxpc3RlbmVyLCBlbmQ6IGxpc3RlbmVyIH0sXG59KVxuXG5pbnRlcmFjdCh0YXJnZXQpLmRyYWdnYWJsZSh7XG4gIG9uc3RhcnQ6IGxpc3RlbmVyLFxuICBvbm1vdmU6IGxpc3RlbmVyLFxuICBvbmVuZDogbGlzdGVuZXIsXG59KVxuXG5pbnRlcmFjdC5vbihbJ2RyYWdtb3ZlJywgJ3Jlc2l6ZXN0YXJ0J10sIGxpc3RlbmVyKVxuXG5jb25zdCBkcm9wVGFyZ2V0ID0gJ2Rpdidcbi8vIERyb3AgRXZlbnRzXG5pbnRlcmFjdChkcm9wVGFyZ2V0KVxuICAuZHJvcHpvbmUoe1xuICAgIG9uZHJvcCAoZXZlbnQpIHtcbiAgICAgIGFsZXJ0KGV2ZW50LnJlbGF0ZWRUYXJnZXQuaWQgK1xuICAgICAgICAgICAgJyB3YXMgZHJvcHBlZCBpbnRvICcgK1xuICAgICAgICAgICAgZXZlbnQudGFyZ2V0LmlkKVxuICAgIH0sXG4gIH0pXG4gIC5vbignZHJvcGFjdGl2YXRlJywgKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5hZGQoJ2Ryb3AtYWN0aXZhdGVkJylcbiAgfSlcblxuaW50ZXJhY3QodGFyZ2V0KS5vbigndXAnLCAoX2V2ZW50KSA9PiB7fSlcblxuLy8gZmFzdCBjbGlja1xuaW50ZXJhY3QoJ2FbaHJlZl0nKS5vbigndGFwJywgKGV2ZW50KSA9PiB7XG4gIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gZXZlbnQuY3VycmVudFRhcmdldC5ocmVmXG5cbiAgZXZlbnQucHJldmVudERlZmF1bHQoKVxufSlcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Rqcy10ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZXJhY3Rqcy10ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sUUFBUSxNQUFNLFlBQVksQ0FBQTtBQUVqQyxnQkFBZ0I7QUFDaEIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUN2QixRQUFRLENBQUMsUUFBUSxDQUFDLENBQUE7QUFDbEIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBRWhCLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztLQUN6QixTQUFTLENBQUM7SUFDVCxTQUFTLEVBQUUsQ0FBQztZQUNWLElBQUksRUFBRSxNQUFNO1lBQ1osT0FBTyxFQUFFO2dCQUNQLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO2dCQUNsQixVQUFVLENBQVMsRUFBRSxDQUFTLElBQUksT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFBLENBQUMsQ0FBQzthQUM1RDtTQUNGLENBQUM7Q0FDSCxDQUFDO0tBQ0QsU0FBUyxDQUFDO0lBQ1QsT0FBTyxFQUFFLElBQUk7Q0FDZCxDQUFDLENBQUE7QUFFSixtQkFBbUI7QUFDbkIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtBQUVqRCxRQUFRLENBQUMsSUFBSSxFQUFFO0lBQ2IsT0FBTyxFQUFFLE1BQU07Q0FDaEIsQ0FBQztLQUNDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsQ0FBRSxDQUFDLENBQUE7QUFFM0IsaUJBQWlCO0FBQ2pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQTtBQUNuQixRQUFRLENBQUMsTUFBTSxDQUFDO0tBQ2IsU0FBUyxDQUFDO0lBQ1QsR0FBRyxFQUFZLENBQUM7SUFDaEIsYUFBYSxFQUFFLENBQUM7SUFDaEIsV0FBVyxFQUFJLElBQUk7SUFDbkIs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QUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGludGVyYWN0IGZyb20gJ2ludGVyYWN0anMnXG5cbi8vIEludGVyYWN0YWJsZXNcbmludGVyYWN0KGRvY3VtZW50LmJvZHkpXG5pbnRlcmFjdChkb2N1bWVudClcbmludGVyYWN0KHdpbmRvdylcblxuaW50ZXJhY3QoJy5kcmFnLWFuZC1yZXNpemUnKVxuICAuZHJhZ2dhYmxlKHtcbiAgICBtb2RpZmllcnM6IFt7XG4gICAgICB0eXBlOiAnc25hcCcsXG4gICAgICB0YXJnZXRzOiBbXG4gICAgICAgIHsgeDogMTAwLCB5OiAyMDAgfSxcbiAgICAgICAgZnVuY3Rpb24gKHg6IG51bWJlciwgeTogbnVtYmVyKSB7IHJldHVybiB7IHg6IHggJSAyMCwgeSB9IH0sXG4gICAgICBdLFxuICAgIH1dLFxuICB9KVxuICAucmVzaXphYmxlKHtcbiAgICBpbmVydGlhOiB0cnVlLFxuICB9KVxuXG4vLyBTZWxlY3RvciBjb250ZXh0XG5jb25zdCBteUxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXktbGlzdCcpXG5cbmludGVyYWN0KCdsaScsIHtcbiAgY29udGV4dDogbXlMaXN0LFxufSlcbiAgLmRyYWdnYWJsZSh7IC8qIC4uLiAqLyB9KVxuXG4vLyBBY3Rpb24gb3B0aW9uc1xuY29uc3QgdGFyZ2V0ID0gJ2xpJ1xuaW50ZXJhY3QodGFyZ2V0KVxuICAuZHJhZ2dhYmxlKHtcbiAgICBtYXggICAgICAgICAgOiAxLFxuICAgIG1heFBlckVsZW1lbnQ6IDIsXG4gICAgbWFudWFsU3RhcnQgIDogdHJ1ZSxcbiAgICBtb2RpZmllcnMgICAgOiBbXSxcbiAgICBpbmVydGlhICAgICAgOiB7LyogLi4uICovfSxcbiAgICBhdXRvU2Nyb2xsICAgOiB7LyogLi4uICovfSxcblxuICAgIGxvY2tBeGlzICAgICA6ICd4JyB8fCAneScgfHwgJ3N0YXJ0JyxcbiAgICBzdGFydEF4aXMgICAgOiAneCcgfHwgJ3knLFxuICB9KVxuICAucmVzaXphYmxlKHtcbiAgICBtYXggICAgICAgICAgOiAxLFxuICAgIG1heFBlckVsZW1lbnQ6IDIsXG4gICAgbWFudWFsU3RhcnQgIDogdHJ1ZSxcbiAgICBtb2RpZmllcnMgICAgOiBbXSxcbiAgICBpbmVydGlhICAgICAgOiB7LyogLi4uICovfSxcbiAgICBhdXRvU2Nyb2xsICAgOiB7LyogLi4uICovfSxcbiAgICBtYXJnaW4gICAgICAgOiA1MCxcblxuICAgIHNxdWFyZSAgICAgICA6IHRydWUgfHwgZmFsc2UsXG4gICAgYXhpcyAgICAgICAgIDogJ3gnIHx8ICd5JyxcbiAgfSlcbiAgLmdlc3R1cmFibGUoe1xuICAgIG1heCAgICAgICAgICA6IDEsXG4gICAgbWF4UGVyRWxlbWVudDogMixcbiAgICBtYW51YWxTdGFydCAgOiB0cnVlLFxuICAgIG1vZGlmaWVycyAgICA6IFtdLFxuICB9KVxuXG4vLyBhdXRvc2Nyb2xsXG5jb25zdCBlbGVtZW50ID0gJ2xpJ1xuaW50ZXJhY3QoZWxlbWVudClcbiAgLmRyYWdnYWJsZSh7XG4gICAgYXV0b1Njcm9sbDogdHJ1ZSxcbiAgfSlcbiAgLnJlc2l6YWJsZSh7XG4gICAgYXV0b1Njcm9sbDoge1xuICAgICAgY29udGFpbmVyOiBkb2N1bWVudC5ib2R5LFxuICAgICAgbWFyZ2luOiA1MCxcbiAgICAgIGRpc3RhbmNlOiA1LFxuICAgICAgaW50ZXJ2YWw6IDEwLFxuICAgIH0sXG4gIH0pXG5cbi8vIGF4aXNcbmludGVyYWN0KHRhcmdldCkuZHJhZ2dhYmxlKHtcbiAgYXhpczogJ3gnLFxufSlcblxuaW50ZXJhY3QodGFyZ2V0KS5yZXNpemFibGUoe1xuICBheGlzOiAneCcsXG59KVxuXG5jb25zdCBoYW5kbGVFbCA9ICdsaSdcbmludGVyYWN0KHRhcmdldCkucmVzaXphYmxlKHtcbiAgZWRnZXM6IHtcbiAgICB0b3AgICA6IHRydWUsICAgICAgIC8vIFVzZSBwb2ludGVyIGNvb3JkcyB0byBjaGVjayBmb3IgcmVzaXplLlxuICAgIGxlZnQgIDogZmFsc2UsICAgICAgLy8gRGlzYWJsZSByZXNpemluZyBmcm9tIGxlZnQgZWRnZS5cbiAgICBib3R0b206ICcucmVzaXplLXMnLCAvLyBSZXNpemUgaWYgcG9pbnRlciB0YXJnZXQgbWF0Y2hlcyBzZWxlY3RvclxuICAgIHJpZ2h0IDogaGFuZGxlRWwsICAgIC8vIFJlc2l6ZSBpZiBwb2ludGVyIHRhcmdldCBpcyB0aGUgZ2l2ZW4gRWxlbWVudFxuICB9LFxufSlcblxuLy8gcmVzaXplIGludmVydFxuaW50ZXJhY3QodGFyZ2V0KS5yZXNpemFibGUoe1xuICBlZGdlczogeyBib3R0b206IHRydWUsIHJpZ2h0OiB0cnVlIH0sXG4gIGludmVydDogJ3JlcG9zaXRpb24nLFxufSlcblxuLy8gcmVzaXplIHNxdWFyZVxuaW50ZXJhY3QodGFyZ2V0KS5yZXNpemFibGUoe1xuICBzcXVhcmVSZXNpemU6IHRydWUsXG59KVxuXG4vLyBkcm9wem9uZSAgYWNjZXB0XG5pbnRlcmFjdCh0YXJnZXQpLmRyb3B6b25lKHtcbiAgYWNjZXB0OiAnLmRyYWcwLCAuZHJhZzEnLFxufSlcblxuLy8gZHJvcHpvbmUgb3ZlcmxhcFxuaW50ZXJhY3QodGFyZ2V0KS5kcm9wem9uZSh7XG4gIG92ZXJsYXA6IDAuMjUsXG59KVxuXG4vLyBkcm9wem9uZSBjaGVja2VyXG5pbnRlcmFjdCh0YXJnZXQpLmRyb3B6b25lKHtcbiAgY2hlY2tlciAoXG4gICAgX2RyYWdFdmVudDogRWxlbWVudCwgICAgICAgICAgLy8gcmVsYXRlZCBkcmFnbW92ZSBvciBkcmFnZW5kXG4gICAgX2V2ZW50OiBFdmVudCwgICAgICAgICAgICAgICAgLy8gVG91Y2gsIFBvaW50ZXIgb3IgTW91c2UgRXZlbnRcbiAgICBkcm9wcGVkOiBib29sZWFuLCAgICAgICAgICAgICAvLyBib29sIGRlZmF1bHQgY2hlY2tlciByZXN1bHRcbiAgICBfZHJvcHpvbmU6IEludGVyYWN0LkludGVyYWN0YWJsZSwgICAgICAvLyBkcm9wem9uZSBJbnRlcmFjdGFibGVcbiAgICBkcm9wRWxlbWVudDogRWxlbWVudCwgICAgICAgICAvLyBkcm9wem9uZSBlbGVtbnRcbiAgICBfZHJhZ2dhYmxlOiBJbnRlcmFjdC5JbnRlcmFjdGFibGUsICAgICAvLyBkcmFnZ2FibGUgSW50ZXJhY3RhYmxlXG4gICAgX2RyYWdnYWJsZUVsZW1lbnQ6IEVsZW1lbnQpIHsgLy8gZHJhZ2dhYmxlIGVsZW1lbnRcbiAgICAvLyBvbmx5IGFsbG93IGRyb3BzIGludG8gZW1wdHkgZHJvcHpvbmUgZWxlbWVudHNcbiAgICByZXR1cm4gZHJvcHBlZCAmJiAhZHJvcEVsZW1lbnQuaGFzQ2hpbGROb2RlcygpXG4gIH0sXG59KVxuXG5pbnRlcmFjdC5keW5hbWljRHJvcCgpXG5pbnRlcmFjdC5keW5hbWljRHJvcChmYWxzZSlcblxuLy8gRXZlbnRzXG5mdW5jdGlvbiBsaXN0ZW5lciAoZXZlbnQpIHtcbiAgY29uc3QgeyB0eXBlLCBwYWdlWCwgcGFnZVkgfSA9IGV2ZW50XG4gIGFsZXJ0KHsgdHlwZSwgcGFnZVgsIHBhZ2VZIH0pXG59XG5cbmludGVyYWN0KHRhcmdldClcbiAgLm9uKCdkcmFnc3RhcnQnLCBsaXN0ZW5lcilcbiAgLm9uKCdkcmFnbW92ZSBkcmFnZW5kJywgbGlzdGVuZXIpXG4gIC5vbihbJ3Jlc2l6ZW1vdmUnLCAncmVzaXplZW5kJ10sIGxpc3RlbmVyKVxuICAub24oe1xuICAgIGdlc3R1cmVzdGFydDogbGlzdGVuZXIsXG4gICAgZ2VzdHVyZWVuZDogbGlzdGVuZXIsXG4gIH0pXG5cbmludGVyYWN0Lm9uKCdyZXNpemUnLCAoZXZlbnQ6IEludGVyYWN0LlJlc2l6ZUV2ZW50KSA9PiB7XG4gIGNvbnN0IHsgcmVjdCwgZGVsdGFSZWN0IH0gPSBldmVudFxuICBhbGVydChKU09OLnN0cmluZ2lmeSh7IHJlY3QsIGRlbHRhUmVjdCB9KSlcbn0pXG5cbmludGVyYWN0KHRhcmdldCkucmVzaXphYmxlKHtcbiAgbGlzdGVuZXJzOiBbXG4gICAgeyBzdGFydDogbGlzdGVuZXIsIG1vdmU6IGxpc3RlbmVyIH0sXG4gIF0sXG59KVxuXG5pbnRlcmFjdCh0YXJnZXQpLmRyYWdnYWJsZSh7XG4gIGxpc3RlbmVyczogeyBzdGFydDogbGlzdGVuZXIsIGVuZDogbGlzdGVuZXIgfSxcbn0pXG5cbmludGVyYWN0KHRhcmdldCkuZHJhZ2dhYmxlKHtcbiAgb25zdGFydDogbGlzdGVuZXIsXG4gIG9ubW92ZTogbGlzdGVuZXIsXG4gIG9uZW5kOiBsaXN0ZW5lcixcbn0pXG5cbmludGVyYWN0Lm9uKFsnZHJhZ21vdmUnLCAncmVzaXplc3RhcnQnXSwgbGlzdGVuZXIpXG5cbmNvbnN0IGRyb3BUYXJnZXQgPSAnZGl2J1xuLy8gRHJvcCBFdmVudHNcbmludGVyYWN0KGRyb3BUYXJnZXQpXG4gIC5kcm9wem9uZSh7XG4gICAgb25kcm9wIChldmVudCkge1xuICAgICAgYWxlcnQoZXZlbnQucmVsYXRlZFRhcmdldC5pZCArXG4gICAgICAgICAgICAnIHdhcyBkcm9wcGVkIGludG8gJyArXG4gICAgICAgICAgICBldmVudC50YXJnZXQuaWQpXG4gICAgfSxcbiAgfSlcbiAgLm9uKCdkcm9wYWN0aXZhdGUnLCAoZXZlbnQpID0+IHtcbiAgICBldmVudC50YXJnZXQuY2xhc3NMaXN0LmFkZCgnZHJvcC1hY3RpdmF0ZWQnKVxuICB9KVxuXG5pbnRlcmFjdCh0YXJnZXQpLm9uKCd1cCcsIChfZXZlbnQpID0+IHt9KVxuXG4vLyBmYXN0IGNsaWNrXG5pbnRlcmFjdCgnYVtocmVmXScpLm9uKCd0YXAnLCAoZXZlbnQpID0+IHtcbiAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBldmVudC5jdXJyZW50VGFyZ2V0LmhyZWZcblxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG59KVxuIl19 \ No newline at end of file diff --git a/packages/types/package.json b/packages/types/package.json index 78c0ca311..3b888e405 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,20 +1,20 @@ { "name": "@interactjs/types", - "version": "1.4.0-alpha.27+sha.12b8f8f", + "version": "1.4.0-alpha.28+sha.e624c4d", "dependencies": { - "@interactjs/actions": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/auto-scroll": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/auto-start": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/core": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/inertia": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/interact": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/modifiers": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/pointer-events": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/reflow": "1.4.0-alpha.27+sha.12b8f8f", - "@interactjs/utils": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/actions": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/auto-scroll": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/auto-start": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/core": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/inertia": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/interact": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/modifiers": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/pointer-events": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/reflow": "1.4.0-alpha.28+sha.e624c4d", + "@interactjs/utils": "1.4.0-alpha.28+sha.e624c4d" }, "devDependencies": { - "interactjs": "^1.4.0-alpha.27" + "interactjs": "^1.4.0-alpha.28" }, "publishConfig": { "access": "public" diff --git a/packages/utils/Signals.d.ts b/packages/utils/Signals.d.ts index d3a62c7d0..ce4f17cd3 100644 --- a/packages/utils/Signals.d.ts +++ b/packages/utils/Signals.d.ts @@ -1,6 +1,6 @@ export declare type SignalListener = (signalArg: PartialSignalArg, sinalName: string) => (void | boolean); export interface SignalArg { - interaction: Interact.Interaction; + interaction: Interact.Interaction; Interactable: Interact.Interactable; iEvent: Interact.InteractEvent; element: Window | Document | Element; @@ -16,6 +16,6 @@ declare class Signals { }; on(name: string, listener: SignalListener): void; off(name: string, listener: SignalListener): void; - fire(name: string, arg: any): void | false; + fire(name: string, arg: Partial): void | false; } export default Signals; diff --git a/packages/utils/Signals.js b/packages/utils/Signals.js index e4bfc0ddc..5bbcc552e 100644 --- a/packages/utils/Signals.js +++ b/packages/utils/Signals.js @@ -31,4 +31,4 @@ class Signals { } } export default Signals; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lnbmFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIlNpZ25hbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZUEsTUFBTSxPQUFPO0lBQWI7UUFDRSxjQUFTLEdBRUwsRUFBRSxDQUFBO0lBZ0NSLENBQUM7SUE5QkMsRUFBRSxDQUFFLElBQVksRUFBRSxRQUF3QjtRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDakMsT0FBTTtTQUNQO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDckMsQ0FBQztJQUVELEdBQUcsQ0FBRSxJQUFZLEVBQUUsUUFBd0I7UUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFNO1NBQUU7UUFFckMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFcEQsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFBO1NBQ3RDO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBRSxJQUFZLEVBQUUsR0FBUTtRQUMxQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRTVDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFBRSxPQUFNO1NBQUU7UUFFaEMsS0FBSyxNQUFNLFFBQVEsSUFBSSxlQUFlLEVBQUU7WUFDdEMsSUFBSSxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEtBQUssRUFBRTtnQkFDakMsT0FBTyxLQUFLLENBQUE7YUFDYjtTQUNGO0lBQ0gsQ0FBQztDQUNGO0FBRUQsZUFBZSxPQUFPLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBTaWduYWxMaXN0ZW5lciA9IChzaWduYWxBcmc6IFBhcnRpYWxTaWduYWxBcmcsIHNpbmFsTmFtZTogc3RyaW5nKSA9PiAodm9pZCB8IGJvb2xlYW4pXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmFsQXJnPFQgZXh0ZW5kcyBJbnRlcmFjdC5BY3Rpb25OYW1lID0gYW55PiB7XG4gIGludGVyYWN0aW9uOiBJbnRlcmFjdC5JbnRlcmFjdGlvblxuICBJbnRlcmFjdGFibGU6IEludGVyYWN0LkludGVyYWN0YWJsZVxuICBpRXZlbnQ6IEludGVyYWN0LkludGVyYWN0RXZlbnQ8VD5cbiAgZWxlbWVudDogV2luZG93IHwgRG9jdW1lbnQgfCBFbGVtZW50XG4gIGNvb3JkczogSW50ZXJhY3QuUG9pbnRcbiAgZXZlbnQ6IEludGVyYWN0LlBvaW50ZXJFdmVudFR5cGVcbiAgcGhhc2U6IEludGVyYWN0LkV2ZW50UGhhc2VcbiAgW2luZGV4OiBzdHJpbmddOiBhbnlcbn1cblxuZXhwb3J0IHR5cGUgUGFydGlhbFNpZ25hbEFyZyA9IFBhcnRpYWw8U2lnbmFsQXJnPlxuXG5jbGFzcyBTaWduYWxzIHtcbiAgbGlzdGVuZXJzOiB7XG4gICAgW3NpZ25hbE5hbWU6IHN0cmluZ106IFNpZ25hbExpc3RlbmVyW10sXG4gIH0gPSB7fVxuXG4gIG9uIChuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBTaWduYWxMaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5saXN0ZW5lcnNbbmFtZV0pIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVdID0gW2xpc3RlbmVyXVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5saXN0ZW5lcnNbbmFtZV0ucHVzaChsaXN0ZW5lcilcbiAgfVxuXG4gIG9mZiAobmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogU2lnbmFsTGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMubGlzdGVuZXJzW25hbWVdKSB7IHJldHVybiB9XG5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMubGlzdGVuZXJzW25hbWVdLmluZGV4T2YobGlzdGVuZXIpXG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lXS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgfVxuICB9XG5cbiAgZmlyZSAobmFtZTogc3RyaW5nLCBhcmc6IGFueSk6IHZvaWQgfCBmYWxzZSB7XG4gICAgY29uc3QgdGFyZ2V0TGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnNbbmFtZV1cblxuICAgIGlmICghdGFyZ2V0TGlzdGVuZXJzKSB7IHJldHVybiB9XG5cbiAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRhcmdldExpc3RlbmVycykge1xuICAgICAgaWYgKGxpc3RlbmVyKGFyZywgbmFtZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaWduYWxzXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lnbmFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIlNpZ25hbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZUEsTUFBTSxPQUFPO0lBQWI7UUFDRSxjQUFTLEdBRUwsRUFBRSxDQUFBO0lBZ0NSLENBQUM7SUE5QkMsRUFBRSxDQUFFLElBQVksRUFBRSxRQUF3QjtRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDakMsT0FBTTtTQUNQO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDckMsQ0FBQztJQUVELEdBQUcsQ0FBRSxJQUFZLEVBQUUsUUFBd0I7UUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFNO1NBQUU7UUFFckMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFcEQsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFBO1NBQ3RDO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBRSxJQUFZLEVBQUUsR0FBdUI7UUFDekMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUU1QyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQUUsT0FBTTtTQUFFO1FBRWhDLEtBQUssTUFBTSxRQUFRLElBQUksZUFBZSxFQUFFO1lBQ3RDLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUU7Z0JBQ2pDLE9BQU8sS0FBSyxDQUFBO2FBQ2I7U0FDRjtJQUNILENBQUM7Q0FDRjtBQUVELGVBQWUsT0FBTyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgU2lnbmFsTGlzdGVuZXIgPSAoc2lnbmFsQXJnOiBQYXJ0aWFsU2lnbmFsQXJnLCBzaW5hbE5hbWU6IHN0cmluZykgPT4gKHZvaWQgfCBib29sZWFuKVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25hbEFyZzxUIGV4dGVuZHMgSW50ZXJhY3QuQWN0aW9uTmFtZSA9IGFueT4ge1xuICBpbnRlcmFjdGlvbjogSW50ZXJhY3QuSW50ZXJhY3Rpb248VD5cbiAgSW50ZXJhY3RhYmxlOiBJbnRlcmFjdC5JbnRlcmFjdGFibGVcbiAgaUV2ZW50OiBJbnRlcmFjdC5JbnRlcmFjdEV2ZW50PFQ+XG4gIGVsZW1lbnQ6IFdpbmRvdyB8IERvY3VtZW50IHwgRWxlbWVudFxuICBjb29yZHM6IEludGVyYWN0LlBvaW50XG4gIGV2ZW50OiBJbnRlcmFjdC5Qb2ludGVyRXZlbnRUeXBlXG4gIHBoYXNlOiBJbnRlcmFjdC5FdmVudFBoYXNlXG4gIFtpbmRleDogc3RyaW5nXTogYW55XG59XG5cbmV4cG9ydCB0eXBlIFBhcnRpYWxTaWduYWxBcmcgPSBQYXJ0aWFsPFNpZ25hbEFyZz5cblxuY2xhc3MgU2lnbmFscyB7XG4gIGxpc3RlbmVyczoge1xuICAgIFtzaWduYWxOYW1lOiBzdHJpbmddOiBTaWduYWxMaXN0ZW5lcltdLFxuICB9ID0ge31cblxuICBvbiAobmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogU2lnbmFsTGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMubGlzdGVuZXJzW25hbWVdKSB7XG4gICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lXSA9IFtsaXN0ZW5lcl1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMubGlzdGVuZXJzW25hbWVdLnB1c2gobGlzdGVuZXIpXG4gIH1cblxuICBvZmYgKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IFNpZ25hbExpc3RlbmVyKSB7XG4gICAgaWYgKCF0aGlzLmxpc3RlbmVyc1tuYW1lXSkgeyByZXR1cm4gfVxuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmxpc3RlbmVyc1tuYW1lXS5pbmRleE9mKGxpc3RlbmVyKVxuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZV0uc3BsaWNlKGluZGV4LCAxKVxuICAgIH1cbiAgfVxuXG4gIGZpcmUgKG5hbWU6IHN0cmluZywgYXJnOiBQYXJ0aWFsPFNpZ25hbEFyZz4pOiB2b2lkIHwgZmFsc2Uge1xuICAgIGNvbnN0IHRhcmdldExpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzW25hbWVdXG5cbiAgICBpZiAoIXRhcmdldExpc3RlbmVycykgeyByZXR1cm4gfVxuXG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0YXJnZXRMaXN0ZW5lcnMpIHtcbiAgICAgIGlmIChsaXN0ZW5lcihhcmcsIG5hbWUpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2lnbmFsc1xuIl19 \ No newline at end of file diff --git a/packages/utils/extend.js b/packages/utils/extend.js index d6c83775f..070fdedd1 100644 --- a/packages/utils/extend.js +++ b/packages/utils/extend.js @@ -4,4 +4,4 @@ export default function extend(dest, source) { } return dest; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXh0ZW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxPQUFPLFVBQVUsTUFBTSxDQUEyQixJQUFPLEVBQUUsTUFBUztJQUN6RSxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sRUFBRTtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO0tBQzFCO0lBQ0QsT0FBTyxJQUFhLENBQUE7QUFDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4dGVuZDxULCBVIGV4dGVuZHMgUGFydGlhbDxUPj4gKGRlc3Q6IFUsIHNvdXJjZTogVCkge1xuICBmb3IgKGNvbnN0IHByb3AgaW4gc291cmNlKSB7XG4gICAgZGVzdFtwcm9wXSA9IHNvdXJjZVtwcm9wXVxuICB9XG4gIHJldHVybiBkZXN0IGFzIFQgJiBVXG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXh0ZW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxPQUFPLFVBQVUsTUFBTSxDQUEyQixJQUFPLEVBQUUsTUFBUztJQUN6RSxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sRUFBRTtRQUN4QixJQUFxQixDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtLQUM1QztJQUNELE9BQU8sSUFBYSxDQUFBO0FBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHRlbmQ8VCwgVSBleHRlbmRzIFBhcnRpYWw8VD4+IChkZXN0OiBVLCBzb3VyY2U6IFQpIHtcbiAgZm9yIChjb25zdCBwcm9wIGluIHNvdXJjZSkge1xuICAgIChkZXN0IGFzIHVua25vd24gYXMgVClbcHJvcF0gPSBzb3VyY2VbcHJvcF1cbiAgfVxuICByZXR1cm4gZGVzdCBhcyBUICYgVVxufVxuIl19 \ No newline at end of file diff --git a/packages/utils/interactionFinder.d.ts b/packages/utils/interactionFinder.d.ts index ffc8587ee..04e41ac60 100644 --- a/packages/utils/interactionFinder.d.ts +++ b/packages/utils/interactionFinder.d.ts @@ -1,25 +1,18 @@ +export interface SearchDetails { + pointer: Interact.PointerType; + pointerId: number; + pointerType: string; + eventType: string; + eventTarget: Window | Document | Element; + curEventTarget: Window | Document | Element; + scope: Interact.Scope; +} declare const finder: { methodOrder: string[]; search(details: any): any; - simulationResume({ pointerType, eventType, eventTarget, scope }: { - pointerType: any; - eventType: any; - eventTarget: any; - scope: any; - }): any; - mouseOrPen({ pointerId, pointerType, eventType, scope }: { - pointerId: any; - pointerType: any; - eventType: any; - scope: any; - }): any; - hasPointer({ pointerId, scope }: { - pointerId: any; - scope: any; - }): any; - idle({ pointerType, scope }: { - pointerType: any; - scope: any; - }): any; + simulationResume({ pointerType, eventType, eventTarget, scope }: SearchDetails): import("@interactjs/core/Interaction").Interaction; + mouseOrPen({ pointerId, pointerType, eventType, scope }: SearchDetails): any; + hasPointer({ pointerId, scope }: SearchDetails): import("@interactjs/core/Interaction").Interaction; + idle({ pointerType, scope }: SearchDetails): import("@interactjs/core/Interaction").Interaction; }; export default finder; diff --git a/packages/utils/interactionFinder.js b/packages/utils/interactionFinder.js index f75087683..051fbf444 100644 --- a/packages/utils/interactionFinder.js +++ b/packages/utils/interactionFinder.js @@ -73,6 +73,7 @@ const finder = { return interaction; } } + return null; }, // get first idle interaction with a matching pointerType idle({ pointerType, scope }) { @@ -101,4 +102,4 @@ function hasPointerId(interaction, pointerId) { return utils.arr.some(interaction.pointers, ({ id }) => id === pointerId); } export default finder; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Rpb25GaW5kZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnRlcmFjdGlvbkZpbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLFNBQVMsQ0FBQTtBQUVoQyxNQUFNLE1BQU0sR0FBRztJQUNiLFdBQVcsRUFBRSxDQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFFO0lBRXZFLE1BQU0sQ0FBRSxPQUFPO1FBQ2IsS0FBSyxNQUFNLE1BQU0sSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQ3ZDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUUzQyxJQUFJLFdBQVcsRUFBRTtnQkFDZixPQUFPLFdBQVcsQ0FBQTthQUNuQjtTQUNGO0lBQ0gsQ0FBQztJQUVELDhDQUE4QztJQUM5QyxnQkFBZ0IsQ0FBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtRQUM5RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNsQyxPQUFPLElBQUksQ0FBQTtTQUNaO1FBRUQsS0FBSyxNQUFNLFdBQVcsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRTtZQUNqRCxJQUFJLE9BQU8sR0FBRyxXQUFXLENBQUE7WUFFekIsSUFBSSxXQUFXLENBQUMsVUFBVSxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsV0FBVztnQkFDNUQsQ0FBQyxXQUFXLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQyxFQUFFO2dCQUM3QyxPQUFPLE9BQU8sRUFBRTtvQkFDZCw0Q0FBNEM7b0JBQzVDLElBQUksT0FBTyxLQUFLLFdBQVcsQ0FBQyxPQUFPLEVBQUU7d0JBQ25DLE9BQU8sV0FBVyxDQUFBO3FCQUNuQjtvQkFDRCxPQUFPLEdBQUcsS0FBSyxDQUFDLEdB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UUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFBO0FBQzNFLENBQUM7QUFFRCxlQUFlLE1BQU0sQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vaW5kZXgnXG5cbmNvbnN0IGZpbmRlciA9IHtcbiAgbWV0aG9kT3JkZXI6IFsgJ3NpbXVsYXRpb25SZXN1bWUnLCAnbW91c2VPclBlbicsICdoYXNQb2ludGVyJywgJ2lkbGUnIF0sXG5cbiAgc2VhcmNoIChkZXRhaWxzKSB7XG4gICAgZm9yIChjb25zdCBtZXRob2Qgb2YgZmluZGVyLm1ldGhvZE9yZGVyKSB7XG4gICAgICBjb25zdCBpbnRlcmFjdGlvbiA9IGZpbmRlclttZXRob2RdKGRldGFpbHMpXG5cbiAgICAgIGlmIChpbnRlcmFjdGlvbikge1xuICAgICAgICByZXR1cm4gaW50ZXJhY3Rpb25cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgLy8gdHJ5IHRvIHJlc3VtZSBzaW11bGF0aW9uIHdpdGggYSBuZXcgcG9pbnRlclxuICBzaW11bGF0aW9uUmVzdW1lICh7IHBvaW50ZXJUeXBlLCBldmVudFR5cGUsIGV2ZW50VGFyZ2V0LCBzY29wZSB9KSB7XG4gICAgaWYgKCEvZG93bnxzdGFydC9pLnRlc3QoZXZlbnRUeXBlKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGludGVyYWN0aW9uIG9mIHNjb3BlLmludGVyYWN0aW9ucy5saXN0KSB7XG4gICAgICBsZXQgZWxlbWVudCA9IGV2ZW50VGFyZ2V0XG5cbiAgICAgIGlmIChpbnRlcmFjdGlvbi5zaW11bGF0aW9uICYmIGludGVyYWN0aW9uLnNpbXVsYXRpb24uYWxsb3dSZXN1bWUgJiZcbiAgICAgICAgICAoaW50ZXJhY3Rpb24ucG9pbnRlclR5cGUgPT09IHBvaW50ZXJUeXBlKSkge1xuICAgICAgICB3aGlsZSAoZWxlbWVudCkge1xuICAgICAgICAgIC8vIGlmIHRoZSBlbGVtZW50IGlzIHRoZSBpbnRlcmFjdGlvbiBlbGVtZW50XG4gICAgICAgICAgaWYgKGVsZW1lbnQgPT09IGludGVyYWN0aW9uLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcmFjdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgICBlbGVtZW50ID0gdXRpbHMuZG9tLnBhcmVudE5vZGUoZWxlbWVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH0sXG5cbiAgLy8gaWYgaXQncyBhIG1vdXNlIG9yIHBlbiBpbnRlcmFjdGlvblxuICBtb3VzZU9yUGVuICh7IHBvaW50ZXJJZCwgcG9pbnRlclR5cGUsIGV2ZW50VHlwZSwgc2NvcGUgfSkge1xuICAgIGlmIChwb2ludGVyVHlwZSAhPT0gJ21vdXNlJyAmJiBwb2ludGVyVHlwZSAhPT0gJ3BlbicpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgbGV0IGZpcnN0Tm9uQWN0aXZlXG5cbiAgICBmb3IgKGNvbnN0IGludGVyYWN0aW9uIG9mIHNjb3BlLmludGVyYWN0aW9ucy5saXN0KSB7XG4gICAgICBpZiAoaW50ZXJhY3Rpb24ucG9pbnRlclR5cGUgPT09IHBvaW50ZXJUeXBlKSB7XG4gICAgICAgIC8vIGlmIGl0J3MgYSBkb3duIGV2ZW50LCBza2lwIGludGVyYWN0aW9ucyB3aXRoIHJ1bm5pbmcgc2ltdWxhdGlvbnNcbiAgICAgICAgaWYgKGludGVyYWN0aW9uLnNpbXVsYXRpb24gJiYgIWhhc1BvaW50ZXJJZChpbnRlcmFjdGlvbiwgcG9pbnRlcklkKSkgeyBjb250aW51ZSB9XG5cbiAgICAgICAgLy8gaWYgdGhlIGludGVyYWN0aW9uIGlzIGFjdGl2ZSwgcmV0dXJuIGl0IGltbWVkaWF0ZWx5XG4gICAgICAgIGlmIChpbnRlcmFjdGlvbi5pbnRlcmFjdGluZygpKSB7XG4gICAgICAgICAgcmV0dXJuIGludGVyYWN0aW9uXG4gICAgICAgIH1cbiAgICAgICAgLy8gb3RoZXJ3aXNlIHNhdmUgaXQgYW5kIGxvb2sgZm9yIGFub3RoZXIgYWN0aXZlIGludGVyYWN0aW9uXG4gICAgICAgIGVsc2UgaWYgKCFmaXJzdE5vbkFjdGl2ZSkge1xuICAgICAgICAgIGZpcnN0Tm9uQWN0aXZlID0gaW50ZXJhY3Rpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIG5vIGFjdGl2ZSBtb3VzZSBpbnRlcmFjdGlvbiB3YXMgZm91bmQgdXNlIHRoZSBmaXJzdCBpbmFjdGl2ZSBtb3VzZVxuICAgIC8vIGludGVyYWN0aW9uXG4gICAgaWYgKGZpcnN0Tm9uQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZmlyc3ROb25BY3RpdmVcbiAgICB9XG5cbiAgICAvLyBmaW5kIGFueSBtb3VzZSBvciBwZW4gaW50ZXJhY3Rpb24uXG4gICAgLy8gaWdub3JlIHRoZSBpbnRlcmFjdGlvbiBpZiB0aGUgZXZlbnRUeXBlIGlzIGEgKmRvd24sIGFuZCBhIHNpbXVsYXRpb25cbiAgICAvLyBpcyBhY3RpdmVcbiAgICBmb3IgKGNvbnN0IGludGVyYWN0aW9uIG9mIHNjb3BlLmludGVyYWN0aW9ucy5saXN0KSB7XG4gICAgICBpZiAoaW50ZXJhY3Rpb24ucG9pbnRlclR5cGUgPT09IHBvaW50ZXJUeXBlICYmICEoL2Rvd24vaS50ZXN0KGV2ZW50VHlwZSkgJiYgaW50ZXJhY3Rpb24uc2ltdWxhdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIGludGVyYWN0aW9uXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfSxcblxuICAvLyBnZXQgaW50ZXJhY3Rpb24gdGhhdCBoYXMgdGhpcyBwb2ludGVyXG4gIGhhc1BvaW50ZXIgKHsgcG9pbnRlcklkLCBzY29wZSB9KSB7XG4gICAgZm9yIChjb25zdCBpbnRlcmFjdGlvbiBvZiBzY29wZS5pbnRlcmFjdGlvbnMubGlzdCkge1xuICAgICAgaWYgKGhhc1BvaW50ZXJJZChpbnRlcmFjdGlvbiwgcG9pbnRlcklkKSkge1xuICAgICAgICByZXR1cm4gaW50ZXJhY3Rpb25cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgLy8gZ2V0IGZpcnN0IGlkbGUgaW50ZXJhY3Rpb24gd2l0aCBhIG1hdGNoaW5nIHBvaW50ZXJUeXBlXG4gIGlkbGUgKHsgcG9pbnRlclR5cGUsIHNjb3BlIH0pIHtcbiAgICBmb3IgKGNvbnN0IGludGVyYWN0aW9uIG9mIHNjb3BlLmludGVyYWN0aW9ucy5saXN0KSB7XG4gICAgICAvLyBpZiB0aGVyZSdzIGFscmVhZHkgYSBwb2ludGVyIGhlbGQgZG93blxuICAgICAgaWYgKGludGVyYWN0aW9uLnBvaW50ZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpbnRlcmFjdGlvbi50YXJnZXRcbiAgICAgICAgLy8gZG9uJ3QgYWRkIHRoaXMgcG9pbnRlciBpZiB0aGVyZSBpcyBhIHRhcmdldCBpbnRlcmFjdGFibGUgYW5kIGl0XG4gICAgICAgIC8vIGlzbid0IGdlc3R1cmFibGVcbiAgICAgICAgaWYgKHRhcmdldCAmJiAhdGFyZ2V0Lm9wdGlvbnMuZ2VzdHVyZS5lbmFibGVkKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gbWF4aW11bSBvZiAyIHBvaW50ZXJzIHBlciBpbnRlcmFjdGlvblxuICAgICAgZWxzZSBpZiAoaW50ZXJhY3Rpb24ucG9pbnRlcnMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKCFpbnRlcmFjdGlvbi5pbnRlcmFjdGluZygpICYmIChwb2ludGVyVHlwZSA9PT0gaW50ZXJhY3Rpb24ucG9pbnRlclR5cGUpKSB7XG4gICAgICAgIHJldHVybiBpbnRlcmFjdGlvblxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH0sXG59XG5cbmZ1bmN0aW9uIGhhc1BvaW50ZXJJZCAoaW50ZXJhY3Rpb24sIHBvaW50ZXJJZCkge1xuICByZXR1cm4gdXRpbHMuYXJyLnNvbWUoaW50ZXJhY3Rpb24ucG9pbnRlcnMsICh7IGlkIH0pID0+IGlkID09PSBwb2ludGVySWQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZpbmRlclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Rpb25GaW5kZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnRlcmFjdGlvbkZpbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLFNBQVMsQ0FBQTtBQVloQyxNQUFNLE1BQU0sR0FBRztJQUNiLFdBQVcsRUFBRSxDQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFFO0lBRXZFLE1BQU0sQ0FBRSxPQUFPO1FBQ2IsS0FBSyxNQUFNLE1BQU0sSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQ3ZDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUUzQyxJQUFJLFdBQVcsRUFBRTtnQkFDZixPQUFPLFdBQVcsQ0FBQTthQUNuQjtTQUNGO0lBQ0gsQ0FBQztJQUVELDhDQUE4QztJQUM5QyxnQkFBZ0IsQ0FBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBaUI7UUFDN0UsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDbEMsT0FBTyxJQUFJLENBQUE7U0FDWjtRQUVELEtBQUssTUFBTSxXQUFXLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUU7WUFDakQsSUFBSSxPQUFPLEdBQUcsV0FBVyxDQUFBO1lBRXpCLElBQUksV0FBVyxDQUFDLFVBQVUsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLFdBQVc7Z0JBQzVELENBQUMsV0FBVyxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQUMsRUFBRTtnQkFDN0MsT0FBTyxPQUFPLEVBQUU7b0JBQ2QsNENBQTRDO29CQUM1QyxJQUFJLE9BQU8sS0FBSyxXQUFXLENBQUMsT0FBTyxFQUFFO3dCQUNuQyxPQUFPLFdBQVcsQ0FBQTtxQkFDbkI7b0JBQ0QsT0FBTyxHQUFHLEtBQUssQ0FBQyxH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QUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFBO0FBQzNFLENBQUM7QUFFRCxlQUFlLE1BQU0sQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vaW5kZXgnXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoRGV0YWlscyB7XG4gIHBvaW50ZXI6IEludGVyYWN0LlBvaW50ZXJUeXBlXG4gIHBvaW50ZXJJZDogbnVtYmVyXG4gIHBvaW50ZXJUeXBlOiBzdHJpbmdcbiAgZXZlbnRUeXBlOiBzdHJpbmdcbiAgZXZlbnRUYXJnZXQ6IFdpbmRvdyB8IERvY3VtZW50IHwgRWxlbWVudFxuICBjdXJFdmVudFRhcmdldDogV2luZG93IHwgRG9jdW1lbnQgfCBFbGVtZW50XG4gIHNjb3BlOiBJbnRlcmFjdC5TY29wZVxufVxuXG5jb25zdCBmaW5kZXIgPSB7XG4gIG1ldGhvZE9yZGVyOiBbICdzaW11bGF0aW9uUmVzdW1lJywgJ21vdXNlT3JQZW4nLCAnaGFzUG9pbnRlcicsICdpZGxlJyBdLFxuXG4gIHNlYXJjaCAoZGV0YWlscykge1xuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGZpbmRlci5tZXRob2RPcmRlcikge1xuICAgICAgY29uc3QgaW50ZXJhY3Rpb24gPSBmaW5kZXJbbWV0aG9kXShkZXRhaWxzKVxuXG4gICAgICBpZiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGludGVyYWN0aW9uXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8vIHRyeSB0byByZXN1bWUgc2ltdWxhdGlvbiB3aXRoIGEgbmV3IHBvaW50ZXJcbiAgc2ltdWxhdGlvblJlc3VtZSAoeyBwb2ludGVyVHlwZSwgZXZlbnRUeXBlLCBldmVudFRhcmdldCwgc2NvcGUgfTogU2VhcmNoRGV0YWlscykge1xuICAgIGlmICghL2Rvd258c3RhcnQvaS50ZXN0KGV2ZW50VHlwZSkpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpbnRlcmFjdGlvbiBvZiBzY29wZS5pbnRlcmFjdGlvbnMubGlzdCkge1xuICAgICAgbGV0IGVsZW1lbnQgPSBldmVudFRhcmdldFxuXG4gICAgICBpZiAoaW50ZXJhY3Rpb24uc2ltdWxhdGlvbiAmJiBpbnRlcmFjdGlvbi5zaW11bGF0aW9uLmFsbG93UmVzdW1lICYmXG4gICAgICAgICAgKGludGVyYWN0aW9uLnBvaW50ZXJUeXBlID09PSBwb2ludGVyVHlwZSkpIHtcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQpIHtcbiAgICAgICAgICAvLyBpZiB0aGUgZWxlbWVudCBpcyB0aGUgaW50ZXJhY3Rpb24gZWxlbWVudFxuICAgICAgICAgIGlmIChlbGVtZW50ID09PSBpbnRlcmFjdGlvbi5lbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gaW50ZXJhY3Rpb25cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxlbWVudCA9IHV0aWxzLmRvbS5wYXJlbnROb2RlKGVsZW1lbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9LFxuXG4gIC8vIGlmIGl0J3MgYSBtb3VzZSBvciBwZW4gaW50ZXJhY3Rpb25cbiAgbW91c2VPclBlbiAoeyBwb2ludGVySWQsIHBvaW50ZXJUeXBlLCBldmVudFR5cGUsIHNjb3BlIH06IFNlYXJjaERldGFpbHMpIHtcbiAgICBpZiAocG9pbnRlclR5cGUgIT09ICdtb3VzZScgJiYgcG9pbnRlclR5cGUgIT09ICdwZW4nKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGxldCBmaXJzdE5vbkFjdGl2ZVxuXG4gICAgZm9yIChjb25zdCBpbnRlcmFjdGlvbiBvZiBzY29wZS5pbnRlcmFjdGlvbnMubGlzdCkge1xuICAgICAgaWYgKGludGVyYWN0aW9uLnBvaW50ZXJUeXBlID09PSBwb2ludGVyVHlwZSkge1xuICAgICAgICAvLyBpZiBpdCdzIGEgZG93biBldmVudCwgc2tpcCBpbnRlcmFjdGlvbnMgd2l0aCBydW5uaW5nIHNpbXVsYXRpb25zXG4gICAgICAgIGlmIChpbnRlcmFjdGlvbi5zaW11bGF0aW9uICYmICFoYXNQb2ludGVySWQoaW50ZXJhY3Rpb24sIHBvaW50ZXJJZCkpIHsgY29udGludWUgfVxuXG4gICAgICAgIC8vIGlmIHRoZSBpbnRlcmFjdGlvbiBpcyBhY3RpdmUsIHJldHVybiBpdCBpbW1lZGlhdGVseVxuICAgICAgICBpZiAoaW50ZXJhY3Rpb24uaW50ZXJhY3RpbmcoKSkge1xuICAgICAgICAgIHJldHVybiBpbnRlcmFjdGlvblxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyd2lzZSBzYXZlIGl0IGFuZCBsb29rIGZvciBhbm90aGVyIGFjdGl2ZSBpbnRlcmFjdGlvblxuICAgICAgICBlbHNlIGlmICghZmlyc3ROb25BY3RpdmUpIHtcbiAgICAgICAgICBmaXJzdE5vbkFjdGl2ZSA9IGludGVyYWN0aW9uXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiBubyBhY3RpdmUgbW91c2UgaW50ZXJhY3Rpb24gd2FzIGZvdW5kIHVzZSB0aGUgZmlyc3QgaW5hY3RpdmUgbW91c2VcbiAgICAvLyBpbnRlcmFjdGlvblxuICAgIGlmIChmaXJzdE5vbkFjdGl2ZSkge1xuICAgICAgcmV0dXJuIGZpcnN0Tm9uQWN0aXZlXG4gICAgfVxuXG4gICAgLy8gZmluZCBhbnkgbW91c2Ugb3IgcGVuIGludGVyYWN0aW9uLlxuICAgIC8vIGlnbm9yZSB0aGUgaW50ZXJhY3Rpb24gaWYgdGhlIGV2ZW50VHlwZSBpcyBhICpkb3duLCBhbmQgYSBzaW11bGF0aW9uXG4gICAgLy8gaXMgYWN0aXZlXG4gICAgZm9yIChjb25zdCBpbnRlcmFjdGlvbiBvZiBzY29wZS5pbnRlcmFjdGlvbnMubGlzdCkge1xuICAgICAgaWYgKGludGVyYWN0aW9uLnBvaW50ZXJUeXBlID09PSBwb2ludGVyVHlwZSAmJiAhKC9kb3duL2kudGVzdChldmVudFR5cGUpICYmIGludGVyYWN0aW9uLnNpbXVsYXRpb24pKSB7XG4gICAgICAgIHJldHVybiBpbnRlcmFjdGlvblxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH0sXG5cbiAgLy8gZ2V0IGludGVyYWN0aW9uIHRoYXQgaGFzIHRoaXMgcG9pbnRlclxuICBoYXNQb2ludGVyICh7IHBvaW50ZXJJZCwgc2NvcGUgfTogU2VhcmNoRGV0YWlscykge1xuICAgIGZvciAoY29uc3QgaW50ZXJhY3Rpb24gb2Ygc2NvcGUuaW50ZXJhY3Rpb25zLmxpc3QpIHtcbiAgICAgIGlmIChoYXNQb2ludGVySWQoaW50ZXJhY3Rpb24sIHBvaW50ZXJJZCkpIHtcbiAgICAgICAgcmV0dXJuIGludGVyYWN0aW9uXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfSxcblxuICAvLyBnZXQgZmlyc3QgaWRsZSBpbnRlcmFjdGlvbiB3aXRoIGEgbWF0Y2hpbmcgcG9pbnRlclR5cGVcbiAgaWRsZSAoeyBwb2ludGVyVHlwZSwgc2NvcGUgfTogU2VhcmNoRGV0YWlscykge1xuICAgIGZvciAoY29uc3QgaW50ZXJhY3Rpb24gb2Ygc2NvcGUuaW50ZXJhY3Rpb25zLmxpc3QpIHtcbiAgICAgIC8vIGlmIHRoZXJlJ3MgYWxyZWFkeSBhIHBvaW50ZXIgaGVsZCBkb3duXG4gICAgICBpZiAoaW50ZXJhY3Rpb24ucG9pbnRlcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGludGVyYWN0aW9uLnRhcmdldFxuICAgICAgICAvLyBkb24ndCBhZGQgdGhpcyBwb2ludGVyIGlmIHRoZXJlIGlzIGEgdGFyZ2V0IGludGVyYWN0YWJsZSBhbmQgaXRcbiAgICAgICAgLy8gaXNuJ3QgZ2VzdHVyYWJsZVxuICAgICAgICBpZiAodGFyZ2V0ICYmICF0YXJnZXQub3B0aW9ucy5nZXN0dXJlLmVuYWJsZWQpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBtYXhpbXVtIG9mIDIgcG9pbnRlcnMgcGVyIGludGVyYWN0aW9uXG4gICAgICBlbHNlIGlmIChpbnRlcmFjdGlvbi5wb2ludGVycy5sZW5ndGggPj0gMikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoIWludGVyYWN0aW9uLmludGVyYWN0aW5nKCkgJiYgKHBvaW50ZXJUeXBlID09PSBpbnRlcmFjdGlvbi5wb2ludGVyVHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIGludGVyYWN0aW9uXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfSxcbn1cblxuZnVuY3Rpb24gaGFzUG9pbnRlcklkIChpbnRlcmFjdGlvbiwgcG9pbnRlcklkKSB7XG4gIHJldHVybiB1dGlscy5hcnIuc29tZShpbnRlcmFjdGlvbi5wb2ludGVycywgKHsgaWQgfSkgPT4gaWQgPT09IHBvaW50ZXJJZClcbn1cblxuZXhwb3J0IGRlZmF1bHQgZmluZGVyXG4iXX0= \ No newline at end of file diff --git a/packages/utils/package.json b/packages/utils/package.json index a3abff1a9..4daeec09f 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,8 +1,8 @@ { "name": "@interactjs/utils", - "version": "1.4.0-alpha.27+sha.12b8f8f", + "version": "1.4.0-alpha.28+sha.e624c4d", "devDependencies": { - "@interactjs/_dev": "1.4.0-alpha.27+sha.12b8f8f" + "@interactjs/_dev": "1.4.0-alpha.28+sha.e624c4d" }, "publishConfig": { "access": "public" diff --git a/packages/utils/pointerUtils.d.ts b/packages/utils/pointerUtils.d.ts index b7666f0fd..eb401cba2 100644 --- a/packages/utils/pointerUtils.d.ts +++ b/packages/utils/pointerUtils.d.ts @@ -5,7 +5,7 @@ declare const pointerUtils: { setCoordVelocity(targetObj: any, delta: any): void; isNativePointer(pointer: any): boolean; getXY(type: any, pointer: any, xy: any): any; - getPageXY(pointer: import("../types").PointerType, page?: import("../types").Point): import("../types").Point; + getPageXY(pointer: import("../types/types").PointerType, page?: import("../types/types").Point): import("../types/types").Point; getClientXY(pointer: any, client: any): any; getPointerId(pointer: any): any; setCoords(targetObj: any, pointers: any[], timeStamp?: number): void; @@ -19,11 +19,13 @@ declare const pointerUtils: { screenX: number; screenY: number; }; - touchBBox(event: Event | PointerEvent[]): { + touchBBox(event: Event | (Touch | MouseEvent | PointerEvent | TouchEvent | import("@interactjs/core/InteractEvent").InteractEvent)[]): { x: number; y: number; left: number; top: number; + right: number; + bottom: number; width: number; height: number; }; @@ -42,11 +44,7 @@ declare const pointerUtils: { }; timeStamp: number; }; - coordsToEvent({ page, client, timeStamp }: { - page: any; - client: any; - timeStamp: any; - }): { + coordsToEvent({ page, client, timeStamp }: any): { page: any; client: any; timeStamp: any; diff --git a/packages/utils/pointerUtils.js b/packages/utils/pointerUtils.js index 029b3e916..d89828296 100644 --- a/packages/utils/pointerUtils.js +++ b/packages/utils/pointerUtils.js @@ -142,6 +142,8 @@ const pointerUtils = { y: minY, left: minX, top: minY, + right: maxX, + bottom: maxY, width: maxX - minX, height: maxY - minY, }; @@ -202,4 +204,4 @@ const pointerUtils = { }, }; export default pointerUtils; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRlclV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicG9pbnRlclV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sT0FBTyxNQUFNLFdBQVcsQ0FBQTtBQUMvQixPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUE7QUFDOUIsT0FBTyxLQUFLLFFBQVEsTUFBTSxZQUFZLENBQUE7QUFDdEMsT0FBTyxLQUFLLE1BQU0sU0FBUyxDQUFBO0FBQzNCLE9BQU8sS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzFCLE9BQU8sYUFBYSxNQUFNLGlCQUFpQixDQUFBO0FBRTNDLE1BQU0sWUFBWSxHQUFHO0lBQ25CLFVBQVUsQ0FBRSxJQUFJLEVBQUUsR0FBRztRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFBO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRXhCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUE7UUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFFNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFBO0lBQ2hDLENBQUM7SUFFRCxjQUFjLENBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHO1FBQ2xDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFNLElBQUks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QUM7Q0FDRixDQUFBO0FBRUQsZUFBZSxZQUFZLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYnJvd3NlciBmcm9tICcuL2Jyb3dzZXInXG5pbXBvcnQgZG9tIGZyb20gJy4vZG9tT2JqZWN0cydcbmltcG9ydCAqIGFzIGRvbVV0aWxzIGZyb20gJy4vZG9tVXRpbHMnXG5pbXBvcnQgaHlwb3QgZnJvbSAnLi9oeXBvdCdcbmltcG9ydCAqIGFzIGlzIGZyb20gJy4vaXMnXG5pbXBvcnQgcG9pbnRlckV4dGVuZCBmcm9tICcuL3BvaW50ZXJFeHRlbmQnXG5cbmNvbnN0IHBvaW50ZXJVdGlscyA9IHtcbiAgY29weUNvb3JkcyAoZGVzdCwgc3JjKSB7XG4gICAgZGVzdC5wYWdlID0gZGVzdC5wYWdlIHx8IHt9XG4gICAgZGVzdC5wYWdlLnggPSBzcmMucGFnZS54XG4gICAgZGVzdC5wYWdlLnkgPSBzcmMucGFnZS55XG5cbiAgICBkZXN0LmNsaWVudCA9IGRlc3QuY2xpZW50IHx8IHt9XG4gICAgZGVzdC5jbGllbnQueCA9IHNyYy5jbGllbnQueFxuICAgIGRlc3QuY2xpZW50LnkgPSBzcmMuY2xpZW50LnlcblxuICAgIGRlc3QudGltZVN0YW1wID0gc3JjLnRpbWVTdGFtcFxuICB9LFxuXG4gIHNldENvb3JkRGVsdGFzICh0YXJnZXRPYmosIHByZXYsIGN1cikge1xuICAgIHRhcmdldE9iai5wYWdlLnggICAgPSBjdXIucGFnZS54ICAgIC0gcHJldi5wYWdlLnhcbiAgICB0YXJnZXRPYmoucGFnZS55ICAgID0gY3VyLnBhZ2UueSAgICAtIHByZXYucGFnZS55XG4gICAgdGFyZ2V0T2JqLmNsaWVudC54ICA9IGN1ci5jbGllbnQueCAgLSBwcmV2LmNsaWVudC54XG4gICAgdGFyZ2V0T2JqLmNsaWVudC55ICA9IGN1ci5jbGllbnQueSAgLSBwcmV2LmNsaWVudC55XG4gICAgdGFyZ2V0T2JqLnRpbWVTdGFtcCA9IGN1ci50aW1lU3RhbXAgLSBwcmV2LnRpbWVTdGFtcFxuICB9LFxuXG4gIHNldENvb3JkVmVsb2NpdHkgKHRhcmdldE9iaiwgZGVsdGEpIHtcbiAgICBjb25zdCBkdCA9IE1hdGgubWF4KGRlbHRhLnRpbWVTdGFtcCAvIDEwMDAsIDAuMDAxKVxuXG4gICAgdGFyZ2V0T2JqLnBhZ2UueCAgID0gZGVsdGEucGFnZS54IC8gZHRcbiAgICB0YXJnZXRPYmoucGFnZS55ICAgPSBkZWx0YS5wYWdlLnkgLyBkdFxuICAgIHRhcmdldE9iai5jbGllbnQueCA9IGRlbHRhLmNsaWVudC54IC8gZHRcbiAgICB0YXJnZXRPYmouY2xpZW50LnkgPSBkZWx0YS5jbGllbnQueSAvIGR0XG4gICAgdGFyZ2V0T2JqLnRpbWVTdGFtcCA9IGR0XG4gIH0sXG5cbiAgaXNOYXRpdmVQb2ludGVyICAocG9pbnRlcikge1xuICAgIHJldHVybiAocG9pbnRlciBpbnN0YW5jZW9mIGRvbS5FdmVudCB8fCBwb2ludGVyIGluc3RhbmNlb2YgZG9tLlRvdWNoKVxuICB9LFxuXG4gIC8vIEdldCBzcGVjaWZpZWQgWC9ZIGNvb3JkcyBmb3IgbW91c2Ugb3IgZXZlbnQudG91Y2hlc1swXVxuICBnZXRYWSAodHlwZSwgcG9pbnRlciwgeHkpIHtcbiAgICB4eSA9IHh5IHx8IHt9XG4gICAgdHlwZSA9IHR5cGUgfHwgJ3BhZ2UnXG5cbiAgICB4eS54ID0gcG9pbnRlclt0eXBlICsgJ1gnXVxuICAgIHh5LnkgPSBwb2ludGVyW3R5cGUgKyAnWSddXG5cbiAgICByZXR1cm4geHlcbiAgfSxcblxuICBnZXRQYWdlWFkgKHBvaW50ZXI6IEludGVyYWN0LlBvaW50ZXJUeXBlIHwgSW50ZXJhY3QuSW50ZXJhY3RFdmVudCwgcGFnZT86IEludGVyYWN0LlBvaW50KSB7XG4gICAgcGFnZSA9IHBhZ2UgfHwgeyB4OiAwLCB5OiAwIH1cblxuICAgIC8vIE9wZXJhIE1vYmlsZSBoYW5kbGVzIHRoZSB2aWV3cG9ydCBhbmQgc2Nyb2xsaW5nIG9kZGx5XG4gICAgaWYgKGJyb3dzZXIuaXNPcGVyYU1vYmlsZSAmJiBwb2ludGVyVXRpbHMuaXNOYXRpdmVQb2ludGVyKHBvaW50ZXIpKSB7XG4gICAgICBwb2ludGVyVXRpbHMuZ2V0WFkoJ3NjcmVlbicsIHBvaW50ZXIsIHBhZ2UpXG5cbiAgICAgIHBhZ2UueCArPSB3aW5kb3cuc2Nyb2xsWFxuICAgICAgcGFnZS55ICs9IHdpbmRvdy5zY3JvbGxZXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcG9pbnRlclV0aWxzLmdldFhZKCdwYWdlJywgcG9pbnRlciwgcGFnZSlcbiAgICB9XG5cbiAgICByZXR1cm4gcGFnZVxuICB9LFxuXG4gIGdldENsaWVudFhZIChwb2ludGVyLCBjbGllbnQpIHtcbiAgICBjbGllbnQgPSBjbGllbnQgfHwge31cblxuICAgIGlmIChicm93c2VyLmlzT3BlcmFNb2JpbGUgJiYgcG9pbnRlclV0aWxzLmlzTmF0aXZlUG9pbnRlcihwb2ludGVyKSkge1xuICAgICAgLy8gT3BlcmEgTW9iaWxlIGhhbmRsZXMgdGhlIHZpZXdwb3J0IGFuZCBzY3JvbGxpbmcgb2RkbHlcbiAgICAgIHBvaW50ZXJVdGlscy5nZXRYWSgnc2NyZWVuJywgcG9pbnRlciwgY2xpZW50KVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHBvaW50ZXJVdGlscy5nZXRYWSgnY2xpZW50JywgcG9pbnRlciwgY2xpZW50KVxuICAgIH1cblxuICAgIHJldHVybiBjbGllbnRcbiAgfSxcblxuICBnZXRQb2ludGVySWQgKHBvaW50ZXIpIHtcbiAgICByZXR1cm4gaXMubnVtYmVyKHBvaW50ZXIucG9pbnRlcklkKSA/IHBvaW50ZXIucG9pbnRlcklkIDogcG9pbnRlci5pZGVudGlmaWVyXG4gIH0sXG5cbiAgc2V0Q29vcmRzICh0YXJnZXRPYmosIHBvaW50ZXJzOiBhbnlbXSwgdGltZVN0YW1wPzogbnVtYmVyKSB7XG4gICAgY29uc3QgcG9pbnRlciA9IChwb2ludGVycy5sZW5ndGggPiAxXG4gICAgICA/IHBvaW50ZXJVdGlscy5wb2ludGVyQXZlcmFnZShwb2ludGVycylcbiAgICAgIDogcG9pbnRlcnNbMF0pXG5cbiAgICBjb25zdCB0bXBYWSA9IHt9IGFzIHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfVxuXG4gICAgcG9pbnRlclV0aWxzLmdldFBhZ2VYWShwb2ludGVyLCB0bXBYWSlcbiAgICB0YXJnZXRPYmoucGFnZS54ID0gdG1wWFkueFxuICAgIHRhcmdldE9iai5wYWdlLnkgPSB0bXBYWS55XG5cbiAgICBwb2ludGVyVXRpbHMuZ2V0Q2xpZW50WFkocG9pbnRlciwgdG1wWFkpXG4gICAgdGFyZ2V0T2JqLmNsaWVudC54ID0gdG1wWFkueFxuICAgIHRhcmdldE9iai5jbGllbnQueSA9IHRtcFhZLnlcblxuICAgIHRhcmdldE9iai50aW1lU3RhbXAgPSBpcy5udW1iZXIodGltZVN0YW1wKSA/IHRpbWVTdGFtcCA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gIH0sXG5cbiAgcG9pbnRlckV4dGVuZCxcblxuICBnZXRUb3VjaFBhaXIgKGV2ZW50KSB7XG4gICAgY29uc3QgdG91Y2hlcyA9IFtdXG5cbiAgICAvLyBhcnJheSBvZiB0b3VjaGVzIGlzIHN1cHBsaWVkXG4gICAgaWYgKGlzLmFycmF5KGV2ZW50KSkge1xuICAgICAgdG91Y2hlc1swXSA9IGV2ZW50WzBdXG4gICAgICB0b3VjaGVzWzFdID0gZXZlbnRbMV1cbiAgICB9XG4gICAgLy8gYW4gZXZlbnRcbiAgICBlbHNlIHtcbiAgICAgIGlmIChldmVudC50eXBlID09PSAndG91Y2hlbmQnKSB7XG4gICAgICAgIGlmIChldmVudC50b3VjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRvdWNoZXNbMF0gPSBldmVudC50b3VjaGVzWzBdXG4gICAgICAgICAgdG91Y2hlc1sxXSA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0b3VjaGVzWzBdID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF1cbiAgICAgICAgICB0b3VjaGVzWzFdID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMV1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRvdWNoZXNbMF0gPSBldmVudC50b3VjaGVzWzBdXG4gICAgICAgIHRvdWNoZXNbMV0gPSBldmVudC50b3VjaGVzWzFdXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvdWNoZXNcbiAgfSxcblxuICBwb2ludGVyQXZlcmFnZSAocG9pbnRlcnM6IFBvaW50ZXJFdmVudFtdIHwgRXZlbnRbXSkge1xuICAgIGNvbnN0IGF2ZXJhZ2UgPSB7XG4gICAgICBwYWdlWCAgOiAwLFxuICAgICAgcGFnZVkgIDogMCxcbiAgICAgIGNsaWVudFg6IDAsXG4gICAgICBjbGllbnRZOiAwLFxuICAgICAgc2NyZWVuWDogMCxcbiAgICAgIHNjcmVlblk6IDAsXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwb2ludGVyIG9mIHBvaW50ZXJzKSB7XG4gICAgICBmb3IgKGNvbnN0IHByb3AgaW4gYXZlcmFnZSkge1xuICAgICAgICBhdmVyYWdlW3Byb3BdICs9IHBvaW50ZXJbcHJvcF1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBwcm9wIGluIGF2ZXJhZ2UpIHtcbiAgICAgIGF2ZXJhZ2VbcHJvcF0gLz0gcG9pbnRlcnMubGVuZ3RoXG4gICAgfVxuXG4gICAgcmV0dXJuIGF2ZXJhZ2VcbiAgfSxcblxuICB0b3VjaEJCb3ggKGV2ZW50OiBFdmVudCB8IFBvaW50ZXJFdmVudFtdKSB7XG4gICAgaWYgKCEoZXZlbnQgYXMgYW55KS5sZW5ndGggJiZcbiAgICAgICAgISgoZXZlbnQgYXMgVG91Y2hFdmVudCkudG91Y2hlcyAmJlxuICAgICAgICAgIChldmVudCBhcyBUb3VjaEV2ZW50KS50b3VjaGVzLmxlbmd0aCA+IDEpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IHRvdWNoZXMgPSBwb2ludGVyVXRpbHMuZ2V0VG91Y2hQYWlyKGV2ZW50KVxuICAgIGNvbnN0IG1pblggPSBNYXRoLm1pbih0b3VjaGVzWzBdLnBhZ2VYLCB0b3VjaGVzWzFdLnBhZ2VYKVxuICAgIGNvbnN0IG1pblkgPSBNYXRoLm1pbih0b3VjaGVzWzBdLnBhZ2VZLCB0b3VjaGVzWzFdLnBhZ2VZKVxuICAgIGNvbnN0IG1heFggPSBNYXRoLm1heCh0b3VjaGVzWzBdLnBhZ2VYLCB0b3VjaGVzWzFdLnBhZ2VYKVxuICAgIGNvbnN0IG1heFkgPSBNYXRoLm1heCh0b3VjaGVzWzBdLnBhZ2VZLCB0b3VjaGVzWzFdLnBhZ2VZKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IG1pblgsXG4gICAgICB5OiBtaW5ZLFxuICAgICAgbGVmdDogbWluWCxcbiAgICAgIHRvcDogbWluWSxcbiAgICAgIHdpZHRoOiBtYXhYIC0gbWluWCxcbiAgICAgIGhlaWdodDogbWF4WSAtIG1pblksXG4gICAgfVxuICB9LFxuXG4gIHRvdWNoRGlzdGFuY2UgKGV2ZW50LCBkZWx0YVNvdXJjZSkge1xuICAgIGNvbnN0IHNvdXJjZVggPSBkZWx0YVNvdXJjZSArICdYJ1xuICAgIGNvbnN0IHNvdXJjZVkgPSBkZWx0YVNvdXJjZSArICdZJ1xuICAgIGNvbnN0IHRvdWNoZXMgPSBwb2ludGVyVXRpbHMuZ2V0VG91Y2hQYWlyKGV2ZW50KVxuXG4gICAgY29uc3QgZHggPSB0b3VjaGVzWzBdW3NvdXJjZVhdIC0gdG91Y2hlc1sxXVtzb3VyY2VYXVxuICAgIGNvbnN0IGR5ID0gdG91Y2hlc1swXVtzb3VyY2VZXSAtIHRvdWNoZXNbMV1bc291cmNlWV1cblxuICAgIHJldHVybiBoeXBvdChkeCwgZHkpXG4gIH0sXG5cbiAgdG91Y2hBbmdsZSAoZXZlbnQsIGRlbHRhU291cmNlKSB7XG4gICAgY29uc3Qgc291cmNlWCA9IGRlbHRhU291cmNlICsgJ1gnXG4gICAgY29uc3Qgc291cmNlWSA9IGRlbHRhU291cmNlICsgJ1knXG4gICAgY29uc3QgdG91Y2hlcyA9IHBvaW50ZXJVdGlscy5nZXRUb3VjaFBhaXIoZXZlbnQpXG4gICAgY29uc3QgZHggPSB0b3VjaGVzWzFdW3NvdXJjZVhdIC0gdG91Y2hlc1swXVtzb3VyY2VYXVxuICAgIGNvbnN0IGR5ID0gdG91Y2hlc1sxXVtzb3VyY2VZXSAtIHRvdWNoZXNbMF1bc291cmNlWV1cbiAgICBjb25zdCBhbmdsZSA9IDE4MCAqIE1hdGguYXRhbjIoZHksIGR4KSAvIE1hdGguUElcblxuICAgIHJldHVybiAgYW5nbGVcbiAgfSxcblxuICBnZXRQb2ludGVyVHlwZSAocG9pbnRlcikge1xuICAgIHJldHVybiBpcy5zdHJpbmcocG9pbnRlci5wb2ludGVyVHlwZSlcbiAgICAgID8gcG9pbnRlci5wb2ludGVyVHlwZVxuICAgICAgOiBpcy5udW1iZXIocG9pbnRlci5wb2ludGVyVHlwZSlcbiAgICAgICAgPyBbdW5kZWZpbmVkLCB1bmRlZmluZWQsICd0b3VjaCcsICdwZW4nLCAnbW91c2UnXVtwb2ludGVyLnBvaW50ZXJUeXBlXVxuICAgICAgICAvLyBpZiB0aGUgUG9pbnRlckV2ZW50IEFQSSBpc24ndCBhdmFpbGFibGUsIHRoZW4gdGhlIFwicG9pbnRlclwiIG11c3RcbiAgICAgICAgLy8gYmUgZWl0aGVyIGEgTW91c2VFdmVudCwgVG91Y2hFdmVudCwgb3IgVG91Y2ggb2JqZWN0XG4gICAgICAgIDogL3RvdWNoLy50ZXN0KHBvaW50ZXIudHlwZSkgfHwgcG9pbnRlciBpbnN0YW5jZW9mIGRvbS5Ub3VjaFxuICAgICAgICAgID8gJ3RvdWNoJ1xuICAgICAgICAgIDogJ21vdXNlJ1xuICB9LFxuXG4gIC8vIFsgZXZlbnQudGFyZ2V0LCBldmVudC5jdXJyZW50VGFyZ2V0IF1cbiAgZ2V0RXZlbnRUYXJnZXRzIChldmVudCkge1xuICAgIGNvbnN0IHBhdGggPSBpcy5mdW5jKGV2ZW50LmNvbXBvc2VkUGF0aCkgPyBldmVudC5jb21wb3NlZFBhdGgoKSA6IGV2ZW50LnBhdGhcblxuICAgIHJldHVybiBbXG4gICAgICBkb21VdGlscy5nZXRBY3R1YWxFbGVtZW50KHBhdGggPyBwYXRoWzBdIDogZXZlbnQudGFyZ2V0KSxcbiAgICAgIGRvbVV0aWxzLmdldEFjdHVhbEVsZW1lbnQoZXZlbnQuY3VycmVudFRhcmdldCksXG4gICAgXVxuICB9LFxuXG4gIG5ld0Nvb3JkcyAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2UgICAgIDogeyB4OiAwLCB5OiAwIH0sXG4gICAgICBjbGllbnQgICA6IHsgeDogMCwgeTogMCB9LFxuICAgICAgdGltZVN0YW1wOiAwLFxuICAgIH1cbiAgfSxcblxuICBjb29yZHNUb0V2ZW50ICh7IHBhZ2UsIGNsaWVudCwgdGltZVN0YW1wIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZSxcbiAgICAgIGNsaWVudCxcbiAgICAgIHRpbWVTdGFtcCxcbiAgICAgIGdldCBwYWdlWCAoKSB7IHJldHVybiBwYWdlLnggfSxcbiAgICAgIGdldCBwYWdlWSAoKSB7IHJldHVybiBwYWdlLnkgfSxcbiAgICAgIGdldCBjbGllbnRYICgpIHsgcmV0dXJuIGNsaWVudC54IH0sXG4gICAgICBnZXQgY2xpZW50WSAoKSB7IHJldHVybiBjbGllbnQueSB9LFxuICAgIH1cbiAgfSxcbn1cblxuZXhwb3J0IGRlZmF1bHQgcG9pbnRlclV0aWxzXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRlclV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicG9pbnRlclV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sT0FBTyxNQUFNLFdBQVcsQ0FBQTtBQUMvQixPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUE7QUFDOUIsT0FBTyxLQUFLLFFBQVEsTUFBTSxZQUFZLENBQUE7QUFDdEMsT0FBTyxLQUFLLE1BQU0sU0FBUyxDQUFBO0FBQzNCLE9BQU8sS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzFCLE9BQU8sYUFBYSxNQUFNLGlCQUFpQixDQUFBO0FBRTNDLE1BQU0sWUFBWSxHQUFHO0lBQ25CLFVBQVUsQ0FBRSxJQUFJLEVBQUUsR0FBRztRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFBO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRXhCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUE7UUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFFNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFBO0lBQ2hDLENBQUM7SUFFRCxjQUFjLENBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHO1FBQ2xDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFNLElBQUks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QyxDQUFDLENBQUEsQ0FBQyxDQUFDO1NBQ25DLENBQUE7SUFDSCxDQUFDO0NBQ0YsQ0FBQTtBQUVELGVBQWUsWUFBWSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi9icm93c2VyJ1xuaW1wb3J0IGRvbSBmcm9tICcuL2RvbU9iamVjdHMnXG5pbXBvcnQgKiBhcyBkb21VdGlscyBmcm9tICcuL2RvbVV0aWxzJ1xuaW1wb3J0IGh5cG90IGZyb20gJy4vaHlwb3QnXG5pbXBvcnQgKiBhcyBpcyBmcm9tICcuL2lzJ1xuaW1wb3J0IHBvaW50ZXJFeHRlbmQgZnJvbSAnLi9wb2ludGVyRXh0ZW5kJ1xuXG5jb25zdCBwb2ludGVyVXRpbHMgPSB7XG4gIGNvcHlDb29yZHMgKGRlc3QsIHNyYykge1xuICAgIGRlc3QucGFnZSA9IGRlc3QucGFnZSB8fCB7fVxuICAgIGRlc3QucGFnZS54ID0gc3JjLnBhZ2UueFxuICAgIGRlc3QucGFnZS55ID0gc3JjLnBhZ2UueVxuXG4gICAgZGVzdC5jbGllbnQgPSBkZXN0LmNsaWVudCB8fCB7fVxuICAgIGRlc3QuY2xpZW50LnggPSBzcmMuY2xpZW50LnhcbiAgICBkZXN0LmNsaWVudC55ID0gc3JjLmNsaWVudC55XG5cbiAgICBkZXN0LnRpbWVTdGFtcCA9IHNyYy50aW1lU3RhbXBcbiAgfSxcblxuICBzZXRDb29yZERlbHRhcyAodGFyZ2V0T2JqLCBwcmV2LCBjdXIpIHtcbiAgICB0YXJnZXRPYmoucGFnZS54ICAgID0gY3VyLnBhZ2UueCAgICAtIHByZXYucGFnZS54XG4gICAgdGFyZ2V0T2JqLnBhZ2UueSAgICA9IGN1ci5wYWdlLnkgICAgLSBwcmV2LnBhZ2UueVxuICAgIHRhcmdldE9iai5jbGllbnQueCAgPSBjdXIuY2xpZW50LnggIC0gcHJldi5jbGllbnQueFxuICAgIHRhcmdldE9iai5jbGllbnQueSAgPSBjdXIuY2xpZW50LnkgIC0gcHJldi5jbGllbnQueVxuICAgIHRhcmdldE9iai50aW1lU3RhbXAgPSBjdXIudGltZVN0YW1wIC0gcHJldi50aW1lU3RhbXBcbiAgfSxcblxuICBzZXRDb29yZFZlbG9jaXR5ICh0YXJnZXRPYmosIGRlbHRhKSB7XG4gICAgY29uc3QgZHQgPSBNYXRoLm1heChkZWx0YS50aW1lU3RhbXAgLyAxMDAwLCAwLjAwMSlcblxuICAgIHRhcmdldE9iai5wYWdlLnggICA9IGRlbHRhLnBhZ2UueCAvIGR0XG4gICAgdGFyZ2V0T2JqLnBhZ2UueSAgID0gZGVsdGEucGFnZS55IC8gZHRcbiAgICB0YXJnZXRPYmouY2xpZW50LnggPSBkZWx0YS5jbGllbnQueCAvIGR0XG4gICAgdGFyZ2V0T2JqLmNsaWVudC55ID0gZGVsdGEuY2xpZW50LnkgLyBkdFxuICAgIHRhcmdldE9iai50aW1lU3RhbXAgPSBkdFxuICB9LFxuXG4gIGlzTmF0aXZlUG9pbnRlciAgKHBvaW50ZXIpIHtcbiAgICByZXR1cm4gKHBvaW50ZXIgaW5zdGFuY2VvZiBkb20uRXZlbnQgfHwgcG9pbnRlciBpbnN0YW5jZW9mIGRvbS5Ub3VjaClcbiAgfSxcblxuICAvLyBHZXQgc3BlY2lmaWVkIFgvWSBjb29yZHMgZm9yIG1vdXNlIG9yIGV2ZW50LnRvdWNoZXNbMF1cbiAgZ2V0WFkgKHR5cGUsIHBvaW50ZXIsIHh5KSB7XG4gICAgeHkgPSB4eSB8fCB7fVxuICAgIHR5cGUgPSB0eXBlIHx8ICdwYWdlJ1xuXG4gICAgeHkueCA9IHBvaW50ZXJbdHlwZSArICdYJ11cbiAgICB4eS55ID0gcG9pbnRlclt0eXBlICsgJ1knXVxuXG4gICAgcmV0dXJuIHh5XG4gIH0sXG5cbiAgZ2V0UGFnZVhZIChwb2ludGVyOiBJbnRlcmFjdC5Qb2ludGVyVHlwZSB8IEludGVyYWN0LkludGVyYWN0RXZlbnQsIHBhZ2U/OiBJbnRlcmFjdC5Qb2ludCkge1xuICAgIHBhZ2UgPSBwYWdlIHx8IHsgeDogMCwgeTogMCB9XG5cbiAgICAvLyBPcGVyYSBNb2JpbGUgaGFuZGxlcyB0aGUgdmlld3BvcnQgYW5kIHNjcm9sbGluZyBvZGRseVxuICAgIGlmIChicm93c2VyLmlzT3BlcmFNb2JpbGUgJiYgcG9pbnRlclV0aWxzLmlzTmF0aXZlUG9pbnRlcihwb2ludGVyKSkge1xuICAgICAgcG9pbnRlclV0aWxzLmdldFhZKCdzY3JlZW4nLCBwb2ludGVyLCBwYWdlKVxuXG4gICAgICBwYWdlLnggKz0gd2luZG93LnNjcm9sbFhcbiAgICAgIHBhZ2UueSArPSB3aW5kb3cuc2Nyb2xsWVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHBvaW50ZXJVdGlscy5nZXRYWSgncGFnZScsIHBvaW50ZXIsIHBhZ2UpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZ2VcbiAgfSxcblxuICBnZXRDbGllbnRYWSAocG9pbnRlciwgY2xpZW50KSB7XG4gICAgY2xpZW50ID0gY2xpZW50IHx8IHt9XG5cbiAgICBpZiAoYnJvd3Nlci5pc09wZXJhTW9iaWxlICYmIHBvaW50ZXJVdGlscy5pc05hdGl2ZVBvaW50ZXIocG9pbnRlcikpIHtcbiAgICAgIC8vIE9wZXJhIE1vYmlsZSBoYW5kbGVzIHRoZSB2aWV3cG9ydCBhbmQgc2Nyb2xsaW5nIG9kZGx5XG4gICAgICBwb2ludGVyVXRpbHMuZ2V0WFkoJ3NjcmVlbicsIHBvaW50ZXIsIGNsaWVudClcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBwb2ludGVyVXRpbHMuZ2V0WFkoJ2NsaWVudCcsIHBvaW50ZXIsIGNsaWVudClcbiAgICB9XG5cbiAgICByZXR1cm4gY2xpZW50XG4gIH0sXG5cbiAgZ2V0UG9pbnRlcklkIChwb2ludGVyKSB7XG4gICAgcmV0dXJuIGlzLm51bWJlcihwb2ludGVyLnBvaW50ZXJJZCkgPyBwb2ludGVyLnBvaW50ZXJJZCA6IHBvaW50ZXIuaWRlbnRpZmllclxuICB9LFxuXG4gIHNldENvb3JkcyAodGFyZ2V0T2JqLCBwb2ludGVyczogYW55W10sIHRpbWVTdGFtcD86IG51bWJlcikge1xuICAgIGNvbnN0IHBvaW50ZXIgPSAocG9pbnRlcnMubGVuZ3RoID4gMVxuICAgICAgPyBwb2ludGVyVXRpbHMucG9pbnRlckF2ZXJhZ2UocG9pbnRlcnMpXG4gICAgICA6IHBvaW50ZXJzWzBdKVxuXG4gICAgY29uc3QgdG1wWFkgPSB7fSBhcyB7IHg6IG51bWJlciwgeTogbnVtYmVyIH1cblxuICAgIHBvaW50ZXJVdGlscy5nZXRQYWdlWFkocG9pbnRlciwgdG1wWFkpXG4gICAgdGFyZ2V0T2JqLnBhZ2UueCA9IHRtcFhZLnhcbiAgICB0YXJnZXRPYmoucGFnZS55ID0gdG1wWFkueVxuXG4gICAgcG9pbnRlclV0aWxzLmdldENsaWVudFhZKHBvaW50ZXIsIHRtcFhZKVxuICAgIHRhcmdldE9iai5jbGllbnQueCA9IHRtcFhZLnhcbiAgICB0YXJnZXRPYmouY2xpZW50LnkgPSB0bXBYWS55XG5cbiAgICB0YXJnZXRPYmoudGltZVN0YW1wID0gaXMubnVtYmVyKHRpbWVTdGFtcCkgPyB0aW1lU3RhbXAgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICB9LFxuXG4gIHBvaW50ZXJFeHRlbmQsXG5cbiAgZ2V0VG91Y2hQYWlyIChldmVudCkge1xuICAgIGNvbnN0IHRvdWNoZXMgPSBbXVxuXG4gICAgLy8gYXJyYXkgb2YgdG91Y2hlcyBpcyBzdXBwbGllZFxuICAgIGlmIChpcy5hcnJheShldmVudCkpIHtcbiAgICAgIHRvdWNoZXNbMF0gPSBldmVudFswXVxuICAgICAgdG91Y2hlc1sxXSA9IGV2ZW50WzFdXG4gICAgfVxuICAgIC8vIGFuIGV2ZW50XG4gICAgZWxzZSB7XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3RvdWNoZW5kJykge1xuICAgICAgICBpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b3VjaGVzWzBdID0gZXZlbnQudG91Y2hlc1swXVxuICAgICAgICAgIHRvdWNoZXNbMV0gPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ZW50LnRvdWNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdG91Y2hlc1swXSA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdXG4gICAgICAgICAgdG91Y2hlc1sxXSA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzFdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0b3VjaGVzWzBdID0gZXZlbnQudG91Y2hlc1swXVxuICAgICAgICB0b3VjaGVzWzFdID0gZXZlbnQudG91Y2hlc1sxXVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b3VjaGVzXG4gIH0sXG5cbiAgcG9pbnRlckF2ZXJhZ2UgKHBvaW50ZXJzOiBQb2ludGVyRXZlbnRbXSB8IEV2ZW50W10pIHtcbiAgICBjb25zdCBhdmVyYWdlID0ge1xuICAgICAgcGFnZVggIDogMCxcbiAgICAgIHBhZ2VZICA6IDAsXG4gICAgICBjbGllbnRYOiAwLFxuICAgICAgY2xpZW50WTogMCxcbiAgICAgIHNjcmVlblg6IDAsXG4gICAgICBzY3JlZW5ZOiAwLFxuICAgIH1cblxuICAgIGZvciAoY29uc3QgcG9pbnRlciBvZiBwb2ludGVycykge1xuICAgICAgZm9yIChjb25zdCBwcm9wIGluIGF2ZXJhZ2UpIHtcbiAgICAgICAgYXZlcmFnZVtwcm9wXSArPSBwb2ludGVyW3Byb3BdXG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBhdmVyYWdlKSB7XG4gICAgICBhdmVyYWdlW3Byb3BdIC89IHBvaW50ZXJzLmxlbmd0aFxuICAgIH1cblxuICAgIHJldHVybiBhdmVyYWdlXG4gIH0sXG5cbiAgdG91Y2hCQm94IChldmVudDogRXZlbnQgfCBBcnJheTwoSW50ZXJhY3QuUG9pbnRlclR5cGUpIHwgVG91Y2hFdmVudD4pIHtcbiAgICBpZiAoIShldmVudCBhcyBhbnkpLmxlbmd0aCAmJlxuICAgICAgICAhKChldmVudCBhcyBUb3VjaEV2ZW50KS50b3VjaGVzICYmXG4gICAgICAgICAgKGV2ZW50IGFzIFRvdWNoRXZlbnQpLnRvdWNoZXMubGVuZ3RoID4gMSkpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3QgdG91Y2hlcyA9IHBvaW50ZXJVdGlscy5nZXRUb3VjaFBhaXIoZXZlbnQpXG4gICAgY29uc3QgbWluWCA9IE1hdGgubWluKHRvdWNoZXNbMF0ucGFnZVgsIHRvdWNoZXNbMV0ucGFnZVgpXG4gICAgY29uc3QgbWluWSA9IE1hdGgubWluKHRvdWNoZXNbMF0ucGFnZVksIHRvdWNoZXNbMV0ucGFnZVkpXG4gICAgY29uc3QgbWF4WCA9IE1hdGgubWF4KHRvdWNoZXNbMF0ucGFnZVgsIHRvdWNoZXNbMV0ucGFnZVgpXG4gICAgY29uc3QgbWF4WSA9IE1hdGgubWF4KHRvdWNoZXNbMF0ucGFnZVksIHRvdWNoZXNbMV0ucGFnZVkpXG5cbiAgICByZXR1cm4ge1xuICAgICAgeDogbWluWCxcbiAgICAgIHk6IG1pblksXG4gICAgICBsZWZ0OiBtaW5YLFxuICAgICAgdG9wOiBtaW5ZLFxuICAgICAgcmlnaHQ6IG1heFgsXG4gICAgICBib3R0b206IG1heFksXG4gICAgICB3aWR0aDogbWF4WCAtIG1pblgsXG4gICAgICBoZWlnaHQ6IG1heFkgLSBtaW5ZLFxuICAgIH1cbiAgfSxcblxuICB0b3VjaERpc3RhbmNlIChldmVudCwgZGVsdGFTb3VyY2UpIHtcbiAgICBjb25zdCBzb3VyY2VYID0gZGVsdGFTb3VyY2UgKyAnWCdcbiAgICBjb25zdCBzb3VyY2VZID0gZGVsdGFTb3VyY2UgKyAnWSdcbiAgICBjb25zdCB0b3VjaGVzID0gcG9pbnRlclV0aWxzLmdldFRvdWNoUGFpcihldmVudClcblxuICAgIGNvbnN0IGR4ID0gdG91Y2hlc1swXVtzb3VyY2VYXSAtIHRvdWNoZXNbMV1bc291cmNlWF1cbiAgICBjb25zdCBkeSA9IHRvdWNoZXNbMF1bc291cmNlWV0gLSB0b3VjaGVzWzFdW3NvdXJjZVldXG5cbiAgICByZXR1cm4gaHlwb3QoZHgsIGR5KVxuICB9LFxuXG4gIHRvdWNoQW5nbGUgKGV2ZW50LCBkZWx0YVNvdXJjZSkge1xuICAgIGNvbnN0IHNvdXJjZVggPSBkZWx0YVNvdXJjZSArICdYJ1xuICAgIGNvbnN0IHNvdXJjZVkgPSBkZWx0YVNvdXJjZSArICdZJ1xuICAgIGNvbnN0IHRvdWNoZXMgPSBwb2ludGVyVXRpbHMuZ2V0VG91Y2hQYWlyKGV2ZW50KVxuICAgIGNvbnN0IGR4ID0gdG91Y2hlc1sxXVtzb3VyY2VYXSAtIHRvdWNoZXNbMF1bc291cmNlWF1cbiAgICBjb25zdCBkeSA9IHRvdWNoZXNbMV1bc291cmNlWV0gLSB0b3VjaGVzWzBdW3NvdXJjZVldXG4gICAgY29uc3QgYW5nbGUgPSAxODAgKiBNYXRoLmF0YW4yKGR5LCBkeCkgLyBNYXRoLlBJXG5cbiAgICByZXR1cm4gIGFuZ2xlXG4gIH0sXG5cbiAgZ2V0UG9pbnRlclR5cGUgKHBvaW50ZXIpIHtcbiAgICByZXR1cm4gaXMuc3RyaW5nKHBvaW50ZXIucG9pbnRlclR5cGUpXG4gICAgICA/IHBvaW50ZXIucG9pbnRlclR5cGVcbiAgICAgIDogaXMubnVtYmVyKHBvaW50ZXIucG9pbnRlclR5cGUpXG4gICAgICAgID8gW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCAndG91Y2gnLCAncGVuJywgJ21vdXNlJ11bcG9pbnRlci5wb2ludGVyVHlwZV1cbiAgICAgICAgLy8gaWYgdGhlIFBvaW50ZXJFdmVudCBBUEkgaXNuJ3QgYXZhaWxhYmxlLCB0aGVuIHRoZSBcInBvaW50ZXJcIiBtdXN0XG4gICAgICAgIC8vIGJlIGVpdGhlciBhIE1vdXNlRXZlbnQsIFRvdWNoRXZlbnQsIG9yIFRvdWNoIG9iamVjdFxuICAgICAgICA6IC90b3VjaC8udGVzdChwb2ludGVyLnR5cGUpIHx8IHBvaW50ZXIgaW5zdGFuY2VvZiBkb20uVG91Y2hcbiAgICAgICAgICA/ICd0b3VjaCdcbiAgICAgICAgICA6ICdtb3VzZSdcbiAgfSxcblxuICAvLyBbIGV2ZW50LnRhcmdldCwgZXZlbnQuY3VycmVudFRhcmdldCBdXG4gIGdldEV2ZW50VGFyZ2V0cyAoZXZlbnQpIHtcbiAgICBjb25zdCBwYXRoID0gaXMuZnVuYyhldmVudC5jb21wb3NlZFBhdGgpID8gZXZlbnQuY29tcG9zZWRQYXRoKCkgOiBldmVudC5wYXRoXG5cbiAgICByZXR1cm4gW1xuICAgICAgZG9tVXRpbHMuZ2V0QWN0dWFsRWxlbWVudChwYXRoID8gcGF0aFswXSA6IGV2ZW50LnRhcmdldCksXG4gICAgICBkb21VdGlscy5nZXRBY3R1YWxFbGVtZW50KGV2ZW50LmN1cnJlbnRUYXJnZXQpLFxuICAgIF1cbiAgfSxcblxuICBuZXdDb29yZHMgKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlICAgICA6IHsgeDogMCwgeTogMCB9LFxuICAgICAgY2xpZW50ICAgOiB7IHg6IDAsIHk6IDAgfSxcbiAgICAgIHRpbWVTdGFtcDogMCxcbiAgICB9XG4gIH0sXG5cbiAgY29vcmRzVG9FdmVudCAoeyBwYWdlLCBjbGllbnQsIHRpbWVTdGFtcCB9OiBhbnkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZSxcbiAgICAgIGNsaWVudCxcbiAgICAgIHRpbWVTdGFtcCxcbiAgICAgIGdldCBwYWdlWCAoKSB7IHJldHVybiBwYWdlLnggfSxcbiAgICAgIGdldCBwYWdlWSAoKSB7IHJldHVybiBwYWdlLnkgfSxcbiAgICAgIGdldCBjbGllbnRYICgpIHsgcmV0dXJuIGNsaWVudC54IH0sXG4gICAgICBnZXQgY2xpZW50WSAoKSB7IHJldHVybiBjbGllbnQueSB9LFxuICAgIH1cbiAgfSxcbn1cblxuZXhwb3J0IGRlZmF1bHQgcG9pbnRlclV0aWxzXG4iXX0= \ No newline at end of file diff --git a/packages/utils/tests/normalizeListeners.d.ts b/packages/utils/tests/normalizeListeners.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/utils/tests/normalizeListeners.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/utils/tests/normalizeListeners.js b/packages/utils/tests/normalizeListeners.js new file mode 100644 index 000000000..89ef2c34e --- /dev/null +++ b/packages/utils/tests/normalizeListeners.js @@ -0,0 +1,44 @@ +import test from '@interactjs/_dev/test/test'; +import normalizeListeners from '../normalizeListeners'; +test('utils/normalizeListeners', (t) => { + const a = () => { }; + const b = () => { }; + const c = () => { }; + t.deepEqual(normalizeListeners('type1', a), { + type1: [a], + }, 'single type, single listener function'); + t.deepEqual(normalizeListeners('type1 type2', a), { + type1: [a], + type2: [a], + }, 'multiple types, single listener function'); + t.deepEqual(normalizeListeners('type1 type2', a), normalizeListeners(['type1', 'type2'], a), 'array of types equivalent to space separated string'); + t.deepEqual(normalizeListeners('type1', [a, b]), { + type1: [a, b], + }, 'single type, multiple listener functions'); + t.deepEqual(normalizeListeners('prefix', { _1: [a, b], _2: [b, c] }), { + prefix_1: [a, b], + prefix_2: [b, c], + }, 'single type prefix, object of { suffix: [fn, ...] }'); + t.deepEqual(normalizeListeners('prefix1 prefix2', [{ _1: [a, b], _2: [b, c] }]), { + prefix1_1: [a, b], + prefix1_2: [b, c], + prefix2_1: [a, b], + prefix2_2: [b, c], + }, 'multiple type prefixes, single length array of { suffix: [fn, ...] }'); + t.deepEqual(normalizeListeners({ _1: [a, b], _2: [b, c] }), { + _1: [a, b], + _2: [b, c], + }, 'object of { suffix: [fn, ...] } as type arg'); + t.deepEqual(normalizeListeners({ '_1 _2': [a, b], '_3': [b, c] }), { + _1: [a, b], + _2: [a, b], + _3: [b, c], + }, 'object of { "suffix1 suffix2": [fn, ...], ... } as type arg'); + t.deepEqual(normalizeListeners('prefix', { '_1 _2': [a, b], '_3': [b, c] }), { + prefix_1: [a, b], + prefix_2: [a, b], + prefix_3: [b, c], + }, 'single type prefix, object of { "suffix1 suffix2": [fn, ...], ... }'); + t.end(); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplTGlzdGVuZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibm9ybWFsaXplTGlzdGVuZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sa0JBQWtCLE1BQU0sdUJBQXVCLENBQUE7QUFFdEQsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7SUFDckMsTUFBTSxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFBO0lBQ2xCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQTtJQUNsQixNQUFNLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUE7SUFFbEIsQ0FBQyxDQUFDLFNBQVMsQ0FDVCxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQzlCO1FBQ0UsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ1gsRUFDRCx1Q0FBdUMsQ0FBQyxDQUFBO0lBRTFDLENBQUMsQ0FBQyxTQUFTLENBQ1Qsa0JBQWtCLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxFQUNwQztRQUNFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNWLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNYLEVBQ0QsMENBQTBDLENBQUMsQ0FBQTtJQUU3QyxDQUFDLENBQUMsU0FBUyxDQUNULGtCQUFrQixDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsRUFDcEMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ3pDLHFEQUFxRCxDQUFDLENBQUE7SUFFeEQsQ0FBQyxDQUFDLFNBQVMsQ0FDVCxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDbkM7UUFDRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ2QsRUFDRCwwQ0FBMEMsQ0FBQyxDQUFBO0lBRTdDLENBQUMsQ0FBQyxTQUFTLENBQ1Qsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQ3hEO1FBQ0UsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ2pCLEVBQ0QscURBQXFELENBQUMsQ0FBQTtJQUV4RCxDQUFDLENBQUMsU0FBUyxDQUNULGtCQUFrQixDQUFDLGlCQUFpQixFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUNuRTtRQUNFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakIsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQixTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbEIsRUFDRCxzRUFBc0UsQ0FBQyxDQUFBO0lBRXpFLENBQUMsQ0FBQyxTQUFTLENBQ1Qsa0JBQWtCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDOUM7UUFDRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ1YsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNYLEVBQ0QsNkNBQTZDLENBQUMsQ0FBQTtJQUVoRCxDQUFDLENBQUMsU0FBUyxDQUNULGtCQUFrQixDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQ3JEO1FBQ0UsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNWLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDVixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ1gsRUFDRCw2REFBNkQsQ0FBQyxDQUFBO0lBRWhFLENBQUMsQ0FBQyxTQUFTLENBQ1Qsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQy9EO1FBQ0UsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDakIsRUFDRCxxRUFBcUUsQ0FBQyxDQUFBO0lBRXhFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgbm9ybWFsaXplTGlzdGVuZXJzIGZyb20gJy4uL25vcm1hbGl6ZUxpc3RlbmVycydcblxudGVzdCgndXRpbHMvbm9ybWFsaXplTGlzdGVuZXJzJywgKHQpID0+IHtcbiAgY29uc3QgYSA9ICgpID0+IHt9XG4gIGNvbnN0IGIgPSAoKSA9PiB7fVxuICBjb25zdCBjID0gKCkgPT4ge31cblxuICB0LmRlZXBFcXVhbChcbiAgICBub3JtYWxpemVMaXN0ZW5lcnMoJ3R5cGUxJywgYSksXG4gICAge1xuICAgICAgdHlwZTE6IFthXSxcbiAgICB9LFxuICAgICdzaW5nbGUgdHlwZSwgc2luZ2xlIGxpc3RlbmVyIGZ1bmN0aW9uJylcblxuICB0LmRlZXBFcXVhbChcbiAgICBub3JtYWxpemVMaXN0ZW5lcnMoJ3R5cGUxIHR5cGUyJywgYSksXG4gICAge1xuICAgICAgdHlwZTE6IFthXSxcbiAgICAgIHR5cGUyOiBbYV0sXG4gICAgfSxcbiAgICAnbXVsdGlwbGUgdHlwZXMsIHNpbmdsZSBsaXN0ZW5lciBmdW5jdGlvbicpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgbm9ybWFsaXplTGlzdGVuZXJzKCd0eXBlMSB0eXBlMicsIGEpLFxuICAgIG5vcm1hbGl6ZUxpc3RlbmVycyhbJ3R5cGUxJywgJ3R5cGUyJ10sIGEpLFxuICAgICdhcnJheSBvZiB0eXBlcyBlcXVpdmFsZW50IHRvIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcnKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIG5vcm1hbGl6ZUxpc3RlbmVycygndHlwZTEnLCBbYSwgYl0pLFxuICAgIHtcbiAgICAgIHR5cGUxOiBbYSwgYl0sXG4gICAgfSxcbiAgICAnc2luZ2xlIHR5cGUsIG11bHRpcGxlIGxpc3RlbmVyIGZ1bmN0aW9ucycpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgbm9ybWFsaXplTGlzdGVuZXJzKCdwcmVmaXgnLCB7IF8xOiBbYSwgYl0sIF8yOiBbYiwgY10gfSksXG4gICAge1xuICAgICAgcHJlZml4XzE6IFthLCBiXSxcbiAgICAgIHByZWZpeF8yOiBbYiwgY10sXG4gICAgfSxcbiAgICAnc2luZ2xlIHR5cGUgcHJlZml4LCBvYmplY3Qgb2YgeyBzdWZmaXg6IFtmbiwgLi4uXSB9JylcblxuICB0LmRlZXBFcXVhbChcbiAgICBub3JtYWxpemVMaXN0ZW5lcnMoJ3ByZWZpeDEgcHJlZml4MicsIFt7IF8xOiBbYSwgYl0sIF8yOiBbYiwgY10gfV0pLFxuICAgIHtcbiAgICAgIHByZWZpeDFfMTogW2EsIGJdLFxuICAgICAgcHJlZml4MV8yOiBbYiwgY10sXG4gICAgICBwcmVmaXgyXzE6IFthLCBiXSxcbiAgICAgIHByZWZpeDJfMjogW2IsIGNdLFxuICAgIH0sXG4gICAgJ211bHRpcGxlIHR5cGUgcHJlZml4ZXMsIHNpbmdsZSBsZW5ndGggYXJyYXkgb2YgeyBzdWZmaXg6IFtmbiwgLi4uXSB9JylcblxuICB0LmRlZXBFcXVhbChcbiAgICBub3JtYWxpemVMaXN0ZW5lcnMoeyBfMTogW2EsIGJdLCBfMjogW2IsIGNdIH0pLFxuICAgIHtcbiAgICAgIF8xOiBbYSwgYl0sXG4gICAgICBfMjogW2IsIGNdLFxuICAgIH0sXG4gICAgJ29iamVjdCBvZiB7IHN1ZmZpeDogW2ZuLCAuLi5dIH0gYXMgdHlwZSBhcmcnKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIG5vcm1hbGl6ZUxpc3RlbmVycyh7ICdfMSBfMic6IFthLCBiXSwgJ18zJzogW2IsIGNdIH0pLFxuICAgIHtcbiAgICAgIF8xOiBbYSwgYl0sXG4gICAgICBfMjogW2EsIGJdLFxuICAgICAgXzM6IFtiLCBjXSxcbiAgICB9LFxuICAgICdvYmplY3Qgb2YgeyBcInN1ZmZpeDEgc3VmZml4MlwiOiBbZm4sIC4uLl0sIC4uLiB9IGFzIHR5cGUgYXJnJylcblxuICB0LmRlZXBFcXVhbChcbiAgICBub3JtYWxpemVMaXN0ZW5lcnMoJ3ByZWZpeCcsIHsgJ18xIF8yJzogW2EsIGJdLCAnXzMnOiBbYiwgY10gfSksXG4gICAge1xuICAgICAgcHJlZml4XzE6IFthLCBiXSxcbiAgICAgIHByZWZpeF8yOiBbYSwgYl0sXG4gICAgICBwcmVmaXhfMzogW2IsIGNdLFxuICAgIH0sXG4gICAgJ3NpbmdsZSB0eXBlIHByZWZpeCwgb2JqZWN0IG9mIHsgXCJzdWZmaXgxIHN1ZmZpeDJcIjogW2ZuLCAuLi5dLCAuLi4gfScpXG5cbiAgdC5lbmQoKVxufSlcbiJdfQ== \ No newline at end of file diff --git a/test/domator.d.ts b/test/domator.d.ts new file mode 100644 index 000000000..778d1f949 --- /dev/null +++ b/test/domator.d.ts @@ -0,0 +1,5 @@ +import domator from 'domator'; +import { jsdom } from 'jsdom'; +declare const doc: any; +export { domator, doc, jsdom, }; +export default domator; diff --git a/test/domator.js b/test/domator.js new file mode 100644 index 000000000..3531b31ef --- /dev/null +++ b/test/domator.js @@ -0,0 +1,9 @@ +import domator from 'domator'; +import { jsdom } from 'jsdom'; +const doc = typeof window === 'undefined' + ? jsdom('') + : window.document; +domator.setDocument(doc); +export { domator, doc, jsdom, }; +export default domator; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRvbWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFBO0FBQzdCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFFN0IsTUFBTSxHQUFHLEdBQUcsT0FBTyxNQUFNLEtBQUssV0FBVztJQUN2QyxDQUFDLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxDQUFDO0lBQ3BELENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFBO0FBRW5CLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7QUFFeEIsT0FBTyxFQUNMLE9BQU8sRUFDUCxHQUFHLEVBQ0gsS0FBSyxHQUNOLENBQUE7QUFFRCxlQUFlLE9BQU8sQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkb21hdG9yIGZyb20gJ2RvbWF0b3InXG5pbXBvcnQgeyBqc2RvbSB9IGZyb20gJ2pzZG9tJ1xuXG5jb25zdCBkb2MgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJ1xuICA/IGpzZG9tKCc8IURPQ1RZUEUgaHRtbD48aHRtbD48Ym9keT48L2JvZHk+PC9odG1sPicpXG4gIDogd2luZG93LmRvY3VtZW50XG5cbmRvbWF0b3Iuc2V0RG9jdW1lbnQoZG9jKVxuXG5leHBvcnQge1xuICBkb21hdG9yLFxuICBkb2MsXG4gIGpzZG9tLFxufVxuXG5leHBvcnQgZGVmYXVsdCBkb21hdG9yXG4iXX0= \ No newline at end of file diff --git a/test/index.d.ts b/test/index.d.ts new file mode 100644 index 000000000..0f1cbfb40 --- /dev/null +++ b/test/index.d.ts @@ -0,0 +1,7 @@ +declare const glob: any; +declare const path: any; +declare const globOptions: { + ignore: string; +}; +declare const fileArgs: string[]; +declare function getMatches(pattern: any): Promise; diff --git a/test/index.js b/test/index.js new file mode 100644 index 000000000..60bbf1e90 --- /dev/null +++ b/test/index.js @@ -0,0 +1,24 @@ +// tslint:disable no-var-requires +require('ts-node/register'); +const glob = require('glob'); +const path = require('path'); +const globOptions = { ignore: '**/node_modules/**' }; +const [, , ...fileArgs] = process.argv; +function getMatches(pattern) { + return new Promise((resolve, reject) => { + glob(pattern, globOptions, (error, files) => { + if (error) { + reject(error); + } + else { + resolve(files); + } + }); + }); +} +(fileArgs.length ? Promise.resolve(fileArgs) : getMatches('**/tests/**/*.ts')).then((tests) => { + for (const file of tests) { + require(path.resolve(file)); + } +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQ0FBaUM7QUFFakMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUE7QUFFM0IsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQzVCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUU1QixNQUFNLFdBQVcsR0FBRyxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxDQUFBO0FBRXBELE1BQU0sQ0FBQyxFQUFFLEFBQUQsRUFBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUE7QUFFdEMsU0FBUyxVQUFVLENBQUUsT0FBTztJQUMxQixPQUFPLElBQUksT0FBTyxDQUFXLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQy9DLElBQUksQ0FDRixPQUFPLEVBQ1AsV0FBVyxFQUNYLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2YsSUFBSSxLQUFLLEVBQUU7Z0JBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO2FBQUU7aUJBQ3ZCO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTthQUFFO1FBQ3pCLENBQUMsQ0FDRixDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO0lBQzVGLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7S0FDNUI7QUFDSCxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlIG5vLXZhci1yZXF1aXJlc1xuXG5yZXF1aXJlKCd0cy1ub2RlL3JlZ2lzdGVyJylcblxuY29uc3QgZ2xvYiA9IHJlcXVpcmUoJ2dsb2InKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuXG5jb25zdCBnbG9iT3B0aW9ucyA9IHsgaWdub3JlOiAnKiovbm9kZV9tb2R1bGVzLyoqJyB9XG5cbmNvbnN0IFssICwgLi4uZmlsZUFyZ3NdID0gcHJvY2Vzcy5hcmd2XG5cbmZ1bmN0aW9uIGdldE1hdGNoZXMgKHBhdHRlcm4pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZ1tdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZ2xvYihcbiAgICAgIHBhdHRlcm4sXG4gICAgICBnbG9iT3B0aW9ucyxcbiAgICAgIChlcnJvciwgZmlsZXMpID0+IHtcbiAgICAgICAgaWYgKGVycm9yKSB7IHJlamVjdChlcnJvcikgfVxuICAgICAgICBlbHNlIHsgcmVzb2x2ZShmaWxlcykgfVxuICAgICAgfVxuICAgIClcbiAgfSlcbn1cblxuKGZpbGVBcmdzLmxlbmd0aCA/IFByb21pc2UucmVzb2x2ZShmaWxlQXJncykgOiBnZXRNYXRjaGVzKCcqKi90ZXN0cy8qKi8qLnRzJykpLnRoZW4oKHRlc3RzKSA9PiB7XG4gIGZvciAoY29uc3QgZmlsZSBvZiB0ZXN0cykge1xuICAgIHJlcXVpcmUocGF0aC5yZXNvbHZlKGZpbGUpKVxuICB9XG59KVxuIl19 \ No newline at end of file diff --git a/test/test.d.ts b/test/test.d.ts new file mode 100644 index 000000000..f42a02191 --- /dev/null +++ b/test/test.d.ts @@ -0,0 +1,2 @@ +import tape from 'tape'; +export default tape; diff --git a/test/test.js b/test/test.js new file mode 100644 index 000000000..e1246b6a5 --- /dev/null +++ b/test/test.js @@ -0,0 +1,3 @@ +import tape from 'tape'; +export default tape; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBRXZCLGVBQWUsSUFBSSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRhcGUgZnJvbSAndGFwZSdcblxuZXhwb3J0IGRlZmF1bHQgdGFwZVxuIl19 \ No newline at end of file